HistoryOrderGetTicket Bovespa Plataforma Rico/XP

 

Boa  noite;


Estou usando o código abaixo para ler o histórico de ordens enviadas e rejeitadas por falta de margem na plataforma rico, porém retorna o histórico zerado, sem conseguir ler os dados da ordem.

Alguém consegue me ajudar por favor?

   HistorySelect(TimeLocal()-(60*60*4),TimeLocal());//filtra tempo

   uint total_ordens=HistoryOrdersTotal();

   ulong last_order;



   for(uint i=0;i<=total_ordens;i++)

     {

      last_order=HistoryOrderGetTicket(i);


      {

         Alert(TimeToString(HistoryOrderGetInteger(last_order,ORDER_TIME_SETUP)),"|",HistoryOrderGetString(last_order,ORDER_SYMBOL),"|",HistoryOrderGetString(last_order,ORDER_COMMENT),"|",last_order,"|",HistoryOrderGetInteger(last_order,ORDER_STATE));

      }



      if(HistoryOrderSelect(last_order))

      //if(HistoryOrderGetString(last_order,ORDER_SYMBOL)==_Symbol)//seleciona pelo símbolo

      if(HistoryOrderGetInteger(last_order,ORDER_STATE)==ORDER_STATE_REJECTED)

      if(StringSubstr(HistoryOrderGetString(last_order,ORDER_COMMENT),0,26)=="[MG21] Garantia disponível")

      {

         Alert(HistoryOrderGetString(last_order,ORDER_SYMBOL),"|",HistoryOrderGetString(last_order,ORDER_COMMENT),"|",last_order,"|",HistoryOrderGetInteger(last_order,ORDER_STATE));

      }

     }



 
rflsjppr:

Boa  noite;


Estou usando o código abaixo para ler o histórico de ordens enviadas e rejeitadas por falta de margem na plataforma rico, porém retorna o histórico zerado, sem conseguir ler os dados da ordem.

Alguém consegue me ajudar por favor?



Se colocar no primeiro parametro o valor zero, nao vem nenhum log das operacoes de dias atras? Pelo que sei a corretora entregava informação de ate  uns 3 meses. Alem disso, tem um erro no codigo na parte do for é menor e não menor igual. So seria menor igual, se começasse do 1.
 

O log é carregado na aba Histórico, o que aparentemente não consigo fazer é ler os dados das ordens.



 
rflsjppr #:

O log é carregado na aba Histórico, o que aparentemente não consigo fazer é ler os dados das ordens.



Então, será que não consegue ou o historySelect ta muito curto? Essas operações aconteceram nas ultimas 4h?
 
Sim, as operações ocorreram dentro do período de pesquisa, mesmo com prazo superior não consigo ler as informações do log
 

Tente o seguinte:


void OnStart()
{
   HistorySelect(0,TimeLocal());//filtra tempo
   uint total_ordens=HistoryOrdersTotal();
   ulong last_order = 0;

   for(uint i = 0; i < total_ordens; i++)
   {
      last_order=HistoryOrderGetTicket(i);

      Alert(TimeToString(HistoryOrderGetInteger(last_order,ORDER_TIME_SETUP)),"|",HistoryOrderGetString(last_order,ORDER_SYMBOL),"|",HistoryOrderGetString(last_order,ORDER_COMMENT),"|",last_order,"|",HistoryOrderGetInteger(last_order,ORDER_STATE));

      //if(HistoryOrderSelect(last_order))

      if(HistoryOrderGetInteger(last_order,ORDER_STATE)==ORDER_STATE_REJECTED)
      {
         if(StringSubstr(HistoryOrderGetString(last_order,ORDER_COMMENT),0,26)=="[MG21] Garantia disponível")
         {
            Alert(HistoryOrderGetString(last_order,ORDER_SYMBOL),"|",HistoryOrderGetString(last_order,ORDER_COMMENT),"|",last_order,"|",HistoryOrderGetInteger(last_order,ORDER_STATE));
         }
      }
   }
}


Fiz só uma pequena formatação e comentei a linha 

if(HistoryOrderSelect(last_order))


De acordo com a documentação (para abrir, basta apertar F1 no MQL Editor), a função HistoryOrderSelect limpa a lista de ordens do histórico e copia somente uma ordem se a função for executada e completada. Se precisar fazer um loop sobre todas as ordens, basta chamar apenas a função HistoryOrderGetTicket. Portanto, removendo a função deve resolver. Não tenho como testar aqui porque não tenho ordens não executadas por falta de garantia, mas seguindo nessa linha pode ajudá-lo.

 
Emanuel Amorim #:

Tente o seguinte:



Fiz só uma pequena formatação e comentei a linha 


De acordo com a documentação (para abrir, basta apertar F1 no MQL Editor), a função HistoryOrderSelect limpa a lista de ordens do histórico e copia somente uma ordem se a função for executada e completada. Se precisar fazer um loop sobre todas as funções, basta chamar apenas a função HistoryOrderGetTicket. Portanto, removendo a função deve resolver. Não tenho como testar aqui porque não tenho ordens não executadas por falta de garantia, mas seguindo nessa linha pode ajudá-lo.

Legal, eu não tinha me atentado a esse detalhe nas notas. Deve ser isso mesmo o problema.

Razão: