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