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

 
Vitaly Muzichenko:
Es passt nicht, es gibt keine Informationen für 10 Jahre.

Für Sie ist es auch nicht dasselbe.

Die t-Variable wird sich ändern und Sie werden aghtung sein.

Sie muss auswendig gelernt werden, bevor Sie mit dem Schließen der Serie beginnen.

color ProfitColor;
datetime t;


// START //
//t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров

   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)

        {

          if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
       }

       }
  return(LastProfit);
   }

 
Renat Akhtyamov:

Für Sie ist es auch nicht dasselbe.

Die t-Variable wird sich ändern und Sie werden erschrecken.

Sie muss auswendig gelernt werden, bevor die Serie zu Ende ist.

Haben Sie es ausprobiert?

Es wird vor dem Schließen gespeichert, in dem Moment, in dem das Signal zum Schließen gegeben wird.

 
Vitaly Muzichenko:
Sie ist nicht geeignet, es gibt keine Informationen für 10 Jahre.

Aktueller Gewinn, , alle Historien.

Sie kann übrigens auf ein beliebiges Datum und eine beliebige Uhrzeit eingestellt werden.

 
Vitaly Muzichenko:

Versuchen Sie


Comment( LastProfitCL(-1, 0) );

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

 return(LastProfit);
}

Gewinn merkt sich jeder Neue, aber dann zählt etwas Unbekanntes. In Bildschirmfoto Nr. 3 sollte es 4 sein, nicht 190.

 
Vitaly Muzichenko:

Haben Sie es ausprobiert?

Es merkt sich, bevor es schließt, den Moment, in dem das Schließsignal empfangen wird

Lesen Sie einfach den Code.
 

Auch das, 190

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

Gewinn merkt sich jeder Neue, aber dann zählt etwas Unbekanntes. In Bildschirm Nr. 3 sollte es 4 sein, nicht 190.

Hier ist der Code, es funktioniert gut für mich, aber vielleicht, weil die Serie korrekt geschlossen ist

Dateien:
info.mq4  9 kb
 
Natashe4ka:

Also auch 190

if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


Wo befindet sich der Befehl zum Schließen von Aufträgen?

Haben Sie die Variable t dort hineingeschrieben?

t=TimeCurrent();//разместить в блоке сигнала на закрытие серии ордеров
 
Renat Akhtyamov:

Wo befindet sich der Befehl zum Schließen von Aufträgen?

Haben Sie die Variable t dort hineingeschrieben?

t=TimeCurrent();//Platz im Signalblock für den Abschluss einer Reihe von Aufträgen

Es ist natürlich alles da.

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
 
Natashe4ka:

Es ist natürlich alles da.

if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();


Nein, diese Zeile wird entfernt. Dies ist bereits eine Gewinnberechnung, die so nicht funktionieren wird.

Wo der Befehl in den Code zu schließen - es, aber nicht eine solche Zeile

Lesen Sie oben.

Grund der Beschwerde: