WalkForwardOptimizer MT5
- Библиотеки
- Stanislav Korotky
- Версия: 1.16
- Обновлено: 27 сентября 2024
- Активации: 5
Библиотека WalkForwardOptimizer позволяет выполнить пошаговую и кластерную форвард-оптимизацию (walk-forward optimization) советника в МетаТрейдер 5.
Для использования необходимо включить заголовочный файл WalkForwardOptimizer.mqh в код советника и добавить необходимые вызовы функций.
Когда библиотека встроена в советник, можно запускать оптимизацию в соответствии с процедурой, описанной в Руководстве пользователя. По окончанию оптимизации промежуточные результаты сохраняются в CSV-файл и набор глобальных переменных, а также генерируется файл отчета в виде HTML-страницы.
Текст публикуется с сокращениями из-за лимита - полную версию скачивайте из Обсуждения.
Файл WalkForwardOptimizer.mqh (с сокращениями)
#define DAYS_PER_WEEK 7 #define DAYS_PER_MONTH 30 #define DAYS_PER_QUARTER (DAYS_PER_MONTH*3) #define DAYS_PER_HALF (DAYS_PER_MONTH*6) #define DAYS_PER_YEAR (DAYS_PER_MONTH*12) #define SEC_PER_DAY (60*60*24) #define SEC_PER_WEEK (SEC_PER_DAY*DAYS_PER_WEEK) #define SEC_PER_MONTH (SEC_PER_DAY*DAYS_PER_MONTH) #define SEC_PER_QUARTER (SEC_PER_MONTH*3) #define SEC_PER_HALF (SEC_PER_MONTH*6) #define SEC_PER_YEAR (SEC_PER_MONTH*12) #define CUSTOM_DAYS -1 enum WFO_TIME_PERIOD {none = 0, year = DAYS_PER_YEAR, halfyear = DAYS_PER_HALF, quarter = DAYS_PER_QUARTER, month = DAYS_PER_MONTH, week = DAYS_PER_WEEK, day = 1, custom = CUSTOM_DAYS}; enum WFO_ESTIMATION_METHOD {wfo_built_in_loose, wfo_built_in_strict, wfo_profit, wfo_sharpe, wfo_pf, wfo_drawdown, wfo_profit_by_drawdown, wfo_profit_trades_by_drawdown, wfo_average, wfo_expression}; #import "WalkForwardOptimizer MT5.ex5" // NB: нужно после скачивания вручную скопировать файл в папку MQL5/Libraries void wfo_setEstimationMethod(WFO_ESTIMATION_METHOD estimation, string formula); void wfo_setPFmax(double max); void wfo_setCloseTradesOnSeparationLine(bool b); void wfo_OnTesterPass(); int wfo_OnInit(WFO_TIME_PERIOD optimizeOn, WFO_TIME_PERIOD optimizeStep, int optimizeStepOffset, int optimizeCustomW, int optimizeCustomS); int wfo_OnTick(); double wfo_OnTester(); void wfo_OnTesterInit(string optimizeLog); void wfo_OnTesterDeinit(); #import input WFO_TIME_PERIOD wfo_windowSize = year; input int wfo_customWindowSizeDays = 0; input WFO_TIME_PERIOD wfo_stepSize = quarter; input int wfo_customStepSizePercent = 0; input int wfo_stepOffset = 0; input string wfo_outputFile = ""; input WFO_ESTIMATION_METHOD wfo_estimation = wfo_built_in_loose; input string wfo_formula = "";
Пример использования
#include <WalkForwardOptimizer.mqh> ... int OnInit(void) { // ваш рабочий код здесь ... wfo_setEstimationMethod(wfo_estimation, wfo_formula); // по-умолчанию wfo_built_in_loose wfo_setPFmax(100); // по-умолчанию DBL_MAX // wfo_setCloseTradesOnSeparationLine(true); // по-умолчанию false // единственный обязательный вызов в OnInit, все параметры - из заголовочного файла int r = wfo_OnInit(wfo_windowSize, wfo_stepSize, wfo_stepOffset, wfo_customWindowSizeDays, wfo_customStepSizePercent); return(r); } void OnTesterInit() { wfo_OnTesterInit(wfo_outputFile); // требуется } void OnTesterDeinit() { wfo_OnTesterDeinit(); // требуется } void OnTesterPass() { wfo_OnTesterPass(); // требуется } double OnTester() { return wfo_OnTester(); // требуется } void OnTick(void) { int wfo = wfo_OnTick(); if(wfo == -1) { // можно выполнить неторговые операции, например, сбор статистики return; } else if(wfo == +1) { // можно выполнить неторговые операции return; } // ваш рабочий код здесь ... }
Truly a powerful tool. A little complicated at first, but the support is very good. This is how it will work in the end.