Язык MQL — Урок 7 “тестирование и оптимизация в MT4”

На прошлом уроке Язык MQL — Урок 6 “эксперт Hedge Hog” мы написали советник Forex торгующий по стратегии Hedge Hog. Сегодня займемся его тестированием и оптимизацией в Metatrader.

Прежде чем использовать любой советник (эксперт) на реальном счете форекс необходимо убедиться в его работоспособности и разумеется — прибыльности.

Для этого необходимо выполнить следующие действия:
1. Проверить его на тестере стратегий MT4
2. Провести оптимизацию советника и проверить ее результат
3. Проверить, как работает советник форекс на демо-счете
4. Проверить советник на центовом счете форекс

Пункты 1,2,4 обязательны к выполнению! Пункт 3 желателен, но необязателен. Дело в том, что проверка на демо-счете и центовом счете занимают много времени. В отличии от тестера стратегий Metatrader 4 — торговля на них идет в реальном режиме времени. Поэтому один из этих этапов, начинающие трейдеры форекс частенько пропускают. Я настоятельно рекомендую НЕ пропускать 4 пункт — тестирование советника форекс на центовом счете. Советник может прекрасно работать на тестере и демо счете, а на реальном, как не странно, не торговать вовсе или «слить» ваш депозит. На реальном счете (центовый счет — это реальный счет с минимально разрешенными суммами депозита) присутствуют такие моменты, которых нет в тестере или на демо счете. Это отказы в обслуживании брокером форекс, проскальзывание цен и т.д.

Итак, начнем по порядку.

Запускаем тестер стратегий MT4 Запуск тестера , выбираем наш советник «expert1». Выбираем символ «EURUSD» как того требует стратегия Hedge Hog. Модель рекомендую выбрать «Все тики» как наиболее точный метод тестирования. Указываем интервал дат истории для тестирования. Я указал за декабрь месяц 2009 года. Выбираем Период на котором будет работать наш советник. Я выбрал часовой, хотя для нашего советника это не важно.

Настройки тестирования

Нажимаем кнопочку «Старт» и ждем окончания процесса тестирования советника.
У меня советник не совершил ни одной сделки. А в журнале появилось много ошибок. Дело в том что я использовал сервер Алпари для тестирования. У них 5 значные котировки, а стратегия «Hedge Hog» писалась для 4 значных котировок.

Это легко исправимо. Достаточно тейкпрофит увеличить в 10 раз (вместо 14 пунктов указать 140 пунктов). Нажимаем кнопочку «Свойства эксперта» и в появившемся окошке изменяем.

Свойства советника

Нажимаем «OK» и запускаем тестирование еще раз.
Теперь появились сделки. Открываем график:

График тестирования

Что-то не радует меня эта картинка. Да и какие-то странные ошибки в журнале еще до запуска тестирования советника. Что же не так? Ответ прост: в истории терминала Metatrader есть пропуски котировок. Терминал у меня запущен не постоянно, поэтому часть истории потерялась.

Необходимо подгрузить историю. Для этого нажимаем кнопочку F2. В открывшемся окне выбираем интересующую нас валюту:

Подгрузка котировок

И замечаем что в заголовке окна указана «USDCHF» и котировки явно не «EURUSD». Несколько раз щелкаем мышкой на таимфрейм «1 Минута» и высвечивается:

Котировки "EURUSD"

Вот теперь все нормально. Нажимаем кнопочку «Загрузить» и ждем пока подгрузится история. После подгрузки нажимаем еще раз «Загрузить»

Диалог пересчета котировок

Соглашаемся. После пересчета закрываем окно подгрузки истории и запускаем тестирование еще раз.

График тестирования

График не изменился. Значит проблема не в котировках. Ошибок в журнале тоже нет

Журнал тестирования

Проверим — а правильно ли открываются сделки в нашем советнике форекс:

Результаты тестирования

Видим что советник торгует строго по стратегии. Сделки открываются в 00:00, а убыточные закрываются через 48 часов. Лот тоже удваивается при убыточных сделках.

Попробуем оптимизировать советник форекс (подобрать оптимальные параметры для торговли, при которых прибыль максимальна). Помните что мы время открытия ордеров вынесли во внешний параметр? Сейчас нам это пригодится! Нажимаем кнопочку «Свойства эксперта» и задаем параметры оптимизации:

Параметры советника для оптимизации

Кроме этого указываем тестеру стратегий Metatrader 4 что мы хотим оптимизировать (галочка «Оптимизация»)

Включение оптимизации

Нажимаем кнопочку «Старт» еще раз. Оптимизация занимает много времени. Можно пока сходить выпить чашечку «кофе».

После завершения открываем результаты оптимизации и смотрим на результат:

Результаты оптимизации

Вот оно! При открытии ордеров в 18:00 получается минимальная просадка и максимальная прибыль. Проверим. Выделяем эту строчку, нажимаем на ней правую кнопочку мышки и говорим «установить входные параметры». Галочка «Оптимизация» у нас отключена. Запускаем тестирование с новыми параметрами.

И вот какого результата мы добились, благодаря оптимизации советника на тестере стратегий Metatrader 4:

График тестирования

Правда красиво?

Но как убедится что наш советник и дальше будет показывать такой же результат?

Я задавал интервал тестирования советника Hedge Hog — декабрь 2009. Попробуем теперь прогнать советник на будущих данных. Зададим интервал с 01.01.2010 по сегодняшний день.

Результат тестирования получается следующий:

Проверка оптимизации

Оказываются просадки при данных параметрах, которые мы подобрали,  могут быть достаточно большими — это называется мы попали в «ловушку оптимизации». И они бы случились с нашим депозитом на реальном счету…

Конечно можно проверить остальные результаты оптимизации. Можно оптимизировать тейк-профит и стоп-лосс. Можно протестировать советник на других валютах.

Рекомендую это сделать вам, в качестве домашнего задания, самостоятельно.

Вывод: Советник Hedge Hog — рабочий и потихоньку зарабатывает. Значит и стратегия Hedge Hog является прибыльной. Но такие просадки не каждый сможет перенести. Лично я не рискну бы торговать таким советником форекс на реальном счету. Необходимо придумать какие то фильтры для уменьшения просадок в данном советнике форекс !

Советы: Период для тестирования и оптимизации советника желательно (и даже необходимо) выбирать гараздо больше, чем мы выбрали (рекомендую — от одного года). Модель тестирования и оптимизации новичкам советую использовать «Все тики». После оптимизации советника форекс, обязательно проверяйте результат на будущих данных. Не забывайте подгружать историю котировок в терминал Metatrader 4.

Похожие статьи:

39 комментариев

  1. Подскажите, при тестировании советника у меня получается качество моделирования 52%, и появилось большое кол-во «ошибок рассогласования графика», которые на отчете показаны красным цветом.

    Правильно ли я провел тестирование советника?

    И в чем моя ошибка, если нет? Как добиться правильных результатов тестирования советника форекс?

  2. Ответ на этот вопрос есть в статье. Вы забыли подгрузить историю котировок. «ошибок рассогласования графика» не должно быть. Качество моделирования 52% — плохой результат. После подгрузки истории качество моделирования должно быть 90%. Это будет вполне хороший результат.

  3. После обновления архива котировок, если будет такая необходимость из стереть, то как это лучше сделать?

  4. Подскажите, как узнать когда необходимо оптимизировать советник форекс, как часто это нужно делать?

    На какие параметры нужно обратить внимание при оптимизации и вообще получении отчета на какие параметры нужно обращать внимание.

  5. Самый верный признак что нужна оптимизация: советник приносил прибыль, а с некоторого момента перестал или приносит убытки. Но ждать такого момента не советую. Лучше оптимизировать раз в 1-2 месяца.
    Параметры просты: максимальная прибыль и минимальная просадка. Лучше не гнаться за максимальной прибылью, а выбирать золотую середину.

  6. Подскажите как тестировать индикатор? Открываю тестер там папка советника,как проверить скрипт и индикатор,или их закидывать в папку советника,запишите уроки по тестированию скриптов
    и индикаторов.И какие параметры проверять,как проверять.Поподробнее.Или подскажите где прочитать.В справке этого нет.Что за стратегия Hedge Hog

  7. Тестер выдает кучу ошибок Order send error:130 и Order send error:4107. Какая может быт этого причина и как ее изправить?

  8. alfur
    Тестер в Metatrader предназначен для тестирования только советников. Да и зачем нужен индикатор в тестере? Он же не открывает ордера, а только отображает информацию. Поэтому его можно просто наложить на рабочий график и посмотреть. Скрипт же выполняет какое то действие один раз. Их я обычно тестирую на демосчете просто запуская на графике. Про стратегию Hedge Hog можете почитать здесь.

  9. Добрый день. Написал эксперта, хотел прогнать на тестере но у меня появляются ошибки типа unmatched data error, а затем на определенном этапе тест вообще зависает. Обработчик ошибок пишет «нет ошибки но результат неизвестен». Все делаю как в статье, историю подгружаю.

    зы. другие эксперты тестируются нормально

  10. mazani
    Добрый день!
    unmatched data error — означает что в котировках есть ошибки. Подгрузите минутные котировки еще раз и обратите внимание чтобы был произведен пересчет всех таймфреймов. Иногда бывает что терминал с первого раза подгружает не все котировки и их приходится подгружать по несколько раз.

  11. Робота писал под РЕНКО.
    Возник вопрос с тестированием. Т.к. РЕНКО график является нестандартным, и создается отдельным экспертом, и по сути является офф-лайновым, но он обновляется с каждым тиком.

    Можно ли его как-то прокрутить через тестер стратегий, или придется смотреть за работой робота только в реал-тайме?

  12. Владимир
    В тестере можно выбирать только стандартные таймфреймы. Но тестер можно обмануть. Смысл в том, чтобы подсунуть тестеру вместо стандартного таймфрейма необходимый нам. Для этого необходимо отключиться от интернета (чтобы терминал не подкачивал стандартные котировки), очистить папки C:\Program Files\\history\…\*.hst — истории котировок и положить вместо стандартных котировок (например для EURUSD часовик: EURUSD60.hst) наш нестандартный график переименовав его. После этого тестер будет использовать наш таймфрейм вместо стандартного.

  13. Всем привет!
    Недавно начал изучать MQL 🙂
    Столкнулся с тем, что мой советник при тестировании на истории не может брать данные с других таймфреймов.
    Например при тестировании на М1 некоторым индикаторам в советнике (например MACD и Awesome Oscillator) нужны данные со старших таймфреймов (H1, D1 и т.д.). Можно ли как-нибудь обойти этот недостаток?

  14. Ратмир
    При использовании индикаторов в советнике можно указать параметром любой стандартный таймфрейм. Например для MA: iMA(«EURUSD»,PERIOD_D1,…) и тогда функция вернет значение индикатора с указанной валюты и таймфрейма, независимо от того на каком графике запущен эксперт.

  15. Понятно… Это если на реале или на демо… А при тестировании на истории в тестере стратегий это будет работать?
    Допустим мы тестируем эксперт в тестере на валюте «EURUSD» ТФ «М5». Индикатор с параметрами
    iAC(«EURGBP»,PERIOD_M1,1)
    сможет извлечь данные с исторического графика другого таймфрейма и совсем другой валютной пары?

  16. Ратмир
    К сожалению тестер в MT4 не мультивалютный. Он может работать только с 1 валютой (которую ему указали). А вот значения может извлекать с любого таймфрейма (при модели тестирования «Все тики»).

  17. Александр, Спасибо, что ответили на мой глупый вопрос ))
    Не поверил на слово, сам только что еще раз проверил, оказывается так оно и есть ))

  18. …вы упоминали про то чтобы добавить фильтр, как это зделать и что за фильтр можно использовать?!

  19. Евгений
    Фильтр — это дополнительное условие для открытия ордеров. А вот какой — это вопрос из вопросов. Если бы я знал на него ответ, то был бы уже милионером…

  20. Подскажите, почему при тестировании советника, даётся результат — 6 сделок и все с одной прибылью?

  21. Приветствую!
    Вы написали, что

    «А вот значения может извлекать с любого таймфрейма (при модели тестирования «Все тики»).»

    Разве при модели по ценам открытия или контрольные точки данные с других ТФ не извлекаются?

  22. Palt, не могли бы Вы подсказать, где можно было бы достать архивы котировок по фин. инструментам, скачивание которых не доступно с сервера метаквотс (через MT4). К примеру мне очень нужны минутки по Золоту с 2000-го года, а в терминале они только с 2010 года.
    P.S. Я как то писал вам по поводу систем управления капиталом в прошлом году, сейчас самостоятельно в том вопросе почти разобрался, не без вашей помощи конечно, спасибо Вам.

  23. Максим
    Сложно сказать не зная что за советник и как он тестируется.

  24. Анатолий
    Извлекаются. Только советнику передаваться будет не все, а в зависимости от модели тестирования.

  25. Ratmir
    К сожалению не подскажу. Мне как то истории всегда хватало.
    P/S рад что смог помочь.

  26. «Запускаем тестер стратегий MT4 Запуск тестера , выбираем наш советник «expert1». Выбираем символ «EURUSD»…….»
    а как другие символы добавлять?
    у меня их десять, а надо двадцать

  27. Здравствуйте!
    А кто может подсказать — то ли я плохо разобрался в МТ4, то ли действительно количество прогонов в процессе оптимизации ограничено. Если количество вариантов элементарно просчитывается вручную, ну, скажем их 20000, то оптимизатор прогоняет не более 1280. Хотя в скобках указывает количество возможных вариантов правильно). Как с этим быть?

  28. У меня проблема не пойму-после теста….
    Ошибка рассогласования графиков-0
    Качество моделированиия-n/a вместо 90%
    в журнале ошибки——
    1
    4017
    Такая ситуация на трех терминалах разных ДЦ
    ПОМОГИТЕ ПОЖАЛУЙСТА

  29. У меня два небольших вопроса касательно тестера стратегий.
    Есть такой режим тестирования у МТ4:
    Control points (a very crude method …
    Он мне очень подходит так как существенно экономит время, а то что он не точен — меня это вполне устраивает и я это понимаю — мне именно грубую оценку и нужно.
    Судя по описанию в Метатрейдере (именно то, что написано в этой строке и далее в ней же), в качестве тиков берутся данные с ближайшего меньшего таймфрейма.
    Какие именно данные берутся ? Open ? Close ? High ? Low ? Пажалуйста уточните. Или их какое-то комбинирование ? Какое, по какому алгоритму ? Вообще — алгоритм формирования Ask и Bid для Советника по этому Методу. Так как он изобретен именно в Метаквоте — именно здесь надеюсь получить ответ о том, чем я пользуюсь нажимая именно «эту кнопку» тестера стратегий.
    Если я тестирую советник, скажем на периоде Н1, то с какого МЕНЬШЕГО ТАЙМФРЕЙМА ТОЧНО БЕРУТСЯ ДАННЫЕ ? C M30 ? C M15 ? C M5 ? C M1 ?
    Будьте любезны уточните.
    Вот я решил протестировать советник за май 2010 года. Хороший теплый месяц май — люблю весну 🙂
    Используя метод тестированя по контрольных точках — тест прошел без ошибок. Так как в истории у меня имеются данные по валютной паре (период Н1) за 10 лет. Но вот за 2010 год в метатрейдере НЕТ ДАННЫХ ПО ЭТОЙ ЖЕ ВАЛЮТНОЙ ПАРЕ ни за период М30 ни за период М15, ни за период М5, а за период М1 вовсе данных ни за какие годы в МТ4 НЕТ.
    Так С КАКОГО НАЙМЕНШЕГО ПЕРИОДА МТ4 взял данные В ЭТОМ СЛУЧАЕ ? Где он их вообще взял, если их за этот период НЕТ !!!!! Что это за данные и как они формируются ?????? !!!!!!
    Это был вопрос первый.
    Вопрос второй. По этой ссылке
    http://codebase.mql4.com/ru/404
    есть Советник под названием СБОРЩИК ТИКОВ. Он прекрасно их собирает на РЕАЛЕ и НА ДЕМО, а вот в тестере ни на каком интевале собирать не хочет. Пишет пустые файлы — ошибок не выдает. Может подскажите с чем связано такое его поведение ? Я слабо разбираюсь в MQL и при просмотре кода ничего не мог найти чтобы ему мешало собирать тики при прогонке в тестере. Прошу помощи.

    Спасибо. Люблю профессионализм.

  30. Добрый день! Мой советник основывается на анализе исторических данных. Соответственно, для его работы необходимо наличие в окне достаточно большого количества баров (несколько десятков тысяч хотя бы). Однако в окне тестирования баров гораздо меньше, соответственно при проверке количества баров во время тестирования мой советник выдает всегда «not enough bars» (я задал условием минимум 65 тыс. баров), хотя в других, обычных торговых окнах баров хватает. Что можно сделать, чтобы полноценно протестировать советник? Например, задать можно ли задать в советнике функцию автоматической подгрузки достаточного количества баров? Сработает ли она в тестовом окне?

  31. Урок 7
    Написано:
    Советы: Период для тестирования и оптимизации советника желательно (и даже необходимо) выбирать гараздо больше, чем
    Должно быть:
    Советы: Период для тестирования и оптимизации советника желательно (и даже необходимо) выбирать гораздо больше, чем

    Я бы не писал сюда, но не нашел другой обратной связи.

  32. Palt, добрый день, у меня такой вопрос: мой советник основывается на анализе исторических данных. причем на достаточно большую глубину. Однако при тестировании советника, как я понял, учитываются только исторические данные, содержащиеся в окне тестирования, причем нет возможности начать не с начала самой ранней даты окна. Соответственно, полноценное тестирование советника оказывается невозможным. Можно ли как-то решить эту проблему в рамках стандартного тестера в MT4? Заранее благодарен.

  33. Здравствуйте! Появился такой вопрос: тестирую советника Hedge Hog из 6 урока, и при оптимизации по параметру StartTime окна графика оптимизации и результатов оптимизации пустые. Что делать?

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *