180 lines
No EOL
11 KiB
MQL5
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;
|
|
} |