Бэктестирование мультивалютного советника

Andriy Moraru  

В настоящее время я тестирую советника по мультивалютным парам в тестере стратегий MT5 и получаю разные результаты, когда подключаю его к разным валютным парам. Советник торгует на AUDUSD и GBPCHF.

Когда я прикрепляю его к AUDUSD, он получает 10k прибыли.

Когда я прикрепляю его к GBPCHF, он получает более 30 тысяч прибыли.

Когда я прикрепляю его к USDCHF (я думал, что функция OnTick() будет реагировать на изменения AUDUSD и GBPCHF при следовании за USDCHF), он получает около 17k прибыли.

Это проблема использования функции OnTick()? Или есть какая-то скрытая проблема в бэктестинге мультивалютных советников? Или это просто какая-то неразбериха в моем коде?

T Wawang R  
enivid:

В настоящее время я тестирую советника по мультивалютным парам в тестере стратегий MT5 и получаю разные результаты, когда подключаю его к разным валютным парам. Советник торгует на AUDUSD и GBPCHF.

Когда я прикрепляю его к AUDUSD, он получает 10k прибыли.

Когда я прикрепляю его к GBPCHF, он получает более 30 тысяч прибыли.

Когда я прикрепляю его к USDCHF (я думал, что функция OnTick() будет реагировать на изменения AUDUSD и GBPCHF при следовании за USDCHF), он получает около 17k прибыли.

Это проблема использования функции OnTick()? Или есть какая-то скрытая проблема в бэктестинге мультивалютных советников? Или это просто какая-то неразбериха в моем коде?

Лучше, если вы скопируете код сюда... возможно, это поможет.
Andriy Moraru  
Код не должен иметь значения. Почему тестер должен иметь какое-то значение для прикрепленной валютной пары, если вся торговля ведется на двух предопределенных валютных парах, и вся торговля также ведется на открытии нового бара, а не на каждом тике.
baq  
enivid:

Код не должен иметь значения. Почему тестер должен иметь какое-то значение для прикрепленной валютной пары, если вся торговля ведется на двух предопределенных валютных парах, и вся торговля также ведется на открытии нового бара, а не на каждом тике.

Разве функция "on tick" не работает только для валюты графика? Я бы сказал, что на 99% это так. Думаю, можно создать бесконечный цикл, обновляющий котировки каждую секунду или около того, чтобы получить более точные тики. Однако это изменит всю структуру приложения.

investeo  
enivid:

На самом деле код не должен иметь значения. Зачем тестеру какая-то разница для прикрепленной валютной пары, если вся торговля ведется на двух предопределенных валютных парах и вся торговля также ведется на открытии нового бара, а не каждого тика.

Возможно, вам следует попробовать OnBookEvent() вместо OnTick()? - OnTick() срабатывает только при наступлении тика текущего символа.

OnBookEvent

Функция OnBookEvent() является обработчиком события BookEvent. BookEvent генерируется для экспертов только при изменении глубины рынка. Она должна быть типа void и иметь один параметр типа string:

voidOnBookEvent(conststring&symbol);

Чтобы получать события BookEvent для любого символа, достаточно предварительно подписаться на получение этих событий для данного символа с помощью функции MarketBookAdd() .Чтобы отказаться от подписки на получение событий BookEvent для определенного символа, вызовите функцию MarketBookRelease() .

В отличие от других событий, событие BookEvent является широковещательным. Это означает, что если один эксперт подписался на получение событий BookEvent с помощью MarketBookAdd, то все остальные эксперты, имеющие обработчик OnBookEvent(), получат это событие. Поэтому необходимо проанализировать название символа, которое передается в обработчик как параметрconst string& symbol.

trendick  

У меня та же проблема: при бэктестинге мультивалютного советника я получаю совершенно разное поведение в зависимости от того, какой символ я выбираю на панели тестера стратегий.

Это крайне неприятно. Рош? Кто-нибудь? Можете прокомментировать, пожалуйста?

Даже если on tick применяется только к выбранному графику, и я, и envid работаем по открытию нового бара. В моем случае я использую дневные бары, поэтому даже если тик открытия новых баров в разных валютах происходит в разное время, таких резких различий, как у меня, быть не должно.

Я не включаю свой советник по очевидным причинам. Давайте посмотрим, есть ли у нас такая же проблема с советником, который был опубликован здесь: https://www.mql5.com/en/articles/105.

Я был бы очень рад услышать от любого, кто имеет успех в создании мультивалютного советника и, в частности, не страдает от этого расхождения.

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
Andriy Moraru  
investeo:

Возможно, вам следует попробовать OnBookEvent() вместо OnTick()? - OnTick() срабатывает только при наступлении тика текущего символа.

OnBookEvent

Функция OnBookEvent() является обработчиком события BookEvent. BookEvent генерируется для экспертов только при изменении глубины рынка. Она должна быть типа void и иметь один параметр типа string:

voidOnBookEvent(conststring&symbol);

Чтобы получать события BookEvent для любого символа, достаточно предварительно подписаться на получение этих событий для данного символа с помощью функции MarketBookAdd() .Чтобы отказаться от подписки на получение событий BookEvent для определенного символа, вызовите функцию MarketBookRelease() .

В отличие от других событий, событие BookEvent является широковещательным. Это означает, что если один эксперт подписался на получение событий BookEvent с помощью MarketBookAdd, то все остальные эксперты, имеющие обработчик OnBookEvent(), получат это событие. Поэтому необходимо проанализировать название символа, которое передается в обработчик как параметрconst string& symbol.

Я пытался использовать OnBookEvent(), но он просто не работает (по крайней мере, в бэктестинге). Я использовал MarketBookAdd() в функции OnInit() для обеих моих пар.
trendick  

Вот пример. Используя советника TEMA с сайта https://www.mql5.com/en/articles/105, мы получаем следующие различные поведения.

Все, что вам нужно, это советник exp_tema_en.mq5 и индикатор multistochastic_en.mq5.

В этом примере я использовал прилагаемый файл с набором параметров. Советник торгует парами EURUSD, USDCHF и USDJPY (с этими параметрами).

При подключении к EURUSD вы получаете

Эквити при привязке к EURUSD

при прикреплении к USDCHF вы получите

usdchf

Затем, с USDJPY мы получаем

usdjpy

и еще лучше, когда советник работает на AUDUSD.

audusd

Тот же советник, тот же таймфрейм (H1), те же торгуемые пары, те же даты (2009.01.01-2009.03.01).

Так ли это должно быть? И если да, то может ли кто-нибудь сказать нам, что это значит?

Действительно ли мы готовы к мультивалютному бэктестингу/оптимизации?

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
Alireza  
trendick:

Вот пример. Используя советника TEMA с сайта https://www.mql5.com/en/articles/105, мы получаем следующие различные поведения.

Все, что вам нужно, это советник exp_tema_en.mq5 и индикатор multistochastic_en.mq5.

В этом примере я использовал прилагаемый файл с набором параметров. Советник торгует парами EURUSD, USDCHF и USDJPY (с этими параметрами).

При подключении к EURUSD вы получаете


при прикреплении к USDCHF вы получите


Затем, с USDJPY мы получаем

и еще лучше, когда советник работает на AUDUSD.

Тот же советник, тот же таймфрейм (H1), те же торгуемые пары, те же даты (2009.01.01-2009.03.01).

Так ли это должно быть? И если да, то может ли кто-нибудь сказать нам, что это значит?

Действительно ли мы готовы к мультивалютному бэктестингу/оптимизации?




Привет, у меня была такая же проблема (разные результаты), но я решил ее с помощью IsNewBar().

Я согласен с baq, так что же нам делать? Получить котировки и эту функцию.

Только если IsNewBar(какой-то символ), то бла-бла-бла.

Для моего советника я получил те же результаты, прикрепляя к разным символам.

Статья, из которой я взял функцию, находится здесь: https://www.mql5.com/en/articles/105.

Creating an Expert Advisor, which Trades on a Number of Instruments
  • 2010.07.08
  • Nikolay Kositsin
  • www.mql5.com
The concept of diversification of assets on financial markets is quiet old, and has always attracted beginner traders. In this article, the author proposes a maximally simple approach to a construction of a multi-currency Expert Advisor, for an initial introduction to this direction of trading strategies.
trendick  
Ali2e7a:

Привет, у меня была такая же проблема (разные результаты), но я решил ее с помощью IsNewBar().

Я согласен с baq, так что же нам делать? Возьмите кавычки и эту функцию.

Only if IsNewBar(some symbol) then blah blah blah blah

Для моего советника я получил те же результаты, прикрепляя его к разным символам.

Статья, из которой я взял эту функцию, находится здесь: https://www.mql5.com/en/articles/105.

Али, пример, который я привел выше, это советник, на который вы ссылаетесь, который является источником упомянутой вами функции IsNewBar() и уже использует ее.

Как вы это объясните?

Причина обращения: