English Русский 中文 Español Deutsch 日本語
Teste de Visualização: Melhoria de funcionalidade

Teste de Visualização: Melhoria de funcionalidade

MetaTrader 4Testador | 18 fevereiro 2016, 14:07
765 0
Andrey Khatimlianskii
Andrey Khatimlianskii


1. Motivação

A partir da versão 196, o terminal do cliente MetaTrader 4 oferece a função de visualização de testes. Ela permite levar o controle dos testes do expert advisor a um novo nível. Agora, o programador de negociações pode examinar cada ação do seu expert advisor através da verificação da operação deste no histórico!

Você pode ler sobre como usar o visualizador no artigo chamado Teste de expert advisors no terminal do cliente MetaTrader 4: Um olhar para fora. Nosso artigo descreve como tornar o provador de estratégias altamente semelhante ao terminal.

Então, qual é a particularidade principal do provador? O que está ausente na visualização? A ausência mais importante é, talvez, a da aba "transação".

Quantas posições foram abertas? Quando o pedido pendente será ativado? O StopLoss da posição se moveu? Qual é o valor da margem no momento e qual é a distância até o nível de MarginCall? Nós encontraremos respostas a estas e muitas outras perguntas na aba "transação" do terminal. Mas o que podemos fazer ao realizar testes?

O presente artigo trata da solução a este problema.

2. Aspectos técnicos

Começaremos a criação do código com a definição do problema, como sempre. Que resultado queremos obter?
- Como foi dito anteriormente, nós precisamos realizar algo análogo à aba "negociação", ou seja, visualizar informações sobre todas as posições abertas e pedidos pendentes.
- As informações devem estar sempre atualizadas e serem facilmente legíveis.
- O programa deve ser bastante fácil de usar: a sua conexão ao expert advisor não deve exigir muito esforço.

Agora vamos discutir aspectos técnicos. Como o programa será formado: como um indicador ou como uma biblioteca de função externa?

É óbvio que formar um indicador em uma janela separada poderia ser a melhor solução. Ele estaria sempre visível, não bloquearia o gráfico de preços e seria atualizado em cada tick. Mas nós nos deparamos com um novo problema ao usar um indicador: ele obtém todos os seus dados sobre pedidos do terminal normal, e não do terminal 'virtual' (de teste), ou seja, durante testes, ele exibiria informações sobre o estado atual da conta, sem reagir ao teste em si.

Então nós precisamos encontrar uma alternativa, um tipo de porta de entrada, para resolver o nosso problema.

Nós ainda vamos criar um indicador, mas ele irá cumprir apenas a função de um "criador de sub-janelas de gráfico". Ele não exibirá nada, ou seja, nós sempre teremos uma parte 'reservada' do gráfico. Isso é necessário para que a sub-janela criada possa ser salva sob um nome único no modelo tester.tpl ou no modelo <nome_do_expert>.tpl.

A exibição e a atualização de informações será atribuída a uma biblioteca de funções formada no arquivo incluso.

3. Colocação em uso

Primeiramente, um modelo de gráfico deve ser criado, e ele usará o visualizador. Simplesmente ajuste o gráfico (cores, grade, escala), anexe o arquivo vTerminal.mq4 ao gráfico e use o comando "salvar modelo":



Aparência do gráfico antes de ser salvo




Janela "salvar como modelo"


Para fins de visualização, o modelo chamado tester.tpl ou <nome_do_expert>.tpl será usado. É o nome que deve ser usado ao salvar o modelo.

4. Integração com o expert advisor

Funções que exibem informações sobre posições são salvas no arquivo incluso chamado VisualTestingTools.mq4, localizado no diretório ...\MetaTrader 4\experts\include\. Primeiramente, ele precisa estar anexo ao expert advisor: insira a linha #include <VisualTestingTools.mq4> antes da função "start" (iniciar). Ele então terá a seguinte aparência (exemplo do CrossMACD_DeLuxe):


...
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;
 
#include <VisualTestingTools.mq4>
 
int start()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }


    int _GetLastError = 0;
...


Agora nós podemos usar as funções em qualquer parte do programa. Chame uma delas - vTerminalInit() - será colocada na função init() do expert advisor, pois ela só precisa ser chamada uma vez, dado que a sua função é criar objetos para exibir informações. Uma outra - vTerminalRefresh() - deve ser chamada a cada tick. Ela atualizará informações sobre posições abertas. O código do EA que usa as funções terá a seguinte aparência:


...
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;
 
#include <VisualTestingTools.mq4>
 
int init()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }
    vTerminalInit();
    return(0);
  }
 
int start()
  {
    if ( FastEMAPeriod >= SlowEMAPeriod ) 
      { 
        return(-1); 
      }
    vTerminalRefresh();
 
    int _GetLastError = 0;
...


Você pode baixar o arquivo CrossMACD_DeLuxe_Visual.mq4 do expert advisor, ao qual todas as alterações necessárias já foram feitas.

5. Testando

Agora, vamos ver o que temos.
Primeiro, novas variáveis externas foram adicionadas ao expert advisor:




Novas variáveis externas estão disponíveis após o arquivo VisualTestingTools.mq4 ter sido adicionado ao código do expert advisor


O seu destino é intuitivo, mas eu gostaria de oferecer mais detalhes em relação a elas:
- Fileiras - a quantidade máxima de linhas mostradas na exibição. Para a maior parte das estratégias, 10 linhas bastarão;
- BigText (texto grande) - utilize caso queira aumentar as fontes;
- SignalPoints (pontos de sinal) - distância em pontos, começando a partir dos campos nos quais Stop Loss, Take Profit e Open Price de pedidos pendentes estarão destacados. Por exemplo, se SignalPoints = 10, então a cor do campo Stop Loss mudará quando o preço estiver a 10 pontos do Stop Loss da posição;
- MainColor (cor principal) - cor da rubrica do terminal e da barra informando sobre a conta (balanço, equidade, ...).
- BuyColor (cor de compra) - cor das informações da posição de compra;
- BuyOPColor - cor do campo Open Price, que irá substituir a cor principal quando o preço atual se aproximar do nível de Open de Buy Stop e Buy Limit;
- BuySLColor - cor que irá substituir a cor principal quando o preço se aproximar do nível de Stop Loss de posições de compra;
- BuyTPColor - cor que irá substituir a cor principal quando o preço se aproximar do nível de Take Profit de posições de compra.
- SellOPColor, SellSLColor e SellTPColor - o mesmo em relação a posições de venda.

Vamos configurar MainColor como "preto" e pressionar OK. O expert está pronto para testes agora. Antes de pressionar o botão "iniciar", verifique a "visualização" e veja os resultados:



Até não haver posições abertas, o nosso "terminal" exibe apenas a rubrica e a barra de status da conta. Vamos esperar até que um sinal apareça e o expert abra uma posição.




Uma posição de venda é aberta como sendo a primeira. Como você pode ver, a linha está vermelha.

Por favor, dirija a sua atenção à barra de status da conta. Ela contém tudo o que costumávamos ver na aba "transação" do terminal. Todas as informações são atualizadas a cada tick, então você pode ver as mudanças no lucro da posição.




Quando o preço se aproxima do nível de Stop Loss da posição, a cor do campo StopLoss muda para aquela predefinida pelo usuário:



Na minha opinião, é muito bom.

6. Problemas possíveis

Um outro recurso do uso do tester.tpl com o indicador vTerminal deve ser mencionado: Durante os testes, a função que deve encontrar a janela do indicador (WindowFind()) é desativada. É por isso que o número da sub-janela é configurado explicitamente no código:


    win = WindowFind( "vTerminal" );
    if ( IsTesting() ) { win = 1; }


Caso o modelo contenha outros indicadores a serem desenhados em uma janela separada, todas as informações sobre eles serão exibidas na janela superior. ou seja, você precisa colocar o vTerminal por cima, ou escrever win = número da sub-janela; ao invés de win = 1; .

Nenhum outro problema foi encontrado no trabalho com o indicador.

7. Conclusão

Para chegar a uma bela conclusão, eu gostaria de mostrar algumas capturas de tela.















Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1420

Arquivos anexados |
vTerminal.mq4 (0.56 KB)
Segredos do terminal do cliente MetaTrader 4: Indicadores Segredos do terminal do cliente MetaTrader 4: Indicadores
Você vai escrever o seu próprio indicador? Talvez você descubra que aquilo que você precisa de um indicador já está integrado ao terminal do cliente. Então por que reinventar a roda? Uma tabela resumida das características de indicadores integrados; recursos especiais e métodos de anexação de indicadores a um gráfico; construção de níveis; exibição de indicadores em cronogramas diferentes.
Estratégias de negociação Estratégias de negociação
Todas as categorias de classificação de estratégias de negociação são inteiramente arbitrárias. A classificação abaixo tem como objetivo enfatizar as diferenças básicas entre abordagens possíveis de negociação.
Dez "erros" cometidos por novatos em transações comerciais? Dez "erros" cometidos por novatos em transações comerciais?
O artigo justifica a abordagem que consiste em construir um sistema de transações como uma sequência de pedidos inter-relacionados de abertura e fechamento em relação às condições existentes: os preços e os valores atuais do lucro/prejuízo de todos os pedidos, e não apenas em relação aos "alertas" convencionais. Nós apresentamos uma realização exemplar de um sistema de transações elementar do tipo.
Dez erros básicos cometidos por novatos em transações comerciais Dez erros básicos cometidos por novatos em transações comerciais
Há dez erros básicos cometidos por novatos em transações comerciais: realizar transações durante a abertura do mercado, ter pressa excessiva de obter lucros, adicionar lotes a uma posição desvantajosa, fechar posições começando pela melhor delas, vingança, as posições mais preferíveis, realizar transações partindo do princípio de "comprado para sempre", fechar uma posição estratégica lucrativa no primeiro dia, fechar uma posição quando é alertado a abrir uma posição oposta, dúvidas.