English Русский 中文 Español Deutsch 日本語
Modelagem de mudanças de cotação no provador e análise da estabilidade do expert advisor

Modelagem de mudanças de cotação no provador e análise da estabilidade do expert advisor

MetaTrader 4Sistemas de negociação | 18 fevereiro 2016, 15:27
457 0
Murashov Anton
Murashov Anton

Introdução

O provador de estratégias integrado ao terminal do cliente Meta Trader 4 é uma ferramenta de verificação/avaliação de qualidade muito boa em relação a estratégias de negociação realizadas no expert advisor. Mas atualmente ele possui duas características bastante críticas (na minha opinião). Em primeiro lugar, ele não usa o histórico de ticks real em relação a um símbolo, e modela ticks com base em barras de um minuto. Em segundo lugar, ele não considera o fato de que corretores mudam cotações com grande frequência, especialmente em relação a pequenos volumes de negociação ou em volumes muito grandes, e também em mercados "estreitos", de baixa liquidez. Sob as condições de possíveis mudanças de cotação, a ausência de oportunidades para se verificar o EA leva ao surgimento de "graais", transações em "picos", saltos e cotações não mercantis. Explicou-se e provou-se muitas vezes que estratégias do tipo não seriam eficientes em uma conta real, mas, infelizmente, muito frequentemente é difícil compreender se o seu expert advisor negocia em "picos" ou não. Em um gráfico do histórico no qual negociações foram colocadas, às vezes é possível ver que o provador abre negociações em saltos, mas nem sempre. Também é difícil prever se ele irá restringir a estratégia de mudança de cotação durante estes momentos ou apenas reduzir a lucratividade. Neste artigo, eu vou oferecer o meu próprio método de resolução deste problema.



Pressupostos e definições

A mudança de cotação é a resposta do corretor ao pedido que você enviou ao servidor de negociações. Esta resposta do corretor lhe informa que o preço (no qual você tentou abrir uma negociação) não é mais vigente. Isso ocorre com frequência em mercados de baixa liquidez ou voláteis, nos quais o preço pode mudar significativamente durante o processamento do seu pedido pelo terminal. Além disso, mudanças de cotação também são frequentes quando se tenta abrir durante estouros e cotas não mercantis.

Vamos considerar que o expert advisor abre e fecha apenas pedidos como OP_SELL e OP_BUY. Ele não muda uma essência, mas torna algumas funções mais simples.



Modelagem de mudanças de cotação no provador de estratégias

Vamos tentar simular mudanças de cotação com uma probabilidade pré-definida durante a abertura e o fechamento de pedidos. Antes de tudo, vamos inserir uma variável externa especial que irá definir a probabilidade de ocorrência da nossa mudança artificial de cotação. De acordo com a minha investigação/monitoramento, a probabilidade da mudança de cotação em estouros de pares de baixa liquidez fica próxima a 90%. Portanto, vamos usar este valor na análise do expert advisor.

extern int RQF_TEST = 90;

Como vamos usar a função MathRand com o retorno de um valor arbitrário, é melhor inicializar a sequência de números pseudo-aleatórios. Para este fim, a função MathSrand será executada no início do trabalho do expert advisor. Para obter informações mais detalhadas a respeito da geração de valores aleatórios e do propósito desta função, você pode consultar o livro de referência de linguagem MQL. Também devemos notar que, se não usarmos o MathSrand, apesar da "aleatoriedade" dos números da função MathRand, nós obteremos o mesmo resultado em qualquer execução da estratégia. E, em termos gerais, ele não nos é adequado:

int start()
  {
    //----
    MathSrand(TimeCurrent());

Em seguida, nós devemos escrever as nossas próprias funções OrderSend e OrderClose. Vamos chamá-las de MyOrderSend e MyOrderClose:

int MyOrderSend(int req_prob, string symbol, int cmd, double volume, double price, 
                int slippage, double stoploss, double takeprofit, 
                string comment="", int magic=0, datetime expiration=0, 
                color arrow_color=CLR_NONE)
  {
    if(IsTesting() && (MathRand() % 100) < req_prob && (cmd == OP_SELL || cmd == OP_BUY))
        return (-1); //modelling requote
    return(OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, 
           comment, magic, expiration, arrow_color));
  }
 
bool MyOrderClose(int req_prob, int ticket, double lots, double price, int slippage,
                  color Color=CLR_NONE)
  {
    if(IsTesting() && (MathRand() % 100) < req_prob)
        return (false); //modelling requote
    return (OrderClose(ticket, lots, price, slippage, Color));
  }

Agora devemos substituir todas as funções OrderSend e OrderClose no EA por MyOrderSend e MyOrderClose com a indicação da inserção antes da variável externa RQF_TEST como o primeiro argumento. Abaixo temos um exemplo do meu próprio EA.

OrderClose -> MyOrderClose:

if(MyOrderClose(RQF_TEST, ticket, amount, Bid, 0, Blue)) 
// PREV: if(OrderClose(ticket, amount, Bid, 0, Blue))
  {
    Print("Skalpel: Order #" + ticket + " closed! (BUY, " + Bid + ")");
            //... Something
  }
else
  {
    // Requote or something like this
    Print("Skalpel: Error while closing order #" + ticket + " (BUY)!");
    // ... Something
  }

OrderSend -> MyOrderSend:

ticket = MyOrderSend(RQF_TEST, Symbol(), OP_BUY, amount, Ask, 0, 
                     Bid-StopLoss*Point, Bid+TakeProfit*Point, 
                     NULL, EXPERT_MAGIC, 0, Blue);
// PREV: OrderSend(Symbol(), OP_BUY, amount, Ask, 0, Bid - StopLoss*Point, 
// Bid+TakeProfit*Point, NULL, EXPERT_MAGIC, 0, Blue);
 
if(ticket > 0)
    Print("Skalpel: Order #" + ticket + " opened! (BUY)");
else
    Print("Skalpel: Error while placing order."); 
    // ... Requote or something like this

Conclusões e análise dos resultados

Antes de tudo, devemos explicar o valor da variável RQF_TEST. Ele define a quantidade de mudanças de cotação para 100 negociações e, portanto, pode ter um valor de 0, quando não há nenhuma mudança de cotação, até 100, quando é absolutamente impossível abrir ou fechar o pedido. Se o RQF_TEST for igual a 90, como em um exemplo, isso significa que aproximadamente 90 tentativas de abrir ou fechar a transação a cada 100 tentativas irão fracassar, ou seja, a mudança de cotação será simulada.

Na verdade, os resultados, que foram recebidos com relação a vários valores de RQF_TEST, mostram a estabilidade da sua estratégia em relação a mudanças de cotação e a diferenças no fluxo de ticks do provador e do corretor.


Caso os resultados piorem conforme o RQF_TEST crescer, é necessário verificar a utilidade da estratégia, pois a sensibilidade a mudanças de cota significa que você está negociando em estouros fortes e temporários, ou que você está fazendo "pip". Muito foi dito em relação às consequências do uso de tais consultores.

Como um exemplo, vamos considerar um gráfico do trabalho de balanço clássico do EA durante estouros, com vários valores de RQF_TEST. O expert advisor foi obtido no artigo "Meu primeiro graal" (). E foi levemente modificado para fins de visualização. Todos os pedidos do tipo limite são realizados pelos mercados normais, e além disso parâmetros são recolhidos para que os gráficos mostrem mais evidentemente a deterioração dos parâmetros no momento da mudança de cotação.

Sem mudanças de cotação (RQF_TEST = 0):


Em 90 casos em 100 há uma mudança de cotação (RQF_TEST = 90):



Obviamente, a situação é bastante crítica. Especialmente quanto à estipulação de que testar EURCHF é o par extremamente pouco líquido, e mudanças de cotação são bastante frequentes até mesmo em mercados tranquilos, e muito menos em mercados com estouros. Portanto, a utilidade do uso do nosso EA vai desaparecendo, apesar do nosso belo gráfico quando a mudança de cotação se faz ausente.



Observações e adendos

Na realidade, é bastante difícil encontrar um expert capaz de deixar de ser lucrativo e se tornar desvantajoso por conta de mudanças de cotação. Eu procurei por um expert advisor do tipo, cuja queda de qualidade pudesse ser claramente demonstrada no gráfico de balanço durante um longo período de tempo. Geralmente, a mudança de cotação (até mesmo no nível de 50%) reduz a quantidade de transações e o lucro, enquanto o gráfico parece permanecer igual (constante). Há uma simples explicação para isso: o corretor não permite que você abra o pedido na "participação" em 90 casos de 100, e nos 10% restantes, você recebe alguns pips de lucro, até não estar mais proibido de usar EAs. Esse tipo de situação é descrito no artigo "Meu primeiro graal". Mas mesmo se supormos que o corretor não irá dificultar a situação (é improvável), um lucro 10 vezes reduzido (e a figura é exatamente essa quando ocorre uma mudança de cotação no nível de 90% - o expert simplesmente "ignora" 90 "participações" em 100) irá lhe privar de todas as vantagens de um "graal". Ele seria menos lucrativo do que um depósito bancário.

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

Arquivos anexados |
Graal2.mq4 (11.1 KB)
Diagramas tridimensionais - uma ferramenta profissional de análise de mercado Diagramas tridimensionais - uma ferramenta profissional de análise de mercado
Neste artigo escreveremos uma biblioteca simples para a construção de diagramas 3D e sua exibição posterior no Microsoft Excel. Usaremos as opções padrão do MQL4 para preparar e exportar os dados ao arquivo *.csv.
Filtragem de acordo com o histórico Filtragem de acordo com o histórico
O artigo descreve o uso de negociações virtuais como uma parte integral do filtro de abertura de negociações.
Erros de iniciantes no trabalho com o terminal do cliente MetaTrader 4 Erros de iniciantes no trabalho com o terminal do cliente MetaTrader 4
Errar é humano. Todos cometem erros: com maior ou menor frequência, por ignorância ou acidente. Você perguntou e agora nós respondemos às suas perguntas sobre: horário do terminal, resultados de testes, impressão no diário, símbolos, histórico do provador, importação do histórico, alavancagem, tráfego, dicas, redimensionamento, cálculos errados, conta inválida, ausência de notícias, mudança de preço, falta de dinheiro, fechamento do mercado.
Exibição dos níveis de apoio/resistência Exibição dos níveis de apoio/resistência
O artigo trata da detecção e indicação dos níveis de apoio/resistência no programa MetaTrader 4. O indicador conveniente e universal é baseado em um algoritmo simples. O artigo lida com um tópico bastante útil: a criação de um indicador simples, capaz de exibir os resultados de diferentes períodos de tempo em um espaço de trabalho.