В настоящее время я тестирую советника по мультивалютным парам в тестере стратегий MT5 и получаю разные результаты, когда подключаю его к разным валютным парам. Советник торгует на AUDUSD и GBPCHF.
Когда я прикрепляю его к AUDUSD, он получает 10k прибыли.
Когда я прикрепляю его к GBPCHF, он получает более 30 тысяч прибыли.
Когда я прикрепляю его к USDCHF (я думал, что функция OnTick() будет реагировать на изменения AUDUSD и GBPCHF при следовании за USDCHF), он получает около 17k прибыли.
Это проблема использования функции OnTick()? Или есть какая-то скрытая проблема в бэктестинге мультивалютных советников? Или это просто какая-то неразбериха в моем коде?
Код не должен иметь значения. Почему тестер должен иметь какое-то значение для прикрепленной валютной пары, если вся торговля ведется на двух предопределенных валютных парах, и вся торговля также ведется на открытии нового бара, а не на каждом тике.
Разве функция "on tick" не работает только для валюты графика? Я бы сказал, что на 99% это так. Думаю, можно создать бесконечный цикл, обновляющий котировки каждую секунду или около того, чтобы получить более точные тики. Однако это изменит всю структуру приложения.
На самом деле код не должен иметь значения. Зачем тестеру какая-то разница для прикрепленной валютной пары, если вся торговля ведется на двух предопределенных валютных парах и вся торговля также ведется на открытии нового бара, а не каждого тика.
Возможно, вам следует попробовать OnBookEvent() вместо OnTick()? - OnTick() срабатывает только при наступлении тика текущего символа.
OnBookEvent
Функция OnBookEvent() является обработчиком события BookEvent. BookEvent генерируется для экспертов только при изменении глубины рынка. Она должна быть типа void и иметь один параметр типа string:
voidOnBookEvent(conststring&symbol); |
Чтобы получать события BookEvent для любого символа, достаточно предварительно подписаться на получение этих событий для данного символа с помощью функции MarketBookAdd() .Чтобы отказаться от подписки на получение событий BookEvent для определенного символа, вызовите функцию MarketBookRelease() .
В отличие от других событий, событие BookEvent является широковещательным. Это означает, что если один эксперт подписался на получение событий BookEvent с помощью MarketBookAdd, то все остальные эксперты, имеющие обработчик OnBookEvent(), получат это событие. Поэтому необходимо проанализировать название символа, которое передается в обработчик как параметрconst string& symbol.
У меня та же проблема: при бэктестинге мультивалютного советника я получаю совершенно разное поведение в зависимости от того, какой символ я выбираю на панели тестера стратегий.
Это крайне неприятно. Рош? Кто-нибудь? Можете прокомментировать, пожалуйста?
Даже если on tick применяется только к выбранному графику, и я, и envid работаем по открытию нового бара. В моем случае я использую дневные бары, поэтому даже если тик открытия новых баров в разных валютах происходит в разное время, таких резких различий, как у меня, быть не должно.
Я не включаю свой советник по очевидным причинам. Давайте посмотрим, есть ли у нас такая же проблема с советником, который был опубликован здесь: https://www.mql5.com/en/articles/105.
Я был бы очень рад услышать от любого, кто имеет успех в создании мультивалютного советника и, в частности, не страдает от этого расхождения.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Возможно, вам следует попробовать OnBookEvent() вместо OnTick()? - OnTick() срабатывает только при наступлении тика текущего символа.
OnBookEvent
Функция OnBookEvent() является обработчиком события BookEvent. BookEvent генерируется для экспертов только при изменении глубины рынка. Она должна быть типа void и иметь один параметр типа string:
voidOnBookEvent(conststring&symbol); |
Чтобы получать события BookEvent для любого символа, достаточно предварительно подписаться на получение этих событий для данного символа с помощью функции MarketBookAdd() .Чтобы отказаться от подписки на получение событий BookEvent для определенного символа, вызовите функцию MarketBookRelease() .
В отличие от других событий, событие BookEvent является широковещательным. Это означает, что если один эксперт подписался на получение событий BookEvent с помощью MarketBookAdd, то все остальные эксперты, имеющие обработчик OnBookEvent(), получат это событие. Поэтому необходимо проанализировать название символа, которое передается в обработчик как параметрconst string& symbol.
Вот пример. Используя советника 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).
Так ли это должно быть? И если да, то может ли кто-нибудь сказать нам, что это значит?
Действительно ли мы готовы к мультивалютному бэктестингу/оптимизации?
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Вот пример. Используя советника 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.
- 2010.07.08
- Nikolay Kositsin
- www.mql5.com
Привет, у меня была такая же проблема (разные результаты), но я решил ее с помощью IsNewBar().
Я согласен с baq, так что же нам делать? Возьмите кавычки и эту функцию.
Only if IsNewBar(some symbol) then blah blah blah blah
Для моего советника я получил те же результаты, прикрепляя его к разным символам.
Статья, из которой я взял эту функцию, находится здесь: https://www.mql5.com/en/articles/105.
Али, пример, который я привел выше, это советник, на который вы ссылаетесь, который является источником упомянутой вами функции IsNewBar() и уже использует ее.
Как вы это объясните?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В настоящее время я тестирую советника по мультивалютным парам в тестере стратегий MT5 и получаю разные результаты, когда подключаю его к разным валютным парам. Советник торгует на AUDUSD и GBPCHF.
Когда я прикрепляю его к AUDUSD, он получает 10k прибыли.
Когда я прикрепляю его к GBPCHF, он получает более 30 тысяч прибыли.
Когда я прикрепляю его к USDCHF (я думал, что функция OnTick() будет реагировать на изменения AUDUSD и GBPCHF при следовании за USDCHF), он получает около 17k прибыли.
Это проблема использования функции OnTick()? Или есть какая-то скрытая проблема в бэктестинге мультивалютных советников? Или это просто какая-то неразбериха в моем коде?