Resultado da trade

 

Preciso ajuda para obter o resultado da última operação realizada pelo robô, trabalhando de forma simultânea em tempos gráficos diferentes do mesmo ativo (mini índice), utilizando a propriedade “POSITION_MAGIC” e com stop loss e take profit pre-definidos. Preciso verificar se o trade foi finalizado (pode haver ordem aberta em outro robô),  executada de forma completa ou parcial.  Após o fim de cada operação preciso obter o resultado dessa operação (lucro/prejuízo), mais não estou conseguindo identificar que terminou nem o resultado.


bool enviar_compra()

  {

   double price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double tp = 150;

   double sl = 100;

   double entrada = 3;

   return trade.Buy(entrada ,_Symbol,price,sl,tp,"Ordem de compra");

  }


bool enviar_venda()

  {

   double price = SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double tp = 150;

   double sl = 100;

   double entrada = 3;

   return trade.Sell(entrada,_Symbol,price,sl,tp,"Ordem de venda");

  }


double RetornaResultado()

  {

   if(PositionsTotal() == 0)

     {

      for(int i = PositionsTotal() - 1; i >= 0; i--)

        {

         ulong ticket = PositionGetTicket(i);

         PositionSelectByTicket(ticket);

         double result = HistoryDealGetDouble(ticket, DEAL_PROFIT);

         if(PositionGetInteger(POSITION_MAGIC) == m_magic && PositionGetString(POSITION_SYMBOL) == _Symbol && result != 0)

           {

            Print("Ticket = ", ticket, " >> Resultado = ", result);            

            return result;

           }

        }

     }

   return 0;

  }

 
Fernando Ferreira:

Preciso ajuda para obter o resultado da última operação realizada pelo robô, trabalhando de forma simultânea em tempos gráficos diferentes do mesmo ativo (mini índice), utilizando a propriedade “POSITION_MAGIC” e com stop loss e take profit pre-definidos. Preciso verificar se o trade foi finalizado (pode haver ordem aberta em outro robô),  executada de forma completa ou parcial.  Após o fim de cada operação preciso obter o resultado dessa operação (lucro/prejuízo), mais não estou conseguindo identificar que terminou nem o resultado.


bool enviar_compra()

  {

   double price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);

   double tp = 150;

   double sl = 100;

   double entrada = 3;

   return trade.Buy(entrada ,_Symbol,price,sl,tp,"Ordem de compra");

  }


bool enviar_venda()

  {

   double price = SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double tp = 150;

   double sl = 100;

   double entrada = 3;

   return trade.Sell(entrada,_Symbol,price,sl,tp,"Ordem de venda");

  }


double RetornaResultado()

  {

   if(PositionsTotal() == 0)

     {

      for(int i = PositionsTotal() - 1; i >= 0; i--)

        {

         ulong ticket = PositionGetTicket(i);

         PositionSelectByTicket(ticket);

         double result = HistoryDealGetDouble(ticket, DEAL_PROFIT);

         if(PositionGetInteger(POSITION_MAGIC) == m_magic && PositionGetString(POSITION_SYMBOL) == _Symbol && result != 0)

           {

            Print("Ticket = ", ticket, " >> Resultado = ", result);            

            return result;

           }

        }

     }

   return 0;

  }

Isso so serve para saber que uma operação esta aberta em um robo e com um determinado resultado. Além disso, ha uma confusão já que esta usando funções do histórico junto das posições em aberto. Veja o exemplo que tem na documentação da função HistorySelect e se tiver dúvida comenta aqui.