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

 
Natashe4ka:
Die Aufträge werden nacheinander geschlossen, aber wenn es keine Abschlussbedingungen gibt, werden die Aufträge ein oder zwei Tage lang gesammelt usw.

Wenn die Serie praktisch während eines Zyklus geschlossen wird, z. B. während der Lebensdauer eines Balkens, dann können wir das Kriterium der Serie um den Zeitpunkt des Schließens plus einen Balken nehmen. Das heißt, dass alle Aufträge, deren Abschlusszeitpunkt unter diesem Wert liegt, verworfen werden sollten.

Es besteht jedoch die Sorge, dass dies nur im Testprogramm funktioniert; jeder manuelle Eingriff führt zu einer falschen Gewinnberechnung (nur der Gewinn des EA wird berücksichtigt, der manuelle Handel jedoch nicht).

 
Vitalie Postolache:
Wenn die Serie praktisch während eines Zyklus geschlossen wird, z. B. während der Lebensdauer eines Balkens, dann können wir das Serienkriterium durch den Zeitpunkt des Schließens plus einen Balken nehmen. Das heißt, dass alle Aufträge, deren Abschlusszeitpunkt unter diesem Wert liegt, verworfen werden sollten.

D.h.

if ((op<0||OrderType()==op) && (t==OrderCloseTime() ||  t==OrderCloseTime()+60)) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

(t==OrderCloseTime()||t==OrderCloseTime()+60)?

 
Natashe4ka:

D.h.

if ((op<0||OrderType()==op) && t==OrderCloseTime()+60) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

+60 ?

PeriodSeconds() wäre korrekter. Oder werden Sie nur auf der M1 arbeiten?

Etwa so:

double lastloss()
{
double lastlos=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0) time=OrderCloseTime();
            op=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
            lastlos+=op;
            if(cnt!=0) cnt++;
         }
      }
}
return(lastlos);
}
 
Vitalie Postolache:

Etwa so:

Dadurch wird ein neuer Wert zum vorherigen Wert hinzugefügt. Aber jeder neue Abschluss bedeutet einen neuen Wert für den Gewinn.
 

Und Sie können die Aufträge im Kommentar auch nummerieren, für diejenigen DCs, die den Kommentar nicht überschreiben. Und wenn man die Nummer aus dem Kommentar ausprobiert, ist die Serie zu Ende, sobald die Nummer nicht mehr in Ordnung ist.

Beispiel: Auftragsseriennummer 1,2,3,4,5. Geschlossen in der Reihenfolge 5,4,3,2,1 - die Schleife sieht 1 und unterbricht. Schließen in der Reihenfolge 1,2,3,4,5 und 1 (die Ordnungsnummer der vorherigen Reihe) - die Schleife sieht die Differenz 5-1>1 und bricht ab. Ich muss mir überlegen, wie ich das in Code übersetzen kann ))))

 
Natashe4ka:
Es wird also ein neuer Wert zum vorherigen Wert hinzugefügt. Und jeder neue Abschluss bedeutet einen neuen Wert für den Gewinn.
Ich weiß nicht, das ergibt für mich keinen Sinn.
 
Vitalie Postolache:
Ich weiß nicht, das ergibt für mich keinen Sinn.

Legen Sie die Informationen an und Sie werden sehen, dass es sich summiert.

color ProfitColor;

   if(lastloss()<0) ProfitColor=Red;
   if(lastloss()>0) ProfitColor=LimeGreen;
   if(lastloss()==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(lastloss(),2)),10,"Arial",ProfitColor);
 
Natashe4ka:

Geben Sie die Daten ein, und Sie werden sofort sehen, was sich summiert.

Hmm, ja, in der Tat... Denken wir weiter: ))))
 
Soweit ich weiß, ist dies ein Test im Tester....
 
Vitalie Postolache:
Hmm, ja, in der Tat... Denken wir weiter: ))))

Ich war auch der Meinung, dass es so gezählt wurde, wie es sollte.
Ich hätte diese Information nicht in den Code aufnehmen sollen, dann wäre das Leben einfacher gewesen).

Und jetzt ist es rätselhaft, wie die Funktion die ganze Zeit über nicht richtig funktionieren konnte!!!

Grund der Beschwerde: