тест идет по тикам того символа, который указан в параметрах тестера
этот нюанс актуален для всех советников ищущих точку входа на каждом тике
решением может быть вызов ontick() в ontimer(), но это сильно тормозит процесс тестирования
тест идет по тикам того символа, который указан в параметрах тестера
этот нюанс актуален для всех советников ищущих точку входа на каждом тике
решением может быть вызов ontick() в ontimer(), но это сильно тормозит процесс тестирования
А почему тогда в одном варианте посчиталось правильно для всех?
В это время в тестере был установлен GBPUSD
UPD: Моделирование : Только цены открытия
точный ответ в коде вашего советника
если советник работает только по ценам открытия, тогда результаты тестов должны быть одинаковыми
иначе сами результаты тестов в таком режиме не достоверны
загляните в код, чтобы однозначно ответить себе на вопрос "как он работает?"
и еще как вариант - отсутствие м1 баров по gbpusd в тех местах истории, где по другим парам есть бары с сделкамиточный ответ в коде вашего советника
если советник работает только по ценам открытия, тогда результаты тестов должны быть одинаковыми
иначе сами результаты тестов в таком режиме не достоверны
загляните в код, чтобы однозначно ответить себе на вопрос "как он работает?"
и еще как вариант - отсутствие м1 баров по gbpusd в тех местах истории, где по другим парам есть бары с сделкамиВ код заглянул)
Я его сам писал.
OnTick() работает, только если NewBar==true, исключительно на открытии свечи М1.
Иначе return
.......
Такую странную зависимость результатов от символа в настройках тестера трудно объяснить отсутствием баров М1 по GBPUSD...
Ведь именно при установке этой пары в настройках тестера результаты по всем парам правильные и соответствуют одиночному тестированию каждой пары.
А нет ли у Вас ссылки на ветку, где утверждается, что тестер работает по тикам символа, который установлен в параметрах?
В код заглянул)
Я его сам писал.
OnTick() работает, только если NewBar==true, исключительно на открытии свечи М1.
Иначе return
.......
Такую странную зависимость результатов от символа в настройках тестера трудно объяснить отсутствием баров М1 по GBPUSD...
Ведь именно при установке этой пары в настройках тестера результаты по всем парам правильные и соответствуют одиночному тестированию каждой пары.
А нет ли у Вас ссылки на ветку, где утверждается, что тестер работает по тикам символа, который установлен в параметрах?
В код заглянул)
Я его сам писал.
OnTick() работает, только если NewBar==true, исключительно на открытии свечи М1.
Иначе return
.......
Такую странную зависимость результатов от символа в настройках тестера трудно объяснить отсутствием баров М1 по GBPUSD...
Это как раз всё и объясняет. Почитайте статьи и документацию, чтобы понять, что для мультивалютных стратегий вы должны самостоятельно обеспечить синхронизацию на всех используемых символах для получения повторяемых результатов независимо от символа, на котором запущен советник.
А какие статьи почитать?
А какие статьи почитать?
Читать много. На вскидку
-
поиск по статьям: мультивалютных
-
документация: Тестирование торговых стратегий
Советник который ловит новый бар (кроме первого принта - первый принт служебный).
//+------------------------------------------------------------------+ //| Expert 1.mq5 | //| Copyright © 2021, Vladimir Karputov | //+------------------------------------------------------------------+ #property copyright "Copyright © 2021, Vladimir Karputov" #property version "1.00" //--- input parameters input int Input1=9; //--- datetime m_prev_bars = 0; // "0" -> D'1970.01.01 00:00'; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- forced initialization of variables m_prev_bars = 0; // "0" -> D'1970.01.01 00:00'; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- we work only at the time of the birth of new bar datetime time_0=iTime(Symbol(),Period(),0); if(time_0==m_prev_bars) return; m_prev_bars=time_0; Print(Symbol(),", ",EnumToString(Period()),", ",TimeToString(time_0,TIME_DATE|TIME_SECONDS)); } //+------------------------------------------------------------------+
Запуск в режиме "каждый тик на основе реальных тиков" сначала на AUDUSD, PERIOD_M1
2021.01.04 00:02:38 AUDUSD, PERIOD_M1, 2021.01.04 00:02:00 2021.01.04 00:03:03 AUDUSD, PERIOD_M1, 2021.01.04 00:03:00 2021.01.04 00:04:05 AUDUSD, PERIOD_M1, 2021.01.04 00:04:00 2021.01.04 00:05:00 AUDUSD, PERIOD_M1, 2021.01.04 00:05:00 2021.01.04 00:06:09 AUDUSD, PERIOD_M1, 2021.01.04 00:06:00 2021.01.04 00:07:22 AUDUSD, PERIOD_M1, 2021.01.04 00:07:00 2021.01.04 00:08:09 AUDUSD, PERIOD_M1, 2021.01.04 00:08:00 2021.01.04 00:09:09 AUDUSD, PERIOD_M1, 2021.01.04 00:09:00
затем на USDRUB, PERIOD_M1
2021.01.04 10:00:00 USDRUB, PERIOD_M1, 2021.01.04 10:00:00 2021.01.04 10:01:00 USDRUB, PERIOD_M1, 2021.01.04 10:01:00 2021.01.04 10:02:00 USDRUB, PERIOD_M1, 2021.01.04 10:02:00 2021.01.04 10:03:00 USDRUB, PERIOD_M1, 2021.01.04 10:03:00 2021.01.04 10:04:00 USDRUB, PERIOD_M1, 2021.01.04 10:04:00
ещё на USDSEK, PERIOD_M1
2021.01.04 00:30:05 USDSEK, PERIOD_M1, 2021.01.04 00:30:00 2021.01.04 00:31:00 USDSEK, PERIOD_M1, 2021.01.04 00:31:00 2021.01.04 00:32:01 USDSEK, PERIOD_M1, 2021.01.04 00:32:00 2021.01.04 00:33:02 USDSEK, PERIOD_M1, 2021.01.04 00:33:00
Но это не самое интересное - здесь можно увидеть, что на символе в принципе в 00:01 не было баров.
Самое интересное, если в терминале зайти в символы и заказать тики:
Рис. 1. USDJPY
Рис. 2. EURUSD
И это только начало пути ...
Читать много. На вскидку
-
поиск по статьям: мультивалютных
-
документация: Тестирование торговых стратегий
-
Советник который ловит новый бар (кроме первого принта - первый принт служебный).
Владимир, спасибо за столь развернутый ответ.
Пока я не понял, этот вопрос - перебор параметров input для разных символов в одном прогоне - в принципе решён ?
Вот здесь https://www.mql5.com/ru/forum/170952/page68#comment_6406566 утверждается, что можно с помощью костыля (специального индикатора) ловить новый бар каждого символа, независимо от установленного в тестере.
И я не понял, что значат обведённые строки в тиковых данных ?
В принципе, тики меня не интересуют, я делаю ТС на Н1 и Н4 с поминутным контролем, поэтому основной график у меня М1
UPD: На форуме оптимизация в МТ5 понимается, как поиск лучших input-параметров по критерию и пишут, что я не понимаю что такое тестирование и оптимизация. А что если мне нужно просто прогнать сочетания input-параметров для разных символов и вывести показатели ТС в свой репорт (желательно в одном прогоне) ? Это как будет называться ? А та оптимизация, про которую на форуме пишут, является просто подгонкой под график, т.к. на основе тех критериев, которые предлагаются в тестере, можно что-то сказать о качестве торговой системы, но ничего - о степени подгонки ТС к графику.
- 2018.01.28
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ни один из них нельзя было оптимизировать по нескольким валютам в одном прогоне оптимизации.
Пришлось придумывать ...
Моделирование : Только цены открытия
Отдельное тестирование каждой пары по первому варианту, чистая прибыль:
AUDNZD - 4180,96
EURUSD - 8674,95
GBPUSD - 1686,79
Оптимизация по второму варианту : на вкладке "Параметры" перебирается idxSymbols от 0 до 2 включительно, в настройках тестера указан символ GBPUSD
Все правильно. Но ....
Поменял в настройках тестера символ на EURUSD : Изменилась прибыль по GBPUSD [проход 2]
Поменял в настройках тестера символ на AUDNZD : стали неправильные прибыли по EURUSD [проход 1] и GBPUSD [проход 2]
Что это ? Помогите ... пожалуйста ... очень прошу :(
UPD Чистка кэша не помогла