Специальное новогоднее предложение: 2 недели бесплатного тестирования
Получите полный доступ к MT5 Optimization Booster на 14 дней совершенно бесплатно (файл в прикрепе)!
Что вы получаете в пробный период:
- ✅ Полный неограниченный функционал Booster
- ✅ Неограниченное количество оптимизаций
Что такое MT5 Optimization Booster?
MT5 Optimization Booster предназначен для расширения возможностей штатного оптимизатора.
- Неограниченное количество параметров для оптимизации.
- Неограниченный шаг параметров для оптимизации.
- Неограниченное количество прогонов.
- Непревзойденная скорость и точность схождения.
- Легкость использования.
- Полная загрузка всех ядер процессора.
Таким образом, Booster позволяет использовать очень точное торговое окружение штатного тестера/оптимизатора и при этом обойти все его ограничения.
Важно понимать перед началом работы:
- Booster - это инструмент, а не волшебная палочка
- Он помогает найти наилучшие настройки, но качество результата зависит от вашей торговой стратегии
- Результат оптимизации напрямую зависит от того, какие критерии вы задаете (фитнесс-функция)
- О фитнесс-функции
- Это ваш критерий успешности стратегии
- Может включать не только прибыль, но и просадку, количество сделок, стабильность результатов, и т.д.
Технические детали для установки:
Для того чтобы воспользоваться преимуществами оптимизации Вашего советника с помощью MT5 Optimization Booster Вам потребуется внести небольшие изменения в код советника.
В самом верху кода советника нужно вставить (отмечено здесь и далее зелёным цветом) вызов импортируемых из Бустера функций, Ваш код будет выглядеть примерно так:
//+----------------------------------------------------------------------------+ //| Copyright 2024, Your Name | //| https://login.mql5.com/ru/users/user | //+----------------------------------------------------------------------------+ #property copyright "Copyright 2024, Your Name" #property link "https://login.mql5.com/ru/users/user" //------------------------------------------------------------------------------ #import "..\..\..\Market\MT5 Optimization Booster.ex5" void AddRange (double rangeMin, double rangeStep, double rangeMax); bool AddRangeDone (); bool GetInputs (double &inputs []); void SaveResult (double ff); #import //------------------------------------------------------------------------------
Код выше предназначен для вызова функций бустера (который по умолчанию расположен в папке \MQL5\Experts\Market\) из советника. Если Вы переместили Бустер в другую папку, то поправьте путь к нему в коде выше.
Далее, вставьте в код строку с параметром-счетчиком, который будет перебирать штатный оптимизатор вместо Ваших параметров:
//------------------------------------------------------------------------------ input int CNT_P = 0; //------------------------------------------------------------------------------
Предположим, в советнике есть следующие параметры, которые требуется оптимизировать:
//------------------------------------------------------------------------------ enum Timeframe { M1, M5, M15, H1, D1 }; input Timeframe ChartTimeframe = H1; input int IndPeriod = 10; input double IndAlpha = 0.1; input bool UseTrailingStop = true; //------------------------------------------------------------------------------
Сделайте эти параметры простыми глобальными переменными, убрав перед их объявлением "input", после этой операции код будет выглядеть правильно так:
//------------------------------------------------------------------------------ enum Timeframe { M1, M5, M15, H1, D1 }; /* input Timeframe ChartTimeframe = H1; input int IndPeriod = 10; input double IndAlpha = 0.1; input bool UseTrailingStop = true; */ //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ Timeframe ChartTimeframe = H1; int IndPeriod = 10; double IndAlpha = 0.1; bool UseTrailingStop = true; //------------------------------------------------------------------------------
Далее, вставьте в функцию OnInit () в самом начале следующий код:
//—————————————————————————————————————————————————————————————————————————————— int OnInit () { //For EA in the "Optimization" mode------------------------------------------- if (MQLInfoInteger (MQL_OPTIMIZATION)) { AddRange (0, 1, 4); //Timeframe ChartTimeframe = H1; AddRange (6, 3, 30); //int IndPeriod = 10; AddRange (0.0001, 0.0000001, 0.2); //double IndAlpha = 0.1; AddRange (0, 1, 1); //bool UseTrailingStop = true; if (!AddRangeDone ()) { return INIT_FAILED; } } //----------------------------------------------------------------------------
В функцию AddRange () передайте параметры оптимизации соответствующих оптимизируемых параметров (минимум диапазона, шаг, максимум диапазона). Этот код передаст команду Бустеру о конфигурации Ваших оптимизируемых параметров. Устанавливайте значения диапазона и шага в любых пределах, ограничений нет.
Далее вставьте в код следующие строки сразу за предыдущими, описанными выше:
//—————————————————————————————————————————————————————————————————————————————— int OnInit () { //For EA in the "Optimization" mode------------------------------------------- if (MQLInfoInteger (MQL_OPTIMIZATION)) { AddRange (0, 1, 4); //Timeframe ChartTimeframe = H1; AddRange (6, 3, 30); //int IndPeriod = 10; AddRange (0.0001, 0.0000001, 0.2); //double IndAlpha = 0.1; AddRange (0, 1, 1); //bool UseTrailingStop = true; if (!AddRangeDone ()) { return INIT_FAILED; } } //---------------------------------------------------------------------------- //For EA in all modes--------------------------------------------------------- double inputs [4]; if (!GetInputs (inputs)) { return INIT_FAILED; } else { ChartTimeframe = (Timeframe)inputs [0]; IndPeriod = (int)inputs [1]; IndAlpha = inputs [2]; UseTrailingStop = inputs [3]; } //----------------------------------------------------------------------------
Код выше получает из файла значения настроек оптимизируемых параметров в массив "inputs [4]" (здесь 4 - количество оптимизируемых параметров).
Пропишите присвоение каждой переменной оптимизируемого параметра значения массива "inputs" в том же порядке, что и при задании их диапазона и шага как показано выше.
Проверьте, теперь код функции OnInit () должен выглядеть так:
//—————————————————————————————————————————————————————————————————————————————— int OnInit () { //For EA in the "Optimization" mode------------------------------------------- if (MQLInfoInteger (MQL_OPTIMIZATION)) { AddRange (0, 1, 4); //Timeframe ChartTimeframe = H1; AddRange (6, 3, 30); //int IndPeriod = 10; AddRange (0.0001, 0.0000001, 0.2); //double IndAlpha = 0.1; AddRange (0, 1, 1); //bool UseTrailingStop = true; if (!AddRangeDone ()) { return INIT_FAILED; } } //---------------------------------------------------------------------------- //For EA in all modes--------------------------------------------------------- double inputs [4]; if (!GetInputs (inputs)) { return INIT_FAILED; } else { ChartTimeframe = (Timeframe)inputs [0]; IndPeriod = (int)inputs [1]; IndAlpha = inputs [2]; UseTrailingStop = inputs [3]; } //---------------------------------------------------------------------------- /* Here is the rest of your advisor's code. ... ... ... */ return (INIT_SUCCEEDED); } //——————————————————————————————————————————————————————————————————————————————
В функции OnTester () пропишите код Вашего пользовательского критерия оптимизации или воспользуйтесь готовой штатной функцией получения значения комплексного критерия оптимизации. Код функции OnTester () будет выглядеть так:
//—————————————————————————————————————————————————————————————————————————————— double OnTester () { double ret = TesterStatistics (STAT_COMPLEX_CRITERION); //----------------------------------------------------------------------------- SaveResult (ret); //----------------------------------------------------------------------------- return ret; } //——————————————————————————————————————————————————————————————————————————————
Код выше рассчитывает критерий оптимизации и сохраняет результат в файл, чтобы Booster мог получить результат и улучшать его в поисках наилучшего значения параметров.
Итак, больше никаких правок в советнике делать не нужно.
Работа с Booster
1. Зайти в оптимизатор (тестер) МТ5 и настройте даты начала и окончания оптимизации на истории, а так же все остальные параметры, которые необходимы (символ и другие).
2. Установить режим оптимизации (медленный, полный перебор параметров), так как теперь оптимизацией будет управлять Бустер и критерий оптимизации (Максимум пользовательского критерия).
3. Зайти в настройки советника и установить галочку для параметра CNT_P и установить значения и шаг таким образом, чтобы обеспечить необходимое количество прогонов.
4. Запустить оптимизацию, выбрав все локальные агенты. Если ядер процессора 4 и менее, то рекомендуется оставить один агент не включенным.
5. Запустить Бустер на любом графике любого символа любого таймфрейма. Бустер выведет окно с запросом выбора папки советника, который требуется оптимизировать. Выбрать папку советника и Бустер начнет свою работу! После этого на чарте появится окно Бустера:
Окно Бустера показывает красным цветом свою активность (бегущий счетчик), Лучший найденный результат, Количество отправленных заданий и Количество выполненных заданий, а так же Количество выполненных заданий на каждом агенте.
6. Если результаты устраивают, можно остановить оптимизацию в любой момент: Сначала остановить оптимизатор МТ5, а после этого остановить Бустер, нажав кнопку с крестиком.
Если запустить советник, подготовленный по рекомендации выше в работу на чарт, то советник прочитает лучшие настройки, подготовленные после оптимизации Бустером, и приступит к работе.
Для Вас теперь доступно любое количество оптимизированных параметров, начиная от простых советников и заканчивая самыми сложными нейронными сетями. Пример внешнего вида терминала при использовании Бустера ниже:
Частые вопросы
- Сколько времени занимает оптимизация?
- Не зависит от количества параметров.
- Зависит от мощности компьютера.
- Зависит от скорости выполнения кода Вашего советника.
- Используйте максимальное количество доступных ядер процессора.
- Как понять, что результат хороший?
- Проверьте стабильность результатов на разных периодах.
- Оцените все показатели торговли, не только прибыль.
Успехов Вам в оптимизации и достижении наилучших результатов в торговле!
Файл Бустера с ограничением по времени до 2025.01.20 прикреплен ниже: