Wir müssen eine Bedingung für die Aufteilung abgeschlossener Aufträge in Serien hinzufügen
Nennen Sie uns den Algorithmus oder das Teilungsprinzip
Wie kann man erreichen, dass jeder geschlossene Gewinn einer Serie ein neuer Gewinn ist und nicht der vorherige (5; 5; 5)? .....
Anstelle der arithmetischen Summierung fügen Sie sie einer Zeichenkette mit einem Leerzeichen oder einem Semikolon und einem Leerzeichen hinzu, je nachdem, was Sie bevorzugen
Eine gute Idee.
Oder wir könnten sie in ein Array packen.
Der Gewinn der geschlossenen Aufträge wird korrekt berücksichtigt, aber nach dem Schließen wird der Wert zum vorherigen addiert (5; 5+5=10; 10+5=15)
Wie kann man erreichen, dass jeder geschlossene Gewinn einer Serie ein neuer ist, anstatt des vorherigen (5; 5; 5)?
In einer Reihe von geschlossenen Aufträgen kann es Kauf- und Verkaufsaufträge oder nur Kauf- und Verkaufsaufträge geben.
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=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()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
Es ist kompliziert, gibt es etwas Einfacheres?
Und können Sie Beispiele nennen, weil Ihr Gehirn kocht?
Das ist ein bisschen kompliziert; gibt es etwas Einfacheres?
Nein, es wird nicht einfacher werden. Es werden immer ALLE Aufträge gezählt, auch die, die bei der vorherigen Verwendung der FunktionLastProfitCL gezählt wurden.Und da es immer mehr Aufträge gibt, steigt auch die Höhe des Gewinns.
Wir müssen die Bedingung ausarbeiten, unter der die Schleife unterbrochen wird, wenn die neuen Aufträge abgeschlossen sind.
Wir müssen eine Bedingung ausarbeiten, unter der die Schleife unterbrochen wird, wenn die neuen Aufträge ausgehen.
So, das ist der richtige Weg, darüber nachzudenken))
So, das ist der richtige Weg, darüber nachzudenken))
Und?
Wo ist die Bedingung?
Und?
Wo ist die Bedingung?
etwa so:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
und man muss irgendwie cnt new von past subtrahieren
cnt 1,2,3 past
cnt 4,5,6 new
etwa so:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
und man muss irgendwie cnt new von past subtrahieren
cnt 1,2,3 past
cnt 4,5,6 new
Nein, ich meine nicht so, wie Sie es bereits geschrieben haben.
Nennen Sie mir in Worten die Gewinnberechnung für abgeschlossene Aufträge, an denen Sie interessiert sind
zum Beispiel:
- für den Tag
- verlustreich
- letzte Bestellung
oder etwas anderes?
Beschreiben Sie die Serie
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Der Gewinn der geschlossenen Aufträge wird korrekt berücksichtigt, aber nach dem Schließen wird der Wert zum vorherigen addiert (5; 5+5=10; 10+5=15)
Wie kann man erreichen, dass jeder geschlossene Gewinn einer Serie ein neuer ist, anstatt des vorherigen (5; 5; 5)?
In einer Reihe von geschlossenen Aufträgen kann es Kauf- und Verkaufsaufträge oder nur Kauf- und Verkaufsaufträge geben.
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=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 (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}