Adwizard/Experts/Stage1.mqh
2025-04-11 13:28:40 +03:00

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