Como obter o Total de Ordem de um determinado magicNum

Kleuton Novais  

Pessoal criei uma função para print mostrando o números de Operações Positivas, Operações Totais e o  Saldo, eu estou usando o parâmetro HistoryDealsTotal();  porém essa variável retorna o numero de ordens totais no geral, e eu quero somente as ordens totais finalizadas de um determinado Numero Magico = magicNum... isso é para diferenciar as ordem de cada EA separadamente.
Vejam o código de execução:

void HistoricoHoje(){
   
    ///--- SELECIONA HISTORICO ATUAL HOJE
   datetime time_start = iTime(_Symbol, PERIOD_D1, 0);

   if(HistorySelect(time_start, TimeCurrent()) )
     {
      hHojeProfitTotal = 0.0;
      hHojeTotal = 0;
      hHojePositivos = 0;
      
      //// --- LOOP PEGAR DADOS 
      for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
        {
         const ulong ticket = HistoryDealGetTicket(i);
		
		/// SEPRARA PELO NUMERO MAGIC variável: magicNum 
         if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == magicNum  )
           {
               double results = HistoryDealGetDouble(ticket,DEAL_PROFIT);
               
                hHojeTotal = HistoryDealsTotal();
               
                
            if(HistoryDealGetDouble(ticket, DEAL_PROFIT) > 0.0) {
         
               hHojePositivos++; 
               hHojeProfitTotal += results;

               }else{
     
               hHojeProfitTotal += results;

               } 
            }
         }
     }else{
      Print("Erro ao recuperar o histórico de operações ...");
     }
     
      /// --- RESULTADO 
      printf("-- Total de Ordens: "+hHojeTotal+" --- Total Positivos: "+hHojePositivos+" --- Saldo: "+hHojeProfitTotal);
      //// TOTAL DE ORDENS ESTÁ MOSTRANTO O VALOR TOTAL(hHojeTotal), sem separar pelo numMagic
  }
///--  HistoryDealsTotal()
///--  está pegando o total geral, Porque ?? Pois ele está abaixo do if .


Deste já Agradeço.

Eduardo Oliveira  
Essa função 
HistoryDealsTotal()

Sempre vai pegar o total de ordens que foram encerradas, o que faço nela é selecionar os dias para não puxar o historico completo, eu ví que isso vc está fazendo, selecionando somente um dia.. eu faço de outra maneira.

   datetime DataFinal=StringToTime(TimeToString(TimeCurrent(), TIME_DATE) + " " + "23:59"); 
   datetime DataInicial = StringToTime(TimeToString(TimeCurrent(), TIME_DATE) + " " + "00:01");                                                                                                                     
   HistorySelect(DataInicial,DataFinal);
   for(int i = 0; i <= HistoryDealsTotal(); i++)
   { 

Acho que sua dúvida é essa, correto?

Kleuton Novais  
Eduardo Oliveira:
Essa função 

Sempre vai pegar o total de ordens que foram encerradas, o que faço nela é selecionar os dias para não puxar o historico completo, eu ví que isso vc está fazendo, selecionando somente um dia.. eu faço de outra maneira.

Acho que sua dúvida é essa, correto?

Não é isso... a questão é vc ter dois robôs EA diferente, cada um tem um total diferente, não pode misturar. 
eu tentei separar pelo HistoryDealGetInteger(ticket, DEAL_MAGIC) == magicNum ... porém mesmo assim ele só mostra o total geral de tudo que fez operações no MT5, e na verdade o que eu preciso é do total de cada EA  separados individualmente, pois eu colguei cada um com o maginNum diferente.

Entende??


Exemplo:

EA 01 - Roda no Indice M1 opera cruzamento de Medias 
  MaginNum = 01  --- Total de Operações Hoje = 01

EA 02 - Roda no Indice M1 opera rompimento 
  MaginNum = 02  --- Total de Operações Hoje = 05

Agora se eu Chamar a função HistoryDealsTotal ele retorna a soma do total de todos os EAs, nesse caso seria = 06, mas eu quero que cada EA mostra o seu numero total correspondente individualmente.
Result de HistoryDealsTotal() = 06

O que eu preciso é do total de cada EA
 TotalEA 01 = 01
 TotalEA 02 = 05

Eduardo Oliveira  

entendi, cara isso é muito louco, eu lembro que apanhei na mesma coisa que vc na epoca e percebi que só daria fazendo mais detalhado, se fizesse tudo na mesma linha simplesmente nao dava certo, não sei porque, então por fim o meu ficou assim...veja se funciona

   for(int i = 0; i <= HistoryDealsTotal(); i++)
   {     
      ulong magic = 0;
      Ticket = HistoryDealGetTicket(i);
      if(Ticket > 0)
      {  
         magic = HistoryDealGetInteger(Ticket,DEAL_MAGIC);
         if(magicNumber == magic)
         {  
            ProfitHistory = HistoryDealGetDouble(Ticket,DEAL_PROFIT);
            LoteHistory = HistoryDealGetDouble(Ticket,DEAL_VOLUME);
            if(LoteHistory*valorPonto != 0)
            {
               ProfitSoma = ProfitSoma + ProfitHistory;
               Pontos_History = ((ProfitHistory)/(LoteHistory*valorPonto)) + Pontos_History;        
            }
         }
      }                  
   }

Mas para vc encontrar na raça o problema, o melhor seria ir mandando print em cada variavel para saber o que está sendo retornado, foi isso que fiz e verifiquei que na epoca nao vinha o magic number correto