4
2
Derivar 1
Adwizard/Experts/Optimization.mqh

100 linhas
3,8 KiB
MQL5

2025-09-19 13:47:10 +03:00
//+------------------------------------------------------------------+
//| 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 "Советник для автоматической оптимизации проектов"
2025-11-27 18:52:09 +03:00
#property version "1.06"
2025-09-19 13:47:10 +03:00
#include "../Optimization/Optimizer.mqh"
2025-11-27 18:52:09 +03:00
#include "../Utils/ConsoleDialog.mqh"
2025-09-19 13:47:10 +03:00
2025-11-27 18:52:09 +03:00
// Создаём константы для параметров по умолчанию,
// если они не определены в проектной части
#ifndef OPT_FILEMNAME
#define OPT_FILEMNAME ""
#endif
2025-09-19 13:47:10 +03:00
2025-11-27 18:52:09 +03:00
#ifndef OPT_PYTHONPATH
#define OPT_PYTHONPATH ""
#endif
sinput string fileName_ = OPT_FILEMNAME; // - Файл с основной базой данных
sinput string pythonPath_ = OPT_PYTHONPATH; // - Путь к интерпретатору Python
COptimizer *optimizer; // Указатель на объект оптимизатора
CConsoleDialog *dialog; // Диалог для вывода текста с информацией
2025-09-19 13:47:10 +03:00
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
2025-11-27 18:52:09 +03:00
// Если файл базы данных не указан, то выходим
if(fileName_ == "") {
PrintFormat(__FUNCTION__" | ERROR: Set const OPT_FILEMNAME with filename of DB in project", 0);
return INIT_FAILED;
}
// Создаём оптимизатор
2025-09-19 13:47:10 +03:00
optimizer = new COptimizer(fileName_, pythonPath_);
2025-11-27 18:52:09 +03:00
// Создаём и запускаем диалог для вывода информации
dialog = new CConsoleDialog();
dialog.Create(__FILE__);
dialog.Run();
// Создаём таймер и запускаем его обработчик
EventSetTimer(2);
2025-09-19 13:47:10 +03:00
OnTimer();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert timer function |
//+------------------------------------------------------------------+
void OnTimer() {
2025-11-27 18:52:09 +03:00
// Запускаем обработку оптимизатора
2025-09-19 13:47:10 +03:00
optimizer.Process();
2025-11-27 18:52:09 +03:00
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);
}
2025-09-19 13:47:10 +03:00
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
2025-11-27 18:52:09 +03:00
PrintFormat(__FUNCTION__" | Reason: %d", reason);
2025-09-19 13:47:10 +03:00
EventKillTimer();
2025-11-27 18:52:09 +03:00
// Удаляем оптимизатор
2025-09-19 13:47:10 +03:00
if(!!optimizer) {
delete optimizer;
2025-11-27 18:52:09 +03:00
}
// Удаляем диалог
if(!!dialog) {
dialog.Destroy();
delete dialog;
ChartRedraw();
2025-09-19 13:47:10 +03:00
}
}
//+------------------------------------------------------------------+