Pages

Monday, November 11, 2019

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.

Este artigo é baseado nos ajustes dos robôs da RobotCrowd. (www.robotcrowd.com.br).

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!!


No comments:

Post a Comment