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.

Monday, January 14, 2013

Friday, March 02, 2012

Sincronizando pastas com SyncToy

Para você que precisa manter sempre um backup com um HD externo esta ferramenta é muito simples, prática e fez o que promete.

Está disponível para 32 e 64 bits. De uma olhada através do site oficial http://www.microsoft.com/download/en/details.aspx?id=15155

HFS - http file server

Segue a dica para aqueles que já precisaram de um servidor http para fazer atualização de IOS, para realizar testes em link de wan fazendo download de um arquivo de um site ao outro ou até mesmo para poder disponibilizar um arquivo para download.

O HFS http://www.rejetto.com/hfs/ é um programa simples, leve e prático para estas situações, não requer instalação é só baixar e rodar o mesmo.


Valeu