Preço de abertura - página 2

 
douglas14:

Trader_Patinhas, qual ferramenta você usa para fazer backtest ?

Oi Douglas,

Como meus robôs se baseiam em machine learning, eu faço o ajuste/otimização do modelo preditivo primordialmente com base nas próprias métricas de erro de classificação e de regressão.

Eu uso backtest mais pra comparar resultados de diferentes estratégias de trading baseadas nos sinais gerados pelo modelo preditivo e para fazer o ajuste fino dos parâmetros da estratégia que irá pra conta real.

Eu mesmo construí um modesto programa "simulador de mercado" para fazer esses backtests, que contabiliza os lucros e prejuízos que o robô teria tido em dias passados, com base nos dados históricos desses dias, usando diferentes combinações de parâmetros de ajuste.

Não uso a ferramenta nativa do MT5 pq ela não fornece todas as informações que o meu robô usa (volumes do book, por exemplo), além de não modelar corretamente as perdas por spread e por slippage, que são significativas para estratégias de scalping curto.

 

Verifiquei que, de fato, não funciona no backtest.

Executei na conta demo com êxito.

Utilizei um alerta para constatar o carregamento da variável. Ela carregou, porém, o alerta exibia o preço de abertura da data atual e não a do dia pregresso do backtest.

Acredito que isso ocorra pelo fato do parâmetro "SYMBOL_SESSION_OPEN" carregar informações da sessão atual e por isso aparece zerada nos backtests.

No momento estou verificando se o estado da variável é "NULL" a atribuindo o valor de abertura do primeiro candle para os backtests. Ao fim do pregão uso uma variável boleana para indicar que a verificação deve ser retomada no próximo pregão:

int OnInit()
  {

//https://www.mql5.com/pt/docs/constants/environment_state/marketinfoconstants

   abertura = SymbolInfoDouble(_Symbol,SYMBOL_SESSION_OPEN);

...
...
   
if(fechamento())
     {
      Comment("Horário de fechamento: ",agora.hour,...);
      novo = true;
     }
...
...
   if(abertura == NULL && novo)
     {
      open = rates[0].open;
      abertura = open;
      novo = false;
     }
   else
     {
      open = abertura;
     }
..

PS: "open" é a variável que consumo para saber em que preço abriu o pregão.


Se alguém tiver alguma ação de contorno para realização de backtests utilizando o preço de abertura, ficaria grato em conhecer.

Abraço.

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades do Ativo
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades do Ativo
  • www.mql5.com
Propriedades do Ativo - Estado de Ambiente - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
MqlRates Dia[];
CopyRates(_Symbol,PERIOD_D1,0,0, Dia );

ArraySetAsSeries( Dia ,true);


Dia[0].open

Razão: