MetaTrader – Como Rodar BackTest via linha de comando

Com o Metatrader é possível rodar backtest de vários sets via linha de comando. Desta forma você não precisa ficar iniciando um a um e tendo que ficar na frente do computador para ir trocando os parâmetros e arquivos .set a cada novo backtest. É possível automatizar o processo todo e fazer com que o computador execute todos os testes para você de forma independente.

Para isso, você vai precisar de:
– Máquina virtual com ubuntu (ou alguma outra distribuição Linux);
– Máquina Windows com o metatrader.

Este artigo não vai abordar como configurar o ambiente linux, mas ele será usado para que você crie os arquivos .ini que serão utilizados pelo metatrader para rodar os backtests.

 

Primeiramente, selecione os arquivos .set que queira rodar os backtest de forma automatizada, e tenha certeza que eles não tenham espaçamento no nome e também que no arquivo .set o parâmetro inEAName e também o inPeriod estejam preenchidos corretamente, caso contrário a criação do arquivo .ini não vai funcionar.

Só para lembrar, os parâmetros são:
inPeriod –> Deve ser o tempo gráfico que o EA roda.
inEAName –> Deve ser o nome do EA que roda o ajuste. Ex. RC-Bollinger

 

Estando com os arquivos de ajuste OK, Sem espaço e também com os parametros corretamente configurados, transfira os arquivos para o linux usando o winscp por exemplo para uma nova pasta chamada por exemplo de RCBT.

Abaixo um exemplo da cópia do arquivo do lado esquerdo no seu computador para o lado direito no linux.

 

 

Os arquivos usados neste exemplo são:
RC-Bollinger_Ctrend_Win_M5_Guilherme_BBM5_WPR_EXIT_V1.set
RC-MeanReversal_CTrend_WIN_M5_Fabio_M5-volty_v2.set
RC-Stochastic_trend_WIN_M20_Roberson_AGRESSOR_v2.set

 

 

Dentro desta pasta RCBT, crie a pasta INI.

Uma vez que os arquivo estejam no seu ambiente linux, precisamos criar o arquivo chamado teamplate.tpl que será usado como base para criação dos arquivos .ini.

O conteúdo abaixo deve ser totalmente adicionado no arquivo template.tpl que também deve estar na pasta RCBT. Veja que o exemplo tem como servidor a XP. Caso seu broker seja outro, ajustar de acordo com a sua necessidade.

[Common]
Server=mt5.xpi.com.br:443
Login=$mtlogin
Password=$mtpass
ProxyEnable=0
ProxyType=0
ProxyAddress=0
KeepPrivate=1
NewsEnable=0
CertInstall=0

[Charts]
MaxBars=500000
PrintColor=0
SaveDeleted=0

[Experts]
AllowLiveTrading=0
AllowDllImport=1
Enabled=1
Account=1
Profile=1

[Objects]
ShowPropertiesOnCreate=0
SelectOneClick=0

[Tester]
Symbol=WIN\$D
Deposit=1000
Leverage=1:1
Model=0
ExecutionMode=0
Optimization=0
FromDate=2017.01.01
ToDate=2019.10.30
ForwardMode=0
ReplaceReport=1
ShutdownTerminal=1
Currency=BRL
Visual=0

Expert=RobotCrowd\\$ineaname
ExpertParameters=RC\\$ineaset.set
Period=$inperiod
Report=RC\\$ineaset

 

Veja que no arquivo acima, é onde definimos o período do BT e também o modo de operação, se é cada tick ou OHLC (Model). Mais detalhes podem ser encontrados na documentação oficial, aqui neste link https://www.metatrader5.com/en/terminal/help/start_advanced/start

E o conteúdo final da pasta deve ser conforme abaixo:

 

Então, podemos rodar o script para criar os arquivos INI. E para isso, o código abaixo deve ser copiado e colado no terminal linux, através de uma sessão SSH usando um cliente de acesso como o putty.

Veja que as variáveis mtlogin e mtpass devem ser ajustados para os dados do seu metatrader. E veja que se o caminho do eu metatrader for diferente do abaixo, ele também deve ser ajustado.

 

Copie todo o código em itálico e cole no seu terminal linux na pasta RCBT.

template_file=template.tpl
mtlogin=123123123
mtpass=321321321
for a in $(ls *.set);
do
inperiod=$(rg -g $a “inPeriod” | sed ‘s/.set:/\t/’ | sed ‘s/=/\t/’ | cut -d’|’ -f1 | cut -f3 ; )
ineaname=$(rg -g $a “inEAName” | sed ‘s/.set:/\t/’ | sed ‘s/=/\t/’ | cut -d’|’ -f1 | cut -f3 ; )
ineaset=$(rg -g $a “inPeriod” | sed ‘s/.set/\t/’ | sed ‘s/=/\t/’ | cut -d’|’ -f1 | cut -f1 ; )
eval “echo \”$(cat “${template_file}”)\”” > INI/$ineaset.ini
echo “\””C:’\’Program Files’\’MetaTrader 5 XP’\’terminal64.exe”\”” /config:C:’\’tmp’\’bt’\’$ineaset.ini >> rodabt.bat
done

 

Ao copiar e colar este código acima no seu terminal linux na pasta RCBT, ele vai criar os arquivos .ini dentro da pasta INI e estes arquivos serão necessários para iniciar o backtest automatizado no ambiente windows e também vai criar o arquivo rodabt.bat

Depois que rodar os comandos acima, transfira todo o conteúdo da pasta RCBT para o seu ambiente windows usando o WinSCP para a pasta de destino c:\tmp\bt\

Próximo passo é localizar o arquivo de datafolder do seu metatrader, para isso, abra ele e selecione File e então Open Data folder.

 

Nesta pasta que foi aberta, você precisa criar a pasta RC dentro de MQL5\Profiles\Tester\ E copiar os arquivos .set que foram utilizados para criar o arquivo .INI para esta pasta. E deve ficar similar a imagem abaixo.

 

Também precisamos criar a pasta para onde os arquivos .htm serão exportados automaticamente quando terminar o processo do backtest. E para isso, crie a pasta chamada RC na raiz da pasta principal do seu Data Folder.

Feito isso, a preparação está feita e pode-se iniciar o backtest automatizado executando o arquivo rodabt.bat .

Ao final do processo, os arquivos .htm vão estar na pasta RC conforme abaixo.

 

Fim!!

MetaTrader – Como Rodar BackTest via linha de comando

Deixe uma resposta