Cálculo do lucro de pedidos fechados "HELP - página 3

 
Vitaly Muzichenko:
Não se encaixa, não há informações durante 10 anos.

Também não é a mesma coisa para você.

A variável t mudará e você estará aghtung.

Tem que ser memorizado antes de você começar a fechar a série

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:

Também não é a mesma coisa para você.

A variável t mudará e você ficará horrorizado.

Ela tem que ser memorizada antes do fechamento da série.

Você já tentou?

É memorizado antes do fechamento, no momento o sinal para fechar.

 
Vitaly Muzichenko:
Não é adequado, não há informações durante 10 anos.

Lucro atual, , toda a história.

A propósito, ele pode ser ajustado para qualquer data e hora.

 
Vitaly Muzichenko:

Tente


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

O lucro se lembra de cada novo, mas depois algo conta desconhecido. Na captura de tela nº 3 deve ser 4, e não 190

 
Vitaly Muzichenko:

Você já tentou?

Lembra-se antes de fechar, no momento em que o sinal de fechamento é recebido

Basta ler o código.
 

Isso também, 190

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

O lucro se lembra de cada novo, mas depois algo conta desconhecido. Na tela nº 3 deve ser 4, não 190

Aqui está o código, ele funciona bem para mim, mas talvez porque a série esteja fechada corretamente

Arquivos anexados:
info.mq4  9 kb
 
Natashe4ka:

Assim também 190

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


Onde está localizada a ordem de fechamento dos pedidos?

Você escreveu a variável t ali dentro?

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

Onde está localizada a ordem de fechamento dos pedidos?

Você já escreveu a variável t aí dentro?

t=TimeCurrent();//local no bloco de sinal para fechamento de uma série de pedidos

Está tudo lá, é claro.

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

Está tudo aí, é claro.

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


Não, esta linha é removida. Este já é um cálculo de lucro, não vai funcionar dessa forma.

Onde o comando para fechar no código - lá, mas não em tal linha

Leia acima.