Modelagem de mudanças de cotação no provador e análise da estabilidade do expert advisor
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
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso