Backtest - Interrupção de execução após expiração

 

Olá,

será que existe alguma forma de interromper também a execução do expert no modo de backtest após atingir a data de expiração?

 
Tiago PraxedesOlá, será que existe alguma forma de interromper também a execução do expert no modo de backtest após atingir a data de expiração?

Olá, Tiago, acho que você precisaria salvar essa informação (EA expirado) em recursos como variáveis globais do terminal ou arquivos...

 
Vinicius Pereira De Oliveira #:

Olá, Tiago, acho que você precisaria salvar essa informação (EA expirado) em recursos como variáveis globais do terminal ou arquivos...

Vinicius, se não estou enganado não é possível acessar variáveis globais e nem arquivos no modo do testador de estratégias (backtest), apenas em tempo real. E mesmo assim, seria necessário que o usuário colocasse ao menos uma vez para executar em tempo real para o expert poder atualizar as variáveis globais/arquivos sobre a expiração do EA.

Segue um exemplo, talvez fica mais fácil de entender:

Digamos que a data de 05.05.2024 está no código do expert, e o mesmo só deve funcionar até essa data. Em tempo real ou no backtest ele segue fazendo essa validação e aí quando a mesma for atingida o expert deixa de funcionar. No entanto, no backtest o usuário poderá sempre estar configurado uma data anterior à 05.05.2024 e dessa forma ele continua executando normal no backtest.

Então o que busco é uma forma de interromper também a execução no testador de estratégias (backtest). O expert no modo do testador precisaria verificar a data REAL CORRENTE seja local ou do servidor, o interessante é que o MQL5 tivesse alguma função em que fosse possível fazer isso no modo Tester.

 
Tiago Praxedes #Vinicius, se não estou enganado não é possível acessar variáveis globais e nem arquivos no modo do testador de estratégias (backtest), apenas em tempo real. E mesmo assim, seria necessário que o usuário colocasse ao menos uma vez para executar em tempo real para o expert poder atualizar as variáveis globais/arquivos sobre a expiração do EA. Segue um exemplo, talvez fica mais fácil de entender: Digamos que a data de 05.05.2024 está no código do expert, e o mesmo só deve funcionar até essa data. Em tempo real ou no backtest ele segue fazendo essa validação e aí quando a mesma for atingida o expert deixa de funcionar. No entanto, no backtest o usuário poderá sempre estar configurado uma data anterior à 05.05.2024 e dessa forma ele continua executando normal no backtest. Então o que busco é uma forma de interromper também a execução no testador de estratégias (backtest). O expert no modo do testador precisaria verificar a data REAL CORRENTE seja local ou do servidor, o interessante é que o MQL5 tivesse alguma função em que fosse possível fazer isso no modo Tester.

A partir do tópico seguinte (da seção em inglês do fórum) você pode acessar alguns exemplos de como obter a data atual mesmo utilizando o Testador, incluindo exemplos que não utilizam DLL (eu não testei, mas se você testar, por favor, avise se deu certo):  How to get today date ? , even backtest history still know today date. - Paper Trading - MQL4 and MetaTrader 4 - MQL4 programming forum (mql5.com)

 
Vinicius Pereira De Oliveira #:

A partir do tópico seguinte (da seção em inglês do fórum) você pode acessar alguns exemplos de como obter a data atual mesmo utilizando o Testador, incluindo exemplos que não utilizam DLL (eu não testei, mas se você testar, por favor, avise se deu certo):  How to get today date ? , even backtest history still know today date. - Paper Trading - MQL4 and MetaTrader 4 - MQL4 programming forum (mql5.com)

Deu certo, já testei aqui. Segue a função apresentada no tópico, a mesma retorna o horário local corrente real no modo testador:

//+------------------------------------------------------------------+
//| Get current local (computer) time                                |
//+------------------------------------------------------------------+
datetime GetCurrentLocalTime()
  {
   string tmpFilename   = "_TEMP_FILE_TO_GET_CURRENT_LOCAL_TIME";
   int handle           = FileOpen(tmpFilename, FILE_WRITE); if(handle==INVALID_HANDLE) return(0);
   datetime now         = (datetime)FileGetInteger(handle, FILE_CREATE_DATE);
   FileClose(handle);
   FileDelete(tmpFilename);
//---
   return(now);
  }

Obrigado Vinicius!

 
Tiago Praxedes #:

Vinicius, se não estou enganado não é possível acessar variáveis globais e nem arquivos no modo do testador de estratégias (backtest), apenas em tempo real. E mesmo assim, seria necessário que o usuário colocasse ao menos uma vez para executar em tempo real para o expert poder atualizar as variáveis globais/arquivos sobre a expiração do EA.

Segue um exemplo, talvez fica mais fácil de entender:

Digamos que a data de 05.05.2024 está no código do expert, e o mesmo só deve funcionar até essa data. Em tempo real ou no backtest ele segue fazendo essa validação e aí quando a mesma for atingida o expert deixa de funcionar. No entanto, no backtest o usuário poderá sempre estar configurado uma data anterior à 05.05.2024 e dessa forma ele continua executando normal no backtest.

Então o que busco é uma forma de interromper também a execução no testador de estratégias (backtest). O expert no modo do testador precisaria verificar a data REAL CORRENTE seja local ou do servidor, o interessante é que o MQL5 tivesse alguma função em que fosse possível fazer isso no modo Tester.

Eu não entendi porque tu não pode testar a data da licença e então chamar ExpertRemove() se ela esta vencida. Mesmo no colocar uma data pro passado, ela so iria ate a data da licença sem a necessidade desse código.

 
Ricardo Rodrigues Lucca #:

Eu não entendi porque tu não pode testar a data da licença e então chamar ExpertRemove() se ela esta vencida. Mesmo no colocar uma data pro passado, ela so iria ate a data da licença sem a necessidade desse código.

Sim, mas o usuário poderia continuar executando backtests para datas passadas, e a ideia é que fique impedido até mesmo de executar backtests após a expiração da licença.
 
Tiago Praxedes #:
Sim, mas o usuário poderia continuar executando backtests para datas passadas, e a ideia é que fique impedido até mesmo de executar backtests após a expiração da licença.
Ah sim.
Razão: