Множество сетов в одном экземпляре торгового робота MetaTrader4

Приветствую.

Для того, чтобы подобрать настройки торгового робота, обычно прибегают к оптимизатору тестера стратегий в MetaTrader. Стараются выбрать такие настройки, которые лучше всего выглядят на имеющейся истории. Есть множество различных способов и мнений, как лучше всего производить такую оптимизацию – кто то оптимизирует сразу на всей имеющейся истории, считая, что так увеличивается шанс подобрать прибыльные в будущем параметры. Кто то считает, что не имеет смысла оптимизировать на далёкой истории и ограничивается последними несколькими годами. Кто то, более хитрый, оптимизирует, скажем, на участке с 2005 по 2010 года и выбирает потом настройки, которые проходят тест на всём участке с 2000 по сегодняшний день.

При любом из этих методов оптимизации нет никакой гарантии, что полученные настройки будут стабильно работать в будущем на реале. Иногда даже получается так, что отлично работающие на 17 летней истории настройки вдруг начинают беспросветно лить в один прекрасный момент. Последний год нам это отлично продемонстрировал на почти всех «топовых» роботах популярных в СНГ. Некоторые управляющие даже изменили настройки своих роботов, подогнав их под последнюю историю так, чтобы они не слили бы, если бы заранее были установлены.

Один из способов уменьшить риск получить плохие в будущем настройки и сгладить кривую доходности – диверсификация по торговым настройкам робота. То есть, мы выбираем не 1 набор параметров, а, скажем, 10 немного отличающихся наборов параметров, показавших прибыль на имеющейся истории. Тогда, если какие-то сэты окажутся неудачными и излишне подогнанными под историю, у нас будет шанс, что остальные вытянут кривую доходности вверх или, хотя бы, позволят не слить депозит на неудобном рынке.

Итак, мы пришли к тому, что у нас будет, например, 10 сэтов по EURUSD и по столько же еще на 5 парах, на которых у нас работает советник. Итого 50 вкладок в одном терминале, в каждой из которых надо загрузить копию робота, подгрузить в него set файл и не запутаться во всём этом. А если мы торгуем на нескольких счетах? Получается зоопарк окон и вкладок, за которыми трудно следить. А если еще и переехать на другой сервер придётся…

Как решить эту проблему? Нужно написать советник так, чтобы в 1 экземпляре робота были сразу все варианты настроек и валютных пар! Но как это сделать в MT4, где предусмотрена загрузка только одного set файла в одного советника на одном окне? Один из вариантов — загружать все настройки из одного ini файла, в который мы скопируем все настройки из наших set файлов. Таким образом, один экземпляр робота будет по очереди загружать сначала первый вариант настроек и отрабатывать его, потом второй и так далее. Так мы и поступим.

Нарисуем сначала блок схему обычного торгового робота, работающего с одним set файлом стандартным образом:

Для решения задачи был использован готовый парсер (загрузчик)  ini файлов взятый с сайта mql5 отсюда: https://www.mql5.com/ru/code/11120

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

 

Здесь можно скачать пример реализации этой блок схемы: https://cloud.mail.ru/public/Bi73%2Fpq54Bi62E

shablon_load_ini.mq4 – шаблон мультинастроечного робота

shablon.ini – пример ini файла с двумя вариантами настроек скопированных из set1 m15 gbpu.set и set2 m15 gbpu.set – этот файл надо положить в папку /MQL4/Files в папке данных терминала.

ParserIni.dll – длл парсера, надо закинуть в /MQL4/Libraries

ParserIni.mqh – заголовочный файл, закинуть в /MQL4/include

В результате у нас должно получиться следующее.

При прогоне set1 получаем такой результат:

При прогоне set2 получаем такой результат:

А при загрузке set1+set2 из shablon.ini получаем обьединение этих результатов в тестере:

Результат должен быть похожим на тот, что мы получили бы, если обьединить два бэктеста в программе ReportManager – это означает, что мы всё сделали правильно.

В ini настройки из set надо просто скопировать блокнотом, после чего удалить автозаменой все запятые. Можно не удалять, тогда парсер сам их удалит, выкинув кучу окон с ругательствами. Кодировка ini должна быть обязательно UTF16-LE. Файл ини должен начинаться со строки-комментария.

Все примеры и тесты можно скачать по вышеприведённой ссылке. Робот является лишь примером, в нём нет грааля.

Спасибо за внимание.

Ссылка на основную публикацию
Множество сетов в одном экземпляре торгового робота MetaTrader4
Хиб.ру