Adwizard/Experts/Optimization.mqh

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();
}
}
//+------------------------------------------------------------------+