Ler lucro total da conta

 

Boa tarde!

Estou desenvolvendo um EA (MQL5), e preciso obter o lucro total das posições fechadas, desde o início da conta.

Estou usando a função abaixo:

double Lucro_Total(int magicnumber)

  {

   HistorySelect(StringToTime(TimeToString("01/01/1990", TIME_DATE)), INT_MAX); 

   int total = HistoryDealsTotal();

   double result=0;

   for(int i = 0; i < total; i++)

     {

      ulong Ticket = HistoryDealGetTicket(i);

      if(HistoryDealGetInteger(Ticket, DEAL_MAGIC) == magicnumber

         && HistoryDealGetInteger(Ticket, DEAL_ENTRY) != DEAL_ENTRY_IN)

        {

         result+= HistoryDealGetDouble(Ticket, DEAL_PROFIT);

        }

     }

   return result;

  }

Ela me retorna o lucro de todas a posições fechadas pelo EA, mas as que eu, por ventura, fecho manualmente, a função não retorna. 

Mesmo eu fechando manualmente, o número mágico da ordem permanece o da abertura pelo robô, mas não sei se pelo fato de não ter TP e nem SL (por conta do fechamento manual) o HistoryDealsTotal não consegue ler.

Se alguém já passou por isso, conseguiu resolver, e puder compartilhar, ficarei agradecido.

Obrigado!

Abs.

Documentação sobre MQL5: Funções de Negociação / HistoryDealGetDouble
Documentação sobre MQL5: Funções de Negociação / HistoryDealGetDouble
  • www.mql5.com
HistoryDealGetDouble - Funções de Negociação - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Daut Junior:


Olá Daut

O DEAL_MAGIC de operações manuais é sempre zero. Você pode sair dessa lendo a posição de  DEAL_POSITION_ID e verificar se o POSITION_MAGIC e igual ao do EA.

 
Rogerio Giannetti Torres #:

Olá Daut

O DEAL_MAGIC de operações manuais é sempre zero. Você pode sair dessa lendo a posição de  DEAL_POSITION_ID e verificando se o POSITION_MAGIC e igual ao do EA.

Grande Rogério, muito obrigado! Vou tentar já..

Abraços,

 

Srs., podem me ajudar a achar o lucro ou prejuizo total do dia, estou tentando o codigo abaixo mas quando tem prejuizo so aparece 0

  datetime time_start = (datetime) (86400*(((ulong)TimeCurrent())/86400));/*iTime(_Symbol, PERIOD_D1, 0);*/
   double   result = 0.0;
   ulong    ticket;
   int      cnt;

   if(HistorySelect(time_start, TimeCurrent()))
     {
      for(cnt = HistoryDealsTotal() - 1; cnt >= 0; cnt--)
        {
         ticket = HistoryDealGetTicket(cnt);

         if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == magicNum)
           {
            result += HistoryDealGetDouble(ticket, DEAL_PROFIT);
           }
        }
     }
   else
     {
      Print(_Symbol, " - Erro ao recuperar o histórico de operações...");
     }

   return(result);
  }