Испытайте силу MT5 Optimization Booster бесплатно!

Испытайте силу MT5 Optimization Booster бесплатно!

2 января 2025, 18:49
Andrey Dik
0
117

Специальное новогоднее предложение: 2 недели бесплатного тестирования

Получите полный доступ к MT5 Optimization Booster на 14 дней совершенно бесплатно (файл в прикрепе)!

Что вы получаете в пробный период:

  • ✅ Полный неограниченный функционал Booster
  • ✅ Неограниченное количество оптимизаций


Что такое MT5 Optimization Booster?

MT5 Optimization Booster предназначен для расширения возможностей штатного оптимизатора. 

  1. Неограниченное количество параметров для оптимизации. 
  2. Неограниченный шаг параметров для оптимизации.
  3. Неограниченное количество прогонов.
  4. Непревзойденная скорость и точность схождения.
  5. Легкость использования.
  6. Полная загрузка всех ядер процессора.

Таким образом, Booster позволяет использовать очень точное торговое окружение штатного тестера/оптимизатора и при этом обойти все его ограничения.


Важно понимать перед началом работы:

  1. Booster - это инструмент, а не волшебная палочка
    • Он помогает найти наилучшие настройки, но качество результата зависит от вашей торговой стратегии
    • Результат оптимизации напрямую зависит от того, какие критерии вы задаете (фитнесс-функция)
  2. О фитнесс-функции
    • Это ваш критерий успешности стратегии
    • Может включать не только прибыль, но и просадку, количество сделок, стабильность результатов, и т.д.


Технические детали для установки:

Для того чтобы воспользоваться преимуществами оптимизации Вашего советника с помощью  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, а после этого остановить Бустер, нажав кнопку с крестиком.

Если запустить советник, подготовленный по рекомендации выше в работу на чарт, то советник прочитает лучшие настройки, подготовленные после оптимизации Бустером, и приступит к работе.

Для Вас теперь доступно любое количество оптимизированных параметров, начиная от простых советников и заканчивая самыми сложными нейронными сетями. Пример внешнего вида терминала при использовании Бустера ниже:


Частые вопросы

  1. Сколько времени занимает оптимизация?
    • Не зависит от количества параметров.
    • Зависит от мощности компьютера.
    • Зависит от скорости выполнения кода Вашего советника.
    • Используйте максимальное количество доступных ядер процессора.
  2. Как понять, что результат хороший?
    • Проверьте стабильность результатов на разных периодах.
    • Оцените все показатели торговли, не только прибыль.

Успехов Вам в оптимизации и достижении наилучших результатов в торговле!

Файл Бустера с ограничением по времени до 2025.01.20 прикреплен ниже:

Файлы: