Estou atualmente testando um EA de múltiplos pares de moedas no MT5 Strategy Tester e obtenho resultados diferentes ao anexá-lo a diferentes pares de moedas. A EA negocia em AUDUSD e GBPCHF.
Quando eu o anexar ao AUDUSD, obtenho um lucro de 10k.
Quando eu o anexar ao GBPCHF, obtenho mais de 30k de lucro.
Quando eu o anexar ao USDCHF (eu pensei que a função OnTick() reagirá tanto no AUDUSD quanto no GBPCHF ao seguir o USDCHF), ele terá cerca de 17k de lucro.
É o problema de usar a função OnTick()? Ou há algum problema oculto no backtesting de EAs com múltiplas moedas? Ou é apenas uma bagunça no meu código?
O código não deveria realmente importar. Por que o Testador faria alguma diferença para o par de moedas anexo se todas as negociações são feitas em dois pares de moedas pré-definidos e todas as negociações também são feitas na abertura de novas barras, não em cada tic.
A função "on tick" não é apenas para a moeda do gráfico? Eu diria que para 99% é. Acho que você pode criar um loop infinito de cotações refrescantes a cada segundo ou mais para obter ticks mais precisos. No entanto, isto mudaria toda a estrutura de uma aplicação.
O código não deve realmente importar. Por que o Testador faria alguma diferença para o par de moedas anexo se todas as negociações são feitas em dois pares de moedas pré-definidos e todas as negociações também são feitas na abertura de novas barras, não em cada tick.
Talvez você devesse tentar OnBookEvent() ao invés de OnTick()? - OnTick() é acionado somente quando o símbolo atual chega.
OnBookEvent
A função OnBookEvent() é o BookEventhandler. O BookEvent é gerado para Consultores Especialistas somente quando a Profundidade do Mercado muda. Ele deve ser do tipo void e ter um parâmetro do tipo string:
voidOnBookEvent(conststring&symbol); |
Para receber eventos do BookEvent para qualquer símbolo, você só precisa se inscrever previamente para receber estes eventos para este símbolo usando a função MarketBookAdd() .Para cancelar o recebimento dos eventos do BookEvent para um determinado símbolo, ligue para MarketBookRelease() .
Ao contrário de outros eventos, o BookEventevent é transmitido. Isto significa que se um Expert Advisor subscrever eventos do BookEvent usando MarketBookAdd, todos os outros ExpertAdvisors que tiverem o manipulador do OnBookEvent() receberão este evento. É necessário, portanto, analisar o nome do símbolo, que é passado para o manipulador como o parâmetroconst string& symbol.
Sinto o mesmo problema: testando uma EA com várias moedas, tenho um comportamento totalmente diferente, dependendo do símbolo que seleciono no painel de teste de estratégia.
Isto é extremamente incômodo. Rosh? Alguém? você pode comentar por favor?
Mesmo que o tick on se aplique apenas ao gráfico selecionado, tanto o envid como eu estamos operando na abertura de uma nova barra. No meu caso, eu uso barras diárias, portanto, mesmo que a abertura das novas barras nas diversas moedas ocorra em momentos diferentes, não há diferenças tão drásticas como as que eu experimento que deveriam acontecer.
Não estou incluindo minha EA por razões óbvias. Vamos ver se temos o mesmo problema com a EA que foi publicada aqui: https://www.mql5.com/en/articles/105.
Eu ficaria muito feliz em ouvir de qualquer pessoa que esteja tendo sucesso desconstruindo uma EA com várias moedas e, em particular, não sofrendo com esta discrepância.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Talvez você devesse tentar OnBookEvent() ao invés de OnTick()? - OnTick() é acionado somente quando o símbolo atual chega.
OnBookEvent
A função OnBookEvent() é o BookEventhandler. O BookEvent é gerado para Consultores Especialistas somente quando a Profundidade do Mercado muda. Ele deve ser do tipo void e ter um parâmetro do tipo string:
voidOnBookEvent(conststring&symbol); |
Para receber eventos do BookEvent para qualquer símbolo, você só precisa se inscrever previamente para receber estes eventos para este símbolo usando a função MarketBookAdd() .Para cancelar o recebimento dos eventos do BookEvent para um determinado símbolo, ligue para MarketBookRelease() .
Ao contrário de outros eventos, o BookEventevent é transmitido. Isto significa que se um Expert Advisor subscrever eventos do BookEvent usando MarketBookAdd, todos os outros ExpertAdvisors que tiverem o manipulador do OnBookEvent() receberão este evento. É necessário, portanto, analisar o nome do símbolo, que é passado para o manipulador como o parâmetroconst string& symbol.
Aqui está um exemplo. Usando a EA TEMA de https://www.mql5.com/en/articles/105, obtemos os seguintes comportamentos diferentes.
Tudo o que você precisa é a EA exp_tema_en.mq5 e o indicador multistochastic_en.mq5
Neste exemplo, usei o arquivo de parametrização anexo. A EA negocia os pares EURUSD, USDCHF e USDJPY (com estes parâmetros).
Quando você o anexa ao EURUSD você recebe
ao anexar ao USDCHF você receberá
Em seguida, com USDJPY obtemos
e melhor ainda, ao executar a EA no AUDUSD o resultado
Mesma EA, mesmo prazo (H1), mesmos pares negociados, mesmas datas (2009.01.01-2009.03.01).
É assim que deve ser? e se for assim, alguém pode nos dizer qual é o significado disso?
Estamos realmente prontos para o retrocesso/optimização de múltiplas moedas?
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Aqui está um exemplo. Usando a EA TEMA de https://www.mql5.com/en/articles/105, obtemos os seguintes comportamentos diferentes.
Tudo o que você precisa é o exp_tema_en.mq5 da EA e o indicador multistochastic_en.mq5
Neste exemplo, usei o arquivo de parametrização anexo. A EA negocia os pares EURUSD, USDCHF e USDJPY (com estes parâmetros).
Quando você o anexa ao EURUSD você recebe
ao anexar ao USDCHF você receberá
Em seguida, com USDJPY obtemos
e melhor ainda, ao executar a EA no AUDUSD o resultado
Mesma EA, mesmo prazo (H1), mesmos pares negociados, mesmas datas (2009.01.01-2009.03.01).
É assim que deve ser? e se for assim, alguém pode nos dizer qual é o significado disso?
Estamos realmente prontos para o retrocesso/optimização de múltiplas moedas?
Oi, eu tive o mesmo problema (resultados diferentes), mas o resolvi com a IsNewBar()
Eu concordo com a baq, então o que devemos fazer? obter as citações e esta função faz
Somente se IsNewBar(algum símbolo) então blá blá blá blá
para a minha EA obtive os mesmos resultados ligados a símbolos diferentes.
o artigo do qual recebi a função está aqui: https://www.mql5.com/en/articles/105
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Oi, eu tive o mesmo problema (resultados diferentes), mas o resolvi com a IsNewBar()
Eu concordo com a baq, então o que devemos fazer? obter as citações e esta função faz
Somente se IsNewBar(algum símbolo) então blá blá blá blá
para a minha EA obtive os mesmos resultados ligados a símbolos diferentes.
o artigo do qual recebi a função está aqui: https://www.mql5.com/en/articles/105
Ali, o exemplo que mencionei acima é o EA ao qual você se refere, que é a fonte da função IsNewBar() que você mencionou, e já a utiliza.
Como você explica isso?
- 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
Estou atualmente testando um EA de múltiplos pares de moedas no MT5 Strategy Tester e obtenho resultados diferentes ao anexá-lo a diferentes pares de moedas. A EA negocia em AUDUSD e GBPCHF.
Quando eu o anexar ao AUDUSD, obtenho um lucro de 10k.
Quando eu o anexar ao GBPCHF, obtenho mais de 30k de lucro.
Quando eu o anexar ao USDCHF (eu pensei que a função OnTick() reagirá tanto no AUDUSD quanto no GBPCHF ao seguir o USDCHF), ele terá cerca de 17k de lucro.
É o problema de usar a função OnTick()? Ou há algum problema oculto no backtesting de EAs com múltiplas moedas? Ou é apenas uma bagunça no meu código?