Spécifications
Тестер автоматизированных стратегий FOREX – ТС 1 (Аналог Strategy Tester MT4)
Проблема: за счет того, что стандартная программа для оптимизации (бэк-тест) и тестирования (форвард – тест) торговых роботов – МetaTrader 4 (а большинство торговых роботов написано именно под МТ4) в принципе тяжелая и местами просто «деревянная», процесс теста одного алгоритма для одного торгового инструмента (валютной пары, металла и т.д.), а этих инструментов более 50, может занимать 4-6 недель (при минимальных шагах настройки оптимизации) в среднем. Рынок, с течением времени подвержен критическим изменениям, на которые прописанные настройки алгоритма торгового робота просто не смогут отреагировать. Такие изменения происходят примерно раз в 1-1,5 года. Следовательно, получится протестировать один алгоритм для 10-15 инструментов, и его снова нужно переоптимизировать под изменившийся рынок под те же 10-15 инструментов. Да, можно задать больший период оптимизации и получить более универсальные настройки, которые будут работать дольше чем 1 – 1,5 года, но и период такой оптимизации и форвард – тестирования займёт намного больше времени – примерно 6-9 недель. Итого – проблема в скорости самого процесса. Есть вариант тестирования в относительно новом тестере терминала MetaTrader 5. Но если при тестировании даже в одновременно включенных 10 терминалах МТ4, 10 разных инструментов – терминал использует лишь одно ядро из имеющихся в железе, то МТ5 использует весь потенциал железа даже при тестировании одного торгового инструмента. Да, в МТ5 скорость быстрее, но и железо, даже класса upper intermediate «ложится» в самом начале тестирования. Проще говоря – «улучшенный» тестер МТ5 не решает временнУю проблему всего процесса.
Цель: создать отдельную программу, которая будет намного легче (как минимум за счет того, что будет работать отдельно, а не в рамках приложения к тяжёлому торговому терминалу) и как следствие – быстрее, для ускоренной, но в то же время качественной оптимизации (бэк-тест) и тестирования (форвард – тест) торговых роботов для последующей их работы в МetaTrader 4. Настройки, полученные после форвард – теста будут переноситься в МТ4 и там проходить проверочные прогоны для большей уверенности в правильности выбора настроек.
Как происходит оптимизация и тестирование роботов на данный момент в МТ4
1) В МТ4 через «Сервис / Архив котировок / Импорт» загружаются котировки в формате .csv или .fxt. Одно движение на конкретно выбранном ТФ (на скринах это таймфрейм М15) включает в себя точную дату и время, цену открытия, цену закрытия, цену максимума, цену минимума и объём. Важный момент – в алгоритме МТ4 бары (свечи) формируются от младшего таймфрейма (ТФ), поэтому критически важно найти котировки тиков для минутного ТФ (это не проблема). Далее на основании загруженных котировок ТФ М1 формируется ТФ М5, на основании ТФ М5 формируется М15 и так далее… Для более точного тестирования, я использую программу Tick Data Suite, из которой скачиваю котировки конкретного брокера, под которого тестирую роботы. Tick Data Suite автоматически привязывается к терминалу МТ4 – в тестере МТ4 появляется дополнительное меню для настроек тестирования. Результаты таких тестов намного лучше и правильнее.
Стандартная загрузка котировок
Меню Tick Data Suite
2) Далее открывается интерфейс встроенного тестера стратегий МТ4. Выбирается необходимый алгоритм (торговый робот) для тестирования, торговый инструмент, выставляется дата, таймфрейм на котором будет проводиться оптимизация и тестирование и на котором в дальнейшем будет работать робот и т.д. (см. скрин)
Код советника (торгового робота) выглядит так
Для того, чтобы алгоритм работал и приносил прибыль на реальном счёте, он проходит два этапа тестирования. Первый этап – оптимизация. На этом этапе в настройках параметров на переменных, которые могут повлиять на конечный результат, ставят флажки и задают значения Старт / Шаг / Финиш. Пример: мы хотим понять, какой размер Стоп-Лосса и Тейк Профита в алгоритме даст максимально лучший прирост к депозиту. Мы задаем следующие значения:
Параметр | Стартовое значение | Шаг | Финишное значение |
Стоп - Лосс | 30 | 1 | 85 |
Тейк Профит | 45 | 1 | 90 |
Во время оптимизации алгоритма, методом перебора будут выбраны некие значения из заданного диапазона, которые дадут лучший результат. Например, Стоп = 44 пункта, Тейк = 68 пунктов.
Точно также делается для всех остальных переменных на этапе оптимизации – ставятся флажки (это означает, что этот параметр будет оптимизироваться) и задаются значения Старт / Шаг / Финиш.
Окно «Свойства Эксперта»
Далее, после выставления всех параметров и установки флажка «Оптимизация» нажимается кнопка «Старт» и начинается процесс оптимизации. Выглядит он следующим образом:
Вот так выглядят результаты оптимизации:
Временные параметры бэк и форвард теста: бэк-тест (оптимизация) проводится на периоде №1. Допустим мы хотим вывести настройки для работы робота сейчас (к примеру, у нас сегодня 01.02.2020). Период оптимизации мы выставляем 01.02.2016 – 01.02.2018 (2 года). На этом периоде робот как бы подбирает параметры, которые на рынке, который был в этот период, принесут максимальную прибыль (результаты оптимизации можно отфильтровать и увидеть настройки, которые показали максимальный результат). Затем в графах дат выставляется период 01.02.2018 – 01.02.2020 (2 года) – не обязательно именно такие даты и длина периода. И на этом периоде уже к роботу применяется настройка, выведенная оптимизацией и делается прогон на новом периоде и другом рынке. То есть на отрезке, на котором робот еще не работал и к нему не приспособлен. Суть такого тестирования в том, что на первом периоде робот подбирает параметры, а на втором доказывает, что эти же настройки, которые на прошлом периоде давали прибыль, на новом периоде могут делать то же самое. Часто бывает ситуация, что те настройки, которые на периоде бэк-теста дают прибыль, на этапе форвард-теста сливает депозит. Задача – найти те настройки, которые на обоих периодах приносят прибыль.
Подробнее о оптимизации и форвард – тестировании можно почитать тут https://avtoforex.ru/testirovanie/26-kak-optimizirovat-sovetnikov-v-metatrader-4.html
Предположительное решение проблемы – отдельная программа.
1) Первый возможный вариант – сделать так, чтобы из МТ4 все данные транслировались в отдельную программу, в которой непосредственно и будет идти перебор параметров настроек и будут выдаваться результаты.
2) Второй вариант – писать полную копию тестера стратегий МТ4, но могут возникнуть проблемы с кодами роботов (роботы пишутся на языке MQL4 как раз под терминал МТ4) и скачиванием в новую программу котировок из Tick Data Suite (программа лицензионная платная и жестко привязана к МТ4).
Плюс в идеале, чтобы этот отдельный софт мог не только провести оптимизацию за временной период №1, но и автоматически форвард-тестом прогнать полученные результаты на периоде №2, а результаты, полученные на форварде (период №2) так же автоматически прогнать на следующем форвард-тесте за период №3. Итоговые результаты после периода №3 желательно должны быть в формате .set (Прибыльность 1,37 Матожидание 12,73 Просадка 14,65.set), который понимает МТ4.
Теперь на данном этапе мне необходим ваш ответ по возможности реализации какого-либо из вариантов, и я тогда по этому варианту уточню ТЗ по настройкам и прочему.
Резюме тезисно.
Сейчас весь процесс происходит следующим образом:
1) Из программы Tick Data Suite скачиваются котировки нужного брокера за определенный период. Данные доступны с 2013 года по сей день. Использование данных из TDS дает 99,9% точности моделирования работы робота при тестировании. То есть 99,9% того, что он так же будет работать и в реальной торговле. Плюс в настройках, которые даёт TDS, в МТ4 можно настроить много переменных, которые влияют на качество тестирования и которые нельзя настроить в стандартном тестере стратегий МТ4 без TDS (спред, проскальзывание, задержку исполнения ордеров, плечо и т.д.)
2) В тестере стратегий МТ4 выбирается тестируемый робот, период, настраиваются все необходимые параметры.
3) Запускается период оптимизации на временном периоде №1. Цель – методом перебора подобрать параметры, при которых робот покажет наилучшие результаты торговли. Процесс оптимизации происходит автоматически без участия человека. Отнимает примерно 45% времени относительно всего процесса – с начала и до получения лучшего рабочего сета настроек.
4) После оптимизации получается список из нескольких тысяч результатов (сетов настроек) с показателями торговли каждого сета. Список отфильтровывается по параметру прибыль. Далее выбирается период бэк и форвард теста – период №2. Это период, на котором робот как бы еще не работал или работал частично. То есть начинается часть работы, которая исключает «подгонку» настроек робота под историю. В процессе бэк и форвард тестирования, КАЖДЫЙ сет кликается вручную человеком и прогоняется на выбранном участке времени. Полученные результаты (если они устраивают по показателям) также вручную сохраняются в папку терминала. Далеко не каждый сет даст хорошие результаты на новом периоде. Процесс похож на вымывание золотого песка – среди 3-4 тысяч сетов найти хотя бы 30-50 сетов, которые покажут вменяемый результат. Данное тестирование занимает также 45% времени.
5) После периода бэк и форвард теста, начинается третий этап – форвард-тест 2. Берется временной период №3 и те результаты (сеты) которые мы сохраняли в папку терминала в предыдущем пункте, вручную загружаются из папки в тестер и прогоняются на периоде №3. Полученные результаты также сохраняются в папку терминала вручную. Лучший из этих результатов и будет непосредственно рабочим сетом настроек, который пойдёт на реальную торговлю. Отнимает 10% времени, т.к. отобранных сетов настроек уже не тысячи, а намного меньше – 20-30-50 +-.
Весь процесс по нахождению рабочего сета для одной валютной пары (а этих пар примерно 20-25) занимает около 1-1,5 месяца – оптимизация и два тестирования на разных периодах. Плюс ко всему, рабочие настройки, которые попадают в реальную торговлю со временем устаревают (примерно за период 8-12 месяцев работы) и нуждаются в повторном процессе оптимизации и тестирования. Конечно, не на всех валютных парах робот может показывать приемлимые результаты по прибыльности и просадке, но даже если пар будет не 25, а 15, легче не становится. Проще говоря, чтобы один робот работал на тех же 15 валютных парах, нужны 15 сетов настроек, на поиск которых уйдет около года (можно запускать несколько процессов параллельно, но это от силы 3-4 процесса, но работа в параллели замедляет общий процесс). Следовательно, первые найденные настройки устареют и всё можно начинать снова по кругу.
Цель создания отдельного софта – автоматизировать пункты 3, 4 и 5, и ускорить процесс за счет легкости самой программы и за счет автоматизации ручных процессов – особенно в пункте 4. Понятно, что программа не будет делать необходимые расчеты и перебор параметров за минуту. Но даже если нахождение рабочего сета будет происходить в автоматическом режиме скажем, даже за неделю – это намного лучше, чем 1 – 1,5 месяца и плюс много ручной работы.
Полный архив с материалами и видео могу прислать на почту. Сюда архив не крепится из-за размера.