134 lines
11 KiB
MQL5
134 lines
11 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Stage1.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/articles/15683"
|
|
#property description "Советник открывает рыночный или отложенный ордер в тот момент,"
|
|
#property description "когда тиковый объем свечи превышает средний объем в направлении текущей свечи."
|
|
#property description "Если ордера еще не превратились в позиции, то они удаляются по времени истечения."
|
|
#property description "Открытые позиции закрываются только по SL или TP."
|
|
#property version "1.20"
|
|
|
|
#ifndef __NAME__
|
|
#define __NAME__ "EmptyStrategy"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string GetStrategyParams() {
|
|
return "";
|
|
}
|
|
#endif
|
|
|
|
#include "../Virtual/VirtualAdvisor.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Входные параметры |
|
|
//+------------------------------------------------------------------+
|
|
sinput int idTask_ = 0; // - Идентификатор задачи оптимизации
|
|
sinput string fileName_ = "database.sqlite"; // - Файл с базой данных оптимизации
|
|
|
|
//input group "=== Параметры советника"
|
|
ulong magic_ = 27181; // Magic
|
|
double fixedBalance_ = 10000;
|
|
double scale_ = 1;
|
|
|
|
CAdvisor *expert; // Указатель на объект эксперта
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert initialization function |
|
|
//+------------------------------------------------------------------+
|
|
int OnInit() {
|
|
CMoney::FixedBalance(fixedBalance_);
|
|
CMoney::DepoPart(1.0);
|
|
|
|
// Подключаемся к основной базе данных
|
|
CVirtualAdvisor::TesterInit(idTask_, fileName_);
|
|
|
|
// Подготавливаем строку инициализации для одного экземпляра стратегии
|
|
string strategyParams = GetStrategyParams();
|
|
|
|
// Подготавливаем строку инициализации для группы с одним экземпляром стратегии
|
|
string groupParams = StringFormat(
|
|
"class CVirtualStrategyGroup(\n"
|
|
" [\n"
|
|
" %s\n"
|
|
" ],%f\n"
|
|
" )",
|
|
strategyParams, scale_
|
|
);
|
|
|
|
// Подготавливаем строку инициализации для риск-менеджера
|
|
string riskManagerParams = StringFormat(
|
|
"class CVirtualRiskManager(\n"
|
|
" 0,0,0,0,0,0,0,0,0,0,0,0,0"
|
|
" )",
|
|
0
|
|
);
|
|
|
|
// Подготавливаем строку инициализации для эксперта с группой из одной стратегии и риск-менеджером
|
|
string expertParams = StringFormat(
|
|
"class CVirtualAdvisor(\n"
|
|
" %s,\n"
|
|
" %s,\n"
|
|
" %d,%s,%d\n"
|
|
")",
|
|
groupParams,
|
|
riskManagerParams,
|
|
magic_, __NAME__, true
|
|
);
|
|
|
|
PrintFormat(__FUNCTION__" | Expert Params:\n%s", expertParams);
|
|
|
|
// Создаем эксперта, работающего с виртуальными позициями
|
|
expert = NEW(expertParams);
|
|
|
|
if(!expert) return INIT_FAILED;
|
|
|
|
return(INIT_SUCCEEDED);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert tick function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTick() {
|
|
expert.Tick();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Expert deinitialization function |
|
|
//+------------------------------------------------------------------+
|
|
void OnDeinit(const int reason) {
|
|
if(!!expert) delete expert;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Результат тестирования |
|
|
//+------------------------------------------------------------------+
|
|
double OnTester(void) {
|
|
return expert.Tester();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Инициализация перед оптимизацией |
|
|
//+------------------------------------------------------------------+
|
|
int OnTesterInit(void) {
|
|
return CVirtualAdvisor::TesterInit(idTask_, fileName_);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Действия после прохода оптимизации |
|
|
//+------------------------------------------------------------------+
|
|
void OnTesterPass() {
|
|
CVirtualAdvisor::TesterPass();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Действия после оптимизации |
|
|
//+------------------------------------------------------------------+
|
|
void OnTesterDeinit(void) {
|
|
CVirtualAdvisor::TesterDeinit();
|
|
}
|
|
//+------------------------------------------------------------------+
|