Project_N_1/optimizer.mq5
super.admin fca2fc1d82 convert
2025-05-30 16:18:18 +02:00

180 lines
No EOL
11 KiB
MQL5

//+------------------------------------------------------------------+
//| optimizer.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Bollinger_optimizer.mq5>
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//Глобальные переменные
gVarStop="BuddyIlan."+_Symbol+".Stop";
gVarSL = "BuddyIlan." + _Symbol + ".SL";
gVarTP = "BuddyIlan." + _Symbol + ".TP";
gVarSTOFilter="BuddyIlan."+_Symbol+".STOFilter";
gVarSTOTimeFrameFilter="BuddyIlan."+_Symbol+".STOTimeFrameFilter";
EventSetTimer(5);
Print("TERMINAL_PATH = ",TerminalInfoString(TERMINAL_PATH));
Print("TERMINAL_DATA_PATH = ",TerminalInfoString(TERMINAL_DATA_PATH));
Print("TERMINAL_COMMONDATA_PATH = ",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
void OnTimer()
{
// MqlDateTime dt;
//
// datetime now=TimeLocal(dt);
//
//// В субботу
// if(dt.day_of_week!=6)
// {
// bOptimisationDone=false;
// return;
// }
//
//// В 6:00
// if(dt.hour<6)
// return;
// Уже сделано?
if(bOptimisationDone==true)
return;
// Удаляем предыдущий файл "optimise.ini"
FileDelete("Optimiser\\Optimise.ini");
// Создаем конфигурационный файл советника и копируем его в папку \MQL5\Profiles\Test (экземпляр для тестирования)
if(CreateAndCopyParametersFile(true,false,0,0)==false)
return;
// Копируем common.ini -> optimise.ini
if(CopyAndMoveCommonIni()==false)
return;
// Добавляем запуск [Tester] в optimise.ini - https://www.metatrader5.com/ru/terminal/help/start_advanced/start
if(AddTesterStanza()==false)
return;
Print("=======================\nОптимизация SL-1");
// Запуск первой оптимизации SL
StartOptimizer();
// Копируем файл отчета в рабочий каталог
if(CopyReport()==false)
return;
// Анализируем отчеты
if(LoadResults(_SL)==false)
return;
Print("=======================\nОптимизация STO");
// Создаем файл параметров для оптимизации STO (одновременно будут оптимизированы 2 параметра)
if(CreateAndCopyParametersFile(false,false, BetterSL,0)==false)
return;
// Запуск оптимизации STO
StartOptimizer();
// Копируем файл отчета в рабочий каталог
if(CopyReport()==false)
return;
if(LoadResults(_STO)==false)
return;
Print("=======================\nОптимизация SL-2");
// Создаем файл параметров для оптимизации SL (пересчет с новыми значениями параметра STO)
if(CreateAndCopyParametersFile(true,false,0,0)==false)
return;
// Запуск оптимизатора
StartOptimizer();
if(CopyReport()==false)
return;
if(LoadResults(_SL)==false)
return;
Print("=======================\nОптимизация TP");
// Создаем файл параметров для оптимизации TP
if(CreateAndCopyParametersFile(false,true,BetterSL,0)==false)
return;
// Запуск оптимизатора
StartOptimizer();
if(CopyReport()==false)
return;
if(LoadResults(_TP)==false)
return;
// Заключение
PrintFormat("=======================\nSL=%d TP=%d STOFilter=%s STOTimeFrameFilter=%s (Profit=%.2lf DD=%lf)\n=======================",
BetterSL,BetterTP,(BetterSTOFilter==true)?"true":"false",(BetterSTOTimeFrameFilter==true)?"true":"false",BetterProfit,BetterDD);
// Устанавливаем глобальные переменные - работающий советник BuddyIlan будет читать и использовать эти новые значения
// Если обнаружится просадка более 50%, советник остановит торговлю
if(BetterDD>50.0 && GlobalVariableSet(gVarStop,1.0)==false)
{
PrintFormat("Ошибка установки глобальной переменной [%s]",gVarStop);
}
if(GlobalVariableSet(gVarSL,BetterSL)==false)
{
PrintFormat("Ошибка установки глобальной переменной [%s]=%d",gVarSL,BetterSL);
}
if(GlobalVariableSet(gVarTP,BetterTP)==false)
{
PrintFormat("Ошибка установки глобальной переменной [%s]=%d",gVarTP,BetterTP);
}
if(GlobalVariableSet(gVarSTOFilter,(BetterSTOFilter==true)?1.0:0.0)==false)
{
PrintFormat("Ошибка установки глобальной переменной [%s]=%.1lf",gVarSTOFilter,(BetterSTOFilter==true)?1.0:0.0);
}
if(GlobalVariableSet(gVarSTOTimeFrameFilter,(BetterSTOTimeFrameFilter==true)?1.0:0.0)==false)
{
PrintFormat("Ошибка установки глобальной переменной [%s]=%.1lf",gVarSTOTimeFrameFilter,(BetterSTOTimeFrameFilter==true)?1.0:0.0);
}
bOptimisationDone=true;
}