Calculo de Lucro/Prejuízo não esta funcionando em conta real

 

Amigos,

Criei um trecho no meu código para identificar a quantidade de take e loss com base no resultado de lucro e prejuízo das minha operações.

Na conta simulador funciona perfeitamente, já na conta real o lucro ou prejuízo está vindo sempre 0(zero) e não cai nos meus IFs. Poderia me ajudar a entender porque não funciona na real ?


      HistorySelect(start,end);
      int total=HistoryOrdersTotal(); 
      int     x=HistoryOrdersTotal();
      ulong ticket = HistoryOrderGetTicket(total-1);     
      double second_trade=HistoryOrderGetDouble(ticket,ORDER_PRICE_OPEN); 
      
     // criar tratativa para verificar historico de ordens
     v_take = 0;
     v_loss = 0;
      for( ;total>0;){      
        if (x <= total && x > 0) {
          ulong ticket_check = HistoryOrderGetTicket(x); 
          HistoryDealSelect (ticket_check);
          double v_resultado = HistoryDealGetDouble(ticket_check,DEAL_PROFIT);
          if (v_resultado > 0) {
            v_take = v_take +1;
          }
          if (v_resultado < 0){
            v_loss = v_loss +1;
          }
        }
        else {break;
             }
         x--;    
     };

Minha variável v_resultado está sempre como zero.


Obrigado !

 
Carlos Martins:



Olá, 

você está misturando ordem com posições, para pegar o resultado das posições encerradas ou parcialmente encerrada, pelo EA siga o roteiro.

Para saber se a posição foi totalmente encerrada tem que tratar os deal(s) referentes a mesma positionID = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID).


   HistorySelect(StringToTime(TimeToString(TimeTradeServer(), TIME_DATE)), INT_MAX); // Histórico do dia
   int total = HistoryDealsTotal();
   double result=0;
   for(int i = 0; i < total; i++)
     {
      Ticket = HistoryDealGetTicket(i);
      if(HistoryDealGetString(Ticket, DEAL_SYMBOL) == ativo
         && HistoryDealGetInteger(Ticket, DEAL_MAGIC) == inpMagicNumber
         && HistoryDealGetInteger(Ticket, DEAL_ENTRY) != DEAL_ENTRY_IN)
        {
    
         result+= HistoryDealGetDouble(Ticket, DEAL_PROFIT);
         
        }
     }
 
Rogerio Giannetti Torres:


Olá, 

você está misturando ordem com posições, para pegar o resultado das posições encerradas ou parcialmente encerrada, pelo EA siga o roteiro.

Para saber se a posição foi totalmente encerrada tem que tratar os deal(s) referentes a mesma positionID = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID).


Muito Obrigado Rogério !


Vou fazer as alterações e validar.