[Dúvida] Como obter o valor da primeira ordem realizada?

 

Bom dia, boa tarde ou boa noite senhoras e senhores. Espero que todos estejam bem.

 

Estou tentando fazer com que um de meus bebês armazene dentro de uma variável o valor de entrada de uma primeira operação realizada pelo EA. A primeira operação é realizada as 9h05m, no caso, seria a entrada desta ordem que estou tentando armazenar. Consegui obter esses dados dentro dos backtests, como podem observar na imagem log1 (coloquei em azul os prints da primeira entrada e um dos valores da op.)

 

Porém, todavia, entretanto rs... quando passo para o simulador no ao vivo, o valor retornado pela variável é sempre de 0.0, como podem observar na imagem log2, e isso ocorre mesmo com o robô funcionando normalmente nos backtests (no caso do SP500, testado tanto no contrato vigente quanto na série histórica). Vocês irão perceber que está dando o erro [invalid stops], e isso ocorre devido a falta da variável que está retornando zero, pois preciso dela para calcular o preço médio e settar o TP/Stop Loss dentro da mesma linha de código.

 

Segue abaixo a maneira na qual encontrei de conseguir fazer com que essa informação fosse trazida durante os backtests, e já adianto: não deve ser a coisa mais bonita do mundo e creio eu que nem a mais funcional, ainda sou um mero iniciante no universo da programação.


 string calculo_tempo = "9:05";
 string calculo_tempo2 = "9:10";
 
 HistorySelect(calculo_tempo, calculo_tempo2); 
  
 double ticket_seg_tp = PositionGetInteger(POSITION_TICKET);
  
 double primeira_entrada_ = HistoryOrderGetDouble(ticket_seg_tp, ORDER_PRICE_OPEN);
 
 Print("A primeira entrada é: ", primeira_entrada_);


Vi também que no MQL4 havia o "SELECT_BY_POS", pois acredito que o que estou buscando é mais ou menos nesse caminho... enfim, agradeço por vossa atenção e espero que algum ser iluminado possa me auxiliar com meu problema.

 

Atenciosamente,

Chrisadz

Documentação sobre MQL5: Funções Comuns / Print
Documentação sobre MQL5: Funções Comuns / Print
  • www.mql5.com
Print - Funções Comuns - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Christian Alves:

... como podem observar na imagem log1 (coloquei em azul os prints da primeira entrada e um dos valores da op.)


... como podem observar na imagem log2, e isso ocorre mesmo com o robô funcionando normalmente nos backtests ...


Boa noite, Christian!!


Você esqueceu de anexar as imagens...

 
Vinicius de Oliveira #:


Boa noite, Christian!!


Você esqueceu de anexar as imagens...


Bom dia Vinicius!


Ops!! Acabei me esquecendo mesmo, seguem em anexo.

Arquivos anexados:
log1.jpg  487 kb
log2.jpg  225 kb
 
Christian Alves #:


Bom dia Vinicius!


Ops!! Acabei me esquecendo mesmo, seguem em anexo.


Trabalhando em cima do seu código, da sua ideia, comece alterando as variáveis do horário pra ver se muda alguma coisa...

Por exemplo:

   datetime calculo_tempo1 = iTime(_Symbol, PERIOD_D1, 0) + 09 * PeriodSeconds(PERIOD_H1) + 05 * PeriodSeconds(PERIOD_M1);
   datetime calculo_tempo2 = iTime(_Symbol, PERIOD_D1, 0) + 09 * PeriodSeconds(PERIOD_H1) + 10 * PeriodSeconds(PERIOD_M1);


EDIT.: ... Se preferir:

   datetime calculo_tempo1 = StringToTime("9:05");
   datetime calculo_tempo2 = StringToTime("9:10");
 
Vinicius de Oliveira #:


Trabalhando em cima do seu código, da sua ideia, comece alterando as variáveis do horário pra ver se muda alguma coisa...

Por exemplo:


Segue também um exemplo de verificação do histórico de operações que talvez possa lhe ajudar...

//--- Local variables
   datetime start_date = iTime(_Symbol, PERIOD_D1, 0);
   ulong    ticket;
   int      cnt;

//--- Gets the operations history
   if(!HistorySelect(start_date, TimeCurrent()))
     {
      Print("Failed to get operations history...");
      return;
     }

//--- Checks the operations history
   for(cnt = HistoryDealsTotal() - 1; cnt >= 0; cnt --)
     {
      //--- Gets the deal ticket
      ticket = HistoryDealGetTicket(cnt);
      if(ticket == 0)
        {
         Print("Failed to get deal ticket in history...");
         return;
        }
      if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == TF0_MAGIC && MathAbs(HistoryDealGetDouble(ticket, DEAL_PROFIT)) > 0.0)
        {
         //. . .
        }
     }
 
Vinicius de Oliveira #:


Trabalhando em cima do seu código, da sua ideia, comece alterando as variáveis do horário pra ver se muda alguma coisa...

Por exemplo:


Fiz essa alteração nas linhas de código Vini, funcionou perfeitamente nos backtests, irei observar amanhã, caso haja GAP, pra verificar se funciona no ao vivo! 


Assim que testar de fato, venho compartilhar os resultados!


Agradeço pela luz e pelo compartilhamento da informação e conhecimento meu irmão, tenha um ótimo dia por ai!


Atenciosamente,

Christian Alves

 
Christian Alves #:


Fiz essa alteração nas linhas de código Vini, funcionou perfeitamente nos backtests, irei observar amanhã, caso haja GAP, pra verificar se funciona no ao vivo! 


Assim que testar de fato, venho compartilhar os resultados!


Agradeço pela luz e pelo compartilhamento da informação e conhecimento meu irmão, tenha um ótimo dia por ai!


Atenciosamente,

Christian Alves


Beleza, Christian!! Tudo de bom!! 👍

 
Vinicius de Oliveira #:


Beleza, Christian!! Tudo de bom!! 👍

Fala Vinicius! Bom dia meu irmão!


Acabei de testar aqui no ao vivo o código que você encaminhou por último, e deu certo! Muito obrigado por mais uma vez compartilhar vosso conhecimento! 


Tenha um ótimo dia por ai, grande abraço!

 
Christian Alves #:

Fala Vinicius! Bom dia meu irmão!


Acabei de testar aqui no ao vivo o código que você encaminhou por último, e deu certo! Muito obrigado por mais uma vez compartilhar vosso conhecimento! 


Tenha um ótimo dia por ai, grande abraço!


Bom dia, Christian!!


Que bom que deu certo!! Abraço!!

Razão: