103 lines
6.9 KiB
MQL5
103 lines
6.9 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Optimization.mqh |
|
|
//| Copyright 2024, Yuriy Bykov |
|
|
//| https://www.mql5.com/ru/users/antekov |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2024, Yuriy Bykov"
|
|
#property link "https://www.mql5.com/ru/users/antekov"
|
|
#property description "Советник для автоматической оптимизации проектов"
|
|
|
|
#property version "1.06"
|
|
|
|
#include "../Optimization/Optimizer.mqh"
|
|
#include "../Utils/ConsoleDialog.mqh"
|
|
|
|
// Создаём константы для параметров по умолчанию,
|
|
// если они не определены в проектной части
|
|
#ifndef OPT_FILEMNAME
|
|
#define OPT_FILEMNAME ""
|
|
#endif
|
|
|
|
#ifndef OPT_PYTHONPATH
|
|
#define OPT_PYTHONPATH ""
|
|
#endif
|
|
|
|
sinput string fileName_ = OPT_FILEMNAME; // - Файл с основной базой данных
|
|
sinput string pythonPath_ = OPT_PYTHONPATH; // - Путь к интерпретатору Python
|
|
|
|
COptimizer *optimizer; // Указатель на объект оптимизатора
|
|
|
|
CConsoleDialog *dialog; // Диалог для вывода текста с информацией
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert initialization function |
|
|
//+------------------------------------------------------------------+
|
|
int OnInit() {
|
|
// Если файл базы данных не указан, то выходим
|
|
if(fileName_ == "") {
|
|
PrintFormat(__FUNCTION__" | ERROR: Set const OPT_FILEMNAME with filename of DB in project", 0);
|
|
return INIT_FAILED;
|
|
}
|
|
|
|
// Создаём оптимизатор
|
|
optimizer = new COptimizer(fileName_, pythonPath_);
|
|
|
|
// Создаём и запускаем диалог для вывода информации
|
|
dialog = new CConsoleDialog();
|
|
dialog.Create(__FILE__);
|
|
dialog.Run();
|
|
|
|
// Создаём таймер и запускаем его обработчик
|
|
EventSetTimer(2);
|
|
OnTimer();
|
|
|
|
return(INIT_SUCCEEDED);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert timer function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTimer() {
|
|
if(IsStopped()) return;
|
|
|
|
// Запускаем обработку оптимизатора
|
|
optimizer.Process();
|
|
|
|
dialog.Text(optimizer.Text());
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Обработка событий |
|
|
//+------------------------------------------------------------------+
|
|
void OnChartEvent(const int id, // event ID
|
|
const long & lparam, // event parameter of the long type
|
|
const double & dparam, // event parameter of the double type
|
|
const string & sparam) { // event parameter of the string type
|
|
|
|
if(!!dialog && !IsStopped()) {
|
|
dialog.ChartEvent(id, lparam, dparam, sparam);
|
|
}
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert deinitialization function |
|
|
//+------------------------------------------------------------------+
|
|
void OnDeinit(const int reason) {
|
|
PrintFormat(__FUNCTION__);
|
|
EventKillTimer();
|
|
|
|
// Удаляем оптимизатор
|
|
if(!!optimizer) {
|
|
delete optimizer;
|
|
}
|
|
|
|
// Удаляем диалог
|
|
if(!!dialog) {
|
|
dialog.Destroy();
|
|
delete dialog;
|
|
ChartRedraw();
|
|
}
|
|
|
|
|
|
}
|
|
//+------------------------------------------------------------------+
|