Cálculo de beneficios de las órdenes cerradas "AYUDA" - página 3

 
Vitaly Muzichenko:
No encaja, no hay información para 10 años.

Tampoco es lo mismo para ti.

La variable t cambiará y te quedarás atónito.

Hay que memorizarlo antes de empezar a cerrar la serie

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:

Tampoco es lo mismo para ti.

La variable t cambiará y te quedarás atónito.

Hay que memorizarlo antes de que se cierre la serie.

¿Lo has probado?

Se memoriza antes del cierre, en el momento de la señal de cierre.

 
Vitaly Muzichenko:
No es adecuado, no hay información para 10 años.

Beneficio actual, , todo el historial.

Por cierto, se puede ajustar a cualquier fecha y hora.

 
Vitaly Muzichenko:

Prueba con


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);
}

El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la captura de pantalla #3 debería ser 4, no 190

 
Vitaly Muzichenko:

¿Lo has probado?

Recuerda antes de cerrar, en el momento en que se recibe la señal de cierre

Sólo hay que leer el código.
 

Eso, también, 190

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

El beneficio recuerda cada nuevo, pero entonces algo cuenta desconocido. En la pantalla #3 debería ser 4, no 190

Este es el código, a mí me funciona bien, pero quizás porque la serie está cerrada correctamente

Archivos adjuntos:
info.mq4  9 kb
 
Natashe4ka:

Así que también 190

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


¿Dónde se encuentra el comando para cerrar las órdenes?

¿Escribiste la variable t ahí?

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

¿Dónde se encuentra el comando para cerrar las órdenes?

¿Has escrito la variable t ahí?

t=TimeCurrent();//colocar en el bloque de señales para cerrar una serie de órdenes

Todo está ahí, por supuesto.

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

Todo está ahí, por supuesto.

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


No, esta línea se elimina. Esto ya es un cálculo de beneficios, no funcionará así.

Donde el comando para cerrar en el código - allí, pero no una línea de este tipo

Lea arriba.

Razón de la queja: