SimpleCandles2/Optimization/CreateProject.mq5

171 lines
14 KiB
MQL5

2025-04-11 13:29:20 +03:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| CreateProject.mq5 |
//| Copyright 2024-2025, Yuriy Bykov |
//| https://www.mql5.com/ru/users/antekov |
//+------------------------------------------------------------------+
2025-04-11 15:19:04 +03:00
2025-04-24 22:18:33 +03:00
#property copyright "Copyright 2024-2025, Yuriy Bykov"
2025-04-11 13:29:20 +03:00
#property link "https://www.mql5.com/ru/articles/17328"
#property description "!>25B=8: A>740QB ?@>5:B A MB0?0<8, @01>B0<8 8 7040G0<8 >?B8<870F88."
#property version "1.03"
#include "../Include/Adwizard/Optimization/OptimizationProject.mqh"
//+------------------------------------------------------------------+
//| E>4=K5 ?0@0<5B@K |
//+------------------------------------------------------------------+
sinput group "::: 070 40==KE"
sinput string fileName_ = "article.17328.db.sqlite"; // - $09; 107K 40==KE >?B8<870F88
sinput group "::: 0@0<5B@K ?@>5:B0 - A=>2=K5"
sinput string projectName_ = "SimpleCandles"; // - 0720=85
sinput string projectVersion_ = "1.00"; // - 5@A8O
sinput string symbols_ = "GBPUSD,EURUSD,EURGBP"; // - !8<2>;K
sinput string timeframes_ = "H1,M30"; // - "09<D@59<K
sinput group "::: 0@0<5B@K ?@>5:B0 - =B5@20; >?B8<870F88"
sinput datetime fromDate_ = D'2022-09-01'; // - 0B0 =0G0;0
sinput datetime toDate_ = D'2023-01-01'; // - 0B0 >:>=G0=8O
sinput group "::: 0@0<5B@K ?@>5:B0 - !GQB"
sinput string mainSymbol_ = "GBPUSD"; // - A=>2=>9 A8<2>;
sinput int deposit_ = 10000; // - 0G0;L=K9 45?>78B
sinput group "::: -B0? 1. >8A:"
sinput string stage1ExpertName_ = "Stage1.ex5"; // - !>25B=8: MB0?0
sinput string stage1Criterions_ = "6,6,6"; // - @8B5@88 >?B8<870F88 4;O 7040G
sinput group "::: -B0? 2. @C??8@>2:0"
sinput string stage2ExpertName_ = "Stage2.ex5"; // - !>25B=8: MB0?0
sinput string stage2Criterion_ = "6"; // - @8B5@89 >?B8<870F88 4;O 7040G
//sinput bool stage2UseClusters_= false; // - A?>;L7>20BL :;0AB5@870F8N?
sinput double stage2MinCustomOntester_ = 500; // - 8=. 7=0G5=85 =>@<. ?@81K;8
sinput uint stage2MinTrades_ = 20; // - 8=. :>;-2> A45;>:
sinput double stage2MinSharpeRatio_ = 0.7; // - 8=. :>MDD. (0@?0
sinput uint stage2Count_ = 8; // - >;-2> AB@0B5389 2 3@C??5 (1 - 16)
sinput group "::: -B0? 3. B>3"
sinput string stage3ExpertName_ = "Stage3.ex5"; // - !>25B=8: MB0?0
sinput ulong stage3Magic_ = 27183; // - Magic
sinput bool stage3Tester_ = true; // - ;O B5AB5@0?
class COptimizationProject;
// (01;>= ?0@0<5B@>2 >?B8<870F88 =0 ?5@2>< MB0?5
string paramsTemplate1(COptimizationProject *p) {
string params = StringFormat(
"symbol_=%s\n"
"period_=%d\n"
"; === 0@0<5B@K A83=0;0 : >B:@KB8N\n"
"signalSeqLen_=4||2||1||8||Y\n"
"periodATR_=21||7||2||48||Y\n"
"; === 0@0<5B@K >B;>65==KE >@45@>2\n"
"stopLevel_=2.34||0.01||0.01||5.0||Y\n"
"takeLevel_=4.55||0.01||0.01||5.0||Y\n"
"; === 0@0<5B@K C?@02;5=85 :0?8B0;><\n"
"maxCountOfOrders_=15||1||1||30||Y\n",
p.m_symbol, p.StringToTimeframe(p.m_timeframe));
return params;
}
// (01;>= ?0@0<5B@>2 >?B8<870F88 =0 2B>@>< MB0?5
string paramsTemplate2(COptimizationProject *p) {
// 0E>48< 845=B8D8:0B>@ @>48B5;LA:>9 @01>BK 4;O B5:CI59 @01>BK
// ?> A>2?045=8N A8<2>;0 8 B09<D@59<0 =0 B5:CI5< 8 @>48B5;LA:>< MB0?5
int i;
SEARCH(p.m_stage.parent_stage.jobs,
(p.m_stage.parent_stage.jobs[i].symbol == p.m_symbol
&& p.m_stage.parent_stage.jobs[i].timeframe == p.m_timeframe),
i);
ulong parentJobId = p.m_stage.parent_stage.jobs[i].id_job;
string params = StringFormat(
"idParentJob_=%I64u\n"
"useClusters_=%s\n"
"minCustomOntester_=%f\n"