HistorySelect NÃO FILTRANDO a data selecionada

 

Bom dia!

A função abaixo esta selecionado ordens fora da data especificada, alguém sabe dizer o motivo?

HistorySelect(StringToTime(tmp_DataPesquisar),TimeCurrent()); 
Print (StringToTime(tmp_DataPesquisar));
Print (TimeCurrent());
      
tmp_total=0;
tmp_total=HistoryDealsTotal(); 

O resultado dos prints acima;

2017.06.19 10:31:16.642 2017.01.03 09:00:00   2017.01.03 00:00:01

2017.06.19 10:31:20.660 2017.01.03 09:00:00   2017.01.03 09:00:00

Na data 2017.01.03 não tenho ordens emitidas, e sim em outra data conforme histórico da imagem.historico


At.

Daniel


 

Olá Daniel Andrejczuk,

Você não postou o código todo.

Provavelmente você está fazendo um loop para obter as ordens, mas sem visualizar o código é impossível dizer onde pode estar o erro.

Abraços,
Malacarne

 

Opa, segue o código completo abaixo:


string di04_contabilidade_dia_placar_atual;
double di04_contabilidade_dia_saldo=0;
double di04_contabilidade_dia_profit=0;
double di04_contabilidade_dia_max_ganho=0;
double di04_contabilidade_dia_max_perda=0;
long   di04_contabilidade_dia_acerto=0;
long   di04_contabilidade_dia_erro=0;
long   di04_contabilidade_dia_ordens=0;
string di04_contabilidade_dia_taxa_acerto="";
bool   di04_contabilidade_dia_meta_ou_perda_atingida;
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void di04_funcao_contabilidade_dia_verificar(string tmp_DataPesquisar, long tmp_magic2 , string tmpOrigem, double tmpValorMaximoPerda, double tmpValor_Maximo_Ganho, bool tmp_exibir_placar, bool TmpListarOrdens)  
{
   //apoio para cálculo = data de início da pesquisa das ordens executadas
   //tmp_DataPesquisar = string(tmp_data_b.year) + "." + string(tmp_data_b.mon) + "." + string(tmp_data_b.day) + " 00:00:01";
   
   //di04_contabilidade_dia_meta_ou_perda_atingida=false;
   
   di04_contabilidade_dia_max_ganho=0;
   di04_contabilidade_dia_max_perda=0;
   
   MqlDateTime    data_xxxx;
   TimeToStruct(datetime(tmp_DataPesquisar), data_xxxx);
   
   MqlDateTime    data_yyyy;
   
   //tmp_magic2 = código identificador da estratégia
   //tmpOrigem = comentario de qual local EA foi chamado a função
   //tmpValorMaximoPerda = valor máximo desejado como perda máxima
   //tmpValor_Maximo_Ganho = valor estipulado de meta do  dia
   //tmp_placar = true exibe no comment o resultado das negociações do dia
   
   double         tmp_estrategia_saldo=0;
   short          tmp_estrategia_acerto=0;
   short          tmp_estrategia_erro=0;
   //string         tmp_x;
   int            tmp_contador;
   //MqlDateTime  tmp_data_b
   
   
   di04_contabilidade_dia_profit=0;
   
   //atualiza a hora atual na variável
   //TimeCurrent(tmp_data_b);
   
   
   
   
      
      //HistoryDealsTotal = Retorna o número de ordens no histórico. Retorna o número de negócio no histórico. Antes de chamar HistoryDealsTotal(), primeiro é necessário receber o histórico de negócios e ordens utilizando a função HistorySelect() ou a função HistorySelectByPosition().
      //int      tmp_total=HistoryDealsTotal(); 
      ulong    tmp_ticket=0; 
      long     tmp_magic;
      //double   tmp_price; 
      double   tmp_profit; 
      datetime tmp_time;  
      string   tmp_symboll; 
      long     tmp_typee; 
      long     tmp_entry; 
      long     tmp_position_id;
     // long     tmp_POSITION_TICKET;
     
     
     di04_contabilidade_dia_ordens=0;
     
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
     //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
         //pesquisa a quantiade de ORDENS abertas da estratégia
         int tmp_total=OrdersTotal();
            for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) 
            {
               tmp_ticket=OrderGetTicket(tmp_contador);
               if(OrderGetInteger(ORDER_MAGIC)==tmp_magic2)
                 {
                  //de ordens em aberto
                  di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1;
                 }
            }
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
      //pesquisa a quantiade de POSIÇÃO abertas da estratégia
      //      tmp_total=0;
      //      tmp_total=PositionsTotal();
      //      for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) 
      //      {
      //         tmp_ticket=PositionGetTicket(tmp_contador);
      //         if(PositionGetInteger(POSITION_MAGIC)==tmp_magic2)
      //           {
      //            //de ordens em aberto
      //            di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1;
      //           }
      //      }
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
      //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
      
      //HistorySelect = Recupera o histórico de transações e ordens para o período do tempo de servidor especificado.
     
      if(HistorySelect(StringToTime(tmp_DataPesquisar), TimeCurrent())==true)
         {
         Print("Selecionado histórico com sucesso.");
         }
      
      tmp_total=0;
      tmp_total=HistoryDealsTotal(); 
      
      Print("Total retornado: " + string(tmp_total));


   //--- para todos os negócios 
      for(tmp_contador=0;tmp_contador<tmp_total;tmp_contador++) 
        { 
         //--- tentar obter ticket negócios 
         if((tmp_ticket=HistoryDealGetTicket(tmp_contador))>0) 
           { 
            //--- obter as propriedades negócios 
            //tmp_price =HistoryDealGetDouble(tmp_ticket,DEAL_PRICE); 
            tmp_time  =(datetime)HistoryDealGetInteger(tmp_ticket,DEAL_TIME); 
            
            TimeToStruct(tmp_time, data_yyyy);
            
            
            tmp_symboll=HistoryDealGetString(tmp_ticket,DEAL_SYMBOL); 
            tmp_typee  =HistoryDealGetInteger(tmp_ticket,DEAL_TYPE); 
            tmp_magic  =HistoryDealGetInteger(tmp_ticket,DEAL_MAGIC); 
            tmp_position_id  =HistoryDealGetInteger(tmp_ticket,DEAL_POSITION_ID); 
            tmp_entry =HistoryDealGetInteger(tmp_ticket,DEAL_ENTRY); 
            tmp_profit=HistoryDealGetDouble(tmp_ticket,DEAL_PROFIT); 
            //tmp_POSITION_TICKET=HistoryDealGetInteger(tmp_ticket,POSITION_TICKET); 
            
            //Print("position id " + string(tmp_position_id)  +  " DANIEL Magic " + string(tmp_magic) + " Tickt " + string(tmp_ticket) + " Entry " + string(tmp_entry) + " type " + string(tmp_typee));


            //--- apenas para o símbolo atual 
            //---apenas para a estratégia selecionada
            
            if((data_yyyy.day == data_xxxx.day) && (data_yyyy.mon == data_xxxx.mon) && (data_yyyy.year == data_xxxx.year))
               {
            if(tmp_symboll==Symbol()) 
               {
                  if(tmp_entry==DEAL_ENTRY_OUT)
                     {
                     
                     di04_contabilidade_dia_profit = di04_contabilidade_dia_profit + tmp_profit;
                     
                     if(di04_contabilidade_dia_max_ganho==0)di04_contabilidade_dia_max_ganho=di04_contabilidade_dia_profit;
                     if(di04_contabilidade_dia_max_perda==0)di04_contabilidade_dia_max_perda=di04_contabilidade_dia_profit;
                     
                     if(di04_contabilidade_dia_profit>di04_contabilidade_dia_max_ganho)di04_contabilidade_dia_max_ganho=di04_contabilidade_dia_profit;
                     if(di04_contabilidade_dia_profit<di04_contabilidade_dia_max_perda)di04_contabilidade_dia_max_perda=di04_contabilidade_dia_profit;
                     
                     if(tmp_magic==tmp_magic2)
                        {
                           //pesquisa a quantidade de negócios efetivados da estratégia
                           di04_contabilidade_dia_ordens = di04_contabilidade_dia_ordens+1;
                           
                           tmp_estrategia_saldo = tmp_estrategia_saldo + tmp_profit;
            
                           if(tmp_profit>0)
                              {
                                 if(tmp_magic==tmp_magic2) tmp_estrategia_acerto = tmp_estrategia_acerto + 1;
                              }
                           if(tmp_profit<0)
                              {
                                 if(tmp_magic==tmp_magic2) tmp_estrategia_erro = tmp_estrategia_erro + 1;
                              }
                        
                        if(TmpListarOrdens==true)
                            {
                             Print(">>ORDEM: " + DoubleToString(tmp_ticket,0) + " Tipo: " + string(tmp_typee)  + " DATA: "   + TimeToString(tmp_time) + " Profit: " + string(tmp_profit));// + " Coment: " + HistoryDealGetString(tmp_ticket,DEAL_COMMENT) );
                            }
                        
                        
                        }
                     }
               }
               }
           } 
        } 
   
    di04_contabilidade_dia_saldo  = tmp_estrategia_saldo; 
    di04_contabilidade_dia_acerto = tmp_estrategia_acerto;
    di04_contabilidade_dia_erro = tmp_estrategia_erro;
    di04_contabilidade_dia_taxa_acerto="";

    
    if ((di04_contabilidade_dia_acerto+di04_contabilidade_dia_erro)>0) di04_contabilidade_dia_taxa_acerto = DoubleToString((di04_contabilidade_dia_acerto/(di04_contabilidade_dia_erro + di04_contabilidade_dia_acerto) )*100,2) + "%";
   
   if ((di04_contabilidade_dia_erro==0) && (di04_contabilidade_dia_acerto>0))di04_contabilidade_dia_taxa_acerto = "100,00%";
   
   if (tmp_estrategia_saldo == 0)
      {
          if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Placar  0x0";
          di04_contabilidade_dia_meta_ou_perda_atingida=false;
      }
   else
      {
         if ((tmp_estrategia_saldo > 0) && (tmp_estrategia_saldo != 0))
            {
               if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Lucro R$" + DoubleToString(NormalizeDouble(tmp_estrategia_saldo, 2),2) ;
            }
         if ((tmp_estrategia_saldo < 0) && (tmp_estrategia_saldo != 0))
            {
               if (tmp_exibir_placar = true) di04_contabilidade_dia_placar_atual = "Prejuizo R$" + DoubleToString(NormalizeDouble(tmp_estrategia_saldo, 2),2);
            }
         
         if (tmp_estrategia_saldo < tmpValorMaximoPerda)
            {
               Print("Perda máxima alcançada.");
               di04_contabilidade_dia_meta_ou_perda_atingida=true;
            }
         else
            {
               if (tmp_estrategia_saldo > tmpValor_Maximo_Ganho)
               {
                  Print("Meta Batida.");
                  di04_contabilidade_dia_meta_ou_perda_atingida=true;
               }
            }    
        }
        
        
     if(TmpListarOrdens==true)
       {
        Print("Resultado Estratégia(" + string(tmp_magic2) + ") = R$" + DoubleToString(di04_contabilidade_dia_saldo,2) + " Máximo: " + DoubleToString(di04_contabilidade_dia_max_ganho,2) + " Mínimo" + DoubleToString(di04_contabilidade_dia_max_perda,2) + " Acertos x Erros = " + string(di04_contabilidade_dia_acerto) + " X " + string(di04_contabilidade_dia_erro));
       }
}
;

Razão: