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

 
Natashe4ka:

Dies ist auch korrekt, wenn "cnt" auf Null gesetzt wird, aber dann ist der Wert wieder unverständlich wie in Screenshot 3 (sollte ein Gewinnwert von 4,27 sein)

double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  int cnt=0;
  double LastProfit=0;
   for(i=0;i<OrdersHistoryTotal();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 ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
       }
  return(LastProfit);
   }

Es ist nicht gut, wenn ich nicht logisch denken kann(

Sehen Sie, auf dem realen Markt wird das Depot mit dieser Logik in 3 Tagen schmelzen.

 
Vitaly Muzichenko:
Es ist schlimm, wenn man nicht logisch denkt(

Das ist richtig.

Der ausstehende Auftrag wurde gelöscht

 
Natashe4ka:

Das ist richtig.

Der ausstehende Auftrag wurde gelöscht

Das ist ohnehin verständlich.
 

OK, wie geben Sie dann ein Ticket der geschlossenen Aufträge zurück, die gleich OrderCloseTime() sind, und berechnen ihren Gewinn?
Zum Beispiel so:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}
 
Natashe4ka:

OK, wie geben Sie dann ein Ticket der geschlossenen Aufträge zurück, die gleich OrderCloseTime() sind, und berechnen ihren Gewinn?
Etwa so:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


Was ist, wenn sie an einer Haltestelle geschlossen wird?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

 
Ich habe ein System zur Aufzeichnung des kumulierten Drawdowns oder Gewinns geschrieben, das in etwa so aussah: Für jede Marktorder wird während der Eröffnung eine globale Variable mit dem Ticketnamen dieser Order erstellt, und wenn wir den kumulierten Gewinn/Verlust neu berechnen müssen, überprüfen wir einfach die aktuelle Liste der Orders mit der Liste der globalen Variablen und nehmen eine Zählung vor, indem wir unnötige Variablen löschen und den Gewinn direkt zum Ticketnamen hinzufügen.
 
Renat Akhtyamov:

Was ist, wenn sie an einer Haltestelle geschlossen wird?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

Nun, welche Felder, welche Tickets, welche Aufträge?

Nach dem ersten Neustart des Terminals oder dem Herunterfahren über das Wochenende gehen einfach alle Daten verloren, und das ist das Ende aller Schreib- und Rechenvorgänge.

 
Aleksey Semenov:
Als ich zum Beispiel für mich selbst ein System zum Zählen des kumulierten Drawdowns oder Gewinns schrieb, sah es so aus: Für jede Marktorder wird während der Eröffnung eine globale Variable mit dem Ticketnamen dieser Order erstellt, und wenn wir den Gewinn/Verlust neu berechnen wollen, überprüfen wir einfach die aktuelle Orderliste mit der Liste der globalen Variablen und führen die Berechnung durch, indem wir die überschüssigen Variablen löschen und den Gewinn direkt zum Ticket aus dem Namen hinzufügen.

Dies ist eine große Belastung für das System, in einem Indikator funktioniert es gut, aber in einem EA die Aufzählung von Dutzenden von globalen Variablen kann mit einem Hang des Terminals enden.

Es gibt eine Öffnungs- und Schließungszeit, man muss damit arbeiten, und es gibt keine Schwierigkeiten, sie zu bekommen, und mit einem einzigen Datensatz kann man alle Informationen über den Stand des Kontos bekommen, und man braucht kein Fahrrad.

 
Vitaly Muzichenko:

Welche Arrays, welche Tickets, welche Aufträge?

Nach dem ersten Neustart des Terminals oder nach dem Herunterfahren am Wochenende gehen einfach alle Daten verloren, und das ist das Ende aller Schreib- und Rechenvorgänge.

es ist lösbar

Das brauche ich Ihnen nicht zu erklären.

 
Vitaly Muzichenko:

Dies ist eine große Belastung für das System, in einem Indikator funktioniert es gut, aber in einem EA die Aufzählung von Dutzenden von globalen Variablen kann mit einem Hang des Terminals enden.

Es gibt Eröffnungs- und Schließungszeiten, damit muss man arbeiten, und es ist nicht schwer, sie zu bekommen, mit einem einzigen Datensatz kann man alle Informationen über den Stand des Kontos bekommen, und man braucht kein Fahrrad.

Wenn Sie z.B. ein Terminal mit hunderten von unbenutzten glob-Variablen haben, dann ja - der Rebuild wird traurig enden, wenn nicht, dann funktioniert es recht schnell, wenn es richtig geschrieben ist