Инструкции по использованию Advanced Optimization Report

Подключение функций для сохранения графиков баланса, эквити и статистики оптимизации

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

Скачайте файл Advanced Optimization Report Saver.mqh со страницы https://www.mql5.com/en/code/68706 и сохраните его в папку терминала \MQL5\Include\ (а этой же странице можно предложить новые критерии для отчета).

Добавьте код подключающий скачанный файл: (его можно добавить ниже последней строки кода вашего эксперта или в любое другое место)

#include <Advanced Optimization Report Saver.mqh>

Затем нужно добавить вызовы экспортированных функций в уже существующие функции в вашем эксперте: (если функций нет, добавьте их)

void OnTick(){
   //... your code
   
   //Save balance and equity charts
   save_OnTick(TimeCurrent(), AccountInfoDouble(ACCOUNT_BALANCE), AccountInfoDouble(ACCOUNT_EQUITY));
}

void OnTesterInit()  {
   //... your code

   save_OnTesterInit();//print to chart "Do not close this window until the optimization is complete!"
}
void OnTesterDeinit(){
   //... your code

    save_OnTesterDeinit();// get frames
}

double OnTester(){
   //... your code

   //save any custom values:
   double AvgPips=0;
   save_Add( AvgPips, 2, "Custom 1", true);//value, digits, name, sort_min_to_max
   save_Add( TesterStatistics( STAT_PROFIT ), 2, "Custom 2");
   double Custom = 0;//your Custom fitness
   saveCharts(Custom);//save final equity, all deals...
   return Custom;
}

В выделенном месте можно добавить собственные критерии, которые вы хотите добавить в отчет.

Для примера добавим этот код в советник Moving Average из папки Examples (...\MQL5\Experts\Examples\Moving Average\Moving Average.mq5). Сначала скопируем оригинальный советник и дадим ему имя Moving Average Charts.mq5. Теперь добавим в него код из инструкции выше.

Изменения внесены только в самом конце кода - начиная с функции OnTick():

void OnTick(void)
  {
//---
   if(SelectPosition())
      CheckForClose();
   else
      CheckForOpen();
   //Save balance and equity charts
   save_OnTick (TimeCurrent(), AccountInfoDouble( ACCOUNT_BALANCE), AccountInfoDouble( ACCOUNT_EQUITY));
  }

void OnTesterInit()  {
   //... your code

   save_OnTesterInit();//print to chart "Do not close this window until the optimization is complete!"
}
void OnTesterDeinit(){
   //... your code

    save_OnTesterDeinit();// get frames
}

double OnTester(){
   //... your code

   //save any custom values:
   double AvgPips=0;
   save_Add( AvgPips, 2, "Custom 1", true);//value, digits, name, sort_min_to_max
   save_Add( TesterStatistics( STAT_PROFIT ), 2, "Custom 2");
   double Custom = 0;//your Custom fitness
   saveCharts(Custom);//save final equity, all deals...
   return Custom;
}

#include <Advanced Optimization Report Saver.mqh>

Как видите - всё просто и займет пару минут времени.

После этого можно запустить оптимизацию:

Optimize MA with Advanced Optimization ReportOptimize MA with Advanced Optimization Report parameters

На последнем скриншоте видно, что подключенный код добавил 2 параметра:
Save Statistics - включает или выключает сбор статистики
Pixels in balance and equity charts - указывает число пикселей по ширине у мини-графиков.

После завершения оптимизации создадим отчет и увидим:

100 линий с MovingPeriod

Moving Period Advanced Optimization Report

10 линий с MovingShift

Moving Shift Advanced Optimization Report

При числе линий более 20, будет показано только по 3 горизонтальные линии средних значений: 3 сверху и 3 снизу.

100 линий сложно воспринимать, поэтому нужно применять фильтры. Или изменить размер графика вплоть до 100% ширины экрана или кликнув по графику открыть его в Google Charts в котором есть зум колёсиком мыши.
А еще лучше применять входные переменные не с одинаковым шагом, а с учетом масштаба через энумератор (enum), например такой: 1,2,3,5,7,10,15,20,30,50,70,100 - будет всего 12 линий вместо 100.

enum nums1 {__0=0, __1=1, __2=2, __3=3, __5=5, __7=7, __10=10, __15=15, __20=20, __30=30, __50=50, __70=70, __100=100, __150=150, __200=200, __300=300, __500=500};
input nums1 MovingPeriod = 10; // Moving Average period

Версию советника с enum можно скачать тут.

Вместо 1000 проходов оптимизации будет 120, время расчетов в ~8 раз быстрее, размер файлов в ~8 раз меньше.
Результат более наглядный:

Moving Period 12 Advanced Optimization Report

Сразу выделяется результат с MovingPeriod = 15 с самой высокой линией среднего и с самым высоким максимумом.
Но как часто бывает, лучшие результаты на бектесте не самые лучшие на форвард тесте:

Forvard MA Advanced Optimization Report

Получившийся отчет можно скачать и изучить:

Скачать

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

К коду вашего советника нужно добавить расчеты в Virtual. И чтение тиков из архивов.

Ограничения в режиме тестирования по всем символам

  1. Сбор статистики и графиков по всем символам не работает из за бага в тестере, который не отправляет фреймы с данными. Ошибка сообщена разработчикам MT5, надеемся на скорое исправление.
  2. В этом режиме также невозможно экспортировать .opt файл. Его надо найти самостоятельно там же, где и все остальные .opt файлы.
    Обычно тут

    Тоже ждем исправление от разработчиков.