Ajuda para o MetaTrader 5Trading algorítmico, robôs comerciaisRecursos de teste

Particularidades do teste

A ideia de negociação automatizada é atraente pelo fato de robôs de negociação poder trabalhar sem descanso 12h por dia, sete dias por semana. O robô não experimenta fadiga, dúvidas e medo, e até ignora problemas psicológicos. O robô está pronto para trabalhar incansavelmente, esquematizando as regras de negociação e as implementando na forma de algoritmos. Mas primeiro, você deve verificar duas condições importantes:

  • se o expert executa negociações em conformidade com as regras do sistema de negociação;
  • se a estratégia de negociação implementada no expert exibe o lucro no histórico.

O testador de estratégias embutido na plataforma foi criado para responder essas perguntas.

Ativação e execução de ordens

No que se refere a instrumentos do mercado de balcão a ativação de todos os tipos de ordens pendentes e SL/TP realiza-se segundo os preços Bid e Ask. A execução acontece segundo o preço de mercado Bid e Ask no momento da execução.

No que se refere a instrumentos financeiros, tanto a construção de gráficos como a ativação de ordens são realizadas segundo o último preço de transação (Last). A ativação de ordens limit é realizada segundo os preços Bid e Ask. Além disso, a execução de ordens limit é realiza de acordo com o preço indicado na ordem (sem derrapagem), enquanto os outros tipos de ordens são executadas de acordo com os preços de mercado atuais Bid e Ask (possível derrapagem).

Examinemos um exemplo no instrumento Si-6.16. Tendo os atuais preços Bid=72570, Ask=72572, Last=72552 colocamos a ordem Buy Stop com preço de ativação 72580. No fluxo de preços, obtemos uns novos preços:

  • Bid=72588
  • Ask=72590
  • Last=72580

Nos instrumentos financeiros, o peço Last é o gatilho para a ativação de ordens stop. Por isso, a obtenção, no fluxo de preços, dum Last = 72 580 resultou na ativação das ordens Buy Stop. A execução da ordem (operação de mercado para compra) acontece segundo o atual preço de mercado Ask=72590.

Exemplo de ativação e execução da ordem Buy Stop no instrumento de mercado

Nos modos de teste "Segundo os preços de abertura" e "M1 na OHLC", a execução de ordens pendentes e SL/TP é realizada de acordo com os preços indicados nestas ordens. O algoritmo de execução a preços de mercado utilizado em condições exatas (todos os ticks e ticks reais), não é adequado para condições rudas. Nos últimos, os ticks intermediários não são gerados, e a diferença entre o preço indicado na ordem e o preço de mercado, no momento da execução (Open ou OHLC), pode ser significativa. A execução de ordens ao preço indicado nos modos "Segundo os preços de abertura" e "M1 na OHLC" dá uns resultado de teste mais precisos.

Formação de barras

Para instrumentos de bolsa, as barras, no testador de estratégias, são formadas apenas em ticks com valor zero Last. Além disso, podem chegar preços Bid e Ask, os indicadores serão calculados, mas as barras não serão formadas. No modo "Todos os ticks" não há preços zero Last. Por isso, cada novo tick vai alterar a barra.

Modelagem do spread #

A diferença entre os preços Bid e Ask é chamada spread. Ao testar, o spread não é modelado, mas sim tomado a partir dos dados históricos. Se, nos dados históricos, o spread for menor ou igual a zero, será utilizado o último conhecido no momento da geração do spread.

No testador, o spread é sempre considerado flutuante.

Variáveis globais da plataforma #

Ao testar, as variáveis globais da plataforma de negociação também são emuladas, mas não têm nada a ver com as variáveis globais da plataforma que podem ser vistas na plataforma pressionando F3. Isso significa que todas as transações com variáveis globais da plataforma, ao testar, são executadas fora da plataforma de negociação (no agente de teste).

Inicialização do histórico durante o teste #

O histórico do instrumento a ser testado é sincronizado e baixado pela plataforma a partir do servidor de negociação antes de iniciar o processo de teste. Além disso, da primeira vez, a plataforma baixa, a partir de um servidor de negociação, todo o histórico disponível do instrumento a ser testado, para não o acessar posteriormente. No futuro, será apenas feito o download de dados novos.

O agente de teste recebe o histórico do instrumento de teste, a partir da plataforma de negociação, imediatamente após executar o teste. Se durante o processo de teste forem utilizados os dados de outros instrumentos (por exemplo, um expert multimonetário), nesse caso, o agente de teste irá pedir à plataforma o histórico exigido durante o primeiro acesso. Se os dados históricos estiverem disponíveis na plataforma, eles irão ser transferidos imediatamente para os agentes de teste. Se os dados não estiverem disponíveis, a plataforma irá pedir e baixá-los a partir do servidor para os agentes de teste.

O acesso a instrumentos adicionais ocorre quando, ao efetuar negociações, é calculado o preço da taxa cruzada. Por exemplo, ao testar estratégias em EURCHF, com a moeda de depósito em dólares dos Estados Unidos, antes do processamento da primeira negociação, o agente de teste pede à plataforma o histórico do EURUSD e USDCHF, embora não haja nenhum acesso direto a estes instrumentos.

A paginação de um histórico de negociação adicional pode ser inicializada ao chamar determinadas funções a partir de programas MQL5:

Está sendo implementada paginação

Não está sendo implementada paginação

Ao chamar SymbolInfoDouble com parâmetros:

  • SYMBOL_BID
  • SYMBOL_BIDHIGH
  • SYMBOL_BIDLOW
  • SYMBOL_ASK
  • SYMBOL_ASKHIGH
  • SYMBOL_ASKLOW
  • SYMBOL_LAST
  • SYMBOL_LASTHIGH
  • SYMBOL_LASTLOW
  • SYMBOL_TRADE_TICK_VALUE
  • SYMBOL_TRADE_TICK_VALUE_PROFIT
  • SYMBOL_TRADE_TICK_VALUE_LOSS

Ao chamar SymbolInfoInteger com parâmetros:

  • SYMBOL_VOLUME
  • SYMBOL_VOLUMEHIGH
  • SYMBOL_VOLUMELOW
  • SYMBOL_TIME
  • SYMBOL_SPREAD

Ao chamar SymbolInfoTick

Ao chamar:

  • SymbolInfoString
  • SymbolName
  • SymbolSelect
  • SymbolInfoMarginRate
  • SymbolInfoSessionQuote
  • SymbolInfoSessionTrade
  • Outras funções não especificadas
  • SymbolInfoDouble e SymbolInfoInteger com outros parâmetros, não especificados à esquerda <Microsoft Translator>

Antes de testar uma estratégia multimonetária é recomendável que você primeiro baixe para a plataforma de negociação todos os dados históricos necessários. Isso irá evitar atrasos relacionados com o download de dados ao testar/otimizar. Você pode baixar o histórico, por exemplo, abrindo os gráficos correspondentes e os deslocando até ao início do histórico.

Os agentes de teste, por sua vez, obtêm o histórico a partir da plataforma e em forma de catálogo. Ao repetir o teste, não irá ocorrer a descarga do histórico do testador a partir da plataforma, pois os dados que foram baixados a partir da anterior execução do testador já estão presentes.

  • A plataforma baixa o histórico a partir do servidor de negociação apenas uma vez, ao pedir ao agente o histórico para o símbolo que está testando. O histórico é baixado em forma de catálogo para reduzir o tráfego.
  • Os ticks não são enviados pela rede, eles são gerados nos agentes de teste.

Teste multimonetário #

O testador permite efetuar a verificação, no histórico, de estratégias aplicadas em vários instrumentos. Esses experts são denominados multimonetários, porque originalmente, nas versões anteriores das plataformas, o teste era realizado apenas para um instrumento. No testador da plataforma, você pode modelar a negociação em todos os instrumentos disponíveis.

O histórico dos instrumentos utilizados é automaticamente baixado pelo testador a partir da plataforma de negociação - e não a partir do servidor de negociação! - desde a primeira vez que você acessar esse instrumento.

O agente de teste carrega apenas o histórico em falta, tendo espaço de sobra para disponibilizar os dados necessários no histórico e calcular os indicadores no início do teste. O volume mínimo do histórico, ao baixar a partir do servidor, para timeframes D1 e inferiores, é de um ano. Assim, se você executar o teste no intervalo 2010.11.01-2010.12.01 (teste com um intervalo de um mês) com um período M15 (cada barra equivale a 15 minutos), o histórico para todo o ano 2010 será pedido à plataforma. Para timeframes semanais será solicitado o histórico de 100 barras, o que equivale a cerca de dois anos (52 semanas por ano). Para testar em um timeframe mensal, o agente solicitará o histórico de 8 anos (12 meses * 8 anos = 96 meses).

Se não conseguir, por qualquer motivo, fornecer o número de barras necessárias antes do teste, a data de início vai ser automaticamente deslocada do passado para o presente, de modo a garantir esse número de barras.

Ao testar também é emulada a "Observação do mercado", a partir da qual você pode obter informações sobre instrumentos. Por defeito, no início do teste em "Observação do mercado, o testador tem apenas um símbolo, no qual é executado o teste. Todos os símbolos necessários se conectam automaticamente à "Observação do mercado" do testador - não da plataforma! - ao serem acessados.

Antes do início do teste do expert multimonetário, ative os instrumentos necessários para o teste na guia "Observação do mercado" da plataforma e faça o download dos dados para a profundidade desejada. Ao acessar, pela primeira vez, um símbolo "estranho", será realizada automaticamente para este símbolo a sincronização entre o agente de teste e a plataforma de negociação. Um símbolo "estranho" é aquele que se diferencia do símbolo no qual foi executado o teste.

Nesse momento, quando ocorre o primeiro acesso a um símbolo estranho, o processo de teste é interrompido e é paginado o histórico do par símbolo/período a partir da plataforma para o agente de teste. Ao mesmo tempo, é ativada a geração da seqüência de ticks para esse símbolo.

Para cada instrumento é gerada uma seqüência de ticks privada, em consonância com o modo de geração de ticks selecionado.

Desse modo, para realizar testes multimonetários na plataforma de negociação, não é exigido tomar qualquer medida extra. É suficiente abrir os gráficos dos instrumentos correspondentes na plataforma. O histórico dos símbolos necessários será automaticamente baixado a partir do servidor de negociação, com a condição de que os dados estejam presentes.

Modelagem do tempo no testador #

Ao testar, a hora local é sempre igual à hora do servidor. Por sua vez, a hora do servidor corresponde sempre ao fuso horário GMT.

Não há nenhuma diferença entre a hora do servidor, a local e a GMT, isso foi conscientemente feito no testador porque a conexão ao servidor nem sempre pode ser estabelecida. Ademais, os resultados do teste devem ser iguais, independentemente da conectividade. As informações sobre a hora do servidor não são armazenadas localmente, mas tomadas do servidor.

Objetos gráficos durante o teste #

Ao testar/otimizar não são criados objetos gráficos. Desse modo, ao acessar as propriedades de um objeto recém-criado, ao testar/otimizar, o expert irá receber valores nulos.

Essa restrição não se aplica aos testes em modo visual.

Sincronização de barras durante o teste no modo "Apenas preços de abertura" #

O testador na plataforma de negociação permite verificar os chamados experts "multimonetários". O expert multimonetário é um conselheiro que executa negociações em dois ou mais símbolos.

O teste de estratégias, que negocia baseado em vários instrumentos, impõe ao testador alguns requisitos técnicos adicionais:

  • geração de ticks para esses instrumentos;
  • cálculo dos valores dos indicadores para esses instrumentos;
  • cálculo dos requisitos marginais desses instrumentos;
  • sincronização de seqüências de ticks gerados segundo todos os instrumentos negociados.

O testador gera e executa, para cada instrumento, uma seqüência de ticks de acordo com o modo de negociação selecionado. Além disso, uma nova barra é aberta em cada instrumento, independentemente de como for aberta em outro instrumento. Isso significa que, ao testar o expert multimonetário, você pode presenciar o fato de uma nova barra já estar aberta em um instrumento e em outro ainda não (acontece freqüentemente). Assim, ao testar tudo pode acontecer como na vida real.

Essa autêntica modelagem do desenvolvimento do histórico no testador não causa problemas, enquanto forem utilizados os modos de teste "Todos os ticks" e "1 minuto OHLC". Usando esses modos, é gerado, nos limites de uma vela, um número suficiente de ticks de modo a esperar pelo momento de sincronização das barras com diferentes símbolos. Mas como testar estratégias multimonetárias no modo "Apenas preços de abertura", se lhe for exigido sincronizar barras nos instrumentos negociados? Pois, nesse regime, o expert é chamado apenas em um tick, que corresponde ao momento de abertura da barra.

Vamos explicar, por exemplo: se testarmos o expert no símbolo EURUSD e no EURUSD for aberta uma nova vela horária, nós facilmente o saberemos. Ao testar no modo "Apenas preços de abertura", a chegada do novo tick corresponde ao momento de abertura da barra no período de teste. Mas não há nenhuma garantia de que a nova vela seja aberta pelo símbolo GBPUSD usado pelo expert.

Agentes de teste #

O teste na plataforma de negociação ocorre com a ajuda dos agentes de teste. Os agentes locais são criados e conectados automaticamente. O número de agentes, por defeito, corresponde ao número de núcleos no computador.

Cada agente de teste tem a sua cópia de variáveis globais, a qual não está relacionada, de modo nenhum, com a plataforma. A própria plataforma é o controlador que distribui as tarefas aos agentes locais e remotos. Após executar uma tarefa de teste do expert com parâmetros especificados, o agente retorna os resultados à plataforma. Ao fazer um teste isolado é usado apenas um agente.

O agente armazena o histórico recebido da plataforma em pastas separadas, segundo o nome do instrumento, ou seja, o histórico para EURUSD é armazenado em uma pasta com o nome EURUSD. Além disso, o histórico dos instrumentos é dividido por fontes. A estrutura para o armazenamento do histórico é a seguinte:

catálogo_do_testador\Agent-IPaddress-Port\bases\nome_da_fonte\history\nome_do_instrumento

Por exemplo, o histórico de EURUSD do servidor MetaQuotes-Demo pode ser salvo na pasta catálogo_do_testador\Agent-127.0.0.1-3000\bases\MetaQuotes-Demo\EURUSD.

Após terminar o teste, o agente local se encontrará em modo de espera pelas tarefas seguintes durante 5 minutos, para não perder tempo na execução das seguintes chamadas. Apenas quando expira o modo de espera, o agente local cessa o seu trabalho e é descarregado da memória do computador.

Quando o teste é concluído antecipadamente da parte do usuário (botão "Cancelar"), bem como ao fechar a plataforma de negociação, todos os agentes locais cessam o seu trabalho e são descarregados da memória.

Troca de dados entre a plataforma e o agente #

Ao executar o teste, a plataforma prepara alguns blocos de parâmetros para enviar ao agente:

  • Parâmetros de entrada do teste (modo de modelagem, intervalo de teste, instrumento, critérios de otimização, etc.)
  • Lista de escolhas na "Observação do mercado" dos instrumentos
  • Especificação do instrumento testado (tamanho do contrato, desvios admissíveis do mercado para instalação de stop loss e take profit, etc.)
  • Expert testado e valores dos seus parâmetros de entrada
  • Informação sobre arquivos adicionais (bibliotecas, indicadores, arquivos de dados)

Para cada bloco de parâmetros é criado um sinal cifrado no formato hash-MD5 que é enviado para o agente. O hash-MD5 é único para cada conjunto, o seu volume é muito menor do que o volume da informação em cuja base foi calculado.

O agente recebe os hashes de blocos e os compara como os que já armazenou. Se o sinal desse bloco de parâmetros estiver ausente, ou o hash enviado for diferente do atual, o agente consulta o seu próprio bloco de parâmetros. Desse modo, o tráfego entre a plataforma e o agente é reduzido.

Após a realização do teste, o agente retorna à plataforma todos os resultados da execução, exibidos nas guias "Resultados de teste" e "Resultados da otimização", o lucro recebido, o número de negociações, o coeficiente de Sharpe, o resultado da função OnTester(), etc.

Ao fazer a otimização, a plataforma distribui tarefas aos agentes para realização de testes de pequenos pacotes, em cada pacote se encontram vários exercícios (cada exercício significa um teste isolado com um conjunto de parâmetros de entrada). Isso reduz o tempo de intercâmbio entre a plataforma e o agente.

O agente nunca grava os arquivos EX5 recebidos da plataforma no disco rígido (expert, indicadores, biblioteca, etc.), por motivos de segurança, para que não seja possível tirar proveito dos dados enviados no computador onde o agente está instalado. Todos os restantes arquivos, incluindo DLL, são gravados no "sandbox". Nos agentes remotos não é possível testar experts usando DLL.

Os resultados do teste são gravados na cache de resultados da plataforma para aceder rapidamente ao último, se for necessário. Para cada conjunto de parâmetros a plataforma procura, na cache de resultados, aqueles já prontos a partir de execuções anteriores para evitar a repetição de execuções. Se o resultado com tais conjuntos de parâmetros não for encontrado, ao agente é dada a tarefa de realizar o teste.

Todo o tráfego entre a plataforma e os agentes é criptografado.

Os ticks não são enviados pela rede, eles são gerados nos agentes de teste.

Uso da pasta geral de todas as plataformas de negociação #

Todos os agentes de teste são isolados uns dos outros e da plataforma de negociação: cada um deles tem a sua própria  pasta onde são registrados os logs do agente. Além disso, todas as operações de arquivos, durante os testes do agente, ocorrem na pasta nome_do_agente/MQL5/Files. No entanto, você pode levar a cabo a interação entre agentes locais e a plataforma de negociação através da pasta geral de todas as plataformas.

Uso da DLL #

Para acelerar a otimização, você pode utilizar tanto os agentes remotos como os locais. Embora existam algumas limitações para os agentes remotos. Em primeiro lugar, os agentes remotos não exibem nos seus logs resultados da execução da função Print() e mensagens sobre abertura/fechamento de posições. Ademais, no log é exibido o mínimo de informação para que os experts escritos incorretamente não encham com mensagens o disco rígido do computador, onde trabalha o agente remoto.

Em segundo lugar, é proibido utilizar DLL durante o teste de experts. As chamadas por DLLs estão definitivamente proibidas nos agentes remotos por razões de segurança. Nos agentes locais, as chamadas por dll nos experts testados são permitidas somente se estiver instalada a correspondente permissão "Permitir a importação de DLL".

Expert Advisors

Ao utilizar dados recebidos (scripts, indicadores) da parte dos experts que exigem a permissão chamadas por DLL, você deve estar ciente de todos os riscos pelos quais será responsável, se essa opção estiver habilitada nas configurações da plataforma. Independentemente de o expert ser utilizado para testes ou para executar ações no gráfico.