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


Wednesday, August 28, 2019

Criar DNS dinâmico usando no-IP

Neste post vou mostrar como você pode criar um DNS dinâmico utilizando o serviço gratuito da www.noip.com e também instalar o cliente de atualização automática do DNS.

É bem útil para quem usa o servidor virtual da google ou amazon aws para rodar o metatrader e desliga o servidor diariamente. Quando você desliga e liga o servidor, muito provavelmente o seu IP público será alterado e este serviço da noip atualiza o seu DNS automaticamente. Desta forma, você passa a utilizar um endereço de nome e não mais o endereço IP para conectar na sua máquina virtual.



Crie uma conta no site https://www.noip.com/


Acesse a sua conta, e selecione o menu DNS Dinâmico conforme imagem abaixo.




Clique em Create Hostname e preencha com o nome que você desejar e também selecione o domínio ao qual o nome vai pertencer. Tem várias opções disponível, mas vamos deixar na padrão ddns.net.




O nome criado neste exemplo foi metatradergoogle.ddns.net e o endereço IPv4 é o do servidor virtual da gcloud.

Após a criação vai ser informado no seu painel de DNS dinâmico sobre o novo hostname e a data de expiração. O noip vai te enviar email a cada 30 dias para que você confirme o seu hostname, e se você não confirmar, ele será removido.





Vamos agora instalar o programa de atualização automatica.

O noip fornece um cliente para atualizar automaticamente o IP do servidor com o seu hostname. Faça o download do Dynamic DNS Update Client (DUC) neste link.

Após baixado, instale o mesmo seguindo as instruções.

Quando finalizar, abra o mesmo. Vai ser solicitado o seu usuário e senha que é o mesmo utilizado para logar no site noip.




Após logar, você tem que clicar em edit host e selecionar o hostname que deve ser atualizado quando tiver uma alteração de IP. E então em Save.




Última configuração é clicar em File e então Preferences. E selecionar para que rode como um serviço do windows, desta forma, quando ligar o computador, ele inicia automaticamente em background e atualiza o hostname quando necessário.





A partir de agora, abra o seu Remote Desktop Client e utilize o endereço criado e não mais o endereço IP, neste caso, metatradergoogle.ddns.net


Fim!










Iniciar metatrader automaticamente ao logar

Neste post vou mostrar como iniciar o metatrader5 automaticamente ao logar no seu servidor. Isso é útil pois quando ligamos o servidor virtual (google, amazon, etc) temos que logar no servidor via RDP e então iniciar o metatrader.

Clique com o botão direito do mouse no menu iniciar do windows, e selecione run.




Na sequência, digite o comando shell:common startup conforme na imagem. E clique em ok.




Então, vai ser aberto a pasta comum de inicialização de programas que é aplicada a todos os usuários que fizerem logon no servidor. Geralmente é um único usuário que utilizamos no servidor onde roda o metatrader, então isso não importa.

Deve-se então arrastar o icone do metatrader para esta pasta conforme na imagem abaixo.




Pronto!!! Faça um teste e reinicie o servidor ou faça logout e logon para testar e validar que o metatrader está sendo inicializado automaticamente.

Fim.

Configurando servidor windows para auto logar ao iniciar

Neste post vou comentar como configurar o seu servidor virtual seja ele google ou amazon para fazer o autologon quando for inicializado.

A microsoft disponibiliza um programa chamado autologon que permite que você configure o usuário e senha para ele logar automaticamente quando o servidor for iniciado. Para ler mais a respeito acesse o site da Microsoft neste link.

Baixe o arquivo neste link e descompacte ele no seu servidor.

Em seguida, abra o arquivo Autologon.exe, e aceite os termos do programa.

Logo após, vai abrir esta tela abaixo onde você precisa preencher com os dados do usuário que é utilizado para administrar o servidor. O campo Domain pode deixar como vem preenchido por padrão.



Após preencher os dados, clique em Enable. Caso queira desabilitar, é só rodar o programa novamente e clicar em Disable.

Fim.