Gewinnberechnung von abgeschlossenen Aufträgen "HELP" - Seite 6

 
Aleksey Semenov:
Wenn Sie z.B. ein Terminal mit hunderten von unbenutzten glob-Variablen haben, dann ja - das Schott wird traurig enden, wenn nicht, funktioniert es recht schnell, wenn es richtig geschrieben ist
Sie können Ihr eigenes Protokoll erstellen
 
Aleksey Semenov:
Wenn zum Beispiel Ihr Terminal voll von Hunderten von unbenutzten glob-Variablen ist, dann ja - Overkill wird traurig sein, wenn nicht, es funktioniert ziemlich schnell, wenn Sie es richtig schreiben
Ich habe nichts dagegen, aber es ist besser, einfachere Wege zu finden, wenn möglich. Oder wir suchen nicht nach einfachen Wegen) ?
 
Vitaly Muzichenko:
Das macht mir nichts aus, aber es ist besser, wenn man einen einfacheren Weg findet, wenn möglich. Oder sind wir nicht auf der Suche nach einfachen Wegen?
das Wichtigste ist, dass Sie selbst anfangen zu schreiben
 
Vitaly Muzichenko:
Das macht mir nichts aus, aber es ist besser, wenn man einen einfacheren Weg findet, wenn möglich. Oder suchen wir nicht nach einem einfachen Weg?
Wo also ist der einfache Weg, die Frage ist noch offen.
 

Wir haben das Problem immer noch nicht gelöst, obwohl es sich um eine notwendige Funktion handelt und viele Händler sie nutzen, ohne zu wissen, dass sie den Gewinn von geschlossenen Aufträgen nicht korrekt berechnet.
Das ist der Grund, warum eine einfache Lösung: LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); nicht funktioniert, und jeder schraubt weiter an den historischen Aufträgen in seinen Codes.

Selbst im gesamten Netz gibt es keine kompetente Lösung - sagt "google". Es stellt sich also heraus, dass alle die falsche Standardlösung verwenden oder die richtige, aber nur die letzte Reihenfolge?

 
Natashe4ka:

Wir haben das Problem noch nicht gelöst, obwohl dies eine notwendige Funktion ist und viele Leute sie benutzen und nicht wissen, dass der Gewinn von geschlossenen Aufträgen nicht korrekt berücksichtigt wird.
Das ist der Grund, warum eine einfache Lösung: LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); nicht funktioniert, und jeder schraubt weiter an historischen Aufträgen in seinen Codes.

Selbst im gesamten Netz gibt es keine kompetente Lösung - sagt "google". Es stellt sich also heraus, dass alle die falsche Standardlösung verwenden oder die richtige, aber nur die letzte Reihenfolge?

Wir haben Sie beraten, Sie haben es nicht bekommen....
 
Renat Akhtyamov:
Wir haben beraten, Sie haben nicht verstanden....

OK, dann schlüsseln wir das mal auf: Es gibt einen Auftragsschluss, es gibt ein Ticket oder eine Anzahl von Aufträgen, die mit dem Auftragsschluss zusammenfallen. Wie können wir diese Aufträge kombinieren und ihren Gewinn berechnen?
Es scheint einfach zu sein, aber wir verstehen es trotzdem nicht.

 

Es zählt richtig, aber nur wenn 1-3 Aufträge geschlossen werden, wenn mehr als 3, dann ist der Gewinn mit einem unklaren Wert.
Was können wir hier noch hinzufügen?

//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
  datetime t=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue;
       if (t<OrderCloseTime()) {t=OrderCloseTime();}
       if ((op<0||OrderType()==op) && t==OrderCloseTime()) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
       }
  return(LastProfit);
   }
 
Natashe4ka:

Es zählt richtig, aber nur wenn 1-3 Aufträge geschlossen werden, wenn mehr als 3, dann ist der Gewinn mit einem unklaren Wert.
Was können wir hier noch hinzufügen?

//+----------------------------------------------------------------------------+
//     Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
  datetime t=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue;
       if (t<OrderCloseTime()) {t=OrderCloseTime();}
       if ((op<0||OrderType()==op) && t==OrderCloseTime()) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
       }
  return(LastProfit);
   }

Haben Sie schon einmal versucht, sich zu fragen: "Warum und was steht in meinem Code?

Ich habe Ihnen oben bereits dreimal gesagt, was zu tun ist und wie Sie es tun sollen.

Sie werden nicht in der Lage sein, sich vom toten Punkt wegzubewegen, da Sie sonst nicht in der Lage sein werden, es zu tun.

 
Natashe4ka:

OK, dann schlüsseln wir das mal auf: Es gibt einen Auftragsschluss, es gibt ein Ticket oder eine Anzahl von Aufträgen, die mit dem Auftragsschluss zusammenfallen. Wie können wir diese Aufträge kombinieren und ihren Gewinn berechnen?
Es scheint einfach zu sein, aber ich verstehe es immer noch nicht.

Speichern Sie all dies irgendwo in einer Variablen oder in einem Array? Zeigen Sie uns zuerst, wo Sie es speichern, dann werden wir sehen, was als nächstes zu tun ist.