From 65ace55a394bf9b9ce430d5695d7e65c48a1c575 Mon Sep 17 00:00:00 2001 From: zhutoutoutousan Date: Fri, 24 Apr 2026 14:14:09 +0200 Subject: [PATCH] Update --- frontline/MQL5/DarvasBoxXAUUSD/report.html | Bin 641940 -> 0 bytes frontline/MQL5/DarvasBoxXAUUSD/report.png | Bin 30205 -> 0 bytes frontline/MQL5/IMPROVEMENT.md | 82 -- frontline/MQL5/MeanReversionXAUUSD/report.png | Bin 36481 -> 0 bytes .../RSICrossOverReversalXAUUSD/report.html | Bin 813398 -> 0 bytes .../RSICrossOverReversalXAUUSD/report.png | Bin 8465 -> 0 bytes .../DeepMarkovRegimeModel.mqh | 346 -------- .../RSIScalpingXAUUSD_DeepMarkov/main.mq5 | 350 --------- .../MQL5/RSIScalpingXAUUSD_PlusHours/main.mq5 | 307 -------- .../MQL5/RSIScalpingXAUUSD_Trailing/main.mq5 | 367 --------- .../MQL5/_united/PEPPERSTONE_US_SETUP.md | 75 -- .../_united_dynamic/AdaptiveMonthlyRegime.mqh | 639 --------------- .../_united_dynamic/PEPPERSTONE_US_SETUP.md | 75 -- .../Strategies/RSISecretSauceStrategy.mqh | 438 ----------- .../_united_dynamic/UnitedProfitPanel.mqh | 437 ----------- .../report/ReportHistory-51389369.xlsx | Bin 264920 -> 0 bytes .../report/fig-pnl-by-magic.tex | 6 - .../report/fig-pnl-timeseries-by-robot.tex | 6 - .../report/fig-pnl-timeseries.tex | 6 - .../report/pnl_by_magic_robot.csv | 9 - .../report/pnl_by_magic_robot.pdf | Bin 21450 -> 0 bytes .../report/pnl_by_magic_robot.png | Bin 140663 -> 0 bytes .../report/pnl_timeseries_by_robot.csv | 386 --------- .../report/pnl_timeseries_by_robot.pdf | Bin 25451 -> 0 bytes .../report/pnl_timeseries_by_robot.png | Bin 273391 -> 0 bytes .../report/pnl_timeseries_line.csv | 102 --- .../report/pnl_timeseries_line.pdf | Bin 23147 -> 0 bytes .../report/pnl_timeseries_line.png | Bin 142585 -> 0 bytes .../PEPPERSTONE_US_SETUP.md | 75 -- frontline/cluster-0/README.md | 0 .../_united-V2}/MagicNumberHelpers.mqh | 0 .../_united-V2}/PerformanceEvaluator.mqh | 0 .../_united-V2}/STRATEGY_CONFIGURATION.md | 0 .../Strategies/DarvasBoxStrategy.mqh | 0 .../Strategies/EMASlopeDistanceStrategy.mqh | 0 .../Strategies/RSIConsolidationStrategy.mqh | 387 +++++++++ .../RSICrossOverReversalStrategy.mqh | 33 +- .../Strategies/RSIMidPointHijackStrategy.mqh | 0 .../Strategies/RSIReversalAsianStrategy.mqh | 0 .../Strategies/RSIScalpingStrategy.mqh | 125 ++- .../Strategies/SuperEMAStrategy.mqh | 23 +- .../_united-V2}/main.mq5 | 412 +++++----- .../_united-V2}/report.png | Bin .../_united-V2}/self-evaluate.mq5 | 0 .../_united-V2}/MagicNumberHelpers.mqh | 0 .../_united-V2}/PerformanceEvaluator.mqh | 2 +- .../_united-V2}/STRATEGY_CONFIGURATION.md | 0 .../Strategies/DarvasBoxStrategy.mqh | 4 +- .../Strategies/EMASlopeDistanceStrategy.mqh | 0 .../Strategies/RSIConsolidationStrategy.mqh | 387 +++++++++ .../RSICrossOverReversalStrategy.mqh | 33 +- .../Strategies/RSIMidPointHijackStrategy.mqh | 0 .../Strategies/RSIReversalAsianStrategy.mqh | 0 .../Strategies/RSIScalpingStrategy.mqh | 125 ++- .../Strategies/SuperEMAStrategy.mqh | 495 ++++++++++++ frontline/united_template/_united-V2/main.mq5 | 704 +++++++++++++++++ .../_united-V2}/report.png | Bin .../_united-V2}/self-evaluate.mq5 | 42 + .../MagicNumberHelpers.mqh | 0 .../PerformanceEvaluator.mqh | 2 +- .../STRATEGY_CONFIGURATION.md | 0 .../Strategies/DarvasBoxStrategy.mqh | 4 +- .../Strategies/EMASlopeDistanceStrategy.mqh | 0 .../Strategies/RSIConsolidationStrategy.mqh | 387 +++++++++ .../RSICrossOverReversalStrategy.mqh | 33 +- .../Strategies/RSIMidPointHijackStrategy.mqh | 0 .../Strategies/RSIReversalAsianStrategy.mqh | 0 .../Strategies/RSIScalpingStrategy.mqh | 560 +++++++++++++ .../Strategies/SuperEMAStrategy.mqh | 495 ++++++++++++ .../_united-V2_exponential}/main.mq5 | 736 ++++++++---------- .../_united-V2_exponential}/report.png | Bin .../_united-V2_exponential}/self-evaluate.mq5 | 42 + .../_united}/MagicNumberHelpers.mqh | 34 +- .../_united/PerformanceEvaluator.mqh | 607 +++++++++++++++ .../_united/STRATEGY_CONFIGURATION.md | 76 ++ .../_united/Strategies/DarvasBoxStrategy.mqh | 300 +++++++ .../Strategies/EMASlopeDistanceStrategy.mqh | 496 ++++++++++++ .../RSICrossOverReversalStrategy.mqh | 257 ++++++ .../Strategies/RSIMidPointHijackStrategy.mqh | 471 +++++++++++ .../Strategies/RSIReversalAsianStrategy.mqh | 493 ++++++++++++ .../Strategies/RSIScalpingStrategy.mqh | 0 .../_united/main.mq5 | 0 frontline/united_template/_united/report.png | Bin 0 -> 29959 bytes .../united_template/_united/self-evaluate.mq5 | 683 ++++++++++++++++ .../DarvasBoxXAUUSD_Genetic_Optimization.set | 27 + .../{MQL5 => units}/DarvasBoxXAUUSD/main.mq5 | 0 .../EMASlopeDistanceCocktailXAUUSD}/main.mq5 | 93 ++- .../report.html | Bin .../EMASlopeDistanceCocktailXAUUSD/report.png | Bin .../MeanReversionEMA_RSI_ADX.mq5 | 362 +++++++++ .../MeanReversionEMA_RSI_ADX_genetic.set | 29 + .../units/MeanReversionBTCUSD/daughter.set | 30 + .../RSIConsolidation.mq5 | 347 +++++++++ .../RSIConsolidation_optimization.set | 37 + .../RSICrossOverReversalXAUUSD/main.mq5 | 2 +- .../RSIMidPointHijackXAUUSD/main.mq5 | 8 +- .../RSIMidPointHijackXAUUSD/report.html | Bin .../RSIMidPointHijackXAUUSD/report.png | Bin .../RSIReversalAsianAUDUSD/main.mq5 | 0 .../RSIReversalAsianAUDUSD/test-balance.png | Bin .../RSIReversalAsianEURUSD/main.mq5 | 0 .../RSIReversalAsianEURUSD/test-balance.jpg | Bin .../{MQL5 => units}/RSIScalpingAPPL/main.mq5 | 0 .../RSIScalpingBTCUSD/main.mq5 | 0 .../RSIScalpingBTCUSD/report.html | Bin .../RSIScalpingBTCUSD/report.png | Bin .../NVDA_Genetic_Optimization.set | 0 .../NVDA_Genetic_Optimization_Alternative.set | 0 .../RSIScalpingNVDA/OPTIMIZATION_GUIDE.md | 0 .../{MQL5 => units}/RSIScalpingNVDA/main.mq5 | 0 .../{MQL5 => units}/RSIScalpingTSLA/main.mq5 | 0 .../RSIScalpingTSLA/report.html | Bin .../RSIScalpingTSLA/report.png | Bin .../RSIScalpingXAUUSD/main.mq5 | 166 +++- .../RSIScalpingXAUUSD/report.html | Bin .../RSIScalpingXAUUSD/report.png | Bin .../RSI_secret_sauce_XAUUSD/main.mq5 | 0 .../SuperEMAXAUUSD/SuperEMA.set | 0 .../{MQL5 => units}/SuperEMAXAUUSD/main.mq5 | 0 .../BTCUSD_fixed.set | 21 + .../BTCUSD_test.set | 24 + .../EMASlopeDistanceCocktailBTCUSD}/main.mq5 | 91 ++- .../report.html | Bin 0 -> 1883870 bytes .../EMASlopeDistanceCocktailBTCUSD/report.png | Bin 0 -> 30183 bytes lab/EAs/MartingaleBTCUSD_Safe.mq5 | 246 ++++++ .../RSIConsolidation.mq5 | 367 +++++++++ .../RSIConsolidation_optimization.set | 38 + ...uxiuhanidea_alpha_backtest.cpython-312.pyc | Bin 0 -> 25489 bytes lab/EAs/rsiDivergence.mq5 | 384 +++++++++ lab/EAs/rsiDivergence_XAUUSD.set | 29 + 130 files changed, 10016 insertions(+), 4439 deletions(-) delete mode 100644 frontline/MQL5/DarvasBoxXAUUSD/report.html delete mode 100644 frontline/MQL5/DarvasBoxXAUUSD/report.png delete mode 100644 frontline/MQL5/IMPROVEMENT.md delete mode 100644 frontline/MQL5/MeanReversionXAUUSD/report.png delete mode 100644 frontline/MQL5/RSICrossOverReversalXAUUSD/report.html delete mode 100644 frontline/MQL5/RSICrossOverReversalXAUUSD/report.png delete mode 100644 frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/DeepMarkovRegimeModel.mqh delete mode 100644 frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/main.mq5 delete mode 100644 frontline/MQL5/RSIScalpingXAUUSD_PlusHours/main.mq5 delete mode 100644 frontline/MQL5/RSIScalpingXAUUSD_Trailing/main.mq5 delete mode 100644 frontline/MQL5/_united/PEPPERSTONE_US_SETUP.md delete mode 100644 frontline/MQL5/_united_dynamic/AdaptiveMonthlyRegime.mqh delete mode 100644 frontline/MQL5/_united_dynamic/PEPPERSTONE_US_SETUP.md delete mode 100644 frontline/MQL5/_united_dynamic/Strategies/RSISecretSauceStrategy.mqh delete mode 100644 frontline/MQL5/_united_dynamic/UnitedProfitPanel.mqh delete mode 100644 frontline/MQL5/_united_dynamic/report/ReportHistory-51389369.xlsx delete mode 100644 frontline/MQL5/_united_dynamic/report/fig-pnl-by-magic.tex delete mode 100644 frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries-by-robot.tex delete mode 100644 frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries.tex delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.csv delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.pdf delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.png delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.csv delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.pdf delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.png delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.csv delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.pdf delete mode 100644 frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.png delete mode 100644 frontline/MQL5/_united_dynamic_cent/PEPPERSTONE_US_SETUP.md create mode 100644 frontline/cluster-0/README.md rename frontline/{MQL5/_united => cluster-0/_united-V2}/MagicNumberHelpers.mqh (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/PerformanceEvaluator.mqh (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/STRATEGY_CONFIGURATION.md (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/Strategies/DarvasBoxStrategy.mqh (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/Strategies/EMASlopeDistanceStrategy.mqh (100%) create mode 100644 frontline/cluster-0/_united-V2/Strategies/RSIConsolidationStrategy.mqh rename frontline/{MQL5/_united_dynamic => cluster-0/_united-V2}/Strategies/RSICrossOverReversalStrategy.mqh (90%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/Strategies/RSIMidPointHijackStrategy.mqh (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/Strategies/RSIReversalAsianStrategy.mqh (100%) rename frontline/{MQL5/_united_dynamic_cent => cluster-0/_united-V2}/Strategies/RSIScalpingStrategy.mqh (78%) rename frontline/{MQL5/_united_dynamic => cluster-0/_united-V2}/Strategies/SuperEMAStrategy.mqh (96%) rename frontline/{MQL5/_united_dynamic_cent => cluster-0/_united-V2}/main.mq5 (65%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/report.png (100%) rename frontline/{MQL5/_united => cluster-0/_united-V2}/self-evaluate.mq5 (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/MagicNumberHelpers.mqh (100%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2}/PerformanceEvaluator.mqh (99%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/STRATEGY_CONFIGURATION.md (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/Strategies/DarvasBoxStrategy.mqh (98%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/Strategies/EMASlopeDistanceStrategy.mqh (100%) create mode 100644 frontline/united_template/_united-V2/Strategies/RSIConsolidationStrategy.mqh rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2}/Strategies/RSICrossOverReversalStrategy.mqh (90%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/Strategies/RSIMidPointHijackStrategy.mqh (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/Strategies/RSIReversalAsianStrategy.mqh (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/Strategies/RSIScalpingStrategy.mqh (78%) create mode 100644 frontline/united_template/_united-V2/Strategies/SuperEMAStrategy.mqh create mode 100644 frontline/united_template/_united-V2/main.mq5 rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/report.png (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2}/self-evaluate.mq5 (92%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/MagicNumberHelpers.mqh (100%) rename frontline/{MQL5/_united_dynamic => united_template/_united-V2_exponential}/PerformanceEvaluator.mqh (99%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/STRATEGY_CONFIGURATION.md (100%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/Strategies/DarvasBoxStrategy.mqh (98%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/Strategies/EMASlopeDistanceStrategy.mqh (100%) create mode 100644 frontline/united_template/_united-V2_exponential/Strategies/RSIConsolidationStrategy.mqh rename frontline/{MQL5/_united => united_template/_united-V2_exponential}/Strategies/RSICrossOverReversalStrategy.mqh (90%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/Strategies/RSIMidPointHijackStrategy.mqh (100%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/Strategies/RSIReversalAsianStrategy.mqh (100%) create mode 100644 frontline/united_template/_united-V2_exponential/Strategies/RSIScalpingStrategy.mqh create mode 100644 frontline/united_template/_united-V2_exponential/Strategies/SuperEMAStrategy.mqh rename frontline/{MQL5/_united_dynamic => united_template/_united-V2_exponential}/main.mq5 (56%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/report.png (100%) rename frontline/{MQL5/_united_dynamic_cent => united_template/_united-V2_exponential}/self-evaluate.mq5 (92%) rename frontline/{MQL5/RSIScalpingXAUUSD_DeepMarkov => united_template/_united}/MagicNumberHelpers.mqh (89%) create mode 100644 frontline/united_template/_united/PerformanceEvaluator.mqh create mode 100644 frontline/united_template/_united/STRATEGY_CONFIGURATION.md create mode 100644 frontline/united_template/_united/Strategies/DarvasBoxStrategy.mqh create mode 100644 frontline/united_template/_united/Strategies/EMASlopeDistanceStrategy.mqh create mode 100644 frontline/united_template/_united/Strategies/RSICrossOverReversalStrategy.mqh create mode 100644 frontline/united_template/_united/Strategies/RSIMidPointHijackStrategy.mqh create mode 100644 frontline/united_template/_united/Strategies/RSIReversalAsianStrategy.mqh rename frontline/{MQL5 => united_template}/_united/Strategies/RSIScalpingStrategy.mqh (100%) rename frontline/{MQL5 => united_template}/_united/main.mq5 (100%) create mode 100644 frontline/united_template/_united/report.png create mode 100644 frontline/united_template/_united/self-evaluate.mq5 create mode 100644 frontline/units/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set rename frontline/{MQL5 => units}/DarvasBoxXAUUSD/main.mq5 (100%) rename frontline/{MQL5/MeanReversionXAUUSD => units/EMASlopeDistanceCocktailXAUUSD}/main.mq5 (86%) rename frontline/{MQL5 => units}/EMASlopeDistanceCocktailXAUUSD/report.html (100%) rename frontline/{MQL5 => units}/EMASlopeDistanceCocktailXAUUSD/report.png (100%) create mode 100644 frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX.mq5 create mode 100644 frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX_genetic.set create mode 100644 frontline/units/MeanReversionBTCUSD/daughter.set create mode 100644 frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 create mode 100644 frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set rename frontline/{MQL5 => units}/RSICrossOverReversalXAUUSD/main.mq5 (99%) rename frontline/{MQL5 => units}/RSIMidPointHijackXAUUSD/main.mq5 (98%) rename frontline/{MQL5 => units}/RSIMidPointHijackXAUUSD/report.html (100%) rename frontline/{MQL5 => units}/RSIMidPointHijackXAUUSD/report.png (100%) rename frontline/{MQL5 => units}/RSIReversalAsianAUDUSD/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIReversalAsianAUDUSD/test-balance.png (100%) rename frontline/{MQL5 => units}/RSIReversalAsianEURUSD/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIReversalAsianEURUSD/test-balance.jpg (100%) rename frontline/{MQL5 => units}/RSIScalpingAPPL/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIScalpingBTCUSD/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIScalpingBTCUSD/report.html (100%) rename frontline/{MQL5 => units}/RSIScalpingBTCUSD/report.png (100%) rename frontline/{MQL5 => units}/RSIScalpingNVDA/NVDA_Genetic_Optimization.set (100%) rename frontline/{MQL5 => units}/RSIScalpingNVDA/NVDA_Genetic_Optimization_Alternative.set (100%) rename frontline/{MQL5 => units}/RSIScalpingNVDA/OPTIMIZATION_GUIDE.md (100%) rename frontline/{MQL5 => units}/RSIScalpingNVDA/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIScalpingTSLA/main.mq5 (100%) rename frontline/{MQL5 => units}/RSIScalpingTSLA/report.html (100%) rename frontline/{MQL5 => units}/RSIScalpingTSLA/report.png (100%) rename frontline/{MQL5 => units}/RSIScalpingXAUUSD/main.mq5 (64%) rename frontline/{MQL5 => units}/RSIScalpingXAUUSD/report.html (100%) rename frontline/{MQL5 => units}/RSIScalpingXAUUSD/report.png (100%) rename frontline/{MQL5 => units}/RSI_secret_sauce_XAUUSD/main.mq5 (100%) rename frontline/{MQL5 => units}/SuperEMAXAUUSD/SuperEMA.set (100%) rename frontline/{MQL5 => units}/SuperEMAXAUUSD/main.mq5 (100%) create mode 100644 lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_fixed.set create mode 100644 lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_test.set rename {frontline/MQL5/EMASlopeDistanceCocktailXAUUSD => lab/EAs/EMASlopeDistanceCocktailBTCUSD}/main.mq5 (86%) create mode 100644 lab/EAs/EMASlopeDistanceCocktailBTCUSD/report.html create mode 100644 lab/EAs/EMASlopeDistanceCocktailBTCUSD/report.png create mode 100644 lab/EAs/MartingaleBTCUSD_Safe.mq5 create mode 100644 lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation.mq5 create mode 100644 lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation_optimization.set create mode 100644 lab/EAs/__pycache__/quxiuhanidea_alpha_backtest.cpython-312.pyc create mode 100644 lab/EAs/rsiDivergence.mq5 create mode 100644 lab/EAs/rsiDivergence_XAUUSD.set diff --git a/frontline/MQL5/DarvasBoxXAUUSD/report.html b/frontline/MQL5/DarvasBoxXAUUSD/report.html deleted file mode 100644 index 8452f57e7ce3123090bab45d0551d45c452610dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641940 zcmeFa&#!ICb>DY2NdN;z40s&4O~ z$QC6+4wE28G9U;?FpPMRNeua4aAt`;Nel;u5hwuyI0-WJ#0e4@mXm>#{kh*R?{jy3 z*E&`E?N_JHxkRI1zrOpPduy-n`hIJzRjaE0zkm6OyFYsO(|136_h;@tfA>pwpSk;) zyEpE>a`(aAuit%b`P*mie*W%H-~ENVe`k6A#@$EmK6>}#%Rj$(_xAGt{OzZgPyO`r zv!M2`|9%ZzIykKizWcmBomS^8se)4$R||3>`ZPc6Uy{pG)3U;gE-Ke!(| zZ}`RKZ(m>jpJyN3f8V#4|LS|*TR!vM<$HL_SNUvtkM+0l!e3Y{`;Fyie&Oy<-uvzAgJbich`nQ(<1Cwvv+x~-vJs-LIv-dd4|KRRVfA}*#V(`#!DL4w1mf!NrcYo~e zmlv${-#@ls_sjQu|M>my*rNXKGQuz2d-!kPj}tb3b$N@QSoGnWi|_vA#!FBJJa%O+ zc7}^92i9kN{UNVEvDikxv1kFF{+;D#;FVupe*4$&8TiF}OFiVKE@v{r>%D-&`!cKIiF|mVbCFJ%9WDIpg@&@^#Qa8$Q1LyN;Z9LIYaH zg$2q#d?}wJJtst)b z;ZOgazw{H91${pa?9h~l8ifvhc|mveRrLH@i<*65;r5?ieB-xHys$>Rory=<|LEOYi$8sQiP98@muUQ>i-+;# zt-GfuPo6x`vRS<7um838K0DHKV$)~tHJ?1?OUs=7=3=LJCiE&d>%JbnkyUK5$ba5@)Xb7T|Cz-$RKv(KnX{fPfAZhwk6f8$onKshhWg-F z?yd8fXDX_()cL-&%u`>zpRc~WeB}%Gf0O4hQ$2mujQZ4)N&L#9$5d_BIFM-PF?)`z z@~Oot@Tf$`KePz*_E+yKg+H~Z?qjycskYQHFe^eYmTciMTj(@T@G3(U=!X`HGO153 zRoJgB`t#K#lc18Xy84@oXU(V0Z!DF?uYLAkd~Rd~gF5ybA6By8Sk`90ve=0D`HlPf zH7gm)-QQU9FlK*p4b}l?^EhnxCw}lFe|fC!KDVru&1i{#^XLBiUwZGe|HJQ$v<5o# z#_})!kfG0~O8CgHzW>Sh$6AFo%l+19U2Ax_YIpmqJiqt7|Kj~q=4rk5Ro51etR?>F z5B|~b{3oCLzq{33Yo;%k$mjXpAD>QLUf%s*-TYbK=*5yJQeiknZd>{7t4V7`?Qg&P z`=9P*bs5!L_banh&iGrN$L<;1kt-YYjzw~?G`=y`#YoGp=FYX=V+spVqcJDJsdoiQ?yPy5U zXZDQF^>&euS z$YqI;SZ4)^XN$U@_Jh=GsCzt|@xCq}Vg;Dh;U~*K3jd+J9}qV>V2EaQCR?q7W8+n@atzq)t4nl;}(+{1r%sib~>sg_ckq3%r0qIZnv^k=>* z+skD?!L|9%zy6i~_Ot)z_y3Q7uNR%wQv8r(NO{oVoNJ*RiFH8y$so^j8Ynf2V;#D4ucz3L}_^$)%KySuBBPnY*PzD`Q! zP<)DP>norAC;!=xy}~?C4AY0j9?zm4_UfZP=ULeM>4)(dJb82Ruh~57NwQA|%laKa z(LNMvMQ_~wSO2kmVz07LGbi^sK10y>3i`d{JBK$hIU_%pagJ7xV=?~rU;eYdI5Wl? z-w!cfcZu)g@h3j>#@+w+*Z!CP5Ht_0Y^slV?PrrwzV_B5{HcU9PZJ9GNwQNgWfTn!#A(x9F1fhUujqU ztM0vSAE!H)K!~ikaOOlbQq-UBzW0~!`Swz&`r@+d;Ui0B?Y*TtkR2i)Jg8%RbXmLn z`10?wMN^5IKel`qrx>soc|H4tpTNrLzx)Nh{+r9sFZ(H;FS85z=xLV{djqK$zHxsN z!+HV&Ut!OVPC)sy%UIae{*{wB_$v?gW4GI^t?wbS*ki%=ql>Mn>YQTy5X+|qOLlnv z5X<_Ujy9irSW~M#Q1uqoyqUYm>i^`zlTY1!aycJqf9yxr`+TX{!=Z9|!V%qBZlr(e zl}E~cwbwUN+44^=Hr+Q;r?sbbSZw{yQek-WOy1nCXP2D=KDx{vUtZ=5PITgIt#wBD zp;|nw-M1rpq*~m)|8M;Ak9_g>KK;+%>pxqfb#$(SGW%IXu|ND- zYqrQ~aii=-HhGlokNjDW!6&pgDYyQ(xn}EgTkT*+J!2K$%NdOi{q*69g?JVxdY+yU zx}J>ox4!@LpF5ppAMPUBTUmHG<5JOh|HI0QPTTm%au(*#EN}A3#qU44?73t-Z70e- zeABIUSQ}rh^X~Ff?|$X??<2m`cWlq-O5C@#QvXk2^_J7!UTqw|{a3#Ki~D}UxyXz0 z{iEO6_p^(Ye*e>-`q@|e3GXf)>#zC~{{DCN{e*KCB5&CDlZ$=+&bNN#S6}TX{FAT! zgA^lvdbH=saqyE1`^rDmC{NE(TyrnRFOOF=x}J}R8gYUqQTsbf=J69t?L_@}`u_EE z8X0+D`PzE+;KT2IcUiCb?($tFmML*iT?JA#K^;BpoBHwP-|~Ok&%gZei5ne}8tY?k zFZJB|b96V;t@_+NjeTaXr8vuqJ?CYI`9s^Bo@2@WbWXD5zno9QiCC<4eemENdi~+q z;t%?FpFgmA`tik*=bg6}dih};wGHJeQZ>^-q@golaNhjj8~FAKtuGw6@t^=(pJ_M}KDCaw*Or?=E!yG7pj*d#|@ypO$c9P`Lbdduhc9zlf9i6gN`s4t~$Hn`?UzsD*$_9fEyzB-Qi>~&`r zTqAwOcaG!bES)x-$20%=GUrn*d0}RC<|p)wb0GH4`8~GE(Vv<5yd_?_&IOrAJeJB{ zk5zK)#r()u$1xwKaK2H&nG-!?g;$T{yv(O+Pi3m+wwO;gus_T1u~m-#%*@w$X{@Yh zg-5Yq6a_w(>Ryjka_mcjSFaZB_t+{&e`eW2y1=SS824MEl-X$1$Id78qUfd}hQb+V`vb zk-}dh&!^WUTFGZWgtE1Io@$%(du)}XKQr@B-;&y%Ji=qo*$C}5-)pY$^;jjxUeSK! zjhA8md7QQ9ecm}=XJEN5otKNcy;!0fuM7RmKWD2P{p(;pYdPe9toisnpZNE&G5@?( za_kH9y*FNh`RCv0tp)#foG&rwKfAB(yXrl8zSdD(F3`*T^R~*-zZT}Rs)vro%zrEu zzID#mPSngQIrb&m_r5xo`K7kcJjO{-G0t;W_?XqH@NMg*icxq*w&p7T?aXhrRgV7b z%vT4W`gXJ0zK^b={O{VM{Z^~w*caw|UmeAK<}SFfR`_5?%>3EA_&85p{Rwq!!ipai zTG!*(!u&p4<>=4L{D*I;xghS?CyJ^qeS6IBvr3MAsqK4T9mjksVyJql@I6`nuG33u zM12Qmg!A}lpZJNW%+Ex0@V!c&uiX``w#w0;nfdYvc5G_S&v)oOjtXDFzRfB*_9f5v z-Z+~1yb&WI+K>D8xi_xXgL#GpJ3yWO``_?YeYujiklf8JI(`tvhi`%qQki}Sy7 z?owOL_j;rKf_W#Kl_wKJ87)=lt0#eAFlX zx*fHBWmYa1IG5-5+bTzYPUfG!C9|8lch$+~d%Ijem{>;o@-x9Sf%=fzgWQhyfJ>r^~-(!^=`@($htCwKDD%Ni= zDjvoAPbRPN5$_YxN6e?!$M4^7oAX!n&)X_Te|F~6ugSWe=7PAo|73}?9uMaw#w0;nfZE4MS*ah zlQ`qKpk67t%^F{iRdVbL^S!T*Wj?ETCDUhKk8z&8#;2Qg$@m@fxl@sdpnlrU{8n4# z=+Dmlaw-q;A08Te#AB)P;W@2V$+0iheeaE9nNN3K>Dl7%5zefd)r^{{#-|fa{Ye63 zt>r%YTEW`6-)gNK|CzZ@#zdr#PcYwWP2Xqw+)vx?6W5&S_gE#zzRddGTgP#qdN;RY zmUy4Nt}*xLukoo0>ncyw_R#KUrY_aS{2p87=+DgjQqL^Rr-C1QgtK%s8(cHXSGRhJ`iTQSe(x2&pKt5C>gc__xxddUIrc06y+4lQKl`*mcjbS4Dg(Ff zwJZJjI=}eMj(lI~2SN2wx%{<_|2_7~ePDL}mzj=QU)JYICs?~zTyN|z{-%`RSaoa5TU_fC|68q+W54p>`{V29e~Dy?mZ^o8x*u!#QTG4TM9neMm*GFLOr1|D zCIvxeD`h-epUwHd$6mP)%*g-Kx8(0@RG4{1t);P7T;u$|$0|AYEC0Pej^%$l(sNh; z;5Yrp@ZXJ;=Tr#cfBn3j|E>1QePDk6pWe(A*Mzydc&nwi%>Op4ZIFA24@AP!~`XBQ<8I7y&v;N2GfbLi5t^XhI1GDpAQ4X~Z^8YOU zueJ0x=YP1;YL%S->-_KibsYZ{4X<}|WGlVTmN{WNYsN@lBL7EEssBYgd)ZIL8&h@J zzDe8s-(#=b2WI9!F%&a@>HWz%exEHi-`Xp1@F{A%5@uKgTw z-=CjVqe$-({HNPjoqsM<(dqyy&KaLupKarRkG*mqn3?~Ik=FX3_WHS1)0c}aA4~nO z$0|AYYy8hSXth6%4y;{Gao`wq@)U*F69CSS81P<-hmGas20DE^msIz5+| zT^_#w=h^i2KkTWK=Uq$+|A}FUx9aCD{O_|@?gO*)pS4u@uf6_p|34=tZF8yH<$tSH za_m?Bdw(3qe?`N}|6zW1TNk%lwDa1+xXvOuiOV_=D*&Ovp%%{ z=i`f2qg7!d*mkeD=J~(JDmnIr|B*kA<3H81k1w-f$^WVG#7NgsbFB22;s5jd`8|sN zS>2#M;5r%G_}^o%+y`dnzut1a$xWwv`>61_iKSw%xMu$MSS824)c-jnn|O5VuOs*` zHPbt-=R0sZUd;cxYc59mGW-|6S>>yHXVkzPG(#z<5dzqRyq_sPLNOfB4^Ol^pxR z|HvQ5@?Y;%;(yNn@R1&S6}GI2k-o(I&k3}2X-4aRoK;1|)9nvv=YOlcavzwP|JoI% zdmdR8rg9p4#bc@e^;jjxe&xUS$8r4Eeir(Fwf~o$^HKiK-uc=2ul_!E0n{U9{znf-hySfs$+2Jg z@BMWg|Fx%a&HuAg-suIMy#o+MB~J6PiXs3M!rfWcrT{$_%e`P`1>h~o{mZfcmO7w(r_C-o`fD8EJ$9@Hloj97>z!%9?3F;yDpsWLdKSgVkm&}y;V3ue{;op+%8kd+~2i9QZQ10G8)u*WVr`XvsCJaU`{@J{Obq>2vv z<6Z!;p1m4KXDX|!uG^n#0Bf&W)2$<#HVx>pSndV0Yk>SheZZ`LWOKt~sRyp;pSMen zeu)Djj~%B0s-AHk0F@3pKdJx5d0#zy&Xo&bQQ|fB1#e@0X#h&biede{O#^x?mV3d> z8lbnNPmCH0aX@?`Fcy6*HNhUcH(EzvW9}S>qh<8Tuwr|p+0eu$By=B6LfbIUp{0_LwXaF%98sKIoG=S5M(17}Ry9TscEcb$$H2@ou z`Jn;wh%64EZ|HGoK#yH=^h+*4XOQ#Q5gMSk(VQr(&*uWv!`rdGga&Z-FC3@3QI8Z2 zAj_p*P(MGX0sR)syxTRVymuQLwlw@Z%x8V7ifyo3gndO%ha zq^{nM^(8a_jw`!zGZPx{bkVVWxj^j&Qq9<6xfjf=0eV+X2rad*_}myG z$8bIf& z?v7ONcy@LS8c=6ew^k1j`+Mw?qrYl^_to|}q(e2j+R}E;jOOAfgfXHLVX@KHl-G3KoU}gI_k6m)~OHDBH$Z;B=ej3g}lHQ|9ncmM{ z6MSdM`03^1?vpLY$pwfLSPOCIAGT>gkHvB?m{|j`q0W+4m+-kb;IY&Md+d^EdB99%b0aSF_;s89MX4Xu(0FjmI{!Xok1Lz>69#B7T*ML@w zd}BUi{)N0zXoWJEOjDoUXSBL&KIez9nB5buK{g#$)C69bO|cocU3BB0JU9i8{2wqn+Eh)Ecb$$H9&8v9w9V z$VK{Tk3}vD^!0*8t^+r@4U71(_S_sOr|@fK>xp z?UJK^ssYYp$7z6m`)RLm9`ns!6J%|WJ`Q(-kk$prZ0j3cI1#BW4(PF1?gcYzfZkGP z%cv%p=ZLpo6O;z@*d<4Q)d26Y<1~ObV?Q9ZpSAuQ?G53~-tFue>-{Bag5>$yJM7eo zK0$gN=@qV@w`o9+#d0s0Sp)Qz#`Q@8A2mCPiX74JsQwvvD^!0*8tt3APpe<$^4?utm3)h+BKln zE;;(E26&GhrvdPR6%XnGtO}w^8P>Dc1gZEj&-)vZSOFowr5;e%4BIrI$6~n`%&Y-= z%e7XFJu|~-EUXEqHW=cnf9GF0LKIGrgS0nCP=thIFRlu|X2J)+UNfWO5r>IJz( z9Kh-ZIa{=6i0q4Z=DW6Pc1{EOEtY%1oEmWYmg{~2BB(eHV6|my&3JCO&Rn41E;;%| z10s(ds{y6wfl2_`bcS^uLC08MMg!hia(&+eq*sA6 z&||UO3ue{;t%H*z691l`8|tX)HZ`EfE;;&ZP0)MfI1Sjo6M1qL2h`Q{80$;K0o3|n zsXH%FaR4_9`11zaG@!>~xfjf@0WTH}P=7#v#|URRZ=7FQWm^@AG}mzpK@XTtIQco<6}<16nPX zd%?^apnM4p;9bw<0_@eSt$m9c&|{Yz{Z#|JM~>5go_C^_UT4vBX#jnIXtnQVQjd`O z2y2aK%LRHYmV3ec8o+)5bp}u~igQFxWq3>)&}Nq${WTZx9y?A0=y;*0j+l>Vk3F>+ z)-`kH(g4muLIa*JZ&Q1vYJ$oY>gR15&||UO3ue{;-cq&Vmb+)zr&U|~7UO^(yX5E> z4TwB;lm@8dz%`C!i4cfSC+K%d2OFPK*YN+;B5?JGND z?%5-$3HI3~M}O4-@3G@FK>adW8`MsLOatg@teF+*{Uz!F^jxX)vYzKz7oZ~pF1zyu zTH*k8ij~#Wa~8|JU}gEdB99%X0eUC( zg)0ll@;)D7&!qvnSD5pfYp(>uC-*hOkDKRh8qj00+zaN{0QCnD0bs8BntepbHPniZdYe(_nb>;&7cFEB{)d1(QV>O`E1l1js z>%FVAMOa^=9zYeF8i%_}O!WZWFYtU(irzS2^@3K5_S*TJ4gfU-|>6UK6=)J#w4|&@;!ZPcMk-0omP>FP87zGAG9R5*k39M#diP7XUxj z4)^RAkOuTvEcb$$H9&7kE}&Dyv~wsrSD3q-+Wq31HK4~XIr^&xc#j;X0VohP0Q6pa zL$Wm>--SO@9PsAyE^yrMa#k+Dx&eRNdTm=S&||UO3ue{;)l}BGA+HDc(;6bbxMmIL zu}hAA$ps>h9j5`zZFJ6*IDnhu;=GU354X&jEe?3TL{+T+yO{~*t22{$VEZO*8qj00 z+zV#b0N#@Rwbd`OeI)MYw%9MOSp$0PlB2(BfcMyO8lb)><$YT1&T2o*v0LWESYIL+ zpy!cyip~@z2cTZC=S)%X=jWrEZ5GSDU}g>AEtMk@sWL0%IpSlf3HI0}N5A9(kw=cz zfKuZqN}t66v)2TPX^8cs{s6LD;<-Kj0jmbIS}ga1`87as0P96%2eGRM5zRi9nxHhG z%`Q3mYaHM`cAN(2ChhgK{45t>UT{7T<$afk1Bmvi+xSif=5O6Wvgb@uX+V#~axa)! z19(e#Uvh!$-UK~||w`)MF#d0s0T?0xS0QycwMpa<*uYl6}>-@S^j>NIz9o~_rmYe1{T zaxa)!15Ps@W(7rwzE_x)(%Y{IN&|ZAlB2(BfcMC88lZPt*9LW#7}4F9AupF)$aUGr zdVh&rfJh&-{HYe?bG#ez++Gdnu~_Z}vugl~S?U2GpT&o_UlUw4pw%up`b7gGj~uH3 z<(;%H5bqmA16-wTrd$AvvWmk=A+?I30nhGhg08EjEe=2fS}m4)!TcIPj>x-~`v&8= z;r45Sry9^^mmK|44~RT=tOk^uvsC%b>c4))Z8ite}y|!yWtHp9J zm|X)(-^jVW!^{m%aU;LD&YIw=0j+k)(LdDy=dt57fQlr2vt^GcJ+^V}$Ik;1)|bcy zz=xSSK3klsA@5vAG;JEtW3k)|X4Zi9Ew!hdzRJum>dY$65wBSTdhC*;ziNQ@*wGrW zt_#qwkYPQ0O%M%GH?PZ3sa(*U{?UIKRA1Bij^EPJjvfZknl0T-R}rksI5E>J&j(|{g}1IXvf-jM992&xx#1Rd-BC3Ar%OFU4km39?U zGju!N+cluoV!0R0t^we^&J8F*90xp>njjj`YL^`SRRfd@Y&~|g25^oLb0jF!3*z&B z-hK8yK~##hKlb^14L}E|7u3&tG@#95xfjf=0q7(hVP##QoFd@Yj9pX}&kffc2lUt_ zM}O4-@3G@FK=rZHbA+A1t#+6F0@?mBcRNpv^<^}G8J<|*MW<^` z@QHcet^utU%e`QJ4bYjQ+DV$#iP%lBRn*uot~m~n2DI5FN55!5sZwt}aEqhZ+tb$s$yU?@=)M_2Rzh(*e*HxB@T!@cAN%KKO-(KYlHb7Q6CFNdVeVmAl83j>i*IIohA0f zJa5y09*gB(FtY}rqpYp0{i9i}*zLl+O%3R=OOF1j1~`u$rvY>*aSBY?C(d4*I2WLc za65a(SYJj1=oF0i3=y@eX1F&F=&@Mt1v6`aI@ff+F4-Y-U*;E&r6$;8mmK|71H8wM z(g2;0rZ}M7FPmdsXVG(M0Q~{f1LB$>CkX7X3HDhm_kwvffOQY%26aIY?P9ffZE)M) zlHW&ty}3Z2U2^o-dVu%HaT?Hz_56K;>c7z6y*Q$nI_6raJFrqBxo4qE;?q;q1xt(mh zDK!}4g!=h84d}O6?gevdfZh_FEIA_m0qP#%&#iKDwv0cm;kGoO-!3`&B@T!@a-0Te z|IFGa$f;(r22ca9eIUa667>KqN^Ik+RA_)|g6^!bHVx>pSndTgYk>C1;uq=@%w_w@khwQU;E zW3k)|X4U}hk5f%h`$@AiMLB`4wstf(T(buB*d<4QjRU+#j?)0`fnZ&L8I(Il;`L7I zm-E*I73*_OW9^lS1ElEn^EM6Wu~_Z}Gi!i$MW`DR_UpXqs2VAH5kpm7bjrE_nGbu1 z>*sA6&||UO3ue{;y(On5$uIKrr8v9kacDq~U2^o-dVu%XQ5vAt?y?Jx-J$t?gKkA_ zHVx3d!oGTm2B-q#D%>p^&}XsS3+B~;@|NqF^H?s959!Hx3>wg9mmK|71H8wM(*Wi~ z*3+o}67!MSWmwPNCrHhYnjqbPwO1+*Ag6Pup|oj0kHvB?m{|i#UA3$WXmuc}2XMbz zZSC931;`~;Z*H+mj{d0zIFB8t0sMCOz&q)*C^{dabA-4Zu^sEntPMU}-X!Z2WR**~ z?)FXEG@!>~xfjf-0m`JLbh>vKzc{A>59?XC*eBR;mmK|44=i&f)L6609FPK>a6zy=< ztTZ6+AAP#md#k8%o#;CI16K6aPjlWbIr^&xc#j>Y0qS_s`LT2e<~2d$>~^d#qXAkQ z^e5Xe`)eiU`SPaQH)+#=9*gB(FtY{_ooc?L=jzr2D|+MM@!|DqK%ZT5^vk*c zvy$`3aT)+$bY_&+1*nx}8ZdiJkn9z$c4vi=3$PB#JG-;S+BBfYV!0R0t^ssY5eJ|F zstUyM;p3pSndTgYk=Nz zT{9+Y&HUo_Yl6~%9=qh|pK5^f*s&U*`mcJ0>7&cAu4m7=YJ$8AeXhJs9i5^9>df48 zhREs#trp9@U}g=VN=2r~+2VM_xj5kVYl1?*$1XYgs|I+F9j5`j6U-9tHp9Jm|X+PUNRzp{N7=Iqf6u$*IW+}UsNYKXO|rP zQw@-^Jd8}oYQSloQ|rLdo+0Aw*)>2_R%ZKpq;QuGLh1$e^R`@oPq$hu_kx)hYJx69 zMFYyY!}aqv4d}60?gg`J0KE|80y;}9TNm(MnUP;yy9Tt{B}c!+0g=a!)d2dH!J5v1 z{7lgoX7-Hr{xTY%`v%EnYqdfHn6tgVkm&}y;V3+C4V`UJI7l%FT~VzFm!?c3FW zHoN5LuNvSzcB}@dKcK7%W_yQOcWcM`G8({H_w+o}9A|BiN(Vg=d-?=b4osc_+6T}ssXKb$J6Yh9Noi#?(vyEtaG@#95xfjf@0h}#fddK25WBj7F<}GVLn_Y7Biv~m)F2astzDwi+Sd@G}>J@&nr~{S#{k_6H7R$Y0W)0visje0cP$#)x zFTyV#u4~=mSz^ird+d^)c&E`Y5cOHHuHE;;&ZJ-~b9Xbn)ElQqYcfM{CCT#bfCcL<3swlA~WVAo9qu z8ckT*5@>!j-cnN2T;!dCs*@R9Po5` z=4*y+ae#h$o5gZ3m|X)(w4+*a76%X=x6cjNyf!HGRVO)TmmK|71H8wM(g2-{LRGiy z8Df1s&ihzfYsdOBH9_t~^!dItKg9X{t5w_X$6W0xHLRRg?7zJ3jO_)gjjS-L>7IAH#oASVb>6Lb*^8b$>R z|E{0s8nDM=xfjf@0Xi>-9Fg5^nP1#`O|V8^b&||3Ir?iZ;5~M%20T1lyePqTmVCK* z0hXx0K2sdPovGvk%v<$H(EvqWZue8W2DDl%_kx)6b+&I14X7jN*=mC71N5s^(f~A~f4{(~7qnU|_k!6q zfH$U2MD2?`0htEedQI>Y{Z_l==$Bl8S;=|iSPjq~h;ow*y&$}0t?Oujn_VNlzeG)t zs=smpSEWJ&bbf&AY-@`HP|a40yfS+Ks>O0-lG9+7R$Y0ehuI)ORsQN51>O}Yt38MfHu42=obxmdLLue9y?A0bYA-D zJww@k0iwQktS_ShWc=}-Ax;k3~`e`0kx#KfML3;L@AoIJ{I$XrUoThaH)OYK(Z5q&HvD^!0)&QNc z!0yP>L!SFZomt&x9MEHz9Q_gpL>@a%19Uo`?vhadbGAp6Tj#dSiLt&!9Kf038bIB&+(oN6AgdFxSF^VEEv^gn*d<4QjRU+#j?;kc zJ7s4_5(ms)6XX_bDlGI})LzL-EN>zI-ac>BfF6tGUNE}`oUVYDljiE^iJBm%PHe3i z&kfg{3xIyBU2^n`21Fh?Rs+gZ4_l!h(e~CDNn~*pk0Jhg&N$)%P4Cf8j z&)YSi)nd69%&!4DDTT-|uLp2~TW#&gFRot$+U$~}Uo;@{$k7@=UpQw2zHU-ebpV0B=S;Kyg5>0kiiBq5-Vn`lOChcTwIqz9xtU=$;|pA3z+ySteLYgtPOGtQMr+f6 z9*gB(FtY~GL&0srrS`?H@k|45zb2?SpvNvb`en~h?}vT{hHva0j+k)(O)${YlB;l9IF8(7f_#I zruS4Z>)Ca-dH^*+_7K-2UF!kvB!qSiXth}G1+!~Fxno=1L0K-~PG^kghHK6Rm;qYt zlA~WVpj4=~9yv|}R70m8K%I;I0>lCI-Pa7_w3s@Jj@a<1JwJdJ4QGYCeHg@HGMV> zC@c6r4tT!gwP?A^YT7lR)nd69%&r0I8&RD|=SsLL3g-y9uFKdjt~m}s16u8pqrYl^ z_tYZhNj5UDVrDoP# z8lYI;pL9zcz`xWC_r(G7f>w*=UNE}`=*)TLh$w637j<>z7IT4uK7F<4?UJLvYJm6H zu^LeNo>U2-0u<$a&!?{m(gUQN&8Zdq=iT<5A3&{9UeIc>+zV#c0KA;F!Qv5_Up$VQ zU_rmlE;;(E26&GhrvX~^B<7Q@srD1ad@yM4IDmPc^?!f*=~@qpTcFEB%YlEdiwe`rc8gSb4a1QG_i;l6rL_Gj+1gEV< zKe+qSoz4$n2b|Z4b`5B?SndVaq5qXR1%idx3mDTe- z-7U9Y6YRH3j{X`4c#j;R0qZ*v`Ir3ya3jw9d>8&qH9;yC@?WP`XaGG9{vM)p8qjaC z+zV#c0M<|O3#!E0RT^o)i^b-(Hbj1LopHb^`fYZ}(O=^L@3G@FfH$MkvDO2!bzmQ1 zM_6Ab7eLXd`8ls#HGp_->$Pnf&||UO3ue{;y`}EhrY6WbOEx#$eoass&|{Yz{WT8I zthDvW(Hfv$5UmU38ZduNko8M)0XI_i3vj{^^?>?$j|Q|^Ecb%hH9$A2u@1`F;@R0U zKJ$v^hHH)k(12FEG@J+g|N0NH;&fb7PnRtT;l-Ft1bH}bsvXcOV80Sxj^Kx<1_%i=uA;g z5n#_yt^qZ3VywsK0^|YOGsK-~wYTzIdxkh)c>BCf19~i$d%?^aaQc?Ifs!gX_S;&G z{Q}OKv0q$s9MEHz9DQj(?6IRYKs}*~_Tn?7Q9I`YQOtK44WPS?nqSRv-8cAjd4lfM z&wDhW&0@J1%&!4!udvRX_Zom-)YX++)_^v<T&1=pkjSk3*Z;78zYJjuRj-%2As1? zj{a5ywjMi919Uo`&X47t$d)s#>)CTA4WRC?eSa1DnL}+R@H`LXYcy74nIH1QaIr>EdB99%X0mQ|uqpdwcSxt~^ zx@J}s^Np_uaKg*m%lr7XKQw?fL7gE|t67@{^jIwSf|)gdScx5j#V_b*jWuA~-=f_a zkzZW12K3k^N5Aw3L>@U#19+#0eS$gGZg!2ZzKjOYw~DU0$^~%(-9h{A7|{xGkHvB? zm|X+P-k5W}!cP{9KbD%H(AS=!b9TwmFLA)LC4Y4uJ4yp!KYFh_rm1qD(|gCPnKXdP ziq-|(Y87#S?jT{0@iwAqi39p9mV3dx8c^O+y)aY*iLSCZ;BnLh`|OgVzs3RHBgbig z_SdX^PiT6E_3Sl4&SXKW-P)gW0i8GK)(+b=pvPjl7tE{yddqbUEIU&apLrZLK_Vmd zmXum)W|tiORRg?7j@E#7tm`Z~uKiph7ogvQjNMnN@l{p?SQn_hwnqcnES7u0>>5yV z0cHhqt88v~95q2{K&xGH^j8h=9ywM6PTxuQ%SJsy{_8X40%QWz{QRwGXn^h^qBDA5 zF2GFCYO&l4X4e3nn5MJE>8y%1fWC{ZHRHMAdTWBxfL6QY=&$tv@3G@FKy@x^9OW!A z?H+XXf6nKczb2@inC{$Qaskd4AWm@S4!6YtJr>KoU}g=_Tdwy|YWEHX|AL3R$S?qA3H(g4*9_S`Q3FXRQS7R$Y0 zb`8*5qWkB1$LKJrwIPZRuQ?8o4^TrtZj*lI`7Tip zpx#d(2eq2oD~SWRVTd@Oe%>Ajv|23pg4s2oyd{xgc7_Ok;S~2)HK5flIr^&xc#j>S z0owhb?Dn)5B+mtE=FFx6I!_QSa~i-&NbDP=J8S#=oCfq;Ecb#rHDGszl?qqs4vKRDx(Bw*nN0&&sq!3GF2Ifg_7(2cfF6tGUNEx; z=q))%UokH%&-~){Yl6~%9=qh|7Y*P%R_BqUHJ}~q*=vH_IgSRfr?XZooh63F>4V)q zZ;Jzt^Md&`K((*Z9h7On?bifPHK5HdZ5qHiLe3*cYXJKNv@0Y#Tl~o~+SzM@oFhoS zzrD>}9qdH6I%f#2cohw3vsms0vul8I0oGH`^#{19Dvl4YvnIG|K&xGH^c4rh9yv|} zsG+m_yR3Dv(wpi1+%-X2l(j#vRy=>Y{7bG-t65td&||UO3ue{;y`|33R*qPrfvs}B zTrBBtcf75dpfsSzE;;(D3C12fRs-1avGxamH6!y_*RyA=_v6_W+S}m4)!R#7P)&^B2j_;j710G9F5DjRxOOF1k0p4TBX@D{j-Jz&GLs?I# z?-7age!K>d?^9=G?a!$g)~0)iwZr;(n+Eh)Ecb$$H9&8vy=3R^8KSrJvD5^6?2@Cu z<^tX$M{B@}b-q80RiN$cIa?eci~3FmGys)g?{J;f^k_hv#d0sW4h^6yipVgF1Be9L z{o5_Fi?){b(-Yu11s zyX5GX{s6iISk2ygHXX_LFRdENgUwRis$MhWPM=kwQU;EW3k)| zX4e2_g*TReSsPU3>#8WM3-}vdZdC(X?UJLv#sS`AM`?i0MNyw1m2~!oWc^_7G~U_b z0I8~9u|@;5r)Y1laG%9;FPK*Y%3Er^h&X`yN<24U^R1%BesR5VK%ZT5^w&7Rd*o;h zSh0S4K{LbJMc9$vUn&8{2 zR~!KQ=>c+C3*6P+#FYvdQ#To356 zOOF1k0p4TBX#nrU*?MJ=7_slOIOHB~;TkVpgzxD}wj~uH3Iu}L#0nGFn)-`ix(g4N!^mM!P0;K^u zON`#Et(vuKK&!=aFPK>aSYK6-P`PC+s|P$?qN}YnW52lOIH1QaIr^&xc#j;X0X^>o zZ|1HEq5(uQ^ar?+@*H)*zw7618qj00+zaN{0ChyGKR~+%TpWmBJeHcE&~LL#j{d3v z-Xq6qK-mXH7Le~3@F#XhdEfY&ARMQ&otmJVnRw3W;?xA|=j|HMYO&l4X4e4ah^hy$ zqLRgjkEJGv2DI8GM_=`T*ki|P0DVeppJ1K~%v}@2qFQZ@G=R!3xx%YyK&!=aFPKvU zv_qb}m-;Dvg0LTZWg6hRF`~KQI&*=3yX5Gv8sI&4ga)kd#5!523FcToTfVbB@4HMK zK+jILcbE>reS3%dEtY%1>>5z~0`{Y>u?9R_Y~Jn{*RBDrcFECSHNbo9XbsTb5aj|{ z9N>52M0$TI4Io~l!dZJIo-7S;UVAPVIMskQi{)N0vj!;d)!HDP0qPIHezjHUE2}fB zTdN5Q{T{pI=$~qU^Vo43pm!n{Q2iH;%k;jkq{UcYMg!Qv!aQHs{k1NjeT8n_piKjM zES7u0{2H+4i0Ay`_G^Nt8qj8!9Q{=TyvL5!0QEf;4aoYz+{qiWX#f!bxvZ;FF^}nH zr#*L$u3pe;vD^!0)&QNJx6TdPQ5NkRd}gg3#fR6N3-s6}M}J)x@E$o%1GewPc?MY= zFn>)@XNLM!O!R@8zRrZ(Mzw8mK##?8FPL8g);sArK{4}-$5Im%`fYZ}(JvYhdE{sf zSl=nz1;?q~E+35a{xZ3M_5}GI?Pvfu4^T6#y|zaK+ANlP!TcIPpP)_-P$zj52XLpu zR#D^l@cQF`HoN5LuNvSza3f>Bn)LdVv0+Uhrxf&}OmR z3+C4Vy(P8c{O)nT5*y78*RKI>cFEB%^?=A@M{B@~`DI3 zz4ONb(ca+GIKX8!?HbT(vD^!0*8sgGs!1G>?HPLhsA__(cFECSHQ?zIlh(W0$7w*R zb+`2ix*NLYiUa5rX74aK)oO)5qjj7yQa^9gfF6tGUNEx;=q=Y1)U|39^#}Md%^q~ zptmFr$k&Tr7)6cehHI_|NCVpJlA~YZfXHJnp#kK|V4c+j{jU7EG(fwsT+NSMfO`nh z2v;-g)qwLB%e`QJ4WRbL4h#H3rwF)pAuRe>`UIr`ZFb4gU*iDpkz+MLcZ}$)2zqC- zIAHcZL2kbUC(aaeaR5;OHA8nRM!N>IS}ga1*)>3KDW%KLmGIV%=7wvJ16u8pqhB;2 z^2keQKpWPx*95uwj=Ddm33&}*|1&*8_48g0IB&7s3$8^2$OW)!HaEDg%v;xhb9Twm zFS$VEvEwv=J#<8S#C&uKpQ{JV-Y3Yt0y^(0iUYKF_?d|l+BBfYV!0R0tO0sU?H$H1 zlo3QdLN2qq&3ZtOU2^n`21Fh^S_3#wP?cZq>C;ZpdKRVP?()G%?=MjkBp1+qf{_ML z6X2Yo`gxBAv{@|og4s2IRRH{gout{Ga{Qu>s%}>UTJ4gff0_$8j~u4~I#)|)io$;K zbk6!p7U*z2Pc961+qt8#4`&||UO3ue{;y`_3$St-)qVIK#e0gt67 z*khL*{WT8o9y?Y8q-(6GqXF^x0bo6UO_23g>H)5DK@32zqt1icuK}$V%e`QB4Jf@Z zR04GOxQ_$zi#n=`=Z0&p38De5cFECSHNbo9I1S*AUY!|LG$5}1fVE@RT)6fT{iR5QP*cVOMJ2DI5FN55!5 zZp)$U$ldW6VzST}I@61T?zI$5?vPO-&uFPL8gR1aWo z$o3217muYTs5qd_E;;(E26&GgtpU7~JUY939IR)r337%Qae(hyA*&_cd6gca)eFvB zEcb%z&;WHoWc>m7#bc=no}y3IoY^HuztjUFj~%B0^vs>!D@VK^uM5yau&t!UG2bQD z1*rS;PGtV|NQnd3Ekv$RKW~czdMuWE!OR+H%4g z5OKg`sR?R+QBR%jUy8LcN55!5!_L`vb71jn_#DWHtUg7$A zTO811vD^!0)_~Kuq~4+3B=OwvSZabjcFEB%xj^KxV>N)BhI)V$Ev|4Wm!3Ngz@p6a zoXt{?R2o1|N1c27yj=rYEtY%1>>7Y2=@VqfpyB|0WNWpT_p#MusR^P1t#--LU*mwM zi?`MuIa&k2`h1le4Vb+qSmt?pfogAkYl#B5JBxLL`gxBAv{@|og84N-wPN~5vwJ8N z&DPew#d?4=pv^8h`fD7Z$aL$mqcvbXAB{{muKl>qnz?F%?0r`4*3DRGKLjvA8KW=Uw_sNQOq}cO_19K)X(W6 z7Bqm>PjZF&dAkO*S}ga1*);%Wmvbhm1Z8u>W2p(^JFRxf(J#3` zTm$L|dagKtxJvg7IklpHNOz2oGi+zB77ggLSndV$YCw5QouRE-aa{i<7kC^s!9Kg> z=obx$JaV)KtmmaG4v1<$#L-*k%%uVB9M(=u=apyx*#bQg_46JLXtP-E1+!}aks)&f z*&!^C;{Z;eYxj%m?GKO!wAv*{f7Jl*kz+LgeAk*_eBU6w19b#Fn+B8{9NkFKfO6+( z{k&ZRS}m4)!R#6Uv+)c1;iy<;8c=sz#C~z@8qjK&9Q{%cV0RlkS?O{=)zNVppfh(^ z8&oeyc77}xP_L@TSYM(?h+BrJ2l(5s&;acjax+((2J~1g_kx)(X(lQPHBxbK)J$x4d}60?gcYz z0B@GO z25>qeyM_2u??i_n=j_EA;OBv;7vwUzfY$$`{Q^W@WM9;EwqAQq1NtqNd%>Ik|Z@(tkZ#>-PjWQ#dX#LRt;#iOOF1k z0p4RrYryF_LRpUx=N)V#=ostEXuykw-NgECq-X%Uis%!ppZ91$o5gZ3m|X+Z4XG1^ z%5IV<7r6bJ;Hm+wcFECSHNbo9SPcN*vJRY8xXAnJ*>f%ppzDf$PIrHRases@)IjRh ztac4(wOH;2^J@V24ioc`1!T2i)?(V{hHH-l*frB)mmK|dUBG+fSPh^i@h}%a>1s^j zmHYZkH9_WgG{8qJ>=>q+Prcw(;(%6*(_ubyX5GXTp;q;(Hg)zl`atUK8^$GRrMI_OVk5URqFok++cD6x(8T| zb>|NEXh56Aaxa))1K2lMRt2*)W1o55ZXD2NmmK{y4)7j1S_9hN38d=?dNvIxH#gP! zJ{s_1i4dsnxE=338qj93+zaN{04ks5ma*(y33k0~qpH|1u0IZFvrCTt8V7if9j5`* z$I4oVR)4ZRL#!OOV||G@fW81Y9-Spd4OV-=>o;lBfF6tGUNEx;=q-tM)GM6dFTj}$ z?S6618qi~x9Q_gpL>@U-16VODxj^0v!U-MiSdZ5LYIXFiai*xtP{8lY8A#WtlAEW>*4njkl1vx3Rm zpqrWSWYrAu?5)?fX+V#~axa)!1J<`>HwotoXZ@pIac{96&|{YzedPkN$6i7MN*72` zf-OThOU$3x9btWmIDmcb!~y=qdo+N5i4*D!wpRnrTP*j2>(GEwE6#eyI1j7#m&h-! zISyDg;JjUO^j8h=9y?Y8bS?^O0rZ4whlq>$b!Kln)|b%$RDkvWdY*r|ydAj?t9!1i zrCkGBEtY%1>>5zsQu_t6bpfZSw^|`v&Q)$#Q|Zk``lq z84X~q8VztNrd)uvLAL|4O#^x?mV3d>8lbn-Sz@XLwc_P-Thd20FC2 z){N(dYt9AGfL6QY=&u^!J$9T1FejFGLg~+G!2C5qt+o=|)Lw}Olyima=WQC$W3k)| zX4Zi1Tju)({Amrh7zgy&B}aeN0PnG5HK6Q(Q3OCuFzOTJG`^Zy5!RQ<1&CFm^8?TT z^$}7V+`dV>2DDl%_k!6qfU4KJW~}ZJ7YEWIR7X{}83&*Nt#--LFKdI5M~>EjcC6>_ z6I8xWP0+3VDHo9Hy0ya|4QR7i?gjH}z3VkE~6z6DexaOLm&~LL#j{d0zIFB8z0rU#9mxlUp zmiMtMZ*~npr`Q)5#R2F5`wHvlJsQwvvD^#h*8sgG8lY99cy6ezdCPG?n_Y7BR}JtU zJ6Z!cA(Im$&YdgFnY{CBfH>|}tKdIp;rlyCdNiQTV!0R0uK{{XvVe0MP)Aj_tO0Fy z$*&Mm{;6etq16~N$sM_`e}0X*R?^NXtDLk(HgMcHJ0Bk z={s;EtS_MfRIP~h{W(Ht0Q;X`vY;#bc=n3jH>_(YR%KftfVM)Bb_*8^$|i0zW2U+Mvo$6i7MwA#&0LRri=drc6FQf1{l zp-2PB71#r_ecr19=Pj0d!TcJaeS>&8yQDI|cq}zRX+WD@a`e|YfEcUx$k7_0-bboF zMA8}7v)2UKhsoYye;W#M0Balc5Y=zeqXBIe%e`QJ4WNIt+%b~Z16@_YUJ1 zkE4)2I!sCAsEL2U_E)Aaxa)y1Ik;T_Qc{Beq8{+sI3|M#r4(%`|OgVUvh!SV@GQMSW5%4 zdH`6@UK4z=%=6MUr&e?iDDv7{6Fl{T^A^j!;5sw_dr=|E~cgf$hls3wR8)RnYY@5jdhbOJL5_@d3^XdYJ!}zj&HTuB}ZSm08y*=$gvtwdLO9=&;t-_06JJRE2{rqLIa3a z(ExWwh%`X=54bZ%+BKlnV!0R0tO4Xx>JwCt5bG(KU%2W^ax6NG>L{+sf(4TI_bNX88A*wUjHVx>pSndVap#kWAe$FI*@i=ON+HZE+L%n~$ zfO3J@W5;R$5l+bkvhxGL+GW|1-d`pTAaf;Nb0d`o(DCnXOKI1DR*PM?2H^4K43Vsd z9KWa)HO>*QJq~EKOOE~;2hgihd*o;hP(5HhN64QS1J-pG9bPqefv&RADEvXQ_c_tTlEHy!*z*f8D=$AMk^4PH&fG@9cKvw_7 z6Xvc5P!*&#d0s0T?5Fg%ATRTKj6(J!>X+v#fR4(2ejHH zN58}Ykw-=v@bc~t-u;0Em-U}d+e)o;L-@NJ?rV4N z-Tl@;TwNru?qKY#C^{f*Q2!#6xC+uwx^ zoQ3*-!tZ|i4}baZef}SQ_tnPn+kfTzzxZlD;rl=MZ+`C8egbdukACOXe#Y;A`cpsq zYCqv`egEe__i8`k&%gUmzxUz?ul6(k`d|Kwf9X|!#^3+WkG&!yzxTagdPQsgldt`Q z6j7{%(w(vf6+`+zIU9<+7j{N# zU`N!xUoNr9Z!DT{>djJ!3}bq;I2WbPUpOy4`dN-?F~%QV-kjg!PF8ri`2HKqzpAD9 z^I4SNa>|Sw>uAO@-h!ph$8y$ib>k?5@zt$;jAb66K3yZ{MigVV=gD~_XXdL`<)~dS zlTfFM`Fcd1dLLiaNAk?_)s1QojxBtp3yRvO^ZmkCKh|-41yQ1-f~aO#A1AzeHF_Uk zWkttVH=;dg#-9;iGbCr{D|gcnKk0^=xX;YZZjl;C^`w1#eR>~5aaUHY$nI+~TJaNB z)%@9IFBjVs|0kC7dmU9fda?Wzeb2*jjpnQ7SM4N>yUAX?a=eGHL@-24j<0S+F=l(7 zv|u?iWAQFl)XVAsdqC6|Qgh>o3h*ArVq?1f8Ra<`#Gl;v~`N{M< zyn^e;v`3HQ&y;yL!*gcto?=XmN*H^~v46fD<0I$Y=SyUzyxe8Geq1qT@sqZQnOT>+ z25MUT_Wq+ zo)N~!GFLZ9_zny|u03eBFqcS=c-i%R6z2NTUV^zTsJb4d2-V}}T(Te{1IN*~78}=| zwg=JpGljVsp4Y-$;$`Cgn7PhdBaDw_?z8)N+3)3Yr#Za5k7<2w7o*u0FLSbN-akc7 zPJF)|?^y1Z3Ny1VF+z;1s|iK89>rZw;?P+fp1W>LF>-sJ6z*nt&dyzRQE3G*t1$C@ zwH8JgAIn|c+2SkAeq4LdY~!wKqy7ZblI!~Mj^Zv}Nx#Edr=sQ^bJx{`B3zH-E?F71 zN6%e1rahR(pDEnU@SK;s4>6WL#~sW56oUxkBe_f8zWPU;diZh0n8i=pxU2fH&nild z*^hS|cgu`c>QwaeM>S?&Est6Ol*{&Z`jNG0lg}WJ^GjmrMv-?Z)ZrM@d zvi7$xSf?T$AWn7M_2b%uW=poKbMJkeUb0<3+R@C_jW6njj60Zp7xC+6F8i!N$gk}B zG3`M#{!C$RhUfgurQcP|&9Wj+WVuwttg~VL%B~+*j9L7oZPwKpm7K3!TcbqGe!Szj zTYA31mGwT=AN|S!vrhdcub;d4TC~5bwN?Rr%^H@7Rv(>gxAa0P z*WHeG9CM|}IvET_MoFSN6+LwAs2-K;Qpv*ueQfN<6yvt%Nn!4@WhB(g9G){Xcg2|X zQP9n@BG zMYtZv-Euyot1Z=j_}qrxdZOo6WkMmRWNo!uZ%(R~gB69@Cy(Kduag`F&AGRpG85?>O$N<3T;H%68+m10Sm!^!r3-X%z1I@m_+vTCJxJAH~d^QQVH}aolBx zc+^wn$Fv92_%nsO8J@Fqm$9$a$hh~0yDHi-K6c(!9vX4ijVs11e$vKW`Wb zS(j=Q6%3E48`B;{#Jeyrt)%tk?7R2vxreDnj)*-acDUBkORvjvrHu+ny(7#?A1YnYr}I zvyuVE%(YtA^_ec+o;5=vjE`lmPFSRdR*%4sYY&?Fj9aiSXR|mJDRZtL?>O%2q>Qzn ziYk1}U036ca6OK@nsYf1$YJWnvOUOioJ}WRH@YC%6Owb zxpyv7rDBZ4cSOyug5pQD2i5p9jDd(V!*pK$D*h``GjWy9WA+_Yo;#!XOD81#kY1@B z{xNFtlk@y#Es`D)zr$tauOII?{!&c?&64v{&5LJW7r92r9u+sk9ePTmIy3zeW9Hu+ z)7kl3=3gpRS??Sjv9&!Tl#h&@(HV6rMftcJSU z%3nX;vHWdE)>VokWRK);nfF}$^mJJLD#vtw{+`}`5!WdF-IWo_NAs6%S288%X?|oe zOXDXk>qeYS$qelG#cJJ%h~JNREQ7U{uagzn9UITUm*}&?O4`vw4W?E@?&Yh$8l$)8 zi8L<9bY=#t(@H1$>b!-x)5`Db8N*;K3_j0o7Vby32hWxnSe?24^r|ugN8=sG-#%nr z1{xuI+zgDBsI>WAolk9Eya(0zGljnyrnB=`?|>GP0cR1ki*q8BkDh^bo|~^gKeeom zQH!6n&A?*0ucoatupjX_1}jfrPg~Dc2mL+55w=G%m>3~C$I6c?MsLrP!r%UG08{pdZ;DJlhz|2?nfZxh%LaI2!Rd2GiTA^}$lb zio378GDg@Q$6zeUIO!m-eanw(53ccN3WGCDXJ#R7)`LYRTJtAD_Bj5s$BiAAzMkMm6=S#O zN#QRYBN3)E^H*zMRIwC8=lpduPK5H&{N;8VW)wFDKNs%7vxUDp@jvgvVqMdXcN~8~ zmYJ8>3QgwCVr6!!7$JKke|2vwD{i%Zc&*-pYW$hP-we}v`OE0ViNfEk$K6{wLit$! zvT{QN?bj>)$YRvuC+GP~p9`PQyRf41j^b}Y_VlDsI@_a}?lLtjY)KC1_b+hHbIs}) zyFE|D-yGA~`OA6-{MByXxC@$nUbQ_(@mH%2K2r80+k^ z_^a6;WXZ+z`%nC-Y!R}@&A(WQxYeJB<43gz)%Y`ozZs@8^H(Udb6L9>=u3^FEF!{7 z@t0GG;tG}@S&UlzX~u z-JU1nZ;t8A{1wXUO*c9n)<;=>hjoPV(ebnHck}0&`H}6xv!w#fo>ihgf5vsGK=WPj zd^_S143;Vj+jU=ewvU0awrlf|GqBF`^WCw2RC{oZKT~Gl4AVIoyrK+i%NkNyZE!ul zzH@LCgE=dQwFZ|J`H{t_#ZOvhV4Z8`Rc?)-{dmXnx13_8{+u{BqKa9;w@%izx#Nd zfjJwi9`QH^E8|cO4650!D87aiVSC&R%nA|=_I+4>RC{oZKT{Z-VLCg5wG&Az4P`%r zpMft|!=lOoAN;z$@2-qdi=VVGm^wW_!JnU37#xjw9D|jqs|u|-I9^5a?=phH>R|Ni zy?#_NdV8Lf7&^mrW(F%yQx=R)XMI?{S0+OF*esay>A;7*D|NKzN45vgwiucj*sna7 z7&;p7SpE{55?z5Tvs@Hi`TIB{WRIMIwTF*7xkJ^}*7l$pf2Pd9^!G)W&dy&t4yZzx z{;L>ew_`6t`B?s<)5L`6i$mItEJiJU(!yW%xJ4a1g}>2w$MRRmiocv}5hHt<8WvWf zx6ZF3(Meuo9b>oWN#SpX>CF7qeifZ!$66uPz!+uM0X2%h#LiJ4w7=zV51!}w%eki1 z|MD&@&K+{&9miiXOYP;?PC}}^Q5OfZV9k^W+2iJ4#so_K)NVhjJ*dW?5r1<`XXdX^ zUQeN<78j#@xf&Mr7v^8TGRSGmwg1Ja#ZOu?V9qUM2KHSBB?FE|JeI*&jr9es0IQqB zXCSV&KZ3zj0*PE*&Bd=c#OUpLQfA-`)7cp;lvRZ$PK{?^hkb}#o z*`*qthqW@8T30>daSSG>|6Hmvu&d+1jvsiD)>e0Nbs~bf~AI)Rka^TO=iN>}E z)7F@p89DFFVy_xmz;?`InOs&3OTTQ!WLH6o@I8*n%)~@4#D#TK1-5Qnd$5f^BPNq8 z#kkJQWJawnT2{AVGBdJ|v3S?Z)wW=R@_3iSMPrMRi=VX2$gm^Y*IH)eXvE`qtmt3e z@2X43tHW6EGW9LGu!s!(=?&4iV*K_z;kUf8V4C4NJCD_6ss2jVBr?Tzm83|qkDZa} zqy!YMPnYvWM$~=7G}09om$j|{mkbyGQ#(`8JR9S)i0fr zfUO(X9&F>!6eef5&dg*XO-E1Ju@s+M$-BCWQiSxeOs1a$9Q^q@(b!_-;wLRLGAm82 zkvK+_895s9C?4xXxw30Xb?VX&;CPG;>#s-X9>-(4W~lwMN2LD!yoDQAjNhIo{0?U1 z4A*&iT#zP5Zi%e<{@T(J(#P_cx)E!&Q6A;Twg=M|9<%nvSX`!2cpQy*ERQ*%pv=cw zQS|DA{aj5cLib1>tF})Mb?sfzxb`3$f2Qy_!*ymJAKk{G%8Nn2!1{u_00mDMNuKirr{Fj>e-`GoKJ$eQ|g&7=t5pB@Dx3b4;b?4oFg-sba}FN%%R9Nq z0mxjoBfbQWONN})y4V$X2_B<&)Vkux+Kp=uvhioc;~dwSc`P<_CSIv^Wvj@Xo7ax? z@jM2H?I|}O+-+xg~KJ{%GZ(o&fZ9;kDHM> z(}P+U3R?RY*t*;~MsUxQG9zcW&dg-&ciMfModAJFU0fR>eKeD``V`f={Mhzj+Qwu~ zr9ao%MHPn?v+bD2F&TW{TE|70o+hLM$s3)I+FpW}5A4N~4&}jyC+#c^hcEvBk*6 zPuk{W?Xn{lt2J+BvLEv}Ca*i5N}il`{7~1f-zLKMxH%af$GHmFx^cw_?s-y}oZ&h% zlZEu@3FCBl`Dg}xq_F#Ix-c|M_`n@`31&Zz!H{x+TR>zdi zWzt@l_;x(dby;eJ?r}V(%A^@3imlza_8=R7rtnyMO+BtN^Z2w!6RkcsBVVrGg=#a} zs3zh&{9@$dCv7uw=@@m&R%YaA%;T7h#mJ0HY@OW^0Fzx^X#|ti8|nM=qH)Ct?s-y} zoZ&hIbFXh4tdx3G^=! zTeG`_*pNF_>fcY7fE(8yY~#-qCTFZX9|-uTxVvokXBcS>eks>qu+rWA$=^9S&yYA;>Q5m zE?LiacxgRHu{+{_EIZd@^bd!7^?XSmMJRd&hvE-uh^W7~u2c^;F~sT;}VZY8pgMm(0sJ?LJh)>Z5jN7im!dytJk zBOd3t&d%e99RuYg2_L<>dQzm=N6*JFmFUZ|9%_RISO7 z-Izx)nR+#O{F)EoFkpE?WLZftunZDTU$sL)O0eC(9TZp`DD%sMtIM=etkSGL2=uLwl= z9?4{_xU-5|`xn@{ugCV^^Q162!*ymRuSoMI=VI$8i#ODkj*vc@$?Um=J1&L>Z8x?( zn6@yP97NG|J}3Jzk6?1?q{m`9B}6Mv+35m)S8#;yaZIMi8Kk1T$&YIfw()1gbHe$+{Ot z{nkX!|Z5!cxER)&e;qMs0@7%cd zU>kp?Fge3@W+n@1og}gDk%^h?s!9>kM>844W(6vmlik>2!6eef5&dy}I(h8HwsWPOUW=2RK&1C7e->C!IZfr4f@slqlUel^LQbDS+l_4xrY%e+G9aGub+$4mM`IqxWUbPkp2L^*@Ap7X-NNWL>jWNcH?|nL_{sSW zFQPp@?|0{v4zFm$V|jdvF8fO|be&}*bdTgQl`d4#RXX6Y8&{0qo+o8S&TyTX$LhG& z`2xgVtmkD&J4;7MAJ1bD;`U3=V>h-vn6}KwWSh*$d50HFc4HpJWV};ntCZc0R10H# z*)dw%Hp2HvCacQi8B5;k#-Q4T>PYk$;4pHB6)`wGaymKcFZG~OeGj(wQ9$mBC2$;%Pp#0`z|A_ zT9xqQiV@uNL`=?cos-F@NU!I#v2vGbw##B7q>p7XYbbDsUW#QAr1}@mTaqYo2{!C$VhU@H1rfx`A?)jS; zeJmLveKeDGyS=YagZ9{Z7vrEpPp09UNnc*k< zYWZ64@*^I{<1M;$re`y&IF?+H&LCgKYen!s86r`FYH3y6OtaPphZP zy|#3O^wB(KHw+o4UxD&ti;;_;w8qx31l((jlo^@a&y9H;lgZIbe-|9iPiOP-MTGBh zOr}3TH3wIPAwO|ejuG7Rq%c{X{T|nunGDjzHD$*eo)>HO_WlHQw?{}H&1BUSS%<2* z1KQ3D_F#H`My8jHpX|H4)*0E4cr1^5&~+Lap?e&UQ5VisiMqS|KF2-C#-9<7b6jWU zv0_!-!buL5S3~@oeT4MUJl5>SIcc89M^(F8cueFHo!zza*pGM|k9*N|IZK4@kvt~i zXFhRCj6%C{#hl#pr0_Vyb$%YxZ;icJNzOV#{QMIkeKe1Wzv8n({Mhzj+7ek)5#eXQ zSnO4+${JbwF^^+19Y37SOT0y-#kjM0%V}hU?~zRA6a;!ge2(n3dk?npX9|-uTxVvo zy7*3ayXBF!vvh>?u}r3-36r^3x8@EytU$Q?7IYw~LlfvW-*Lj&Nr17`4+LfK}`+NlNmA9uI-q|F`1r_vi_tF&5X(PqSY!H;d>mDrNi-@?8mhS z+xRnLa*pfFOvcaD-SzRsH|g#oy7oOwtk}CeCPMmHCbPl>4$++K#}*?OKWSq!zYp6v z-!F4=H0E(k7QX7kRa~8APu{i>zQ-|{{FssYn{x3x7l*|N?s-y}oZ&h@leLm8CTBeZ z?E7ig?4y}XPD-Basvn^3#+DQs=Aa@1hw;p~BI559jgUT;$*iP^J1&Zb$&OPoa`BTkCacEj zS2@d^9F2JdlTnb;ajiaF#ns@;xN1elhL@>$l`Mp+T>H3U1ou2COwMqflgXz@Q`=Op zHQl)xlU-G59FrNdKbIaabYt6tX&aN-7XeqCew;Gdjd?7SOT|ljCvv5}RK<%u3sJ5D zwr*T|u#G=cn4IA{JCliQn3G%bWH%p{5 z-+vP!eROP14nR%BWlZFwt`@fk)AKxLS27IsE7&WK{fNi$m@#Tyf+(BJ39a^L2Vy}N z*+%Fd$7ALZ`Js!cqH*m(HvWuwoZ~t(k3pJs@OA%r7J2!#z6j}Kc?_QL*zZu~>DX$Q zPGtuFI;$&@bu{L2OeU_^y%SnXKF4IIkrBQ}GFg3^C}?d>tmwuSvvSXqG9zcW&dg+x zrUz+dvN9>>pIFpIwGq-sGg&tFebv#}_F&qUBQuV3XLl*PW9EJsEsSHbx_*>7X)QUc zfuNN&lOlYNV=^paPVu|gq=)sm_Fx--rZ73fb!H}mw0i4_1BtuxEXqYc5z3+=$2WxKu!jLT9nHt0_h39?4_Xiovk9CSP^q zit*d?L_8+8j&Yrz$C{B@pI{{*L)uw7Li%VPs~0v}Nq%9yU=OBkGcq|jbBK#k*4WyQ zc^s2Dn~k_&jkw}089jHp6ybX;lR?U#!WWHe54Q1V%8Z=hIx~|&8uk{X(WHpUSoC3x zIC3u|{Xf)1eBVMewivniNgI=?bVVyBE0g`0$1+(bnCqMnI-4_mU9>ZX$=a{wW(u%% z5+4CG`2mMwlSHrAJ2DpU3N~!JDHQU>zph( zJF6ZWy1G(??~!w|tm!-SqH*oPHvUXua)#@?Ocv638*{QaoJU_SmW+@-n#tPbORQMu zQlRa|79$rwX=Ac7;JmwwJXxK@563)ePF5c?mZ4KX(H4BhTHc12sdtf^s-ECtK1S=t z6(hLkNnvt^>+pHbPwUc_DT&Q-p{)s)6C88oSG`d-3lY`6>!#>t}Vhl-PDPsh#4_!W6xoH@C1?ZGzwOkr|{>+DP}b21#x&I*AoE{_?zvG~Hu0Q{H`jA@gzu3|E_1T;FKX{@ zTrq-so)ji$xX#Js6>07(BKlGu6|X^IQ5XG0NFN2 z-lfx`$ztkRBN|(bT>PYk$Ly3k5?4{2_X&M~wxYLXO~ZxgF2t z!qK>5{PsL4JkD^PoyX{5$&tY_i@ev}DMvxZ`_N7wX?yGURB?W0_p;j!_jet7W22_1lbLvO53W z?}y3m>oJ0Ro)ji$xX#Yx(lc;wCnFYhwTKAm<7Z_02K?E)(b)E2+QMY^(4s4OcNa`{ zV;;w3Ds8L}mmO~O#>G`@uiz2BN6yLIGeCEekGA}{_Fx--W{s_5TxVwTigei{lOydc z9U*-*lj*dMD;GQRi$r-NmGg(#Zbx!uHD%kUK)h;3j^$)vjI2zj?Oxu_&j^<}~MPnYvWMWpT zzH3iNwvtR7UhC2bCYQRP`~6_+zP<})n{c&Un)WCNne0(kbBc zPW-@CmLhzQjjrizh-x5yTzjyMKU0{T;W{&unOF1~Nw_Q!%!)92UJ~#Y?9+a5|)8vLD+XOwX?-)0eJVs~gL@n(RkBmd9F6F8$Wo&KPbV zuPr-*$EtVv^PKQHH?BR%#-AxX&TyTd$2x^i=kI0p5W2D3kv=v{hNp^CT?`G{Zfr4f z@sk!FbIaJd?yhLWqj}tpuB$4&ejZ~dR#2k;TW0Ip>tg)&JSjZRaGjsWs#~-6#J;yU zNA^|P2jnQZ~u07bspD9evaGjmWr%2}~h4@qA$1oYDl1KTwb3xn9)G>1Lla?7-4E4EN ziL9d$UyjG;&~?>^2;JjqUD%0QjX%u^WZk%8{PsL4JkD^vE*@uneB=*xj1wV!?2Jt0 zOpkM{+HP!nFm0QWwTm|I?uy1dj>*h(<>pP0WsgxjBm2r-gzu3|)+v1K`>g$odB#<2 z_Fx--rZ73fb!H~R4eG#aA72(*``t$o(#JCy9Q@gepzZ2#F>>*fHYRJgao*hpliird zFrPer)iWl$s#1jSu}r4^;rC#Hts7U2;GQRi$r-LQGgrs3g~Vz6aAbCbK4c?(8mdQa9#NOvXFQoJ`*}s}ecBuC5f}dmNMLOJ`1r z>RtZpd$5f^Q<$9LIxmx1n_x~>&j8UEt2=SefUoXENFU8)#wNe48H)nBwV)We_(@Ba ztbMe;w_?qb{fNi$xEEblRf^C(j>lBHK$cY~kE|P4jNhIog~u7L*TQ2~o>blRSqWTm z6{QI2V|h%jr})8TOwri(VA?h#KfRxksngWHcUrf0V;;d|@?)L%Q~Ir$i?L!Bak;uu zgzs@ork{%VCOVak9cQ(b_h1`;rZ73fbxtM=X>t=zK%+~Om1K1e_}mY+xSCRg^wCTv z=R~(%HXMyDMlODGenzJLtF=$3DrH92>UKTiaXbcHMp3%0iBV%7^Hw!qB6N@AG1#eE z<7Qs66F06HzdcXH;~dwSd91yRAg#_WY?>kMI20j$JdcSKeN_vz-PrbE+BPFIdqmOT zIwKP`)?*&WWbi%RH<8z^=?%XOleH$nY*_z(uyy0wgKhkoG9zcW&dlU>uN!XyhqDz5 zPJXH_J&MWdl%9SZ8EE;&D7C^Q7CN%*Z;qE6SYwN^XSi zkux$gA&TRy39_yR7vs0*Ntux|TxaGnvkE7-vi<~vVM#V4yNobG`sf+?`Qnj`){OzQ z-PiYE+QMV)hVb>ZmB)U><9Lj{sCpD0Gu{kcHy=jm9?4_HE#&g`ECI4^Tzim>KT~*| z;W{&qL0TOH?D{xY>*C&#+R_oyNAtMcD(}Vs+V1Nya`BTE9&-m|v|DH8u^;g`9+P*< zLz!n#>8#Sl3HI&i9?4@)rzg5`zaM1X*JJ$lJSjZRaGjaQLYmWHgmiuy41Um#^zl4a zJ;cS&pzX%C2h)}e8Q?K54dYWd!MSOm@-F7$(#2NCZYsUwa#9yRpT{ z#ZOwYWaV|95hY8GMm&PYE4t(z^!Ekzr$2^Y7>Il*KiuC&A^)7!dXoT;POx6mNuQ{-% z!dW>+aL<#%TXFqnXT_Xtd)9w8z%FbYdKlYsO?h=5b6` zPl$3StwCicX;O!%-zLKMNG9WboG#$zUa)oJ+QZlQGlj_+t}`=PNUv*9WhKgKAQp8s zr3mSxnM^kbbFv#lG`1MI_(|KGtP^Vd>c~1L`!SDWGTCy;lZmdS*HQN5Phg4gJ&wub z?L-gUmRu_d*p91rWw_4FWa3pURaTSFMPF_PijY2*$*iQPTgg>rcn3GOn6L4ZHYO7Z zMmIASCP!l)#boB0vYK2pTJ`Hlshw>je2--^ngha~$!=URf_t8nIXT01UMA~wN}UtJ z8&C_;iJB48&e9Rm$1<6^HFL6$v|zFu+a63?D%YG7hUYmumCAKA;&D7CV(mfK#kLW; zNAg(pE`JX<$hvXuK{ozO;c^!E{z>Ex!&&6J@rW7H4G>>%~b#&g(_Pk1+Y8fLJ zKWX7H(O%Tuwer}Hcm$7$v~=D&xUMTu+5R@KN)fup@tFEP){J^W{J3KL_B<&(&TyTR z$EQfEXMk!5J{+%5_#7re`dA*LHq3!uomqu+`PCjw+ahZ!GjPSt$R)Cl#ypP6>rO_U z_M!6eef5&dg*Xz4mDmhhN|y8NRNn6ybX$li7ursk9qc zjNqOpg~=JNGc#F8uWOC@=>pvI-LBckGZ}=UOv;aK52kHQRBeE%WC4=#~IoVZ|BBYOIvhGvD zBWpF0FVtU;k&B-Fxn=4e#Ym^JJmLf@I7u$CUzmh@qJui z>&6u$xaUb>a)#^dOfI`*sDWaeFXrVKQf!;d?&gJY}*Q z^H?UI)-$!j81-EHZnX&CW0|ZKD2E|Dch!hJ*v6j`lXF~WX0lESQCEm6*V%qXytiGm zk7Y9TO<3VO1f=Tq*ka`3CoPq0ltcX%_3tc|>uAK|czlX3xY8dIXUQ*YUFr4nn7TFf z8n22VJFec9;W|5yrA6h$pR982JF6n3kLEF5)$rIwv!Lx}>X@zZla?8olaUk+y1Amv z$n1i0V;;+7o%uuEpN{JsUsqR(@I7uuMxnK$=W;i&b>oT=-1DTw))}tzGnwu#txn`; zcfGJIijY2<$vSb7oW7m~LEABW52h_lCI-Xz{BK>E?8iKo$y!YozKlEGm(1EgZQBUn zBbm%z)VRCLk82OM@n_c9I>vQ&ChOc(I=#^BtZ%^YK#Gt)mdQk3bSp*OU4Cpaa`BUv z*qY4qTz6MA;?X>&=cf%_S5=D8J&wn#o!rceM!Rvv`0aU8X5$*($INZY`P>*l+kJfxrY$ovkqdK(KW}QCk^PuQGnpC)5jM!iI?Y}!6eef5&d+4d#V!3m@meDmyr7GVFmH5@6?ROwg=NTCes;8bnSBUQzpAHk7F`k2|o+ISag&g^wHR29gIAI;>e?s;pkoD$cO_tj$sS=@%B02ELC>**=yC|5NsY^ z1d(T&vv1esw->8eEY_|QDDIQFz4UG!E1QW&=BxE-@5Btc*f!B!spIOx=knIcuFP*{ zYtTIo1h zyjRB+Zz*5huhK57l<2P0F|!C+vaX)2vulQIex`KXaXnqfB3&nq`A#w`qsu5I(yMi> z`=b6!BFVN)E{}{v*6cM|xqa19Mb`XR>|LI1-lt^UbW;~TR_K0@%-eidQsTQ-$;^|_ zwvkD8c4dMyBc&Z&KNV6VNZ%qW|t8AE2w`L~NtCfsZ>DE!QZHDQXlGSah@7;x` zaW?N&GLZ~>Wca>PvWs>S-<3*c9#c0b*gCsr*yd+S$sO0zm0Z!6@|vAb_VD5Xm zA|L{DkruRFCN7i9BV$TdSFXNy7r7;8^DZSgWK}s;BHN{mW|!?^Cw-skT{`CU z7VWq=3);@MOfHX%=$QUO#QARbcInt#{QWxqN>_bgDqr3CV;Acrx+^1VYUQb~aXA>s zI=eEznUT_Q$Mt+2t4|1fDDLcZq}@y>(yJru-#yl4GDj}Tg0{15hUr*j&G!*f@2)G` zwy3-&^_j$iS;_u{ zAdz0JWOY^Y-~58M%fw}Jd1Oq<>i_67t(TI$&HI!LU-leiyWrd1fMO0^w3GO*RI=(Y z{4LdFS0*?!QcCW)o~~q8V!COP?V@hEQ?kn_CDLn^Om!w_KK`r7&~~=XFdd1l)hE+e zc2#VhEZ(bQR=Db3u068%yv(4Bb`srnI_A5J>LKSMf@IeW+5AlDxZ`@hj&(kPg8N*T zKW#~*SL>LXE_U=TzXWaf^Gq&}yw))aWsmGDfG!<-i+Af7x~ze$(p}D)(~En=o#?LA zvHY>G5QVI>EAyKfk&b(==j&LJ7w1ljzkIyNjJkYMBE4G2`WiJ=hWEEE**3#;B(mnz z2_NEDm5QwCD5q+)uQu;fviuxMR-FL8xQn-3Rw?masbuofWE_%5c6QCM&CisQJFX`y z*^|!E>(@6@z2Fn+wMxb&yr93$kCL5jnOq(jQ8Ig9-aUU#S4vJc?^d!_>Z>9o#nwIx zpZKmsm$D$>O~_uG>$#*Vbh~eCF=^b&L;W#qnS9BHnjz;|$sSOzF7edcKa;LxPyA z-yzd)=lUEx|KNDmHEw#NXI?b^K~rJ=vY1Y{0hj7x@=M+y;{e*fq)hFwIta# z!*pba%xXe(;48aohfG|}KKj|_eM%;S#94RUN5-C<0r5N3#CN5V>CljGsCv6**yd-- zBX?X+R`Nx<)@<~g&Kdo!y+nGYlCg-K9A_zRH9;#b%FX2R$cRVAp1!gxTfAGx>c}RK z-0S!qnJ(r@_07Ic4zkX!%x`9-JaWhNd>xB4r%v6sCYVu|P1>bnssd6iRkCe{>4-<> zog>cgD!X_myv@6n%+9G!kyTHhVr!RuNPJg$WajCozpT+Iwsv;Su+7huk~^;FD_Nvr z{A!QvW;&5x?UC7$=6j4pjrW*4lglF`N+z}@KJdE`#n!x`-sW9O=Ivy)(Mqk#uC4=& z-}5KFtCURLdUYjrQ5ENkZso}YXGWytp6j_vF4C8hsVdC7C_MIEEs69>B}1F&T6Icy z8=&oMn_)VpWW4gL%C2PdUM1@tEuY*g`Ca)gPM%n$o$rOMvulQJex{V%aXnqh`evU< ztN$MV?A79SsQZ-6*{%QfBD9@tnOq(jQ?k0a!v8)~SH4RXV9z%1Q?h!%;FHk`YjoEW z*Y|Bmd{_EpJP2&vY{J&%I5WYSky3KU^<*WB^yht4ch}ALa!#aI`{cT}nj$dw^BJaN zN>;a9pJlt0>}}qsWTKegJUrdCPwrzbmsv`D*D0C&f8ML0WM|h5+x$!^x#N1Wk}F;v zCH=097yBsoq$!?-wzDmh%Ohh-R*utu`=XSbY~HJ6Zp2(ZxvSFj(d`Z;>pq$P9v^I7 z)SU^=jFgf)uBR)xs=GL)AV<^flU-IRkzVVQ$uL2PEcHE}g|@S8hUu7+mE-jNJ1-@B zn|CN#(U$&Kr^)aoca-`1dmxGLI-ks`JNsnn(;ZuH*9_bIOewkJdZv;;lh!^;m3-Zr zO&^8(OefN7mHhj^oF=pLyxYJDu(K_b%OfL7#!C)dKXN zyU%UnyH3e?WX|-c*u4LK*gCs1!I=>$x#xPil66N0-kd^pxlQU(?=zi9uT?UUDpf4L zzZA5cZ8J>Alq_%CS9m3x_bC}q$IgV^6KiyT%7~uE`L0tkz4x%x-+qCuvulQJex{V% zaXned7isn2kmE1M|_x`p)+u4@M<&iNZE62&M>TXT>ujIx6GEtaVCuS*1jJ zwNKW0vaiL!ZfDyJQ~s<}PhGsJWk?lXb$fzr7#YQ9i}&gHPPfZk`+F&g?m8VaPpZOA zYxJ&s7rBiK6)4Fs_bz!%Qa=VyBdbN%ff2HpP(W&L`O}&L1YaD|Jj} zh6u>T&&jULZ)T))tQEy`Jz2*h{rg}1FX_&Y9rH%sy#}DBE4G4)w#>LZsxpQahiR z_^wqlmii6{uyuB2RnCl*k~^*^D_Nvf{i8F+?j-qlk2$@2phWt6l6lN( z(-9B$K3PhBwr!V^c{{J@8gESPOy`rot~h;1r*%qZepvB*H2`d#T{CR+Go|E?>$yrU z(u%IH^NGA>yNuEvCF66|8OE*8&~~W`Z*#QgYArbS3M%ecDI$eQ}8v?=zi9ul319SST6I-fe)k zvu%dyn3DD7qQ1H-*}PZDRr8}AvTFF8GMGcBq{Mffl2NMaG~K$G?3!VlpD87GTu)ar z8s-G57-Iwqo*4U&&-R zh^_ryC)Q|ZS0*?!QXaYEdZvkX4IOWDUaN7JzdB3 z6(};AstQRurWW;m9$9ltwbI=NXgk|7xjZuBk?|dPWdEi0%OiW6_bFK(870>qxjSL> z(at_4Q)lSex+p9YoEa%4cU(_avPkO-t7N-a8@n~zt(l4RYL85nk9PE)wzF-9>4-5=vI7*2ogzn?YQ*)>BpKT|sHxSpNb!$fzTj_cbT z&%Fw(%Ac>x-1VI`IWtl^?zo<>I~{Wb7;lolM?CmIwl`NW$w6bGfc-KYwpT$ zs_k}f6OB+2-9!R_&f*tz1vf z$)j7B65o|d<~#PO15C0j6Py_-C3jrUSMpV*sSe0q$;_zBC?(RXmCUVUJd9IpvTcUx z$R1f$g}$;&u{Cq(Eq;%Vb-IXO&U9T)DbZc2W6o`LhI04Fkac#=kj>AOjytYDl8))_ zpK@KysLLlM(yMjM-E*Q@w_{4SWpa6B%p;YM7uzPj>y?aO z_DXhkWr8y!rR0w5kD_F%ak;V6DcMDmiS+j<*?0BfEp)ccFdb8}zMks6+q06NZQiG3 z<@x{S|DQk6m8#?GR>{P7m6G`~5Pd7sP6f8kt{JxZnNo7c^<*VOnzylP2B@s)NWU}R zr5jLwCkJh3TPBxB#+0mm9X8#)$d&K%Ht$n%opx70Cv^&8w(eH*Q6GktsEPDSpG;;`6^}#>{w;L2%`hEPGWW((byq1l z*}PB5=!0DURTI*!)V$62xlMf6`D9Mq)nCBv-hTV=*UqjPw)vS-a>w;#C37N5KA}i+ zrjnIR4gNUkwMyock9!mT3<}!LwoERMjO4q>Cs0@DJaU~SCyV##Sofws*LL-E-5UA* zI_4%LD~_+Tg{-qH^P3qd9d}$$*KysDc~zy!jJg#wkzTE1^(*y#>XU6VOvgO3)b4#n zd1USbu={(qd6$y0j&=ICpY~3@l3iXY@m=SUx&MSm_SGM-b#~3L&CisQJFe#{xk#%j zgiIHEgw7*750pr+RVk#J?$JH8oozEr zU+b8YPdte4Lvuye-s0Ul9;f@BTo*ZO&KA*-C+qB*A)B9(j(e`B>$oCoRdsde6Py&> zXL^^8slQ0~&(X27EtAV5BRZyXCY_gDI`$Ut)$wP#RI2BS5Pz1I=&tj}cw^NFcz^8e z%KT7?v(Dcm;AV)M=|p<9KbF4yw}6suGfYQz$lRUHfA+OQ_BQWR zGWj^jRwk40U*yP|H(`98Ua4ed5`4B2w$83R|1%?{+i5D3%OfL7rjDBE z+V^)VB`2HrDp}{qin+S(*36+>B@^G3N>&|)KNU%KWr8y!QgYArbR`#Q^)c_)Y?o0= zq*p6hXZ3vB!>`-Uwi%{lN=Bv13E!=`lb_|MfbDQ|CR5G_d znN3&uk?fjbo1ZBqcU;d@@TWNW|)rTt(9r*E4z}#yLCKH*X>bv=(xV!;bJPtI=g1b=4VRB9oO@9 ztZY|Rf^<4|8Kp#ewLeC|L|=|7w4H64Tpk(GF})pA2iMCVdy9ALm`ZEa(0BcCnZftu zy2v(&tRtB0%KT1iHE|{@(Z9exkc7u4bM%abTC?c1DnOcFmB@&q&8T*OPTD z(pLv__L-eOc9Bmaz0w~`6==tM4QM;tGPyi5lIf!6l0SjG$o<_{rYqaLSIK08E7K*u zSa!FXIdp4e;=5AGwRZj*yE4IiiI>62;&au0JzyEQYBUae%_KQcGY^CsJ7 zn2so!+YqdR-kM9v-sXKuu85V`8gI-xm{)3FKalvYRI(~w{q1h*(VW6(*yd-X-eJE--y9q z-#vAryHdyMUg^Iw09j{O<~K7k!u7|{F=vhJkvor!-y0|WJv#O^3($79%`hGD$i&uo zWWO`NJhGJhZ1X-Pvm2>XWO?Lnm&`1V^IfH6s^pa`rhCNw_hXf_Yldxprj*=qJz2@0 z`wF0B=CX^uoR>;#_DUr~Tb>f;p0=|slglF`N+t$FC4FUAvU#79;Y%)wU9vRXuhcHD zl=!Yxa_PrqI?%DRD-)a*1YsoS|h)_Lj~viX_v$Yc=`*VA>( z{QdRg|8xGN2s`gX-<9pcBcovE*sadccD7}5d1S;R6I-)#`)>tSg=VsOmy&rqtFnu{ z9JTaay^pV~`hF$T!%4BB%W84T=YF0E&Wx0jJFe#{xkxMa!WXlj%O2VHa7d(Adt}|3 z@ZF@L?bh=drXwDi+a*NSE}p+UvbT7*jxW08=sLPCtCZ-j^vJq%#GJZa6MeMqKc69+ zpD7)8T+i3Bx-7z&s`-wz+n*-Vt97h<`u+?I9Xs1HxjZtWW8I+j-{!t_>@D7{QKGw2$I4p!d?jR^U76p^Na?ua`lIMrwIIDecK#=kUaez@;sf1&i7{u}4AZg5 zS~rb-&#o)7_BQWTvi8V2M<#0NlC_i`>Jdz*JFS=H8Pxc_Plf2VQ2 zE0wG>0RNQ%*gCs1!I_a#a>w;#C9C@$*)D2ciLK?CU3P&Pbs42yO4dzLUmuWcn_)Vp zWU6CQ->yr^-sXKu)_r7d#T40&uiq;qzAKfiZxj2~nA0csKF+Ys&yWf(A-=lja8OUK^geLDWNbX`^{(Ou<_(J_%8=VUJ4gRHY_hHQRDI_|liuVYo? z>Ks`+W#?y@QJ0NKq*v=$U9vdQ@j7<4Wpa6BM92EF2=CzCmP^Op;=MYqJ26DmeXX_c zP@3qj)G@myZiTv?FmIh(xii0+kiK6v!-^)%6O%Ekmv7%s_$JQy;{fAfs^ZU zeizz1b6wP4VvWz0Ylp0e(b>FL$?T1<%C0`Lc1lWoS1MUwW6Vl+cFpKDKT}HXxSpwG z>KWK|^1oCJNW*<^HhK)+Jy0UOTFE+<%}RE*Wpa6BB-cd@MlDiT*`=6~-}7wq4kcfF z$*fndtLN)0#}nU`N=CzJUF7uJMLwC}%t$G@<9fQ1i!^n(ynT6(%-22Mr)1q7^xA>8 zvu%dyn3BoRP#^3f`pYMKn|CW&J?a%*cRtyFwPl}@snxu{U$EVk?c(jqTu)ZA@*z5Z z;tZKRsPyb-)J3+5^lG21?#HRNp6@^0ZT>DL({qTp*`JJjRHC5!Ks&FpW* zP!DmR!^C%`PbOony72q&N6F5v8MgTu`Q)DK`AWX_QLjil50pr+Rx)=Z$cm(O+u4@M z<&hDeT$TP^brr(yNuM3c6G`;BA{>I+D5O)Ff4!U72fd@je|t)8%j0?VVg+ zDbZc2W7x4%ahVQu?ChE$o1dv&a>w<29bezjvzdrtQwqArZXI8A`}ec=;XZ&&6wGg3P4xSp?LD!X(SS=IH) zA3uMyd*=xhkperu)Hl`JHp6s8$Mgsx&+782myW%~yLJ5e{!@2rf_|{~6>^7;E8pN( zXm8gH+5AlDxZ`@hjzyZRX8&c?=W~?3I%pqxZ%0?I3qPY%s;@Th zR`T_&^F9OevyF9jD4888*$-C@09&W~4CDUn_sS*s4#ug}nS zw#_gd$#u~WmuQfD*4>L;O7=GIRkC`(P%prFM7MMD=Rb+>%Gg>y*=LwwyDQh#b3I+j zA}z+;CChu{pY58NNUv5h6)99WJMBQ*t>@pTWPMYvukOMpJDc|@S(PEzsRZ-X@pW0H z#CM&N=}g1A=oO32&aN4@`I+*`9oLhUEYer^W1UiXPs5CUjS_c8*C?1Qtgrn@wqxB4 zQCELHL2cqal1!x6dSve7;oV?D_LTYI}^*yd+S$-GI4>-kD1-^JeqCF@?YTLbw!x|~uXy;jN8GBC#}Z|!Z% z*+eKuMsHr z>h@4R8?i^nobZtYrW?rpZG*P^`3%!u$JI{-58`bp9Vd(5p=0^uzOw+i`1{Nzy6gNg z^TZ1M{7nw++aT-gnjxE?sqew-+mN2?kD_BD>%Ox!y_LpEul2|DVBy3k^^x$lWpa7s zRb(wCb5fToyDG9yHt$n1J5TumUeGZ2ieP^z#zTDtEZ?bKM=_@63FOZqw&!$f0zP6Q;x!+36_Ra57YKM{)(fVvxvTKHIex_pUj_c`4CPz(o0ix>e&MGtNGD?Z`YM-pQ$DjBl z+cLR4G8S9oL;RcnIkqMOf3|p^j)@xZG2BSj2{K=t@MjXt;Jb2NI&UY&zORbOuFP*{ zq&%{|V(+=0tYeW@jV31(y2t1}GBf(lT$k>;`MVLxwi%|cJhEbIR`Arf>+;Cn=DkYR zI!(0zCr>#C!W_D+Qd+0i?UKo3vM!Rn_DXhk&9KeSl#)BHrz^QCLdbUM+p2y=g0zby z6X~@cnOFf1zKc_`EtAV5uasP|wNABNG)a)T8GT>A3(Cwf_iO#S?QEN2Iuct;q0dpX zGOZO`CyV#$_%mG;-09e5mA+rcSOwXvV`tY4+5Aj-A2&1zK*p=X07gOts(99Fp2bP9dlDL?MjnvGfZFWm^X_z?>QU&)gQATbr$c| zF?6*-JKa;LJ#Q z7_!c;8M67A^2i<6({-%V3GI-HE%FYT|7M)@S{>7ELz%9m zV`p0?mq$i)tWzacz59IB4mnx8Psh|f)+w@9>3sJIy*M3xzmAzFRcN{#N3tvPn;9t` zcU(`_@n_OxK~!0vS8O-aiS%k6SB0jFvY_p3n_)Tw0@D7{*6K{v6inkf~>PE^P3qd z9d}&M*Risix{cgb3lQ7hHI!ED)gD6l068-cHScCq%jz29ynU!9!T zZRVYmKi5lqS9)aC2l%_)DEVtdqqBh-w)vS-a>w<2C10eK)l9LqKW#~*S1Vb)kBJ%X zs|mDM<+{d{%-It0fwSg{t-Z~Am5hy7t+gtyoz={t%PJ+l>y%8#JM}Vjd5&aPR^`k{ zDY@f%x{}cVu{Dgzcyw#Fo9RS)t&-V~vZwc7BY?KEZHDPsY|XtfU$I)Tb+UMuj#=}l z+EcZUZZY;ccDt5DccqTC-uWI*kac#=kj>AOj@1Rwb3IqbMOyuEU!OjaUA%k4M0%}` zp-ePOyn43*+RnC2E|0v{G5&*-FyBk6bet^St>dfPG1;ViitKaniS9Zbvob@&N6^ZI z-HB&@Gb7S*&-HX2v-71slid?)$o|;hO-ZCz>zFPz_&}#uXuCYz4AT)Elb=a_oh}`F zi}&gnqE**LMz*8ta!QHrN*(LW$5-(~*4Z^fHa}B3?zo<=V-x^svRq`6I?^tmlt{1E zvCak3ja6<&ty#54cF6b+_H=%~UOQyI`=qLouW#Z$B@;D3w(96vqdLAWrHyg+Rb3SlaEVP|%Gfc;nOkN>X zc9oKo&HI$hYC{ZDKDq1J#T>d_OX9mu$>jE7o0aVBnqixtDJ6GYPgb)0ifVDyJ+nK1 z;@g*Z6(!PZl}r~H-E>PzcD7}5d1NHE)|W;6uJVely~TTVe7&Lc`RVDpoKm8@PREc{ z_9N|@oL!mU%t*~r$Mt+2tMUiNWF0z>>}EQVUaMog8+&Bm85M8hY@1;^=8@^M_^Pri z*}Ox^%Bd4^(ZA>N$aMNir;GmQiSIfkb9M{cR3qT+nqixtDJ6GY&s6ef(%1P!b$0US zjC6&3mq-5T!5I$e&V;uulglGxN+yehO599cv9-5(w~{~St-F=lXCQVcSv7D({`dFm zZy!4Unq~ODiV${~nd|vVRz(Q)dw8~P&2~AZM0&MPrdkD`>}-Ix`+3%D9vM@z>ZtwR z{8F;Fd9RYm$z49V%V(0EyDKU2UFnnSMzUiFTW41$I5Sc{x#N1el2vW3xSA|>r(~B? zN~BjSSve8kx{9_ zcu}GF4xh}9iOe-`;{Er-*4Z_~Ha{bu%w1hY*Um4TuVlW*NDPKI?sA)Sg1^u79wk%B zr+YGPj-l;r%jELNNamVO2Cu8Tyv2KU%ufAlY@PJt?{g)(D?PGK7tzxF?V`h>(|6`K zGjhe&nd`|q)>)(Ox=F#^E{Z$0_nA(l*Lq~WagMeATR_luw#_gd(J`LwRdrXgc%P1c zEnSyYN_5xhn0ev^iaz!Cw+ph)t{JlVnbL8`^?V)6AL}awT}=q*JolMSq*v>hZ(&eR z0NbB@U9oIKwTm%hQXV(nb{7mV%<9fc1$!gZuV!C=6ML!KPv6;^JHhW#GWlQfiT-{nw4H4;Oh-Jjx?1?&o#l~} z#d~#31${-7Z zoA$`wwoERMyw-7jhssxWNypjZeL7bCp5m>l^y%ojoYME}m>PcF-*G!(JfyQL^P3rw zj(e^r>-Zwg--JGzT@4>~lJC+nHB?<~y|-OBTlU}W4v`nVh?S-N3Y@1;^rew~RI5BbS$K{i~&HI$hTlx706xEJh zbnUWAJCw|dc>gB6?nl7Z*)_v9KT}HXxSp(JkygJS?T>q(>{OIUuU0Z=#i^PK+RnC2 zE{}{UnP{F&YtCEC*EpN^Dp`4J&a_{B705>ziSIg}%sFzdsNzJz&2lC#LM7Ovy# z_Nm{mWHMe@>fotT zC8LSHx(lD|ZQiTox;G&Ws~e2-am?YnGG6K(;m?edU76s_NGZAFdb*OybzP^8-Cf4# z>IQkBJxXScQAazcSZF(6J;U_%85Fm$@W@?t7pHmN;@vtPr|a@ciSEkSy6UanIs#c| z*9_VGOzF7edcKaYZv^!{_=te+-Y}6~>yg=ylJDY7`ECQWoo$(19vSn<>KnlNeYd7! z>typjC2Pi1Z><%&%Xj&k3yJSKB@}BD-8xDh+1WP3bWF)a&VBDL#n#T|-AY!)H8KK~+cLR4GNxo!zI1D+d@`$# zvw63YsnjGlTuS!&cIMD!AQIn|N>*Kn?;?=w$^>UdO35A9^OY>pC|M^JscwJ{OXF+y zYM-ogK5qlGoozEr$COMh9PyxAS1u)cn|CXjE`0jN7nSKbbN%z1@?ESf%x1cA?(Ldk zo1ZBqcU;d`vPhHDe5GXf-ljEsy^_gyQ6+g_O;ED4EtAV5BTDA0cSP6zob$7ioy~id z{5hXV&!$evF0+*QuJp-dE2#_d882>=-I-^CGb2)R&-HXAlZR!^hB4nv>qxt-QX;)t z$*7geT(=))%-J@>bWF+W<@&0^%iFwL$>OWt0$oR^pC7Y$S4`r&R>`pSSxe^7*)_v9 zKT}HXxSp?Mb;jkiv9BBODoUi+D!HnF{H+*hJB4R*d1T}aO5c;{zRbuOl+3P(hVwe@|2B#4Ivv+p9dYe_9pRp;`+4R!Gjhe&t|CuottabPodfB%s7%*y9^Sbl z?c&-*dbN(pYu@{AR9&v`sXD`SM91vwQgv6|XQWcdS-elj&vf~l<-GOp-<0hl-se7} z&rhRcmxY@lo1ZBicU;fcF;xS)m#jTh%69oK@q2X486VM?zwHF=RoSi)9amkU^Ax4y zWbtktkJEKK)I@ikKdyO7-v#nN&zhVWDIIrQe=Hq$_f~x^QzE_EAG0n~Z|&k|bi6ay zMOK0L#sAjIb^5aKIg7mSuVz-~5szFq;(L$mE#9qT)$Wo1=ue;MP;{TcM0cf*RZ+#e zcmMsY(ax?JviX_v$Q{@7b*!$qs;lpJ$Zo|z~5HRWPP_!Yj%#k zn9=v;y2$*Z3V+^{Y@1>F+9Pw8&3@g#`L#z*7Vp-v=&IT}*Ml&FE~oVUI_4fQr|sOi zynEzi*9_VGjC9;{JzvK7Tq(4_^=FWbU#k(op15fk5aku`f@?uGhXSF&q{ zZGNVd+;ROel>GX86U?Z~CneHrJu+Dcad3Vk*_O%WkufE6V?Xtpx|Hl~-lt^k<8>!l zT|#m$lR0!*rNnoYlBt^E)-e%|+qosXGQpXVQgX-jWF?EVvet^NbGC~aeOI;%f2@wB zzO!PoZHDPsY>h|u_lOi*XN&jhnDaWS1lS{!0nR%oBDDJ+_4{=USw;_C9~pD zX-!OxH%hg*%&5yWCDN-sGC2`4B93aZEtAV5uRU_zh4`(VkIN%_i+Af-JLIcFNY?Q? za$S7CP2DSfB_?E@U76p^h;-a@{V{Z`6`Rx1F0y`Ct_#}gaOf*Eq3vv&VLIlKrBPqy zUmiKxyjRI}8<{LupS6bmJ-$fm^g53$Epv|SVrbYpyJpztXUZdYTu)ar8m>KZe~$d0 z-k9s6+7S-E5);}k50}a1kr9tfXOMJ%qdao5IP3V2AOHOE-#`A_$G?31myiGW@o&HU z^FMw3`SH(x`1lVWfAyer{lC9|{QOUkfB%<{|M~I1AOGziKmPUcZ~yi2Z~y%9?~i}} z<6r)ipC3>E_2Vah{`kL-k$?Qu;mA(@I diff --git a/frontline/MQL5/DarvasBoxXAUUSD/report.png b/frontline/MQL5/DarvasBoxXAUUSD/report.png deleted file mode 100644 index 83c7b197fc39b99a5e0a3c86de65ce9f4e305302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30205 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 F{SQlZnCAch diff --git a/frontline/MQL5/IMPROVEMENT.md b/frontline/MQL5/IMPROVEMENT.md deleted file mode 100644 index d56b9c1..0000000 --- a/frontline/MQL5/IMPROVEMENT.md +++ /dev/null @@ -1,82 +0,0 @@ -# MQL5 EA Improvements - Magic Number Isolation - -## Problem -When multiple EAs run together on the same symbol, they interfere with each other because magic numbers are not properly checked in all position-related functions. - -## Solution -1. Created `MagicNumberHelpers.mqh` with magic-aware helper functions -2. Updated EAs to use these helper functions -3. Created `_united/main.mq5` - a unified EA that runs multiple strategies together - -## Fixed Functions - -### Helper Functions (MagicNumberHelpers.mqh) -- `PositionSelectByMagic()` - Select position by symbol AND magic number -- `PositionSelectByTicketAndMagic()` - Verify ticket has correct magic number -- `PositionExistsByMagic()` - Check if position exists with magic number -- `GetPositionTicketByMagic()` - Get ticket by symbol and magic number -- `ClosePositionByMagic()` - Close position with magic number verification -- `ModifyPositionByMagic()` - Modify position with magic number verification -- `GetPositionProfitByMagic()` - Get profit with magic number check -- `GetPositionTypeByMagic()` - Get position type with magic number check -- `CountPositionsByMagic()` - Count positions with specific magic number - -## Fixed EAs - -### RSIScalpingXAUUSD -- ✅ Fixed `CheckExistingPosition()` to use `PositionSelectByTicketAndMagic()` -- ✅ Fixed `ClosePosition()` to verify magic number before closing -- ✅ Fixed entry signal check to use `PositionExistsByMagic()` - -### MeanReversionXAUUSD -- ✅ Fixed all `PositionSelect(_Symbol)` calls to use `PositionSelectByMagic()` -- ✅ Fixed `SchließePosition()` to use `ClosePositionByMagic()` -- ✅ Fixed `ÄndereStopLoss()` to use `ModifyPositionByMagic()` -- ✅ Fixed all position existence checks to use `PositionExistsByMagic()` - -## United EA - -The `_united/main.mq5` EA allows running multiple strategies together: -- Each strategy has its own unique magic number -- Strategies operate independently without interference -- Can enable/disable individual strategies via input parameters -- Currently implements: - - RSI Scalping Strategy - - Mean Reversion Strategy - - Framework for additional strategies (DarvasBox, RSICrossOver, RSIMidPoint) - -## Usage - -### For Individual EAs -Simply include the helper file: -```mql5 -#include "../_united/MagicNumberHelpers.mqh" -``` - -Then replace: -- `PositionSelect(_Symbol)` → `PositionSelectByMagic(_Symbol, MagicNumber)` -- `PositionSelectByTicket(ticket)` → `PositionSelectByTicketAndMagic(ticket, MagicNumber)` -- `trade.PositionClose(_Symbol)` → `ClosePositionByMagic(trade, _Symbol, MagicNumber)` -- `trade.PositionModify(_Symbol, ...)` → `ModifyPositionByMagic(trade, _Symbol, MagicNumber, ...)` - -### For United EA -1. Set unique magic numbers for each strategy -2. Enable/disable strategies via input parameters -3. Configure strategy-specific parameters -4. Run on chart - all enabled strategies will operate independently - -## Remaining EAs to Fix - -The following EAs should be updated similarly: -- DarvasBoxXAUUSD -- RSICrossOverReversalXAUUSD -- RSIMidPointHijackXAUUSD -- EMASlopeDistanceCocktailXAUUSD -- All RSIScalping variants (APPL, BTCUSD, MSFT, NVDA, TSLA) - -## Best Practices - -1. **Always use magic-aware functions** when checking/modifying positions -2. **Set unique magic numbers** for each EA instance -3. **Verify magic number** before any position operation -4. **Use United EA** when running multiple strategies on same symbol diff --git a/frontline/MQL5/MeanReversionXAUUSD/report.png b/frontline/MQL5/MeanReversionXAUUSD/report.png deleted file mode 100644 index b8a47981c561ab5c5107f97bd04496e008f9409c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36481 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 diff --git a/frontline/MQL5/RSICrossOverReversalXAUUSD/report.html b/frontline/MQL5/RSICrossOverReversalXAUUSD/report.html deleted file mode 100644 index 18dfcf0136e6ef1cec3f05de1cc3d7dc3f652789..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813398 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 i! hi) return hi; - return x; - } - -public: - CDeepMarkovRegimeModel() - { - m_seed = 0; - m_learning_trans = 0.05; - m_learning_emit = 0.02; - m_learning_param = 0.03; - m_penalty_param = 0.015; - m_emit_sigma = 0.35; - for(int i = 0; i < DMR_NUM_STATES; i++) - { - m_pi[i] = 1.0 / DMR_NUM_STATES; - for(int j = 0; j < DMR_NUM_STATES; j++) - m_T[i][j] = (i == j) ? 0.55 : 0.15; - m_d_overbought[i] = 0.0; - m_d_oversold[i] = 0.0; - m_d_target_buy[i] = 0.0; - m_d_target_sell[i] = 0.0; - m_d_bars_scale[i] = 1.0; - // Spread default emission prototypes across feature cube corners - m_center[i][0] = ((i & 1) != 0) ? 0.75 : 0.35; - m_center[i][1] = ((i & 2) != 0) ? 0.6 : 0.25; - m_center[i][2] = (double)(i % 3) * 0.25 + 0.2; - } - RowNormalizeT(); - } - - void SetLearningRates(const double lr_trans, const double lr_emit, const double lr_win, const double lr_loss) - { - m_learning_trans = lr_trans; - m_learning_emit = lr_emit; - m_learning_param = lr_win; - m_penalty_param = lr_loss; - } - - void SetBaseThresholds(const double ob, const double os, const double tb, const double ts, const int bars_wait) - { - m_base_overbought = ob; - m_base_oversold = os; - m_base_target_buy = tb; - m_base_target_sell = ts; - m_base_bars_wait = bars_wait; - } - - void SetSeed(const int seed) { m_seed = seed; } - - // f0: RSI/100, f1: tanh-like scaled delta RSI, f2: ATR short/long ratio capped - void Update(const double f0, const double f1, const double f2) - { - double emit[DMR_NUM_STATES]; - double max_ll = -1.0e100; - for(int s = 0; s < DMR_NUM_STATES; s++) - { - double d2 = FeatureDist2(f0, f1, f2, s); - emit[s] = MathExp(-0.5 * d2 / (m_emit_sigma * m_emit_sigma + 1.0e-12)); - if(emit[s] > max_ll) max_ll = emit[s]; - } - // numerical safety - for(int s2 = 0; s2 < DMR_NUM_STATES; s2++) - if(emit[s2] != emit[s2] || emit[s2] < 1.0e-12) - emit[s2] = 1.0e-12; - - double pi_new[DMR_NUM_STATES]; - for(int j = 0; j < DMR_NUM_STATES; j++) - { - double sum = 0.0; - for(int i = 0; i < DMR_NUM_STATES; i++) - sum += m_pi[i] * m_T[i][j]; - pi_new[j] = sum * emit[j]; - } - DMR_NormalizePi(pi_new); - - int imax_prev = ArgMaxPi(); - int imax_new = 0; - double best = pi_new[0]; - for(int j = 1; j < DMR_NUM_STATES; j++) - if(pi_new[j] > best) - { - best = pi_new[j]; - imax_new = j; - } - - // Online transition nudge toward observed edge imax_prev -> imax_new - for(int j = 0; j < DMR_NUM_STATES; j++) - m_T[imax_prev][j] *= (1.0 - m_learning_trans); - m_T[imax_prev][imax_new] += m_learning_trans; - RowNormalizeT(); - - // Pull emission center of dominant new state toward observation - for(int d = 0; d < 3; d++) - { - double obs[3] = {f0, f1, f2}; - m_center[imax_new][d] = (1.0 - m_learning_emit) * m_center[imax_new][d] + m_learning_emit * obs[d]; - } - - for(int k = 0; k < DMR_NUM_STATES; k++) - m_pi[k] = pi_new[k]; - NormalizePi(); - } - - int ArgMaxPi() const - { - int idx = 0; - double best = m_pi[0]; - for(int i = 1; i < DMR_NUM_STATES; i++) - if(m_pi[i] > best) - { - best = m_pi[i]; - idx = i; - } - return idx; - } - - double Belief(const int s) const - { - if(s < 0 || s >= DMR_NUM_STATES) return 0.0; - return m_pi[s]; - } - - // Blended effective thresholds (self-optimized offsets) - double EffectiveOverbought() const - { - double v = 0.0; - for(int s = 0; s < DMR_NUM_STATES; s++) - v += m_pi[s] * (m_base_overbought + m_d_overbought[s]); - return Clamp(v, 50.0, 95.0); - } - - double EffectiveOversold() const - { - double v = 0.0; - for(int s = 0; s < DMR_NUM_STATES; s++) - v += m_pi[s] * (m_base_oversold + m_d_oversold[s]); - return Clamp(v, 5.0, 50.0); - } - - double EffectiveTargetBuy() const - { - double v = 0.0; - for(int s = 0; s < DMR_NUM_STATES; s++) - v += m_pi[s] * (m_base_target_buy + m_d_target_buy[s]); - return Clamp(v, 55.0, 99.0); - } - - double EffectiveTargetSell() const - { - double v = 0.0; - for(int s = 0; s < DMR_NUM_STATES; s++) - v += m_pi[s] * (m_base_target_sell + m_d_target_sell[s]); - return Clamp(v, 1.0, 50.0); - } - - int EffectiveBarsToWait() const - { - double acc = 0.0; - for(int s = 0; s < DMR_NUM_STATES; s++) - acc += m_pi[s] * m_d_bars_scale[s]; - acc = Clamp(acc, 0.5, 2.0); - int b = (int)MathRound((double)m_base_bars_wait * acc); - return (int)Clamp((double)b, 1.0, 20.0); - } - - // Reinforce or soften parameters for the regime active at entry - void OnTradeClosed(const int dominant_state_at_entry, const double profit_money) - { - if(dominant_state_at_entry < 0 || dominant_state_at_entry >= DMR_NUM_STATES) - return; - const int s = dominant_state_at_entry; - const double mag = MathMin(1.0, MathAbs(profit_money) / 100.0 + 0.2); - if(profit_money > 0.0) - { - // Slightly widen capture: push targets outward in favorable direction - m_d_target_buy[s] += m_learning_param * mag * 0.5; - m_d_target_sell[s] -= m_learning_param * mag * 0.5; - m_d_overbought[s] += m_learning_param * mag * 0.25; - m_d_oversold[s] -= m_learning_param * mag * 0.25; - m_d_bars_scale[s] += m_learning_param * 0.05 * mag; - } - else if(profit_money < 0.0) - { - // Tighten: mean-revert offsets toward 0 and shorten patience - m_d_target_buy[s] *= (1.0 - m_penalty_param * mag); - m_d_target_sell[s] *= (1.0 - m_penalty_param * mag); - m_d_overbought[s] *= (1.0 - m_penalty_param * mag); - m_d_oversold[s] *= (1.0 - m_penalty_param * mag); - m_d_bars_scale[s] -= m_penalty_param * 0.05 * mag; - } - for(int i = 0; i < DMR_NUM_STATES; i++) - { - m_d_overbought[i] = Clamp(m_d_overbought[i], -15.0, 15.0); - m_d_oversold[i] = Clamp(m_d_oversold[i], -15.0, 15.0); - m_d_target_buy[i] = Clamp(m_d_target_buy[i], -20.0, 20.0); - m_d_target_sell[i] = Clamp(m_d_target_sell[i], -20.0, 20.0); - m_d_bars_scale[i] = Clamp(m_d_bars_scale[i], 0.5, 2.0); - } - } - - string DebugStateLine() const - { - string t = StringFormat("DMR pi=[%.2f,%.2f,%.2f,%.2f] OB=%.1f OS=%.1f TB=%.1f TS=%.1f BW=%d", - m_pi[0], m_pi[1], m_pi[2], m_pi[3], - EffectiveOverbought(), EffectiveOversold(), - EffectiveTargetBuy(), EffectiveTargetSell(), - EffectiveBarsToWait()); - return t; - } - - bool SaveToGlobals(const string prefix) const - { - string p = prefix + IntegerToString(m_seed) + "_"; - GlobalVariableSet(p + "pi0", m_pi[0]); - GlobalVariableSet(p + "pi1", m_pi[1]); - GlobalVariableSet(p + "pi2", m_pi[2]); - GlobalVariableSet(p + "pi3", m_pi[3]); - for(int i = 0; i < DMR_NUM_STATES; i++) - { - GlobalVariableSet(p + "dob" + IntegerToString(i), m_d_overbought[i]); - GlobalVariableSet(p + "dos" + IntegerToString(i), m_d_oversold[i]); - GlobalVariableSet(p + "dtb" + IntegerToString(i), m_d_target_buy[i]); - GlobalVariableSet(p + "dts" + IntegerToString(i), m_d_target_sell[i]); - GlobalVariableSet(p + "dbs" + IntegerToString(i), m_d_bars_scale[i]); - } - return true; - } - - bool LoadFromGlobals(const string prefix) - { - string p = prefix + IntegerToString(m_seed) + "_"; - if(!GlobalVariableCheck(p + "pi0")) - return false; - m_pi[0] = GlobalVariableGet(p + "pi0"); - m_pi[1] = GlobalVariableGet(p + "pi1"); - m_pi[2] = GlobalVariableGet(p + "pi2"); - m_pi[3] = GlobalVariableGet(p + "pi3"); - for(int i = 0; i < DMR_NUM_STATES; i++) - { - m_d_overbought[i] = GlobalVariableGet(p + "dob" + IntegerToString(i)); - m_d_oversold[i] = GlobalVariableGet(p + "dos" + IntegerToString(i)); - m_d_target_buy[i] = GlobalVariableGet(p + "dtb" + IntegerToString(i)); - m_d_target_sell[i] = GlobalVariableGet(p + "dts" + IntegerToString(i)); - m_d_bars_scale[i] = GlobalVariableGet(p + "dbs" + IntegerToString(i)); - } - NormalizePi(); - return true; - } -}; diff --git a/frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/main.mq5 b/frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/main.mq5 deleted file mode 100644 index 0804865..0000000 --- a/frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/main.mq5 +++ /dev/null @@ -1,350 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalpingXAUUSD_DeepMarkov.mq5 | -//| RSI scalping with online deep Markov regime filter + self-tune. | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2026" -#property link "https://www.mql5.com" -#property version "1.00" - -#include "MagicNumberHelpers.mqh" -#include "DeepMarkovRegimeModel.mqh" - -//--- Input parameters -input group "=== Chart / RSI ===" -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; -input int RSI_Period = 14; -input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; - -input group "=== Base RSI levels (Markov blends & learns offsets) ===" -input double RSI_Overbought = 71; -input double RSI_Oversold = 57; -input double RSI_Target_Buy = 80; -input double RSI_Target_Sell = 57; -input int BarsToWait = 4; - -input group "=== Execution ===" -input double LotSize = 0.1; -input int MagicNumber = 129102316; -input int Slippage = 3; - -input group "=== Deep Markov self-optimization ===" -input double DMR_LearnTransition = 0.05; -input double DMR_LearnEmission = 0.02; -input double DMR_LearnWin = 0.03; -input double DMR_LearnLoss = 0.015; -input bool DMR_PersistGlobals = true; -input string DMR_GlobalPrefix = "DMR_XAU_"; -input bool DMR_LogEachBar = false; - -//--- Global variables -CTrade trade; -CDeepMarkovRegimeModel g_dm; - -int rsi_handle; -int atr_fast_handle; -int atr_slow_handle; -double rsi_buffer[]; -double rsi_prev, rsi_current, rsi_two_bars_ago; -double atr_fast, atr_slow; - -bool position_open = false; -int position_ticket = 0; -ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; -datetime last_bar_time = 0; -bool rsi_against_position = false; -int bars_against_count = 0; - -int entry_regime = 0; - -//+------------------------------------------------------------------+ -int OnInit() -{ - rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_handle == INVALID_HANDLE) - return(INIT_FAILED); - - atr_fast_handle = iATR(_Symbol, TimeFrame, 8); - atr_slow_handle = iATR(_Symbol, TimeFrame, 34); - if(atr_fast_handle == INVALID_HANDLE || atr_slow_handle == INVALID_HANDLE) - return(INIT_FAILED); - - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - ArraySetAsSeries(rsi_buffer, true); - - g_dm.SetSeed(MagicNumber); - g_dm.SetLearningRates(DMR_LearnTransition, DMR_LearnEmission, DMR_LearnWin, DMR_LearnLoss); - g_dm.SetBaseThresholds(RSI_Overbought, RSI_Oversold, RSI_Target_Buy, RSI_Target_Sell, BarsToWait); - - if(DMR_PersistGlobals) - { - if(g_dm.LoadFromGlobals(DMR_GlobalPrefix)) - Print("RSIScalpingXAUUSD_DeepMarkov: loaded persisted Markov state from globals."); - } - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(DMR_PersistGlobals) - g_dm.SaveToGlobals(DMR_GlobalPrefix); - - if(rsi_handle != INVALID_HANDLE) - IndicatorRelease(rsi_handle); - if(atr_fast_handle != INVALID_HANDLE) - IndicatorRelease(atr_fast_handle); - if(atr_slow_handle != INVALID_HANDLE) - IndicatorRelease(atr_slow_handle); -} - -//+------------------------------------------------------------------+ -void OnTick() -{ - if(Bars(_Symbol, TimeFrame) < RSI_Period + 5) - return; - - datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - if(current_bar_time == last_bar_time) - return; - - last_bar_time = current_bar_time; - - if(!UpdateRSI()) - return; - - if(!UpdateATR()) - return; - - const double f0 = rsi_current / 100.0; - const double dr = rsi_current - rsi_prev; - const double f1 = MathTanh(dr / 10.0) * 0.5 + 0.5; - double ratio = 1.0; - if(atr_slow > 1.0e-12) - ratio = atr_fast / atr_slow; - if(ratio < 0.15) - ratio = 0.15; - if(ratio > 2.5) - ratio = 2.5; - const double f2 = ratio / 2.5; - - g_dm.Update(f0, f1, f2); - - if(DMR_LogEachBar) - Print(g_dm.DebugStateLine()); - - ResyncPositionFromMarket(); - - CheckExistingPosition(); - - if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - CheckEntrySignals(); -} - -//+------------------------------------------------------------------+ -bool UpdateRSI() -{ - if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) - return false; - - rsi_current = rsi_buffer[0]; - rsi_prev = rsi_buffer[1]; - rsi_two_bars_ago = rsi_buffer[2]; - return true; -} - -//+------------------------------------------------------------------+ -bool UpdateATR() -{ - double af[], as[]; - ArrayResize(af, 1); - ArrayResize(as, 1); - ArraySetAsSeries(af, true); - ArraySetAsSeries(as, true); - if(CopyBuffer(atr_fast_handle, 0, 0, 1, af) < 1) - return false; - if(CopyBuffer(atr_slow_handle, 0, 0, 1, as) < 1) - return false; - atr_fast = af[0]; - atr_slow = as[0]; - return true; -} - -//+------------------------------------------------------------------+ -void ResyncPositionFromMarket() -{ - if(position_open) - return; - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t == 0 || !PositionSelectByTicket(t)) - return; - position_ticket = (int)t; - position_open = true; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); - entry_regime = g_dm.ArgMaxPi(); -} - -//+------------------------------------------------------------------+ -double EffectiveOverbought() { return g_dm.EffectiveOverbought(); } -double EffectiveOversold() { return g_dm.EffectiveOversold(); } -double EffectiveTargetBuy() { return g_dm.EffectiveTargetBuy(); } -double EffectiveTargetSell() { return g_dm.EffectiveTargetSell(); } -int EffectiveBarsToWait() { return g_dm.EffectiveBarsToWait(); } - -//+------------------------------------------------------------------+ -void CheckExistingPosition() -{ - if(!position_open) - return; - - if(!PositionSelectByTicketAndMagic((ulong)position_ticket, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - - const double ob = EffectiveOverbought(); - const double os = EffectiveOversold(); - const double tb = EffectiveTargetBuy(); - const double ts = EffectiveTargetSell(); - const int bw = EffectiveBarsToWait(); - - if(current_position_type == POSITION_TYPE_BUY) - { - if(rsi_current < os) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - bars_against_count++; - - if(bars_against_count >= bw) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - if(rsi_current >= tb) - ClosePosition(); - } - } - else if(current_position_type == POSITION_TYPE_SELL) - { - if(rsi_current > ob) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - bars_against_count++; - - if(bars_against_count >= bw) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - if(rsi_current <= ts) - ClosePosition(); - } - } -} - -//+------------------------------------------------------------------+ -void CheckEntrySignals() -{ - const double os = EffectiveOversold(); - const double ob = EffectiveOverbought(); - - if(rsi_two_bars_ago <= os && rsi_prev > os) - OpenBuyPosition(); - - if(rsi_two_bars_ago >= ob && rsi_prev < ob) - OpenSellPosition(); -} - -//+------------------------------------------------------------------+ -void OpenBuyPosition() -{ - double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - entry_regime = g_dm.ArgMaxPi(); - - if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI DM Buy")) - { - ulong pt = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - position_ticket = (int)pt; - position_open = true; - current_position_type = POSITION_TYPE_BUY; - } -} - -//+------------------------------------------------------------------+ -void OpenSellPosition() -{ - double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - entry_regime = g_dm.ArgMaxPi(); - - if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI DM Sell")) - { - ulong pt = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - position_ticket = (int)pt; - position_open = true; - current_position_type = POSITION_TYPE_SELL; - } -} - -//+------------------------------------------------------------------+ -void ClosePosition() -{ - double profit = 0.0; - if(PositionSelectByTicket(position_ticket)) - profit = PositionGetDouble(POSITION_PROFIT); - - const int regime = entry_regime; - - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - g_dm.OnTradeClosed(regime, profit); - return; - } - if(!PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - g_dm.OnTradeClosed(regime, profit); - return; - } - Print("RSIScalpingXAUUSD_DeepMarkov: close failed (will retry). retcode=", - trade.ResultRetcode(), " lastError=", GetLastError()); -} diff --git a/frontline/MQL5/RSIScalpingXAUUSD_PlusHours/main.mq5 b/frontline/MQL5/RSIScalpingXAUUSD_PlusHours/main.mq5 deleted file mode 100644 index d393e76..0000000 --- a/frontline/MQL5/RSIScalpingXAUUSD_PlusHours/main.mq5 +++ /dev/null @@ -1,307 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalpingXAUUSD_PlusHours.mq5 | -//| Same logic as RSIScalpingXAUUSD + trading session filter | -//| (server time), day-of-week filter, and optional close-all when | -//| outside allowed hours/days | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.00" - -#include -#include "../_united/MagicNumberHelpers.mqh" - -input group "=== RSI (same as RSIScalpingXAUUSD) ===" -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; -input int RSI_Period = 14; -input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; -input double RSI_Overbought = 71; -input double RSI_Oversold = 57; -input double RSI_Target_Buy = 80; -input double RSI_Target_Sell = 57; -input int BarsToWait = 4; -input double LotSize = 0.1; -input int MagicNumber = 129102317; -input int Slippage = 3; - -input group "=== Trading hours (broker server time) ===" -input bool InpUseTradingHours = true; -input int InpTradeHourStart = 8; -input int InpTradeHourEnd = 22; -input bool InpCloseOutsideTradingHours = true; - -input group "=== Trading days (broker server time) ===" -input bool InpUseTradingDays = true; -input bool InpTradeMonday = true; -input bool InpTradeTuesday = true; -input bool InpTradeWednesday = true; -input bool InpTradeThursday = true; -input bool InpTradeFriday = true; -input bool InpTradeSaturday = true; -input bool InpTradeSunday = true; -input bool InpCloseOutsideTradingDays = true; - -CTrade trade; -int rsi_handle; -double rsi_buffer[]; -double rsi_prev, rsi_current, rsi_two_bars_ago; -bool position_open = false; -int position_ticket = 0; -ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; -datetime last_bar_time = 0; -bool rsi_against_position = false; -int bars_against_count = 0; - -bool IsWithinTradingHours() -{ - if(!InpUseTradingHours) - return true; - - MqlDateTime dt; - TimeToStruct(TimeCurrent(), dt); - const int h = dt.hour; - const int hs = MathMax(0, MathMin(23, InpTradeHourStart)); - const int he = MathMax(0, MathMin(23, InpTradeHourEnd)); - - if(hs == he) - return true; - - if(hs < he) - return (h >= hs && h < he); - - return (h >= hs || h < he); -} - -bool IsTradingDayAllowed() -{ - if(!InpUseTradingDays) - return true; - - MqlDateTime dt; - TimeToStruct(TimeCurrent(), dt); - switch(dt.day_of_week) - { - case 0: return InpTradeSunday; - case 1: return InpTradeMonday; - case 2: return InpTradeTuesday; - case 3: return InpTradeWednesday; - case 4: return InpTradeThursday; - case 5: return InpTradeFriday; - case 6: return InpTradeSaturday; - } - return false; -} - -int OnInit() -{ - rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_handle == INVALID_HANDLE) - return(INIT_FAILED); - - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - ArraySetAsSeries(rsi_buffer, true); - return(INIT_SUCCEEDED); -} - -void OnDeinit(const int reason) -{ - if(rsi_handle != INVALID_HANDLE) - IndicatorRelease(rsi_handle); -} - -void OnTick() -{ - if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) - return; - - datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - if(current_bar_time == last_bar_time) - return; - - last_bar_time = current_bar_time; - - if(!UpdateRSI()) - return; - - ResyncPositionFromMarket(); - - const bool inHours = IsWithinTradingHours(); - const bool inDays = IsTradingDayAllowed(); - const bool inSession = inHours && inDays; - - if(position_open && !inSession && - ((InpUseTradingHours && InpCloseOutsideTradingHours && !inHours) || - (InpUseTradingDays && InpCloseOutsideTradingDays && !inDays))) - { - ClosePosition(); - return; - } - - CheckExistingPosition(); - - if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber) && inSession) - CheckEntrySignals(); -} - -bool UpdateRSI() -{ - if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) - return false; - - rsi_current = rsi_buffer[0]; - rsi_prev = rsi_buffer[1]; - rsi_two_bars_ago = rsi_buffer[2]; - return true; -} - -void ResyncPositionFromMarket() -{ - if(position_open) - return; - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t == 0 || !PositionSelectByTicket(t)) - return; - position_ticket = (int)t; - position_open = true; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); -} - -void CheckExistingPosition() -{ - if(!position_open) - return; - - if(!PositionSelectByTicketAndMagic(position_ticket, MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - - if(current_position_type == POSITION_TYPE_BUY) - { - if(rsi_current < RSI_Oversold) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - bars_against_count++; - - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - if(rsi_current >= RSI_Target_Buy) - ClosePosition(); - } - } - else if(current_position_type == POSITION_TYPE_SELL) - { - if(rsi_current > RSI_Overbought) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - bars_against_count++; - - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - if(rsi_current <= RSI_Target_Sell) - ClosePosition(); - } - } -} - -void CheckEntrySignals() -{ - if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) - OpenBuyPosition(); - - if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought) - OpenSellPosition(); -} - -void OpenBuyPosition() -{ - double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - trade.SetExpertMagicNumber(MagicNumber); - if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI Scalping Hours Buy")) - { - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - position_ticket = (int)t; - position_open = (position_ticket != 0); - current_position_type = POSITION_TYPE_BUY; - rsi_against_position = false; - bars_against_count = 0; - } -} - -void OpenSellPosition() -{ - double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - trade.SetExpertMagicNumber(MagicNumber); - if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI Scalping Hours Sell")) - { - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - position_ticket = (int)t; - position_open = (position_ticket != 0); - current_position_type = POSITION_TYPE_SELL; - rsi_against_position = false; - bars_against_count = 0; - } -} - -void ClosePosition() -{ - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - if(!PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - Print("RSIScalpingXAUUSD_PlusHours: close failed (will retry). retcode=", - trade.ResultRetcode(), " lastError=", GetLastError()); -} diff --git a/frontline/MQL5/RSIScalpingXAUUSD_Trailing/main.mq5 b/frontline/MQL5/RSIScalpingXAUUSD_Trailing/main.mq5 deleted file mode 100644 index 0dc1208..0000000 --- a/frontline/MQL5/RSIScalpingXAUUSD_Trailing/main.mq5 +++ /dev/null @@ -1,367 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSIScalpingXAUUSD_Trailing.mq5 | -//| Copyright 2025, MetaQuotes Ltd. | -//| https://www.mql5.com | -//+------------------------------------------------------------------+ -#property copyright "Copyright 2025, MetaQuotes Ltd." -#property link "https://www.mql5.com" -#property version "1.06" - -#include -#include "../_united/MagicNumberHelpers.mqh" - -//--- Input parameters -input ENUM_TIMEFRAMES TimeFrame = PERIOD_H1; // Timeframe for Analysis -input int RSI_Period = 14; // RSI Period -input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price -input double RSI_Overbought = 71; // RSI Overbought Level -input double RSI_Oversold = 57; // RSI Oversold Level -input double RSI_Target_Buy = 80; // RSI Target for Buy Exit -input double RSI_Target_Sell = 57; // RSI Target for Sell Exit -input int BarsToWait = 4; // Bars to wait when RSI goes against position -input bool UseRSI_StopLoss = true; // Close on RSI stop (separate timeframe below) -input ENUM_TIMEFRAMES RSI_StopLoss_TimeFrame = PERIOD_H1; // RSI timeframe for stop-loss only -input double RSI_StopLoss_BuyBelow = 30; // Close buy when stop-timeframe RSI drops below this -input double RSI_StopLoss_SellAbove = 70; // Close sell when stop-timeframe RSI rises above this -input double LotSize = 0.1; // Lot Size -input int MagicNumber = 129102316; // Magic Number (distinct from non-trailing EA) -input int Slippage = 3; // Slippage in points - -//--- Global variables -CTrade trade; -int rsi_handle; -int rsi_stoploss_handle = INVALID_HANDLE; -double rsi_buffer[]; -double rsi_stoploss_buffer[]; -double rsi_prev, rsi_current, rsi_two_bars_ago; -double rsi_stoploss_current = 0.0; -MqlTick rsi_stoploss_last_tick; -bool position_open = false; -int position_ticket = 0; -ENUM_POSITION_TYPE current_position_type = POSITION_TYPE_BUY; -datetime last_bar_time = 0; -bool rsi_against_position = false; -int bars_against_count = 0; - -//+------------------------------------------------------------------+ -//| Expert initialization function | -//+------------------------------------------------------------------+ -int OnInit() -{ - rsi_handle = iRSI(_Symbol, TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_handle == INVALID_HANDLE) - { - return(INIT_FAILED); - } - - rsi_stoploss_handle = iRSI(_Symbol, RSI_StopLoss_TimeFrame, RSI_Period, RSI_Applied_Price); - if(rsi_stoploss_handle == INVALID_HANDLE) - { - IndicatorRelease(rsi_handle); - return(INIT_FAILED); - } - - trade.SetExpertMagicNumber(MagicNumber); - trade.SetDeviationInPoints(Slippage); - trade.SetTypeFilling(ORDER_FILLING_FOK); - - ArraySetAsSeries(rsi_buffer, true); - ArraySetAsSeries(rsi_stoploss_buffer, true); - - return(INIT_SUCCEEDED); -} - -//+------------------------------------------------------------------+ -//| Expert deinitialization function | -//+------------------------------------------------------------------+ -void OnDeinit(const int reason) -{ - if(rsi_handle != INVALID_HANDLE) - IndicatorRelease(rsi_handle); - if(rsi_stoploss_handle != INVALID_HANDLE) - IndicatorRelease(rsi_stoploss_handle); -} - -//+------------------------------------------------------------------+ -//| Expert tick function | -//+------------------------------------------------------------------+ -void OnTick() -{ - ResyncPositionFromMarket(); - - const int min_bars = RSI_Period + 2; - if(position_open) - { - if(UseRSI_StopLoss && Bars(_Symbol, RSI_StopLoss_TimeFrame) >= min_bars) - { - if(UpdateRSI_StopLoss()) - CheckRSIStopLossClose(); - } - } - - if(Bars(_Symbol, TimeFrame) < min_bars) - { - return; - } - - datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - if(current_bar_time == last_bar_time) - { - return; - } - - last_bar_time = current_bar_time; - - if(!UpdateRSI()) - { - return; - } - - ResyncPositionFromMarket(); - - CheckExistingPosition(); - - if(!position_open && !PositionExistsByMagic(_Symbol, MagicNumber)) - { - CheckEntrySignals(); - } -} - -//+------------------------------------------------------------------+ -//| Update RSI values | -//+------------------------------------------------------------------+ -bool UpdateRSI() -{ - if(CopyBuffer(rsi_handle, 0, 0, 3, rsi_buffer) < 3) - { - return false; - } - - rsi_current = rsi_buffer[0]; - rsi_prev = rsi_buffer[1]; - rsi_two_bars_ago = rsi_buffer[2]; - - return true; -} - -//+------------------------------------------------------------------+ -//| Stop-loss RSI (RSI_StopLoss_TimeFrame) | -//| Uses latest MqlTick before CopyBuffer so RSI matches current quote. | -//+------------------------------------------------------------------+ -bool UpdateRSI_StopLoss() -{ - if(rsi_stoploss_handle == INVALID_HANDLE) - return false; - if(!SymbolInfoTick(_Symbol, rsi_stoploss_last_tick)) - return false; - - int calc = BarsCalculated(rsi_stoploss_handle); - if(calc <= 0) - return false; - - if(CopyBuffer(rsi_stoploss_handle, 0, 0, 1, rsi_stoploss_buffer) < 1) - return false; - rsi_stoploss_current = rsi_stoploss_buffer[0]; - return true; -} - -void ResyncPositionFromMarket() -{ - if(position_open) - return; - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t == 0 || !PositionSelectByTicket(t)) - return; - position_ticket = (int)t; - position_open = true; - current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); -} - -//+------------------------------------------------------------------+ -//| RSI-based stop: RSI_StopLoss_TimeFrame series (independent of TimeFrame) | -//+------------------------------------------------------------------+ -void CheckRSIStopLossClose() -{ - if(!UseRSI_StopLoss || !position_open) - return; - - if(!PositionSelectByTicketAndMagic(position_ticket, MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - - if(current_position_type == POSITION_TYPE_BUY) - { - if(rsi_stoploss_current < RSI_StopLoss_BuyBelow) - ClosePosition(); - } - else if(current_position_type == POSITION_TYPE_SELL) - { - if(rsi_stoploss_current > RSI_StopLoss_SellAbove) - ClosePosition(); - } -} - -//+------------------------------------------------------------------+ -//| Check existing position for exit conditions | -//+------------------------------------------------------------------+ -void CheckExistingPosition() -{ - if(!position_open) - { - return; - } - - if(!PositionSelectByTicketAndMagic(position_ticket, MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - - if(current_position_type == POSITION_TYPE_BUY) - { - if(rsi_current < RSI_Oversold) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - if(rsi_current >= RSI_Target_Buy) - { - ClosePosition(); - } - } - } - else if(current_position_type == POSITION_TYPE_SELL) - { - if(rsi_current > RSI_Overbought) - { - if(!rsi_against_position) - { - rsi_against_position = true; - bars_against_count = 1; - } - else - { - bars_against_count++; - } - - if(bars_against_count >= BarsToWait) - { - ClosePosition(); - return; - } - } - else - { - if(rsi_against_position) - { - rsi_against_position = false; - bars_against_count = 0; - } - - if(rsi_current <= RSI_Target_Sell) - { - ClosePosition(); - } - } - } -} - -//+------------------------------------------------------------------+ -//| Check for entry signals | -//+------------------------------------------------------------------+ -void CheckEntrySignals() -{ - if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) - OpenBuyPosition(); - - if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought) - OpenSellPosition(); -} - -//+------------------------------------------------------------------+ -//| Open buy position | -//+------------------------------------------------------------------+ -void OpenBuyPosition() -{ - double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); - - if(trade.Buy(LotSize, _Symbol, ask, 0, 0, "RSI Scalping Buy")) - { - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t != 0) - position_ticket = (int)t; - position_open = true; - current_position_type = POSITION_TYPE_BUY; - } -} - -//+------------------------------------------------------------------+ -//| Open sell position | -//+------------------------------------------------------------------+ -void OpenSellPosition() -{ - double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); - - if(trade.Sell(LotSize, _Symbol, bid, 0, 0, "RSI Scalping Sell")) - { - ulong t = GetPositionTicketByMagic(_Symbol, (ulong)MagicNumber); - if(t != 0) - position_ticket = (int)t; - position_open = true; - current_position_type = POSITION_TYPE_SELL; - } -} - -//+------------------------------------------------------------------+ -//| Close current position | -//+------------------------------------------------------------------+ -void ClosePosition() -{ - if(ClosePositionByMagic(trade, _Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - if(!PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) - { - position_open = false; - position_ticket = 0; - rsi_against_position = false; - bars_against_count = 0; - return; - } - Print("RSIScalpingXAUUSD: close failed (will retry on next bar). retcode=", - trade.ResultRetcode(), " lastError=", GetLastError()); -} diff --git a/frontline/MQL5/_united/PEPPERSTONE_US_SETUP.md b/frontline/MQL5/_united/PEPPERSTONE_US_SETUP.md deleted file mode 100644 index 82dc835..0000000 --- a/frontline/MQL5/_united/PEPPERSTONE_US_SETUP.md +++ /dev/null @@ -1,75 +0,0 @@ -# Pepperstone US - Symbol Setup Guide - -## Finding Correct Symbol Names in MetaTrader 5 - -### Step-by-Step Instructions: - -1. **Open Market Watch Window** - - Press `Ctrl+M` or go to `View > Market Watch` - -2. **Show All Symbols** - - Right-click in the Market Watch window - - Select `Show All` or `Symbols` - - This shows all available symbols from your broker - -3. **Search for Your Symbols** - - Use the search box in the Market Watch window - - Search for: "AAPL", "MSFT", "NVDA", "TSLA", "BTCUSD", "XAUUSD" - -4. **Note the Exact Symbol Name** - - The symbol name shown in Market Watch is what you need to use - - Common formats for Pepperstone US: - - Stocks: `AAPL.US`, `MSFT.US`, `NVDA.US`, `TSLA.US` - - Or: `NASDAQ:AAPL`, `NASDAQ:MSFT`, etc. - - Or: Just `AAPL`, `MSFT`, etc. (if available) - -5. **Add to Market Watch** - - Double-click the symbol to add it to your Market Watch - - Or right-click and select `Show` - -6. **Update EA Inputs** - - Open the EA inputs in MetaTrader 5 - - Update each symbol parameter with the exact name from Market Watch - -## Common Pepperstone US Symbol Formats - -### US Stocks: -- **Apple**: `AAPL.US` or `NASDAQ:AAPL` or `AAPL` -- **Microsoft**: `MSFT.US` or `NASDAQ:MSFT` or `MSFT` -- **NVIDIA**: `NVDA.US` or `NASDAQ:NVDA` or `NVDA` -- **Tesla**: `TSLA.US` or `NASDAQ:TSLA` or `TSLA` - -### Cryptocurrencies: -- **Bitcoin**: `BTCUSD` or `BTC/USD` or `BTCUSD.c` - -### Precious Metals: -- **Gold**: `XAUUSD` or `GOLD` or `XAU/USD` - -## Important Notes: - -1. **Symbol Names are Case-Sensitive**: Use exact capitalization -2. **Add Symbols to Market Watch**: Symbols must be in Market Watch for the EA to access them -3. **Check Trading Hours**: US stocks trade during US market hours (9:30 AM - 4:00 PM ET) -4. **CFD vs Stock**: Pepperstone offers CFDs on stocks, not actual stocks -5. **Spread**: Check the spread for each symbol - some may have wider spreads - -## Troubleshooting: - -### If Symbol Not Found: -1. Check if you're connected to Pepperstone US server -2. Verify your account type supports the symbol -3. Contact Pepperstone support for symbol availability -4. Check if symbol requires special account permissions - -### If EA Shows "Symbol Not Available": -1. Make sure symbol is added to Market Watch -2. Verify symbol name matches exactly (including dots, colons, etc.) -3. Check broker connection status -4. Try different symbol format variations - -## Testing Symbols: - -You can test if a symbol works by: -1. Opening a chart with that symbol -2. If chart opens successfully, the symbol name is correct -3. Use that exact symbol name in the EA inputs diff --git a/frontline/MQL5/_united_dynamic/AdaptiveMonthlyRegime.mqh b/frontline/MQL5/_united_dynamic/AdaptiveMonthlyRegime.mqh deleted file mode 100644 index 4ba0fb7..0000000 --- a/frontline/MQL5/_united_dynamic/AdaptiveMonthlyRegime.mqh +++ /dev/null @@ -1,639 +0,0 @@ -//+------------------------------------------------------------------+ -//| AdaptiveMonthlyRegime.mqh | -//| Streak unit (input): closed calendar MONTHS or closed DAYS | -//| (server time). Losing streak -> optional CANARY (next full month | -//| or next full day at InpAdaptiveCanaryLotMult). Canary P/L > 0 -> | -//| full size; else HARD PAUSE. CanaryLotMult==0 -> hard pause, no | -//| canary. Per-strat DD lot cap still uses last closed *month* P/L. | -//| Include after all `input` blocks. | -//+------------------------------------------------------------------+ -#ifndef ADAPTIVE_MONTHLY_REGIME_MQH -#define ADAPTIVE_MONTHLY_REGIME_MQH - -#define UNITED_ADAPTIVE_N 13 -#define UNITED_AD_MAX_DAY_BUCKETS 400 - -#define UNITED_AD_DARVAS 0 -#define UNITED_AD_ES 1 -#define UNITED_AD_RC 2 -#define UNITED_AD_RM 3 -#define UNITED_AD_RS_APPL 4 -#define UNITED_AD_RS_BTC 5 -#define UNITED_AD_RS_NVDA 6 -#define UNITED_AD_RS_TSLA 7 -#define UNITED_AD_RS_XAU 8 -#define UNITED_AD_RRA_EUR 9 -#define UNITED_AD_RRA_AUD 10 -#define UNITED_AD_RSS 11 -#define UNITED_AD_SUPEREMA 12 - -bool g_adHardPaused[UNITED_ADAPTIVE_N]; -bool g_adCanaryWaiting[UNITED_ADAPTIVE_N]; -bool g_adCanaryActive[UNITED_ADAPTIVE_N]; -datetime g_adCanaryMonthStart[UNITED_ADAPTIVE_N]; -datetime g_adCanaryMonthEnd[UNITED_ADAPTIVE_N]; -datetime g_adHardPauseUntil[UNITED_ADAPTIVE_N]; -datetime g_adPostCanaryCooldownUntil[UNITED_ADAPTIVE_N]; - -double g_adLastClosedMonthPl[UNITED_ADAPTIVE_N]; - -datetime g_unitedAdaptiveLastUpdate = 0; - -string UnitedAdaptive_StratName(const int s) -{ - const string names[] = - { - "DarvasBox", "EMASlope", "RSICrossOver", "RM_MidPoint", - "RS_Scalp_AAPL", "RS_Scalp_BTC", "RS_Scalp_NVDA", "RS_Scalp_TSLA", "RS_Scalp_XAU", - "RRA_EURUSD", "RRA_AUDUSD", "SecretSauce", "SuperEMA" - }; - if(s >= 0 && s < UNITED_ADAPTIVE_N) - return names[s]; - return "?"; -} - -void UnitedAdaptive_Init() -{ - for(int i = 0; i < UNITED_ADAPTIVE_N; i++) - { - g_adHardPaused[i] = false; - g_adCanaryWaiting[i] = false; - g_adCanaryActive[i] = false; - g_adCanaryMonthStart[i] = 0; - g_adCanaryMonthEnd[i] = 0; - g_adHardPauseUntil[i] = 0; - g_adPostCanaryCooldownUntil[i] = 0; - g_adLastClosedMonthPl[i] = 0.0; - } - g_unitedAdaptiveLastUpdate = 0; -} - -datetime UnitedAdaptive_MonthStartInt(const int y, const int m) -{ - MqlDateTime d; - d.year = y; - d.mon = m; - d.day = 1; - d.hour = 0; - d.min = 0; - d.sec = 0; - return StructToTime(d); -} - -void UnitedAdaptive_NextYm(int &y, int &m) -{ - m++; - if(m > 12) - { - m = 1; - y++; - } -} - -void UnitedAdaptive_ClosedMonthYm(const int offsetFromLastComplete, int &y, int &m) -{ - MqlDateTime now; - TimeToStruct(TimeCurrent(), now); - int ly = now.year; - int lm = now.mon - 1; - if(lm < 1) - { - lm = 12; - ly--; - } - for(int i = 0; i < offsetFromLastComplete; i++) - { - lm--; - if(lm < 1) - { - lm = 12; - ly--; - } - } - y = ly; - m = lm; -} - -// Start of calendar day: offset 0 = yesterday 00:00 (last fully closed day), 1 = day before, ... -datetime UnitedAdaptive_ClosedDayStart(const int offsetFromLastCompleteDay) -{ - MqlDateTime n; - TimeToStruct(TimeCurrent(), n); - n.hour = 0; - n.min = 0; - n.sec = 0; - const datetime today0 = StructToTime(n); - return today0 - (datetime)((offsetFromLastCompleteDay + 1) * 86400); -} - -// Bucket index 0 = yesterday. -1 = today (incomplete) or invalid. -int UnitedAdaptive_ClosedDayOffsetFromDealTime(const datetime dt) -{ - MqlDateTime d, n; - TimeToStruct(dt, d); - d.hour = 0; - d.min = 0; - d.sec = 0; - const datetime dealDay0 = StructToTime(d); - TimeToStruct(TimeCurrent(), n); - n.hour = 0; - n.min = 0; - n.sec = 0; - const datetime today0 = StructToTime(n); - const long deltaSec = (long)(today0 - dealDay0); - if(deltaSec < 86400L) - return -1; - const int daysAgo = (int)(deltaSec / 86400L); - return daysAgo - 1; -} - -datetime UnitedAdaptive_AddMonthsWallClock(const datetime dt0, const int months) -{ - MqlDateTime t; - TimeToStruct(dt0, t); - for(int i = 0; i < months; i++) - { - t.mon++; - if(t.mon > 12) - { - t.mon = 1; - t.year++; - } - } - return StructToTime(t); -} - -bool UnitedAdaptive_RMDealMatches(const long mg) -{ - if(EnableRSIMidPointHijack) - { - if(RM_InpEnableRSIFollow && mg == (long)RM_InpMagicNumberRSIFollow) - return true; - if(RM_InpEnableRSIReverse && mg == (long)RM_InpMagicNumberRSIReverse) - return true; - if(RM_InpEnableEMACross && mg == (long)RM_InpMagicNumberEMACross) - return true; - } - return false; -} - -bool UnitedAdaptive_DealBelongsToStrat(const int s, const long mg) -{ - if(s == UNITED_AD_DARVAS) - return EnableDarvasBox && mg == (long)DB_MagicNumber; - if(s == UNITED_AD_ES) - return EnableEMASlopeDistance && mg == (long)ES_MagicNumber; - if(s == UNITED_AD_RC) - return EnableRSICrossOverReversal && mg == (long)RC_MagicNumber; - if(s == UNITED_AD_RM) - return UnitedAdaptive_RMDealMatches(mg); - if(s == UNITED_AD_RS_APPL) - return EnableRSIScalpingAPPL && mg == (long)RS_APPL_MagicNumber; - if(s == UNITED_AD_RS_BTC) - return EnableRSIScalpingBTCUSD && mg == (long)RS_BTCUSD_MagicNumber; - if(s == UNITED_AD_RS_NVDA) - return EnableRSIScalpingNVDA && mg == (long)RS_NVDA_MagicNumber; - if(s == UNITED_AD_RS_TSLA) - return EnableRSIScalpingTSLA && mg == (long)RS_TSLA_MagicNumber; - if(s == UNITED_AD_RS_XAU) - return EnableRSIScalpingXAUUSD && mg == (long)RS_XAUUSD_MagicNumber; - if(s == UNITED_AD_RRA_EUR) - return EnableRSIReversalEURUSD && mg == (long)RRA_EURUSD_MagicNumber; - if(s == UNITED_AD_RRA_AUD) - return EnableRSIReversalAUDUSD && mg == (long)RRA_AUDUSD_MagicNumber; - if(s == UNITED_AD_RSS) - return EnableRSISecretSauceXAUUSD && mg == (long)RSS_XAUUSD_MagicNumber; - if(s == UNITED_AD_SUPEREMA) - return EnableSuperEMA && mg == (long)SE_MagicNumber; - return false; -} - -double UnitedAdaptive_SumStratDealsRange(const int s, const datetime from, const datetime to) -{ - if(from >= to) - return 0.0; - if(!HistorySelect(from, to)) - return 0.0; - double sum = 0.0; - const int n = HistoryDealsTotal(); - for(int i = 0; i < n; i++) - { - const ulong t = HistoryDealGetTicket(i); - if(t == 0) - continue; - const long mg = (long)HistoryDealGetInteger(t, DEAL_MAGIC); - if(!UnitedAdaptive_DealBelongsToStrat(s, mg)) - continue; - sum += HistoryDealGetDouble(t, DEAL_PROFIT); - sum += HistoryDealGetDouble(t, DEAL_SWAP); - sum += HistoryDealGetDouble(t, DEAL_COMMISSION); - } - return sum; -} - -void UnitedAdaptive_StartCanaryWait(const int s) -{ - if(InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY) - { - MqlDateTime t; - TimeToStruct(TimeCurrent(), t); - t.hour = 0; - t.min = 0; - t.sec = 0; - const datetime today0 = StructToTime(t); - g_adCanaryMonthStart[s] = today0 + 86400; - g_adCanaryMonthEnd[s] = g_adCanaryMonthStart[s] + 86400; - g_adCanaryWaiting[s] = true; - g_adCanaryActive[s] = false; - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " -> CANARY WAIT until ", TimeToString(g_adCanaryMonthStart[s], TIME_DATE), - " then 1 day at lot x ", DoubleToString(InpAdaptiveCanaryLotMult, 4)); - return; - } - MqlDateTime t; - TimeToStruct(TimeCurrent(), t); - t.mon++; - if(t.mon > 12) - { - t.mon = 1; - t.year++; - } - t.day = 1; - t.hour = 0; - t.min = 0; - t.sec = 0; - g_adCanaryMonthStart[s] = StructToTime(t); - int ey = t.year; - int em = t.mon; - UnitedAdaptive_NextYm(ey, em); - g_adCanaryMonthEnd[s] = UnitedAdaptive_MonthStartInt(ey, em); - g_adCanaryWaiting[s] = true; - g_adCanaryActive[s] = false; - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " -> CANARY WAIT until ", TimeToString(g_adCanaryMonthStart[s], TIME_DATE), - " then 1 month at lot x ", DoubleToString(InpAdaptiveCanaryLotMult, 4)); -} - -void UnitedAdaptive_TryExpireHardPauses() -{ - if(InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY) - { - if(InpAdaptiveHardRetryDays <= 0) - return; - } - else if(InpAdaptiveHardRetryMonths <= 0) - return; - - const datetime now = TimeCurrent(); - for(int s = 0; s < UNITED_ADAPTIVE_N; s++) - { - if(!g_adHardPaused[s]) - continue; - if(g_adHardPauseUntil[s] > 0 && now >= g_adHardPauseUntil[s]) - { - g_adHardPaused[s] = false; - g_adHardPauseUntil[s] = 0; - if(InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY) - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " hard pause RETRY (after ", InpAdaptiveHardRetryDays, " d)"); - else - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " hard pause RETRY (after ", InpAdaptiveHardRetryMonths, " mo)"); - } - } -} - -void UnitedAdaptive_ProcessCanaryTransitions() -{ - if(!InpAdaptiveEnable) - return; - - UnitedAdaptive_TryExpireHardPauses(); - - const datetime now = TimeCurrent(); - for(int s = 0; s < UNITED_ADAPTIVE_N; s++) - { - if(g_adCanaryWaiting[s] && !g_adCanaryActive[s] && now >= g_adCanaryMonthStart[s]) - { - g_adCanaryWaiting[s] = false; - g_adCanaryActive[s] = true; - if(InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY) - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), " CANARY ACTIVE (probation day)"); - else - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), " CANARY ACTIVE (probation month)"); - } - - if(g_adCanaryActive[s] && now >= g_adCanaryMonthEnd[s]) - { - const double pl = UnitedAdaptive_SumStratDealsRange(s, g_adCanaryMonthStart[s], g_adCanaryMonthEnd[s]); - g_adCanaryActive[s] = false; - g_adCanaryWaiting[s] = false; - if(pl > 0.0) - { - if(InpAdaptivePostCanaryCooldownDays > 0) - g_adPostCanaryCooldownUntil[s] = TimeCurrent() + InpAdaptivePostCanaryCooldownDays * 86400; - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " canary OK P/L=", DoubleToString(pl, 2), " -> full size"); - } - else - { - g_adHardPaused[s] = true; - if(InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY) - { - if(InpAdaptiveHardRetryDays > 0) - g_adHardPauseUntil[s] = now + (datetime)InpAdaptiveHardRetryDays * 86400; - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " canary FAIL P/L=", DoubleToString(pl, 2), " -> HARD PAUSE", - (InpAdaptiveHardRetryDays > 0 ? " (auto-retry later)" : "")); - } - else - { - if(InpAdaptiveHardRetryMonths > 0) - g_adHardPauseUntil[s] = UnitedAdaptive_AddMonthsWallClock(now, InpAdaptiveHardRetryMonths); - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " canary FAIL P/L=", DoubleToString(pl, 2), " -> HARD PAUSE", - (InpAdaptiveHardRetryMonths > 0 ? " (auto-retry later)" : "")); - } - } - } - } -} - -bool UnitedAdaptive_StratLastMonthIsLosing(const int s) -{ - if(s < 0 || s >= UNITED_ADAPTIVE_N) - return false; - const double thr = MathMax(0.0, InpDdLotCapStratLossThreshold); - return g_adLastClosedMonthPl[s] < -thr; -} - -void UnitedAdaptive_RecomputeStreaks() -{ - const bool needMonthPlCap = InpDdLotCapEnable && InpDdLotCapPerStratEnable; - const bool adaptMonth = InpAdaptiveEnable && InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_MONTH; - const bool adaptDay = InpAdaptiveEnable && InpAdaptiveStreakUnit == ADAPTIVE_STREAK_BY_DAY; - - int nMonthOff = 0; - int streakReqM = 1; - if(adaptMonth) - { - streakReqM = MathMax(1, InpAdaptiveRedStreak); - const int L = MathMax(InpAdaptiveLookbackMonths, streakReqM + 1); - nMonthOff = MathMin(L, 63); - } - else if(needMonthPlCap) - nMonthOff = 2; - - int nDayOff = 0; - int streakReqD = 1; - if(adaptDay) - { - streakReqD = MathMax(1, InpAdaptiveRedStreak); - const int L = MathMax(InpAdaptiveLookbackDays, streakReqD + 1); - nDayOff = MathMin(L, UNITED_AD_MAX_DAY_BUCKETS); - } - - if(nMonthOff == 0 && nDayOff == 0) - return; - - const datetime to = TimeCurrent() + 60; - datetime from = to; - if(nMonthOff > 0) - { - int oy = 0, om = 0; - UnitedAdaptive_ClosedMonthYm(nMonthOff - 1, oy, om); - const datetime mf = UnitedAdaptive_MonthStartInt(oy, om); - if(mf < from) - from = mf; - } - if(nDayOff > 0) - { - const datetime df = UnitedAdaptive_ClosedDayStart(nDayOff - 1); - if(df < from) - from = df; - } - - if(from >= to || !HistorySelect(from, to)) - return; - - double monthBuck[UNITED_ADAPTIVE_N][64]; - double dayBuck[UNITED_ADAPTIVE_N][UNITED_AD_MAX_DAY_BUCKETS]; - for(int s = 0; s < UNITED_ADAPTIVE_N; s++) - { - for(int o = 0; o < 64; o++) - monthBuck[s][o] = 0.0; - for(int o = 0; o < UNITED_AD_MAX_DAY_BUCKETS; o++) - dayBuck[s][o] = 0.0; - } - - const int total = HistoryDealsTotal(); - for(int i = 0; i < total; i++) - { - const ulong tk = HistoryDealGetTicket(i); - if(tk == 0) - continue; - const long mg = (long)HistoryDealGetInteger(tk, DEAL_MAGIC); - const datetime dt = (datetime)HistoryDealGetInteger(tk, DEAL_TIME); - const double pl = HistoryDealGetDouble(tk, DEAL_PROFIT) - + HistoryDealGetDouble(tk, DEAL_SWAP) - + HistoryDealGetDouble(tk, DEAL_COMMISSION); - - if(nMonthOff > 0) - { - for(int o = 0; o < nMonthOff; o++) - { - int y = 0, m = 0; - UnitedAdaptive_ClosedMonthYm(o, y, m); - const datetime ms = UnitedAdaptive_MonthStartInt(y, m); - int ny = y, nm = m; - UnitedAdaptive_NextYm(ny, nm); - const datetime me = UnitedAdaptive_MonthStartInt(ny, nm); - if(dt < ms || dt >= me) - continue; - - if(EnableDarvasBox && mg == (long)DB_MagicNumber) - monthBuck[UNITED_AD_DARVAS][o] += pl; - if(EnableEMASlopeDistance && mg == (long)ES_MagicNumber) - monthBuck[UNITED_AD_ES][o] += pl; - if(EnableRSICrossOverReversal && mg == (long)RC_MagicNumber) - monthBuck[UNITED_AD_RC][o] += pl; - if(UnitedAdaptive_RMDealMatches(mg)) - monthBuck[UNITED_AD_RM][o] += pl; - if(EnableRSIScalpingAPPL && mg == (long)RS_APPL_MagicNumber) - monthBuck[UNITED_AD_RS_APPL][o] += pl; - if(EnableRSIScalpingBTCUSD && mg == (long)RS_BTCUSD_MagicNumber) - monthBuck[UNITED_AD_RS_BTC][o] += pl; - if(EnableRSIScalpingNVDA && mg == (long)RS_NVDA_MagicNumber) - monthBuck[UNITED_AD_RS_NVDA][o] += pl; - if(EnableRSIScalpingTSLA && mg == (long)RS_TSLA_MagicNumber) - monthBuck[UNITED_AD_RS_TSLA][o] += pl; - if(EnableRSIScalpingXAUUSD && mg == (long)RS_XAUUSD_MagicNumber) - monthBuck[UNITED_AD_RS_XAU][o] += pl; - if(EnableRSIReversalEURUSD && mg == (long)RRA_EURUSD_MagicNumber) - monthBuck[UNITED_AD_RRA_EUR][o] += pl; - if(EnableRSIReversalAUDUSD && mg == (long)RRA_AUDUSD_MagicNumber) - monthBuck[UNITED_AD_RRA_AUD][o] += pl; - if(EnableRSISecretSauceXAUUSD && mg == (long)RSS_XAUUSD_MagicNumber) - monthBuck[UNITED_AD_RSS][o] += pl; - if(EnableSuperEMA && mg == (long)SE_MagicNumber) - monthBuck[UNITED_AD_SUPEREMA][o] += pl; - break; - } - } - - if(nDayOff > 0) - { - const int dOff = UnitedAdaptive_ClosedDayOffsetFromDealTime(dt); - if(dOff >= 0 && dOff < nDayOff) - { - if(EnableDarvasBox && mg == (long)DB_MagicNumber) - dayBuck[UNITED_AD_DARVAS][dOff] += pl; - if(EnableEMASlopeDistance && mg == (long)ES_MagicNumber) - dayBuck[UNITED_AD_ES][dOff] += pl; - if(EnableRSICrossOverReversal && mg == (long)RC_MagicNumber) - dayBuck[UNITED_AD_RC][dOff] += pl; - if(UnitedAdaptive_RMDealMatches(mg)) - dayBuck[UNITED_AD_RM][dOff] += pl; - if(EnableRSIScalpingAPPL && mg == (long)RS_APPL_MagicNumber) - dayBuck[UNITED_AD_RS_APPL][dOff] += pl; - if(EnableRSIScalpingBTCUSD && mg == (long)RS_BTCUSD_MagicNumber) - dayBuck[UNITED_AD_RS_BTC][dOff] += pl; - if(EnableRSIScalpingNVDA && mg == (long)RS_NVDA_MagicNumber) - dayBuck[UNITED_AD_RS_NVDA][dOff] += pl; - if(EnableRSIScalpingTSLA && mg == (long)RS_TSLA_MagicNumber) - dayBuck[UNITED_AD_RS_TSLA][dOff] += pl; - if(EnableRSIScalpingXAUUSD && mg == (long)RS_XAUUSD_MagicNumber) - dayBuck[UNITED_AD_RS_XAU][dOff] += pl; - if(EnableRSIReversalEURUSD && mg == (long)RRA_EURUSD_MagicNumber) - dayBuck[UNITED_AD_RRA_EUR][dOff] += pl; - if(EnableRSIReversalAUDUSD && mg == (long)RRA_AUDUSD_MagicNumber) - dayBuck[UNITED_AD_RRA_AUD][dOff] += pl; - if(EnableRSISecretSauceXAUUSD && mg == (long)RSS_XAUUSD_MagicNumber) - dayBuck[UNITED_AD_RSS][dOff] += pl; - if(EnableSuperEMA && mg == (long)SE_MagicNumber) - dayBuck[UNITED_AD_SUPEREMA][dOff] += pl; - } - } - } - - if(nMonthOff > 0) - { - for(int s = 0; s < UNITED_ADAPTIVE_N; s++) - g_adLastClosedMonthPl[s] = monthBuck[s][0]; - } - - if(!InpAdaptiveEnable) - return; - - const double thr = MathMax(0.0, InpAdaptiveRedThreshold); - const bool useDay = adaptDay; - const int streakReq = useDay ? streakReqD : streakReqM; - const int nOff = useDay ? nDayOff : nMonthOff; - - for(int s = 0; s < UNITED_ADAPTIVE_N; s++) - { - if(g_adHardPaused[s]) - continue; - if(g_adCanaryActive[s] || g_adCanaryWaiting[s]) - { - int consecOk = 0; - for(int o = 0; o < streakReq && o < nOff; o++) - { - const double bpl = useDay ? dayBuck[s][o] : monthBuck[s][o]; - if(bpl < -thr) - consecOk++; - else - break; - } - const bool streakBad = (consecOk >= streakReq); - if(!streakBad && g_adCanaryWaiting[s] && !g_adCanaryActive[s]) - { - g_adCanaryWaiting[s] = false; - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), " canary wait CANCELLED (streak cleared)"); - } - continue; - } - - int consec = 0; - for(int o = 0; o < streakReq && o < nOff; o++) - { - const double bpl = useDay ? dayBuck[s][o] : monthBuck[s][o]; - if(bpl < -thr) - consec++; - else - break; - } - const bool streakBad = (consec >= streakReq); - if(!streakBad) - continue; - - const bool prevHard = g_adHardPaused[s]; - if(InpAdaptiveCanaryLotMult > 0.0) - { - if(!g_adCanaryWaiting[s] && !g_adCanaryActive[s]) - { - if(g_adPostCanaryCooldownUntil[s] > TimeCurrent()) - continue; - UnitedAdaptive_StartCanaryWait(s); - } - } - else - { - g_adHardPaused[s] = true; - if(!prevHard && useDay && InpAdaptiveHardRetryDays > 0) - g_adHardPauseUntil[s] = TimeCurrent() + (datetime)InpAdaptiveHardRetryDays * 86400; - else if(!prevHard && !useDay && InpAdaptiveHardRetryMonths > 0) - g_adHardPauseUntil[s] = UnitedAdaptive_AddMonthsWallClock(TimeCurrent(), InpAdaptiveHardRetryMonths); - if(!prevHard) - Print("AdaptiveRegime: ", UnitedAdaptive_StratName(s), - " HARD PAUSE (streak, canary disabled)"); - } - } -} - -void UnitedAdaptive_UpdateIfDue() -{ - if(!InpAdaptiveEnable && (!InpDdLotCapEnable || !InpDdLotCapPerStratEnable)) - { - UnitedAdaptive_Init(); - return; - } - - int everySec = 3600; - if(InpAdaptiveEnable) - everySec = MathMin(everySec, MathMax(60, InpAdaptiveUpdateSeconds)); - if(InpDdLotCapEnable && InpDdLotCapPerStratEnable) - everySec = MathMin(everySec, MathMax(60, InpDdLotCapUpdateSeconds)); - - if(g_unitedAdaptiveLastUpdate > 0 && (TimeCurrent() - g_unitedAdaptiveLastUpdate) < everySec) - return; - - g_unitedAdaptiveLastUpdate = TimeCurrent(); - UnitedAdaptive_RecomputeStreaks(); -} - -double UnitedAdaptive_GetLotMult(const int stratId) -{ - if(stratId < 0 || stratId >= UNITED_ADAPTIVE_N) - return 1.0; - if(!InpAdaptiveEnable) - return 1.0; - if(g_adCanaryActive[stratId]) - return MathMax(0.0, InpAdaptiveCanaryLotMult); - return 1.0; -} - -bool UnitedAdaptive_StrategyActive(const int stratId) -{ - if(stratId < 0 || stratId >= UNITED_ADAPTIVE_N) - return true; - if(!InpAdaptiveEnable) - return true; - if(g_adHardPaused[stratId]) - return false; - if(g_adCanaryWaiting[stratId] && !g_adCanaryActive[stratId]) - return false; - return true; -} - -#endif diff --git a/frontline/MQL5/_united_dynamic/PEPPERSTONE_US_SETUP.md b/frontline/MQL5/_united_dynamic/PEPPERSTONE_US_SETUP.md deleted file mode 100644 index 82dc835..0000000 --- a/frontline/MQL5/_united_dynamic/PEPPERSTONE_US_SETUP.md +++ /dev/null @@ -1,75 +0,0 @@ -# Pepperstone US - Symbol Setup Guide - -## Finding Correct Symbol Names in MetaTrader 5 - -### Step-by-Step Instructions: - -1. **Open Market Watch Window** - - Press `Ctrl+M` or go to `View > Market Watch` - -2. **Show All Symbols** - - Right-click in the Market Watch window - - Select `Show All` or `Symbols` - - This shows all available symbols from your broker - -3. **Search for Your Symbols** - - Use the search box in the Market Watch window - - Search for: "AAPL", "MSFT", "NVDA", "TSLA", "BTCUSD", "XAUUSD" - -4. **Note the Exact Symbol Name** - - The symbol name shown in Market Watch is what you need to use - - Common formats for Pepperstone US: - - Stocks: `AAPL.US`, `MSFT.US`, `NVDA.US`, `TSLA.US` - - Or: `NASDAQ:AAPL`, `NASDAQ:MSFT`, etc. - - Or: Just `AAPL`, `MSFT`, etc. (if available) - -5. **Add to Market Watch** - - Double-click the symbol to add it to your Market Watch - - Or right-click and select `Show` - -6. **Update EA Inputs** - - Open the EA inputs in MetaTrader 5 - - Update each symbol parameter with the exact name from Market Watch - -## Common Pepperstone US Symbol Formats - -### US Stocks: -- **Apple**: `AAPL.US` or `NASDAQ:AAPL` or `AAPL` -- **Microsoft**: `MSFT.US` or `NASDAQ:MSFT` or `MSFT` -- **NVIDIA**: `NVDA.US` or `NASDAQ:NVDA` or `NVDA` -- **Tesla**: `TSLA.US` or `NASDAQ:TSLA` or `TSLA` - -### Cryptocurrencies: -- **Bitcoin**: `BTCUSD` or `BTC/USD` or `BTCUSD.c` - -### Precious Metals: -- **Gold**: `XAUUSD` or `GOLD` or `XAU/USD` - -## Important Notes: - -1. **Symbol Names are Case-Sensitive**: Use exact capitalization -2. **Add Symbols to Market Watch**: Symbols must be in Market Watch for the EA to access them -3. **Check Trading Hours**: US stocks trade during US market hours (9:30 AM - 4:00 PM ET) -4. **CFD vs Stock**: Pepperstone offers CFDs on stocks, not actual stocks -5. **Spread**: Check the spread for each symbol - some may have wider spreads - -## Troubleshooting: - -### If Symbol Not Found: -1. Check if you're connected to Pepperstone US server -2. Verify your account type supports the symbol -3. Contact Pepperstone support for symbol availability -4. Check if symbol requires special account permissions - -### If EA Shows "Symbol Not Available": -1. Make sure symbol is added to Market Watch -2. Verify symbol name matches exactly (including dots, colons, etc.) -3. Check broker connection status -4. Try different symbol format variations - -## Testing Symbols: - -You can test if a symbol works by: -1. Opening a chart with that symbol -2. If chart opens successfully, the symbol name is correct -3. Use that exact symbol name in the EA inputs diff --git a/frontline/MQL5/_united_dynamic/Strategies/RSISecretSauceStrategy.mqh b/frontline/MQL5/_united_dynamic/Strategies/RSISecretSauceStrategy.mqh deleted file mode 100644 index 73bc500..0000000 --- a/frontline/MQL5/_united_dynamic/Strategies/RSISecretSauceStrategy.mqh +++ /dev/null @@ -1,438 +0,0 @@ -//+------------------------------------------------------------------+ -//| RSISecretSauceStrategy.mqh | -//| RSI Secret Sauce: leave 70/30 zone, re-enter, peak/bottom entry | -//+------------------------------------------------------------------+ - -struct RSISecretSauceData -{ - string symbol; - bool isInitialized; - CTrade trade; - CPositionInfo positionInfo; - int rsiHandle; - int atrHandle; - double rsiBuffer[]; - double atrBuffer[]; - double highBuffer[]; - double lowBuffer[]; - bool rsiWasOverbought; - bool rsiWasOversold; - bool rsiBackInRange; - datetime lastRSIExitTime; - datetime lastRSIReentryTime; - datetime lastTradeTime; - datetime lastBarTime; - ENUM_TIMEFRAMES timeframe; - int rsiPeriod; - double rsiOverbought; - double rsiOversold; - int rsiLookback; - int peakBars; - bool requireDivergence; - double stopLossATR; - double takeProfitATR; - int atrPeriod; - bool useSwingStopLoss; - int swingLookback; - int maxPositions; - int minBarsBetweenTrades; - int magicNumber; - int slippage; -}; - -bool RSS_UpdateIndicators(RSISecretSauceData& d); -void RSS_UpdateRSIState(RSISecretSauceData& d); -bool RSS_CanOpenNewPosition(RSISecretSauceData& d); -void RSS_CheckEntrySignals(RSISecretSauceData& d, const double lotSize); -bool RSS_IsRSIPeak(RSISecretSauceData& d); -bool RSS_IsRSIBottom(RSISecretSauceData& d); -void RSS_OpenPosition(RSISecretSauceData& d, ENUM_POSITION_TYPE type, const double lotSize); -bool RSS_CalculateStops(RSISecretSauceData& d, double price, ENUM_POSITION_TYPE type, double& sl, double& tp); -double RSS_GetSwingStopLoss(RSISecretSauceData& d, ENUM_POSITION_TYPE type); - -bool InitRSISecretSauce(RSISecretSauceData& d, - const string symbol, - const ENUM_TIMEFRAMES timeframe, - const int rsiPeriod, - const double rsiOverbought, - const double rsiOversold, - const int rsiLookback, - const int peakBars, - const bool requireDivergence, - const double stopLossATR, - const double takeProfitATR, - const int atrPeriod, - const bool useSwingStopLoss, - const int swingLookback, - const int maxPositions, - const int minBarsBetweenTrades, - const int magicNumber, - const int slippage) -{ - d.symbol = symbol; - if(StringLen(d.symbol) == 0) - d.symbol = _Symbol; - d.isInitialized = false; - d.rsiHandle = INVALID_HANDLE; - d.atrHandle = INVALID_HANDLE; - d.rsiWasOverbought = false; - d.rsiWasOversold = false; - d.rsiBackInRange = false; - d.lastRSIExitTime = 0; - d.lastRSIReentryTime = 0; - d.lastTradeTime = 0; - d.lastBarTime = 0; - - if(!SymbolSelect(d.symbol, true)) - { - Print("RSISecretSauce: Symbol '", d.symbol, "' not available in Market Watch."); - return false; - } - - d.timeframe = timeframe; - d.rsiPeriod = rsiPeriod; - d.rsiOverbought = rsiOverbought; - d.rsiOversold = rsiOversold; - d.rsiLookback = rsiLookback; - d.peakBars = peakBars; - d.requireDivergence = requireDivergence; - d.stopLossATR = stopLossATR; - d.takeProfitATR = takeProfitATR; - d.atrPeriod = atrPeriod; - d.useSwingStopLoss = useSwingStopLoss; - d.swingLookback = swingLookback; - d.maxPositions = maxPositions; - d.minBarsBetweenTrades = minBarsBetweenTrades; - d.magicNumber = magicNumber; - d.slippage = slippage; - - Sleep(100); - int retry = 0; - while(retry < 5 && d.rsiHandle == INVALID_HANDLE) - { - d.rsiHandle = iRSI(d.symbol, d.timeframe, d.rsiPeriod, PRICE_CLOSE); - if(d.rsiHandle == INVALID_HANDLE) - { - if(GetLastError() == 4805 && retry < 4) - { - Sleep(1000); - retry++; - continue; - } - Print("RSISecretSauce: Failed to create RSI for '", d.symbol, "'"); - return false; - } - } - - retry = 0; - while(retry < 5 && d.atrHandle == INVALID_HANDLE) - { - d.atrHandle = iATR(d.symbol, d.timeframe, d.atrPeriod); - if(d.atrHandle == INVALID_HANDLE) - { - if(GetLastError() == 4805 && retry < 4) - { - Sleep(1000); - retry++; - continue; - } - Print("RSISecretSauce: Failed to create ATR for '", d.symbol, "'"); - IndicatorRelease(d.rsiHandle); - d.rsiHandle = INVALID_HANDLE; - return false; - } - } - - ArraySetAsSeries(d.rsiBuffer, true); - ArraySetAsSeries(d.atrBuffer, true); - ArraySetAsSeries(d.highBuffer, true); - ArraySetAsSeries(d.lowBuffer, true); - - d.trade.SetExpertMagicNumber(d.magicNumber); - d.trade.SetDeviationInPoints(d.slippage); - d.trade.SetTypeFilling(ORDER_FILLING_FOK); - - d.isInitialized = true; - Print("RSISecretSauce: Initialized for '", d.symbol, "' TF=", EnumToString(d.timeframe)); - return true; -} - -void DeinitRSISecretSauce(RSISecretSauceData& d) -{ - if(d.rsiHandle != INVALID_HANDLE) - IndicatorRelease(d.rsiHandle); - if(d.atrHandle != INVALID_HANDLE) - IndicatorRelease(d.atrHandle); - d.rsiHandle = INVALID_HANDLE; - d.atrHandle = INVALID_HANDLE; - d.isInitialized = false; -} - -bool RSS_UpdateIndicators(RSISecretSauceData& d) -{ - int rsiBarsNeeded = d.rsiLookback + 5; - if(CopyBuffer(d.rsiHandle, 0, 0, rsiBarsNeeded, d.rsiBuffer) < rsiBarsNeeded) - return false; - if(CopyBuffer(d.atrHandle, 0, 0, 2, d.atrBuffer) < 2) - return false; - if(CopyHigh(d.symbol, d.timeframe, 0, d.swingLookback + 5, d.highBuffer) < d.swingLookback + 5) - return false; - if(CopyLow(d.symbol, d.timeframe, 0, d.swingLookback + 5, d.lowBuffer) < d.swingLookback + 5) - return false; - return true; -} - -void RSS_UpdateRSIState(RSISecretSauceData& d) -{ - double rsiCurrent = d.rsiBuffer[0]; - double rsiPrev = d.rsiBuffer[1]; - - if(rsiPrev >= d.rsiOverbought && rsiCurrent < d.rsiOverbought) - { - d.rsiWasOverbought = true; - d.rsiBackInRange = true; - d.lastRSIExitTime = TimeCurrent(); - d.lastRSIReentryTime = TimeCurrent(); - } - - if(rsiPrev <= d.rsiOversold && rsiCurrent > d.rsiOversold) - { - d.rsiWasOversold = true; - d.rsiBackInRange = true; - d.lastRSIExitTime = TimeCurrent(); - d.lastRSIReentryTime = TimeCurrent(); - } - - if(rsiCurrent >= d.rsiOverbought) - { - d.rsiWasOverbought = false; - d.rsiBackInRange = false; - } - - if(rsiCurrent <= d.rsiOversold) - { - d.rsiWasOversold = false; - d.rsiBackInRange = false; - } -} - -bool RSS_CanOpenNewPosition(RSISecretSauceData& d) -{ - int positionCount = 0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - if(d.positionInfo.SelectByIndex(i)) - { - if(d.positionInfo.Symbol() == d.symbol && d.positionInfo.Magic() == d.magicNumber) - positionCount++; - } - } - - if(positionCount >= d.maxPositions) - return false; - - if(d.lastTradeTime > 0) - { - int barsSince = Bars(d.symbol, d.timeframe, d.lastTradeTime, TimeCurrent()); - if(barsSince < d.minBarsBetweenTrades) - return false; - } - - return true; -} - -bool RSS_IsRSIPeak(RSISecretSauceData& d) -{ - if(ArraySize(d.rsiBuffer) < d.peakBars + 2) - return false; - - double currentRSI = d.rsiBuffer[0]; - bool isPeak = true; - - for(int i = 1; i <= d.peakBars; i++) - { - if(d.rsiBuffer[i] >= currentRSI) - { - isPeak = false; - break; - } - } - - if(d.rsiBuffer[1] >= currentRSI) - isPeak = false; - - return isPeak; -} - -bool RSS_IsRSIBottom(RSISecretSauceData& d) -{ - if(ArraySize(d.rsiBuffer) < d.peakBars + 2) - return false; - - double currentRSI = d.rsiBuffer[0]; - bool isBottom = true; - - for(int i = 1; i <= d.peakBars; i++) - { - if(d.rsiBuffer[i] <= currentRSI) - { - isBottom = false; - break; - } - } - - if(d.rsiBuffer[1] <= currentRSI) - isBottom = false; - - return isBottom; -} - -void RSS_CheckEntrySignals(RSISecretSauceData& d, const double lotSize) -{ - if(d.rsiWasOverbought && d.rsiBackInRange) - { - if(d.rsiBuffer[0] < d.rsiOverbought) - { - if(RSS_IsRSIPeak(d)) - RSS_OpenPosition(d, POSITION_TYPE_BUY, lotSize); - } - } - - if(d.rsiWasOversold && d.rsiBackInRange) - { - if(d.rsiBuffer[0] > d.rsiOversold) - { - if(RSS_IsRSIBottom(d)) - RSS_OpenPosition(d, POSITION_TYPE_SELL, lotSize); - } - } -} - -bool RSS_CalculateStops(RSISecretSauceData& d, double price, ENUM_POSITION_TYPE type, double& sl, double& tp) -{ - double atrValue = d.atrBuffer[0]; - if(atrValue <= 0) - atrValue = price * 0.01; - - double slDistance = atrValue * d.stopLossATR; - double tpDistance = atrValue * d.takeProfitATR; - - int digits = (int)SymbolInfoInteger(d.symbol, SYMBOL_DIGITS); - double point = SymbolInfoDouble(d.symbol, SYMBOL_POINT); - int stopsLevel = (int)SymbolInfoInteger(d.symbol, SYMBOL_TRADE_STOPS_LEVEL); - double minStopDistance = MathMax(stopsLevel * point, point * 10); - - if(d.useSwingStopLoss) - { - double swingStop = RSS_GetSwingStopLoss(d, type); - if(swingStop > 0) - { - if(type == POSITION_TYPE_BUY) - { - if(swingStop < price && (price - swingStop) > minStopDistance) - slDistance = price - swingStop; - } - else - { - if(swingStop > price && (swingStop - price) > minStopDistance) - slDistance = swingStop - price; - } - } - } - - if(slDistance < minStopDistance) - slDistance = minStopDistance; - if(tpDistance < minStopDistance) - tpDistance = minStopDistance; - - if(type == POSITION_TYPE_BUY) - { - sl = NormalizeDouble(price - slDistance, digits); - tp = NormalizeDouble(price + tpDistance, digits); - } - else - { - sl = NormalizeDouble(price + slDistance, digits); - tp = NormalizeDouble(price - tpDistance, digits); - } - - return true; -} - -double RSS_GetSwingStopLoss(RSISecretSauceData& d, ENUM_POSITION_TYPE type) -{ - if(type == POSITION_TYPE_BUY) - { - double lowestLow = d.lowBuffer[0]; - for(int i = 1; i < d.swingLookback && i < ArraySize(d.lowBuffer); i++) - { - if(d.lowBuffer[i] < lowestLow) - lowestLow = d.lowBuffer[i]; - } - return lowestLow; - } - - double highestHigh = d.highBuffer[0]; - for(int i = 1; i < d.swingLookback && i < ArraySize(d.highBuffer); i++) - { - if(d.highBuffer[i] > highestHigh) - highestHigh = d.highBuffer[i]; - } - return highestHigh; -} - -void RSS_OpenPosition(RSISecretSauceData& d, ENUM_POSITION_TYPE type, const double lotSize) -{ - double price = (type == POSITION_TYPE_BUY) ? - SymbolInfoDouble(d.symbol, SYMBOL_ASK) : - SymbolInfoDouble(d.symbol, SYMBOL_BID); - - if(price <= 0) - return; - - double sl = 0.0, tp = 0.0; - if(!RSS_CalculateStops(d, price, type, sl, tp)) - return; - - string comment = "RSI_Secret_" + (type == POSITION_TYPE_BUY ? "LONG" : "SHORT"); - - bool result = false; - if(type == POSITION_TYPE_BUY) - result = d.trade.Buy(lotSize, d.symbol, 0, sl, tp, comment); - else - result = d.trade.Sell(lotSize, d.symbol, 0, sl, tp, comment); - - if(result) - { - d.lastTradeTime = TimeCurrent(); - if(type == POSITION_TYPE_BUY) - d.rsiWasOverbought = false; - else - d.rsiWasOversold = false; - d.rsiBackInRange = false; - } -} - -void ProcessRSISecretSauce(RSISecretSauceData& d, const double lotSize) -{ - if(!d.isInitialized) - return; - - int requiredBars = MathMax(d.rsiLookback, d.swingLookback) + 10; - if(Bars(d.symbol, d.timeframe) < requiredBars) - return; - - datetime currentBarTime = iTime(d.symbol, d.timeframe, 0); - if(currentBarTime == d.lastBarTime) - return; - - d.lastBarTime = currentBarTime; - - if(!RSS_UpdateIndicators(d)) - return; - - RSS_UpdateRSIState(d); - - if(RSS_CanOpenNewPosition(d)) - RSS_CheckEntrySignals(d, lotSize); -} diff --git a/frontline/MQL5/_united_dynamic/UnitedProfitPanel.mqh b/frontline/MQL5/_united_dynamic/UnitedProfitPanel.mqh deleted file mode 100644 index ae8eb2e..0000000 --- a/frontline/MQL5/_united_dynamic/UnitedProfitPanel.mqh +++ /dev/null @@ -1,437 +0,0 @@ -//+------------------------------------------------------------------+ -//| UnitedProfitPanel.mqh — chart object P&L by strategy / magic | -//| One OBJ_LABEL per line (MT5 often ignores \n in a single label). | -//| Include only after all United EA `input` declarations. | -//+------------------------------------------------------------------+ -#ifndef UNITED_PROFIT_PANEL_MQH -#define UNITED_PROFIT_PANEL_MQH - -#define UNITED_PNL_MAX_LINES 48 - -struct UnitedPnLRow -{ - string name; - long magic; -}; - -UnitedPnLRow g_unitedPnLRows[]; -int g_unitedPnLRowCount = 0; -int g_unitedPnL_visibleLineCount = 0; - -string UnitedPnL_Obj(const string suffix) { return "UnitedPnL_" + suffix; } - -long UnitedPnL_ChartId() { return ChartID(); } - -string UnitedPnL_LineObjName(const int idx) { return UnitedPnL_Obj("L") + IntegerToString(idx); } - -datetime UnitedPnL_StartOfYear(const datetime now) -{ - MqlDateTime dt; - TimeToStruct(now, dt); - dt.mon = 1; - dt.day = 1; - dt.hour = 0; - dt.min = 0; - dt.sec = 0; - return StructToTime(dt); -} - -datetime UnitedPnL_StartOfMonth(const datetime now) -{ - MqlDateTime dt; - TimeToStruct(now, dt); - dt.day = 1; - dt.hour = 0; - dt.min = 0; - dt.sec = 0; - return StructToTime(dt); -} - -int UnitedPnL_FindRowIndex(const long magic) -{ - for(int r = 0; r < g_unitedPnLRowCount; r++) - { - if(g_unitedPnLRows[r].magic == magic) - return r; - } - return -1; -} - -bool UnitedPnL_ScanDealsOnce(double &yearPl[], double &monthPl[], const datetime y0, const datetime m0, const datetime now) -{ - const int R = g_unitedPnLRowCount; - ArrayResize(yearPl, R); - ArrayResize(monthPl, R); - for(int j = 0; j < R; j++) - { - yearPl[j] = 0.0; - monthPl[j] = 0.0; - } - - if(R <= 0 || y0 >= now) - return true; - - datetime to = now; - if(to <= y0) - to = y0 + 1; - - if(!HistorySelect(y0, to)) - return false; - - const int n = HistoryDealsTotal(); - for(int i = 0; i < n; i++) - { - const ulong dealTicket = HistoryDealGetTicket(i); - if(dealTicket == 0) - continue; - - const long mg = (long)HistoryDealGetInteger(dealTicket, DEAL_MAGIC); - const int idx = UnitedPnL_FindRowIndex(mg); - if(idx < 0) - continue; - - const datetime dt = (datetime)HistoryDealGetInteger(dealTicket, DEAL_TIME); - const double p = HistoryDealGetDouble(dealTicket, DEAL_PROFIT) - + HistoryDealGetDouble(dealTicket, DEAL_SWAP) - + HistoryDealGetDouble(dealTicket, DEAL_COMMISSION); - - yearPl[idx] += p; - if(dt >= m0) - monthPl[idx] += p; - } - return true; -} - -double UnitedPnL_SumFloatingForMagic(const long magic) -{ - double sum = 0.0; - for(int i = PositionsTotal() - 1; i >= 0; i--) - { - const ulong ticket = PositionGetTicket(i); - if(ticket == 0) - continue; - if(!PositionSelectByTicket(ticket)) - continue; - if((long)PositionGetInteger(POSITION_MAGIC) != magic) - continue; - sum += PositionGetDouble(POSITION_PROFIT); - sum += PositionGetDouble(POSITION_SWAP); - } - return sum; -} - -void UnitedPnL_CollectRows() -{ - g_unitedPnLRowCount = 0; - ArrayResize(g_unitedPnLRows, 24); - - if(EnableDarvasBox) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "DarvasBox"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)DB_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableEMASlopeDistance) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "EMASlope"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)ES_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSICrossOverReversal) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RSICrossOver"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RC_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIMidPointHijack) - { - if(RM_InpEnableRSIFollow) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RM_RSIFollow"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RM_InpMagicNumberRSIFollow; - g_unitedPnLRowCount++; - } - if(RM_InpEnableRSIReverse) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RM_RSIRev"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RM_InpMagicNumberRSIReverse; - g_unitedPnLRowCount++; - } - if(RM_InpEnableEMACross) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RM_EMACross"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RM_InpMagicNumberEMACross; - g_unitedPnLRowCount++; - } - } - if(EnableRSIScalpingAPPL) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RS_Scalp_AAPL"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RS_APPL_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIScalpingBTCUSD) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RS_Scalp_BTC"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RS_BTCUSD_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIScalpingNVDA) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RS_Scalp_NVDA"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RS_NVDA_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIScalpingTSLA) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RS_Scalp_TSLA"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RS_TSLA_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIScalpingXAUUSD) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RS_Scalp_XAU"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RS_XAUUSD_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIReversalEURUSD) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RRA_EURUSD"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RRA_EURUSD_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSIReversalAUDUSD) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "RRA_AUDUSD"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RRA_AUDUSD_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableRSISecretSauceXAUUSD) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "SecretSauce"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)RSS_XAUUSD_MagicNumber; - g_unitedPnLRowCount++; - } - if(EnableSuperEMA) - { - g_unitedPnLRows[g_unitedPnLRowCount].name = "SuperEMA"; - g_unitedPnLRows[g_unitedPnLRowCount].magic = (long)SE_MagicNumber; - g_unitedPnLRowCount++; - } - - ArrayResize(g_unitedPnLRows, MathMax(g_unitedPnLRowCount, 1)); -} - -void UnitedPnL_EnsureObjects() -{ - const long ch = UnitedPnL_ChartId(); - const string bg = UnitedPnL_Obj("BG"); - if(ObjectFind(ch, bg) < 0) - { - if(!ObjectCreate(ch, bg, OBJ_RECTANGLE_LABEL, 0, 0, 0)) - { - Print("UnitedPnL: BG ObjectCreate failed, err=", GetLastError()); - return; - } - ObjectSetInteger(ch, bg, OBJPROP_BORDER_TYPE, BORDER_FLAT); - ObjectSetInteger(ch, bg, OBJPROP_COLOR, C'90,90,90'); - ObjectSetInteger(ch, bg, OBJPROP_BGCOLOR, C'25,25,30'); - ObjectSetInteger(ch, bg, OBJPROP_WIDTH, 1); - ObjectSetInteger(ch, bg, OBJPROP_BACK, false); - ObjectSetInteger(ch, bg, OBJPROP_SELECTABLE, false); - ObjectSetInteger(ch, bg, OBJPROP_HIDDEN, false); - ObjectSetInteger(ch, bg, OBJPROP_ZORDER, 0); - } - - for(int i = 0; i < UNITED_PNL_MAX_LINES; i++) - { - const string nm = UnitedPnL_LineObjName(i); - if(ObjectFind(ch, nm) >= 0) - continue; - if(!ObjectCreate(ch, nm, OBJ_LABEL, 0, 0, 0)) - { - Print("UnitedPnL: line ", i, " ObjectCreate failed, err=", GetLastError()); - continue; - } - ObjectSetString(ch, nm, OBJPROP_FONT, "Arial"); - ObjectSetInteger(ch, nm, OBJPROP_FONTSIZE, UnitedPanel_FontSize); - ObjectSetInteger(ch, nm, OBJPROP_BACK, false); - ObjectSetInteger(ch, nm, OBJPROP_SELECTABLE, false); - ObjectSetInteger(ch, nm, OBJPROP_HIDDEN, false); - ObjectSetInteger(ch, nm, OBJPROP_ZORDER, 2); - } -} - -void UnitedPnL_ApplyGeometry() -{ - if(!UnitedPanel_Enable) - return; - const long ch = UnitedPnL_ChartId(); - const string bg = UnitedPnL_Obj("BG"); - if(ObjectFind(ch, bg) < 0) - return; - - const int lineH = UnitedPanel_FontSize + 5; - const int vis = MathMax(g_unitedPnL_visibleLineCount, 6); - const int h = UnitedPanel_YMargin * 2 + lineH * vis; - - const ENUM_BASE_CORNER corner = (ENUM_BASE_CORNER)UnitedPanel_Corner; - ObjectSetInteger(ch, bg, OBJPROP_CORNER, corner); - ObjectSetInteger(ch, bg, OBJPROP_XDISTANCE, UnitedPanel_X); - ObjectSetInteger(ch, bg, OBJPROP_YDISTANCE, UnitedPanel_Y); - ObjectSetInteger(ch, bg, OBJPROP_XSIZE, UnitedPanel_Width); - ObjectSetInteger(ch, bg, OBJPROP_YSIZE, MathMax(h, 80)); - - const int baseX = UnitedPanel_X + UnitedPanel_XMargin; - const int baseY = UnitedPanel_Y + UnitedPanel_YMargin; - for(int i = 0; i < UNITED_PNL_MAX_LINES; i++) - { - const string nm = UnitedPnL_LineObjName(i); - if(ObjectFind(ch, nm) < 0) - continue; - ObjectSetInteger(ch, nm, OBJPROP_CORNER, corner); - ObjectSetInteger(ch, nm, OBJPROP_XDISTANCE, baseX); - ObjectSetInteger(ch, nm, OBJPROP_YDISTANCE, baseY + i * lineH); - ObjectSetInteger(ch, nm, OBJPROP_FONTSIZE, UnitedPanel_FontSize); - } -} - -void UnitedPnL_RefreshText() -{ - const long ch = UnitedPnL_ChartId(); - const string bg = UnitedPnL_Obj("BG"); - if(ObjectFind(ch, bg) < 0) - return; - - UnitedPnL_CollectRows(); - - const datetime now = TimeCurrent(); - const datetime y0 = UnitedPnL_StartOfYear(now); - const datetime m0 = UnitedPnL_StartOfMonth(now); - const string cur = AccountInfoString(ACCOUNT_CURRENCY); - - double yearPl[]; - double monthPl[]; - const bool histOk = UnitedPnL_ScanDealsOnce(yearPl, monthPl, y0, m0, now); - const string histNote = histOk ? "" : " [hist fail: Toolbox>History]"; - - double sumY = 0.0, sumM = 0.0, sumF = 0.0; - - string lines[]; - int n = 0; - ArrayResize(lines, UNITED_PNL_MAX_LINES); - - lines[n++] = "United EA " + cur + histNote; - lines[n++] = UnitedPanel_ShowFloating - ? "Y/M = closed deals | F = open P/L+swap" - : "Y/M = closed deal P/L+swap+comm"; - lines[n++] = "----------------------------------"; - - for(int r = 0; r < g_unitedPnLRowCount; r++) - { - const long mg = g_unitedPnLRows[r].magic; - double yv = 0.0, mv = 0.0; - if(histOk && r < ArraySize(yearPl)) - yv = yearPl[r]; - if(histOk && r < ArraySize(monthPl)) - mv = monthPl[r]; - const double fv = UnitedPanel_ShowFloating ? UnitedPnL_SumFloatingForMagic(mg) : 0.0; - sumY += yv; - sumM += mv; - sumF += fv; - } - - string tot = "TOTAL Y:" + DoubleToString(sumY, 2) + " M:" + DoubleToString(sumM, 2); - if(UnitedPanel_ShowFloating) - tot += " F:" + DoubleToString(sumF, 2); - lines[n++] = tot; - lines[n++] = "----------------------------------"; - - if(g_unitedPnLRowCount == 0) - lines[n++] = "(no strategies enabled)"; - else - { - for(int r = 0; r < g_unitedPnLRowCount; r++) - { - if(n >= UNITED_PNL_MAX_LINES - 1) - break; - const long mg = g_unitedPnLRows[r].magic; - double yv = 0.0, mv = 0.0; - if(histOk && r < ArraySize(yearPl)) - yv = yearPl[r]; - if(histOk && r < ArraySize(monthPl)) - mv = monthPl[r]; - const double fv = UnitedPanel_ShowFloating ? UnitedPnL_SumFloatingForMagic(mg) : 0.0; - - lines[n++] = g_unitedPnLRows[r].name + " [" + IntegerToString((int)mg) + "]"; - string row2 = " Y:" + DoubleToString(yv, 2) + " M:" + DoubleToString(mv, 2); - if(UnitedPanel_ShowFloating) - row2 += " F:" + DoubleToString(fv, 2); - lines[n++] = row2; - } - } - - g_unitedPnL_visibleLineCount = n; - - color c = clrSilver; - if(sumM > 0.0001) - c = clrPaleGreen; - else if(sumM < -0.0001) - c = clrTomato; - - for(int i = 0; i < UNITED_PNL_MAX_LINES; i++) - { - const string nm = UnitedPnL_LineObjName(i); - if(ObjectFind(ch, nm) < 0) - continue; - if(i < n) - { - ObjectSetString(ch, nm, OBJPROP_TEXT, lines[i]); - ObjectSetInteger(ch, nm, OBJPROP_COLOR, c); - } - else - { - ObjectSetString(ch, nm, OBJPROP_TEXT, ""); - } - } - - UnitedPnL_ApplyGeometry(); - ChartRedraw(ch); -} - -void UnitedProfitPanelInit() -{ - if(!UnitedPanel_Enable) - return; - UnitedPnL_EnsureObjects(); - UnitedPnL_CollectRows(); - g_unitedPnL_visibleLineCount = 6; - UnitedPnL_ApplyGeometry(); - UnitedPnL_RefreshText(); -} - -void UnitedProfitPanelDeinit() -{ - ObjectsDeleteAll(UnitedPnL_ChartId(), "UnitedPnL_"); -} - -void UnitedProfitPanelRefresh() -{ - if(!UnitedPanel_Enable) - return; - UnitedPnL_RefreshText(); -} - -void UnitedProfitPanelOnChartEvent(const int id) -{ - if(!UnitedPanel_Enable) - return; - if(id == CHARTEVENT_CHART_CHANGE) - { - UnitedPnL_CollectRows(); - UnitedPnL_ApplyGeometry(); - ChartRedraw(UnitedPnL_ChartId()); - } -} - -#endif diff --git a/frontline/MQL5/_united_dynamic/report/ReportHistory-51389369.xlsx b/frontline/MQL5/_united_dynamic/report/ReportHistory-51389369.xlsx deleted file mode 100644 index 2c70abbcf57917a227eec2d439acfadabf60a03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264920 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 diff --git a/frontline/MQL5/_united_dynamic/report/fig-pnl-by-magic.tex b/frontline/MQL5/_united_dynamic/report/fig-pnl-by-magic.tex deleted file mode 100644 index ef4e2c2..0000000 --- a/frontline/MQL5/_united_dynamic/report/fig-pnl-by-magic.tex +++ /dev/null @@ -1,6 +0,0 @@ -\begin{figure}[t] - \centering - \includegraphics[width=\linewidth]{frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.pdf} - \caption{Net closed P\&L by robot magic number from the united\_dynamic live report export. Bars show net realized P\&L (USD) and the label \texttt{n} is the number of closed trades. Because the MT5 report does not expose per-deal magic directly in this extract, XAUUSD trades that come from multiple XAU strategies are shown as one mixed bucket.} - \label{fig:united-dynamic-pnl-by-magic} -\end{figure} diff --git a/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries-by-robot.tex b/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries-by-robot.tex deleted file mode 100644 index 27aceb6..0000000 --- a/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries-by-robot.tex +++ /dev/null @@ -1,6 +0,0 @@ -\begin{figure*}[t] - \centering - \includegraphics[width=\textwidth]{frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.pdf} - \caption{Cumulative closed P\&L over time split by robot. Non-XAU robots are mapped directly by symbol-to-magic configuration; XAU trades are assigned by ticket-matched strategy comments when available, and otherwise grouped into an unattributed XAU bucket.} - \label{fig:united-dynamic-pnl-timeseries-by-robot} -\end{figure*} diff --git a/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries.tex b/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries.tex deleted file mode 100644 index 869a4af..0000000 --- a/frontline/MQL5/_united_dynamic/report/fig-pnl-timeseries.tex +++ /dev/null @@ -1,6 +0,0 @@ -\begin{figure}[t] - \centering - \includegraphics[width=\linewidth]{frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.pdf} - \caption{Cumulative closed P\&L over time for the united\_dynamic account history in \texttt{ReportHistory-51389369.xlsx}. The curve is formed by sorting closed deals by close timestamp and cumulatively summing realized deal P\&L.} - \label{fig:united-dynamic-pnl-timeseries} -\end{figure} diff --git a/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.csv b/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.csv deleted file mode 100644 index ffdc7b1..0000000 --- a/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.csv +++ /dev/null @@ -1,9 +0,0 @@ -symbol,magic_number,robot,count,sum -MSFT.US,20002,RSI Scalping MSFT,12,-1042.0 -EURUSD,30001,RSI Reversal Asian EURUSD,20,-264.84999999999997 -BTCUSD,123459123,RSI Scalping BTCUSD,11,-203.41000000000003 -NVDA.US,20003,RSI Scalping NVDA,32,-42.54000000000002 -AAPL.US,20001,RSI Scalping AAPL,5,-2.0 -AUDUSD,30002,RSI Reversal Asian AUDUSD,14,78.08000000000001 -XAUUSD,MIXED,XAUUSD Multi-Strategy Bucket,291,1953.66 -TSLA.US,125421321,RSI Scalping TSLA,16,2352.57 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.pdf b/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.pdf deleted file mode 100644 index d568aef4eabbe3d0371d30ccc9d8e40ecc56d70a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21450 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 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.png b/frontline/MQL5/_united_dynamic/report/pnl_by_magic_robot.png deleted file mode 100644 index e698c1f79b1803ec27351f8849d18d1aae9bd2c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140663 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 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.csv b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.csv deleted file mode 100644 index bf2bc4b..0000000 --- a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.csv +++ /dev/null @@ -1,386 +0,0 @@ -close_time,125421321 RSI Scalping TSLA,XAU Unattributed (multiple robots),129102315 RSI Scalping XAUUSD,30002 RSI Reversal Asian AUDUSD,20003 RSI Scalping NVDA,12350 EMA Slope Distance (XAU),123459123 RSI Scalping BTCUSD,30001 RSI Reversal Asian EURUSD,20002 RSI Scalping MSFT -2026-01-05 08:00:00,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 -2026-01-05 12:06:01,0.0,0.0,0.0,0.0,0.0,61.98,0.0,0.0,0.0 -2026-01-05 18:06:21,0.0,0.0,0.0,0.0,0.0,86.07,0.0,0.0,0.0 -2026-01-06 07:55:38,0.0,0.0,0.0,0.0,0.0,86.07,0.0,-3.0,0.0 -2026-01-06 08:00:00,0.0,0.0,0.0,4.2,0.0,86.07,0.0,-3.0,0.0 -2026-01-06 12:00:00,0.0,0.0,-81.78,4.2,0.0,86.07,0.0,-3.0,0.0 -2026-01-06 15:13:04,0.0,0.0,-78.69,4.2,0.0,86.07,0.0,-3.0,0.0 -2026-01-06 16:39:10,0.0,0.0,-78.69,4.2,0.0,111.69,0.0,-3.0,0.0 -2026-01-06 19:42:51,0.0,0.0,-78.69,4.2,0.0,101.72999999999999,0.0,-3.0,0.0 -2026-01-07 08:00:00,0.0,0.0,-78.69,12.2,0.0,101.72999999999999,0.0,-3.0,0.0 -2026-01-07 11:00:00,0.0,0.0,-78.69,12.2,0.0,29.189999999999984,0.0,-3.0,0.0 -2026-01-08 08:21:15,0.0,0.0,-78.69,12.2,0.0,29.339999999999982,0.0,-3.0,0.0 -2026-01-08 18:00:00,0.0,0.0,-78.69,12.2,0.0,29.339999999999982,0.0,-3.0,-49.1 -2026-01-09 07:00:00,0.0,0.0,-78.69,12.2,0.0,29.339999999999982,0.0,-3.0,-49.1 -2026-01-12 03:00:00,0.0,0.0,296.85,12.2,0.0,29.339999999999982,0.0,-3.0,-49.1 -2026-01-12 05:43:32,0.0,0.0,296.85,12.2,0.0,36.11999999999998,0.0,-3.0,-49.1 -2026-01-12 06:00:00,0.0,0.0,296.85,12.2,0.0,35.399999999999984,0.0,-3.0,-49.1 -2026-01-12 06:01:28,0.0,0.0,296.85,12.2,0.0,35.399999999999984,0.0,-3.8,-49.1 -2026-01-13 00:01:01,0.0,0.0,296.85,12.2,0.0,35.399999999999984,0.0,-10.2,-49.1 -2026-01-13 03:00:00,0.0,0.0,246.06000000000003,12.2,0.0,35.399999999999984,0.0,-10.2,-49.1 -2026-01-13 16:28:43,0.0,0.0,267.48,12.2,0.0,56.819999999999986,0.0,-10.2,-49.1 -2026-01-13 20:00:00,0.0,0.0,267.48,12.2,0.0,-63.00000000000001,0.0,-10.2,-49.1 -2026-01-14 05:28:14,0.0,0.0,267.48,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-14 07:19:03,0.0,0.0,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-14 15:00:44,0.0,-11.19,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-14 17:11:47,49.1,-11.19,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-15 03:00:00,49.1,-74.88,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-15 07:28:43,49.1,-69.75,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-15 17:00:00,49.1,-141.66,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-16 08:00:00,49.1,-152.35999999999999,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-19 01:01:01,49.1,-348.98,305.1,12.2,0.0,-72.63000000000001,0.0,-10.2,-49.1 -2026-01-19 02:08:19,49.1,-348.98,305.1,12.2,0.0,-72.63000000000001,0.0,-0.6999999999999993,-49.1 -2026-01-19 03:00:46,49.1,-354.74,305.1,12.2,0.0,-72.63000000000001,0.0,-0.6999999999999993,-49.1 -2026-01-19 04:00:26,49.1,-354.74,305.1,12.2,0.0,-72.63000000000001,0.0,9.4,-49.1 -2026-01-20 00:01:00,49.1,-354.74,305.1,12.2,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 07:24:12,49.1,-282.38,305.1,12.2,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 08:00:00,49.1,-282.38,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 09:51:16,49.1,-271.4,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 10:19:24,49.1,-254.29999999999998,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 12:00:07,49.1,-247.93999999999997,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-20 15:34:19,49.1,-237.22999999999996,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-5.199999999999999,-49.1 -2026-01-21 00:01:00,49.1,-237.22999999999996,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-21 17:24:43,49.1,-145.00999999999996,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 02:00:00,49.1,-361.5799999999999,305.1,-4.199999999999999,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 08:00:00,49.1,-459.2299999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 18:00:00,23.700000000000003,-459.2299999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 18:30:02,23.700000000000003,-434.1799999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 21:27:07,23.700000000000003,-334.9099999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-22 22:00:00,23.700000000000003,-335.6599999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-23 03:00:00,23.700000000000003,-498.8299999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.3,-49.1 -2026-01-23 04:44:42,23.700000000000003,-498.8299999999999,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-23 05:16:54,23.700000000000003,-506.74999999999994,305.1,-31.4,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-23 08:00:00,23.700000000000003,-506.74999999999994,305.1,-46.0,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-23 11:00:00,23.700000000000003,-388.3399999999999,305.1,-46.0,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-26 04:00:00,23.700000000000003,34.3300000000001,305.1,-46.0,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-26 08:00:00,23.700000000000003,34.3300000000001,305.1,-34.4,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-26 21:00:00,23.700000000000003,65.1700000000001,305.1,-34.4,0.0,-72.63000000000001,0.0,-81.39999999999999,-49.1 -2026-01-27 00:01:00,23.700000000000003,65.1700000000001,305.1,-34.4,0.0,-72.63000000000001,0.0,-214.09999999999997,-49.1 -2026-01-27 04:00:00,23.700000000000003,-41.089999999999904,305.1,-34.4,0.0,-72.63000000000001,0.0,-214.09999999999997,-49.1 -2026-01-27 05:07:00,23.700000000000003,-41.089999999999904,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 06:09:45,23.700000000000003,-40.60999999999991,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 08:50:00,23.700000000000003,-5.089999999999904,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 09:12:16,23.700000000000003,-0.25999999999990386,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 11:45:33,23.700000000000003,2.560000000000096,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 16:00:00,23.700000000000003,-61.159999999999904,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 17:03:41,54.300000000000004,-61.159999999999904,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-27 23:00:30,54.300000000000004,159.3400000000001,305.1,-34.4,0.0,-72.63000000000001,0.0,-207.59999999999997,-49.1 -2026-01-28 03:31:17,54.300000000000004,159.3400000000001,305.1,-34.4,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 07:01:59,54.300000000000004,588.97,305.1,-34.4,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 08:00:00,54.300000000000004,588.97,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 09:00:38,54.300000000000004,601.69,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 10:12:05,54.300000000000004,603.82,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 14:12:22,54.300000000000004,604.0,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 17:12:17,54.300000000000004,647.86,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,-49.1 -2026-01-28 18:53:19,54.300000000000004,647.86,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,2.3999999999999986 -2026-01-28 19:08:19,54.300000000000004,645.46,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,2.3999999999999986 -2026-01-29 02:00:01,54.300000000000004,-0.8899999999999864,305.1,-27.2,0.0,-72.63000000000001,0.0,-171.69999999999996,2.3999999999999986 -2026-01-29 07:58:06,54.300000000000004,-0.8899999999999864,305.1,-27.2,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-29 08:00:00,54.300000000000004,-0.8899999999999864,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-29 12:38:43,54.300000000000004,8.890000000000013,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 01:01:01,54.300000000000004,-650.63,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 04:00:00,54.300000000000004,-1064.69,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 06:00:34,54.300000000000004,-1001.1800000000001,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 07:00:00,54.300000000000004,-1003.58,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 09:00:00,54.300000000000004,-1044.07,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 11:00:10,54.300000000000004,-873.4,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 20:00:04,54.300000000000004,-397.51,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-01-30 23:00:03,54.300000000000004,-318.01,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 02:00:00,54.300000000000004,-244.57,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 04:00:10,54.300000000000004,-85.47999999999999,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 07:13:20,54.300000000000004,-60.609999999999985,305.1,-57.8,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 08:00:00,54.300000000000004,-60.609999999999985,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 08:12:16,54.300000000000004,-30.879999999999985,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 09:16:31,54.300000000000004,-23.319999999999986,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 10:24:18,54.300000000000004,32.72000000000001,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-03 17:27:59,154.4,32.72000000000001,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-159.99999999999997,2.3999999999999986 -2026-02-04 04:50:05,154.4,32.72000000000001,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-152.49999999999997,2.3999999999999986 -2026-02-04 07:00:00,154.4,31.830000000000013,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-152.49999999999997,2.3999999999999986 -2026-02-04 07:00:02,154.4,482.03999999999996,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-152.49999999999997,2.3999999999999986 -2026-02-04 12:13:15,154.4,487.61999999999995,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-152.49999999999997,2.3999999999999986 -2026-02-04 18:24:11,154.4,558.9,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-152.49999999999997,2.3999999999999986 -2026-02-05 00:01:00,154.4,558.9,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-05 01:01:00,154.4,305.93999999999994,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-05 04:00:00,154.4,145.13999999999993,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-05 08:00:12,154.4,155.80999999999992,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-05 17:48:31,154.4,177.07999999999993,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-05 23:01:58,154.4,181.36999999999992,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-06 01:01:01,154.4,131.0399999999999,305.1,-61.599999999999994,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-06 04:01:08,154.4,131.0399999999999,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-06 08:00:00,154.4,-452.8200000000001,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 03:51:31,154.4,-249.7200000000001,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 03:59:22,154.4,-83.5700000000001,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 07:00:00,154.4,-87.02000000000011,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 13:00:00,154.4,73.72999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 15:00:02,154.4,69.55999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-09 17:43:21,-126.6,69.55999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 05:00:00,-126.6,-29.140000000000114,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 07:00:00,-126.6,-30.010000000000115,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 07:15:30,-126.6,50.63999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 10:50:55,-126.6,76.61999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 11:13:05,-126.6,111.65999999999988,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 12:54:34,-126.6,123.17999999999988,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 13:18:10,-126.6,126.59999999999988,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 16:25:00,-126.6,213.71999999999989,305.1,9.400000000000006,0.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 16:45:00,-126.6,213.71999999999989,305.1,9.400000000000006,2.0,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 17:00:00,-126.6,213.71999999999989,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 17:15:40,-126.6,213.8999999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,2.3999999999999986 -2026-02-10 21:00:01,-126.6,213.8999999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 04:02:06,-126.6,237.0299999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 07:48:46,-126.6,237.9299999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 08:00:00,-126.6,218.2799999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 11:49:18,-126.6,235.7999999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 12:27:16,-126.6,295.1599999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 13:24:06,-126.6,304.6699999999999,305.1,9.400000000000006,2.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 17:25:57,-126.6,304.6699999999999,305.1,9.400000000000006,3.0,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-11 19:20:00,-126.6,304.6699999999999,305.1,9.400000000000006,3.0,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 05:00:00,-126.6,174.6699999999999,305.1,9.400000000000006,3.0,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 07:00:00,-126.6,173.1699999999999,305.1,9.400000000000006,3.0,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 09:00:00,-126.6,14.919999999999902,305.1,9.400000000000006,3.0,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 17:45:00,-126.6,14.919999999999902,305.1,9.400000000000006,17.45,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 18:00:01,-126.6,14.919999999999902,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 20:01:58,-126.6,43.119999999999905,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-12 23:02:07,-126.6,97.1499999999999,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 05:18:27,-126.6,105.3999999999999,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 08:00:00,-126.6,0.9699999999998994,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 15:42:45,-126.6,-294.7100000000001,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 19:00:00,-126.6,-488.5700000000001,305.1,9.400000000000006,19.849999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 21:42:00,-126.6,-488.5700000000001,305.1,9.400000000000006,28.349999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 21:58:36,-126.6,-446.1500000000001,305.1,9.400000000000006,28.349999999999998,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-13 22:00:00,-126.6,-446.1500000000001,305.1,9.400000000000006,32.55,-72.63000000000001,0.0,-129.39999999999998,-20.5 -2026-02-16 02:00:00,-126.6,-446.1500000000001,305.1,9.400000000000006,32.55,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-16 05:00:00,-126.6,-579.1000000000001,305.1,9.400000000000006,32.55,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-17 17:00:00,-49.8,-579.1000000000001,305.1,9.400000000000006,32.55,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-17 17:45:00,-49.8,-579.1000000000001,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-19 22:00:00,-49.8,-133.80000000000013,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-20 07:00:00,-49.8,-201.30000000000013,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-23 02:00:00,-49.8,1316.8999999999999,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 02:00:00,-49.8,407.79999999999984,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 04:00:00,-49.8,860.9999999999998,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 10:01:34,-49.8,880.3799999999998,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 14:01:01,-49.8,873.7799999999997,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 18:00:00,-49.8,759.9899999999998,305.1,9.400000000000006,26.449999999999996,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-24 18:15:00,-49.8,759.9899999999998,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-25 05:55:01,-49.8,762.1799999999998,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-25 08:00:56,-49.8,811.8899999999999,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-25 16:00:00,-49.8,634.3899999999999,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-25 18:07:26,-49.8,624.6399999999999,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-25 23:00:03,-49.8,442.65999999999985,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-26 03:00:00,-49.8,375.05999999999983,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,-16.6,-129.39999999999998,-20.5 -2026-02-26 06:00:00,-49.8,375.05999999999983,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 13:00:00,-49.8,293.0099999999998,305.1,9.400000000000006,-58.300000000000004,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 16:45:00,-49.8,293.0099999999998,305.1,9.400000000000006,21.699999999999996,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 16:46:48,-49.8,293.0099999999998,305.1,9.400000000000006,26.399999999999995,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 16:46:53,-49.8,293.0099999999998,305.1,9.400000000000006,52.099999999999994,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 16:46:56,-49.8,293.0099999999998,305.1,9.400000000000006,89.94999999999999,-72.63000000000001,106.34,-129.39999999999998,-20.5 -2026-02-26 18:56:28,-49.8,293.0099999999998,305.1,9.400000000000006,89.94999999999999,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-26 20:45:00,-49.8,293.0099999999998,305.1,9.400000000000006,40.44999999999999,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-26 22:30:01,-49.8,293.0099999999998,305.1,9.400000000000006,3.6999999999999886,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 07:00:01,-49.8,292.3299999999998,305.1,9.400000000000006,3.6999999999999886,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 16:45:00,-49.8,292.3299999999998,305.1,9.400000000000006,5.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 18:00:00,-49.8,292.3299999999998,305.1,9.400000000000006,13.199999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 18:00:33,-49.8,329.3799999999998,305.1,9.400000000000006,13.199999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 18:15:00,-49.8,329.3799999999998,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 20:15:53,-49.8,337.0899999999998,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 21:03:14,187.2,337.0899999999998,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-02-27 23:01:44,187.2,377.5299999999998,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 01:03:37,187.2,1653.3299999999997,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 02:00:03,187.2,1747.1699999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 06:01:54,187.2,1803.8999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 09:01:24,187.2,1889.0999999999997,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 09:13:03,187.2,1095.8999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 17:00:00,187.2,1730.3999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 18:00:30,187.2,1378.8899999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-02 23:30:48,187.2,1418.6999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 02:00:21,187.2,1442.7299999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 05:17:20,187.2,1477.2599999999995,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 11:00:00,187.2,530.9999999999995,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 12:00:00,187.2,529.2599999999995,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 13:00:18,187.2,593.6999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-18.25 -2026-03-03 16:31:02,187.2,593.6999999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-03 17:00:05,187.2,897.6599999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-03 20:00:21,187.2,935.6399999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-03 22:00:04,187.2,996.3299999999997,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-04 18:00:00,187.2,828.2399999999997,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-04 20:00:10,187.2,844.6499999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,106.34,-129.39999999999998,-98.75 -2026-03-05 04:00:00,187.2,844.6499999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 05:00:00,187.2,668.1899999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 09:00:00,187.2,415.9899999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 16:00:00,187.2,371.4299999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 16:00:11,187.2,456.3299999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 19:02:14,187.2,515.6099999999996,305.1,9.400000000000006,11.449999999999989,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-05 20:30:00,187.2,515.6099999999996,305.1,9.400000000000006,-1.0500000000000114,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-06 12:00:00,187.2,417.5299999999996,305.1,9.400000000000006,-1.0500000000000114,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-06 15:00:00,187.2,355.42999999999955,305.1,9.400000000000006,-1.0500000000000114,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-06 17:00:00,187.2,209.44999999999956,305.1,9.400000000000006,-1.0500000000000114,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-06 22:30:00,187.2,209.44999999999956,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 01:01:22,187.2,288.10999999999956,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 04:06:01,187.2,357.8299999999996,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 05:00:00,187.2,-362.5700000000004,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 09:00:00,187.2,-525.8900000000003,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 12:01:35,187.2,-530.5700000000003,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 17:00:00,599.95,-530.5700000000003,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-09 17:00:25,599.95,-500.0600000000003,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 01:01:33,599.95,-490.52000000000027,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 05:02:32,599.95,-405.5600000000003,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 08:00:01,599.95,-407.40000000000026,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 09:05:27,599.95,-379.41000000000025,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 11:03:06,599.95,-369.30000000000024,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 17:00:17,599.95,-311.97000000000025,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-10 19:03:01,599.95,-253.23000000000025,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-11 07:00:00,599.95,-253.71000000000024,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-11 10:00:00,599.95,299.38999999999976,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-11 15:00:01,599.95,158.68999999999977,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-11 16:31:01,510.95000000000005,158.68999999999977,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-98.75 -2026-03-11 18:00:00,510.95000000000005,158.68999999999977,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 03:09:47,510.95000000000005,155.53999999999976,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 06:01:28,510.95000000000005,152.23999999999975,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 11:00:00,510.95000000000005,32.05999999999975,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 12:00:00,510.95000000000005,40.11999999999975,305.1,9.400000000000006,-71.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 17:30:01,510.95000000000005,40.11999999999975,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 18:46:42,510.95000000000005,102.39999999999975,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 19:04:29,510.95000000000005,151.41999999999976,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-131.25 -2026-03-12 21:00:02,510.95000000000005,151.41999999999976,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-12 21:01:15,510.95000000000005,196.56999999999977,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-12 23:01:04,510.95000000000005,216.24999999999977,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-13 08:00:00,510.95000000000005,195.32999999999976,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-13 18:00:14,510.95000000000005,286.34999999999974,305.1,9.400000000000006,27.19999999999999,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-13 19:30:00,510.95000000000005,286.34999999999974,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,259.51,-129.39999999999998,-174.5 -2026-03-13 23:00:00,510.95000000000005,286.34999999999974,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-13 23:00:35,510.95000000000005,330.9299999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 03:00:15,510.95000000000005,355.52999999999975,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 05:00:33,510.95000000000005,376.43999999999977,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 11:00:31,510.95000000000005,392.00999999999976,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 13:09:14,510.95000000000005,429.08999999999975,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 14:00:00,510.95000000000005,457.3099999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,28.92999999999998,-129.39999999999998,-174.5 -2026-03-16 15:00:00,510.95000000000005,457.3099999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-1.2600000000000229,-129.39999999999998,-174.5 -2026-03-16 17:00:00,501.95000000000005,457.3099999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-1.2600000000000229,-129.39999999999998,-174.5 -2026-03-17 11:00:01,501.95000000000005,457.3099999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-17 14:00:00,501.95000000000005,401.4499999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-17 14:08:21,501.95000000000005,421.4899999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-17 19:18:11,501.95000000000005,429.28999999999974,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-17 23:04:43,501.95000000000005,424.45999999999975,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 05:00:33,501.95000000000005,418.78999999999974,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 06:00:00,501.95000000000005,401.00999999999976,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 07:24:05,501.95000000000005,394.76999999999975,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 14:14:57,501.95000000000005,443.4299999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 16:31:00,503.70000000000005,443.4299999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 16:42:22,503.70000000000005,580.7099999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 18:00:39,503.70000000000005,597.5699999999997,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 22:04:29,503.70000000000005,618.3899999999998,305.1,9.400000000000006,-16.55000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-18 22:45:00,503.70000000000005,618.3899999999998,305.1,9.400000000000006,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 01:01:09,503.70000000000005,647.6999999999997,305.1,9.400000000000006,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 05:07:38,503.70000000000005,647.6999999999997,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 09:00:35,503.70000000000005,659.9999999999997,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 11:00:07,503.70000000000005,761.2199999999997,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 13:00:36,503.70000000000005,783.0299999999996,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 16:20:36,503.70000000000005,1087.8299999999997,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 16:31:00,1279.2,1087.8299999999997,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-19 18:00:12,1279.2,1136.1899999999996,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-129.39999999999998,-174.5 -2026-03-20 04:50:41,1279.2,1136.1899999999996,305.1,51.60000000000001,-35.05000000000001,-72.63000000000001,-142.25000000000003,-109.49999999999997,-174.5 -2026-03-20 18:00:00,1279.2,1136.1899999999996,305.1,51.60000000000001,-186.55,-72.63000000000001,-142.25000000000003,-109.49999999999997,-174.5 -2026-03-20 20:45:00,1279.2,1136.1899999999996,305.1,51.60000000000001,-275.05,-72.63000000000001,-142.25000000000003,-109.49999999999997,-174.5 -2026-03-23 23:00:00,1279.2,1136.1899999999996,305.1,51.60000000000001,-275.05,-72.63000000000001,-225.91000000000003,-109.49999999999997,-174.5 -2026-03-24 04:00:00,1279.2,1009.8699999999997,305.1,51.60000000000001,-275.05,-72.63000000000001,-225.91000000000003,-109.49999999999997,-174.5 -2026-03-24 17:30:00,1279.2,1009.8699999999997,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-109.49999999999997,-174.5 -2026-03-25 02:00:30,1279.2,1028.9499999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-109.49999999999997,-174.5 -2026-03-25 04:00:04,1279.2,1065.3699999999997,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-109.49999999999997,-174.5 -2026-03-25 04:54:18,1279.2,1065.3699999999997,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-25 16:31:01,871.7,1065.3699999999997,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-25 23:00:00,871.7,871.1799999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 01:01:01,871.7,1292.4799999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 05:00:47,871.7,1284.1699999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 12:00:55,871.7,1305.8899999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 13:00:00,871.7,1353.8899999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 15:00:47,871.7,1347.1999999999996,305.1,51.60000000000001,-392.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 17:30:00,871.7,1347.1999999999996,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 20:00:33,871.7,1457.0299999999995,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-26 23:11:44,871.7,1488.7099999999996,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 04:00:00,871.7,1421.1099999999997,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 04:00:03,871.7,1417.3899999999996,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 09:00:00,871.7,1308.3699999999997,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 14:00:12,871.7,1330.2699999999998,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 16:31:00,1699.7,1330.2699999999998,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 18:00:01,1699.7,1054.2399999999998,305.1,51.60000000000001,-391.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 20:30:01,1699.7,1054.2399999999998,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-174.5 -2026-03-27 21:00:00,1699.7,1054.2399999999998,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 03:00:01,1699.7,828.9099999999997,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 04:00:13,1699.7,70.40999999999974,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 05:00:00,1699.7,-33.84000000000026,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 09:00:03,1699.7,33.29999999999974,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 10:00:00,1699.7,32.679999999999744,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 12:06:36,1699.7,44.169999999999746,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 15:00:29,1699.7,113.01999999999974,305.1,51.60000000000001,-477.05,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 22:30:00,1699.7,113.01999999999974,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-30 23:00:00,1699.7,37.119999999999735,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-102.99999999999997,-117.5 -2026-03-31 04:50:01,1699.7,37.119999999999735,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 05:00:17,1699.7,129.66999999999973,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 07:00:00,1699.7,129.30999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 09:00:13,1699.7,122.34999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 11:02:00,1699.7,133.98999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 15:14:01,1699.7,167.58999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 17:09:58,1699.7,253.86999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 21:10:02,1699.7,253.86999999999972,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-03-31 22:08:48,1699.7,448.26999999999975,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-04-01 03:00:31,1699.7,475.2399999999998,305.1,51.60000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-04-01 08:00:00,1699.7,475.2399999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-94.59999999999997,-117.5 -2026-04-02 00:01:00,1699.7,475.2399999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-02 08:00:00,1699.7,1736.6399999999999,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-02 18:00:01,1699.7,1470.8999999999999,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-06 03:01:14,1699.7,1538.61,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-06 08:00:00,1699.7,1426.62,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-06 12:50:29,1699.7,1448.79,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-06 17:00:00,1699.7,1295.09,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-117.5 -2026-04-06 18:00:00,1699.7,1295.09,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-188.5 -2026-04-06 18:40:05,1699.7,1295.09,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-188.5 -2026-04-06 20:00:00,1699.7,1195.1899999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-188.5 -2026-04-06 20:00:01,2471.7,1195.1899999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-225.91000000000003,-138.49999999999997,-188.5 -2026-04-07 01:00:00,2471.7,1195.1899999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-113.86000000000003,-138.49999999999997,-188.5 -2026-04-07 08:00:01,2471.7,1094.1499999999999,305.1,99.80000000000001,-642.55,-72.63000000000001,-113.86000000000003,-138.49999999999997,-188.5 -2026-04-07 14:00:00,2471.7,998.3899999999999,305.1,99.80000000000001,-642.55,-72.63000000000001,-113.86000000000003,-138.49999999999997,-188.5 -2026-04-07 16:00:00,2471.7,684.1899999999998,305.1,99.80000000000001,-642.55,-72.63000000000001,-113.86000000000003,-138.49999999999997,-188.5 -2026-04-07 17:30:00,2471.7,684.1899999999998,305.1,99.80000000000001,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-188.5 -2026-04-07 18:00:01,2471.7,684.1899999999998,305.1,99.80000000000001,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-07 21:00:00,2471.7,555.0999999999998,305.1,99.80000000000001,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-08 01:01:06,2471.7,678.7299999999998,305.1,99.80000000000001,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-08 03:00:07,2471.7,712.4799999999998,305.1,99.80000000000001,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-08 08:00:00,2471.7,712.4799999999998,305.1,-72.39999999999998,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-08 09:08:23,2471.7,730.9599999999998,305.1,-72.39999999999998,-264.04999999999995,-72.63000000000001,-113.86000000000003,-138.49999999999997,-356.5 -2026-04-08 10:00:00,2471.7,730.9599999999998,305.1,-72.39999999999998,-264.04999999999995,-72.63000000000001,-96.76000000000002,-138.49999999999997,-356.5 -2026-04-08 16:31:00,2471.7,730.9599999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-138.49999999999997,-356.5 -2026-04-08 18:20:00,2471.7,730.9599999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-138.49999999999997,-356.5 -2026-04-08 20:00:00,2471.7,1312.6599999999999,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-138.49999999999997,-356.5 -2026-04-08 21:00:01,2471.7,1056.0099999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-138.49999999999997,-356.5 -2026-04-09 00:01:00,2471.7,1056.0099999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-356.5 -2026-04-09 13:00:01,2471.7,978.8799999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-356.5 -2026-04-09 16:31:01,2471.7,978.8799999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-09 17:00:38,2471.7,995.0199999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-09 19:13:39,2471.7,1057.1799999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-09 21:01:21,2471.7,1073.4099999999999,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-10 01:01:52,2471.7,1075.2699999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-10 05:00:02,2471.7,1155.7699999999998,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-10 05:00:30,2471.7,1149.5899999999997,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-10 17:00:01,2471.7,1149.9499999999996,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-953.0 -2026-04-10 18:36:21,2471.7,1149.9499999999996,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-10 21:00:00,2471.7,985.5499999999996,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-13 01:01:02,2471.7,641.7499999999995,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-13 01:01:03,2471.7,1087.5699999999995,305.1,-72.39999999999998,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-13 07:33:34,2471.7,1087.5699999999995,305.1,78.08000000000001,198.95000000000005,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-13 18:00:01,2471.7,1087.5699999999995,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-13 20:00:00,2352.5699999999997,787.4099999999994,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-14 04:00:02,2352.5699999999997,813.0899999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-14 06:00:57,2352.5699999999997,833.8799999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-14 08:02:23,2352.5699999999997,847.8799999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-14 09:00:04,2352.5699999999997,844.2399999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-96.76000000000002,-211.49999999999997,-1042.0 -2026-04-14 09:00:07,2352.5699999999997,844.2399999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,0.9899999999999807,-211.49999999999997,-1042.0 -2026-04-14 12:05:23,2352.5699999999997,851.1599999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,0.9899999999999807,-211.49999999999997,-1042.0 -2026-04-14 18:00:36,2352.5699999999997,939.3599999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,0.9899999999999807,-211.49999999999997,-1042.0 -2026-04-14 21:21:16,2352.5699999999997,1039.9199999999994,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,0.9899999999999807,-211.49999999999997,-1042.0 -2026-04-14 23:00:00,2352.5699999999997,1039.9199999999994,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-211.49999999999997,-1042.0 -2026-04-14 23:04:34,2352.5699999999997,1068.0699999999995,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-211.49999999999997,-1042.0 -2026-04-15 00:01:00,2352.5699999999997,1068.0699999999995,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-264.84999999999997,-1042.0 -2026-04-15 05:15:57,2352.5699999999997,1086.4199999999994,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-264.84999999999997,-1042.0 -2026-04-15 08:30:19,2352.5699999999997,1076.7199999999993,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-264.84999999999997,-1042.0 -2026-04-15 12:00:00,2352.5699999999997,1796.5999999999995,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-264.84999999999997,-1042.0 -2026-04-15 14:00:00,2352.5699999999997,1721.9599999999994,305.1,78.08000000000001,-42.539999999999964,-72.63000000000001,-203.41000000000003,-264.84999999999997,-1042.0 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.pdf b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.pdf deleted file mode 100644 index c120048c9813a39b3357ee8c3d7767c19812857f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25451 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 PFu1mL<&{eZ_gVi2q}&mX diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.png b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_by_robot.png deleted file mode 100644 index 06d4383186e4b2cf4f1bc014e72315beccc1b516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273391 zcmeFZbySq?+Bb~N4Hhzlq=HC;D4hl)D$?Bw(j|?wfl6C|(hS|wA)zQO-8ljx4U)sa z41C9h_r3SC_w)C+-u15avew?}tht$MuIoIH<5$NSpsXl&f{c!ggoNb8?OU>{BqXOB zNl1<)ksgItuB230!yn?#Xl-XTdoyRZ`;Mk03iq8K+SohWSQ?*mHFb2dw70v$Cvb`H z3ePzUXXl4b;{5!!|9S_Xy`wq58C!86{Fc8S-qLX*A-OP%{O^GBh3PGl10*E3Wv{8b z$1IE zZ?dXT4j22?AJnw*J3*fA7l@j*-D{s7+52v9Hos8N(#Dt9zxMsB*p+Fo>F=D_wNW{l zQMf_*Z%Lh2fPE>I)zoJSN&Oqx=EX@fB%)_D)IY=E9~4CswP7v zy4Kod;*Xr}N%r2^w2Zbbxh==wAS=G!aiiNRE62<&F9CC|D3|1UTdYKyhNcc%PWi7W z%VFD61?+ZTX;<~mQgp1`2G#VGhL%A%-=~EFLCdaWt4Pb?65An<`JC?aFBsm0iqEAN z)zeugKYw|!KP}FKONM!zeoB44!lDzyQ*@DxN-l&>V_rz&;g8SGKVQqGb}LHo=2UOb zwYW%Vp~BlE>r3Er9dxdieE3p~L4d$CzVEhOD^d zQmMAryOj$4iaK%)KCKU9cT1Wt`|hsAcZd0`ClLr?zJ$s37czvzpUYd_@w@NZ#OJdy zI1DrKmq?9{BfZ3OrIW|659ZCAhNG%Geo0}{x}T3fs@WM`UhSXa_gM+bUJl#&b33nE zca@Zj{JrTp3{V4d9babC;tkCcy|pXd9q6PyoJ$D0);Zz3J2iU}-W$DIu427WGQK`h zmrd_@OoeN8755uPpA?@-Sn&EZ9p^d6IB{m2&OGjsS;#o;`8F(#k(U5*JxxZz7vEx} zJEd|~z*u(3eKMqbrGYs<&UDc}qNl5uuo#Xvn`Dm>RSBvC+2g(5#Coov=2VG4j>$AWIZw7R*UPY2zbFI8mIv}pG_$Lht9Q(HTpJkO?q=nb=yqPFc;Hlj z);#&fNwEvuJV&)PDY_^ppK^Rob#b51DeYo(8+olDCqOKpj?-Io6j0=;T!w|0wLx~* zb9*)|lJndoemY)>oSLVx-Iq9Tq!cUR#`nlO!P%eqIew2Y&BJl%&-WFw#Qv)T^zf09 z!IN3$I+8u|uaMUsXB6mw&bU`-Mz0R3)+KHXWq8 zz*2+q6y3F0iXEFf*@&hwc;^F)hPtZsSCn-sIbYd1@(dl*aE(A|y&?-055h`Aw?B>H z`#8^~a>5R7#7QaYin$^zquubKQe6BN{a5VXF7C~BIb-Y|EWp-wX6KG;vjr`DSx!<7 z0aFu(g@E--uj6@8!rbv{A=v*J(%D+9pj{^B6?Hu zyksre7;F`u?1YMk!5#S~4MniQQt9n01wt4lgyA;%xC%X@2+be!n5U`|hPM_WD;VwU z;DbJQGjVS_Z!hzT_Pv3R_t9%BKj*rYWU4qAShcc0eLX3WT(i58XIcB~uR&Z1wUXqD ztoU-}THu((@6U${jW;M2MHBCc-h4@>Aj@%e%BiM8YpS}~ zx<8jKM~haH(%bDY<+pj*bIzoe&b_gb$SxjoY~k&`|AH~%$OB2J!La8P@hj;Ct_U~O0-NDO$Zel|4sP7(eHZv=ii>#px z|0}vM;fZS8Kgdf!o|UMXJKYUM(Zj#{qw@6@S0ufBwdyCLhVC zU>@)7+Uc1V>#D2ig;kcpHz{>(^c!JG^%?^2eLW#^_ZXA=y-rW$5$DW%?c%5LvyTrQ zGkbiB`weNy7L>o$HS64RvkIt)^Ne@bpqU6F6Cs#b4zj})W zmR;XTo5YE@OEv=^2?V4XVkY%sb4rG|To#9fWcHwmr{dS9`|$?;=V>Vl@}ULxaz8Nn z{$9Xxb74@(?pViGh1+u6=8$zBfnc<^t@Y{b{&%qulH5n$@Q>!6D%@D~7(74B^&Mmf zw~W~B?Gn}09^ppax?A{bVp0`jqkgqUM|x~7eCRXuTr65^lbDV-9ywiT)_Nzea`leK zbgWxf@YyR}wf^LVn;0V84;kB%K{Ly64Nc33JN7k1R}W}p-Eiw7s2py7n$P`YS2Ai) z;e5M=C2mO4@n@r;!^Agak1mLwq!Z+@{j^w;!8U+wU<0>NjiS6cuEwC+d1YEuKFdp| z-RJan93IQ3e7A1Q_2uY29om7F9K+;GSn)cr=F~0~NhP>nbEkenA8sz;&W$gV*3z>r zF6z^@HtkmmW0Im<^rYs|eiirV*9Qc42%0v(>p^xqT$fp0ANLc|D^LYQx*C{$W4O4u zx{lJ@ymAHTB92>uf)#l)gf3i~xZa)ZC%yf%EH^3MnzNz$JZA6FxIaw+k*Z&Ly$arJ zKs{2(5?C#EJ*+;2KGK&zH$_2YwCJZWHLvcwjT-{O0hf|VcXdocgbIX9MjTsij*gYl z$X&W&GZ|^*^T7kR6npd(Q_QHuaFJ!nA5Lh5vXYL6sS|Ix4LP!@B_7ddfys^j$mAG$|W>di=d|sP)|ia~XNJ z5eKo{Xobv6}0uOdy_dinJ8}R!%Qd^@#F+&`|A?$5=q`SMg8uKF+ z{yR&a*d4>C!$D4bZL=04(@@Rsl#V#ccRH$!5PH;49h``NZ`x+@3 z=4;1`soMCVl6cZRT37Qwg7e4Bcmcq_3l+(}`&YER;k2;qeW%0HKS#XQT4&#zgf=~) z0Yqq&429}SG@moT#t4^u^YQ$EiCF+xAIDmd%6u0Ak6rToRqCd(q-5ed3x(Zzu&Ql* zX#z?7;&<2625Wk$nwdQp@@L^)Ic|?1sxj=;qs}YTZ1?6Boc1e|(V#wmmO{S}dQZ10s#<9G+*`Bgomx1{tf>cV%cP0>cPvW{<$l4ZaWg{)FOz-cWf|dqa%Vy^a7E>C`!{X&>nJPo#B_#N zD&6nT)qDEy@YS281Xr<;oUd2IVSRo3WHdI5^SpWK!@T!)uu3hMjE0b@a|cz7zppI& z?n#i-1}40Y`iA%F(=j*gm$ywkM-fLet=IW%@7nvUMI-1mvWU@tasvv6I8d_eGZa3X>i?JwD*-q@StY4UM5F<5c{Yc#Uqz-+VUq~)Rd%zJm)+OYVz0u68x{H#rt@K z>?9OFTJMz0S_tB}t4|$H&XM%6rhudCdw_A@c1+g!xOAp|^R_-cdjo3#JPOi*iIWw1 zoafHVCOSSFmUVDEJR|rmE3Y~VDM`+)LjCH0HE2`FzTUldj8WZI^yZQw1<~+u2I~1W z*;jW^iCQ$F6vl%y@vhL~Jr?_?9xc$b91N&l39(Op!Q_!X^f350bm+8Lw=pqt#*C(p z#2ejy2M(>SQQT28827ftysUO?)NsmTAfu=wq#PEIO;C&B7xKS@dam@1c)2!*j-@YX zUTV_-zU_IkMpl~(ZTRgGiOA_?3oC(NoX5)t92yw24*%@AKsIMho|nD=G^$Oh!G%)X zb>Y4L{qU}vHuG27CEvz}c^YTjXG(eLX?!>tU}t5$wKFux*<&(W*Tff#y6Ff~3Q~4F z$2!e(Yj(G1Yj)>r3Tm!dkvB9N1X0{Q<89~i<)oOyDAn^DBW_r4^nK%$GAKAfxwxV2 z?y~BnQ(;%%Mb!#ikKqrK*>x`=Qmnrwe{G?_@;&uZ zZys<>bX^=WJwTt&tZDdYD*F=LUl}EnhS1iydxn|rT&|K;;(@f}XaN(+aq+lsOiCZa z7Tc(1__RNsWAxb?AKcVB>6g9$59BsN!wYP=QFVP3;-~#nC@!8k5`8|-o$36UsX5>X zoKeezh2}Xea@UMeaWyOT^n+dm`nvBbmvpy&F7~B6rYoQ<__8?6LTjh>eJ?#){h2K) z5~%HTQhMvh0z;rRi`I8vpil1zj0jKg8Et+{A6`c}H5u?TJgjberUG#fpK7E$$8jf3Gp4Zmp z@_mzD$*|XQV3a~?cZcmh@j|hW8a58%E!bsGWqp`@>H7>|*(S25FHX>FPH*zGn_y2X zNo}ZW3dVlY+}@av^yih0XToI+*`mWHsdspm#Nxd-b?Ahw)Kz4taBXE+*)k;qT*MS!BI3o&&O{8) z@kS1fbykP5=_gsnm1k>eZoD|z%V$LE^P0S|QDM6Fit&f2T6V6mPGg4BX0EK{`qPP2 zJBy`8;iq%U#)L;6e&vao1af$1vLUQ}Y_G*=_ss_RMsLq#y(7gAx1pGW0eX+=0FA?U zW9g+92j&1@CzfX{^;Hfs0p2RHZxzKkLm0#^M~5Z^l__cTEm z1%7kaE98fSKV>l{oZhP!$|wC*>c2Rc19^CtI88+x72!Y zzcy+MQ|DWLJa;S^FM;sb7DnS*~h=>IdrOq_cK(iCD9-#n%Bz4fk4NP`chTR74 zzrbuBJ5H;-@{LkST}OCm(6)4RwI!#ZnF~Mb(r-|T$wx=~4{reOcvm!*_<~8dXbcn; zqiJzuQH4)>Lj%$f3`fZ4Pp8rhK=JGvK5NiS=~EV4g@?1#M-e=r5s~2)QU&~ot+WQf z=CA&swW?HW-mzt1KApIQPs`O*zy0~4m^6}eygj9`9BYF&Ak2z;<_%RtM>+a;W+ zHYa2-ENa>oBR2Rx?;##|Rptc3fD0BtanjD8iqQMjo;PFUG%s7D7oEx^BHUk`nXne)hQm@v)479!oL@x8SD`wwsO(d8A3=K9yH!Tpm*z~c}g?kpbq{_g?}3~%Fnwr2^HQ;~cIQEk#Y z3+kC=ny@dXvh&2I-l?fJgfeD%HNY~9)lHhQ-Y03+U!R}IS}no}+YTjPX%l6Qb!rpC z;}9Z@tl?j6vC*NDtBnf-$7wGm+!=ns;CQP7c-HEg${M}5vuy+}-~Q#yjmeRaHGIO; zlbMeEh`d23?d4u#E0!N-BBRN^iQnB>j*s^RGLfl2EfnA>KVEeqRL;p`vADkrQ5M$? z7harX6z}o)J{i+2_QUT`f%nHRN9omdTq6x!o0eSsO~Uu3+|AOOoc@)dwe8Jed!?GK zI(}97mVwe?)jyt)^W72|d3d99$06iF5f@ksu@tP2NVPxA*22Xx<;_zCs;|LR13+ z0W6JZVrZWCqP0fED3s@d_7YIY7NWv-i`5Zi#h%{^z46xGR)b8zjx6x+Oas2q9gq<} z+zexiEy4Qi5O#ojI&H7E@MjsYFJb+?m!s{gKjau;cLie}*8U|FXYEk)JwW>B_zUK? z-LdqM{yO`h8s6N>)n*KCa!Ud9BB2*E%$WF>)hWvDaZ=U`YFzw!u?XR|*qw?rvRk+P z1H-h(4nO$29i7e8zo)78TGuH1XVE4{Uj#wZ4Xz68Rz0LpIAAGA!%-D{Ll zg%MnVn_M)V)4>d41?jZQ-~`;Ku2zZU5Z!}97ZYCtk0Hy(qz%jr4MAq~yKwSh@?v|e zH2GzV>~sG0s2YL5uSxHVQlG3eV?H{9c67(Sa^+@myqv=tGpMpXbQ*l=`Yyd1^f`;o z({e6H(kb){z+(70oz&>n^oGr)gz*dM9!`0EPfh!?E`DGPt_+Vy*a)$GkDwI0Xb)n` zzD49CU29KvaV)NOB1B~=3!ZsI0$;G&`H+T zl%(;{gN6HH!IJL2{G2?b54Hok{|;f(VY0rrEZ%X#gNvs+*VdP6seR^(HMzSLnS(+* zqT_;iMy?XTvRQjNl{5lB#qX;#xeZ`c0a3qHu*`MK<(R!WSqisjvQ%+y{YJjth>=lM zONzNvBMj214Yl7J%9<H){%O%|A9PWLS z4WA&i$^2)f@P_{*XILDl+nhqZT4|G5PDX4N85#HAKh{B#u4&uAoZEnc#qW`qis`!^ z@4NfR>bS}!L)yC({!S_4lfhR41Cu9b*LoKtIY`YfsfDX&!)lrY2>fyB%b#MuneTg zNB)}jU5m!Pt0bx@>${Ihf(Xr)(+>jkLenyLCTUH2&MTSq#bFWK%9VQba-DQmjMEP|VPdsRG>a$~O@^y?H(w^P9pr;D69ZRD8rkO%%S|6T;VvRI3!VfrzT-9HK?z zp|Jw5UDm;DnxDO9O(9jf03N~(RMi!J~) z;Upt)F39{@D!N<;{>ZB&9S2d;4&~+0+?>#BGFx9x-7$1quEMnix>{RtA7>E#nEq-W zv2>$^ZFO}ukqxM#V*ZT3C+&B|@4vpQ+|?ZfOC#`C(!E0Ul*7S-CGK=yC?V=|WMv<4~iK>$8%b@w@%w+T+?Ye+vog)>2ML`i#(AB!IyPKurr7Ixf@{k#G znuiDdqF;;38PQZYvK{{Q0Onz}umh2bsSvU6TxL2FhfL){89u}tf&<+J8bR!x-g2ku z>>rgS^J(HYo*&P+GLtA2WSx)lKX5X!=hBB6YbT@|BG^qBQ9yrJ^~~ow#_N^uwFPV{ zO0Ik(5O$VpjEZEqg064f|N4AtdI#`;zsyk=ESJSc{~P)iwSaf}<|jU^;}*sq+UV$exnSWq}xv_|8r3?e7Ix zCHTp}St^{VqP?Q7xn<~b;H;7i5kLZ1%WvquuF}~HZItD+1-yy{X@-YfE1e-%leUEN znsxCXU&F|ILxcJaJZvZ%=tLbMVk^ZL?;slfwsvNaTM;*fjab54GJvrNKKocD-!=z* z*w$sfFQ@bAu|K3fN^QrC==x_FB&u?EN?a@%&i(02VE<=x>MOxY~Xn~8_r-f_JVo1dM^6a-h!-7{+KTVAeQt8oR&NnDe+{$XrzrYjD*f6$bBK~;5SFF)pejW5&rC;g2*7ikw8E^FATdQ(wV-;EyZ#>2ebFe zy}yBySb|N}TY?ALLPI5Chv@U@DzhZ_@(wWUH7C0V5fbEe9!JDsrNy zP(L})_(8(W4hbXpNCytgdlFI9<`ET35qfqXG}RrxZ*MN@trqwr6!d5g&Gemd2dg$9 z+Z(e^NgYy45)OMAOVye)AU-NUJvY<^D^Zx4sQs)|eHv)g9R#}i?1Bo(9qpGTT8&Vi z?a>OmU_!~^n%s6f;wKtoRZ!;_sKpF!8*3W=&SVw!KHT$TpvNN(0OK#ex-Bx zAo`x{{d+pLsY>yN^V1aiogg_7szY`Kx0~j^;i{nkN3CpQRDQKuOv7jOA!@2$4rM=m@Ur8g z2A^)#L?Cwo`?F~uH%VS1QUo>wANoN772y6JY~12b<{`;gF04|dBSxFxD0w88ndB--_9G6L5cr* zZ?cMRU;EW64|Rp4mzmjqu=PTppcbt|0N$_~~ICmBaBl^sq>%$xv1C=@# z?aW&19O-#YLw*_(m6K2q=DMe!gZK68&}9}$mfV1uL)?0Z-+@^g*>HqnXx8uM(tn@t zFh_r$T-i-E36KQ}q)R)BEV~P838YN{EVvo_8fe#7s=LkY=yf?>$nr4pJ~E zBp&$RFF-35XY`m!>@9gsK4o#-e=;XrQrr+S<;;>N_bJb=_l0Tlv4Kj?}5R(e*Kb?Ke~$=A1W}Df}LR-ff5@5FdK_U2R%dWD+S=1_RG4PhDI= zvs7TaU)vryR;dqssKRVt!J?rls!+gd${>S?L$b$O%{9+sglEmH#`-wHO%i;t+p zI(Oa1&(5%e&$r3dayL#=4B{C#0HET=KJ{4_=YMlKbN+~b9^86ya*@D!neDaO#h10~ zNMjW$Db0ot-6`q$m{2e6)4Bm-7^y#pBr`qBb$+t1bu1$o<#7V^e|-}P|9GmS#@{wB z0hh;oe$tFM;R;YjZoZ!#9eI5wxG&vtm>nE4Zi4mrLo$3ONPfq3_8Ow9}NjAe!lECDHL`>L-N}_uVbz zI6hv~ttgKm&_X+!6a6426P(A1rPa1xi`GUh?Y^6X=Ckl5nrXTb-p_XA!2-O$_vizZ z;tQmVX0Yi{G=xwHYl%|NkCZz>ge0j8;7~*r^W>r^mW4LwlD;jF&y0SYtP!2Jm10rN z!|_^-DW;w4I45W1Zc$1Uw2ETlAG&o_p6%S<8bz}*>a$#@M;mx=?*TU^sh`w@XbA>S zdL=y!^uV`N=Mjs`5}XJgT|P4L$&4Piu}9|N!kXac zV(_3ym8O^FRp*H^DO4Hh27+`&)v6`U7Y_B3a}*Kl(ZwsnIA}eBK7=hB02_JjG(<4Q z3+qrfm!RjM*8qEOT`t9gy+=hgikt0b-&n@h^tpt>HDd5(K4j?E)`#1FE5i@aFMkI=8qr_ zP8H30Q$4$KQ(;9!>{CS~pikqVdTA^#OF%VQ>!#>)f?7c1ZAj}*Gg)8pq$>i4y|_^f z8exzAL}?xNR`16DVn7@>5Y==DawdUep8z+jiOuw8X>}67#L~*!VEu_H*|aJIh2lZo zp2|ze3o)m?W|h$T+k$w+o`Z&$}WHk=oGMz&Ed(Vc6%fEuk?y~KJcl`o%} z{OKK*b4i!p{{TmvgKRXNAzfu~wakY@iFbCOKdn8-Yk3ab2F+&%(I%l{7hM(x1Y~@{ z-={t@h$^9JDY5S73x8|0yBe7R2^;jV(WrMCczEcRUK|rM?pLkxg6i^0iz6XZLMwXS zjpr0-Xofx>U!EK}QO##f*65B%k+m9R?K{o;i6CfL=G_kQO*wi4H(jv3+LJkep;I~4 zQr}hDJhJ5o2|Y*bF^iaoO>B|LK;=FryUZ8vIc;Kn_b}f21MxR&P?I|`5ZwBB z=iY56qOIyc9!+S{++~ycV0bn${6&z65gsntZ!si-)c=qU<fqhyY?P%ql6O+{haZ6ej@1XM>FK3*e_SerrOt;(lM0A} zcelC*YU~|ETF){ldFU%!!*HJ>g${ykA+|z&D_NCZ&!SOd@)6U^FDI)isX`xRaxd}s zBJHGzSgssYyMs3PLY?n(Us)$x0=S%wzMA$c?0Yo6 zN0J+yh^!t8932#hDR#w}_orGoj?asNYY@F||F*f`6Xg1CK*lwU@KLI{}e}ylmALj-L0d1OCEn_w~0MI*@!Sf(=xII#Hr@)yqw>)M9?C# z43*OPcsO=|=)R870Bx@e@we9v4te{~J901ZPjR_)8dK$ABtmEQR{@{RH{ zIr&TjfJH<1asM~uC7|7}2trzx;OSq7>o;&SaP`s)1mKf#=e+r0FE3DjPgpI>$!x2r zJZuIjF&?qt-tjw^T%@V ziYni6W3WSJA)(P$?*~$E3qR%LSJJOpEf8qj=mD32KmY)vw^~d~ygi;DVvW%&wG%qZ zHig=}=91CwU6{Y~4zWM_cK?oYvYq)SqHmfB0j^mjpVaB8W#FQLWWDG|%!;(Me+-|d zc&@ya{EOpz@b#h!*_GiVH2TWxV-#`>ujy_~U9X-aGX*i=Ck7u+Trg*&QH!iFA`5Cm zf=cTU9qTI}gKha5v3`2GzUq@9&BPKa5nIl1no|5aI9Dht#^+G$`nL`*JGvs)u~5H$ zA;-YQwlx3?{aLXPC=nzAzT}%bg~V{)^kX6E6jUpSdF8t_Qm%8&D-lX$YVsxq%i)!Y z=Z6gOn=k=hJ$bQBl@TL6A-4@extaR%(8b+vV=2aI5V^!>7qJ9fmH3Vqh>bs^R4otm z*?`{K($242#9`pIQl}9ivGDP0;4fqqq=Ks)iE?y6T95xZ5V{T7?6Ht4)$VfKTa(#S z>srxcs)4K@6M9W8^=?KXv7YoL$MHk%kfEm=(Y#M8TL$c@3&2*v>{h7iK}E6~f`&lF z)9G0?f(>Ii;RB@%@QEocfo4-ig^`~6e`XI9---=T7*26 zza8vy-|Z$PAJygS#5ux@oD5f#%tnt|HzJ$NizE5!LQHoI+$4z|@9?^}Er@;crj%{7 z3CZbUa0un*YC)jAC4`on+vO<6kj#_EV#9#jiaI`Oa~#s!nu4(F8`40-=o>OTjDq9? zYw-gILn`X^Dj>J}DTwOE5@D4DVwwz*le>rqwPOqUrR-JpHAfo%o|W~r+9z#Dpl)!N zW2*EUp5e$mMG;WNK|ld>#k`0YK50-2flJ0ko0o`uk=$@@3Skoy;Z|!qoNyxo) zoV^W4`>8+qqs(75@YzwD~hGl#uf8 zV#62MLl)o0=wGk$qXLmKm2$(3+va4y+&iowo2Z4VrJ?rY&EmMsqe;q7tnXL@U&D+Au$aKJQ0peG zB5PpqqaclaS{9OuIMy&pRg*6!D50Aca*|?R5c_P8Q#VpeGQqFJO2yGn{L7-W`8V} zp70|4{(5Sjn7NGW`H6_!NHj2LEQolze>_BFOxsrZW{jExQ$2pmXm7&^9lr?EFtbp- zU8+haJ8qm(0DF>)>=egw8_we$9BBPQfBzpUjZ6(&po6t-M@I!-G4dsDIDa`plN=&E z#Nmzmgl&ymP;BWs6Y9O5=pYm9sitoqe&aL?!#Grzwu97vLiFIo_s@H>^rS<}#p6NE zqZ*|r&ntH<0?*6T`$ii9zt#=jn67C#1nM$5P%KZ-|ef`Lia3AIizAyFrqsR7$ z*gb>1NgCXCSwnqQjU$QtGiKQukJ`W3QB};3ulwURer+-OA2^MKO4vz1aclwAsD*$$=+t1HV|-3=44h`Hha znBn|(Ey%Yy^~*1nU+L4{Ed$s~~3v;v)#nsnW>_*BKszBs0 zyMIPSmipQem31nmr-*Ts$!o*S<7b_|)#iTP{h7?qz(I`Ym0B(&`6K002}pm?yj^C` zE4;RdgD&{T)1hES31RL#AzG5WQgL>pAOdE86bL*piK~<5K%rYy8V%lZbcNO~Jv}MT z!TkL6IGqaZ0B~y_eNeRe8p$|Vzn$|@^J)Nn^3E8)iWj5*Q-q} zl+_T#p}G(gm+Jbjw!*pELkPoIm|Z*ZXaWc6)+nkQV?dz?y_RB*=i91$H)3`muvoC? zM(TImw80^Q(!#(u7iOaJT{#(4%QqJWbY_ta?>I~>wSlen-rH?m!XJkL8;Ii*jmF8= zmp@X=eEZ}^%qI76mLlLrmohHwT4`(+oW^Ftklg+(+ySXHr# zM-eA)v&X7ie*$b6<2q!iBNJ;aa}YD3F$f;k&oFe!L7}{M7uY;xkH{ zvhn9SjWspuWIv+N22#2 z1rsqMg7^mlvged5=eQ4|S-j5o=b<~kB8mxNn!?K!g8vUp3PqJL_P&UD5AN|=%Qta| z@EbpE$jiqX6KMNAP1e&WUQ!Ozj^8~Wdb^0y*G=}N{9z5*bXkV4wdW%Bx6lUt%E4Lt z6FC0AzE!ceWiYx9oG0&pc{PyKG{A?u)PB;C(qvc_L4C7OQCi#O8s#djz|`Yhcrmfu zBpUWd&eA>f4eFILv9wZ|rUX+d6%&35OG z`%Qq%*H3KNX+L)j_Q2JoEk3gQ^Q>ee2>R5G48Rlt&X6ECPHzR~_*!ak2T4nJs!g!o zO@4QS@s^Or|k2wgz_nwjRHw7G=s>MgiJ~peg zc+^ZBKzN7F0f)mUd36es`#e?j)o2WyRbY;XA)l&RCAKGOfs!P z&+jYqI?N7e#(-@jOo1rD(l`kLe0dlqvU6SHJ!PF&(STbEH_6KtMj)Z$+ak;OuaIn;T!7M5LC$Xm#4p86wWTPyGGZJhYK z0CU|8N(+;t&_Yf2Y0%OsnT4{`89B8I%|e2xEf9;jRU|+zh!nYnfL1`*=?>+JvErsm z9$`-kDryBLX6sijY=XzoG$O&=LSzdEZW^GNZhrYOQ5U2pe@3Y^jD27_uGX+$Xt)MyqIk&F5RNgU zh=;+aud%8m=nQtsF^~Qb?uS849tQT%PDC)-xKbP-&3@2?h4f->JV495FIa^&E}RMT zw97LW*=wE(M2}~El7Q4UPFiuHz8t1_u3p~wi7lYIRGA?O49tQdX{n_=2N|#p^}xvR zW%kxO%-bWvko0>D4;&*E6#0_+{AQ$f9ZBrLjScqHAeMOBlV)SdGq{gPp35XY)fx1r z=`_~k_a?ptoUlr(I2{B~NOS`<&7Z;(B66g9^6of(D*WHcn~IF3IHxEe7KA3{N(n2ZBHPhCahebr@Jjnfz_$Dv2y zrD&+W*y%$UJ&h~cl1S~ro|zs*H>GN-7fp-zbzPY=d?8PsN7Zw^{#&NZmhVF=N(U!Q%+%MMRB+*8QZNl=kIm|Fc)jl0hFZ z^EU^5Q4y?R9Xd((-m=vsCiIc5{vC&kaK5bSB5lFERi!cEP*CP!*ILRpj z)*gWyHYh~je;f6p^qco(^R}3UZ5S(3btV4XPUQGFir5G+u{6LE_|(#%LHc?krc89# z;N!h()Ly603w6eeJm=63wHEs(#ks`1VsA~|AQISQ@_hy7N6q~wI^*Tsuc97{{F35b ziUm68Tj0dK)LFjF$;OZ!<0GdQnBNTX$-=8Cr@t^w$NT!|s?>?HKDj;-6?Q2HOm@=- z=OEq^i}huzW(O0om)1XlX*XUsnkcQe50Wm*sJFxJjN!T3gV>oOT8c|&9#c{H z(ICM(M3?+EmQBrjT>%+3Et|A#e?E_dMEkM&$*=ngoUNXA zJ|q0+h`cno{*F_v3!ILjk?6x4XQplV7+7bNB1aMAajIbeX3YIf{=Q35VquL*$|D(> z3P*C%tyLMkLr9!W(7G?%W*ZqSLT(|PI&>OdV46Mgm(Xz!2g}*tNeX^oR%cy2cma{{=qy~n}#B* zIsSP|w);@A_5Qdb5-wZ^518Y`*~`i0B7Y^It-4bcbRlZj4TK$H@3YA;qz_aUqKa}>DF6A_KYwx@`bWh5=M`A>*8itogH?Dafo-lkO({yi z@UA%XR0XC6#VD#8V#}IP2hW5<;-It4%;rQTYZfXCh<1C#zHK*&mN zZ;r!(6WuThpbEoest_HG`YA!;w`wLyLek-Qw&egx{UH*+6%vwr|KkN^Uu0(d&+kmJ zeOvtZ^zOgEMab2we^S){eu>0X;s3q%|HD1Fd3Fc5dN+7nuR=v9UKZ6+>m@@-RtVB& z=b@@vS+2E;C_%>C5i;CqckJ>MqJ=j+kXmFoECD0I&Or6jklX-rii68+7aKB-%INj` z%PbIU1u814jj>~e=Ix68`c4W+YOf19I78fJ?j2DA66el9#mwUWHlY9YtaJ2;XHIML z!RaY)p?bbU97gpWJe0e_ewg%sjm&@{gTSd^p0Xi8qt*499poU9In7jBhB6Grmfak8Xf>MhF2={@tG%_&JEdsN3>)?&2!Kh2*IwLZK9@|m` zVn%Yw{z)?+AN`!x0%IKs+#@6N>wx}JL2eZA+yggO2~KV>_W*%Mtv}bm+I9_uWqD|q za#2#AuEJROHrcHZl;VbY3eFH| ztg1CWL^vh_IaNZ~MjHvdc0qce8)7z5$SvU!O@b%uQsUjKp(UjIzJW6>=1qKzo~!(@sYDmyhQ5};T=h^Av)VsBq9NIBk}no zmXK@b*7I2y$j|WhOcVUqCI0zKk+3Zk#q>;AQi#=~2sW1H_F%h@CL0555sY$z9po?z z;#PZ&h{yWOI&e3>egh8>X-ywfBWm4UB#r=wL(n4W5)eOE*Ydw_txQ_mtO1<4g{X6> zVDa=K$8VtgO`g5?g&c2T`&T5tXFc=ZRi?x7FL=~&*o{1ru|i7Poc^ZYp_8{@5!w16 z!JWG;Ej<}(-H1`P7OC%en|eeg7Rh;^U=$aOHY|8>y8^U2Ya1NEk~XDypw5U8Cv-Fb zW;$dtT>pfQ{(T1$Hcr3lBwK(^j7LU`AC`MBBLT-E@c3;!Iufo~LKZjO1y4$BEC>HA z)8H2vUh-gBX1T^z3?X{%z7esy`QKZJ_o-j7W&%7>{45*HbeAqO!W5T}2RMp3PI&MP zd1a(v^YR=|DxhG!`7@2x*#rU{*~P6$?DK^1K*G?*e>E1rzC>>)dySv3+Uw{4 z@j}8bX0tluuSSb6cI8tMJdG^V;Jh2aJyi>7X)s472!{Y)@57-ZR$!cnk%uF0Ti3_? zUkf&o;}3o|z3oP(YXq%&(h;-XN@C+W3`=raMw3Tojoh5V(Pg!&dPAkQ94T|y&}HA$ z;7dr(M}I0;OvtD{M8aVYJ(`3!GM{0;OVfg+@IPPJpee>FC|tcsPW6~NEynSV&n_a} z!@|^t<1?V9r-uPwNx0v;+72h5@N|=xu^)6;VLq;_d#|CH&Q}HEFV(TvH?3wDf{%wkyCNrF4Wd`gn+Jq88Su8Qo=gemFlXWDA^UiE7=!y z-fT%x_>b~%5AQko_Cu|J-}eC}^Az7o9-d>`!Ur$w`XT3IKy{QrXyBk10MRaRzuv%P z+(_A z!r}0+SeGu)0idNXmSPp(vMc3Yah`{DRpz`_*9l=FyLL z4?lR9kErj6w}JHi=w&Dl6##R(Ay74tjNO5CoC4w{pA0gzs`*L(up81knau>CW$F$y zLdW;<0EH>b^#fG*b0?T2MP+LM-J^>XrV0{V%Q-*fAl zI;n7p3Ym39BN=S~94hr|LhqFk6h+Dgip+9xV5r&Tt<`D@5HxfY!*ZSmRnM%Y5|}(5 z2L=MRhc25U9-JAXWhVwb3m2w{nCcZUr?n4`jLd#Ez8=K=VsPnEvHbnxi%`iUC^P>b zdv6^T)f&DH4pFXh{V`N~If=kRAgJ8VRM5P+GbN6$wE?B!^ZI z>F#>(J)lR=Iq&y=f4u8k>s#wLe<*91+3fw~{ap8TU3Y>wm~0@1QYP?_Ca`77f(Fg% zI*`3*YhAzrVi<`lblsK>1jJ#@Hjn;eYNG}%N?X(w%6+?mo=jqV^omiPV(LvpTIO^$^<|-8&d8@m6Aou`OV?^#b|rx4e)@F%i+tAiIJF zZ6%TmHzogK0v>%#!?5UFhRj&m7sxqf z=OIWG!r!y~uum!;Izk+ga}NlVA(k9~T#9xBUNwy5zun3q7u19-x(N52T4=!Ewpm%q zpc6Ki-(NwGdb-c4Gk9_vBw{IJV4V+&1)Y?*Gk+p7)14(^E?t4_kzEtenEXrW$<+h-mUmwIAc5)ci8ehFas*kGu_xao> z(ZMf_nCDRZ)29^9^u~LCX1IQRpDzr@zeE3%ZqBi~u>AHYGWtvZI?wwgDlU$Y@VpPw zm>o9(TF|x<^w%XCja&En6Y&xK$F(OSJ6~}g?o?gvX#U@R838?<9458Kjjk9`RHNu6 z|9u0=ic~~&&y0X={-3{fSX5}iiQ6G9ee>UU_nL6=)hmYoyRR$y!P6zy={!Hgp3#v)38dc=UTlL{`J+ZAC%%0#yb;Q)Fz(eBC_Aq7)`ngoRg0d$}nH-QO`aU ze_Sp!9zuwO!X%TtY^hLclLX(I^;j{jE!6VwYw;C{i3+PT_}h%W_RCT)On&{kTE_yP z^HE2>zr>a7)ud&n;ju;3yqD(&&#Q1te1>9r@BheI`&lsxVFx=A+@nVLE4&p@Pi8`VUcZ)m!Jc6K`@HS>OQAGy!g`G~7o0cb3;Icr9r8rg)iWO^^4nGyz*9d)(*$8UoEvrZMoI8&Xr@ z2>YFo7!0q^1t?LSV2jgXd%CQavp61D+R3eF{NS{BT%5Vn8i*4KK%5cU)Oo1E2+0S8 znK%p{rwuq>eEP?i5?)PUj~4__3jd7_(XTk2`~c5t~}bmJ1<@hhZb}RSn1n?2SDH5VRJeADEr=ffh%k7%h2)H{RVx zG9yDn(3V}uL1nO<`?f`;v-tY3;_M{2CY8woRVvj+vjK4E(~UkFuPX&$YK0-G4az`Q6H@a zrzQGMuLk6VvnA-z`%#H-K!%Z23lQvLTgSZ{{YLU$H6m0^NIj~L3)|%`BS{Fb5GrdO z{PW-psZ1%1Bzq%p&DW4SP1Z(E=gY$cLk|H5IPkTBZWm zDL1bpL$@pk)N##)X@B25;U`S(adg~4#B_G%3&IWyZh-m!f)(Y>(HjhJU!zW@>( zoNf41YIwlmEkiwgpZ#ZqkK1Nt93C8+lKv--1$eLlV3zOYA@G^kz^$AL-vmB_msm8EI9R9|hLu>R6A`Ga*$xV@TbUui zC+G!)*MSsxk^s!=Z-N0FAL0zo?*YeNqpCcB`{kR&P)Zv}zW6$)o)8Lww0|a$kvEJ* zW``O;w0TgqM>ogV=2^>kB0jQjM6b(Ums**^czA>4?+}x5@lC`I9TcHScvY z8{7fHpv6@|UDINZT2;%q*v{+f;R!3CmHPtf{*hb-%1?KQj{9)n>+Fc-=MSSWj=Yex zGcNQVB;>At-U;$X%=9H6Eijun$**m}gwZ?0gk4G5i0Ul>KvW3~yi|mNAu}@z^lf8d zkieK;zE(R75aq{SW!gM$z+UM)Qx%JIb2}O>(f~t8lAHjZ6~r5y02CE*C?+J*fyxke zA-#Jk|Nnrd^F;ybWN3F+_22h`K^Q436AoqJd!Dt!a{Prbzh*#tRjgxd`MK$T;?oFO21y+7z`5`=qaNa|?gF-KUjTxOTGtE* zqK~M!C{R%l{i1N08Aw8g5t&K@VrnQ6?Eu+i=RpDr-Rr-5;dOdlO(*`E#Xn#P6h}DL z`_R$*9Eb*x&wi}k90yq_jkA@oKIje=f#Lqm&ua*#JR}U5a%!$m&17(s;h?=B-Z<{R zCKIG#h`xV%@eCn`&%q=ynnmz_Kam+}psHERj8@G+HI2FkKX5Uuw*z;w;5A#wtRgLw zaylEt?QJP_;A_GM(uQ38JOkcv&?43jhJnAz;eqi5)TQwWbJgwydn0M zpBkb8H%@{YJ$M5|Vl{RU;SV9~0Q#~`2q^0m5uliW=W_}|f@N$r0x{jG{P%d2!${IS z^?!n(z}*CDJt7B1^z$BCd{<%5BLHR5o86Ocp#%~YWMbExAxcGLa?6VwL+%?VK%bo1 zdd3GK)Wc}i%YbX;79O+^p-h5{2fC;Do{Yu-dyegKN{XVl#BQzWQ~i0@-J)Icom!> zrNJr)$vi0{DJ?`};fCm5MIbgo5Z;|#wBUh9C@TV-)i1!X-11ik_HQ%nk8_A<9J0po zkdQC{T=>Jxc;~suf9%0A{DEvro{)3{#TBFo1f7GE6S3Y?ApPN=|M8hc8^Q+Y%%i(M zuu)d*gw;XDD8fb(G3S$A!698^20LKA?49qQWRPH;nEjL&)@x_u58&lST3A9ggkfO+ z$|D-b6-d8io$&@Qt@xVT>#K{3h`S{oq|$PDwO@_7^+U|yKEQI3)qMrAqerX(;d6os zKyKl2MFMmq1il6_ui2ry)1dGu)ftZhRwN$Z*u(~cZkYi+~RmSv&1AI zIz41fM`jz6H47g&X9yt&l7b;{=YRwHe_(IXH?*+y%H@kJ-V9z89Q(r2ZNFx3&##o{ zO&%j+Hq|L0lk(5M-zfcm8-l_MF8*Yk?rb-#hdX$0W!0egVMo&!>I6X*K;mNT(oup?muMygkj<`)|5(wKsIPO~TxeJ zL3v^Oah39Z`$g)H5KeiMrrq<`VqfkO+-~TYUsh=FSnNeyJwO}$^u1?$7s1m1cC*($ z%QI@14YHpKGnLzJ#N=PTAwcbu5FGaS-n0FevDbh9W`OF|cs`q}cdSUazKBWt{l2Pk zF5(G7y3KbIp0eV%`J>p8KfW*Tge%P7{-ZGpzqN&${(h-8_sFMD6Wh1wtEfNkIe`Dz zPYC&jkXczt+1~A|ps+mLv)_UsjKUsd54)ka_4f4u&@+c|b0?5yt6bN!mOZR)I>B-O zkmBDtg11jizyA37nAp~Ymq!!YCN2*T*FryzY?ijg%E^YiawWtLy=unk-LX27a}6Oj z{rsaSV^%BC#;MKBEi4$DtW$VA;Zgm%dq3^X&m}=Rh5QNqRS7xznWbb@ziu39TfRY` zpdQzf!u+lFjhTO}Eo!NwC?}S+L(>zID~BEs63b&ITiAo%hiHmWz7( z^lKsemE>#qF3qj!(*aZgR=_lNJR-J?S9Z1ri)s0-$lsfzw05epa-jk$dIx=)w^R}s_N=>ZCbg=k<%ehU!~gMxMtt4#=S>WY ze2d$=P>!V+O%QIZIa9t6ngKbn5gr7)=~udneU_5ED!vh!=lVsUc-UZn(~-Hq(7T9s z-8g?>H=Bg=)j4JJ*Gp52@9sbK(|$*OiF9|x)2q8A0vm5#cs+b9JZjAFS+{v_(q>!a zN6V~^jzXgmh2@f)I_CxjhoU07BMTQNA||(5!z6EIQRU1HU3H$TBf`eIG!zN(+Z`%> zWHh3#@vZp%|i=M`t49U%I$R#t@DUqQ3ci|Lf@t(QEW4ruA|B-vay5t)qX>@l) zheoX!-s+sPlNn_Wpf(TaI^L91p;Gth1Ac4NV%9>sj+MG7_O7aRAKq2B^p^RoItdEH zx>Q_eHrf`SeFCF%o7(;#uz`t=P>#(5SM9n~>DL|_ajsSq*G_iZC(lg{B@DT9a;)E* z3!hDp!l6k?cG)p(jSHLhsk@uj-b@_M@l|Di2`K`#zNxm?K&SJK0tMNZ4hHn(Z~Fk@ zE6b_HEo0@uuiRB`ADaruS`SYsbGbBPJmOr&-~V;KOj^#$r)>M={$Z%Dtjf)$&D3N_ zR`MVUYfe!;l_y7@|0-J$({tqKVzYH4s2L6QY>n=zkAdYk)tm=R<1*HiM}*H>kIR)k zT|c|^nZW!}gVnIQhBHklRD5{ZIo!%h?(oQeHFB#7t-mtQ>CA;*ry8-#dgLk3wwg6Q zSOzoPIthZ74W zo&aj{Ug>5)bN%=I^3`L#nZ|t#?T%mEZ$>a)Qt}T;?MSf_D^bH?J07~DTQ0;ZEq%2< z`##j%;j(ec#9a6~?(Cvfvjfw$L{{=4GZac%$X)$b1LQW(eCOlZ-V(Q-9W@Y<{$PRs z_#zeSD=-ylt;9(TCV$1K_x;K$&LXLWGhgcXwE8 zpcCdiEJ`#J;{4{^_T{$!la8x5Tn%fwNJKY1(r%?jGj+U`K%I%{6WMHaBfa?OJ{=M5 zNoAL3Hi{H!pLxToeh{PlO*c5RiyWgv5>E%38Xn&eq>sV;ca!MYqnRtNXw+#!qFgn`qa8AZa(F6Yd)*ssJrQ$TS8<};BkzZl&5AK0I=0nQm zNE`8?fkt{VdOD*>w+QYcmHd*SYmwXuPbX2>wQsyGiuN?GicesAZtwZm0@d7Nu6yM+ z8@jwb_M`0K)w&uI+}SPjpaZ9L(X{g$S5Ejf`ib9lsa$>VzWMeWiF+6fXQv{T+vr`FEViRfq-7xX#liNVrY=0zc(DA*fmr_ol+uy%hVyD1 zgx`|6+`G}ds;!{bK^7S1&A_o_+e=0U%i+}-ht9SFFS{mEW9WJ#rLjX`|{0@{=gZuuGFmu+2fAem+EMPTZ2n6(rqnugg^cFt%=OE z+$^HEl7>Ougkoq2IL&Wx;Ez8dCcSHhNzKM}PWy^}Nn;kQR!uZ8Y6&iYG=*b)%2 zY+q~Zzk!r=!|bBK*y;T49%CJbzlYsUiPGM2eZrj?!JVy3oa{5Y0nK*MJ=E2w_~A5J z;M;&B|F~30_X58{=+&!kKRo+QOJe<-_W>4t=7!F0#am;nU+mDo3rlU_`G4J?1y_4pkgAOD4purl#xogID_^a)mmfk;bVF-% zyV(fuXO6UJ;LSpz^m)+bzzgxG{O4?7CS7Z49U2==HezjclhR{!-QKidj#2)4SS#nR z53&i4+B^*Y%Ac?#GJVy*LTAF`&V24^i=R+iEy6E9$~ed9>GLRlVg38Bi&fL?l!TV! z6E!5I@XuhG9-7cPxlGAA3;pQ4VYy20aFS)$vEMX^glkqyX@-Qgv~WtNuKP;P;$y@! zEeP*Z_=@j+>QvTQ!N+z3gR4L0He8gT&Ba>)JLdgfv~7*{him_JgRO%L{DUkBBN|d& zHw);k*pAta2~Ns28vX2u4P>A&h4#Zhd0cY%qo{l5Y|;o}pio3*edDbA&w&y?p_Uyi zej=JfX#X0mhI5>w#oOq10m5yPR&BK)MDDck%qdl}5gsXEkhuPG#`N2mGYS zUR~F$l;>L;lBYPWD7t(Q=EvS(K~f^RkhEI58z@xZ;ACEgP3W0=%wK1D{#f3zF1M{; z*~Zl4((T>8b{boGXNdh!bRoo_*!y4i?1<}`v=QRzp+TQmQaRwCIlkPS0}hmz@o86M3;U`l1iFb z%9GGkKmSoOCZgl?IE__x;5tf~p#VKxD`l+eU zFhTc5a(NKZX(GEO`X-V4z$Bl27tH04{~9e7J%aJDjTe2KCBOSNAPP(A_3_b#?Qz0P zNxk&E^CKS{ItlCjxeDL*d`AW`3j2e&+mPiOr{RwO7$+|+Uubj(d3>~ZrRToZuxll- z6XHj>hskB)SR&>-#gs5gE__2qMPb6pq4qX@tI#lqc;u*XfKfM8BeM8dH^dtBzX2A= z*OjD+=nTpe!i3(i^SZ-JR+Ql=ZTaZJIBZ?udvDse=$epi#A~3 zbg@$$cxtTw8q9AyImfRX=n6XC8({2<)1xkLxx21Y!O`cnDTMqr7&25l$Xz}S@`=DQ zBTZu((jXYJade_29pUbVMbI-jSYS}TUR7D!diX0Y==8uUi3N_Nr5Ok$oU zSZm&f;_?VrbbLp%6X~1aNfUWw0gi5rP*RBzWQf z*K%#HZK->OUzJ{1;la@#%n@6m;BA`B<(si2mU@ZI zsuOt+8_~D>AsKYhWxdxd{YM;Q)yB{R!M-Pv>stYe{~w?SuWx&t#kxY3? zdb)zVygbw=3xWhy9Qbf)fzR&?5vIRo@kp~Py}f_lB;`D&vf$aCj6=e-sj6&*zIy!5 z=jCWDUyD@zvW}^M%ztc6jcl9%v*W-%ZD6J2^R0BFSD|PS6HWvuCo4$i0Z8A9fc7g6 zm;HeQRMSzJ#rv|tY$c_?dVaIdk`Vj&&#&EU#QHf#)O#4kDsM|Mk~LsC z8oN8w+*wC>wk&Xx`PS~GguE5$#)^O=v}!2HC7ib5{`4yr-4~k*H#w;2!j~;bFzGYl zJM|J;IK5AY7=q83Y}+}sEJz8V-9Aho35yW&e6vqLyE6P4KF z!IbyWq;BRdk4j$yBL<}3e!fUw!}1&{gOL3=2vZHQv#Jp4X?SsObGW8boJT9!pP>d4W$1%4jTjLd(%2#0*Ja z#tzL{FfJPgYEdgB{&MdODQH8+v>*5LSqcA>Rvkmf>A&W4N+(l2GvkORyh-+Tk0+T6 zAnj;L)Puu{j=i1FU;%Z}Zb}bLkTK$!%e-)`h?p4A){;_X*$L#N#mQ zF(PZ)3;Yv*RUVN3i-=BR1O&v*kk3R)7>g}tT+6)BffUahD|PEI2qh5q%fgV^M81cq z861IVaO>sF8%ojOzOuSQhjAFVLaKM}+*w)y&CNUrUy@Q&Qx)qV3zh*1sB6G0d+H(< zjaV>QFI6JmHEUdd#64Lq#2z$tY+K#m=8xHxh6~Pa>_oJ$*kcb-D3+l=B zcRVmWL!CO^sua^l;Es^6u~PuAPBtEW@y zo^D+{e*LVZpQ78$vlS>wkqWZWq}*Ip#4KjcgUcmWH}atU^r-G;(c%IkU~}uI6@}Vb zDUj1b#4PGd3y?nj2bZ3rb|Ew#dw%M}z%sop(dLasLZ|uOi0i84;DlpsUrM@MBbT?73sU>m_LoGP^C6dS;vxT15k5yjUJ^IT3TGPIC(_hGeA9 zI)-m@)Zy+D2J*XJ6Wwp82*)}BHX=G$9g);tDr5sMA>{^yg(+1=;;oh53k^lYAp*&j zx8!0mhn0|{CqWs@pq_Hq_wa1CGg{A0EFp%!P%R^Xr-#+Hr z>+K}oPx}@{tYb!Mw%R`(G%rrhw`@K12I7c~j(`7C2f@SJ2FViQc%16dfF#mDp&fd#Xp?L?M0` zGQRJTYV$e>1*lxNL1gw5-vT|!GNdlMox3SGGqa69zw8<1Dw(dZZVxAB#-E=5fx7iB1 z7H0kfNa=J~b3=d#hIp5ILhZ}2`g)Kwahg$4blYGDI?J{S^9xtasFbp?E=(va$LAo8GndYTn5)HuosuVV<@ZaVK3Uj`_s4F$y{$AFF zw|x&{kzZlQa#s(Uv{)r@G{{bkR*iSeTf<)$Vz0n($(u5Ox`=x{9 z5(28EeXJ_nCi1FZc9;x1*G^n~NArl7%XbZ5Bt;?VF3)D%`e6jZxFwbgXHxsTF6OgK z%5avO#C@UZB-g(tAcnvz&!-qlxHMNkqp}3idcY~3aVqV<;hmMmQwnx*ZB^nMHj#F% z8oP3hJlIPXODCy7q*tpu0?tg0h>tSDic^-70?OErBS^7!Q!6XQ<+21NK7RgT@IL#j z3ub0hcNM_V%CsAJF{@on5V0w*0xe^Lsv3mvm{0cKOtPhN1mr;`YJpHkeM|+ddKfq8 zDaq`n`pzd@)YJ?ozK7M~RKJdg-M_ehE$&7gR2N64c4JZan-b+EUPs)SGYE%8D( zpX-aQC$9>>FVSnAv~lo?NGoOu%@e&nr)AZBxUlENlE@pEL#LRMZw$6i9lt7+xac&n zaLq&3Q;xdoEmckhcYc;_;Het30rLz$jYC?S1$c#3l`#k^nVveh$E0SfT81wgSSgL% zDm&zO`uRObWAHxJfzH@Wj+UU(owh&NGh2d(D3jp;jvvzqzd_Zs=;>q3eG*))acz?^Olk8+{(SQDGg+(|mvQ+i6|=FzJn zmvGZY(otD+wv;F=U;i3>UAJJtN@=(Zhn9LvGe6yAWT_(8LP`3lg|(C;T6`}*g0WbV z^02Ef3^I0GNDkdztH0&(a_wA+8m4k|5pQKwB{!p3+BbDLHiq%APk*16^p6TAp-%f+ zyAO7c@>wR_6>+fX(&_z73a%SgYLO?eFse zPPB&Z(t8?PFxpDA(=0TF1sY%KoDa?fE208!Yj;a0T_<&TU8ip{B(mKH=6 z*$kB2mPsLPZEaUenu7=F=Hm(q3KpG=jEp|nUuj7^$-Yw`CZ}X>xS$m^`P;LMzB$Lw zFXWiH)-B}7K*EdZUp>*iN>X1*1-9y;=7%gOFN?6_#veuGS+Lfe%vNoUSZz%n(~SNgNtDQ!7m*8?R5H^4es@cJql+p-WD#uN0S+Z+i*TOes@EOw$f4v zzaXhYb4%unP@?&v+fE0Py&vjayGH}j#J8jUG_B)Ll><|Z-}cjcNAqn4-BB$Ou*Y~N z7f{sn963B09#7pVm?!)pwb6?!CgQah?$gyLpT1v~GGx zGtwR7_E&WIx*ursnv-Xd+LJ|47#DGa5VJde{J5*7b7_y;qJ*A@>>L{h$M|AFi=>p4 zlvOzE7@lwbMS}~g3pck>J!6`7v6{jw-ZY{!Y7{~9lA#m+z)JHkZAT7V)!Jj=<%C** z^$2r)k-RlcAk09CXOuYjL$+(#JYCG3i*;H~b(%^st~n!sY2|ryOVcZ6-*m&^^;HIy zmb)e^UvuX6ps==th8_}Kzhkn=+NoFZGJhlCrG##rGdC$A{ ziK~#Gcl{t`8a+qh%ge`eHZ0=&o-LFx%`Q)@2)?H|=tL~3T*zlz!e<-7XM3OT!-}bP zrQF5JT4kNX)QlgKOd7HqLPM@f_bfa&NazernzIlzOw~mBhp&BLnVx9pFH$8LZ=EW5vLDDGLM?c0}Uc7jbFc|(gx6DkCgq%}rZ<7~e zUl@3FdG~epR~1w5x#C?JZnfo%AxZw^#KauPX~NzVcdg%JkGt4kE;mi<#1pd1&_2%t zr>s}*f6iAQklj4>0i!UJ2Z(9SEpf5o)58^=!HcOapV+GyDN5fEbFnh+yU)$}*IM66 z)$?I_?P7qlnmndHxf~uBxgOp(4<+&ZzW*T#Ciu%u>Qq!D{mAU!Y;$3-pA5SWV zL^!Tbje{|V37{g}ons>-O`z0pvXV-P28%T-^rM!#%_t>3g(8mbdS{8c^B_JbVjuxK9Adrot4`CaEVYdu{GDysfbC`|Q~v!L((bBlDH(xSzp+QBBU$coEb21evUo=Fu% zx!~3FV;1o5zhCH#77pGNIW{zl4_TQ0&F;)Ft8%^TA;C*(SHRn*uI+h3aUuzO*Bc1QWjb%6`F_a;7@ zYFCIjVc{xf-<>yK-~UcjYV~9svqK zek4z-cg#!UJO$zu1Hzx%$VQ=}@k0LAVU@4d)=#0Nn`D{>)FrgSRKkc(L1IzvPAxFA znw;lt5V=xOQK8(q*0YGC!CB^x&pUz71K*8sINe^Ak{ZCI$H!lSLr(U3KH)s}vo(a$ zEDK%h-aKiV`Z%2*SueBW9T72)PLVc#HPP{0EBOTB!^8V1r4`-JJsBcTpm7JXl>2_C zB6lp7GT%#P5_47O8J6ch_*F>ZRKdAbb!ea z#GX6Wn!dZsWpjn#7v;FRSxYyJlCm{!3n$Q7h1PGpyxQ%4(*jlP9P2-@h;Q4+x??~G zQ;EQ45OI#0T3S-~Qfrh=^}DujkSDk5xs~aH|2efT4&v2Occ}Mc2X3xLMV+LBNw1=s zz-7nD3bCG29_1_?_zSVkA9t;x~xydjnOS`g>a}r|rg?xz;I`%VbDHhaSK2V!6-dgj4ek z=py0D@}_)le{XJ}Zow`*>amOVOs|U6m;TkXwn;m`OBV#h){K%2)mBz0P#tVYCS}oJ z)jCxFr65M9))-ScB(^Ao#L@kIyV>`~onS1#Jun|P-z+E~Fak=!&u~(lL;N`}me#xK zSRJzgmHGzyCWsJLnqP^vI6JqdY9K{$UbZ4N%KK|;g4qx5+%X5WCFG$@2XkC2_>4uu z`A=`j$-p21VP3zsWAc*%W1%!RfJZ#7+`lpOHX@co!66|FDX!o;w7NszGb1K@&*na~C9rP>%y1H8)Mg!Cv=n-M>E4f?G&qg^c0zpl339ga ze8B1So*T}%X9*`DFgQsECsJb&d%=lM$;>Q;nn~pK{Ain5#nXc;fCSM~U;N?N zbaIsO@Wafn>P-{s->jo}4&S>ypT5zB62R}kJ!QWbz%?0v*sW{!-V(W3p$&3>^r8PkX=f+7# zwZ;lyiLZ7U`E;t6t+Y&4P|#$)mr3=fV6VOfK${uLw;0y~ZYTEr*GZlfAXioUV7-|E!yB2HpeEM`*JyPB!n|Q$ z-KWj~4#2G=Eh%<@iHyMhs07hoLANd_GHcX9*VF7eKoL;@XLUQk-WcX*q1Z{tQ!lS_T~{&Pv&P>*RPjUI0fCcY68U#pZ0Z@o=@|-- zw?TQQxXMaNJ6l`Ozc7ucI{>OQf?J&!rP=uhv1K5#(nm!T*pB1(Kjhz(e<&Rq!!?sz zEWa}3K2P;YdcNj0GNQ3dj-3f1IIj#z{%Kp2Rf^Rj^~vDx>!E!5-ZnH_Y>;|BrVL_7 zW`AWM$4%TaX^wbU{E$&#*v30tF%S{=o$)|#QbTYs!AdXU1*Rt`5 z0{b{?e~(=GE0a!b#qWbcyecjxBjdUPTh*&shi@`VN3r)K6~U{9?Dtxt+A z*q(*Bfr>dHr*34#)OC-ZakHoF@lTbTQoR!PyKbJFN8e3^yjMG@JzU~#f%LDD7 zhXd=2dQw5!TB$undY{n0cS|S+crqZ1Mre?J&XB~Y@UXm*w)n)usOndcH7D=|OLNHe z&3kd$)Q>JA`gz&TT>Ng23&=5Aw(}2mCN}j-{-;#V4y?CU-zei2_Kk7FZ-!`KB>g%< zr7u=>h#O6Yt5gxiaW0X>0&N5^;FaATpYC7ss-YA8V6^hJ+4~w&_JiUv^hCWXftbKG zPDBSuCrbCUG((n{)~`1t1A$=XX+{)&br7wLt?mhBN)h0=}5TKkCf zYB4@+eEj;4Hz(fSg2UiR3kTSKT#2`7$=iPz&83kt)>>wwt6q$`eKxRDEvunnhwjjJ zDrctQ-FSdM71FST(uu*i9i~TdBcY@P*bcKaY%u2?WFJ9VJjd@wg$mQC{^s$#iC?fF7 zVaM+L=1<&aaW~T-IfNre%|vI^;yhv29)J8NRTgW0kV3|;c6?N_A-G18?L;tjC}){2 zy_n2Q5Wa1-ROO8SlPDyz!SuJ6eZ(2wwK#U{n=vmZPiJN233EA@cfjB5MndzAvNPj` z4^*yJ_8k$Lxb<;Rh|%|E(hGxyu9aMGG3@(3K`@ykWY=g0U-O9~{(J_tAqhDI90Pe? z!mHYBRZxxtj?(68eLi0E=N;Iev+RG$o=`g(oNV+V|7B7J%ZwKCNsQ^3do3<;pY(8QWk5?~~ z@Ca|Qld)GbFZ`8;m4uNiQPxXQ^4u+UZbmdS+KSY8%u$uzp$U6@14CeumgC$pv6=OL z&w-CM%wy{7ijge8Udar10NI1$rwIFNa$oeH9J~%wpaR7_u{rU|I*tx1>v4vNS^M#A z417>ioTW?mCyb^yZ8*gd)69&NFySdZHH_yID!)BTN^A!L#c7|eJnyVHz!n1><&Ky) z*F~EQn$1_kD&+$+ye5gTYeR4}oQk51za;5Pokr4ZOK8zfz)(U{98YHk&CD3OnWOUtJ0oGDl^lwF_wR|H$Z>d zSIy5lBqee@@JsNMo|wHp!mT(~TK@&B8klc4te4N#y)P%ycL!1{?d8$qdw0gKM*q42 z!VfR>E|nF53Ac?r2GjC!DHdn4@9wK1uRuF6o7ZntGY%Br*2=PSN~toF5Tx<`C1^ zALmmP>g8)qOM%n5yRV#cX^n`xH+1ay=k$wCZ4C)@G}Kz(1R`>7{>4ZLxPFZGDVTI@ z$}&Xz7j?$ReoFwY3rF#olxg*~q}L+$b#q?vf*Xdtt)5j0BXsK%3*-+-#45hYuF}85 zM3L#!dIk_bdDFun`$#6TE^~CGSKozbK>XPaD+e1^C*lE7U+O=GBbuRwBR3<7kwf)x zT!i)KJ@G=JAJR|qMCA1IF2$Tg8m#Zl_wlC59;RJy-n{2_BIZ?FSHKs1aEnh)#J646 zU~{BYtLRzEcW>-P%PW%*HH2zNT6TCTjmD zi8D*y=vmH?9YUZ9*z@w$)%)X-8!{%966=%sYP4>PT=Dxk6}ul@lvk4`bP(f0HBG!P z$rHcFGH2snT@A~s##zG7HtXx=u=?QLy>NSOQi>l{otENkt&Vi)NK?bkHh_F@l~j^o zbf$o;2?Cq=hv)d~{u~x6hNH78Y{rND12{Z=L+e-Fn?j6O)~&i(e8d#OmVH6bk@{wj zS?*0;^%?efLO&g)o(Rm#khbKzOw4ndmorE}#8NkZTDQrhZK1H1c_-DiiQ9?7jDJ;= zuoAtD%7P%y!@QX>`%LJAbMgJp5bTha(cZo74cyLv1Ew-c)Y%qX98H&J2Kz?=E($wq z^OCdZ$5Dija*ADVi1GK^#YEvDPiZ-`)@;>DktBUdLv>&@=+4p5OB(wH%}IDDS+Rsq zAGJ@Dbvq`hz?*XJyG7ua!>5+uDtfz>-4z&sG0Cy=&NJ< zfzukr+s%NK3qMFnR^A3aDW(T$_C#3Tfut-z4|cBixl@&Vytr`Jn3vv?BbH3oN}luA zAX_W8{82Hnc=hitfuH;}?Bwc3SQ`|tkROfieyZ6KtLpx2P~dq%znNlP9`ezcy^OEr zCYGT-yB_JaXN7g<3jdWzgnr*?DE=4I1GEZSBkp@UOf`cD zq5(nod{-amKA{Cv794v3lqqfNUBoR`q#{)c6G+IZ=REbapeh<3=UU7J#v+L4!}Wa2 zNI3K|6>6nVeM6j2q8EN&s`i$L7$uO4v#c9t+HO8dP%YzKeRBx=DOuA}_uI*U%IM_O zerwr;a+NP?${MEIOT{HV3wf7g5uC$8W?!8Z2H8xyWESjJ^Q9x}rgPU*J%7mf@kZ3d`qx8u zJ4Gjat(3$%9;=IAC|Q4g`K;()fdSOhsT5st=6Cg*uAX}Cf@y9G2qOq!Ft}06XLyGF z&gr@D=OyyPJhT}tRwSD0LxWG1N+rLG$yrr3nbA0D#!#&Rd*t)SUYB2U??h(z;QYBm zR*&XJqG9VeMOu`Q70{H#9Gb`x5>emml7Wh!w8~`l`m5mS5;f|i|AIpWFz2j)R6vPF z+U#^3P6sSdcIoDilr2?oE$puPFxfcOM%?e++D$nV`W)1;|5zo+U)=D5Ug zQaEon3yP#;)>MBcFcR<4!S89Hnq*dcB_!;i3gJsCS0ei}uRXb1jK2NCCf0UgzUf4$ zY*i^&rg9Gc@s;YFH`ymA^6tH-sy=hJf%sU8VTgt{gg8#^$ zjlj8lKRG{FA)aL>%mUA@syBPJNaHWf?Ra{?)Yy2Z`(bf6mrq4Q(SE5;dnr8LLuqHA zACae~y?)&YfOPU;ZKxU0K~GNn?jeeaa$IoEWY%3(H2EyA;z)6#fJFLow@S9K*?SfI zTzaip{q?#ts+YykrfG?UAnQ$APK$Yv*nG)Vp;LA&!Y;S<-`kc8&kjAWU!Qk4j%P=g zJ&#~Md8*-(qS6mpPw8@2*}6`>wwAINNlb%LRk)-4)MwNe=Edc{DFiB%9Q{&C9CKhY zy2y*}3Ys)RHrvyY3Jc&bsL}#k=Xm{veZI*7~4N|SSLg%mivln9gb0}umet*-NYksk z8g6qlLUHE{51|#|{p0)m#qXcb?j?OTdm3}fJ4{daN?AxI6Wf?!xn5?~_qsA(dyK%W z144Rk>fRrNju%D8?t6AtV-mf?EEXIdOO>6r6EJuwRjAjw zTjk8&V#6x;Pbd0Fs(Tg<;D`}q&0Ys6ZF5ggx(@@n&XZ$%cm4o;*N^cLb)w?AalTIb z@bK_*-P#)I%-mss}suE68KXfg~P}CmkM_I{NHoO){vG`YjZ@7m$uXhig=c z?{QVb&&400IE*VRkqvW-;u~M9w)r}t9)Hk5I(+l+rhuoS+V$p7A)fNy51o&_6P6vn z6F)L~InM|)F>4n;A+p<_BF>jT#d#dm+}TZ1%%P`}>6~jd6<5`2K(>pplFgH)k;%`XlcmQ#k`;d5$8X`fF5B=<09 zt;_qZjls|AAJdd6P1t^J;K@D6`3i?O!Ge?7%#q6+9j2ioA-~|G=LknFN;QEkI|$5? z*UoDAHS?7dpA>|znB4gq99XNTE4XohBXU#9!uoP%#^Ce4{w0T#b{{2Gxd{Qc?Q_TV z??&SA=LLu}KfF!SJ1?U?Dy(=@JWvNgg zEeQzmz2K}p4^H2nW@&G|!27%=uMW!o$smBj3c=%N^Y=M{?aDEcahazYZ8~>^`0d-U zJPA&FQyTptwvYrKblhpX6eRR~dksxXp^IvtEnw^y;xJLqKfT^btIRGh!dp5XZ4(Ju ztT=HUt&wWnSb`UVlObjJW;wOqGN*`P8F3L z_|Yb?wzb(mO8u3^3R3r%xq8Vq?~2?7R|APX`(#Z3#2&oe`2* zh&~gIo)#VF8BU+|lSJRx|{=v{;d|VSRo{>mOt#Uf4wPAuWd#)V9%3bC-y&dvfXtH%Ynt@m(TOc<@}tSP1HfQ z)*fy(J$GM{5dL&YT+F#ALX6 zJzYrR@}asK0lJj_Xb(vaKQ+!k{QF}A3EC&0jvjrK5cJ%-1U+ntxdAW3BW%mz*Wr*P zhakT9zXjWiH+UK#yFel6R^ez7@MCxc%7@*sVDLVZ04#H@)yl{ysr%nbF#npi4>r0p zA34sK#N6KCo%cfhaMEg)#EMG303P67&OoX(*=upt@mmU9$=r!~l-by(NO-EaM4gBt zB*6+5pi8Ap%iPn&_bn^kS6Mqz`{b$Ul3W5;5Z70tCwG0MUgm!riDUE`Skdu#d>Q_# znGiE?EJ;Y^0b1_o3PsHijt>sjU62Rhb~>Vh#}}XB;S@Pig7d{;A%dFjjgAP`Q#@F$ z3-mSg=UDz3ee73wbM=8((VYm2F}cOfBM#QW2TBCY3cSM};gvY;g$VUhDPa z?08qemIvXLvP3iwt2S9DiOVuK)wRS|#qqIr_W0vY_j9y&6PM$`DR2K*6B+ILMa~e}sYbZD!{tc3<1wgwf4NM4H1hzr2K%1v2X(=XyYO4!7$3`f_*A zZ{XqmaQ4%nkVxhrJDoP6X;W0OjUY#%$WUd6q1MNe^qX3;2HSP&zqI2WEI5o}jrq5U zB3F}pTE9)EMQ`9t4=x-4qy=fgHvLKZen{G~+P)X<#=S$T%R_i@I!;_Sw@6k=9OeIc zP_98_e$-yHLR+X7ZxDX_(Eg2loA%I5=i$Cq3g`hhL)r{FNPTcM^(xptaPeD8{C6^~ z1~22QRK~t}PXP4}#GeU$doNKXnPTXE(`ZGa_9u&@_8XUZ@<9Eb1deGY?0BaX1?EoL z5JY?4;%c~U3%r|7<(x~;@8G%v79Xn~C$4xw*a?meA3BH}>w5Qjc+X!Jc&?>_hN%yb z8CwIeEE6+2ncx2m?Vm4vutgd=rc>^JA`Cx-1x$b#VR~Ao5rp%wVN1#@E0>==octrf z02j@WVsoUnRX|5*%r~Dm43_2tyov{&hB+>7Jk=b41YZp!DF`)%3m{M_oe$=r^1EfoDFw zLZ$y-a-$Hd>0PMjuzOjGG`XrhyZ$%`1^`DqHY(XXE>zI$UKEiLU0 z^bD7uQfYs~DoaL}{~bs!#11()oxH*}!#HVLaBY@;@H<^xKk-PHRcI=_mz*!j+Np2o zV0{n3!f_yoQl%!`)T--oSyGL{t9A_gbp@fcTK8DDAKh}cX8qtsLr3kqg-7U*MEA7Y zJq{(H-3^Zk38r|0TO)LtRSj92BX4 z@@V;`gsKSY{6z#k*_Vk+Zl=Vwf+^d}1kKSiVTotA0 zt&F__8Y65w057;H^Q2?JTg{$*9ba&UUU)oron|**T$Tj#8$4{&E0Gb94oN1l^YZcS zRmFv9f_hD{!(cj1t2=t8HW0Y{5jFimC;t0EBZo0b;tGlBb@UU3pbLmkLYPY8Gsk9`bNz^1Nm6t2IQOoYKmpafWEv~@EHKm z)30w}pX%Qq(pD{vfmQ9Z)amC!2W?5-DL7ra^#iW{gtu7P$?c6+oF<9qRKNT)Y!8FO zKS?r@4>F2ytlF&|)D`%O;uDtWW-u!(UjDO(((?CHH5D%zF5}WUT^1wwsb@t8hvY~(L4o*tg)$_n~dM2iL1-Inn>fFB@C&b@Dk-%qE;Du&gMVh@evXUPRBW*jlG{aG$ z{vb8FxSIT$u`8UE^BzbdIQXa^l1BIs(teB$=YA| z3+$s_H?y|^bmB$X`Bhvd&Gu1mxNpKSAsxjg`l>1=Ld490C!NnG2>(;)k2 zhgi{_2c16Ud>?*vlSHSGBb>VT_v2X_KlL?c<2ezsR>5fr9B`n|641C3k=A9B_C9iT z9RmQtPOe!%f0UW}FA6-ZERY+&6WbUxxaPaAmv?n-0w)4 zFfU@7&%h1Z`+TBww3;+xef3)yj5==H_JeOZjUo6rk)7_9?&^`izEZbEKqb-mq~KA|`ytA*h6L;U!v9eM&NE#W1cqh1$U`c)nc zkh4$qmn5>h`^|)yA=(Mb)4~_Vi72^u0)M z)BE>|fM-2!;|BuA|9osVT^~HO{^hN15N8TPh=S?W_aI^^s`qIC1WTy~q2opNQQ+Lr z_0M#d_G;o2kHi4{Zn{ixvAf#H>IQBF5a}^J>SBojaas|kjc?WIcG$~qx?ZJ%rTZ^0 z_qMb0G4Usn>9l46TrWXnzj;B&4cxht@KR_s%57`Gi3no_GQ!>@~rOq zyw`CWBB*yy$a^;#v_BKUvpS3duDcN}_&~Y=5tfR)Ms=^R9=Jj%N_>BOPkrX^bF5d* zJX`GK$HK>*6O@E=9XMbcyG{t-D!3$dV(&_aQyzT}CAS!xMm%9nV||iC_KFDp$Y=xb z>Mt~27U19nxO}hFPrA`GK8MB}fTu5$c2w4KFn&K&qvji71D(@N$u+J1irMmW%+rAw zZ>JMNEA{27+n-dZy35`1spXg)B58v=G|MUY8Ai5_P2l$49z8?IlGNi9CK{Lx5r0{3 zFvUXtu`UCR!0(Xoe{Oh}QOcS|py?u3vz{~gDY}mk!Yfu9FHH_u4B0s{zvNSa3|i>` zi1cu9cow{+MePjj$9lxqVOoRAnz4S{t_fL_ETm!RS8@hvZ!4R9XPAmK*u{4nR>}mS zt}BVi%w6nu^M$}bBF9&BeEy+ zLe`GkqRcyPfIedV&gbF$qF39P6UxneHx#QmVCFtJ#s~0ku?|y!#dzQ!DSAR_m7&{? zOLtU@AqVRUpaIm}|1Pvah|z&&tLq9^a&w$++;0O7woXJP7Jp{6nmj%EhBQfec<{B5 zK#96F5)>Q2JFqS?juhtNOMWgDO49531!*#Q4YM*b;grH1nl#fb(KVl^?YKv>8@N~% zhSw9x4dtw$P`a)A`t~pW1kOzQ2GFM=KwMi@ zxP~IHuz|lo`|VxBG7hDn-7XxL#k{RvX*_9sCFfC!N{Q}CTq^Z!{?9S3`#o&)#k?scdA_WTjNiC)9ch_&e>ah+jb*R z8ozY3TeVpAfM%aGw%+bhQ2qy4@b9OGx)P2SaILSE8r5`XUOf|fey=#q9;Mvbcz8ne zwvCBzK)&5VM!`?H;`VF4odA#;|4FE6#|A{-!nGLn3J~v?ai6apOkGMSaDJb)Qe{BC zNkq=I?{74AAv-Y=%tW_L1JBnSdQP2$m5^G^JeppvI8Z4u=R}8!wJFOlOO%i-KqSXj zQ5y1{mEnfV(%f=~JVhn9ypWeD$-r1Yma(a9AZq$MXTy0hdOnDVDBJfL1)>Q;6FNXz zr~bTwu4os(EnV2GnvTh9a<)~5-HTKm8nEqkSR*^^q0 zEn|RrG#XTMx9e^ghLaO_^*SM9Ughn@O;5INlB|TZ>CJ;%?~)(|=bF2kz^U*K5;o1= zviHV&JxHVt*6!Ul`;*_cIh-2H+5f)}>m<0(j3v-drs5_C>fCd4)tpN}GM)jW!r~-5 zxt1oLR#q49)}nbtN_PIp`N4@t6@89lFSv>)A~s=#C^oc@(5K#*#zjOwO8v%#V)}kv zCjFk7-FtvwoI<7t|Kh~G8X$^0cY}1_>Y$(XFtYtVwQyoi*r*pDL_F=l+5wjiAYS%i z@M1^qB?A0-n=4efZO|6$ZenE?%^)j=W|(_eJh)1jtqXyIkR(ueB36EYx?%!)9hyPF zen+@f>;GN{C%lxTck_*E;_ypLk$w;jA}S|J$syild-|P$CnIUqg7wORS)ejOq{O5* zd3ocj`(X$6k|6D++Fl7dXW5Ig!-;&~WE8k5T?Dh%4#9VbDUS)fXq|9FyNg`@r0RRi zIpr?=e(dE-6guP^`X0`B_rn#lUuZxGJx5X-elMw7A3obwY`@{yVq)fkRv>am-f05= zg!f_cS5UGzq@j>*r^2iP>>bA-?yB2phCKZCT%LN4^RHKc%sIQi@ojMh_{R27nvvDC zgw7wo*vZxgu-l^S>!7mz_UUapxt<>&4`HDeGrKbFQuz?elp>_oSABJF*y(9H-7RR( zQ%s7R34fYYU~hOF3`~Rtb|N@?w4^?-QS4h`jP+KHR|&V{>s#JhvFO@hajJlt0lMgm z&2JSH@PvU@&l!7U{aIa92U6Uo+Ip4WHZ$DfO7CUD$VOo6APQ)iSo-WJU^yjj!(`8P zM*{%^lwqzLpF;NP|GZD&niG$=ztSMCmbvRb+sd^>^xEoV`W_j?+vn@LO83ee&a5V+nqRV)4ZJ39F~LXdt$zt$PUyWB zVZ+@TP6~v&xNSJ8JYMl)v2S~vnVed(v#tEpZ>$E&Y|1`7X+6E%J5{UhJT2mnbVthg zBMCL1paI#93JxUEv1NWEGc!8!GQbiz$9j}n_b__JU|E-Crd2oJ36iWyO?Z`wm)2bu zuqp+txE#O$f|()zzEyh7Gm@t!B^eQ8I|DN%X?E75K;;T9=<;w9=>7TF>AX=Vvz~AT!=B2$GjJa9e(_smk;-1fti(|X#{U5MXmT(^J`)9(! zx)^iaR8ZkDA5@CuBXO>=S_dFWR`+lTmIsE@##^==0oBs;L3<7hE}hGT)F&k7kucH^ z57EIfHDvjD3ZG}em_7tN_vCZ=UA9@^;c`6a9?G6GT-ewsefEP$;j(opbdm57=1#fRhP0>zeO$RkO0PoI!p85{p{fPD0>j<^oU<6BC_0>Bd<-zecd41b@0k z&d$z=Bb~o>HM#L=NOwjeUAuM;SZn(A5 z_wELn+jQ@49fqd{3rPa^E)UIYkf`Bvg&Yd#vpX93*9_k9fz3F^&_ur96b6zeQq7NF zbCN!UMCfAn`1iwq z^YbtM+S@p0c56EhC3f28u5%89j3@Li1jF605#Z=R<6ZW`_;YXJV?03$b*|C_ubDv9o?90xsozCS10 z_naMgw8xS6zVJ<5Jy0Gplge7bFv4M)c=xoPs6@EhX9dZwc_C2cfK0Y$wKA}lzsRj(0pbQf zZ(#i%fZYfA9n(r6AIrz+e{J|nVChkvegiZ-*fz@@7hSfx)D zCCIzOn)^wg-YeLR?D2|VU()Zrw3q#87fr=T@GHT$@ntS_Owb(AT*J-r`~s>Z`0{n3 z?k<5Q@Ansm@5|)S_zLMll!X(oMFcObRbp37gWC*&{+@TuP9z@&JJqc0HkDy;r!{8r zl8n9bu9*s2d*jJEiK_hwXxe(>Z){bO3~_p+{~QoS-UIV2@n9!6w+V2f<c{c{=Nfwz5~CPaIYco4Q||WN)LSoJcbs96y{6rkPb} zyo}KH1qkM91RP$()1ORexXV#BbtBo(5AJBm%5f>T_(B_G`3r+1I&mrFK$0*{XFw?# zN_+_V39Um$rNP%OM-h_tKJH47F*Qt{i^XlAhuc!h5<^7_4bl&+5%+RxDngF@5Og^& zPs`XRyBLVCZ}NgD`&{p&5eVP>OpAtf5~tRECRqQRfTX8%Vd=dOiRwei;LtLRwG}_O zdjm_5>-?`4Xjdg@O2Kl@u4-A|mLkj)|CVDU<6QR<{bkCBj4-hPXLo+?xlw7*lA=^WRz>6ErbCe>2CXI zcyY3J68A_J6ezCkf7}fMMU(S`d~csa&|5g}4Uf;o7bXm)?0L!!F%FMK**s}36s2mx zMYv3SK~%H+LEHG$s|ld)Wch?_gs436AcUr#o;w1`*+1%)X&6meju~ldOQ8qOGxSa6 zW%5<~Bv~~5*H>9~lLKSFlMw4TL6pxgA#tZ!b*%r6HgL8Fy0K-d>pdvnJdg|dKM!AT{RN{Vgldh4u-Go#}s+wBOwQ8hL& z!^^`^$~gOhD>2OaJ;ZaRmNwS)2R=o=AVV>ye`=tp@v)-ha!He@IIhDE4pTvu!?@Jc z>9U(OzYIaS_yqv=yp!4p(O-OY(m2GqQhV~o3r~s>K95NjKmB_9`@>VGK3K`;AC7O! z^9;$& zTVJvD?}gl-e$}3`E7d2$tv7%Zm+l?>jLU_N@Glxdxrfq7TwC*K>$FBqKjoFSZEKzPQxn$FROM5L~#R z>B;M*R2xEuOXrY%QU$<&WW~vH2s>+Ieh=oU+j56=E9LcA6^1rkzkjXT2%YjwauVMp~jKgvOsZBmkDuIj`XFIxnwsgoK8C3hzygonAzY)ssBl@M>Wri0Ps+^vD zFRbVC@vjmJe=%;~vgEnLl8!pXf;pXmvqwAwJ^qqT7ELNPfaoyW{&0R?0UpkKHfzF<5k=!1arC?Be(uPHlymbYg53;i8z(bHZGC0H*hipc zuV{0%1<~gA=1Ih1j*NG(b1V<9%Jif+)0<$+__hExX}<4WjZl&`e;f5DVMxszYln7U zYvRAAx0SsA6%Jke^o&9+L6YBNr#ngRF`uaa9M0J*AA6c*1p42mGYomQREa37*8aM7C%!R`4ATk$iV*FY zP5)J-F9TsauHa8mzQ6O}_P0~p?kg{7M2SRU9-c_RHL~`yDLEp324Qpg&fyr;5@K0b z7Bi9i!6Fdlo*(VF+k$!!FbuAwwVkw;=RGzzi4xy|F{K<0Xa^hXS&Sf}bJzdF#&pLS zxhY@1!eb@qmt)#_+UtcP#|t`qBJ9*wzJcN26kKj%SWtXrA3-V5gj6_VT0&gK9;T_^TMe2C@aha!b`wi<5PSgpII$=I~=m{HWl@tpR zBI|u5CMgiN9uHeOxCqezy!qR1k&wqY-TwnbaLC9OEy?f=^+eLySMomQrZo#7gSeWf zq`m&OKrk(nU}TU_aiP?>dUs_O@cqvlcCAbDo=N06d}%Y(TBzhK`EtVM30@Veyr266 z+K-EXuB++CcgSBP=SQC0F+B@%TJuuQAEND1H&#{F46XRM&_D$P0gKwOj0x+u0W;4P>P$(wXyJ5k5I$;{e zZAXY2R7x{?Wz~q|_8BHe(~W_hQzJKa&=sPLoEvkcNQ)oJnfC{XR^!>M)_p!_#H6@x zxTN{tMPztcY2USsoT>_jkW3&=2!d(W^CBN2+KHp&AqaD4yhbQmxFd%UGkY~qn$1ES&+*^b~r|plgj*E zZW^&9fiTmmjQzWitO||5J*&m1_dkbGjDbpy{_$SG3W-?#6G{4sTa(@EeuW#gA3lA) zZBbSxFNVAasy^$Xw_4EVVJ^6E;f*n|zu!3g&CFK9*sO!K1p0KWwADylR+x@G`B<#a zout=sqU(+eUJ8@T&D5`n(aekdF2c{RxI9}-c(;Nz0fL0CNZME%NZ-VAMM^BWVS)Xj zPu7Nv5DPVLJbX0rjd#?N$=4K~-+QNfAs7SU=E!Al2LhQ~VO_VWyDT$JsD7NOJbU2} zS}lRi=Z;Rl+VY-RCuuh;dN%4K@3NX7N`pwBGakQTbu2D}fVwR>&U=RImPxYCJ2FmC zRQ&Zrd*uL=JQq|5FycNT0Qc5%T(~g9T@JKjm3i#Xn7$GdMc;}Ik?5*iUPHW?S%_LL z%E*swN(j^W`o=q|#MD-(lQX{}ao(wf1 z#owMSPhqF}q{;b&O)OC=m??$>j6t(B?DMrd`JHqoc_}ORhZ^l8so=H*{9S#E@Yw!< z%ddQ`4P{K!joYJ8Hq~!SKv(C+vW%)_>_eVl6Gk>x%R30Fi#wni>OJq5U&U3>oYVex zrxvTw4j=+Hk4=}1N($6ZBznqSrtiRlEzp!wf*c03L^g3bCu<34si?EIbDfz8P%Q6UWnfvrBh3C} ze=~{ic#*Gu9vbWVz#cScSxvl||KwUL;tyW}g{!l!hQ@rvdj^q{vt>zE*aOOg(afRc zD|Dc6FcC)HRQY`W4AhkRFtw=E!uz1P}nUqE}(E3*L;_ih;R%w^TMkXzLhRhusHLh9WUOH@JG zG(&dJa5Imjz=l0C1p1RV*FekZ7D}*!MZ_fi;+E5D!}ANPzyTys zipsCgj#+<|Y@|k|9oI~_C1J$6=qb+nD_(_pBmzG^(eq!8KX9x4=fhe{KcQ?aSt9~A zQb=WSH|wL^CL^E=8lp0|j#i=2uUlj2G_~xJdD*+mZ2&Uc8WU>5Vf4!aTnm2t1F;Rj6>*EO`OW_YI(l zU#EsScKTU?KMT`8V{oW_)y71JOt5{ znLvW2&VVuwC?itxoplk z1COLyk{dXxrs*gT1RsF+MBdyU0V2R3fb>b{>ar@D#oheDgWYJIU_}bqO-Rm385+xH z10o^chC}y7Lcn~Cf&V=EzHz7iJ7wt5NCZuWIE>gj^x_1y2AqN?{~s#n6_}wZpnTn# z0)(wBu+%0W!18+*`8U(PmoFn5cogxbaAw9g!eTQyr7Yv4S*t`#;|m0|XMH1rtM(dt ziEBZIQ@JE=vG~ogvKrf&BCpvu13;;|RPW@4$Leeu(W!v*;DQ?+Iv)CPbxdg=`DZWShr|`K`0&Xp2lsO$!aRdp^awmYZ9Y>-|{&ZWB`Ib^H+On1KHauV{wheB;>j>Bk-n~z|$ zGW^qCw%>459>u9uaje(e;(iK13>~Ek4=n^u&GH7w40NW%%PY}Lhqzlcz4bZFauZf61DYBOj58Cz;Z$RPuE({_bQ&Z zg#wA3O4wxa(SCi~Y)}wZ5Lh9sRb5>jYuM}pEZ9NmnDrHKgIxnit0W}TiHdt)!mat% zqrmr>d%Q=P@X`tm)TlvF2cf|EjKEN)HA&+{Ba8Nsh#5&(^WfA;9%!#rV{xmJwTm z%f039J3c1P*K$@fdoRznl4&*)`jw1BEaQD8Wa+Q)qMf5LM_d;CTCy#u*>W|Sz+8Ks zwiB5d-rXuXl68DxdI>eL8gxB|M^Ao>i3UEh`r+HfC;385lbcCVx_-^IHOEJLETBiF z`s&D*xs5rd~j%oXR8|XQ-pXoc# z+4(FY2=m5yDMP{igk)a~1g0;Y?JX7`)il-xI^Bmg21Ob+-$-jN%r`j8h_}NtxYdc6 zX29|I!Oj2mHNBWRCU{9^50ttM;^g*I%iGS6pCYRjZ-cnFbd#8`@+Wrx$Q^voC1Uo6 znAf|FlSzF4W*!EFvRqaW`9jEGz~no5YG*oJKT|bRGlNyo^1;f@)K5|cZvhu(35N{h z7u`e(haGc|fljg=vJQrIlHScgohoBBzO4clX|ysWg-#Da>D&i2syJo&|C&B%R(-Z` zNk*&W9d=E+BnI+cO&B1E7>!D9aMfTd13Z*H3A2gRhBoZu54mh&pj?j3z zS`xI&3_ZBT5>UxvSKMbi5s^8`q2eaTYhnn7uvZF&Cfcp)k4I#d}b!8 zjiB$j+JDIG**W->gb5rqB_);OP*5$+QHLP`7Z2Y=wPMcE7=woIH@jI&cw`eQec|2# z&AL`#(m{`6C4#P7&{&_P{u&*p!twCz0TN{0KsSe${MquAh~=t>UtT_)ae4IUTO80d zn?wFNhJaMjUJ(y3FM=X;6CZ|Zm1BH-4G8@JY$wn;CX}ywC^y&XJREpFf`u$F$@=SJ zbz%F@t^w2g7NNR5%1<(JW z;0w0f`Y9T``PV%ku8I8E)!Gd(?EUY@+=Ip#odzSTTmT&?@uos!17Nlq1QMw*^iA9%3n&KPh@u zIbYzs=$WF*`$>Ev%~$DlP!esu-<;ey{%a}Jru}(AT=AQvh--uC_zB9|I$A6Mi^?S* zhLzJu@%j-CuaV~p`Dx|^Dq`-Epl#Tyg3UMA!m20)a0xRk;UAva*ijR&kx4vwp)bmZ z=^vUr48IGB8f7|iKGRx`3`_Xks&I~O_RrWI*6AT<5GR{UmDGv+90=o!WxhY5Vtx-0 zS!A-S$G}nbYA?`+7JkjMam;7`bv%R_$1EZ|25;*}qh1yHn>`Rm^U|}#Xez7{ z*#6u(Xt3ELeu6#8`66$^LKZxfe85_ul^O+xpEJh&X+OB{7V6;(v-yF4&gT5~!+Orx7ooRnY~4#l&&S4gJBeTPvIFNhwXe)e z?K{?=fquf=0mBOZfodn$t+|L;d<45S{QS^rD2S~oEt5zn?G5R|E3+FK05`q1-^znN zjH}ibw5h8Y>$K!(`PGB?%N|Q6vmIWc6>oaP|s;C|DezB`=S$u636Qjlsde;oF6Nx-BLd+wZw>Ay8Ynehl69# z(xIyT4JdhjpJA<=pGkoJTI}@i=71eT3&xYDgV>gQb#?Vz*wQNj`hquqtwMO2_#L5= zj5b^ zH5VjF5)eof(*E#)_do!mCnx!OFi(RWhKVm9WyvjfL#^~!0pGVHhOt zjFoqs{3yZgRPzKfN=KOf0Wd1N`0{`plKgh6=)7od;UFW^nO`pp=}Os#twW*=`V)F7 zYJt+4HSqE?Bpon}q*!xYIrG!NTx5y5D*ns@I2GnbE0Fu-5&kY=B{5yPqsdvBk*R~b ztp+p~e#@ZO6z{GiDe#n}o@&d;;VX#G8?LNA&%0K;1*>l|YP{$~xE!dsxrdFc2T%=v zds|EkUaC>zUxTUnBnM%;q<)fK#id&QUUQcal1cio3cj|FL7{>|#y;pN57WstVq%}r zBzQnSeTj#4Bi(eSqQ)JHPw30E4C-fnGu+zFd~;`jZPoKO!pOVWSYhQGQ1^wfvZj1Z zN(Pq=WZy0fELB#&Dgh7z06B5^ho2HG##QSkd9ExXIuW90Ei*rhGE4QFLj93rjb3Gn z_YzZ~I1AC+TEo3QV;Id3jy`5nWBR5_f8nY zzOYcKWqj&V+B;$BfNd?y()QFuj-_|QyY*=mZgK^;y$?Taa#xI@M?dQId>yUhC<^sG zxwkr$iyAF=a~~5TIS!6)V;;}s4B5O(Q_-rSRDwxh|Djcyg%(h2ld_)msxUlo%87r; zOX)%+b&Ky{v60;QMcXBgzoxI zPWd%N(D{ezo{E&9`i{H{=DTgX%PC_mjx82J#$REhaX;W&&Ll|`t5O>`4|J2Jc16Y- zP0E@Hl@}kujPg59UhFZ`YI>4p&E7Rib#=M0B1oDK@7}mhHeEmejpgyfH?L*+We$kK zZ#xdQ3?GHZxQDEnJ30Abtn@QA%>>%zu!aaYapf}AuOHP@IUOvE>yJ!6f~8kKkpWa7 zhDoo|M1hG6b7@obe)Hu#7X~o7O;y;I4ZLY81>A2ynO{|vo8ut45H0^I-)34hKxL?o zTpl6ut+TLb>|DgfQ?xXx?V;=OG42A63hViZ)Jb*-N5arQFYrgMN=ELE9& zSl$a-T-OYqAGl8t6_e=Rf3&SFWgU@jck8*xcKBXXLc3I|e*HbWC~BvJj*ZYb*a!C{ z_pvM6%}Evz<#w|-CT)eS5J6{1RA>A`Gud+$CNAs3a=W>A)l02h!~08=E?m@xTO|j* zH7j~P15I~Z?f9#uQ~cZDd(|G+LnE^eVcA{MIX`)a(&h2fC~2k4&%xqpIjBwb0p0{= zdneb34_(75?rGPDo;uPfaqam!kJf!# zqr}TQY*_CZHF|uW)*N>!QVsmPoU#TMfD}3R0?rbF?UlXkN6xXs{b#tWNHXf{X$F7@ zfC{c*WZWbJd2adK8nEqB9_Hca-|%XxsqtzTr-FewHTW~9*hF}Jy5^4uN$JMM#^$hZ zV?s{gOl@ldKk&M=efU3n_p;;Y^@az&s^U2%2b0SFBWTz+=aVip zu{oqZD&!|8vb&@*v`!|YI!+p~lFR$C@Cy=iKKMF|nAxv-#6#`2wvLn4SvFzmy*2Kg zxR>8~(hY>(8)sn}@3l4-8daY*dDh*kdt6bIt4E^~W^}$6W-$3AgPPGpb35doaesG+ zl;by--I;mr@?PwWE@Xrhec!9X7iNrbYbZsrJNll+N|v>CPMuoGWV+R$oJ@)uQTrj! zqO^>`@$$})Bvt|T&DxxiCO5{4=&MzO!R$`!{nYW1UydOcnnSN;vL+a8JdwQRf-}i{ z-;#Fgei}hrv}t$mNN#X6oKDv(;6R%+7u1332fKk93$3YI-@L+5V9S|K`F*=*3XDY` zKYF)|2hGSG%QyMPxz!ZT0v(g5e~#vyqXEayH>iLn>j=OPb-M2YwQr+F(`fyP3iWs)?lB|-Fx(n>kcak$Rj~9 z99A~4O^vtf80T1sbsj8V1YGbR=*oA-bO`PGucY_nW%1o|v0obcJywVD)&R0CRKxI~ zg^!zg>E2)F2eVA`?cK%pn!?Nt>eV@OZaptF+}^Wn7G=&)>NHGOS+Z9ocN~j0q_NL0 z3XzlE(qEaX*AO^W3|ukMZ%@$`$+qNM4EWK4aLR!Xoy(StEftj_Q`R2SXN`Vfv|_i{ z$cfOTm+D*ggFZ5ghic6Y6V88(oeJUSyHxMNL@(`} z;Js6+uL3Y}-P|gqWUo5;atrWSUm~h%{~i+_QKz^Q`i4 z2!Mk{?}|Oh0JHS(&%#qJjdd5>hVeV`#a%@@@3FqaLSrA)ZUXcsS{^anOx2V=`CjzoAr=eR2z}d4_ z;Plz2Sbu50^4KYr1|rwFVaJK^yX8qejur zx9uU&5*fn=DRm(8KUuF?nY-kQm5#NlsHl*juV@K6*l&<~*!2Pzx$fi#qzOD~gS<23 z(Bh(^9N)qH^%rUqzBj{=Z&`x%e@NB3uJbHiD&hQkQ$aw}*eoxNi9>-7q|Rx^`Ffq8 zR6Umu8E@hhrh>$Kx0|fAOIf~#a=gxD8w>_c2_T&5y*|;J*ujf{Vf8ejgS29sM+tx} zD%zRuoni=4uG)@P0Pb&Xzy($*2(+P6&eUc$Q+LM(^}l9!%{a~So&Az7+P8Ar^1F$~ zTd@fw?-J#}>6Iv$7u?F!(Ugb`*?HQ@1dz6tXYk!6J|O#=^rouEQRVWRJ&Ec+Xb6dt zurq;#3XR6Yr3Ai+x7Rp^R$_wNn#J4P=SYd5V-?Y-no}Tw>2-E`p?AM74On7eeE5Rj zmwY|{5_GbU4pHO+yz~=UD+7aEfU(<~o2!Fmz%nL$575ZTpdhTJ#{VlwHp7$^4jMP5 z`$h;C{85cM#%d*7VLiOf=EYTG)VOtJSstMpgtstVojI?9{Q<+7H3hhr^Sby^KE2H0 z@+eKkE=ozEz^tv_h(1i+li{%=_kFQ@rxD9b-Lex4{od7_Cqu!{ccb&M5((uT6F1Av z`DcBych?WlT#@ink~eo$ZVDU6P6UkW?P1n(p72AiU3E|N57} ztBO!iw?kEkktji&X_AnWhteW4s|8`~s=n4tkO$Y`dN`%ut}MNy!ULT&EP)v9Wn3ZO z%sW_WHlncUxo`$tHq-|JhQ&@To+*MS4tTkT@>Go(r$a+VUOj(#1DJ%k0Pq%&gr0dzp$ z?)QgfTamSckE*}4wcT#{`o(WY3;b~#S?T@0we+4LKThtJmb}cCFJ9=%Gi!CfZ1%FS zfm44PL0jSIsdUwx0capAitASo!>0@YSsLO9EBvagnlj7BbTZeKjqz6VQut8n@iPe# zL-H$VsGu;fEtsR}vmS9o&ksKYvLI%rp?}>ENX3F03hP~LiVr$OSsvYVE%iCT!4{t_a;PuWP8YGfb~q9>mAPT$bTG35ms zp?xdr&1C=+Zk@w*=M1H)%MT|_%wZe#;(^EulfCF$cp5Bo7bvJh=bp!ghSlH+1GznV z;fdz+Q+K{K)04X?r|Q!Ca$9olOS~&{6zWV4Jxaap7$_&c3;70ohJJl5VOoVq7f|vF zvjdCek4NHGvx7FS5OI)VCBpjoD#nHZ3m|4+z{E0SZ@gvx8enpK10qRcHt0Y828Rzo z`=&5aTiU4|ljH-+q1GoelZ382z}sL9_`dzCUR#c`%prOw;u)>-S@II;7C)rF}CCQGt~1$z|kudd&j;bQ#- zq!ZkB&i^WOZI=E_^Yu|G?Dc8sk(zwNpO~I8`-tqvof6bXUUt^b{JUuJ$VU>b6(5cc zg;vhO?z>}yZ?_^IuiHiXvFRat=}(FBK8=KIBb#9>ztx@EuQ8zlC<%b`YlrTm7mff9 z2K9~CK92W3({$PtVnXQ{MD9+oaZ`He_n}IlxLnMby%j^qbpr>6;srYK zh*qbSk(Ob-LUoD3B>pgc>Ae)h#~fz=#zSjF{q<+~!U$OjGN}O;_|R#t_tauM%<;(^ zmWFTq+_+hZ*Rn^ymj^DfZhx5G%(eu@;_#(_jU*?a-gG?KcAmdh-lPpKnX76wA7K^>iYk<`pT%N!nW%{5JU+T0cj+q zrIA*oOOZxE=?3W<7^Ot%mQ)$Kq-E%k4jDQ}K!KsVQaWc5m{bhvS*B$Hk+vVdNz_Ch<)q#Yc_aPzYl1*rgYgq|d3$P# zPjBXRI31oMoC;_1gT%(Z4N^84Xb*UBTKA*#7HJs`t<{iaX~VC|-{!CX)G;Wz6sWuX z0E~%Zz(#lO2R-h|_(e!pv5!OW^<4wvGTo}IFD|j0SM-#~!uy(q9F-4!UamYZd4@Ds zR~WivaAR9L^6M5>P&Z_i@T$~o-xg?Nr*Adkdv^8 zvQW%&X5FHNyfsGSN$K|`ZbU2HvPDeoJl=JfFxtL)pC3K93*QMZwV^1)=6m5Q?(p^6 zAd#5@w7qta5|VZ^N>QSH&8K=UYGL(TNd$aYEtK}z)!_G zW3>uQLQl_t4Md3yvBVy19Wz)1mM@#IRexY$fG(<@MW#M<(FAn@MgbLL(IWV&CGhET zC%|_rK)9dT&u+|7`G|C&!sroVEO|bk-)#i*T8wA1H4?7a-Q9itYC1rQtvt?wyIP@v zV}0ce^k8{V1~WM97vEJ86cVxlhCGx4R#Dk%Y57L=-qydn;{my0W1}$^SZRh_$o=yU z6+}{`V%+WBiaCFc!(e?zk!onhbl=p5=iq%Ls5 z%jk$2z2qa(QzwNci`%8DB9N%H4w6-OH%YrOE>$5ciu6?6HJU}i6Zll?D}u}8%yW0K zQ3c{O4#R_Q!%!loY@6Cpv{(d3z^SVabNTBbBju?Yvsx(_n6dX^vM-l6Y4;Vb(hWu*Z zt0G&MloKUc_9-cP$g){T^ylHTSskWmzC71FmozU&qNZK(1GZ!&r$qiYpyjuHkJedOuM%K z81<}pOgV)me2M|SXRtw7?-@C^`jj`Zm z=j7CslMBWrqRxG;E}=y%dGzwWf;oV7Y1RPu@b5KW=$Y-J>i%Z<^4j+xz4*eM@35vA zW`_#gt%#A`!fwhF^)N3WKGO$tPl1J1Uz$~CV96_-6DO)&8tY9pD0y#iXt>0l13e4K zwnn+XmF^ZS=DOSKqKDG#cV}|;z3x;Js_NI)=P$%=#aNlI%EjJ62E$OS>g?2vhT9dc zqjd0TS{l?qzZ;Td3==Mom73Qd*#+LqXVg{a;bNS z^4}%4lp+(h-m=)U1IbG^i;)){G1;_?q`m9Em0V(y*Yk7M3BL$pr;tn8zBbmITM}RR zbfcx9tKO&N9MzVZq5Ryjx&U;I?-G;wI%2MaO+smb@RiuHMf;vAO&i@1Y`(HMPRf)i z{7!{kD`~kNoBhRI)4?ue9ZKm2UEJF~nyIm!k8=YF9e%2!C(3gJxzh41`laW380yhG1R;`+LveDT@`MA=U-oWpUqb6?Jub} zZT(WuzJ{s@Ykr_`O@Fa&OLd{i6q7V}EfuV-Y3PP&34ogo-`P-CQ|2L!onK24a%*9I z>IBuOoFV?o80eVaBp&HE-Rg;FC03WmyRBAIr?S5mGhrbucRzPPi2AE6JtK906cc6g zWO`ll#^Kp8D_eoBXXS~lF?t$4*^Y4f(GGo{74P_@JV=2|DE6ce?nECyA&x5!STa9f z#FBN~+<)TM`5n0@rEKkYYQMssMUkjrJNw?eM?+bT+!4p@?9eE$rmMyQh~B4elsXc_ z)IJ>Nv?V7~5>ksiovHO0%YBxqsiR|AzYfYxLG$iAT>5v6g5aM%Nn@l(WtN2PC*dHI z30kZJ`pDnwUEaK2zo5mJgCA_$=dwwPltN00?FeR=aACTomYlR)ToS&qP{8Dr{v)^j z7uNf}wWp#-^H83Y=Aog@Xm5hVN`HUj$*l$`aN2-P*`#9gvHOz6CPAK}EluE9n%hbJRwYQ=Mc};Vamr&J?_se2~Dbb+?aME%y&z!9nFT?Re&z7In zPKFx4w>N+=0m*t`s{ARON;to+?gij&#`EzTsMk-UfE=Y&uw}eqxG_GXD8O_(+$Hzn>)bdI#pCeWUq`r0Qnp)8~zh z(^jfBU-cAgN)MV=d*3^`_`UL=tM5?C91!0+DfC6RoVFHVO?3w9_i&#aQSiMK7G`}WAW$jsP$Y_MH&1=ge9~u2 z7OA=mZ!JmiO|!bRyiB+dlJ!0v(8xT0`(42VoF)5+Oh{MnBJYo<%<2z1ZreY(y#<4k zrg0kXeTt)f^exG&Pq4!?v0lXyaZA@!GG`L!yX$ZZUZEsj$lLy4mG_2XkSAKbQq29p z<7jVaX%`L1oaK`iK%6X@&-^`bk-v4lWqGV517m+l1D?|7DaXe1gC7GYC*FNYyo|v` zAWrZDvryen{pkXvlq<8bJAmNdTelS1_hC zCTtDWs}%Uz+3B8Smhq5ERY8FYd5)hv9&1RSwsQkLnV97l;_fSD@pvhvF<~Qxy(pa= z1nOIYn(~&QitV*y{pIt>CDYK55{n{@&$Z08D>GU`N=Q&?z)$aFFRy>bBftD%6&*np zEsTb6v9w{!4|BeRNajq3h#;ZlQKe3EEk6cih#o$Ho{ADD=+-!!-={VOe7?_4VZf)- zc4NARlHX#$h6#AD=K^UJN>M4FgSER=w0|EHK$&n8LddCK3z*~!BO09szJ&|L1G9`f zUw@P2RZZ7KXtht%J*mC?u za9e#mcNZA={s0BIfbY>3whgOF(#?E5#4z6+-9JyH=?3L$R=mp^?!eMvEbE;Jm*Rukle9mdMlqLccQW~n^ z?rzo~g~_61z;lXo_K`c7K3yS(dt8#G3Bf5-I!p^`V;8sgH|pIh!K;&W^ZM=OIjvYe4>nD+Xb-a?%!y-c#NvY9>aRO+d4-YVqO z-smj2!u*-pAvj?-ZwQ)4FuQeY2JlG45#rJ#ZZ}~%ZFY`Fao$}ifL$RQW)x1 zA2?kX(%{+YgFIX8DaU^I&V)M){X)3$?U-AkVbjYE?Gt>PMdW80hU>S+CL|moTX9ML zO4Py*FO~yNT7qr}dTdN%JNTdPkGX-wXS+ID^tnf##w`wD<(a@{rm7YNWD1z}hVsB3 z$KR`ozZX^rY67?8^EDZ^=^xPCxb)vIbPxhUhm8fA-V17I9(hFDXrq#f>OnM}%?K@q`Lg z0BPh6b!1z*K%>B%68KcJWO&x68xq8M&h6jtZJ^-U!B&+wjmkYltOP(c-o@TJe{Lt^ zxqa}>Hov-HmvwBlf%OhST(Pg*%0q^-b(Q57u>7&Os9VWdW2Q?zCA^Y(mh@sjTeGaK z7)nwcu>r+ah=7Fw7-&<{AGm3*0*eR@FRvP4y^v?%P$Qd@=AO*X&i)Goyw~$j`qCu~ zu3o*mzTq}=!Tw^+C7PgZF2_Sv`1FYhn6oN;n*f9_%?xQ%0}DDzAW|`(nq6<3T{-R-l=uKYYd8~{2gbHzkja;^Gk(xCU!%Kj`2xSm ztT!$vM;twkz1OwTdnj)X9DJb96oKh`oP%_x7uT=fghF@9<1*5U-zQ_U{*pX8pscSn zNy*0hAW-!>bD@FEz7Y9==gGrdfe4|*O;Yb~8PfXief?Jazq$7HAVY{1UHlnGv|a6_ z3=)+iU)&Fu(h=R3*GO!!s=l*rBIY&zC#%@eVY9flqqJU+*ij&(6KGcx;KkFl$lvM; zk;eDz&wlvTs;3i#2xaWEvPIqMA!8BpmlFwWtYH(q_f$v-YDG@ANUR_a<@G+iL0@x) z&)LOgA51+k#-|vkSp6ajpzF-X$5-Ks)<|<|!9M{THlKh==pqa;IjKM6)Jlj^%YB^a z;_U1S)POrqGX8zyH)+0?r`qz>DqypEmvr3d5FOLBBU1m?y)jyPs(V;0aLH}GKJ}iG zWTn(5Lg1~e?hpLmR9WjBX{*6%*(s*?7{_Yb3FI8+1jeg^D3Yf1I{XYLPd--sx>|b@ zNtfsyZt;@~G@6ksG!e|dyIr!_q}lmC^h9jL=3Ev_Zk2wkgY&s|+fn9zu~_>0gVbEr z`#W`rqVt7722z8WKJ&NB%G{Vj=0M!+k*w#Ay*!t$SRm^ghSCW&S{8cj zy#52;mya#W=7Cm_l}?9?r`^ZK0A&l%!`qS<{xCr+&n+OAW;wDfzn2At_Av1zFPy41 z8&`p6J6qFH>@Z!U;n%o4!voQ&DHCW1a?^Xwcy!B?wk2AR9yLog-~D4Wd;E(;0$7r- z3}%LasNf31?rM|_5&n!ti(tCniS;><6T-031%VyY3?42Zqa8pG{;iyU>XD|vxiUn@ z2&D#73RFoWN((p)Cri&8k8RP>H@;9s44R-n45C;ydXkUbfi8BN96d)FEbL`DILjBy z1X~gd+<60!4yJl9K31&s^`nGA?F_eZ7fsMSLInDq#62cKVv&D@g&lAzQCU}JoQ#(w zu7dx@#Z5gI-91Fc4=B}hJ+__Fs8&vP3vs=)2B4E%dC-=#v|O+`Km`lI3H6~<4@+d} zfrVA<=~m;g)Lne>S8R=pEacJdO-Qek%dhs0P?Och8h^GTMdI3UriH1RL;Imu6lP%r zrcE%c6O5t~m@?&7RA>SOeC$0b#~zp^8Ba`10KM8kfaJzMRR9`&!(eXbI%QvtZn?oT zEK6<(|06E*^;PS}Ic6mWV=}g?z5CC&0wUT`IBu1>Z02}S0n{U7BChJzom;Xk*FClg zDfAH*I+b0~l^Ad!ZG6=6Z7_M51P#%j0(WtrFhhADf%_vG?5`%?^6MZU38?c5Ao#H~eC3}0)1FXobZc;>H=srJFH767oc zwJP~V@3eYiE_wBgNz+dCxBT5vg2|gEK4h{>l2}Z@6>ir1U@gyK20`O=4ki+LS8tG6 z0nqGoRM@$?oW6c?!*QSEN@)k}2brG#^H6d!b#kw`I-vX)}b)c z`Y;6_-fF)`Vx7SCLIgB%Q(yK*crP;?0i$yY29Q4&PC=#c#%}6{u8F!vN<`tHA_lJmgxC}mP4Iv%_J!=sLhmMrG_$CQH)sfNBe2>jp zQ6N|33Wjgid&`5{4lMsfJy<=$5II?$wu-A3S0*98)#y~{^5Y3QrW4OSMT^ta{=8OW zOihhJ+J;@vtP)ujtmY0X?=BYl%u*KWJ9E2=eN|W#lCoNttyx2UBu3F=?GYnL7vpFa zKRxeVow>%!2$iSZXcijR&jQC}wU{w|UYAM(e}*cJ=KTRMtjWu#XO$VF5!Uoit1atG zUK&zE&Z&NwtgBb_gZ`q*G#g{)__W&aKw!3SD}p-+IpH5eRIh@8ibn@TtLR9^MRw)q z@ZmXU8kA0+04dhB&V6t6020;9=bU+%^uE%f$MlVLdJ1mp*_@{3#WSUWcuC)Jzgn&g zrN|fbh9|m5Zd3=6UBTC`*!Ft7ADF%?*)V$xJ2DQJy4ev=!6_YTF1`@P|M=h11{PTD zT|A@ok};=i$U8Fry=A2_VE%c&t)`H+%CyM2V;51!CMs@Ta8b9p zj_l51ik$Hb)#Vhpv)kuQ*j@h5#Ip6ZR zOU)hBB-f+zCQ~G7WC%~=zRK4!CgECKaZ!IzZBR{Lc8bM--`TmrvQMj?@!jWXt)4k| z42Whx=;Ch2B|SA+g-OH<^Om=>7qQ@Md29k{CMGRuxgZ{%MO7?%RrVE9(aOASFYCof zxU9Nzcm|yq=p0oqin&GBlnj6F4uDgId_X3Z!yih;l1ZVqq0qB$dlLo7ZB!yr zy|{Zu{Gb=1V80+mU^nFRmcy<%`i{QCZqj?fl$UOd;nq#BU(GtEx%wQ{>`VDqpo;BO zk9;^tVg~<=i|+Cv#%ZQJ7^z!*J*-;}v6$*AJVC1Z--|v^P*913i$(E}lG%-lQ+-up zv=~50=aL32ULt6zM~E#ybnpbSnS2Ak;{mRk>#X0YlJ%JOsXG=|!8He`YsS36zHjiE z(yw(M`9Ae=i8ZX}k&E@~HT#10P?nJIbjvuOIzI(!eTt+}&x!}I`I3By+Y<3F#m5!8~uhqOO*~;Z8Y+fwBGc- zbXmC<=kTV+v>-{;oYx{W5uZtNZnU$iV4O+9x1qw#t583|EK)uM7FLwuCQ04;0PD4hP94xbx8UUe@xB1}{9|E}S!Z3edGLC)4C z3he8R<^E>ey~3{Z5o?UFa$^>JzzPH-Vujt^=A{T8$YBy`4;~#OC_Thj0)_>SbkQdt zk)hRY8=GdJ(+jXvzC5qJLjbCRcepuSt#Y_vDsWU9W$Vw$o1RRy-r|Yh@xIZt0VG5{ zv#B-qc-n_jXD7+scC#rJ3i&4e|d5GxyKlY<~^=%1g44(f}keSr864qC82s700;0sNSoSwbU+mOj}xm>w;@5+VgD!x`z zE_FR2RMJV~d%OhQqlGY$`6C3jm6570S*4a9zEUiA7xpt0GI$$%TqyHXZLcA**63~+ zi3D4a^xLJQ<_P6qaHJiJ)oy0$Cp`_3=Z+EL)a>qFM%HvJq#7%Tjkz_@uwDjskVHLs zalE)*Ic798VVO|`7)w{B)Nf8-<~-Ba&j$@=NQ=PVy8}PmPNyI*oo1lVROZPWxTkb2 zXd%^BDRFYMq;#~H`-hseoCSH_faeml@UjG23jvi3Z7aO^9L>XnV^&cJpPV++q3e=f zjGz=%OgAq25d<6mvBl`%3ZuNX^w%+Id{nqK(;bHh{ zNu!aQTS7s=zjy9AazLsvLAeBCqOx^yp$pP0C^OC0Jzhy`YW-kL6Lky<$)AJn%`}2y zq@)~1i2#tlYGWBzLo|fSlF_K zw{j=i+69Dw(%2?%Voq0Mt_L(6fLly5?s?9M4y02+>qUb~K}7sBc_?YrD}HZl>SZO3G}!Bj3QXC@-g@j`OmXke_tD3wFO|GjMnPCNFM*{g+tqx{f-O{ zLn(ghC@lKCwlk`R4q6`-gDN}xAY(H#vt=It;}1fPvxS&~gjnj#X*s6`7?@l>bgg~0 zV%eK?Yc>1dGOkT~TcsB9#X591%O?%ckt*Ga z>oi)Z?q72e!C_ar`WH)oOa}V$;F`g+Y6ovW$zL`@x8O0{_{@h2k$~1$toNPWiTTE^MI1L^;i(vQE_#F(9S!mO5L>K*N}pV?*s6;1 z$Y-$@$E>(d*bfcgmpC;?_o5W>45KKa8PTTXv}JBJd#Fam59w7tb`@J$ibHLw-z+_cyRPvZtC>Xrjqq1y%u$3A&mInMKBzsl z-fQ~l2Ta5zFrX=EgT$sil-Gd>LQfP-!!z^1Ky=Zf*82)yUDhlMJ>#1Qe(X}SUESQ0 z_m`WWCKzy}sEjN$fq(arr8)n3=oaHNV3@XwNK%rO9EkH6HjlcUnk7T&Pk z%~+yFma`e=xx3Qc@4Tej0gV28_ZVZ}EIPVjXjuiI+rO8BE{72@9=ixza(3X5Poaw{ zTB8;!I4U}ZQ?_;>X!XUVFF{>Qa?8!2v;t~=D%hur+!+(C^7rf*&C(cguO*%Tnf9on z7Mm}5T_?c>D8HlU<>B1*M0H%%Ij(~;8W{ni!d>70iN5I^s#uV=XY|i0{nHJ(uqbAc zFTu`b^s1aPjOk&5)ix;1L6k|ZfKhQhvfPt+f;j8i+MZFU1E28*DyDJM^mx+s$MM`( zYX}=F2(?<;+QEK+m(-fykX39h_V>2HEH+S6e5j^HG<40W7R;7CD^JW`Tl;^DJ&ZYkv7uGDF?k z+TEBXc`{-BpSywFj-k-C=5KDe4D8g2+j-kk>W(c|UE)MEWR>qSn3S|Ia1_b zZQ6{>VL3JO5e2mmii@W^2Itj|wsG;$Ry#OAjL+^0pABP5Q>?|qd-t^iJXoQuW%j+} zh&|4{hRIV*j)XY!VwqI_jxYx&6pJE*coh%A#5l$3H3d;>OaEwT`9F7vEKjpdjVP`8 zJi%Zl&b9a)c8g0QSXoDsQNp`avue~&45&gypwqWnf1S~j6>Mb>`7xT4|K~>4ZXNx5 zXNq=x20kn{)j7*|n3+-lGt4#AMKx1aT8@6muf^-|UccMwtX7-K&+jLflf=5l4_S9k zVZupWxGYb;cSZ5E3BSBIf>V}iOPS9Abk4Jwmwx*36#9W$sqQ9QtpfGIglqS-N` zC=;Xb$!Y45IiQUVqIh6|(J<83znRJN#kMVAi4Mg@A&4rderV4-O9%5hfzKwJcx}VO zv0zEA%En^5w-aQa2aoQD@AtdOuma9s#aFL>Yy9A^(88134}LNMZEPS03Ik)_vg@ey z&_Km+4!n?0LH0j$>>g}p5#1BV49IPbrXn$ng&Cmu`Rk2Te$5juMy%wkRsKsX zqPGDmFaYITMGym8gL-d-x-uB|D^SfkHWm+qrd|kvMG?TFLKSD)_X zZ5>)zo-1BAyU+H7k)E+J!*!S(Og|PXiD0!rK-qGDD9!Fj(*OBuP-E(kkVO6amc&hW ze}_6-wo?1uFggW z)6h-0D}=$q9Aw~c9|4XP*OiHbSXn#Pt#NQ`!=G+~Fq1IAzq?ts^1=D{pd|#jKt?Ji zhb|}-!osXn9^=Nm=`+1IPEEw{_2DcThbm#epmnh-mRyCoTRb;Z#d}8|pvDJNTu?UO zu)}Geti5Xubi3^S(%s#OHXID7sm$5(n?t@Nzz9<8^=L%^UocCUJeXQ?X)zjJcxuNGx zo6KW9I?14Z;Xp_JCDn1+5qDX;V_O_Erewn`_h#-tr*w_0)p?{Np?O`c_gncBY99+w z4{p~1wH%EO`ACITlnbZrQ$&8nQa$d%9u|FQ*75p^ouqLq&EgT95NM2^nuc<9kStI} zJ#!@IhPA~Oo2~LPj|7*J*Bs`WUxpSQ>eeEV%o>SoX$JSWZZ==nv-mU(#`WI^9*#8} zb9|4(?@T(l!N$c^br`U$$B!xoo+gJA1e%T?IZa5TqCZ6{r!2`#X_*7k{Z7F&L;d!R z0wifevx@i?nC7d~k0RrDRuh^M)-9o6S!jUnM$IkpDnv)gSTa|-w z9{d1Trj2)=zq^RkV^qgrcL1Bko3&`*q49s?x|aw~XPh4th2YC`s(UJIbJmKM zU(xu|(;1B*OmG+BOxGy;c0NV5n!3qx^ObaaQ|M0E?-G#w@2iaWVBlAlEv7*oTjkM5 z>-!@I96Xb1xI4*vh08_kz-=nVV4nzGo>-(LwH-cchvMaRybWn$yw<58UKM+UP1ZpO z(|k!qMzXnJrApXEwfA8(fF4lb(lFOIhG<@7e9L7b&}f-G%%b$=8}JJ1O`U37p~UJale*#TT1(}C=3#1@6j{1yqS>* z4$(pKk+jU)9|KJ2l4Mi6seN<+ZkUA$@Ix8fQR${qpCqgRAfi6+m+O`ZXgu_{Br}8r zMH2+G&6l|ib6$SIeTM~M02%`Gr61cI9}5n7O5hbneqN{fM#Tdr-zc_wUP(*n=bHq0 zk1r2552ox5xg}iFT_+Ya#x9g}Wg>25Kt9EKj{WP!b(2s~ENlNp>S}LONiTQT;1VVr zRFPKGy&bgTjTVc#rC00Qu$BMZ=qn&yL(S_9u&6-H-hW<(GtFfF;EC#yWx1-f+*_iw za(sgKhuw)_C{5M-zK(2m1zIzDdP3tFz;mK{1>%VVj{z{4GIGhfL4*6COM> zICz<^y&k%(=ej2?!i-bJcHw(JYLF2lfc6ey3d1>1__t+gGS%*nPEJW%1q4NF4Aq5~ zWJFa#&LDXu?Qm{Dvn@D{e&BvO#U@!(`$|o}Aj@?2=I1?2@g&lHJKPGq0F58>H6nc_ zfoA*@-&s5XkC~}4%{C1Xs7BtVlOq7D9+o)n$5M6dOXx8SlED+EDEs5_Nm5jVy^T}x zHW;H<0Df>IN1BtZ*_4)D46UU4hI%-L+)Mbh)E)16>DScCaS$4)-2Hfjy zquEV0;eXTNUiqR#abV}-KhL%sOo(x5v$Ew_rm>{EOV3s8NN@=}#(hVDm_jDAw26Z9 z4LW)L4(N<{MAf_-I+H>J%+8w`#yc2!qg|2O6C z-sinZD04NBB}6z~ARcE+tx&_JxbEa#(XQ~(Pl6UvUkUlQ#K+_6uzT#^KK>)5+x$th zs=bEpIxd@nBbM~_or(AfoTn``gj)TA=m`)h70MQ@$nKFyfOwMifExRMFW1qNs~Yv+>3>HL#T1l4 zCG(uZDmG>gR+SPfp$4(w*k+5Gfi7}V2VQ;2WbbLrZcIn3Vso%Ga4qA?Vopu!#qsZi z-H)f~!csDc{H+DN2VyEKQjhe{QuhFlDt1V_7mN=IO)rVSv>d=@GC6GsW-H|;=a>-u zkgs}kqlure!2S)`wgZ0=|3v>HzfJQ?YpR*65Vj5>ffyLUW^Q#-n`4CDm2n<=(~wrv zo_UG#aPty{O%z?qtT0NI{+P!1)sa{(d4mOcs>!gH5R)nJE*Yoj1uIUrdN0{ zd%+T(M7c_K1!lRm^6w784+@sMpcZj4^pnbSvfJ5r+kD+GIAV@0zRgym-f@MmH($>v ze(E`;Qy>P)UmZP@&!1v8cYj@A{#C2eaI&nk#$h~eRL1CM1VQBzAE$P8+FbVrY zmrR+JjjNrA1EG&!e_^RJX8-kVb9ku(A%y-F=srznZjamKIu|QeU&DrIgsNJF^_liO z=$MrB)zz<-W;dvJeCdwX_#P)EQFR(peMdE(+gI9qMKtg8r~?&A_Vykj7#~Hqr&3^U ziS_3HsU3e%Fn`E;uiEb>%gVa+%X{iaB$62qNYg)pgVm4=06mKdmn0!gA1 z957~|^yAl31B2kG5}x5r@V84(Gg}e-``N?f?+jEFP6_qaN>T!MMvMx*L#lQ6KXqFxe0Go2MxG{qcO&6(ktu+t1q5E5ZPnA zAJR1lf&DUz4Fvud9>Y4oLmexM-Hw)Ie`Foy@HWt>R?u(m?gb3cQjeyE=WTyRW7erA zt{zM!jjfY6vO%{>bgKv;;`bgk{{FYDQ}_f6>*Yo^g(^)x%AN@k9gF9d*g|BB)}CH7 z>mKTDY#dWqLXeiP%RKr?#NXuA=evYx!1HfF2+gxdfU%Fo5<;NycFek2q8vuqUcp)n zRQCwN*O;VRQidM^B)-IYw~1KMHJD&TEfg7w8?yD0a8o(s+~DNh8N@$Q~=|qjg@|_cb*)#MUDM^~ZutFceH|0yYMltz> znmfjW2sUg!i?_xO_PDO$nLRk9fM~=GFkH`@nBNtgeih*%()A~8In&4&l-QhBt7pq>q1XfeBQ+kNr)bXw~aw{MVJ-_KdiUhH0ZsA9_`NIOI7&H;K6X_^I&0R zWqkGfqXznoe$ZuKfT8=HEzot;>ixYX@Iw(tI(nMl+8X(lB&HV6C(^Ch+99EeEAfQ3 zZVAz@UweMa|H}(Xl(2K65O0twqm_N0+WgL_6f>O-IA;Z$gX3r1E2#hrfxj$wG0xU2 zj9Zoc6WLj-NV2cvR{HSo=0NDXCUE2@eH(&3uJ9pUrmgU!MEDRQV|FJB`E0RewKSen ztm+D?glUc)LBs%96>Fq}SAqD;ksb}^1oj+ND2Ha_){b8F3%#RLC5Xc9bWb^-!x;~^ zb_&Z};MIm9-8X>6jTL#RlW0Gn4M_deKttn8C<*IIZe|2hxM4f|TLlU;9(2~nq2VW^uj=wEf#U)VPCRen6Bo*D)Dq1*BnHATgdZ}>QW zb1PxxpqK>&etoK=&6rhL*+^vT_2FD=nq%woP}VJ0H$N#@^q2wSj4f~AsPn{hE&$ns zN=T+e%R>|yH&8q0D>{u}moRp3rJw{zPwF+lbUMrv1UshM8IsVwi_^{3S)a`jAh~Pk z$p7~y!C$0ZZ(Z%J3r;Lb&kMT#So(mt(<;Au%Afu@elsw=(Y>%KG`K=VMINl9=ECR7 zcaA0%;`l5yI;r|oaTrE0)kL4tXbM=CpqCcE zkcrapj@#kMeCVJO(CN>(%uHS?nA?huWh`VX=bW=p7ZW~Fb|6NVb!1^yH#PuKgS^4! zu$~3N1d|ruJOfTwqhQSvak>Kxklb4ES(ob%XK!46S@9bTenv3s7s0`}^lS-rX?`CbNl}8&b7`5*y1-j6l_t}jm56$Kd#Qv!CI&J;as&jY10e3IXEWlz4`u6>&<7}NC>U8$-@lttNnd{~Gp)H2L z{UaJjWCs_yf6^sAR(S2E+Eoc3kdWi@vsI(#^A}9*h3`N-V7_J8R za0~0-TU@idSRe3t z2oqv0L1Nk|)k7obWhHa2KqeC`c(ZyJcLhxb4*31#9KZ=-N(j4lg)dCdQL&N~3992A zo%I9%6UQtz)YKv1&bIL0^jUm(`2{a)j`c~^%%Zx<2m?d`JTA;0Y<^x|^uW^4rvIf6 zW}|&{D%mM)d!d8lF2Tx>x>UHe*uUTl(bsKgo<)vJN0>OXn`ntss*9?9jb^F!!0&dZ z8=dcdc^HZFW6A-WZa5bi_M;HB1mD8cb&5ZSRv*`_&3-x62Q!G(h*iCtAsfZ$7=Q&r zk1scv0{}BkySK7$G-HPN%e;3}tLsImBWCSh`@TLq*04w<5+;7v{d#`)@?N-PT0c&d z^ZWr93Yd10olKM%OU-yLgx_+M0^0^Z1}bg!RR2x5-|W0Rrvoy-#K!Y^M^*xo9py2O zga4JQW=SK6GjzY35XX;u?w~lkj*DS1&R0iSHQ(IVawqXbo+;^~^#)VK!EcLEc8S$& zn5`+Eikh*spCto@mmqxrIlg)>D?Rpd6gW}Vx70Fbsvb{*ee?BKI?yB;nX0#_40 zxL-zPr;jijIBpkR^7g0Sc~rO^_mP!QaNEt)9zd4xZeiD4{c*NyG~qhik@(A9?m4>aIxL6GwxR9E^mZQ#v5{q=B`? zRNZExwD@#pH#%;64hKwFNZ(c6??2tQWSc0EZ zd3E!&cKkq{8`K$KL%OJ<28#@Y?Pm~L=H})!lYTP@x6c_s`#a3J=Ra=`c31Z#MqoE& zE-tz0X!GxoD~Z%`|2c znc}8l!(dIsqyAab^4s|z1x(6Y?32GM)fmOk^Z~IJZrB5$9V*dr4!)gO!3*+g{t+k9P@wN-vi3Zcw9tiG3LpJLinJ#NIyf z$=IVox6vUlF?ZGQJ4MvZW_hVQo@r^Nc6s%)s78E1cv)BJy4U3vjC<9u>=?O8d z$sJ0}EqP9KPq=4H0r-h|0+jAq%B@l|@guaB)w)M&%{G;070 z%LdAb?}piwDrG4UPT~U1(aFOxO?%=J5%9)u>j3Pce`XN1IgSPlWeENDI3|L(Qej>W zW}kEa?yWQ<23?BK`9Ej}&+)uaI5otC#bLlMQ$F&K>;^b&K*CrBXrc})^VHu#Oebp< zXrpUU=fxQ5hmo7cu@O(cI}@DrMXK8DY|w);$kmH${Os3cmq9) zO6T87K&Z(OEW#_PtD_8Ez|wVm?075>eCN&A?zn!Tv&{ERJ9nx1))s`LNZS z*vLoeYl#jCR^Gf(t#A`Dv@Sy+*|OlTdQsE%IJI1=17{ zh{=|K#Vp?8{TLzt z>6+OUf1LX8HoiqpwkR$MpUh!h$7)sm7dh$Ju*`3MJ&DoLpFi?ju7JZ!aMd{JIasFw z`<~pWCA?V-D>ptaZmnVF+sR77K2R6hEdK9X7Dum3dDzt^mswT+InXx=S@u3RGyM2$ zrEhcSF?SaX1EOBFzY)+QXuDy?_KGyk#JJWsd+(RvK>*1hZ^05MruKnzBRr(O)4eRD zPifT}pE@dfY^=E0*##6!;8vUK5^GMEmwkmE%!NO1V1@2Wpud$U`vF^bh~!eauA=0) ziig*udfA&+a>Z0!ShtM_Zlz6078C#(j|zS4Z#h=^u5$r^3p!J}OWQhQMGA4%oo@Wy z)7ACIxC0o3+MMj6yZicPXo5>U?#o$NWUGm-3)BN%3j$ExWaj>Sli-zF7WwE*Zuxao zfu()Sd#}s$%r-R4$1~fbwG^H!@C_KYx+OBN{*#yCoalzSLV4vPSKd*jZq@zDkp$%w zPHjADJ~T|La_$!Tp}X6@)}S8SSOK4NOTadeSpl=2dA-YY*F@RnPqBb8HssF;HGd>> zm$CL!AM#Vn!af#+t$lG^-X)fb>rHHM@^aAoD|yB8&z7n-rS6pmctlSItHp4Cyay1g z+?1Bp>yUw66`VED<2=sE&Srt`bg=?`me}r|9+@{37%`pCA+-60g*ZmH{u_kyey2%! z_!|7jf3L|05J@n5W-}pQ^EE#IHY-MExpOe!@x_1bm7W;1RJcJ`fm)1Zh4X@)46VE# zoT%|aUs1dFR7H>E$JGuV+!G(vWgF|+ISrOEo_t=~RRsDsn3eD13#V# z#Ac1%l?oLF)Vn<7yV#H4@F2^+PH?d6+GZr9wf7j5mSZkvOI37EPb&1Uv~@HwX7!{; z(bm@Ozs~>Yh0OD4&oqZb0o^CAGrvY6v9+&1{!2pKsyMN+o)McHiWtc#8NW$DeDeVb zx9I!-fS6n9eRPUiQ>m-()k+PZydU@P-pe{p(@Ekqwu>$@NDL5Y2xSzY?Rxaj@oc!98??c{DFr14`cQ_+`=-{%1#_Fb zDnDzF9e!09D;wf%O=11?O25&GIceY$FUfo4z2tzdKZPf!4Wgv}V+;6G;y*$P-x18f z+ktmO@0a-NTGzZ`O~=wkPUecYZ;*SnSxb&pH@b4UW8LEeSsNJ<+I?=tXbH9Mb;SW6 zE$=Er!*lK>N@HLFzvoh%H~#BS60|H#XRY6ItCeoA-=|~_m*QcEI_?}pAZ(pLZ0H_@ z9H6pSDkUtgz!Aj(O#a@UXU6jB!l$M8#bcfrIil-)vf4$hm%Q_A{f(3%Oqgo=|Izi{ z@l?Kl{P>9^B}6J)NVbrj(UK9eHz^P>+}76 z|N7nkcx3cA*L7dxHJ-z3+1jWlT+1*$DM*aNQ1RcGP+~%Nmx}dLKAQc?+4)z^^8G~& z=;?-qr`+JzM`-eiE2R9=Fo7LQIjp+9!(_saf=phWN76Dy;n^WBIgW7Yi!QhZvdMSm zX9{qRi^?f%g8MUBTuVE|mm<>6=p@OZ$2oC*m+xq^vkCkj*gZ1nrni=D z=)zrGvx7SZ*I0Gi3%PGCHS167uTS)eZ&syAYC21BDvFoASifm-{3dbz z`u@g6-yrwn1d#o3u^D;!P-bi6F5w?hh-GS7Ez+5nTc9)bqyI{I z-vlaok<(knp7DZ>f~O*Tg>GF8y7;oDT`%R0^`0b3R&M6-C`(+d#MUg{sR2tawR9du z<|C94@Ctd&O4L@dI5y@;@6$Fzv`O}g$3N$dVZSihO{^p2ISw|q$2YHzqIL70ytJ#{ zGXps)Wf05@LU>;gxin__{~M9?XC2eE^u^?G`|=)ULGgKa;oVNcKYO@P>vI4R~MVQ7f>g~JWN@+H+?4I>?F!J8PFwvEWWv5 z-2kcO@nLSz1u6agrh0L{X?JAeC>7+<7o*JMyFnNut*xzX><$&{rN8x8j814+lIZ<8 zB-#Wb|DQhfe`886SEi2?LQjn!_T@bTPeceU-|l@Vfev8#wZ?q;iShEyP+-Q-x{}Ej z)cTDBlG!CIVuAZi_0Nuoj|k6I?5-X8y&_hxHFUv=+Z9!f;~WhO{IJj zu9t}adteQ*HWPu#RVpefF?b)FK!;3EPQH)eOA$&mM3l=Ut%GHbX;9IUM0kA;{P>5ZY4itzjY%slU&y<{?kx>S&l;he9XHp>H|F#7dft}pO)pG zK_Ai7|-SuI3lRQHd&w&DvEA565+vDI?#Pp1ssrkV*4`Ut%nT@hr^|6mm|0 z#|0w&+;VhKi_1o7i!?w(v=HN%)bkEaqFL9v2wjr0W(b0>nF4qt8P}t_|Ea%$C7PSE zIB_i>rTVLZG&zuAxNl|$lur%C76SMZ-d|B)?7Y`@jPJ{0zHy(S=q!nhO`leUXXRq1-p&)46z#75B)xY-O-&29 z=To2AFoohZq!e%Y z=dNCVAl*>%XWN>i^m`w*w0I`9?(&UT$G# zo@Kn>1zXtRzCC=*g~F7q1MSkYsNfba?^$X*{y(`t_!*g*Z}fAY3RUQ2O1H^IqkWKo zX_Z|0jLDKMqOb+WB%K%%IeKh%Kioo=bY?L%}ZZ`fZb~%57_?srN-sm2A_c4?QdHImws4UaJbDkc2LS`LWzNmLDcgG0#)~ z3xw11?2wAVgq1Sc5#!c!bl;3obHsnT`)6e-OD2vD_Ofo&@p-M;!8R&s`^u~2M>1jh zQygSiBn0t}Sk#a)D~Ba{w$velRn&1*YS0rF)@fwr+~3BbTPd|B`~Qd?8iU zn6i!p9>wp&WgTLS#%Tt0zP~U4pFXCv9O48h;}ijCQ_9aCf<&7|mM(BBnjZ?WSGy_8 zag}XLN*~m$;y*v9rgVo!R=6HiD98#5!H_wY&*8s9#L{1GcoCM|CG=qw| zOy_;C>Mp3|BaieW!QR1aevcKS_B))j)@7zylWq(4PP0nVyb0-`toWE*SAiRATUIT8ID49e&SX%33u#L6ru z=VoFHErY+O4hvJhM${-WYMiF4X1KLae^TN&`_aH(^E<_}v_vtNmtUnb2)#!56Dt5w zqjtOE*DqlCY-QV{6~Os!05RJEl)83!czEJtV#jl*@x(y&Z)?!_V|_*X$>344X3mr@ z&QSnNV7<>=5#tDGW9fBB+&7O7<3<`gwlJZyNl?E=p^6$`i+v8}zwzM42mxzqMjc<= z#6$iwCYOQ=GdXq07b93o*DnAf2T)3^W!=>G1Bku^-ZxB`TE=-H$buui;yxIBz2Ggu z%!2LORl+338)IABZYtP=eyx}>RVC>&!TdI?R54%flosckrRa2#qk?~VS#}e-`U&Il zGa)OuT=pc&X^lXloK`^u*S3uyq4pQ|p8 z>=-D9x0*X=c^H{=_9mZ<0dS=FkTlKl6l(SJcR~}JiE0BN*SfJ?GXCL5kp1@AhpT*d zf#BlK2Czm@IJY{vJE738YVZKSda;m?vP6C~myMC~@2J+^qJ*{a|6~Tr;a=^tcADLp zRIc+S_F)_qR!X3dzg*GxwHMkroKB>-hv7}>G8tU#BX&~O41pMiucWYixhu_1bbhm@ z`9iC`#BXy)QOIDn|7`R?5yf@a3*OURxL`yFl4l1GB~LA7nuoxa_pVtbf|x~q6#8Xs z4L?bxvYq%8ai;3awUj23;%=lfSdnRn{g-z;kYvHAT=R{65ACV^fyrP@&K_&XgmR`_SLAA z-*y?))YL&E{J#?o&Z{$@;^MLcc*7IW}W0yC6 z48pa}2s?VJDFlia8apdv&Z|EN7bEoSx(iHO#d>E_6e8c22;=y00ysfj4b*M!?Z7b$ z51C^z>{%*3%Ca+P({7m$GKN_J7o-7yQ?qgZe(lQL!xeLW?yp1Ym$r&45)cZ=^^#+!l_9rSg zXU&U;T#GMcwOvR)9V6H90?F}`+3@(u@4;23h)@*YeGqRfoB16urw<`J8(F8gaN<=< zOG`xDEC*E6<9v?xplA_b9@ce=l9KX7ZxnQ^u#RYF=VH);-2_SO1#l!xLfX`GVDR{I z%iCuy!02@e-!%?TP97eTI0RY##!qvlYRB*hZZ>$NmwK@UG2bYf|NAjS&><*jx{bsC zZ4e{*NizQ87+R=UVhH&y6;)tqu(tDF5Rd06RS}WN;F@+y4{ORLD{F`nR-%Y;UG}rBo$T_C~2Ta z+H|u-v)}TGD{Jv7Io`pkW?)LD*7T+B>f4_~)hbH*IKhV2LnyrSWe1migXSa*sl^R+ z*S!`?NkxPHHo}HbhYdj@Hph5!R4o;>_SX0uy9qLz2GUFD-iUJwH6DZTYh-1aweruX zV`m>o?z$KWgYXx)(%mU8E=G(_f#OD+Q2}U%ds1NN$RIwRo4z;H>0N?zn5aezT4GqB zbAm`P>sGqGnA-;-WeX7c_t=|`q&)je5DPjC@UUb;iV!VJIAreXm;)#bSubGWSWDev zR#^6PY0IEseQezNb=&%%$MWH9ZLz)R0D>6yJqw9%(RzE(&TIFY*sLGdK-dtxw=QPR ziVsXVkshO&-0}I>_u1x$4rn-qWU41-%+jB|>g^?qr;C}8a!>epkEEC(2YCIk4{|BcTB>LL1nh}j>u)YOa!^^lF1^l&t?E3e`V_*6UUzeg zRc_rf?g;Jp9jStnEC3P*DiBUUWI7{P{05P*cRZn z_xC*zUE=+TU`Hlvs(S;oo7WJqr;2V(6jMW z{BrV+K5y*4Qw4Vm?^TG`BseNgo8b;MY$MGMwRJ`HGDeDL_iy=#&{{1hC)ah;S#yT! z>S&-d2V7f+1Xg(aKs@uBPqeaPJK>oHJD%J?g&5TLEYmsz&o=9vhr3e&u0X1LLE4n3 zO^lZ>)j`>Ad>yq-*%YjF90(sAdNJpCbp?LQrgNUJ!$eszs(YZ^;8HwxM&Y54sMokX-_u$zDhS|w z2ifB-wX|*pPWWZl<;N{@#_TlvXY7c~Mq^SSdoRoKY~-0Un==vCePywTX{{E@RbJnz zX|Kt52)45FszhF)`&tcp$+8cFnUvzl#`y%tuw1*WHv3?xW1NA56G-eL)#j& zk@e>jQPsY28ji~gZo$VrYI=qzh^t*34uR(`3(2*G^iWOv{^ zj;tr2cQNOF%*vLv63?L4t*T}e9@{E$)4?8a*;-yFHtr84w@nvW^El)ISzt20Le9$$+*BGUpSSP;~vJ(h)jJ`6Y=Fse?2 z5Sy3c4g?4EDa70+BJR98GY`tty})FqFF#l+>@1-U&fk$t14;0g_=F{8%8ou-M(AQF zD3pvLp~A_`-8V2uaa5FvY}$^}0Lo2wv5yJv44Ds&RIsFXTaL@rEg)NY^5D2xiJeST zuOU-yIk^U_m)1J!pnH@@#ZGb6qAL z6JLTFNsX?@Ed6Zw^M~=NFnx_kw*z;IN_;?0A-=R`LZ?)rZzQF;l*KjpV%Bn&-Qj1A z9a_BjZBmlm@8RCMg;g9*ch~tQuL7HCIj~Ssh_t#;Mp%(PRpBFbvhT#Rb=wRJ)6f@r z#my~3cc@jS*2hkv$cey(b>Q(|ePh4-uugn0k@omdE!lF$0=lDQ{Q7N+mYo#3Ok@pK%zUT-iD!9_k~_SVF)7vW ziqN<}=FBzN(jyiP+b~FoXl4CAY4$@64Fdk{?lkKN@ftG5js=>Styxjd&4oYQ)P3So zB;(*sI zZFSltOQ(?a(v$8`uhC)Kxb9)^r{=RAaURfEDRx_X79JVNDJ5kDc91=MjkHOxNW_}* zjihi(0)oQt)IKOKKYd3x{Y&V>@h#gSoOeugbdlHI`eWR`z56v4 zxfTi)OisdALk5XwQuElsTsZ>#ovIG|{I6zei(yD1xl7K>EEJ&Sk$2OT#VI~?m)G&p zEk>D;HqD7K(pJu2>e4CK#=NmB=E%>Ex7QMOlF!of(^mc?ip7F%4rt7?XQRzK|9(4u ziun}-3IVAN*jifaTb<#7Brl`GV@7-~EXhj0UF%Mo{4!B^%#|XrCZ%zbdX?n&jg(L8 z(qiSWq1WAG8H+DPE}e@bb5S=Ae=C04Mz~en_%Br|DN3#*az>wmxRd5Ct)RL%MD^dh zktznGAlOUXYSpYTbD+=pRNA>5rk{&=pb4Cxzws%Vng+>9fD#khwA0BsY{?u z!b@Uy=7$-syW}IpT!g=E1Gk{ZZrLag%o@udM$09OLieFuKxk+W8qaJ|sK2)YPC@q{ zm1jQQ8J-O=Qn9F=XLKqeCB{C1&GgW~G~J}<%=RojEC)&RVz#yH_*wnGq_VGqpfLP? z>#up!mAV@nqGjnkv>YIOnqO`*_pY*f@-GG5g(fx~E?d3sH6gEU`+0xPl=DYaB!_oe zhIGatxg!vr&nc;245A*E7*|A*J(Ltx<|pxBgX1W8DhrSQ^A4r!iIxk34~9>NpuoTa z!*x#Rm)46H`M|(G1Fq@v_3VaG0fw^292NA*XKGI*YB*+m z#8p#gwzuTqa#pCnS*r*AbPQ5aDbYBWH_U=^qrwvU{t8=b-e@Us?_gG?hU2v3uAcRhg4Fb zBil7^$ofKYqDg|HqE(mJtbJ}9{@gCku>8AsYvWbpr=gd#bLcFzo+4>{=0f3$#?3VI z+3h#43%&K6W6q}%L@zuOYT&szjZ0B$-0ZE1eBF4PX-_cbZ{wW}pU0L=n<9NFIzV`f zaV?~e`VdR=eoVv?C4FGpFD&ML*~aRd!oIPip;SqjR%z>+ww7X2Z*X1B4M3nB9-@LR zq80PdOoS%H^tZp?E4}7&<^pvx05BgT5jsTgUmi=pad#Ncd-}?(Gd>$JR0krg&bRH9 zNJETiq(Q2A0$S4&mwn$NzE{u0++1&L=g8R;n^fFNH-tUHy?;$Kq+P&LK&jPs%A&_7 z|H<~qIty7Q4pzx{19F&D{?O8*qW(S@pSn5vUaCge+*w1{GgF9KP+XKJ_=_8FWb8qV zl=_PGgu1R`<13HA{lps?cC{~NNT+>AysCZwItF#C8*%PwqbX38A9nDi{}5%x|J^m@ zy4s{}Fu|;g<|QPYH|UKWd1zTta=%yON6}{Tu?=XFCiBxCZF?0@Tk%YMdtzu*8XX>d zpcnbt??T+IO{wAV8qRUjT5d%Epv=47ou27GUU}6n&+9$3;P#s0xId-EeV>0>Yy)f6 z!O*ow$Mke*P-9@mWaXf(DA|YmW3O;3aqpm{sP6abyWz!wYjz~hvhwr!idM^;MbDpp zCT1hP68#EuBZi}Ia4PUQA+LPl*-<IZJIMv{=0_3b* zCQF0)n#G)2IqC)mabA)}ZJ`Oe+t%JEE}2$;5U?eE*C>mTap077O3E_y*;b`+|FI97QA_$F@)7>tw`iz7k>>v7Fb@#F2iJyQ4aPs2>^sK`7~uJv1>sLL}St=3AnS#}|97<%o6BLjg&nV%M5kzkyDYdhO5!pHzf{iVsBh`` zs5y3acMq}O&Ml}Gy%muoNKh8Fp7vm#l*>O>D93f~b+4{zkwPSoyh~=O)?&_3W^qM_}X3qU?v%_W(|0^h0Jod4KfoHjiXUo|Z; z?c-K@Fd`M8d@t5pnW~Ka&=U{E7_pl}_&%1Vu>^We*9ZtY2-y|c>d`x6Y0$v5I6Bx% zT=YI%G-4nN4hau0#(AO9Regss(*9MZ=H{hkoe_sCK5;$XI}_$C&>EcSYHs-c;%|{j zbLiti*?}AbN=|O0|9-6lZN;~A4G0mwBAMK-M-e)zb~}=)$q5r1=jnFhhSXCY1)XQ% z8gIQGrMwchz>yVCG5lA2WwC`}Q0cL~scR;#sk8aRfjc4Ux7au-ipZqBMoOyZ$TR=L z3v-TFJ5T8bj>#;SE8h#rb+#!UVcQ%@!Y~Jz*-Vv^>!l9Gz0T#wjrf<&6kig?o#C$nE4|5=n?CP#%m zP|{%-%k4D!G5w&7K!QpN;wIu0Og?aEBpNChC^g}Yj9)O zyEqG*so$1GKEkCF-WA~4LtS2J(amH#n0E*N%#zL<6YQl$5aY@`Trn#3A>TfVRIE}2 z)kU1*8>fF2_}^d44WOLm9)cBz0<@x{&J>P-j3!2Eu%2(Cbw zUkf@RfJ$rwbai)1oQeqRx-DK*^Th1Dj_OAy%gmqWKBXv(S*bj;`WDg;JQqSJM_&#) z^_>;TqSaohSKVt_&Ic-onB`Dw$B3D8ctadBx7W=A>b&XO!}^Pk4V|8RynTVTCng6U^((&f8AdnnP?4AZ@!frtVI(k7mUBFbQ{s@B0{sTB7~hRLYB>t}KbL}43I?5rMpuApd|C}#+!4)u zuma3W9ebvoL|ZXZyDve#4};Df?wr7Paqk*DAFw=q{VATivmnaEMgYn5zU9fHW&5D^ zua4{8I=7^s`8qg+0(%*mksSFsU*cauM2&Oc6@gT;$}6EhfVN{0wCY{iNJ&Y_$j$}< z7ThaUP?#xI4t|hpShZbNm6!JzRG^2;9L?v}!Om6?(26cQmMgBHzFom9-uJ&8@K=_@ z)k0t5*(Z!vi1S&xAs1C1Swlm@5Vt$M>K*LVlA$Z5*(Wiuu6@P#SMfaaeBW`1e1w}Zo^7-d zwa^2xtpU~Q>BXd&=$I2IC+hoN`F!#aelFHdZ~rTJ5ip6rrLw0gTeCwx^6!k-fuC(H zEC%VOdt5QnxG7NL=PFzQ{QV4d!L;>KI4WW-NKzM2JhXc_i>xJ zLuyfneHn(O$T#lujth@4Z`^us$byeeVpRK`V==r!x%j_ho4x9og$n!{|>{Y$2a1G!m z>MG&4Y4q zc>?y^_}NAaqA%Kf5BD3Jan&pCZxp32vJ#-42Pm?IX&L?<^I%wOh{F^bDP=t;rbyMh zDKego3`jpb?-UiMX4ct5F1EbSvcB)L0sK!%>B;K5xj0~-Fao3!kP-hi7C8Yn8;$6W zIC0mVJqqR9`F+vg443#5cYAx#I6TTy)a?XhfvS};FkRAo*0f?K-1Q~r_BtB>J!xTq z^Q47kTNLKSL~uu$-v0hOVCMrBzt3LO@=JP-nj+LxYiA#^Jq39Jxh;veJ+|GC2lxG` zZU1w^bNR|q1PXCFApF3R+Cpx*X#PL7mRht~Vp3&whjX~zcI@%egv+T|<4z*1kA0F- z7>~Ee`rog|hZUO`;gr<=pO=Eaw`AxY>n%k5#IulARc4GszjOTwkPrDnyU5vF!eRrv z2PbI;WY1=ISrWd>d(5u%k?4Nn*Iu&4ssO+S2A@lW-IVT*Dabi2Um`{4i`8~`DY|q5^a+{N01;Jt_Z=WGe z$*=|LYtM<#%LPA+i%qKXP0Q@g>`pnH1`9IQfGXeFLZN2UZqm)0z^%7S-;6f_yy3pd!n9!W(Bh2BqQ(UL%L* z>(FQ=>_zxJi4*VEK$LL48ncP2Gu^FJS{E1OG$FU0Af=$&KLNw`#}&DODl4fYgt9HmM3_qdt2SED8sz&)zDr&u&H(16 zQ-NuTC7;Kp1$vs($X{1HYzWNAQV{T+5%Bp0!5YnZd3eh=dU$yF@!V^ol$*1Getvjk z-nixLl|nfACyusDw+a&uxt#VEjgHILH#Y8_Vm-2BmdlNr2njCY(tzS_LPRf`@Rti_^SyO;Pf_jl}w2DnIqx5E6-JmdX zIO21+@#9~VKjQ?DzFwB)|?v%2E)Tx*KH8&()gpV!Sv4n-6LcKo|Gtdart<5K1 z;NhshlFT6YQ(1NN^4QI5QEMJP$hDU&FWqqT2+>y#Rm@_h=E%ARuvYlEGjCh zV)b+#jQe&F^?6RRv#;wOw55Z~mz9+j20T)?z+Us)*RRi9(Jn3}@jgfHTc8|tC7AW# z&;Os>V^hOFx5xN!LZoeH(ejCXxnv_bObKIKI(B*Z;~KmlU9gV~W>t(%&dTEA*8lz( z@j^B5foj`gzn=ZF2^Lw@&}{!|*O?#cqGdYwzU^QYC7kx-w4nH2A1eJ9@iRVrtG3sr z+qe2E5cq-bltzinaQSGN-7mS&iQ-AhW?oLC1ueNvWdPQ#(^zOZIu#QuR8H+ z%tGZEn*oQ0ErKr{3hYO%8M8Kuq>qx5gj<^CXKJRH>y5kG&#&J|Ny`cAui~_xao#oR zNl`Ed`of4kp)%BVwqIoU#S&|c;MHDlZ}$h(0QjWUNK<=dK>#_tnFzj;mVXH`C4W}) zT{fudU-w1btQnt~)n>0rI9xQfjtL@lV}=xojYM1k?VyH6}fTk>rh1_@Y$j?i%`A| zUIG}xqb8+gCH4xvP3#2iV&(4B`MsEwX@TWZM7`HZ$!(Do9~T-9P%oa|d`{9i zxSkG%OWw|(TIM5Lidx=avlI^-^T=Pz@00e`93c0|Y)5EszIS%5qXJf<=b?lhPNc3r7n zC0Inq*ebf!U#Z!BAOXsdNS_C>K7GvA00u+OE$nG?`-{1*#3O@JWYZ-hc0Euh&Bd)$ zC<~Z(AkG~3o>HN4+kMC#keOSptCps;{Ny9D3{WWTJgQN1&G3b9OL(Bn5eMp-zQ0T~ zn_P5Na?(2x5I#s@J_~5B0O6p)OMryb1&Spp8<7dS>1TgeD$$Nt>sO?h!vz0L?lym`6=ttea6kG* zx&fJwwa3uM(le+pYM6r#!5>c?TnqMg1jT%I#&7;nH;u(buFe`F155|AxoB{gmD&^t z?K?}K_X(Vs7|<|oO1-i;`klr`z<(WX>@$`ITYouy3|#3YLzyew&3#66+5sh z)txc8Q0($?`bT3vxp1gaJRo7GXP!S+$@;8;RX)!C)T0L2eB5%I;|PV8ocXa1wWH?J z@VjrEnK@uPbdcplaA3J968r(w7oZs(TD|*rDqwA+_FzIj;WoQg)Ie5f{bZOsR`Qr< z9>mt}P^4tHg2kZIZIqM%FQQR5`eZ|FY&1E!U)x%v|K|E5Q!*q7Lb=HR4j`vGns*-g z7m!9l{mAT#?!%$1URl6HdB7gx(#(gSNsDV%UlSA-cU9?TcQWRJ&S}X{9#@j4o049# z(a*!DHrP{acXP*PlM=(gNt(>4tg7ygxKdao0PVA)W>YD=8K*ac&5nB^J(ro^%Y9o) zLtF9Y%Wn`nF4Ye()<=;mkMUSGZva%2B=p>whH8m-hLhfKqX36h*^tv<*LQO?G8vI` z9blJ=bSQsV=nS|~9!6%17sP@Dc>I1Zvpx$WkOE(cKV|=h;;Tep;^c2DEn`cl^%*bt zJKp6m!srua&Wm`rH{*B@%ne2kuJ8&gWDh{32H`xQc}a*_^2L!r%k3@D~}7#$68yph*kTb{F_0?vMbvk!O=I1&ACt0AOP2h zbzFJ(*Ir{*`71#snTo|fW>f81^)0nJe6KMkWfWjh^~a2|itOtJ^!8M;V}ANDMFQaWRI^{M@v3;SM}J6AZa#W|Kb zEpsA5>UPlz-)K;^XvqL}Q#poU6>E*l#P?UDklb3jjbQ3x0(v{j(C5$@fDjLdOKf8} zI63=9mk#c<%x+k2FAe1sT||ZlbdZLu?I{+4+`qWal^K1ts-(X-!r;#~tf=7}6Sxz6 z@w4?90o1hvDj%DMT$Dj!Lf&)wk^jBwY(HI7Rue%@$C}IQsRKIL?4|EiLv`XRem%oG z>}rN=aP@7acj#rYf$Zn*m2pul=y_w%l~E|3b{XM9%PmOo^mE_4w3KBBa*L4wx|+8+ zx(`A$js~UIK&!=}efNB_dri3Co$IGJjt4Uo;(^Ne;5xYwU z3P*-U=4J{nI{n_YD?gsxy!3w+cJ9YTd9B>KSPvbS=z<_DgY>g=+K=d;TZe1GxJ*F7 z^?y8vV#EvPeDd$#8*nRwD8F(7kfYP@>`%Rz|D4NqJv+)C)LYM}%0ccoAF!SbmbZu$ zsY{u9S$&!JPypr=c1UsXuKw~jD;UeavPk|%`ut4sO@8+FXAkx*=7)_SY$%%Hc8}k) zTg5aIApoFz(Gz8?gK!`q@_Uc!$&BD-)c(}Jz3=wrqvXCUG#byoG5(x)K20s)koVv1 zj8cIfMGjB@DXI&ClX)bl^q*#1KskXw6l?e($QExZ{G&yv_7q)@XRLvNhn>~->Qk+u zK2WLajh*6jFEK@A{RH@W9z~p1eKYVg&La?93zZfmd&^uJsnbpJX|nI$SkAJ9qL&|S z0GT$*|LLrU>zeLS5?371cMJrd=)~E0 zPbB~iIL@@Gn3|^a=NM$dO*#)ZrWRCs%bn)Gf+w#6^TVJITK{vT30_*@tO8$>-cNGw zXfbao6nVhJGiOCVgs&r(Y7(NJ-&~e6XQG+q3a^7%DWx=G^$FJ8jOT8fZ zusm)txz7>{d>bYl|R_)E`S|IlMW6XiTUIuNC%g)gFpkE)QU$>sBABHrzz0T)ym+QR45%4+ zd|9;2se(f$WuzOFpv0p7tZ@Gka_GSEEGzl{kFbRfnb5WE0cnaV=;esvmI^ggR1%T!c6xf6&+h+%V?*IO(t9;$ zV?sID*Z0Z!KoZ45AM-;n(D|fl!ng;-480*&#sKHcjf51ms!6d@?=>9o=SU z9$3NdN8%?}G{}<1Uq^3#>xB!w#G@1M_A)iUD3A&&8yNsXm3?cib)5?UQWP?fv2f^2 z$pm!W0eZr4WwxH(nZt7|p@HX92$dq~_imefWuCk`BXRKi?%6LFwQ4j`qsW|JQ;@06!DEkUPmF-k zqm|$feU8g@cKdWtv_aJEU6l@=?oMeWb>?O2Q5(KLKVFoSv23h9=HMnp!16(nLH?tm z&5nDz#5)6e?+gD$9#Me%t{rZ>nouE02|J2@w8tRuc`QdLnB8Fa%dORK9b?ds&A%)C z7Hn47Xqn@&FOcQ!c7xFv480Q*fVnp~>rpdNgY!~UT%7-jkYlHs!zhW*AoPv;?K_*}Z#+}1-{N0B;lXKCGXrI8% z<$8>qR0(PLBNw5}C#7b4kLI(bIM@aI6M=`-Z|7q<*Xn zE)+y2Kj{j*oQMxW2|y2Kf}GoDM6b%8-O@lzim16*-<8~uP!OAAsvjegB7SGGBsJ+; zJBfL49Lnz?R(f35jUm_(uX!7_lX&GojoLwfc7+srn(NC^HGMfx9M_NNsdW=dOG=+G zwuYx7W6QfzYG1vu_|xda)YOva7d~G5&i`Uy71-KInKT7=bpqGFJ}VIUO_+zLFb`Dj zaYomfpx1H%5WH6TQMIP5ui;!^Ty@_)OPoY#G_ijB#{5zA{y-O={b=V|G4U>mBZk8O9qW@)%a`U z-5%|yRI+F74^#o{xPcQr@&O>wf8rFrFIsq$c{{+LKuzQWwp=SEGd>cbvq^%>`nZoC zR=98-;1<^|#E{3~@KKDKHjNc5j$o*}vjW8$c;YEaLkK_{qzAeL8X6kKom*8NTf=DY zz4dA8+iuS@M@nCt+l-WOH*h025iE200`T@3rPv+@F|ZcycAWznycqeYpuQ zx!}oTt8WojF7m}Q>PLHf4(SeIMXNtLmZiWccR^-;b#aPaBA_l!oBb+_!TNhdmZj%L ziZfQW>*(JUYw6WBX9g| zjM(+k*WAq*wkr*kYPd%DGbobZA$flRG^eUB#oO3al=Cee&hB6;E4HibaPnYAogC)P zMTa)7h{0yr0S+G+OVXQBs{#~O7sb%@F5To#`M3k`Q&+hoZ6(h?;9%CG_AGJQ6$D#M zdAS+q^tmY@8Tj7+G*g;sZKsN{%5vl)I#Zx;iKvVCo<7_3`Q}rmb^Ijw0rFA6XR`h|e5X8;^AE=ihQGx%7VRzN>JSM~^#G72p0N zRt$djykoG_bRp(LYw|k!N{N+5F1m5~fq{q1Zn5jy#`3_j{teqb^##x8HX~tHppkR5 z@vg+)XG6(y*B_MQZLwc768jb_0Jt@Qr>f#usIHZ7@AhVoiQt@Ym34H4MtPa>|p{$X~VJ7z~)=se)_;ad<5L)$|IDferDJI-~52nzr-BrX;f z7CKLdYc0fkt{{O}kk|qnQoaU|%PRmnWM46KyJHUx_LalWBmZW__giN6^PJ`-%pMLZ z#kEHVm+@`><#%~znhJ(|jb%B{i_~wv4|*d^x1nJOFYxTmgjgfA6wsTE=p)}HKFP*kj1NZK5lFI*;xf^R(0D+ zH*_rYe^jBIV!6Xc(G>w3Da%%T@ENvMP&~ZCI!0Y9=N83>r*%W^+y1FIviUCo;B2R0 zfNQJ(W+tPqm!*rd|L#$JME%an59tWRGy)QD)G4a8Scm_>+7r%^6hO<*nM>h@Rz}+P zt{8c#EDq!XnxMi7H1x9WD_uopl0IxSY1eZ9ty|M=Y%i&FiRF@+9(EOTe17tx>#U=XWs z)fkWxj1cuJIL)|)QAnNgg%SA<{NiS0=HyfW;d@OTohYyvFX^gdc=lPqznni*79Aa6Hd7p<-la!)@SyTrGo)-v9)lDsvQg z=PPRz!u7z5Q{Ien9n>7KQok#+queBCXEB>KY}ag$?w21sRSff)3%sPr3o#%g8FvTF zqu=p)&NRdqA|SE4vY;_qPgg> z@es{ZbOVn$ZF%iZ)(7{~t4cp^2RA51l9c<#!(z~h>hu-zYnRsz>^QFmK%AUg$UT9? z-&euQSv{uo0`)Cf`>HKXHpZW)Ep3L2jut(GZuYUNGn#!)M-5@Icyu$V9erluPkIUgYdG<{M&-x0(Bn&w`M< z!F5{Zz=yt{iA=2Sp^Xb&`UFcn^h#+pwcjd$7f_VcC(Vv)>LSAqp0Dx4U{vc&jQ6av z{5y7bV2mi$8;n1ZJ`{!6zjueq;m^zyYo3Gs+|2PDL@z@ZT!4!>fKjLd=z2MeL2lqkPky6y<7k7>^2lJaQ?djp*fus4 zXh^TW#ZGMnO&rc{JLK>^mEO`&HM&%LiZL^!$$e7{62hsx!Gyosdibp04O}gN{S;z}o+o>|C4$ zP2*~KQT{*dAxUI?FIZZAVx%aRCsq!Cd2$UqWy^KfWh;dUSq4d#PCW^u=$#S7+J?{k z&5eD0Sr8KWDViZ~3?9&rt5t>zzV%Sdv}902@XpxyXZLcKPVU4V5gD#sd<+!AWa7!g z#^9bLy#_P;?Zr~+mxPnoU2BbpaBxqa-=b#g56~$)c>L$iI3FFM+!B^iF{vKSomR2% z^Ei?w+0M{23=bbNESabpMI5JPfv8ybi(7$&?RkJ-Ag{OxodFISbX5kJ$}`=sNU%C8vCv{q73^(&NYiW z6>a8>DAW_sejELSfi&mjJ^S{aYx*o~A3u82eceQB<$tf7{VRflp@xW_@hkX2`1Veg z5;s{`d4?;Y=<|)8-6(h7TFnjvfLBATJ^2hu+9}J;08t$LFSYxxED4B~HpFvt!=byK z^bm|bK-`r}ng1Gnh}asKZ=Lp~d4#f%2~x+d4y9Xh)_m;9$o$k_MHlD$VWIygQMp-K zYr@Q;>>|pu*~O;!HsSCYy(NRlkQ*sFN;YtO%vnHy%GZCt?>BAmHJ{Xzgd6oc-1o!Z zk5Yz`6omBm%#NXr!}m{c13Gt~%MDgQ9+A?p-Mg)JYP)x7=>UC7mKcsu|6GTFO)OT9 zbLM`Dfk%YXsBp5sQ3&QB---@AwEskP2%0_mxf%xQTE9ss$e$i<$DP@U@xLHoAC}|Q zkrc-9DnxPS^8uYD+xaCFQMN*2k+C995K58bEyBsEXB+fN1TN-em2dg_*@;F><~C=P z>0}H&HT(jx`I_B@QIl${<@KqrlH7WV^X}`@PHHZtk_kpNS_Wp-mt@x(;eJ~MO^J~o z?nJrWqKwQ}n;a0cH=tDP`TZDtu$NM{N&s8V!piEuy+f2Ijj&y81eea&eB(x|wLkTI z^RbAkAyiJVS_3%|oXwyx`kCK8PD_)!r@$Z~qaYujGxEW=vNBPpgc*rk8Z2n^)EZJR zCbzVA7+{KPK1Gc0<#0|g3W^iU+fi}(zpnKxV=;-RXmh;hS+Jh6w9>6}n1@)wd;2sq zyqRT0b(@|cik|(D+OLHvu3Pk0{e6fcGdE+qzb7`^cL6_26@ad~1mBZf($HOIcFOEY z0k_j^vJGV46441R3x6~v1!yPP)2=T)zgRZhggf=-L@4-GjVN`3jUy$q$JI48ax?bv zKU$lgIammvZJ(X~%#RgcY)Khjm%!d>UsQ7u_9t@gHuoehPNI0Ar(~A(wzCH7JmWC8 zuc?#`9|h);Yr{aZUS_uZzA%>DO|6p&+B1%8wym^xgX}BSrV|cB=Kxz$m{3 zD_aVIyU_)dZ>C@1WOy~Lpu!KON8Yv?Zx#_u8z-tM<=4OBhMX18B{|BFl^>nK+{RzEW2r#UxE!Uz5I zd>N|}?dJ`TrflCo`Rdd(JE605wD9a0d(#VN(DxE6a&Y;hQQ@ERsPDFJo1cjQMt=4* zo|(@0wzb!tPRVf!KhdDxQL-U(MaM^3fs&;AZGV&rl~^`#Xsbu{6JbPY!^aX9d2$&; z^xp037N6DX_|euIrLmWHZ&%ipY6aKN&i1u9(@}5O(CaHs3Kje9!0B9D!8M^4wIkZR zPd`EX>RgFbx8U3c`&AngTBxhAw*(rCw-e)?X1d&?;%r|%KR$H_rc;D7b0U?%)Ui0b z`WMAm-;KhWpm}e<^3&_n&h0Klvyy$#p4Z5Brf={rhJR5BBW57lY; z?LxxWMDNH?24r#QQ{cEBMqztX&(3T`_1!(iI4&YX?P+!~kd5Aa zT;iselx6z&?R)nWN3c?gQhgfoM{OjgGKnb+F+V4bxP5-MNBFcJcaEcdn_u+r;2(Fi zZ7&)eDv52`=@d*GPTA4sy?he(|`f$gY{wpAP7!8r~@pYLF1Vq*Hb{>h}~ z?R(_O3N%eazP9`#!alX3@}^Qzc{<3{ak?V!#c!(7p>?Guvop6T9~NH zzP8RgtVLplH2j&SI8l5%#qX>j+53^+tnWLoCUr9L<;B0xx_80+7|o6+JnB4TzZ`+|dY`xHuBAJc zlFx%VP)fQ%x|T*#q`M@fyW@A(&-Z$-*MD8k?wMz1o_p@8h6tDU z;`H;mWwlvimX-z)eoIdyf8@7m#@Ls_U_YmJ&^!_HlXc)LB_Loh*w#!M1^BU==$Md4 zFN+hAEOd|VAsqFCIydQXG%}GbDZ^a{;B}I=)Q&QXt*nTFcVbz0m4W9E3A!xLP&Vgi zMyrU5j8dhOb~X=~2L!3#bpZ?}PbGzqQJk`UoUDE?b3*L~a@~n^V-kc?qw9uSqF2BEeEF0zaCz&ep-oiF-m`i2 z=MN9?<}6X|&zO`xjF)>Q>DWs*l?UbBn-oD3>IDvFuJE1#jA99jA_Ml#_&;`x0@vfG z?6)1^J}swy9T2+_$Z-tV6C8aNRQ4ncdS{0_F4Yw^DB{oL-;&| zkEeCeoAfFB10v{Gqcx=WtbSm-{jhPkCs1mZtt8GAM{t_6Paq3+eo@eDhw;);e`h>R zCWp`pyzz}Nw;KYfC{C=$R#CL80h`mK7(pfVdBiDKCeGiLt?MfLo~0J$)HGG5gb82_ zB~;IHpXm*=5Tc`m(B;^QHI9nQiXPT zG9k~=&!}3X+rox`jCs=%0M8?mkpj^g!XQp`-kT~Z=dc~i648543{!{~!bcLJvk^jI z8!h`eUVh5-xdefFovvt6U&WLqu!;64(FqHYi1*UOE=%473!%J>YJotH98BM5)>wWy z3%h5|DCD>(c~Gm1m_K+0`@rXLpEr;?y{|;NyhL0^Ii9o@vOIQ`so;6iKPiP)=zSCi zXS5_4rQb_-p0tYFY|O>!Zs)DSFF1aC_snwKBq6OuYx;Y4MYaF%Z5w9syH5$!AflCx zh(M!M-KK90@W*ZFPI~tb=#8k6zbA|xvRRE0EkE6yCRWo3*P-q%p}5(jwlu)6bah`a z{+W?jad$Gs8W6j4JO1r|k3Ukzo{xtnU~^Q@c5w|KGrQHI*r(q1l>P957C+;zw%0pt zh>V570T*Tm7S`?C4Hi|lLo41+Y@nS*?5Afit(n^+`^)%S%7Ir9h*qJOUBqAphG0fV zMFn=Uu%3jxDOu9X8kGkIK(&V|ii!K;lQ@KhYZj{yH-^%_?CT}Y7D1+}=J{{1d?%tp z7vsHg`@5M4mC}Ekg-&y$$hOzS2=P*j2}@{Gb(poxs=JO2>IuVamPnVy*@rQxj@2h& zr;=}$lN&*c-}2ZwYOrNQOP1;oiJwD~CpHpeT*_|Aa%Kw}(kcFY{oF<)eAagQDENfQ zeazIc8WlMrY_s92t?NWF%bb?L*ojQ(g&=&vuiW1vRqYFWO~KDexR<;+B_)fh7oS&3 zsrEZ)vCPDNwa)72m`XBuONO_vfA=go7uI+ShCjDgw}&TQ{W`ot*a>AhxrwMFjMqff zQXN;Qf_Wb0lsQzs9xJJesm3k)N`1gF!2bQ#I&n$KAZ-Ig2Z6lVPPjW6TC3Z|_9(I| zdMQ|5)e3*kN=#&4!Bwmq+}OXO(j=L4=e!U=X>T3w;YCldi~Cgu@cEBje55$IvU2`7 z{f!^Dceb2?2N%O3nDyIdrQPBV;t@EKCCX?~+o&R$hav_x(iGc`DJDd+P{5OY_TMqO zCfP>d9XmkAk-}zgNf}230Xd>^@+$gF#4nzRvy5rDpiriv{4$P+YDvV`J z@Q|P$JS%xDB6pi#U;9zt_va43lps>Ez)E|lE-pLUPe>Ce+utjQU8&e(QS)uLKTJBK z7V6R2r0Ng*Qiuv_79YHakIm*-fTK*B@c%;g?#GXrd^83^WE+SK1_6H``loVQn2WCc z6pU;>lFo;k998O3T59U%MrdYss)W8Fi4%c1S*SWJ#}x&?e!px-N)DYMMbDV(m8I?S{(OCcvl4u`3-RQSGiV@ z9%(BCwD^I5@V1m(0*p07)Da`pS9LyavyHxlDsU*x=a8*S*%NWN!>e>8>f*Zn(Lk6N?d8%M8wJHoTx16ZI||C%b~~m`80I# zE_j&~9XEHzkmg?OdpI}Vo_s(xGjTMXe}a{XZWsUTNO09F*n!aT=*~yhiTWgX{xzR3 zQE6k$`>nyZsNb422^|@BU8VpJ0gJAjma`F2v-zp@=K@HDPmrn)sC*?OBa=n0@`}4n z+WaAFc$&@l_qaQy(2@P>lIepIZAM84C zoH3zpQEPO3DNB&Vkg>bBKUgxvqf-77>P3e&q!OKGwNA3!Y@Z_te&F=c%IdvmB;{@A zL_D%4tQ<>`+Ie99)PZ?eqpZxwl4xf%ig1N>tz zvNA0OQipM!H!+>i$LrMuU^g`U^9k;A;7f+!ao=seup@HVog@RPXK6@i3zsAC!CK_3 zco#QpGb1PH!!0&I{FZYPdl1hf)=nm@0>iKCo31X(1*@MfRD8T!)-wqB5|59*?bB?67)r9)AV3od{Q1m#ma@=eR2}G;T4>N$L7;V zqg&qU8~ec5{6#mBk!SmZuG*bimP+R9060#vH(7C}?6OiRma#ksXBTfLWd`$y1;ZnfUz|)%jCjtl;X9uuV~!q;<~LKW zcXOH$5DV1uk!L?Y?3^|HSd3i|>ZSH1K$?hVK515gg0EgouKlZm1q zJW3f)`|#d(;(^j?U*ZX0B|EqNWeeK-d%FueRkhF_li0X)VSl|?^Z5mWx~Z4qNSk&n z;WvxP-@VZK=VJ~cX+p-p0!q@afQ1_0Dc%xbzRrz_bi%4Tw$~)>*LFP;;F#$UB9yOS zj>+AIiEXRfZbE_$naFbE*PBzIiQ*(6D2#GYfp8)@^wjnT%2dl*aTWx5(7FW>nGEJ-A`E(;aDP90iG|%$~h*P z76FtQ-lxq*mnp#m1Mz)|aR_wT&SD=vp}yw@9?7XKwkS+%779-W5!s}HZ;-;W3qU%- zvHXz!6M=Vc2Z3!B@!;c>7g^>rwyp;kTOK~hU~lS^7m*u1ro(0nJvc8>_ zosCQFZ)|KybKxY%Jawk)q%N{f|DqBL=z*Yh$5oF@fvr!!=d|5XxyQe-AaY2UR!+Cs zh0)_^DM~d{kf?MMEtAeeh3t={fBxQdG`o}=;}(-%WA#{+35QIM0%{^ZsE zE}hx-avoQ$gCDO4rXC9HXl7?0;G@Ngm1N)jal!H%WT;kX>(`AE?Vuj{mI9(oJEi^d zDpb}Q$qx3bCcKkP9qe@l*ngFG<&&*y+v|RruKXt$&2&_A7G+<>^48YYUj~3_gNK>{ ztk$qTDtsVNOo?TzH*KM7;L7+10V`N3;+3;m{0C~ayLfZAXV&+s>{xQ4ru-sBx&3cZ zODItnfhTHSA&&xG4lfK=nqvb-NDPEVp< z#xuSBjxkuAj$ZE1RsDG1KkR)e6-ac9a!~$G9^&TkdL!vWoKE;nxxHa`ngRqO50ueE z_b>NW-fC-y4Gk$1KKjqEGsi9(JZicI_56&ajjf?J{=?5bLxu|;@sKucXe!;LD;22Q z_&oIKfC^Rgmepxbesgn1CxCr@&&Ws;AOeJN*2j@7CUmd+##?CzqDK_NCclj2%}{h%aYRDrG#P#De4eAO$JXP1!VZTq%S1E+b8{@aFiV&@- z6#PC09l+9%Nq?vS;q51=khwp^qS(XzMT%|i!*}8{jtQU zX&rIfhK(fASqKhZcouBr@cw6-YZnyT3p(nkE4SWAK8m2JTT1i)qVVvM@MCM@r2yVx zAtWRPzSiRr0kjIQstLRgFj<3H1M{#3y@27i0E-!~8+Hr@Z z7m@vQb%F1$qsj)JGXQPwj$_jzN+V(V7@3ktZ=V{ZIU#yh-t2+tFz&7nsDq2bBtI4o z&fW@Bw2HP?DzrnU;HPm|RL7sjD5wnR+q4K-_(VMiHLsOCQCx}%DFCG>-@|A}5r8;6>xoe-wkp1t22jN&kpM zl>Mi;%37MEyy7l@(5SutfFAZcpZ1&gfuR>2!B;S}!lDDPBR!ctnYrN0plPy7k*0^Gw^^5~S!d0PEmp-Mm;4V@1Yzu?IR$Gy0AsDl&Q| zX(x73xGYd)|9pZ1W=|&{+m)DuW@l$V_up!R;H*3;j&Y;bVurTQ1AI`&B22R85h3it zdWN5ZwhK;av7A9&q#JYUblF00fRXZ>MB#ovXC1!|#Mhc#e4NfNmEOsezE@>o6$`); ze-w%$VCX~YZk|Pa<9+blfD zXzu3*TxJx3kL1Zl+Gw`%JYd9syryU{Fsw%@v#E?kennUZsPcgmfGFPv_=X_inNB8(jfIL!L<<)p5Mssgq}783F^0XH%*HkmG%EB0z<<;LT|)Zz%R zb8_SD1uxqE*y&R^JT@NJEWHnTONm0>(h7cIh!)JrG6448yWGGSoVyo3nPR?hj8O>8 z=j!J&&GcEph9>)Ln2>>skIDhCP7q-F#6z--UVb0q8X!t}S5;-jPu|KBZR!s&XAp>+ zlVTonir0b{SyR@km62&>&&gW&kdI+kR`m)*_Yd@=yOJc1G&o zJK0wH07sF^S6bSSq4Kw+xHxcli}h>0(S&)spD4X4rTJ#?xe00A48rAkIgK0p3o>ML zzt`hod!k-8qib$At&cj}LGOqH+VHx^(-O_Jgtm=6sQl zTHdZ5Rq0C0!R_E` z(pP8aJezL2LxEspY59B_HJD-ZKIq7xWHI*Jn2uv)IoBU#k0;VkydNZ-RvUjW`s1aA zS3TfW|7Gj9m!JMKECuJ~RSw8{3Its8;I-;6rLF`ZkO3@SpRnTp`=urM^*q9`s}>yJ zY!+_M7iY4yQke-Jg0)v_RBN1wSSy`DTP*X7}`A=t9`43KdCG9BYv4~1=!Q*cA8w=s@*Al;a@6!PP zuQ|_CI%Nnn%0I&-KcsYM=SoBw#Zq~$N{c`8v{3vFzWf=j`oM6l%yv{eqP{gKQwm-G zik3E$RNt$_9T*CF+kWF2z}kgwye|}#sq)r^5zJcu*ch)9w>a8dD$HDg4+5zIBTIi9 zkR&tYR*wB~?laY#KpQS`M6|4wpoyGl;--db;}EP*_3~iRcl?1Tvv@JNi3j$|v!&p^ z{;0dKZ-lDWDRQ~>{f)-)%s9g2CuaSxthDrmzXJ?_M}ss4uP`qVDPm0DFOM`|gnQra zVuO+@ooEC325`*mau1%6+T^87VNI7UK^hezG`l0~aWf zU?1v7K&YxLK2WK=hu449G+w8Q(hhRG7ys4H_SDgu+Jm_C@M5iYm8c-AXeD8I71!>O zX^raTGAAWmgD+9jCEuF>6>y%Z%O5@0Ls9^r0Eo@Yi!@{IdREiOC?T0|v-UyKa8$*3 z`hcRHGd@MKBS+t(8H$e)?wn%8{RF=c`@4@FqK6C_70ku0-%((+qj@+nxRT5_U-G&b3UGL#pP39&<62pL5XxI zt?CyDX3M8raqf&yoJ@bT#v|3ANItuybIbP0_(oi{3DjHsFhthBobbAwF;C%vY^_~O z;Iv(7uT>}pSqXR8)3Rn&KBH;yVd|NABI*QSc^w_cEgn74Ic-I39%}+L99|rpq7lEt zY#V9u*A###*Zh`6d9o4E=xJ(n%>pjxOC;z>^XZ6v4GIj;$U` zH#aT#AROZs;Ygt=1mDbgHX6Dum(V?$&AET$l~5y8lQ^O;IQn{eAM+Sc1{%Onw;NgA zjB*E@=*EuHYk|7`&av)wr+85yuz_f8e18?ZacSj^r8?{>9lngLb-F|j+FI@XMSCZv z<~03gLbU1D0#GhZng0%hC7~Ct2_S@O{QhVczx-M(K0F<6OD+hd6FZ-gf?W*w^!@{w z1c`J_HgUl2K>B8YbzW5$k3$S`*N6n>Mop7bQum2-(=0eYnb>r~pS7 zSo3Y_5KOmLbB%y2j-sVHtZD=#FTbB-({kG^IdmPuoY2bqPvAFz!sTXy8S*b}bmJXa{LAT# zj_ycuoP$j2%;Cv$HLU%qVSaKeD}9qlVW%`kgf`!wnsylW6DQ>RQBj)|ii@#5+)aJ0 z;IuE}!j3RNX)lJ6&Ar+UW8>lq(zeAv;FPrkp>EQp{1h5M67)K+()Bd3mCc%1T)x9e zh549TJ81zddR^ z!gD>bl^%xOjZe;D#uAJ;NQ@V^ty~U%@48F?9?Bo^bR$+3M$r^3w^5dCbJQ{VZmx6Y z;LRh+?ng`$^@KEB-{aKnwb6<}Ht=0!js&wumlU&iH)QVGOjz~I-LlPrFr=G?q?BVe zF!rSRN7_i_uXk*~hU*G^&N17_&Cl)kyaD9`$B3VnZA(jfa-T(CeHh^Z|#mUf@I{}};n5(qHK zRftz|%CXPZau3&!Cf}7}rI1A3jqy6`CMgw(e|KIKnVYDv+7h zc6giFI@W{@yROv_?KT5rlYksH7%tz_Q5;VW$?Sq^#Bg=xhPe9bT6jLRTtOKrQVnTxu# zWSIWgsbyx7j$#gZc+>h^Qc=xNm)mmuz{%}H#qEV9d}F%?tqSTu+@|@kaOO2wq~y^m z0jygrv}T9M!CsM5@5N{!R*i(1*Hn|iV;c+`vjlO;ONUQ>-2_uXtTB)ge@*os2EFlt zT@n`LiOvUeJWHOdesjP?!vjZWrwjli6;EZMyO~a|xuTVppvr44?m3xlQWe)^ej!wX z$#I@OUP<)=e$U*!CMPP2cx-P;91#fGz!Cy=@T6F&oo>H<`4O^KFem{J@lfszRVY+w z4Gf}}p6p&?&mJtVrrBMwSaKM<+t4qHrfNDG4`hB~Xt&QQdM5wkDR3q8cB^CKu4_bUAJ2gT^>oeEVT&kw+=RPh|pGPRcDKz$}rz9lk_@3C< zQ&ogkE>?=T?<#p&4fcLYFI}ur%vCNB=&GDs!*BnAqQ8N$3!nZrJ@Xm;A*X*ef0KW_ z4&DAtPK}l=?5CKIi7`;w(HrctK+3&lcDvH)-Gzb{!3m^ANUpi z)7h1LvD2r&U&db=M_=P2JpZP~jjHy6Q)FB#77hUI(3{SxKXLj;caA@CBDC)>1n!aT z^sv^NV(^H^VQ$D|Z~P8mp-!!N)`70o+#JGU7N)f^E(D@DYmSBWmy(rCgc$$3nCxEz zg1+d-6rsSE0ZbHmjbf5!@{MLsj&AL@nY7P;0V|*fxlzwWG?#I4z3hxEZX-H~?S-}V zyScl|Br|AfX{|XvZ9ASo5pj)=mYT!%{-N3#$P~9B%}OLe2VokwDFck!A)5X?(C{xu z#iEXo55+x}kRs(XFb%ZfY*NWu8=4LE1lPtdyxkP+Fj*VMlz&HmriNs$f7|c?ySZ4~JuIkGSn5~_$kAeU4}X}_ zJ!(cnLj0wLoy^|VhhdY70#dG?lEBDRqeJPm>^Wr1Y?8Dd+Q!Zb+^lx4-@P^vVYWVz z^(#Qs8MB8zY*SM4aiM^J0IR*xd%3_%Vgz7zIixrIoJf}XDD2*u%^F89)Pwm+_kaIj z@dpj?Lv(L-aW(k(R#vg*4zIp9hV?LYzxl_;oIa$01m5Y}+Lu#!?NyD|S9}1%9-?qZ zNB~w&COnzB3?B(sm}wn7xsv$R?;0Owz%>@PA@IURsrUO2)y5Wm`-m}X=wqMT0#ngc zZGt48Ht`ew@E*h$iy{onmDY2CdPjniu)+$+?bR6xFTgD6PYps@E2J3T=D<~?0;uLaOFl=nfN!Da$7!Ab~6XIhg+|e63G6XOi8-EafH_|f2 zp@xqqJMIZMDD)0|U7cGv!_;j<53egbNU^F${CQal@!LJW(|{CW*^zpHUi*E}05$il z;MaHDW2`wP7;or0-t;w@X{#<2mBGH;t!phJLXBHM&TuyXQF0ZJlSgw2r3@jS> zSMtM3CK068#tSU|wb_Hm0}9CjNR3*0$iyW5Pv<@4WuYBLD)waYl-fOfZ$>$|F(QMq z#dD?2tsG}rB%gNGRFLT37{1q0KqwXjXK zTQAo~me^@B&(imbYIwbR>$JDAxN@Prr)fE>>}(=)34isu@d5E<7x7d{*bitw>JtJrQI;zf%rFV@n9KLp)lkx{OU}U04W*Yyo@-)J6m|q>V|+ z@FP4t^qfM4_%cX#S`-0ieXF48R&~v7mCj!3zGcw@Pu6kDbK#yPJ-l=kd=V2lq|-Hq zqobwO>(8m*RIOnEs}~p|SDma5up=?t4d~{kG>iA4KC)|0SSN*Pa2T%>OI*-bCE+s7 zYJdd1F6ouUtk^Id_lB{4T9-kDFx8u{CcohJ!@zsm9O18DC*S})=DW#%A+keaY z%K5|5)cWCE&vk_P9IW=ErgG)rVuxQF79IX{elGrEC-P}WI{eN1k^0O!YR1iITm)PR zlgf%lsaYV(9?Ax4l5V4&TlGF80@pe>M9a5Z^Dz)BbN+-o56lfD{REUqRs8(?R_^5( zM=m~mD0RlO;LK_XjAq25M*WCi=Cg;NEn(Tvh&kfWxNkWAUr5( z(wN;qseAiP{|ex%U#!l({JkhX4H%_uX?dCArro1+9kb{0h)+Odq+QrMWMBjj*9tI~ zt_|qm_9cc%%PLM$;UCgO$1SwmNz7_$SSKEF+pz*O0@pk!eYVxp#`cvK-P;RPBQ;>x zRAeo<)W+*(nt-uh(C0hT$ghueEhA`lbDSJKmbWf#Oa}2LB}_F*4C|`ij7M*cl$*_CDcEzM4!-%u+>LGn(u(0s zjrl?P#87ys|DMz!VLg^Spqa{%Z{^ATPIk3iSm&F|i0j z4dF+0u~m$)DgDX4PS3YL>&zpyor^V7+{;1Cp+d=E+K_?g!R~iD<^9mV@uB;uV(KQQ zR(NTb?8ed%3%tbBTwFgiqlXQWiTU{`VEM%2%^IqdZt=fFqs4bIC-N#R$(TfPmHEn< zl|TxLBk44Q4|y=rg0_rSpGJ<^Sn*cx5(dc{f5IO<{bBwYiRQH~&83EYs|?IMq39EB zcQPycL7ur)KgU`TYUDz(@*(pFr6;|+bht(wdifMiKc{C2*CtJBf>~>u>E74EJU;5k zKgV5QnH<|z=T?z@&17-x?FNcG6Pz>pyx&g$V^y?jO(Hk)1}a~AALD9rM*dvh+`LQK z-QU~GVZqQ5-;$!0d(%9V!b7ma6d4H2*CmsR*F+mIM5w%X-Sk-JPbgV1kbV^Z0~8DY zYL}$M*=gs3c^r9l!J6z6B5wZU(PIRz=ek>aN4~}CV}GRL^t7*AAdm%ANHF6v?`$dX=-+Mb3p2e2Uufa=zCyB6EeKjeZO+u zA?qFiDC{6V;PM=OnLXkh!YsMPN~V|N%k~_D4Q8Z7)L}ouo2m5Og(cv!hM^DdgBB$z zsu+^k#xibl%=6&~p4OKxgNg@BO2d!aKZ5@ro@cVrz51)3b#}3s6Z(3!s-rt9Oh9`u z4E-1k3~l=0whAhsZq?T@jK{q!nN0Y~XOhU-Y@AzC5xbr0G zGfc3FwDRO`d{=tFkrK&**rEBjp)1%*h12MqOOYpQoiT}`?jGkbhzY|?Kx17fFbe|{ zSmVx4?Rz5A_WXD}(D{7dxoL3xk>nG{`*2{y?n@@r7e)b(mm@z2Iw3}_xM7;MWm>MBYU*X zC=LMQ8_YNxA`9KVU}K+ z-?Y;2kka_CBRr;KgwF!2%4druk+gvTb8LWTtY~do@0;a1MwwaRNmFFPyq|BFygB2G zz^|k^-{GO%ysXN!)hUH1qfUV*TY-nc-_!jSvh1l3=Ij4h8zO1p4Dlc1Oy|CoX$raF z0E1%6>!q#jAS+S=@PcN0BPhy|=a}vlP#Oo6aCL+aS8#ib1L|NpT7LM@HWGcN*AJ2) z+$25Y2dcx}dqUaTKrA{+9KL_#A`3^d03vU%;KBKG;f`lg)14Cs)l>(r|+-$JA)=@7c`9A~c3^>#$F_mo?JC*%3L7+Bx=x!pgpK&$maolg~sUPBw(rIPuD!?UE*AMZ_%>B-Gp zo`T|TbLntLT39vJP&@s2hHYaYVpf#0HbaIlZ}_rh-olHdK47W9oV>c9p9Jc_8+b(C zWK_bm_LtBlR$&S#NBr#cc$`t8vN+eqX=?+bRP$=nV+{#V=(&rE%iOdP0?Y2sQL-RK z^d#}p_H1oHU>r7h^3Rk!*mSD6*#g@WPAmY;?eOLCQtBu&KL^66Wy~L|l${RW5x?xp z&6M9ud~0L^51+)vGhh$W*0wbKzsQYhDWO4|jJOKO9To;+fx?{!s62BzJD-=(#d!kL zft#0tUpu5%Stgay;0ec$+LxM+<4dhUMLWEZ;7Sndd+b?QWqT6QWjflR22Aw{V_R{g z&(NQE6yV7r7B=S-@RXu_l|G9Wt~NE6@m>K$HTzFk)jol8mgxKHpbJB(BxGF z{pn`!gJvPP%xC(?``Zh))z{X=E`N3Q35!0q?w|W#z@1m@ z1T3v(?n%q9_Aib*3hlHbxL*c)UKR4dlOnZU#zZiR00$qR~;|x3@w?Nht8_)Cfn+DQ3|sLW7cG{^6$Gyr6)(T4R}Jx)LdWGL3N* zy9oz~Xb?6cV#H<$vCp;2(-JBYb5Hc%Vj!C&mi|?10mW-s$Sn`h2q0{_9$5n)aqkw3&0%Z3wZ)a`D|VJgZ2x?GqbZc%aMqe!;-hH`EdqMEP%$@$w0o=ph_y~V<6wJ{haId zQh`^FIjHCvg>*kUARG^5p{zy2Z?=A@KcMx=SCR&3kU;EQrO7lmDh&n^1+=^kpqO0s z#P^A)AW0;MQ!pEk5{@Wlnc1h&i}3o&kU3>wWHf&ME0qFk@QWy45dM`o(h^W&pz}1{ zv|RHU3xU_Se;99_l$eyF=RX|Jo}@xq#VyL!cu6r2%(}6?r-x!^f4OtXAVxTTl3Y76 z&)0!K^fpzA6E%UqV8y9m;{pm_PvYY8o~M-f8`ECWv4LxU0EkKa@nUiZ=d~0thgG-b z2b2I8!1WAXM#mx~@y>J{-@EVo$!;31WlP*Gw`$BAvB$jYi`zbmGQ4GA6){@}!8i~F z`aA89V=hCS`m;_Hg{_ub|09}np)A}B7E6^DdL}wN05;&wfSfIlGAFM*`OJ=OL6Yrs z-I$$@0}wlJG0(e5fU(oo+LeE%)dvuhmc)y_RNasHSN)f1;EwQVAg?Eouqc(5`xm9^ z2ZSG)PX1&ghLnVur+hptgKo42S+f<+;DT9UfhEwR1Ls;buIL!aE+1-2De8t+YQrmC z9x1PleaZQV-u#XsHYX$B{@076s&CkXk&yCPDOMbq&jJQ>7f^Jh0#n{VEJ?PLZxO!T zd2JnO#kZsBKa;${9IPJvBg=E8s}6+XKL3T{{+&>(?6tL&!O{*yX^l?daO*=Mc*ke* zwNix@Bm`-rDq-W#odXPc-A=-R+r&9};KSBZ8^R~&$8lkGRaIh9#Z;dPwzr#Uik($H z?+3maz)F68;|%T|9K?QoXa`oWk;VfVOubxr?VGFbm7&G*0uU5Lz4x2BW9XqiOd8LN zF|`dUtZiz~N^PPy2(s_EEm}o==pF3Z5YrmOsm1?=t0R|3LbH|4Xb8NqD9!k3=~PAG zr!&@%dl)fAI-7e};ceF?Kx-DNRV&W!0*?5l4%EwW@5&MdNS~FuFiMT`Z_ifwid&dT znD$0CH&p1r>jY3TR^?4J#R*+HPo|1C!b{!S(~9=(TvQCesPuHuz0_An(ni~M6sPY} zcuB=`mseMx1g5fKE~zB)|IlQ?7%VnHgDkpcq_PWo-~m%ji380>vKX`2FVV ztEfHIR>j8kf}kR-9-i%w#2fM3K4h?Cf@rDSU8UR3))IaKI>>Qh865ddpUf28rrUPg z1yhsJRC%C8=m}*lT%EKL+q-%1)fa=Lb&p+Kb_(2WtCP?3$I!jM&{k>`I}7fl5i>9n z%cM-GDclBMcGgGX{`nkiaGnZfz)yYQ-@%Jb{w3_HDk|podZrqcy|Ox3@?qs`N(E}Kai`vn+FI15Tt{P z`g@yXz%f<^-swk|h(%&+RO>fy0d)4Kpxwo8rOlg^loa|4uM8-%NWm9F3$tkwvy#UxdZF^ZzXI}x_HyYwPNb0va0SLi%u&UVNNrSM|9+%1sOVB>HYve~Qx`Um5t(OFvvORbTbjy<1^UECeVs#9* zDCS72#8tk#I?!LvIX2|nt{leWZ={!jzPyEP)zfT<);BsbD&`=@S9QQjj5X&N2#_Z@ z@Y>U9X>>nWi7J@Q#ByZ>4{3Cb8Fua)9Cri5rD~iv6@ZNW9J&M`xfNq9kQz@%34u+H zIPMWrLL8jX_zO277Pen?@!ie%{&13&fL5^V!r^qfCB-W-KXHXGa`PF8|9d}8O4mPtM9FIx`5vb_JxX?^B) zZBw+9+Cx`^D{3I*q?P*=ly1B6S$4h|kyMcEL>*FK?ZjQN4HVv+>jjnNsYC~AC|Nmt z#Z=c8@ZB^+Z-gam&T@@Q2m?+~0|Kl3FUy48_XwZ%Nq-zU?2+NQP9t@Fu{v8-w9)3iL>g0Qa}geT!nv)|aQK?S^oSrM9N#gIP_rdA5;yOmFzc zpC>f69jAOioe*-oIE|0PvzSc}jyv5-;@gcTehR}El7D*y{vdYO)k>j5e4oiqr;2Eh zG)Gu7VizIw(#HJl*QUlmPL;x3d(|Hn&VKA&+e?fpUBYzO$|$H!Wu-Oik0mQa;0X4o zS@GRM?(sP1?8N6IW|yU-I?jgHp&^u&el0@(t#tv( zE!o?%Q9CMJN>M?n{$5IKa0KBl2fe3e(`{U}14d88B+ov6N=1d31Ie?<+Zg-K^dm7ah@(ND6N4V*}PY_ zRQ?1viKv9tsT6Vd7?lZewvVh>ByLn#SUB-l+j#{Qn&S#mE643=rs)O-O0EsLx%0~C z-;vRfAB~8rl>0AXt=s|v0zOG5g=6Gq%$M$NH z#`lP`KV*`It%7~&gvIAGS)}_+c9Bj}uHnp$Whc% z$(HnMDFHSRN<{~S_+T$;`z-0YE@QKNmot0xDtHqhb&_3J54C1H`Hn`FpPwJ8kgq|= zDEKxSXfa|)N#RV^j$xw3=QqTh$H5f<%3LojHa!Lmm9Yl#y2vC6cBu9iVDu?W!&Cbn zg8^b>AXZMt%;8Ba$8zRRE&tl|GdJ}(jY_#fHZ9F&Try~2%g{&Q_AnZZ&wV}*)ECqj zV?f-lga-P1$}05xU`?RzY2m`G%Jzo>wTNeg)xAaOvN)Xrk3+}2}RsR=w$2|fWg@do7Zi~2R9wgtuB~@ zC;S<v#iUBo5V(1W`PlZS04?Nyrr` z^5-m<4pskIOUX9oS)#F<4E2EBcp0WZiAKQJxk~=uKTdpw6%I}rphrBC5$w^Yq#yz$ z44H@3#x@kBiym9EE>g!<)Z)@H&+$l>&v*AhMcGr$GKk?QL7%J(i8rYxxLzNWSVDRA zv<8%xov=*a`kDRSf1FZo2&#>@H7%Ys_^)|I@;dO(U=q>8vhB8oW~*tMP`KdnoPsyF-63k?_~ z(60-5hIZ?5&d0%6FreqM?J^EH$>QB8_|IU%O(+5MuTX561X>sR8o*$;`vhG-v3pKa z^`6BEmvKtIFk;Ee$Rg#o)$)#qC)3*QxZaEU-q`+}(Om8PEPj0eL_ci#U!gKzyQphi zB|e61aNbD#L8N}>J_%ZdyFBOhdFVidnspMadT?)W)(x=|sctWLU&@8KT~et~xp=%a zuod66TW|qPh#zMfZ=4>aDSGb=_MI3EUS#S_h#X2V(kh)=_xRBH+7BuglzYSpl(WXk zM)k6~F}^l`;Xwz^<4<1>HO0<+kR zQY#;mS_E~04raT?MGzL#w^!&fL+vo5Hh1Y!{%Mz;<4ME4V(Ytlg&j33GJ<3tOU5Op zV-_1rDVpk*=QPs72H<6_=)Jv-f!7!P5FDIzAi$2p**82cc~R$#qa_|sqy8~v*|KM( zMInp&;8jzFSq_)rhpfKnC>9+I(GVS9=-2jLgAZ3g9=;jq0WvwnI&g;^W-E&z7z&} zV=ieCfI=+|esa}!RLfhuHTH=?M?GQKtr&{hk9*S5^6@)B!=!1!E@}LP3TxJP(~B^> z=37Ix(nluO!+6KGn`2lEFs2Nhge!9rrfix0AAvl4kNgqv!G_$854RM&Y`wH&9G3J; z^o!vUL5GXUt1AmAKN@%H6d|cxf)t7Dy{5k&n!WycTv*eOS9l!ZhyLh)5Na z^@-WZE?QQ_bl5I&L5>ZpM?!m)gxMnY>>HmxQ++*83BnTNOeKEgQmJ5#9j^oYqbu2% z;%b3rO}|aM!EXns+dzIGjYG59Kt&5bh?rRrVdAC7r~CfKz^!Y#%&}M$r<)Pd%H0L* z%u=bSjdF+g6!DDdPT7vO8c`Smmr-G3W1LylF9TjA&F+VlmL^(|5fN=)mHccoYM=hf zAMt;DonvF1ZP=}2+qRP?jqQo;#%|mgjcu#3oiuE0tFdjgv7PL@&wls*_|6ZQ4>LEe zbDe7)>!`PK)kq5=16f~aVEf$+R)#rQh73YmY540#Ws8r26E0w3;k7|!Dt!f?O4`t)=u80@8T z*uU*nK^#{7r&iFSNgLE{p1B<{k(mxogdi42Q1LeP`-o5!Af^9os^Z3v-K7}qj+?4G zI`rZ#2lgPeyaa;w!v;{AT`#X&{j@PZ^q0P7=Q-9{pFQu1B!+|o#|!iXl$8OGKjDg> z*8y_^ad-Cj?_WdkfO|4+qjdC;YG)!7jI+YeO9Hy~ok7ly9aANhlLL&hKVk_LIisze z4(oz&fdy$7Set6AD8)(JDyM*7FT8*pf3(%}FXM?m1jtM}th7~GsBm3f6qB|Y^_AhBJuwLW!{Q#I zi@Zlo_&@@%F}$BW^*`p?Wm_)7TzxTvl4K>>;@$0?8+PkQc;}=rZS37%;6^1G{t^47 zu)C2>ipTv>roF$u{ceV2|BFSYtYy48K^ zoqI?nFkmdv@?Cy(gf#6@+JuZQMu}+~scP&A>{D1}!c*y709cI{-;_~eg^*g7;%4gl{&x^hsGF&N6e>u#&jb(I8Bx!9ec#7E(XU=tuecEMM$4!W!+3#! zMvMKMt6PU#CJdw!ROof2xt^kSj}(6g|2|A=$4P62IhI#h(BUEUua-xlB;hmeIBjdK zO$3f!I}SV-KI9BMDiiOItVSUDCU%k};2G{R`KXt7eO9hD@gGFhV z;hp^U!4FJ;FABwQL?{feh`F|kd(Q~Fo`2a|M_LEpS9hU9ynAm`4M`N6bsrWEbbmOW zTJGMNno|6nxnw8Xe;{Y*b8`WXGfd^|qdZuS1|_Z3_ckdWHbfqXL3}%`#Cw!q`0e;2 z^{Kply?PS%J?4`S=w5TmlIuA5(9x-jB{V#?c#@ouWl-=nw5CJ`Q|3OgUI`dx-PpK7 zvi14+f`-MEE5197BZP_vE%Q8b3{e)+ueF+?ezWW#o|xR-x?(Wb0ZFtB6C(D7Lz}oL zh}@-DYLXHo_daL}Gcd%<_sGv$W1YspL5 z1Vs$^6qteFh9VSzqZ<%x-y(pw7>Bz*Pl6+l1eYV+n5|N|4TLhwWYl5DDtY?1o8-KePcQ88pAEgP9 z2&R#jkz?;bb|OGKVRt`x&$oiSA|2N`DCxx41Z<6N=o3maT7Pv!uOMO$O ztG4*TFWOwo%6^Ko-o(XH5X1~kcJo?WBWw^;WDNWh!etp8jOe(^1@NaLCDk`L2xT>% zLPUAiYygGIPh8l;8!BgE0x$>YSM|Fi)gS|=+SKO(!@@#nZjN=7xKD_%I`owVo1gnA zkP4kCaKh1r_CivN*wXOxlT4wJM?Bs|NW1P66-}7XRZz0{_Fk)E1^)Rv6Sz6qSoCp#bjGEAYgp% zOw}P%OPOo-fuCL+kIqdENtgv$78uExZd` z?*uP~22L_@31Q9B(jCM>E(4$iVf65MU(6-!l%FCZep|!YdkAV9VJKKkWR!{f0tx!Y z$`t4-l2l2#xhBFnx9RXW&G;#uli+pP9ao0GL##+V$6lRIR*k6dsj&G6gF_mUaKdE` zKEv5=4*c`xjh*@ShP*&oW5Ja$>v_aZB#46fp#T~_M|GkGX+7msQe4yGC#T)`NB6_lUZ?USTtfvHKCjWcg{)zNK={TYL-P{y zMD4X+@$R3-_jXb-eOC0pZRlZ%i-e+~gaND7gPjTPM5QmlP{-E)`-#BuTpCLP?)yZI z+DeW|ZeeijLAc$lO-+MFTh|XU}D=Z<;^&$Fb$Cl7zd4E0?EqvS4;;67cWe zOZag$PegTwzU@UoKPjGXjsiFK7(9$wyg9Le2O7}r2?pQ+TxaeqCbJ^+n`~DC|5c)U z07nkTC4G17s$5VpgNq5$j=|d~Vl{N5IdLqxbUl=X7qWLdCTvQWV(cIUER`n1Si2F2 z|AhEdA%DClL=h77$=~Y1zAyik+kx3*iPKS>| zkvXyC#z;wL4dWP^qV6X_=eXv-g3n9bpSZee@C0~Q;pYtmj41SjvP)-NErrE|PQGD2 zK?W>4^3+Woxc!0ZRW_h^vsGzslR5HkYCZ8O2!i%9InkXyk#kdK4$-xs@};#eie#cW#JwztoKb z9j2`L9fu;O$<&iGz&FXi0G`ETaBKiDI$EKQiZOw$KM|1DqtqN(X>k%%HrIm+3zwDl z2?FZ8;vGdo-EY0g^AKAZD)YiGktrDeoX&T5Rg;vpcz9P*ji)tuW24x8r_TSr)aw%- zELL006Dtl%jtKN|e&2?rftAX*+zvwhYNu_6oSmHwbPGVXwYQu4MFj*c8TtvXuC2{% zZN(ks`UzWkJbOrthEM-MuVM+1fXQ+BM~ev&Tz~CGEad$|XVrdB)2= ziyL7$HT64v7mJR>RUrJSRqQ+1&gMI!Upkd5eQoJ0FV(%{6DvE~Opa(QU%_Fk76Y$o zSXxhE#qch4ZHOCU8h*tb$<%9{M6PXeD~Iod2m73c!bfKFcMTQlwlZyCaLa2-dTA$m zK024Nd9bUHM3poS8WK-48v~Q`YZc6*9^k&I5Z+<$IeW_J|NQ;AnUf`e-Uqe>EB@;5ly9^kix6bxoI0l)on{6Rn%JVUuqh7L z>${XugELsH`PnNn8r#+Dygth9-C?1Wy2<*&f3(ps_cyG4qwd}PI-H{9Ni@L(J zE+h2oPfns_e?x2$9$+KF*-YG2GjI+N7BM?{2Ds_lBm7tNEW7Cofk+&W1>Nz$WAWO) z8?A#nR+WtYFPc&+_{L9jDsya~xJu?zO|F%-w6tu!%dx|a8XCYeOkQp1F{flSG_ZkX z8NOn=jY+Q2$qBC?9O^$+kYOFdus$*6S#BsThtU5M97+p~dXIt1J1$NPiD z!FK5v7)UnRDIjsa35W|nfBt+tVDXCpT2HdueTE0A=V$?_CI4%#5#07ux3LyWq7hEa8tvQiApTR) znVC$eI1VNl1zf~vusT~ZgV$-pC~E`4eR>Ms>lL`Au?9C;zec=&^eoA?2x#!^HXe0r z-Gj+Zo4phTINThacFuy)_UG+kS4p=fKto!JBA(Q5xpu?G z&k1^aUnm1RCN_qgAVy3DYhGOow~fCz--|Yx^q!Vz@o-5qfHxY_2kri#kT#i-mbKTQ?PWu*&<6|M}$l7Lx5Z3|n#=@E|;ci38K%10SIn zu{~-2{mFCza@4-k9u|ubEd~#^hN%Pj55cKGj24LxltnDD%u5%@0@>Al*H7q0rW&mh zgI2%e&A*Avm45}s`^oTTfsui=zRGB*fV$=2;RCK(7IUouhYBH*Dk)C(&#-%!Ht-WV zB>E$T^^q}96hx;9k{A8)dr$3jxW3qnqC%|r-PpPmg-j~K`SJQhiI5{GNGK?jt*lqq z{SouwkNsP(1F6~fGH$1$EO_HvTnu?<@{~okX(9#D9*~9P8dA{R*xn`^8XlfmT+}?S zPHy6E8WLx_4fhF5f5rsV=x~fj82`?iukM2YPzzd%cI)VP72M@)O3~l@C1s@8feub# zfov2b3+3qPV)f5lz#n#}=Vg%Dj(@aSXsEx{92?w7*|_9Xczx-O%k|pVKe*!Qjb^-N z5&;AXNNZ=y4S>55qz;_O#HyUW5DWzDxLk-29s#{90{}B&u7C&y7U*w?z5d_V@;bk0AFoC5}u&+~^LR z1O)B3Vc%#QRErCUiI04LnA87R%(Gi%>yb^OXOLG9zZHWsjFae&>i3 zLg*4pd4;HZa^NZlkN5i*YwdDNwxx3~cbZO_tU!Ja)hLo&SaJ$PxDom^Ab;y2X8HEt>KpL0D+m+y*Ft#sx)QI4*(nLc+Fba3wi1EC7NROF zFNep*mN8J`;G|UoBc@H->Uy^}YI+X_yeI`wl%@XM?>y~{htGZxi+Y)__d%3B2`q|l zj;os}df96xJOMK^&VwphoJ6_eAh5rGlVDX*P>N7S@Z@mfdjogOShKUAm)bXE#7&5p zxxX^$VerGcm&b0j=XG+EkjR46Z~yK1Z{y4VhkfaFf7%P+EG9MDJs#S(vKNw`&4>+O zR+pGPv-JpK9aDK6-s3(V;~qD*-ZqxEwq6gpP5stvp(g-U#4}-r3<4I$)xKeYcSmQ$ ztPhcQ%?6ktJ`)65qgAA)F?-O5o%&Na)`RL2vk^|&8Mf0jun`B*y2mHyw;t~QV9NmY zBEs}1ccwuyj2Rns-UO?eiCU$EuAnI`;u`u%1~*W$pInL79%^-F)JAq;U0(Fj{euaG zk#c9cY-)kT)sMf;j+xd1b)0InMcN+PI&ruMcgKl|x$C?(VZVL@TX+1Rv8%4{Hk$-vTbN>(f4`YX?% zky2%uoy3YG@J&S$VkI;xL~cL*ak?I}VzerHk`RT%wghigoG~Q_9u}sAkpwQ)dJe;t z;?jU;Ly-!6AFV&G;;@8!FDsc;0iLtC7qN{Pnoe69WLhX3?QqB5u(>jb; zl&7UIU=7!TD>v^pzo2vFPH7#V$D^ncZ_cNqnGKzxRpoRKB*J1wS zn?KqnPVcTvJJ6GcgObv{Hs;TjK*{hD;Gnz^#TJgx+ar@~>R9KKD|L4NFeVUGLJn`C z-`a0&dc>{9pB?htWa3#`1OgiYL%en?r}XG4t%20=06TBfodpg#{SM)3P#odHL-STmznm2UwxYfaJ5Sr%Cr+Q~+aX`T)S|`brcs9d0JL zkMc_atYdp4?Vs;wk&LC{iE;uz6_CI%v40FmWXWUTvQEohJV-;G$0K9DTYXj;kFI}H z7Y*tMwR^-ku;vFYP(+59#P#i<^zFb8`mSafOYbVUd0v|Y`piQkc!tG z*@I2#7~*wT$RRnQ4?|}(yFuDhedzsEU05DgJ;j6Q-=Tx;i>2$UwmcOq2{vEuV=F3q z-2b)x(CL9X&kbh744WaZDamX~VeGzey1INY^-Vu~LJH$@{r~G!g@v{*2 z8$tC#z3^2n;U^E3E(DfQt=-^cgS&j+u|%I7O`DC*pW+w{ot> zDHy_}IC^;T3ATPE-|3l#^=*X6_Eb$E3ogJM_E$VUOEynZEiQE-tUpNrOptU>!-(r* zJP5Y0KgCxZvygApz}7fK7U3Td7a)e?4%#h}ks*h{tWcs+`pR+`9g^Gyc09FeNm{O* zdkDAK9y~ftdoVvBsyxAX*dcgu@V83$T*i_v%*DMw_*26zD9w|u;)6+QqI2N!1r6W} zdl3T_khBV^66H;YCDavT<8vM}a`t|c>6CCxs_r?cI$OXAP1nGK zpin&MGPuw~OI>_k8(I3O*;HTy;oYL9k>)H1TchyGj#P#ylZ_WWdqfN?6M16J!eoMz zyH9OYjFVf({q%G<9GI%DV`mdS=f~Ux$nvkO-b$U|JazaKsPF;%~Ev? zG}*e(!-mIs>(Rf#ZuejIIlo;(`*zi)hMed7wkDNSjqVRmkyaq>qoJjb?Ij4u()CCI zcur>*{O~-kSxmYsRA9YnNuYiWR7BP9hFLt|`gcO}5(^MpU-Gj=9u#A0_h&~m5 zXm`GL_tJ@@?2=}zUk>lz2^trKY3~PCLZ^A)gE*lD zdY|*eUNd?h5!x9x=bm9B`zXQb&RONtdHh)z{)Wpo?ozBJ{=N$rL!xX=R!bm{z(gol zWGG7tq8c!|z{1oEXM@Kl$T%4OB4?sOshyG+yzgNod0NWxbhCSMO;SKkgK>8UF(rh& ze&gnE98tn+hrq>T6`>#6K`zkzf#ln8goJW$w$l*LG+qvU)q32$+JQvPbUv z`OD`a^j}{E{4f0HW66jdD3a?p2wa78;<>ZB#pY@a)vE%zPHQZguL=mL8yjpeV`(KSX-ai!olq-QPu>0R< zvR%-s2x$wFnNGa;;~>JE?`PlAxc}cFIT|;0u6LPidl@HEF zz6YOVQwE9jpv-R~1}kV@V@c43=Ejk(vtBKGoM||Ze}YYEHdJ5GQV$}%ewtzD3eBl= zyp4|Q#ceYaljqBHF?nIZVq00XS|2*CpH@S;P&jF^uT}Vd2)%@;846$EGm-g4ozn1&y zte!Z7YHxdo8|+Ww&2SxyC%PhSEcX|C!q?y9EJokgypa?$!E45$DI9wERj zz1)Ayd@Ms$x9K23F}kn-9)#uaJ`IX!jyz$jwd66H?M-`#hB-KEog3v>y_=g{nU6Y_ z7ya!+rTR-EbZjoNz2k&|li}gL;WgK$@&0@=F&Qx^!GEz&MD(MKTRMc#KAvOkn%rFZ zzC%n%uI@DJi***bi(O}%ws(o)Wi3GJRYK)5`@$Rc=4fgdXz2?WCiNo%D(4LU-I7k* zJps<$HDBr=xH7NgT!4Vl5d<4^hcJ3Nm7>4fSvd-BdTj%VQ(DUKW?7Nc~AcSrAOfX2$g;ST!O$)<^B-WbAV z3HpH52y=Nb6&Vu^rJiTP)CbAL4C2E9Za`DhI#WB6-Z>Pr;Ym*q2ph#E&iEspRUWEJ z?JS~XvOL5g?jC}G6PK@c@%9Z=l=OJcCpW+mBcpLF$&MmtcPwFQ>s6)G5u2Cf3-nYh ztg-6K2|k(eoql0N9UxJgDQFS*f_83ffZZf?go%NFu#&>_qkkj#VBClZFUk`o6m9m= zIQ27EGaDHdN)=-d*l3Tp@2`h^i^LQ~Z!113AvNF_UHH}3{=1pj3EVge5c=sgVuqTI z2HdjNov#Ln$AV$1-m_e_vhhCeTY;gZ?!1)mdTxi_4W(>q)3@?O}2Aaqv(PBZSNv!5uP^ZJFJ)2&R@yX|fmgUv6FAAjx(A*hTrAv}? zZ=c>I&kwr(24sRHd-kX@M>%ifP}^Cl%|{A+!@&OS`}k2}<)9&qAvz z;yIBcJ$F*=cETfiEaJ{aWVj{iNfnWAcZz-5w^6lEztHLT?LRype zXA4>wCoYHbZ_;9nVKmOqizb-=w#msSjAuo^+zZQOhC8DwNIXP_x%{mQc)K{YL{*}v zRxC0pM&k#IK8-Pd(>kzvY3yNK)#k8G|%~p)+G!FsWUTcsx+iS!^>?I(g>!+lL@0ih2*x1-* zRaN_rRuqVgZ9u3GAbqzSX4qWL%CYS1gpqy~k%Z@UIi7Ca($&>f*Z@>?-XmXOk4q!P zX9;x_MHU}^8X^UHontNXF_h75qI&Z}RwkLMpR3X=C9rYgqq4JLDO{|Bcds^5niQ8_ zHu>cyCQ(QVDfyAPN!?Lk;U>mEvf^E7GAmYXgB!nM5g?|kkn?0=me~n-QCLOhE1r+a z{a%3=?t8i*xmwAWv2&tBt5w1^ekC)GR-~TUP#b$9A~1G!$!L zy}rwUPeCW&=QS5u8xEa7jStUndY!0%;Y%n^LzCBG!AA6Hk^jsb=uy0+)+;TK*O*eL-5DSGi5tg_%4UAExBzX?THu{UIH+SOq-Ik>f zJ0FP$E>4_X4ZT-4saaF8>e_U)w;Rx92#beI@uSR5#vY`{QKS6uiPXKtv>F8iXV9Lh zhuI!G(6kUX5t@Fd(BeCa&_XPLmLRxZl7TTNs*CewDi)!KIWi)64?HvSt-y2{wmnH5 z2Kz{_x(&QBM;2?gGVI>O&qAv2&O$QOB*1WYU3u@(0K!G+thx$$g&9^GE^rB-g5#&BHR5<|&y))`O@Pbmq61)dY(&;`rD)!H z{^8HbRAi=1-$g>h0DKBIB&0}B4KN(7l;F%XStGj%-PmjZoCP05x#~{zmHD~3p!08g z-=Wjd!0~U6bX|T^pkrHzgidd6k|2(FocwG?*uWku5KTzrDlZ-zr4&+7Dg@NwwZ zJw8{Skx6{?a6{8`v^&dR;l0gtp825d48PiqlT@ zPRbFip&40pZR-B4qQ3@g`b8EKaS%K|vo1m@1e+%l#F7*g1+mV>{7AYsL}yx*V8>LR z{KjJTSz995CQXMF`tc(w=o*=;3=?L7D+ZmthHpP-Tl1=aDqg*t?2>RBvFE0K0UM& zbi|eLA>UO{aAsN%Rct}IwKs3l*&ew&$Xro=R*p?ZIDgDFjhr^QYez)-;W;(|-O>cj z7yVB}1s)1*=qL|`aTXdR?p*E3{!Gyc3>R%|HgUhPvx!H+C8pw@lqW_rD@dN9TP{LY zAFdOVxNfRgH?=0f$=4#JWXz&K_Lq2!l1^ciM4*UepT|$ApFTNkSP@3Lfbnv>cIYob zG*mwxJW63aMWVi6CN)}Lb+w{;yI^g-D$u3^V@4=OUonz{b~9W+P!fma*!~F@hY3QF z7PSqCnX~P?4j*C`{XFXwi9MYA0)2FcrlOjU_PN4Y&wNX$$F&+_hqn~<7|x3Os*@!)$b+16|ABh_erV{&cG@>)%l>E)GXK5dILaTP zVPQLN?YvVz=z>}wT4}5(gj(SQAGd=ZXX1Q;m@oPZS>db$aBkTHRL$tO_Xs6#h<`O5 zNEbIiA^T2s`+4LWb0F0ayFB>E>QYx|jo;fz$!er>w9#j{ALAkB> z`@8SyR=4op%Rh(s|MF4!hGi}?1gKYAJM-mg@l^0Oi&gY4?sQRl%uB6X;`#CAFHk|f z&fV=B=h39?<>mCLlBPod5uDjm@1Gs_fB7%~iF$MgV@+Th1T<)1`x^4kPP<%hKHj=U z;(44;bQh11UtfQ{e&O4_HSfc0>%Q|gcQ@?!I$Rfp4=5h}?{6=xHj7NJx23`o%z)lO z_D}0irhn@WN4g^g^Sx5(@R;lFwW!%cVEj&y(TKufRZ8}+N#HxhpN?hDn9AJaD&>)& zh#4Hq4BJZsRdPmP^@vx`J=#`%{>U12f_B$*3!FfaU2L{Y6NPy`|7L zW=Uq~ZK{dBIu5Ccagt*aq^^lk?GEa52!2)b^LM$xc=^!Xkq}J|Opo#CO8o?qdu5tk z<1NJS*wVl3ps`^te$tT%8-3`c8NY00%oknT4psRtA(lm)NT{0e2x7}zlu8czux*56o_INR=6=lGa*cbC zMTciRE;F}7Gz(sRiNdzbzzrPHu}LGeuGZZ8rzYU3S@Eq-b^@TQuXX3PDcm7#3knBooOwUP6Mf&~ z+*sp!-ISXCY=cs@d)%~Cw>N57fM->Kv*sCjHZxM(F1T%#5t^FvL%azeRbiO@~>+b-C70|8*759>}o+1#J5WF5&Rm++srKuX2Y_`)Ou zacf=OwPfLe^R^S_f3Rll6HIIaaq<4vEiW%Gg^eSi_2|gArlv+ph?fZES99}`*$R+P zIO^iDv9@-)#sjgQv*z&yKELHkNtgSV(1!>AAji;#4cn8TYr_0fLwEJWJU(qk?H2J? zJ#thXL{W{KG>v5$*`og|w?naYTPQJb^AJCrCo9PUZb~>9BgRO_4>xxJG1#0NWoa`K z{irJWL}CyLDyX5(`#AOhgFQ#7ctihzw%#mIfyk$xq+#)ABo9172I3cYX1 z+Ept5exzFheshT9))&5pJinOodmloM?;hjw_ZGxV?bA#6*%@*!3{E$4Dj86X=ncC~ z%%n#;@Ng2wJ=6tQR%0N%9>An9mA>F#tr2^0jrz|n(4yqKJ|^yw&%mJ(VNycRd6Bt7 zTnZtUQ4ZPZrb2YT1>L49g#w!^w3rHIEPM@(1wB)>x;OOg#u}h(?p!Hgp}XHTo5h6m zdPxZ^A8fmQzd^toxO9eHCaD@$ORWbJ|?-^3ld%~S=%@C z^TNhakh|tx?nHci3X7rLrJDN%*YYtOI$*7s19 z=HYpT4exw5xIeGnOv?;pxM=P}IWXf@qKBPF7{q-3O=DHod8*n9$Z$-)^kLLMd7+}=TP5X2Lit-+V{ek#(g8ds8s&7i0&<+a7gqufd4RjD<^ zU_!%wo))yBa50=BUSlkoS1U?s68?G*1B;?TXrIc2A7iu-4};IgubKQmK(egMy&4Z`wqm34i|oFuVL2Xvn0X4{^b!p;y8)ZU@+_4EsIC9`XyO^!J587L%={P!#?l*5UaEYtL{WG+BUpDdnes47v|PVcwrhu0n)Zt z2q=<)qIr8%pLr|==-ev)UO>c)(it|jSO@sP&UGZgWC`GZXh6LeTh+EPTb(`Qzr%Yl z>z6#PZNde=C9RRr9KOFruD_)X`Knlk%jW^7JMz z%Yd6YVx(4c3&Wf{$|apkQBtsTo~iSK?b~g+qeij+4$a8D9uTVCfH>QnXnfe&3qkYT zC$#5k(fsu|*}-H91q%<-5-!f(A1xH%vWtX&<>Ket^Q%YY&-(a=SuE$Y0cCvVsS)kLwrL`K0t zSj~aZHu;bCl|H@+%t5H=G!4u!JRn9{Pt(zZ% zpj;{w@54)upch&M$f%*%H~oCMPW<5=WTra7w7ob*rDvBi(X=>%=XQT=kCvtrRO0lHB$WVF*iNhnOjv#xloEb8T4(MCD&bL^iUK|6B8Qj5wqeO;h+^ zb0Yf9Aal^m-&tYL^6 zN_o)Lql>e7Ad!fL{qWDjwLGT+rvul}^&C*mv_&N(m;;f@h*r)TYu8Q?JmV!(iFp-* zUHCH5Bce^s%-YY-d_SzBW6wc$X9QR&ygx<8IgHjadmPcfes$c<`$*~rukIqSj8V!e zVp_fz++I;Cbth$gyw=}>JT%B{+n7dkI3{!0ZQ;p?>VV^p4F7@^eF~v?$em}Jr`j#n zMoA#*N;YbwbCrHJVx%jQRpXGs6M9Gr6Nu^G!1gvwHrBWy3{=d1`^M}g_Tz7c{NvJE zHPT5iX&6!;&In&ekjNJJp4(5Y+?U4Llvkd2j~+6xo$Cik!FHf{D(qJTS}g}h8&Qk7 zq##!gek}BjDhYsAz=O8LTBYtK{BtgMq7~iEp-#yvO}RmaQn35=e$Y0BT?@3BY&~sI zA9>{ol5loZ?5jxh{kWnGRD~;Nc!o6o)q?0jl*o2iUfo-vd(qcq_#v>vb(L^A#Nr#u zFZ_I@*RMvNj)xzwXyncd4;#Ipo1nEtK<5;1f43o%`)vt30+i4SvZxGWFQM6x2A3BqjwfPuh#gN_8VbLUxSx5iav z*e&#j597=LV1POMZF%2J=;eZ_OU5)~V5Hb##C_nKT_59&?anymjpt_eowo1Okv$6i zu=KkIWEpVzIDq;?vf#=L8)fsUtrF4y*TU}RSC7`F$%~ri=BtWUV4U|s27teWdZk{81Ts`Kh^Nv& zB#kWL@(G1PA|u<%A5zMq!!M(ZYH@u(_6H{9kWjnv5oaCRE%M94gASJT5Pvm-n;6o` zXwZ(ML7s8jL8ab8j%%e=ib;-2eb~Rj0JaTq)z_j3VDS%V^Fx)~$Lh;bpPEZ)NupK^M#Es8$eHCiq1WDY)7u!yG$_VK0}=7EWy-gt53;4)yn@dA zKy&zN@9EQ6Y#5?J^npQ+Uz3I3Ycx&P5#&S~@5n{fZ@ZRA7W+frNrCG=1%x*|sD%gR z_}MIoNsNe_)A>|AnBuAhLLmSL+jukL4?#25!>B=GGj43k9s(F(#(Lf@X=;;?{$5>zy-VdLA$^qp{t9DPRn z4!Jz)w?Z!Z%Yrah#;^4Dp^TSpbx9D~pA|8g9~d>px`%tb09>$yFn-4Unup}&Maih5 zV(qZd^ZYgVWZ28=a(T)(ezD&68*0hVB^J=*^+Q+e_VSlgm&StquioR>7aq8W`c2HV z<1`E!2OO)>ks{{i)Lgd9{hhLerL^jvxi)40m$582-n@FSW4 z68RHdxRJ)!g`Up1bjhQb2n3YVp{Mz<_ zmo8)hZ`y6{r!L$Kc0_k4dIYZDWm3Z+GB-V@jNKM|1<}tCM7~2U`Y#hAdx4313;9N$ z-Sjk5sd#8AAyoo$qROn#Z^Eyu?~jv|1IvY9I0qy0B_5o;;!29#KbV6%B8Jf_ESd^R zI32h3=m}4FLoUlr+nN_@Iv|*30@M;saHW{wHu$bE{T{B-AH^cpvPe6vz|Re=CTicV z>R3S%=B(P18jbHo%40c8&yt_fq+cg-C8#x*hG}WkuIk$L>Z}7ZN#{tXJMNBz`}yDh z&UyQ?1G7eXb~~%dLr)}NbUsLoAG`sMHIP-d&#w}7a;*5o#1b3?F&YFv>E|Mp5~QKR zP)S3#YJ?SsHB=&=Y!*#`9l)zVE|r*u@9mNw#Kkf6@NU%l40p59A6IU+WgxI0xlV)F z^7Ezh@jHMDiLCqyZN@94wXGTin2EgUA=ntKXW{56#zK0*-yppEs>-noY=Hv}f9_M` zxgBMvU>bv$DSL&>reA{c=d*(~y>GvcJAVwm4qiFR-#!dMtWjU(Oa&+>n$m!hi7b{A z4qj(S-)1Dh|7-C2H#-Eo3FV^xLuO39z5QdLHqle5q9?dEdLEj-l)d-7CcPITjYx|k zU21<(3y}N)sSEsWB#H(hpQ@}qY%CFy5ET$A$w3@-x`3BINTI2}hOgFH*>>MqJeRGs zu{D2UI^CZP+{y1cNTF2)yy^*Rn=}^oYf)h(qC-Rg22qPtGL9W@fpuc96$2S^v{-5q z(L5sz=Y)s`B^p9@ZnA7KEe=V(IZv4e!`p{p$wRjTK2CfCz`T1iat^0_FJFtv8k^X| zRL~d!$|DX)x7#LZ>-?M&5QXIWX-n?)RClu1fhz6Q$Wfp9n+kod<7^$0CHRSH4Sqt8 z;iZ6K-z9I4R5;C%csQms-Gf+tI;mgQ+jSQN-5-MFMx(2V-UK}0CAEsk&$U+$q+BE< zJvr6r=UlqeNM}gCSiF8+-02qkCzpf75l2xGvyK}Pr7A}kN-ghqq1ekyiFoz;W7Wb} z&hyW(7}XCej8_|&F%tNaln7uRwg^>pRU_eIK_)vwsfp<%KfZ|!fp`e`wG7U-TMA4X z_g4w)UP4M)7jwVp6+aBHW-YfO-z?U)8AwuL<|^o1*U^}NvNa*>``TFxQqV93$M+QA zY)osgHQ#&z6)Q!bWefWWp^ylKJA4uDsRwNJKuj1d<=7Bd<%-k}`ogu)qsbs z<|_KG{Vs<#gl*4#fMZq`o&0hz3^KWfx;zH~4|y*+f1dQZeEw;?nT+39 zRg3DvKy=z`we{6^>e(g<>QhSs4Mxgd4{ZHr>4;BVz2zWi%F%dpSapq$yp)pix;0Q{ z0d=CKKC=iCRiq@_Bs^IZ!<|Dk9(~YNd&SxyXL9+pd=IblbsQWT zFC>U19nNvhVs9%fSy(?C7f?`{a9+N24II&C!$Ycjm`txJC&nisHtHuiXf(=wm|dn# z?*A$}G(cT{!`?3Mj<#Pbae5MOdjtFdxyTc8{*!j)Yj?yWT5)9q01Ve>!xX59R0xB0 zaEjlN*L06*>sN2rD(2+9Kui%rettpH=r#V0Cm8Bvtk&PQgD2*G*HM5pjCT4Yv?QL& z*}o^RgH-@#_B>P`Q4Z41tA&|GuL+91-A&v@Tz0XlOjn3BS!%JtS4_07M!1>Xu!E+uPf1psw#rrzhvP zmK`8)-(1+;O*#e8_*$2eq*LElrhG$Jby&5N!(}xpExLduu*h8@_j1gi>hj{*6v%ca zQy*t!oplsjQX+8>6y!dTYzHE!G~}feGHhA(n5v1Qksy4PffJdJfwmIsI@FH)#os9t+V}sBSaV~tE8k|^Ml>BaJWRXAgYKUO&KA?UvR+M%&bH#H6;T6 zc~{kvLX^8t)){Q>;7BMe;nk9^x=3L-Fp zB^ra8kbujpN3PmwN=RLUaj%ClovGrKAR5EHouttV%w4L3f@$OH&iM>Hd6k1%;RB8w zMWC(udP78?@Dd3BC)I%U%2i0WQ~-)KM$4(spHDv!3e5rhI9(}_$J-R(4UP$Wu6sHL z3+=EXvMCH~*I`E)f$NX8n~m(a4U^5xFx%?yA&(^4zw6X|d*0P9@CR$s-I z55|mBaeoQ?qRKyL>Y%QCv#1wvxJWy*lz?~2v+525Yq$|^&TUI4y%m{}?mYg7#E%8n zxV!ZRABS?2ag?d+@EJgyj>Qe{^#c8tCWBW4MVNvnziZ(}(e?($^%a~E&tEd9jE>a0 z`+EMMlv!V8g=rO9pT1~MH5m%WKAkKU7Nn-sM}#vSgen2_&VV_4s!h!$0v0_$tB)Wc z@TcTkQj!PjCEIqPK^`e9D__WtR!ZjH+v^E`Kfz>gU{|u=dA5n7AQM;aC#Q=Y*!y0e z4Y>Tx3FEJpP2+ZI-v8E^7%q?hU>P=iKQR3ID+`FG?DUhqf4)Ck!+p`Eg5PqU64XBb zq}^Mk-Eg@Z#j+a!OVU%V-);iiXXyKMuzVn5&jIDNJ!PJE!v#X;XY zn_{q=bk4X2%mu{^SFC{_@lD#bK)wk-%!wKv9hiITVu*+qx)tgnV|Gn%b>%bcpi_zl~dap`XPIhrMpvCq?jF`GUPOZQgbW4a7CBD!9T5g#D zk!}-1F%VqOP%?m1cA**YviU27z0}iA+7m5~L;lQR`T$a1Vc;SPZ^Z3AW zyxH}(Bs|>5SQD@@Xcu;?$pp#9h69h+T&H`&&#;}{6QTcXyfSyhBBpTjtK%VJOv%-i zQ%6@9sQmRD@Yn%bgNEKdm-2T%$MOGWTD9a_HSm%?)3a=r{gP)~ifgL!P5oiImK;XQ zGu$!Jl&GjRAP%_!)X zmWO0Bk2T1SDB?Fp!e=V@GCb7gw%r?MOxObQt3<3r7}o0gegF@+*vAr%-UoAP~|1StjCo`$o#eG?UAv6T(9N z;{)%S!D5i$?VYsb^)U(iKo94%Py`TAXl<94wivTU*6ag}VVQjf0wh9;(}YlQ7kFV&{_@DfU+&ne4UZf8*4 zN+D^pZ`w|!bhe@rI8k|U07}GzxTg} zYUUjr<_~=8`g0=WfvwP>gEZUpZ;=ZQexRi?ag7Ir+?iHGf)lIS6z~y5W+?Cy6tK*D zVqbg0p=T}8hYn>tT7JU#;;VBC{EJdTd-)2hzVvOu4Od)sa&D(fmVG6g;Os=@s3rB5 ztys&L4{zIvk76%3BH@E2f$!MTi~3FZzY0Gv%1})vDGQf(wJm@}bUoQ1Hjm9auL#gC4aE#Psb>{T(yi zM#Rrb+2U%^jME9y$#AoBNavAtvP}xD*Zc0jyE>KC89B251vTJS4pfFMt#I3=vU7z# z5oTEKnYD=*%g>36+n{#6KcD;uu$f{ZZ9Q~9Y{yHHq+hdn=#aZEoAO23pYq~5Ch5hzs=}*pfX?L1G zLo)dofgTe5R;o>SNA;EYwH)tTFx>(sMXQ-R1E2<+%Ha=PE)*Qq^hBY;Ti<2Hq^K+{ z>y|2`w#%W5ox%Qe5QrWB`H1+Cy#D$j5PpazU6{ho=}XveQjm#@VOOI3=t$^WOp;oj zHATq%n`tT0bf23n3w)_ebB}2aEmloMf+z8}*`L%a>BGzR+mX`*jF8_07euJ+gGX`I z{ybzolKcYsy_Hkq{ZIqN3?P1cSBBnH{^uUgAX8fN7rODf7!vDkXi|KU)f-0k7cRJ4 zsDo$RuF3_Ve-ZtL(;E?03eyL4w3l-*6S0uIaxg3kFJ^X0B~fJ(1~FzEO|oIBWGVl= z^a;|B|F%~@*vwNE1%`T}c1kwr@Fo0mKX4KI+g>Qej+9Bbh9-02J9c2?$|=JbxQ?5B z_;6gAwu(rn4o|6ZWrC{f}7# zCw78)=2Fiu8E^EQA>{!1fs0M4KnA#uw8aJ6H08V{~j?unO zi^nfmag9b}D8B$Ydi(FKP_8jyrvfbBFnh5I@qJ$N?v|Cl6SbCR9ERq)6XYPL*ab+* zi|&v)6*xOIB~xSA&DV&Nuf$9R@h7D%=qYExsqwSwCXbtQxI*;-TG-re1u@ySw^wl)<8hIX#* zRo);EmSs>jLd#vKmkAynD!ZPuqg{WM{fP$vV< zMsA5h+@-Ig?jf*}q3lc?ed4S5*r_S96v;4Wg;rDkL9g?CS#4i2P*u|zXs$RHUs20- z_nFiQGBa`F6T_^OK$g5m%S1|PPcm8V;#~!+@jWna)tJkLxD$3Q6;M%)smfq}=FKmS zG7^{IF0f!!9Hkl-W6i2lMur{MQRFZ?@95nRnefFP!_7pg9+M4$f)F3^p*dz(FN-xlGiwu(l+)_WqJEr9xh-;fTYxR7gNv8VIU3(rE z76@o{$e{c*Vr1zAmGV_;S8#*U$%EuJ?14Js4trm(@F_cuCXUB{yton9eSdw->ifQ| z4}Tt~n|D5SO2}ul_S_Fe*EX1fVnZbrB&r~6wq7i+WOBbdUi8>cw{*NT!cc>x{!&nB zb=L^YgezZZee>nf(5MNXNYqJ^N?^!;4;;kzeWnPKlFBQ?t=40px{ngs>b*Keal z;huyNwE@i7h;n@Ct77`xr~2l{EkNn@{@(y}gz~vDc=#qYBfI^gx?(1lb%`ulz zjHN+-hp4%1nN!~T22#F+ns^vg1TqXdF(Mfoe#9H2U##L`Rs zf+2~MX=G?Y0W*Uv8pxz)DDGK2xYZIi$+Tk7(g9IIL#?@<8%{~iQ2yr=3*ymd8%6mg zl#!WK>l^W1H9DV;6rkT0;Y;J7tu7rehB~xKDZJ!@7BDUzF-?pSwcR*c3pUfxqHDVN zj8Q*14Goa;#0ga9ThN5WOIr5XLCx!>^|&WVVao>e9|aMjicM005@;MM{e=h46%(X| zlcZ$DMR&}k!|3YkUF9cmKNAqrO>2GlN<3buDfuCqu5;QhN#+ClY=Jl!1RGD_p+&IV5EzoEc#(` zmm)l4k;3&PqO{gYaEt*v>LP%qZa43gr=zoB9Jnvne^u7g_A?@L{u}}BYfjm`qW9M? z_kyLILYX*mtGI!HCn_bNZHyCN#DyClZ4!N(K03C=9s1%2#h^> z4J!JEl0SjFYBaNsUb(?JUfm^(!{V3dP;8ZAK0+3RQD$-^ai2@1MTtCbe*B19Vq)rn59&pEOXcfi0vC`)C;a! z1@lkBzHofge*YKApCJ@f%JnPKTbqSd5cT#{eDL?Q$XH{0O-_X%Y^8_heTtOY0EZm` z?CUf+K9A~QwK5Mz?ooc^Eh^ctEV*WiB3px$SU((|Sc>fKhbnTj4~oZ$Wf@pa32qaB zJH6Dd2b%Rb%0<7KscER=wDT>wol^d7nQpi>s&BJC=0A@U^g=pAr=gkv70 zw@@~I3JW0h;eUJKp$iDlK}Xnc=Td?ue?07WINrQ(ac|zKUuwT4O_U8TO}M$t7S{5= zeBnubLj?rZm1W25yp8%ud+$~IJ#Kc34GeLb1qLLN6^>LDxi(C+h!P1g5kW$(4|grTs%#B=GYf8+ml`b#QK z-_fWeFMO%j6P8p}#RAxR>bxJ$E15JIloBX7xVS9;=ed37^&0?ep7)f%P~bE19s2&h$bRPn=9qZDqBC*3 zIScofs0Q|m4YxFVag3latA}q?;5M2MN?KQR4L?2M6~0ioXcau~_DlX>as0ycgA?_#z{bg0LAE)As&C+bKX2P;-I{k3SFFDVvI<)9aP-FX-X4%{wH_4o2!FD8-y z3<`>0S%3{_+)H+WJR9w0V$f-XXTpmmz{cX^Z#~^`7ju7tzF!yf=nl&v`@8K)Nm=gCUrrYeNn!;zIWGiN2E?|4>0E=gbLp6A4rAR!=+idr@( zz~F_CgNe8}vy%1Iu6h40wA77ko`;Fi^o?}BhnyRtHpsp5a$e=+X4 ze5q$9K`KU<79nby5-Sv(inxL1COy<21Jqb&<(;I?DTA^}40e`r)(QF&@MIGSS$L6e z703EY&{ZT;<(heW2m0)| zc&Qos2lZ|5U?Wp$&vIL8ArFYyv(oQ&KXxqKv(ndR-_cv0u6Mo?v(WR}uDKXayu7|^ zBquFcb}C3zG}C$#H1xS2;M$l&@ZFtC8~palTJYe0%cFdZ=45yP_KR*7%{Zv`Vd~Z!d^96-H0nV(EVOq_G1v+0@>%#VICP;l&IhvEPPSadT z-Mmb9n21GmSg~yRb+lhyTlBlGi1ikOoo+^F7LTP2H!SE6tm(KM{0Jy+?}mPfdZy~) zc>Z)-{W`7IC~qWvkib_kx7iMi>)y8tfOzDe2}sbkquShjS3=-!@9k9#w=AA~s$QTG zdBSCe{m;>1-s+|a9M*g~WWjAQ0qf>eqfmd0V1fm#ZM+5Qlaqg`sxP`Er^coRhl&KI zU9>$tcZ1i~%Hs&aA95}?k&sUZdk_4{?DUvY&tCRUY%rBa<^<~xfeDXA#+G%=r}uE7 z*ZlL=otV$dR>!Lyejwo=PJA2XP6;`Pc@b&K(Qm=5ZkadV$}CH6*Oe+4aS&zw--=w0 zeCN1D4?z9fj$>yQFhWIvJhacJu|;^MH6d7&`pV>+h6D{o_#Pqje#{2zQ8+)EU%cE_v&Sk* z69Lgv_$~P(3rcbZzfCI^z;wy!P2KTwK7nz#Rp4Sv&8F|YW5jE-iw<&Kg*LLT>kH2# zZr@F-_$%Yo9yQ*;I&HMkKoj~3UR+(}ujv9|lePvnXXAZSt&1%q?#e0wK~D7))OKy* z&jjoi(XW0zZs*ayDEU1-hQKVzY!a<1tiTnF7#?c)?#bUbi^BHhOCWxo$N2cd zGQmsM50<~0e=btT6+Gxb6*Xciv2-|?pG~D>N6c0pVm^q!`uQE79w|Fd(>w8ODQkNs z(v4A%oyD*V;?sck>`TVhM`OX0S3L-0Cnw{ngXfjR?8BcLkjVtf%V8gKj^)wy#Drnv zyyyJx4*{?b90@r@O@PXopRsz)B0nwofbqSL&fKv;v=l zyQQ+0)PU&93IfY2J@AlA3p9SIrPQ?nEvd-#9$V~S05WM}f|Dp6J>f*VbcS~^$1}Rz zV8uB9+T0S~-}|ZVl?sT0h-m&1owj}RxyQn}4MMG%&6DMy74C;^>Wp4ilZtnbm`b*_ z)@z5>#9ZbfF}XT5P=s`Q(#G}ph=0mIc|;3PRSWU8K1Byh)2v;E(nXqWG1#L$ik zN#DK~kvRXmsW5yy&YSlEjw~R^lnOh`DR`kn&g%uk=H<3Y?!iy|`LJKb&a_<@9yCaK znEL*%ZgnJ9cBaW?(0)r&)+`hHXQ%8Ja@<<(^m0n_Js>w(rnXAv%1O<%-27RU5pr{R zBcYRv?)a!qZ=bP6V~UG~1%c;uOscrfS!J!boa5fSM4_rnr><)Lci3lAp8g$<(Y}!K zltsA(1E*R<2}{iu(cZW$rjl|mXMdPHVVWW?uBMZ=WJaC(I)&bu87XfsJ;g}^!xn1n z!u*WnxSNa~O{e6vbcV7E@D{C|2dih>?Z8l5X1M1dIAq~BP-usq@S6(L+K-qhVWg2eZ=$eRWmk;YcgrZ}w} z!TuFgfqi%Zc7ADv zvi!axg0m8yL&zr#n~2Q==J3_{cAUShV*Br z3T4Mw!(29^67JF7%}2AEo3dq0*g4LYS(S*CsAJk2ZIaAACakyY%;MDi5(k`n(`NND z>T^W|!CPA=Zq|DG=|gDD%PTrHo%T1K4soxa8t41Kf=)9rICJ}yDi3a>m3o$a4^$-d z>c1~nU590@p0`KG6?iq)p8Dc4kU(ukJv~am3#?co76`(6tv4?a%g~B%3Wsw7x4#rk z*+q^=^Qc*K3#u}Xp)rmZqkPD!jC>}(3r*YpqU*EgRpI>@0Dcjho2zmt9oneTGuAQO zM;31oWT7EKL*BUDwy?U(MueSQ4&>!qw(bwxE3d3<+@7t~4j0?3 zce;CU8E#wOq;46eA10&bgh=0a@!E47Ftj7Q2jk#pY94GD15H>g{~C|G@{lU*evBO5 zreUbYKd4|O8F&94JH7uKoL9 zR9g(%U+t|$WU33;|8hA>aEZ1yNvsM6V-zvE>x4;t!swHjFi#)`p! zcNyp+wNeIC*y&`o%D=$2lcX;l|pZZ97nihoOWc2YB#pKs8 zgnwp(s;%TV?5$D>5AB)mBI4%HyIL$myA=HaA5v1G8L7EUOq;6cSY-Ui7q^Qv?%T@5 z@emb$;lNqausLj%o2324N&KcE9D?WQGR|9;uF#kEv!yz<<1I4JvC2g(>z4a>)$@oY z6c9{bwCh?IzOuhR1`#%BM2K8Ujyxe`-m86aI-B*f82nS-`St4S{0?65Pt{mLGg83-e6{n|Ch7b|V| ziK0XOI)I`3Z^qdJ3^Zt;sCot<{Vn%_=r0#mCx9c`!jFaDgzKvF;dPe9i)>WK7j zJ5wqh$j<34>N{O{`BG^%=^o*mJ(0kSY+<1cN0juCdnxwoXLMHQg_?e1uT4$<3K*<1 z4Yd}g-p36$WVu^oxd6ZX6B$j*QrPdZh1Ejd;VD}#IEk@na`%o61TnUtUZbM*bJl|q zl7=;38JS>Nx#6*$vPkdyR`7f|-uZ{KnfjU5evW61Bu9*rvrXVa`Z7TSe#9_)^l}!% zRe0-pgpWy#62DU$KVo=rd@b?~r@BRt5evF!E+qxjldTlk$9{G&&M7{ z85)9MC8F_I6T@C|)&8FS@ ze^9zg2q8%^Jhr)9!py;aXgb|!b6vP{{ufVJ8|19{sVc@#J^3dL_k|Sj?>Z%qAKlVm zUk@XX2*WOF0j7EJ(Vg>s1vd^s02fX*70*vt(s0Y|Z2hUzr<-DUyKO9MM~N_?SGY;^ zz$Azt6J8vW4U=6HNgt7RWK5H1e8))=l2vwHktf|&WhF?ktcTsRt=p|^;&YoU=CU~@ z&3JYmDzLAj$Yhz_ta*YJ%I(h&XDm|Ao6u&b&6NBiuE0CBYC4pWxu~arF3C?N91Khk zvF-$ib+s&xUbt7-C`o#CE>G(GO7~6CX&E9}ZuDAZdeYn3%!DV(oVV)ZmQ@2B=G@%e zNXqv`Lr`e%G_=GnZFoP<>V$V8LMMDEB(48G8Ixgx9j!k>% z{E@T=L)!R6@q#i7#X&8TI@%|}zkdE6U2EVfW{btOc4cxYKjq@$LR)*fM%TV`66&$5QsLS&M`v%)enQx-Y1EtDI`@%inq3w}aPn=#(kReZTkAID0+QXv{ zw3(TjU15{cexL4J;E_EF`l2Z-azTM36mV-u&erbA+uJot|5B@JWpD@hX#8_4>k#@L z=4{?UJ0c>&zB1ic6Gl&@#-aqrgYzYv=(>G!KVf-Kz7fQRC_{sf(p_7=9AdUG_+k60 zw)Gz#1Oc$2kx#gSe|dovx^j_YFEPe3`_;IGKPE5{IzXP)7+$g=4Cwod zH0W2AtD&1utIhxq`QqZ@CQjYjkyTz@-rQx=k62dYklEg$S=Qoyw(@yiLb!cKwt3%wc8)3=k)O;HAAKwH@{j9?#x!%ce<>o&sF{`P6(tH z2n?F<*7kawpW9!?O4W5rb=kEn&ZtYbCOB<0ZF0FNRvBJexCc_|qsEKO3T~JWp8-Ic z>;++Dq;&0SX{-q&E)e;cy=ZfdF zo{tjmewxT=TkrABU;Kp{5rsCXY+pZ^9b|d&E5tE^r!%?x%smZdK^*%4JwZoad9pB7 zO8XN2>b{T8ptsQC?yt1PBCQs=8fCU=yDn$|3J$%){R9Rc6ycm&<7?l@LPK&Qa3gt^ z5PeVBp0Z7=0ZI&ZO(cXB{Aff@za^v7d7%&=f`G1$$T9U|`1`iU4i)Uv z#r2ch*o8y#GN0{t6sS0kG-v;;V33oN;$R-;e~CY+X!KC5=*A)byhjxAxnX&->ZJJN zrTKO}wpffQe&3IuFarX+z&$sf4{6`DwmXDa=+!Ij&Ht8x5glIy=eTZUC(iUGGY`W z8rTKNe7|+y-Nj|8VflksZuf49wuG}ru6xeME>SI82T`x zA=M`kXy(QL(_#KI>n#%Q)^l8{)OHsFX4X4U*l7C7zPnQK$c1;;mFMSPA>zFyESbIj z7gtWSY6rcJqM`mt((9L&J9inrE$MCtg+jHlAHa>-d3bpsLQ5O<0L3}G*(P`;WEEDB z&@VbxHpj+jl-cS2^J72Y2q#Xe9l5<^V!WuCi81MWvVxv7bdi)4q;`!y}iUg;dM=?`B!wC!A+x3Gh{c36D zq4!>bef%7oRpE2i+=jOw)jM8US?iMTPHkiAy56PM)~MeMw{TtEm{gUf*Rlv&Kt*E} zD-g%;Z;)*N6nJB~WCU^tUS2qnaFI0}E?|MYpMxzI&Ga)F)QG?nD<%?f#D8WK_%(P> zmgo9&>&zuGKeIyZ7LtpeIDnz>?q&iu^KZ3I)@%FI=!@kuUU8V!E%|BFt;EqU zDXi2o0(#%`4w%`Sv$Hcq*x+~wY);N6_EiK4+urFS7%sG`m^IC!SV0Q)U(xTc|7wcy z5?(hx;l0Ta`d-hFd;&S44?}^RHX9z~E(9}MCn}MOS1m2eC7!mM4ifykIhPM&A4TTM zGbRQujHCs6^PEQKmYD30Nx0L?HopCSj&IntxGpm%LMw_*&#Jdxq;qvG_UOXp8P(OO z-ke(5ZWrkh!pt!i<(TWu>Synfdih{Vzwx4^q=f2YpRj|r1g&Dhhwq?{UgQ2Tv;NaL zoRs|Qm#u}Ky5@4Zv{u;GmgE6hjR*0YMe7u(+i_GdU+N0G?@EJP@i9E?(rd(l<6^TV*EoHQM-tOfz~&5YN%Q2K^KA{s#=W@dr#%d)R<^)_K8e zHUlj|*>-=dhKx+tb5V)}QCfDH|P z5|k1A@@AAd-&C1Y0h;7R*^2jUA5x`sj`#05fGG#qI%=iG^;!=?X}1ZQ#W*uww`avO zrgEq!4I+=ghxDy&f@|t<^ybCy({YNam2xTN%Q_(THuuY>xJl1hry-rrYh>i&mq zncrvSBTOA09YxxDvoC+Rg`1xe=NJdEBN`VwlPy1qT~Vug!(WL8{%9LhQ)QQ1T!gFW z@y`Tef$@v2VwT+bIJmJlN~cFSl20&d)d>lQTKSus1~5C(<`t!-Q!jDR&65?2%L0y- z^5z>X$;fj224f76*zm~6P#iTd7C*>J=51_rAt-=+0s9b&j1PELfxoE9tXSDV!K2ZO zy(OdHXAW`z>hJX|X*Gods3{bU@uwrh<7eW^p!w>LNEb%EHu7Kw$TxxO7>AtEZef%vEa4JlK~;?Qm_80 zTYHh&N0RdWM-|N%4ZqkbVA2&Vop;Yv{r1a)vSr@r4yc%OLxHJuChrv);j&etL=cw`tL%)y0ZgQcFy?2HC`2}?2& z>YpdiZ!6ObwG~YY01&r(>xR8THm`bz+gVfye#pP7ndnY*M3|=Q!Gpb%*f(B2>uWVm z`LxDqJHH-ntvn?`!vqOPTeE8K%+V|h8#}uV=Z>~&Q&BdPP)qbIh?U{gzfCy-$k^rI zx#tf@V0V8Sx#up~I(%~McuLY1I<{>iMrG7*=h*+Dr>>qn6q8-<^RP}@tq#7gg0j!` zeHP(;ymZDo2Lsm%-11@i=geZl$l<~Q80KkgssdpG8c84tP+MpKGH^M}u3^>{BWG`ownhaTODJEH^E;3%|s2)w=I_AlaNYK0U~O zJW5(ah}qY;OnoH&&iQS!=h(XIra6A$KYhOxD|QJfga`a`~B#zB}# zI#k^LRlo01$|RfRn{L9L;3)PGVuk{N%!nZff_GZbdv-GYW@kcs^mYE}V$a-YIA%Z*_6ME_>{7JX&%30;?wpl&y-N~nt;y7V z10R>$J1rnSfrJ%loCp0C&XK})uV4O!Wi2i(m80LfAQLfLB`s5YJOJgJl>TiEZvIP; z<`#D-04K~CK;nvS0w}yr0k;Pn291V-lqA=UaaWJn@j8{OU98{6i}#J|L&|9K*C4;6 zD!9T-s}h7Umf*d~u?OMm!;7T%chb4*K-$UR>+^;=nPspl-s!_JX)(3Ev>o7ST(<4z zLQJFH39dY>cc9IX-z5pKILHu2U@k8ZAJ)0?#MxPdr;<r2bx zW|XC^PqO93-7CRQu!q*o$|b59J_$|Fz_#MDorjR$N%Vxn0F4#4=pTEOtbmF|`58T! zXW0@ELpS~!PEH{uRPhT^CV6p$&$~M)aHSWQ9^9e+Pe~(kTyG&>kMiY}`25XRgNiGC z+@xFCCDC6g!0Xnf^Xd5=*2s}RWC|oaMZ-C4`r{T>6tQuTluJuhwa^Fe@@ee?0l|0H0}`h^rudhp)8C|r>COvlo&hm-l| zyMp?!-L?@*3!{k}p+wwQ{-(EyljA{mS<{1}3Ug0@Nuz4|XF&A%xjPa&ATL13frGlQ zMgxJUg$fNo(DrS5doOn8toH2N_^FeVRM)ZMUF(wHoVsPWyk~o|pchqcW?X{%fG1&F5oJdwEY6 z6CRLRMoXn$S2i*01=8~yBJ8VEn?TCRPdr`>lu;IAf>orc2tkY84qy9NoQz&*X)@Lu z_nrM`T+nVbo93%Cs&8*x`#*rKCpo#Sh~h&i_P%kL6i?g0bV!9tQ)3CAos1m)FlB2i zV+-jD#1j>OOy-Xs_g{Se=Q(6;EbK5vI!}l&WwuU2=f3oI|7}TQrmn!Q@OA)Y&RHnM zLZ5=zt%<|7K)@BMjHPEe))4Q_w*}k|GuMlE>9dQ-j=2|kA&ul9W7jk0^&k8lc64N| zy?NzvY_drL??Q`xJ$}?E7(ko-{M=koyhpo7-_oH{Tx`1M<-l14G2wl!+aqT%+lVHE zf)LaYr)Frll~eRSH}`5t%VJkk=kU(|WcF58BFD*Y=OLWBejeD1*LMA!_|U07I{v7o z&c>xhygn{VE}a-gFqct+m1<>RpR&b5E6I-{+}`;VaCP)O|iZp#HD9RGtm`#LFUY>SjHZe$r; zQD2^KxD^SjnD#gF?VKea$GeZd9w!Uq$$w&aLx{uFJq=d*lwXlrgbfrYrl%O*saWE( z-+tk@qbmfz$B^m5%lavKkE%X}LIVvVVm7~A!AUa0|) zqS$j;dMDN*)YQzP7Toh8=e4tWD=^eCjUE?IFDi1Bd(jnETwqb@a?}O=csjfj>Hlr` z!a)@Xp6Vwr95kJ8b^z#Y3@EkA0pJR`)s+SNTbAP)Do`n-X^Ql6KPx1;>c|SMCD@t7UX&!borXS-&!5 zBz@Yz?u6$z?40?H&D_qi4ztiT*->`c>g*Gy>bRYz}syoF5Ru*teR}~-gSaf@Y zS9D{aK#0~-WAB_`yofcokt*GiMTo+9Icy*R2@FEp6!T4y=y8XQGiG}QbJ*Ko*Pq}b z`#K?nO;rZHTw1E44FhP#^P!mh?$6#61){ikyI!N*W`_^UU7Kolysq*JOY7YcwDPhe z*zIKo0* zbP8}Q99{ll> zJ`VQm4-!yxY+GO1wZ|*1ZAD+90s~$xZeGZ@GQkD(Bn`)`h>75%nMOjSWqJq@f%lC&~3ka~X6mO|=kVSGxNfDrffx2JV>ePFFSuQH+VV>+3&2SD?!t3S?<(e)~Kf zk4$AI9_>0Q%UM&Hfa6Dm^>$(+BPT*FZF@3gO&Hb<$3HJUjSGAM^HmU3I*oq zN^3bG;YTXYgxS365c2%>z5Utg1HJUS-58{wzu8=S`tII+ZM{HTf=XNsI+s_9%Ti4d)`zOso8nOuUr~wTKrahcbIyCeO?Sn&4?yu2LMXmX^Nj zSpxv8${B{={z;x23N1TZ=2mLIR8p~WZP(F2=g-lRgCN+4)FPW9Xt3o?Lz4FO1^?SL z)cC4ME=fcmPVUF%Vo(;DP1h6K{44!CLX>_BaAZzF;n#id6=TDuki+mJBh}nc3a~~X zhB<;fZU4MRyT4>Pz8uUuJfKs*w~uAlxfIH!2cEl*xyPr-aiaIg@6tm^J+fU2s)|a! zq`*d3#*G19zpPJ*9?p^!(9J@gJWA(^D~id>dkdAu>Z|sWo7N5vnk@LymBKoS|HNrP zDiwuF4;z=6Y5J^ID1s{hCue8Bd^i)UoJ3?~B4y>|9&F9c&Esn# zHB?|hpa^sEGR>2Y`)v6f8U}{hfm@ejB{4!XC8^WF_Awi4)$)=`+eRW(cQcIIx4V0L zGBT)I?Sg3m-DcZaplNJ=?f{_BTaLhBpnxq3`d_>ST2z8$}rQ(=+3s2`OwpLJX>9f}n|AX0^V zj&GWlxe*$^N%|GJ_Mo5RQ(#a@mUQD_QC|am?(S|z1Sq!Gchs|$E0?}MQS#Sb;br;T z3w;Q~EY_I`sYff=`ZzO{=+H%Su|Qtr08>-*)W@%>@z_DRSkl2+3rKU+@8iZ%-OVSE zx;yxXpTnIt9%>v-!d0f``lfRnAljJ6zIbuG-rou7*7S5L67mguc>)Jh1P4J-hV)z+ z8rC`vdlL-;-K+9hM~_vMFV6EgW=Y(vae5NO8B^)0tEq`Mzfu1@C(f$l9yiNbraR1Ab0Tnh_LCI-YSJx^cmroGL*znMMZY`&-Kji|2llzQ^<{;a`(v5+2 zg6gL$bDT#80a&{Tg;^q)P2~Zf`pvdE!ky+QbpUE8vmQw5>p(>lb(x{ zRQUvSY=b|&0>AxVUyFjL5Yys4e|e1MMeB|? z(>vv1$__pIO<4gEaUgrt#}%?PxB80^H82uf)IuV!_uDRbVT&?Z&7xdg*f{sV;~Ms4 zPhsV>Y^&kjz-TP{-M6epU+137=7q=+G4Q|U8&9mb_%?(#&)zMYH$rZZ(Z~eFXjo)o z)A{7GDXbYbW`l{BrzcPj5aRBK);J~2F>V&8uLVzDJV-Ui#Q65h$_xJobXoww;%de& zA_(Lp7CBz_pML}}wX?$qdUV8!;pG~~=pRV-sk)Tsw~E3K;eFSG+}0t$LN9jvhUhSwL@ju0@sJ zc+}wm11Na8-N5USeb$*oLoGIC>c#X}B#sLEw!bGj%&gLv$@7V}q*y};*w$SC+<`wN z+dal%!&1w6y@&uMC?F63WlvWcMId?%?PE*wIwqkl(?Ey~D4kOzeB9*tKK{w~E=bUj z$ET;!w%*Qddft6(_oy?MUR?kL2~rjxTW6ZAsEPF1+T5&OWP}PPi3UW`tN~3_E4%Tr zd;6|t=PlEejbU}S6Dx-nz?`BVynDkmAn>zl$HtdS8|FJxl4l}?V*t1H-)FZk&m_x! z)<0^kk#pFjX6)qT{kDwyE@*X?TL9k0D()BhtiYXulkii2n(1hkS^7eduk~&6Vm5Ls zK~DzOK%Rd}$M-@|OjweNgZXEesf%t}QCCZUO}yg!*P2hX*B&Z8t%)cWIGNASs(W|1 zhXbz}k~Vv5T(TLt=Sz8Mt}PVIsv^f;o0sPu8QOY&nSB>59>x_mxwYk==1Psjnw%yt zfUF8R6d~L9lCG>}QpeLh(&e2|WsfYjSH5)U$v^45O?-{tac+#HpIQbki>-AS*i=9l z5w3;>in)D|ox$aU4*kJ@CU%NE5G4+U3O z*R_siD_p1O&t}eo027q5!}1?8)It-06rV)N)$Fu*%i$`6G~hGq#moMi|KF{DOiyox zNBU$^|CcM0wIr*_+*AW)8$F%3kj6_3t2ep(#h(46!>=Z?w?8a$hK-6vXSOI^?OF`F zO&e|>YGjCYRs1UxWRE6tW#^|FHM%YIT)vDU4kx>BVSb6)cS5HJDj-m#XUPCUDtS zWZ03B@uZGLW1Z|ofkUTco0Zz9@=AsvKr-(a0I_~GE9a!q5RmbM`{e`#wPD(< zn|oi!jVPE7OlwV-w6hmX%!80wuq0KtQNTGu7`k0GwVs)AQcP)#8r_L8Cqg#34-@9Wrl0o=t`yQ_JZ_S1qYBnW>5C~&OJnl7}v z{w<)Mv{{}pr`4-@_%GLx7u^7#|BVKIKq$G>QXi0@fW`^}v+v^NMDZ(4fudj0xX$fu zet8>8D4gXTS5^yZ5feMm6HT2Bjs}P#jS}1 zELq7WD;y1bWbYY5C^Pd;R@ozaB_umL^OC)DW@a+a%-PQIeO-ONzu`{~@AqpwU(e^` z`FK2D9&FP6%AX^gqX?~!g;V-{zyWP9M(+G_I*&5%aUCar-Jt~PhYHcygF9c)=E#TH z>bw?Rs@Ft$P=gI`%a}e+O|^|q)R_iC&))CPDl5~AShW+oN{+yOPXH=6>K;$l7_&o{ zigD5%zL8o%?NYglb#)=`sn4veY~`jQihBQ-*}L+f72WrC+8Entve{5oavYMN#8dQcvYsNDpOv!#POJ2=Y zAf332^eZ((|UCWKn!8T3JTUw>)n~gsR03o@6e$=NH6e zs@qTI?T?ayG0hRiTj&W6+TWkUr@n+CqO7EVymee^?=jj%e%rmpBxO80{WGVs$iau7 ztUtU5+?o^T%2%qJ~27?9dx${XgreqQ6?y)Z$5jFvOD zSQ^_opmOeFP{&F?9$%((x5IXK3yCPx@b8%3b4lXJj4jinVoxsC(bXlgZKUfM=)E&C zxHX*khqgW9*=ge;8Dg?#;>dL1;RYi7`aVoXuuHthfcS}=k0CbW5tI;FIwube1%N3Y z9bC7$6d9y%2t)7|zUTXDdbczu29&$uiEZCSKg%04%>@gV`I=3g8ST?f1qY|>vHFIE zY`Ude&u0&uXz4~!8V8bfmsVpmS(<~bg=MKWBl6dgXiJxGQ zaKAqoU<`wV>$6Tt_NS`PxnAIlY5q<9TF}N4&20Ck)P=RlgviTCWTp}y z;Kc&U1Nb!vNf_PxQTIpgj?-McEow%tUhc?GOp>5PztHqKUq$v`&GXh*Vf!?xEfy~< zcU{9@!{=aSbALRL<^AAUp^n2y5gTQU26L>Xp2hs(Cy~%V#)pTXVQd%heoDsnsVW(fFbZ%|2$~QCr;frkd5&icM+chxqv9^&h3VRqnBkCGZ1(CRt*YB~D(X;E?C%$tyCf~z6HRJBeSk3e()$+W|jQX+KV zv?N1cE1kXr?$Y_x?SQ zgI4f-0_CeGYH0Ow8+>HIH0itx0>8cJUavDR^3+(r{4HH<;EXLtZqobrk80DJIYQHZ zks{_b6ba!OV?TcuYI5C7?Kan?f>qvwkESl-@6{zLl@UCIKjdI(hxwbNx#d@{aN7^_7OGKyxnX8eyO5CIRu)g*qKQtL z)|dTQ%R8Vh{$z{`)Eg>MdzCY`MJJ6(w+T-b+3hzxY+=6u3u&J@nnwl+7Nq|R^j`rZQdQ$ z3*wXW3Gb4=J)ghVe8_3vGppsY*-AtFla8FIeMDeD9@;6j&l208PN7&n_o6x5HiLcO z;sF-aW{?PQtMlNs9*(LH@*Lj??pm#E1g-n*z^Dd z{?$*${7!qU4*J(gXZQ79eJ<)upnRjL5FUU>QPn|~lwUvG-Q zg7qJAev`=U`bMS2uyK0tN)T&p{ z*C88EbgN_0U8(FwqcIWbsK7(y!*{-&O|TQ6E4c)}f1ai7AJ>dy?3Uz^bh5Xu;Fze~ zpkK&%B`bOE+;N4u&or&R3m<+PDIj=wn+8x0YD8VMXFm(lxln?SqQmx@{UYJS2;$=- z;>-T%T14;IykpD-SkWh%YZ{n)I?*-u^tWm>d znYKluiXrvl(=}M^pNQs50;*i0sgF#qkb`gWLW`Obd-`tn?%0(Hw!(HE+~sX}JXPzy zb}*)qFjF!aN-EIxOK;L}mLlb*KsF&10asbwm`z7gFm8Dvd}?i1z(MW z*|BtHYV}I@mm-9U&!0u)X|k3tU*}*FUxW7DMSOyA(1IuUa|fvoeKMY6{jSW(_p5b6qc5J zJr-|sh>;@gC24U^IS0Z1OnP40t9^Fx{&TBb@$kr~@@I#;{rF(FPV0`7MX280v}X}l zvY%xrFa8(}|0u63xM})0&l&}V%p>==IQAwF>m{f&+uw2>(%;)nl*uz7 zt}xYPVD!4G`Zvq)yF$;&)6o5Hn!F;0d$I$4y_ zece6lw}dSj4~RG@Al^qmRcp8qpx3mGdA{$$M@1R!?Q(fG+`WdhTdgLlr?1+n`;khx zJ{OmV^DGZIG6f<|J6&Q^l9`WT4+OLV#9pP6bQwY|^SPer+{rIYy}! z{z7z1)&5XntCaF>!AF_XlS#%tPUIQ6|CLQ%#-wu((|zo>B5eduRJMjJJ_KSROD(?$ zvSqBvYEJTQIw8bf$o2QLQq#)U-?ki+?}fkMGNH5`7=Ootd9U2dOHd0|Ui%m8*+wmF zdy4}(=BtW~n9Nqzp*lH~Ho@&yc$MT#cro(#=? z@$;04sRm-L+4iHB?Hb*v!I+mkq|&Ty6A$^xlf0V^&b`2S16Z|NJ6&lNNI~;=p`$57 zPoNwr^EIIJ+OSHQ>}b}xhqvi8T#8JmFxW}>nXKei_JINzj6hM{pdmg2_v-{Xvt#rLJ zQfb2)@vhFC&|#7W_qtS9_}X^k_Gfg4?F#?KsFWUD{%^P zyVrplW67;B#QJq#ej$sdS=#HS{a&@6zEXd^B5NTP)fKPhZ51s{rl6|kK&otlNd~iA zTv5ffSj%dcJFIQJc?XATJ7E@^M#bnAUDs-t*eW--{pM1Gl%pjOs6w|6{FfCuW@#j2 zLZ}-3W>cRlS)%5+c~7c96*;Ua&?w5pjoatTBGD1COdR4!W#|*}e#{k%5>r-b@1TPg z0l6;)0Wk<%(||Mpt-v*ONeIY5l9tEi^NSS}F3I)V{ZJHmdqU5A?6$OFwyf-!7f1AX zsDd;*;~k6&aQlaHf6> za~{>>{?9?EJvcu-wH3YqkkgbMwWJNqw9K=<@_GiZHVk~)c%d(@d^h(Nt#6q5quO^` z9alKasfG6%<0291O51u)Fk>V4;{C&i;Z1};o6}HotIBS&d{JrkF0;@gdU9p6PvsBS zCvT8d5ri9V_@EYs46;8w=Qzqd>RQ{70k3r}qV2m!yrRG(=4oIKt{HJhy;&~J)q%r^ z07CmFbeD43)%PapF{K1@x|Ybta}hR9>%rUA^O+T$gug4E*I?EZHoKzRD^ zoc3@&5fi>Ouc~8w`eA9Os^G%2G~pa;j;y-iVe+we|7hf7y(=wdJRh5dQCh!r)bF5r z(yPrO%6y&dn__#(XU2UMK8;UCNtoIeFwTbV%jG(Z*vA0=6b@t%kR!}OF74PjF+>!U ztD2{LiD+))2Q2fGpQ^nBM}fZzxk{r6%~F0vNXyag`17)KI&xX<8C>xZru0!0Nb$zX zMV=EY^ITA2n<^G;Fn|iYgu#PTwRsc9GSGiAWF_XU2KG zr|xw)mfA@Pxa$6Xi&g2&*EZzr4G5gx1MX+Pz@-F4rUXxSp?QCcz<{b1{2 z03>_}Ijf-IeANJQ*A)qR!%hMZ$c~%1Nl|GgTbOm_o7N9NBJbefuy*@@b6rSbQTAQ` zKd?N?vc#krUfved^+^W}*+Vbo@|io$K2;(I?l^k!;zEZY@z?~LH2P#M@0(7_SVkJ! zPxq}-7bivc+D?4!y*T<+n?@0Dd!7o>)9deJv&c0IgOVOmF><|CD$02o8NUA^3)v~ zf-7alG=R~-GxviNoi`AfKM(B>mxKJ`;rP0a?5x(!=xE}hpGm3k3||robm;F(oCqr2ZG}K{yccMY;a#Q4Vy&@6ndyVn;6*>A;0tMy)eY6a&z)S@ z`6p6VEzcmD&rF=_qU)D(B~L&0jcP!j$Qfg%mLKTsR;a2X9)mC?=|AhEK!2kUQXwE_Y@7^ZT6|0w?_ zOX7;jE!{{>Il~hd6lf*#yS$N?am@y48&&YBy_QYT=vci%L*Vk@?Y^oV#Vy(gS~+bp4Rn+MfDQjTJ0!Khsl@PwIbC2o!9 zq`WR6eCA&KIYb`WsPR}KwGztwW&I z>E7i2U2Np%ZLp4R8Ut^x!y)~28so-Kqpx3c7+r#VNo_;v*gs~+8h!i3;``CldG2%m z(1YuH=VUI3!pAUQ#jtFDxz1^jf1ovf?8JCCJ|th>{Ye4fmmB|Z4~v2dw~xkMFy->u z>tz0GPE`flWl3wnZ<7Pq2E;iVZtQmly+7)|vjRI)aKQMTdKdaslZ3Y2QhT88v(ehV z48j)RG1z$ARaV(fI`?*R*Ydk-d3O~n2NG5HTGDRwnnfH*`(|eUR<(epr1o5Zfzcmr z`w1hesG_GBLXg^e^M>AlpllDkhD&A)BTuFB#deaZXQ|2dDyBcDA}#e*ga^Z!FX5fE zH+8X(RIpR>;<>8qxuRUmtIYzyA(k=!IOsN5LJ%GjX;$k+9>9lTj@wQG<$zootW}}f zdeO(pm{RK5NexV<==2kDns_6W`X~4Wd&>P2tNDdk`NBvQz&18i_?M*RJv>NRbI4SH zDH)yW+b<0C=(p9}{S~2JB0PPZ`%#Y077de84-nvd&jMH{BMzl!!MXV=J5hwnH|eXs zJ66I;g(0tIuOjy;3fG#@M1YB%UmH_r((vbSZJroD=|ErFyyNaPlxcBWxZ-U7BL9u` z+;q{C9jZ4KUbLOBd$g0bsPPXkKRa%WC>B#o8Tx3P+XYxF7h4=n&)11^vxz$gc={Kg z-3(i=82?T+@ao-k`a5d8pP)s{($wqoMMo*$y>&~=Uai3x%s5=$YS~1-Mg1CTBX-V* z)my@ie4OCsB?vrY$+gjAiWBjH2=-@w-9DySaagW{BXMQG!uM*XTKKxph#*T9!%PJAMabB0x-EqKDIZr92!N6Z#-9Y6O&# zQ(`Mmpie+^FO}tPxxTf?Eu*+=kNzbRI5p1D}QM*taIqp@Ll(ApDI# zu(?nqaVxQwvF@+eDzf~-Ndixtx8Cy_t>HaAq2Y3Gh424k%l4+bvD;yv(7%HIH$c{d zh8))TGkZ}dq$kH7T9}n38wQG@M-kvSyY_x!bbVjL|7pzGK8ECS(53C8qoa-8`3tR8 z|2?U@+;y*;LGg4mGq#?PCh~gh!b>iSp#Tu2NB@h`ssfZ$9LzMco@JnrL1FH|vZW8w zi779Rm{31i0N8z-$y3+8=EP*YQp;!k$;R@~F>sdn@J3fqo?cXYs#fGxy;t@-@^uw2 z&9~l>1LaD*ef|7jM68NLJe}PW(W=BDd7S4UgYpIa(mt`00IHBav&lwi!!&J)Tzs_XQF2D=y!f!e|_! zq25tK<+>}cVO@7I8|B$|ag@-#rsuRQnp{P^gv}}M)Cit^pnc$?3(MtvIphYV*N|{Xw?z-uq0c+v8wMGDK#$!$AZmk@ms`Z5NlhPX#U)LFyO# z$xGc!lhhz)i{S?#zAwbmU2mk=bL-v?(E#b05vX0kZ$nb=`&9xBX8vLeU-K&$ceF_t zHGn1($Oi6?eH!F0PzIgKw3Px`)myrO0iYTD2w^0M5wc&mzx(HQ4${Tua@#~-ngYGRlqP@)ok@obd#|MUF7gb+8xk)nVU>y?es!}W zXJQ_k`@-c{xD$Fe^0LO4EJdKVrvKq(eK8LdB^Nn^Il&6C_`^8(oupe}HEuwZ16E#x z2BbRO`+1EZ=lb@f%LM&&YpUrf=oq~7zWCV1jC>1%zkuU?EYLf`O)=bpdzPMRA+^=NR(lZjT(h$hktz&uLj;xyRZ*_2F-uEk@%(`ay|6-&tbpW+ z*vNP@Ycrb2(I%4*wK=ai=SmgwD(o?5C_6*-(Y7!+xbh3gTxMCM7_D*T>2E@NbWi-q z_YXZfCq8)y6W&tO*r|YAJ0+S6!@DfDuynY*ojhx8ODeE_cw#d<&OS~gYP`%Bx88}M z38>JAgc7%Zrf2eJ!H=cq>2hk>KHJuXWrNLz{AgSn){_6di7?f=Ifx(dJs=(52{hTS zcCSsw7mhBn<4_Cia;PN82&WA^mIea=Jdv*!}mDJWt$ukRCCMGts($LSZ~C?)^W zh*;w%EVnZc98v8X`4c;_W{qqo1hJ-^DeNi9zCz!$6UrQ945pk;eunh0_suc06MVC~79EW&(k#u35m zVsEH71*&gX4S`?D@`8hI;(6DIL7!=f%Bz+Ex6~kStE`4!nJ2HnLanji*(|xZ zlH?IZd>9_tw+~|?9Q-5oq7Csi)9KC8W=Ha9p?p!~W?$~#?ES8S5yKMMH|9AK#~k~U zc1ADWCS9ZRl$+ME%dsieDTXvkxC&hS+gwASpSJLQZ#sM-&A0s)jW949hF1RB+6V@+ zNf7WMp}m&3pyDs~PGa2!EI)xB&Oz)sn=G4J|F7EsLHp*JTfq1^m+$Ot7Gh^G<*3ei z_9KY_ZQ3`>p$Y{gp=~j`H!FD*mjnD5Q7TQkato&)hXMsxQLz!Z3o?+r^;hFEQYni!2!(TF?}7Se4{u}H&YWYQ{&prWcvGlg z#m(5b#R+yb%=xZIp<81O8f@vV0N&YB@Kd^%KZpxH+hC1KU!R<$9F?0^DwfNhr>yw> zX?p-R5)=@w%EYhc?i0M38r$LTHFK3Xvu?l(rZdnUn zkjI^fQ%|V!K|^R=P^&8m*YR<@xbvsf#elzY*~6FP)0PR_teZU=wsQ`e!25wL)OK%4 zEX0b->zo*>fKS^ll_Q=ErNJ&mx8z>|nDcVUHWP9KRNb@O9-`Cc2x9ScuNwDn+>Bii zjBs{P{O*ymzmt|B6E^Jo7tg@`C9?58vB3m&Eb}cem5^>fAkGV;YB{$921zA}2k({a zE|UIufR1W#+rp0umXj1ur=NLAWE)mVhR5BP=!eD4)P(J9nn1Ib)hoEoGUSb%M39_> z6{B{^)@Ia;j@}JdhrvI0)jr?r!+|wl+P{y1<~tZJb-MdcCAWN$t29alevN5Vb_?DLPxJXT>}({oceoli2S((CM+oc@l0C;#Bh+Sg8H-N$ckH6v%rnEYFS zI0XX1`5S^SxSy^OFVG93Mut>Y=kJL!6*k#%`1<`Ks&B;C{e&aDfjn{04EiMREWTBC z{L^D#o$!en{R)Va63SM+2)-mt^XNvYo0a)nAD;SSulDq%$PMV}Wf8@iF$3D?Z2j)N zlvav9=7jAB`V9v`pkJ#jhwwkpkBV3Ss&{%OkBVebVY8dm7t?$TvcPAgqMs?cFRwKJ zX)Vs1yT4(nLNjw)cf6p{20SX){UqRd(JR3L-JOd8+Te{_faV^%t%nDJ-}_8|U%nvV z_nxb`HOus|kMI7D?3vbiKtvaq+Yi48uscyi#GOE(gTB@0OB4aLghQUfVDkTCJal`h zC%gY5%Ijl!U*=&^##So+?&_jG7c?s&+U62hpvAmb8GvqNBPKpIJ0?Evzy|BndlgjTogxem6 zwC^e}N!Y+B$bB_mya|LZIezv3_0gI9hS1>}$)ZC%u4 zxgu3tqFD413Pr^fC8`G58AR~yT#Fg?k& z4EI_b{M^yMRijtt*y!5HBc^m@#!RMPOONk5?s5f11o?1<(GQK1v@koXP$;Hp{wS7x zZ1-du95AjttZdaQnSs{Bj6dzQ`ABYX5JI{s|4G!LxBk+MVxDV;68ERPjC7r9x6Zdl zByH&}CG~Iucx&yxFSE-AL(nv5B30X*kEYL>w$=|9e-_~iToWvaU$NOAQc~;$0A?p^ zFh%jN#Pc}hli(S@DsIFMmqrS9-7P-XXu#Y+t!U>>>?reo=1C2|K5QZBHscS34Z~r$ zy%1T{#ldfF_mwQxoy3k?q#|+>&V>O!=tl3IASW!3$^d*Yw;}DKlUgb+u=?GHdJY^P1c<* zS-_w`_d7bzov33|>ovivXlA=4_YlTJU_pU9Db7g=aHW9D91R(z`D6_wLIik8yztiXx9?+ahDzMgnV?ldsyNPm>! zaRTcjm4=ky(2vFFMDLmQn5->Rt) zz`F@R9Z9qsvP@KKsBE*gAWw@v0KUZC=Pc!_J753`M*vGwCJVQ6f>I{>)NkdI&}|H_ z5;Hh4by4#dsYcEDV@N>cSzIA6GlgtYbPM#~aie?^$88&OZ0eYh%m8x-h}<_47jLvs zD|DZhg9*=GYC;hZPXPErzhc8#pe^~Q|G7ZtWW6n&knaZ3H7w(^EaCcJ_Y12zW_dwh5n3UIK;e?+$?BXDXEsz$ov9XOrT>Rl-^7`4e{L5#EImbd1xWybC9d?5R^}|qsiH_(; zGmxNhxo}$pM%s7?{&}F7r`MAfo#fX#%iLvqL^j)#x3GA)>e2h-*SY$?wfL}{#Q_nL z^2B1hD}m@4ZTajird?Dk#h(qQ1fvNu=Xu_80BOX3?Tjs35m3SpQfVE4 zHzE4d;&2s@&U8BegSo5sn#2+jCF#K*yWB3MUJBlc?Tz`jmyokK`6R1DdmsQ#wTM3{ zCVN~hNfzxIvpauOM3;;Mm*I@}ojX;TUJX9>Imy9*x)~sX*aKKg!mej4vu>NhTIA40 z*!mOWuVrAsm*P!Xon^&mJH$H1sW|W4qot?iBZNTt?zVWj;C3Da-2qTQOO77BWg#A} z@>76wN4822){2Qf2b|6p*&o?c@W;ZaeWdTl;zYdejNZ86ck6+7c)nE|XN=m>@RYM~ zFn->B3l1DO)ts^;c4^}sp$2J4xv|fNoIPl(4vJQqwu#`H3_*i&4@#hymsA1f+ku+l z7&9V0#;@Ee+)>)dsxv!3cFez|u4D&*DhS*^DkZ*2!Lv+AC0u22vN+;X2(dYABfuUT zp@rc96v6RB;lOaaGlMiwTb#`)#C7IYL1qpPNLUe#=(^s`kSXQ0cH+A;8iqg*;Bt>x z&Nq0l8H~yHZ{v(sCQep1i!xwz5=-=7+ly5{mGXz1EQfS}DY`Pkg~1QnIW8vhoVV`| z%;iieS4v+&zput>@)3Yl^6B-wAVPzv$g;e;z1jb`-NQZQ8|I2;&i#x%##sQq{PJDf zS$f9m%hY|v2$$rf8MXtjDcG4P&Rk|pYvgQg2zMT|2~g%<>4wU@-V3l_;QdeVTmSEj zq5T|SgfH1B%+qHVSqvV3`Ss-vj_{#ENStarYG*2GvagT=4!*JLHbQo?l_Lq&H0| zObJlOPT-_fJ`=Tdzvt&GXN;uTDB@*KuPx9*?~jQXrN7VOwzWAP+yYLU;*yl5covCu z-;E^9Cs^g(%-%CM8J%JUkvw8Q8KR$Ru`}%|p@jJrK^7Gy8~&1%m7%E1fM=o=YP%E& zFu#kYai5c?!ui6mUJStOAws}@)N$EJkIOm>JN)arp!(OOm!Mbog+jx=Q2nAmd70OG zI7EK5($cgx9mGD$R_IyC9Bvwe=9uhSQ-CA$7rNX_5NPy&?R7XXtxdKyeNkFss3biC z-1CyycXu4koSklO*&L}*v4xJ4Lmp~N$#|y%9o@!q?ZJ4jn)v-$UcA^Oz^!v!2GqKE z-#laWgzW}JqZ58^#>yQD!Q!l}bAQy;h&;dmEOM$WcZLLE&a|B^^Tj}pu%S9RZC)m* z@)RUPGOCgn)By6{PQrzliXpPb<{n>Lg;1b=DTz;-k^bsW@t_R{B*O7EM+CGu%@6E5 zvIxWdYOS$TFT}us$oU2sL2QKsQAy&jZ{5MqKw-HNzBBu`z=rz?A6Wy3ja;4r&dPm$ zB=H0wMT~E3J0wZgl9&1$gKVPuo=OX>O{B2e_PG;8z+I0cq|PO>g}Os2wk~l@AUcjH zA4Do7fOdD3{9s+wI5FeIPP~ut7L1%Dn`@xaDD7p&(j67XZtgMbd;n9GUx${Vj~=%P z_OCkeWbmPy0Oh6vW| z+3xJ<7@DF4IEpj>^)MjyWzJ0^CwBl3tA}%;$vfM2Xfr8$NUT%ny>f5a9B`q*95rWjnAg)&D+!67}p| zUYIIL$fi?zor&bJJcv_y3kjgZ2XDrsn@-~38)c0va$OzQ$)(vwsJKWUl&9d)Exa@!kG_Nl0SSJ0%~6x;EB4nrq`}|gd2$EvAgneW zC*oz-tDCloeA-)4=iYQf}2LB@u~I-!L6PtNCf)>AdLDo}+TvmutA` zuTdNCt#Rttgm#85**M$__JMTYbHkg}W|o3jyZFwttR*L5dFdl96<+I?Ow_f>@C`H= z+%2s|1V9djc+NRSDniT@oQ>Qg_Q!)jbZP-z@W+4AafpGotQwN-UEih&+hxD_>GT$} z*@`KnW1o9O885sXag#43M?zHtI?se!qXGd|{nNgZQnv#+9~3~~&whtkOGJpUwrxeS z#9mje}@j-mP_3xqFEk+rg7^)Eu{EGGsHumt-lZBlFeMT5T4)?P zDXFum+#5R;Sw{r=%;0qFpElk8Z33H11j>zTBzD!jfZX%sRZ9>~@&bvCA#Z{Dtb`5s zSiA!)pe+O5C~?-4qCV-yP5bF2_8^8khN41}FRw$L1p+CjlWb*K+va&ZoHfj%0TEct zn*O!|s$M7BU%Tcv%Xn|*fr|ag3Ca=2Pj}VA9>05aNeGk{jKR=LkQ-MB@daJH z>Lc7r-tn|zYz2UT0m6DDQ8kNuLolEC!g!-3!u7yu^;PP4P0xlPr5Z*39dC&$t?jvk z)Gv|LSBu|*gkdS^FBbsBQ6{I2(!^q>Y|x0NC3Q)=BxJ&j`gJw0_?+8+zZ^7&uSetE zj1TuY|5Rl;AdD22?e2ZJT0;}SSNeL!=j0?ikzA7VFTe;P93psjr>gCHO?Io%xtHTa zDY>|)zY};Ss5;TJcI3otewnG1@EkJ)8t{%KcHya@t0ZF_ZxWpD;wm`ic?RF|{CxxT z*q{kf>I(=A7nwY<6v8neD;>CNW?xc+t%Fz@d;LI#heOt=hwT=cS zb<(u)e9FW8Dj2W-Ar&g6{2G{(ptOpg&T_BN9xC8sa8Dle!#yF;Sp;S#FFv{-y091U z{5#1)J9|abUn)-3be?CKol`h2fAa4>?*c7%sM+T-m)N>{haTNY9*+O!h4>izcX4@P zy^}|-?;Tn^w|EXdS|19Jy!{HZRoA!hGOyayZ9tS;x-&sTrjV!XtGsrBy6)r0A)#ap zpA4&PQ5)tL4N3fU;(`vceM!6#n=b2u2dO@4SYSkMv$Ttw;SXGDGQ(4MJf%jXlTDcI zm-?4%>iCp+S=&lTrTuz;Oc8xE6Qwo>cAFo4F`Y{`LI;vpSUs2-fH^+FZ#p{_eVN<- zn}VnhZtQi*c9*!Q$E+)7-~6s|^QbkB#egmja4kRaEluRd33$}*mMVGmf&U55p|cbm zZL$f$N;jVgI<7{1%5b=_1`&{zKShG?K#dZ(-BbckH3-xy2g~0RPvo zP~y^S{|<&%m#5v`-PaPb&+@h#cUt_NcTlLOj*i81J{!DPbTVR;Ol;=EMp@&aYcsGn zJ7U8eAE`Vyu5r+P*0>lg<&MfvUZ;Q^2Ne|+y}%sd1_C-Ld$~t zw&r}gF|~lcg;uKRu)Z-F1CMNfg9liM%1+cVVFMp3t6*%PQxa{5izkXOgPb~fvYc4k{jPrDB_Oan>i2plCm)7J@d&q@W`J%eQ7TvlWdS{4@*j! z#|8Y?wk}!lQyKx=i1nE)&>SZY46@|=Vo1{cT-BTbLK>C07>bR`xP@a3EWW_6hA4_! zqe5Q%tPgF`So&A7&M9=6^Dw<6@dp7KerCZzIj)g-9|8VWq9e4>U{?cdp-lUoMUW=4 z?u^F3To^|JPJMkx>vJEE9gyK953I5T*ua!J8aHTYA1cz@m-Xi0Yhy63sD|@zO^aKN(XP_TY3k2F7@DA~k;!9W8r)+)X_M zc3ZuMc;^J-+++6jViek^+1FXPl~&)>L-$VbB3N&A0e^y63`pj{2!Y!}o*JMq5V|+5e8F3?|wiq`| zr7*Cb{Z2dsIXaRLv}92Vk2ozM@TY2k=)Y+)uw(JSWsaY>sl(?2m~EzANSsoFe|nN1 zU<7ceqzh^9)Nb!Qib>2@@ZD~ygGJ8H<{dz3`ZyJ5Ei}d4t}kj8+^Lpb7>_1tAcm@6 zAw0vy9O=7y+v08RZ)^j>G2qIGM@L(|vSJIaz>uBZ+v5+|jqnHR97=~>#03U1^~Ev> zY(bfjHcL~lSr4Dx4w}Vr$L;xnQM<$W`TS(FB47;VzapId?(7U~*GIUUG(@f1uVg*N zjZViRs0GBfljL*uM`cg175eOBC|COacJJ}%)b<9(f|tN0zI6qekWJlbE+?b+Usb11 z_YZt9K!5MhRZx!0QjPgCvBs!56?WMCH;hVg{zKW@1K1QD;pjO+3m0hTW?z2gRL0sE zK(j)=TS_oREB^2s7e%lE66}1}Sc@V0NI9!gwdStuivYFL)td3Xm^ALp6YcNW;PGN% zonP91{Q4JOi2SYQeWVJ&oF+tl55J9t(eRnj{v<6Jp%Vtw01f|j?KpU}Zn0ir zRh72aoOeMBI^YQ38F{M)6El66Y3`X?lv zX1We=v?cPS?wSyIIQW?k%mOWB8{a;tJM1PMG*+eJV0f!}?`3t%Gx7)4e_}uf3;t%| zrMQl4z{mT%#%WuhzP;H#)Wb1>Bv%g9e*)qPBIQH{m^6z2=i_(V*y527s>RrC$q~<>#uk7<6 zYk|mMBR#X2xO;M7o`$STpxDTmEd9X_AP?L_gn`NH)?m9w0Gv*FN&$Zc_(khIX%jF? zLL6aT3yV8^()+(YqHMq=t0}4g7D4wO*8BygLZj$#w=r?K=0G=hYxp#F)yt!3Vy{=< zuqA;&lc;v2#6$DS%Qg7HRn1x18sZDVd6o=I~BRgkS-KR9dV zxBK`2m^9_(wIdOKYb=sCeY`*$2)MpTKrrD*>RNPH;8aazCDr)(4KuK%ckeu*1}{n7 zZrzC>Hb8XulFE^#nG5}=pBKkl45cBjzcc{wFl2y$loU{D6G9>7@=qm%=tWjG)J>cx z(tv!YE;Y~`SNT`ApUV8dg+H>mQVw{kolXIC{T9vc3xD7ZHH4g6%{x?k=rZ!vd)O2A zc=4U;={XZD7YzP!3gf(ns!&3B$<~` ztTZxWqbyubexk4HnRu+`o!ajy2hCfspfGeJ97K~|I|}p_P$fuA!O5g)6{pXreVFP_y(a3 z=s?fX)6?r18Kv#NN>7{1{`$png0H5!`g2Q5z>w3xz(Cxe=-JK~mh9@m%F0SbrcZp< zC+KC6|9~%O!+VN^bq>YSjZiavX`p@^ETXq5J4>BB%ONt%<7Leil*Z-gt_lZ}qetAu zDhetjeSdmDji_f=BwF8B;*MSNDou9D;LJ>u_r|?`vLSKzb3=(gwOc!iF)$U9Y1(K@ z#$!3(4KVIdGvPfGnf+zQnl%>+`;p50^&M1?XTl$5n0fiBFOduj@5V%t!E>o@^r4%ayZx%9Jn$7bEO;Drj;7yJC@Zyp^!cMvfX@S2ArMRH*)}}y?qj} z)E$@P^9rb#F=sF2fo}~iZ0KyvGR0c1gFX_#Foshe0!)o0)6k>Y#{`Wya3^>c{6-7& zX=&LZfv6Z5P&}A$&#PXm9X+Iz5;HC3W^AJXZL!s~HHRVfg7A0=@_;qras8$;W;S5$ zwsiREZzmjT8<~>UqzZ(92<^LtJ{PqiV$&?qf}ZO8DLAlUG6FbB@9}?qFViD9J#ShX zb}r_bvfm(PHquY2G4MJaVo|60jipLBWBYfe*@kB)dG{6I$qRZ}9T;-6U|`FLyWL`a zDM4erm57CrxZnz55Xcu3vi#6W*mZpb6208VX2asUDd@k%#xnenLi&zfWUC9fz{t0S zpNFSv{}_`z-56~kOYvzAyP??O0>c<%x4jTmI-Ub*qH*QGvjF&^D--Rx2oA;cEi0>F z!9*UtdH@!)_r|AU9SVy2tU+W2Ndao_COn6yoR-~dV=CC@jMs70ac{mN*Daz*zGCF` zXnc{b3>u9HeR&UDPIfISCAT-6P@=KUcrM=;9d@%n$2!>L0rSh`D82gll4Hs>?bVfK z68#w6;a!j7-~9T$V-vQ8uP1dsZd06T<$TcZ&6$@5woKg}i+G?(t$SaOsz*jFWyoT~ zO#kKRE#H8$N%SWZ>O+;sJJoy3s|F0-(cps+&3nr0p~cme%FRrdhLX!ojw|U`8O!|I zDi}4z{jgXP-~@Mcg0)X)NZIi7#|yCzwmimf{kTQRN*zrE)Z6t(C_qP!6JO16bMK(i zZzpX8=extR#?$rU1C$2LsBV_pG-_j5fn^L_J5~xV81wrk4bGiD++JSmB~d2djPd&`;}e*hZlE^x3Na9wf28XT50ox2dY$r6L8asETb zY1+FCpP)*m-Z@pphL9K3CGTZFI-O}$}=vSXN`HQ?;CZ!e~TvUlK6{$4*w97J! zd3TWh-@TSuJT26*b9fL}6+WQag9_zLDUHjBZ5rfQVEd0?haN`LLm$6&8?LAO5q3>? z`!WLb4{jx7d#YL*upEL{=K}Le^l6k_=H=0sSuh~yVr+%79@<|msCqs$D=D7?K-*7Z z;WZj?194`E7R?5>!x@|B{gph7&8gULvuwi8h8?uz!zn=n%N5z3N)nmMb2Q!&RCZg$>Tb3hoROx?DV`BD z4^22C$KvuVNM=lp6J*L3K0EcEOkBqe?U&Zc`t^oQmb-?>QuVdXx9lcr{kO?|d2TWa znzk4wb5Fj0@4B_d${9nn-l;(7ohtD5(F3LpDo>_zD=qZ;&ax>cFMsiAF6?lOL=E$D z@ZT`2{~hMU1Cm6Fgeoun?^ZVD=SDf5Z0s&JOLk!=8J1lrt1#{Jo`T||yq%uqirQ}K z*gi0NAkog-{q?Yh;|VlW{+5$*g(~GLbD7_F+;Wz0h4zn7GndzaQTH)f=$`4urg9IE z7ig<9bX~?jiCn~E^{ALL-vkSqdTX-cA&*|kmzu%a+S*%NJMNMPTP`r;f(%#XrPX|u zWQUPYYV=~xGcwC}d2(rLB7rr%ipP$*^Nyqy_C>ET$a)(8hK^O4qxx>!4ml#GJdnF` zBF#lbMV0Lu-g{qCTm3(aI>UXvE+4~}d@4m$(`bjR@EgQ)o$cmc*?;!^b~H5Gq3IUj z)cD72OvmlN(*5}%ZGkP3LOkgbxaD<)zGu?Bvw50Sw|5z(CE@+RLSD$TRK*~##J8%~ zweWw~d+VsGy6%7UAdg}JHXS|+1`>j_z)@a7lYtjIdOvY1LrH0x6V z`7nowQk4@ntGSE;XZ;|O$7Ux*@W^ontJQV$TSh6&r`!@+h*t`>fYJQWJ5B8?+wt_g zMqx^E0!;DZ!a_r9C+&RslN96oI!(TXd+Jo+rpf1RX4{{-@856PXH{E2JXZ%D>|AvV zOncnjeTS;NXIESai_>6|a0M=Ecv?PFbtJ`FYHFd1pde5a0L;~gRyMEwMOfG8>Ds*1 z6mi|t!MCHD+joo<_p(B>vMwAQ7_aLI1+C>E)0oo|V3247Vk1*kE`)_j`Mb6{uIL{I zRErHTMp&koZ|`6WguVhFzDqsB_+F)!IC;PzMOo8qa~R#LZf__qJ>g|;o@49V^S9^* zT$M$t=zAr$h96Tr?~k2t;irhKadVHIq#OiK9ZkK)xqA%uF(WKa80zdO2)?UlR9OciR(K`Vo|Zx$zK)jSZWBySN13Yw77)JU@=Rv*BAmjlHzfu+*)*_L%BK zZZ98vv6>PH!0J1=x6vuG3_~g=p~LM1CDvTi@h2{|a})IJ``OKWs>pX%>W7^=xF)ll1AhRgM+M*d%@F1(Tw0#Vut-H&~TP0k_*$b zoP?+Y7&p@J2AVwBDIl4jIJba^h5@kO@eyzc5Ot21;a*k*huTL1xXjPz7BN_;^1|(r zEi5q-u8V}^1oc*OB0j}o@ZG^~fY?&~{QN}3{9!*{?8~+`MTYw$&rqy?LQHJ_BhRzw z!}k|^?kqXGLAX_O&gRSGQxg#S_bQF?SFFf1*fQF7D4acWMoJy2B1{0QjO2g#VFNJj zHSSAC8XKU<5_S0NJ{C)^=Q!a6b>!)xVjG&{?n-UM zsy1f(3m+eO#gMH|r+2HArskl?x26(Wgjuyyw0RW{(pwIKXQX!e$n$m@VF2sfj#KZh zE^Ai#NJ7)JOhWU33q|35qaW=^1Dwpu@LeK<-5nj@AVz$uF%w}kpa;wsoQ0hF*!!n+ zcyO8C_wnmS%3YlE;4|xeo;3iGfNmsu7O-@hk59-)ig4-T2WmOCuRGP{}hz+*srKQmnW~O|G!%VB}?C>;+eBb5AJGd{_ z(2b6B`xw=rW&q6H2LlxTDlRTQ7wQ6Yk8h9OxYyi_cCqcV3T(+J{c#O-CoR{@zUc|Z zaP$pc7yNs)LCx$~b9APl&1m&Gev5(9y4x>)46cpx4|m;fm*GcSw?3OqO-VtXiux)) znn)mHCou07Cgo1+Qo$Jx8o*~q;(qA2vcCj<5x`dgN=9??t7Ic;V)XomJCu!J3=b-0-YH9Ao1 z?5oOOhDRQdF*(b7Gr7K*fem@{3kz${!Nx_2unDi4(AVcme-F~ZcABe;g%u2i172Rc zT=1!S{qyrw70Xxp-8R<=&*up1&jNg$W{U1Kn~ALrQ64U^pC!zq{g*cqqRL*@t^g=p zIyRQ+GHpV8{^oxw9nmrXQT(TP4)PVIA(va_JAD5#eAB1cdD;oAEYy~gi^T|#a&O}p zGfvazIS!w+-e3<*JV#_%0ZG46eLROOp5~5}ES*p0G0d+*-V89mrM4<^M$e=0g{GP6Qd(SHt{qpJus@)KE9 z4-N@2p8HY*d*6;n{YZ>*Oex2wTad@vqvyb2xUe!xKVey{d)+8ph?BFL33Z?lOZZKD2}Ti8S+pM;_Ow7`U=4swl;@3kO|G66B(z@ z<0>}rnX4nG#F7cK6=K#nEsL_FJ&T-6k+aUV)&Vv46$G7NXv9>$y6$S$lXGPW9C3GR zw3If!dyD<&A2Bp4Fe`Dr5|i(a75rsrns+J>8G$aKe%{sL+_`>RS$$(ENn_~SoW(V* z5GdWwo0XE0OdytSV>go0LK7kn_WNQh@+NhX3whtk`Wd~I=rrOP20k8G8BD+l)~2Y` zP$pUd$~yHD!-JrXxLJuRN@K+4P(OwD4q9rjgBQBhAb``aS*OrF$x*hTh<2{wEMI=5 z>$-9)T_aaQ*lwz&DN-143uV|v13IWq)Sd9}*h!@wW8f#q`g*l-gSGU_;pk(x&Jj7t;1cdC(yKjw~_MR82eu0ZYlYCPr>o~G(0a*2X=9OXKP5A#pI1}B)>Yo z>EsMeCUH&aWJf1eT8=QHyIXVZF1W< zFg2&XE!CDaPjk4}?C^R!eedeK2ZdyHweaEv;KgI1;kBR8L{eRdENfcj%-g+(Q|3S$ zc614Ct?L^P3bj+HkK4{()z0X@oOOkp)vDaA%q5lq?s?U8nWW3{n_f4So*W-4NH8zZ z+Byr=@Ibi3H+|#&)o<=Nd-L8HKL+*`Muq5LJCf5Ju~_CA7g>8NxlCI@`tuf)UYBVs zK-VW*CMct4hXXs8lz-rA>uqQx+bjze?Xe;<;%?9y3=$i|CksQPKIy@hl6~Rdh)g4N zf+^QffS}c^*3x^Eh4b#dyMaN*)p|fSG&L#O(*cZ><@@j*80@ue0v+&yv}BZS@8It3 z(qbcWcHBiGI3S7dXk!6Y2mffrUsFv*GK!A36ae<8yh`90bphooeTua1(T%rE^LB~2 z6Os|`k8Tdx0Y=7r9KaCVugh~SW1kc}6`vJJwIvq8--sR}YYBG}o=?_|F~zr;+jeQJ1^Fq&CSZ;Rib_{MJVV^7;$ zcN^9A_b~DAzMW|wVQ2HdKUmC?**b=48dT?)jK`e|RtGQ!58KvnoXD|zxy3h?Nv z4n&(fUDHZGn8&pY+`W)h+M0>$)sxLg)zsFu*Ce_&#sfYa?| z!|_+b@oizIg+v4j{_Oq_-&{)(NaFH(@4})MjRmFqmqYujDe5dsM9$h}2$0ac+wyV% z8Q&V5`*IL#YAx$*MDMXlK%Jvdc+|yYP(1>?N8;iboo*7yyk1jHoI_%^eb|AD z=$wPL6L|58T?!+SLpXeXh)a6+{}R}U>90znOCQdI1N@SB1XLNfLq9s8zu6qmxZSrkciVr1ECi2hm#N?v>1y4j z_g{eagPnUs7cd0C_gCM;0S8ev{2%M>fZp`-NLl+J^g z3YQbAd$3n^F*X0wwm5BFawPt-H(-ri5J{j&?=)kqyV&ToY@t?7)3k4Nz(Hn^u7Ijv zqHsX3W_P{P*%iW}B}KyfcletGM4Y1|Q`@G@Ze7&+vaQQQFMo!_$Z&r0Hx}bOaz>LA zM?bK*R_G07jaXh~^go4bB;mR$%>SM-dh~B*agO;NRFcd`LbTU<0gyTj=5*`$!b9~A zdJKdFKXytsgND}Yk&1FAKdkeIl`?;+Vf0PGTa~fikRSRsJKhx%+z@;n+6`9T{^r{g zfwr`EZ`A&4u#U*4yRhdH7@^aCP1`o(q-y(%Qt#fb!~q|(?DiEhE)ry9ejRlthbdnM zO|xRK9u1AX^X9n@s`MmCa|uElo$YTu?&RyGvdeB3rArUqrr2)(g?X0Tf<7}vzbdzX zKPI3sFYTMtJH#EM-b>}O32xKY&c5i&hk!N&!{C>Sl{Xf-%c5L09ekEnG4+?yL*Egs z9kMj~a8UA22@NJDyPe|fs;;H*FxgKb|MOxrp{3scxYiE_Y04F(%jqU0C|Fz5{;~jY zt(XJ!j=eOrqFt5hM=)1|?n*Kwf{-3@*(|1?gL1CpMCIHNIsH>q>a1S#c70eWjt{&x zi7$X;86XjkE@)IgkGi`9Io6R*)Ao7BL)UwYtR7yDjj>j6bE`m&A7x>K?`t{z^ccSH zA4i8SHB?#By_uJ8feGr(qrPB&i%=FLquJHY_aO8 zpSME)TZch`-9ntd8ixsS$BpL=UlnDZ*3{g>FgL$ppjbhgd4%R>#`ZZUN7J)_aHp+o zk_+`dhGnvUUJLBo#v*>kl?YzW!49+vmTv zGnbrl_jT96?1P$vE59^#b?MPA$GUE_vQs!dbvCGm_@8$awiEUGhp3*Ye~J5{`R6#M zfL8PK%y9+vj@u#X&!N6O6w0%BWEgu|nsNum`q;0N0wb>6yQaJEI88anq)1OOm}h7^ znAiJ1PcJ;NIK6FCevfnnbzxjCPG8!ZXS($6ZKeP7w&!ew4Ne*Ub(uKS-$E8RAA-6O z<_rXx(FKMkGgy>~{ybyr{~IqG4nh?HWb~lq^S3S%L`6mG$>5Sp|4$(To6l_@;qJ=} z59dz*%kW_!)ww3p<;dN_X=^T{n^91&`7hZ6ZO6iaQo!zOTiqUE1nwiHN9!9F>@_Cq zfzBH2aUY5FpU2gGg(vK=63mAB&Y-b1F8_LWTQhQQmtme+mMV}l|2zpcQ>Z)&^(!BC zs6*#~J-^??+YWsrn^E0Zt?|opCIowg2;Rh++k= zTJGPknk`vc_kH&*J*yCV3Y^#6Q}?Z)D+s;6KaT(v z;4`@U$_vo<03>+j*PpL8DMgj~W;T?&`@%j6C|CK%;r_gc9vmQF>?4>Ltoe3-7`V4J z3lbxz*Yc;WUJmdjXP&sPV>^8Rmp8C=iK~YTd0^XnE}~5E{~;5ZuosNYrE@Les1brm znNE9k?oW4R>r8Ce8>E=F5V|9OPP_W#>y3=+r9yaDsB`BZV}&2%eS|N;{f;C+R!H#i zuUCnB?Lc3x@6WFtJ>l@bkCFL*jM3tCzAmu6$}6CjR0wR+U-b+By4i-9ll_iUOU_Fq zYlV`0OP3BkW4?5DCj4r|p0?*?SMuX83YWBt2&6rW2@UZRxjuhz)(NJ%O7|4*NX z(E;lK@k4*x^OXoUPcF@x)SBniPTjt3Z}-EsLbuB8w(I8LX75MmF|o~+HB6VZ6lwSP zo;nP(9{ht2TD300>m)Sow6k#p2|q|$ZyzJ_cVYL-V3jijM)y)AdvF+OYlNQLX((+` z>d&~&09lglqb~N#s{<20bxBvzmBoHuxjRGYwo|gR)q1mvis$#Qr=Bit_151y%Q__~ z>GbpJ=e|P9%7325EfAzmf4RiZiN-JFlW9bR6?^hB2Xm z!NJV)@-MXu)B)$q=2l89MvQ)a7rXEDnG8;5@yoj~D^gpkBLMb4s(~kNHE@sny=vHF zwx0AX$mYm4O$B@VLopvbsnmM2i(uT`iqnGqg;{6!a)~Cc%*k9$nftkF9E{`_Ug9FtdtDegs%yEj?yIEfQ{q!m@ zm^}BuSH+~46)bsg5{%$bZ+%yB7x4|1UW=(g_VRtf>dpj>W{gIHa%^^Mh>ScWnRu6NZ1#KPR{p-t<5gH{&eZpx1&cA&|90~fz z{g|R+2No+4>;ZD=zb%&~Bs6TH7etuj(v)^HbX)yvevWlB1t`2k^0Tq6V+|8@yx@dm z-Q}BKecz9bpJ(>i75MF!kh)KuHTzs#win6J@ogFMx^vh^+^9Qy&hG1V<3T;Hvbp=P zAW#1q6?Wg*yUfgSIcLABV*>1dK7q*~izImI3QPofh|#3X+` z07g^ZNnkO|@*PihesW_qR)|0*Z1n&>((vF0?iCOsf6)KHszv1z8aZve@tY8<)zg zv?c5`JVNE&QeN_}8|2M6`^uj|`fOV@*J*F*vkha%@wN9jd+jALkfomo*5_>U*lO96 zl;S_)WF4!gntSL8(IcGYBpCk+g6?yPM`i`(3;|R zkybydl6*{$3S+b#gfWwm&|JT)UUbpp$7?v@za~QwyrpaKs#bo#MdB)^uLQx!pU%rT z@oVIm^qAk;G`6ivmpIB8@-xH{vAkUBNxqY-_S-==Dkr}65H)2_@5JUt9~~{lBbS>O zZ|P6k3VCNtuU(+MVK%BmynG!9Fw!0LmusGU?A=@U>z?ka3W{KL&U$3!z2YA6xxyCe zsnMY7@r-U^f8@36nohPDBbJ)<{2R2Y8X7bMu7qjJ`9^+kU@;3${v)R|V8gY9Mb7X!_UQLOC)0FV&BSfZ8wq=6mJ7D#5XcAgc;M^`*F* zQyv^;a{hkFx@3J3SCym?R|%ibD9@MSO?Scx^$??eMI2Sz*tw4WZs+(Qcw2 z!+6>5+Rqe?v2KcOuFca;^B1h(GuA0{qXs^n?PS2 znswWBI?ZmjEH^t>%Ouy8|LWD>MT3w|&Kh(jcn*{~d7n{A@PLQlh*wPh4lw^If4LW2 z#}_8MEyx#%k43`<<`^rnzg8UIsLQIyLkgkO+73gWLqKODPmHwdrNvW;pG&Daf79X0{EUckx`@IIL z5;plh-PzwN@T2ZT`w;bci~$hVhJfQs!9VD1<1qU2P9^Yw4z4cEMqk{7{FcY8%dC@0 z)*Uo>BWtXLf$F)vAY$)vwi9>9NVlH}Mt_Fm?B0^hZjt9lj^;l$$TGZjiyI@1F-b)0 zRdwm9h4YC$9!V7LNqqX19=B&Rnnelcv>^jBPN>*ipRH1mWKc-bxC%+kt zrnA)U22l$HS^s<}jFHNuy)hF-Z<5-w>HYiastUnWk_N3Go^ai2&FN&!lzv_LBqgOK zHa=dZYoB`;3-bxe^oosDjai$IFV5@N2eQ;Jz>2Sg^`vfrqqer%Twn5r@)$1HwdL>c z=`1`L?E9?p?J^<9Z0+;J$7gbXZIT@%`&mdB(5h0;Gg2U~@y)g7&9p8KFP%Q9j2I_S z>D+5I9-{6fDv+t{TCZ^P;xk2VjlA7kZj{lU=?PIirG^i$kDrSibbxKoemzgigiuI` z2Z@f5mveTE^Q}k{n%2Nz(DGfXHR)wL@_e%mY7-Lug=gN#D=RBo;5OC?-Y!f1{4Se7 zZZyqnUSAp%GtFz2z%SB-QdOO!ot%GpCu$FH!>%Tj*iF--Bxfh?4!%IyX>G2y{Wvqa z?}$7ypK0pb))ak&F$!sV&4L##jDOXpyHox8o;vk?=k&@imI60_oKWROZgMXQ_&JG* z(NJR}gu4hywZ<765CeT+6O%6r-uu?lQtm?7MWDavVEGLefTM7&KhxkhM|ABhuU>nz z(#8@4@fVv4!_z_;la}b?ts_5=je}zP`osoJp8J0H{7`q_{I?_ZLE*F2)>%IXT>=n;Qg^zB}-!l`!|XZ^cM>02w#bB16s`4gKnGXA;#t@lG+H!GTa! zE?6$c1Tev!c8)ejM@P-HC(238r-3Bq&(sF^uCAJzSEMe!d}^DXDu+(XL4MZHqXlA= z>u99;*R-5=)|J)xP$ecp3iL(m#ngh-9!Z_0@b=jh7efP`$q62%ZfzTxH;cU{JjTMe zK0F`Ugoz`r#-am-u<;l7^XDBpZ%Htoaw72JQ*%B9wj7VoY3qLVAt&HN>q>A}JW$Cx zpxz4JlssTDc{;{|?rZXS*0-*{R;|#rYJC!{|L&iiu}MiuDqTML4;?XK92<+G-RQ|e zIQ62UIM~=4jG`8&aoxograd{1gx^orEZrC>%r6~wAz5m^y7H`-`pD&}!qqFxYCs5qp0xiKctCXwc+3SIoy?vd zR^}7pYI-iV)(r_hoaF-aR@DcOcMIM777)e3$=Pfab(BrDqj(UOkRu^&#=f(bcGA96 zG?kzOhBdc4KSPwKv&4Qjt5a3$R)^h(=V$7z4T{yJq@?ORCtQa&ZSwbHm@AUWP?NE~ za+BQ}%d%%wdXGQPo2B3TOp}5*T@%nB6DGFBF8M3whxnM?mDr@y@AcEnubke?u)Y{b zuSkh)uNfQ|3v>6~-w2+Abks$`RADzXqb&Ev+gL=(V9tC;HS%>DMJI}xaCZ&`DC7>R z5RzQegqY(5CpFcgU!sI`pcZQZ6#a4CZHt%J)}}AEpJlXu$#HZLYg6=dkfj}Q_7`1> z-uEA|ol$8S6X~%2^-^J!?giJ`$y!#00GxQmX+pVMFFi>-v84?5H8=6(jb(ICcwAA| zoZrX!K(#yfPV>S-grE&~*qz0xp8T22l9^)sVo#r|+B6Rx8WECHLk*3wsfG6BMM2h| zVvBJ%o_^vZt|8Sg=BcZwa95Hf%@dfc-~QRhu{&A$Y--`KznEyAMMUnNMJJHA? z;1_BJ!(!qoyD-BbxpV!4<77IOfiuWlUEGHv}_e7kKd<&XP^ z!u_Q_o%wZp`3g{BwxZ?A*j;Zmlk@V`-1~fD57*Sx#HOU2-81R{-e6V0adFy+F~mlb zvncu+Vq5Uo-=9fL^rh?YQ~t`jXD4`Oa^vGq?x($w)FfK##}Gb~dmhMb$lH3F!G`X1 zpE{sb;m@@S4Z^6{R5KQrD}#^fw|>}L;uoQzsBtvqZ0cpJ(|cSLvJv2*2@S!(a zTs>pJY6z3AEpKRO5C@xF=2HIS1DpPM+w1XZdZBwp4=2&+u*aU;HZ_?~b?^wUqu;lV zopb>Tp@Iz`ss`_TG?~NePd~f%I#5eNLE*G!*59WZsQXHsKINIzMl6tfUW@;z`32Zv zGIE1~Nz{YkON&JM7brQO?m1M0rmvFW?+3${+a$!M ztg6b|F78c1E z@FSZkq4+m7cUpM1REdpw__>m7vi%CW^@sshB6DitmtTZA65sUNbual_wNkb;7Gwo1 zSH}|*XOU?eDksdOcHRcAm{eVj$WmXB>r~ryPP44Ru;xMAZk_tI?C7vB)~>7V(FwDg zYhz-RWsaSj!``1H{TW39$0;Xh6FURV`FdYh|i-@tT!0&1H0>_A!7^D|17aB(`tWaT#3 zhva;_;SzTq5*@mLTgfTB;T1^&9^`f(x_WjP=lkpjUFr=EpOTd}Pc10< z{LemG@|+~Q)+J?evIy7YkUPDILOj4ZR-flfN7YHHNn$4l`rM`IMGnv@# z`O(IG*F!nTp*-fh@ig)_ESp7^I_UNi-B3T}v>_@PI&z9wn@rR6-*BINjGbPl6ZKM0 z=w)u$Ng=yn93qfIx>l8YPI*ARmB-w0tv8gWv&2%P5|@&)ei$O3Q!1c*?Db_SDXVV-<&lvT_qQ`jE%!wDO)fGU;7(lrH1=_` z??b4^fhU(wPa0bMULKeh!y1`rB50;QiDznC=J>Sco|(`fw6FHp6N8@V*+xiY3cp@D zes3^lW6X(S|B%UvDUCnAmGkSq4BdN%zSD_+%hBy0qL%DufchN&KfY)vc{gO02yk@q zxfJdj8le(*7;ZW+DoYW2^ZstqC35|ix&t4C3Kt-2VZ-w>BJI~KHi&eqF(A? zWi(jsLM>oc2iF`XaN@8 z_Qi#}iiiB>pk#m4`921_p|Bm>5Z(3dhxmEnfaoU>XZ>1o+dsq*xgG!hw9W(~^Zz>j zzxxdQgdNy^S3vN*i)_Zczyjf}V6s9K|L-3ajB`r9+HbwQ{Wud!+OtHb?a#*xAlp`A ze|#7KvELuR5`X;v!)F2602X=yj&`2j=Hq#NXe~oInU*VS)SaQD4jmn;z~7~k6&jEK z4*n6Ji9d3$hib((tUej1re7{J?+?_9@bj-3WI-DQ{3MlK@7+Y`pRvXaE(ZgW z+~aCcqFT=d;SZNlON=2Q#s3|khzB>I6A6EE=Kc9m&ss*Ob3L5i^ww8%7_MBoGLGYE zz8I7{on)fJ0VVHQaNkpeeDI(3-@233XZsTFfgek=r1IZzxS%TRb3Q(e%By4xcgDyk zla;?>tjmDHHdfm{fLRHa3$2pgC{8;PK0v5_Fz^48p91(42;g-tsNU&=avMg1Qm^+SM-?gxNX)4Dtfz{2rf_NXP& znDGu$Jq1cbwY2MB>>aa@J;HYY-a~io`t|nN{#pim?VwekK{;N0U(*I*Hu`J&j?>Z; z4=Pj0zSweGl+H=Kfr`|sJ*OfLEPgWZAIWuC+ppsyBj>EQ0Ss^^Mwf-wc$bW#MN;O? zt*PMXc7Lp7JWF~GMp)7^kR#LJ4{JCq^RDqF7^BZdtyU362EFe6tHE=iMa06~l*RCr!W z0d*@?>(&$@m>lOXDin7s!urFRWK#m*sY=MBkHamZMkF+Ne$cEEg~OZ^ayB^pnJ@ub zAZTe{X>D3Ak)?Opmx}VKMc_#4EG8agCXwa9CNhQMT1vgWBn%@J0*b?cL~BoGzp#AM z$cOXLEpznTx$l?4u-JvvVaLAvI`MTi#lp(MyGYgWLq2BNg6awZ%l4fn~Hu24Hr z2_E)y-(xhAhxFc9>c3eT4WFEzgp@;O@C^|(rD@~_+Cd`2{KqChk`?bnq1J`w$EAyQR=Bfg&ju3a9AL<2TVuWtx3O zQTzg{-!%%1=T&yK7x{fqP7)D8ntV+1M2}fvf8{PZ(*qwqe5iz|^#JODu#jt5ANYNk zX;YwwEL7L=Zdc)Sdf~uc2>iOMpk-1J!OEi-q0uzic2Heh&sRGyI;X8?y7a||lNF~M z{Yma3)o$!!64{2hNIRp^==!hu6;J-R8BPvf|krJHp^JY)VWPO*p#OnNno^`Cc}(`Xl8sj zDNqc-~RZ*kw7PC zZHV|hwx1u6B|sCK2OT-L8dObq>}UEQ6%uFs`qXW1$I*Xw?h8D~kvc{r>g+H9vzC%O z{p2W{;^uO#m?Gp3_0EQaqAOkaAq;ROeW*$(og_uN`QfD+(CO_rqOIZ^Uq}~0Ix#`^ z;#_sdQ~rS$jsRepOh*e`R^tFDF|*4k(du5NLxk~@$&L!Q&3obKMZ_H(CM=8xoxH6J zsj6g<aQl2k0cxi-IA{b#|jO)3q~R zG`~U$jiLq5 zv3L_CQxp%2rQ7)MY;A2Sj)l@y_I72E7bCh3(uoJ!U8L}{d!HgwZfemh z^J9q!`ib`klqa`q_U;#acF$-Z1r`^>2(p#KXld?U0P)zq_Ik zDMn}+CWK>$KsodA;r{7p?=TO~WEO_jcnoSB&D|&M=OIzl?d5~T0m>zTXQmr(*cW_9p|XB3Tw-5WgL@^@5da>K`$JV9frI9=%e1?eM` zDuAzI-W|9ASCEO@ngrC&!5CZUfuw~m ziL8UPD2)t$#uU8{(JC=6YK@aTHUECFg_y(TJyf)IDa}S0WA@MyD-zJ)_!ibBEeVZb z|L1oP+d1<#*9SLs?u5UnRPRp!kOA-Y_kZS!z@ogy)gJKUc{4IKFxGVAhUWi^wCsh*`K}%=d{0rzx}*`^Qw&bb^CLbqFN#Z#qbO)ROR6 zaWoz1@^&Ug0xwMQ&K1iwoPo90Gyy{(XhVwIgRnC9c2=QhZa}`t!UE`_NmC@q3k%OA z8EL?ZD_gkD70o)236B%t4SlA~91hVkr|HtT6DiTnQ#?~V+18Fa6MTa(&gd@hQa30{ zswYpLOqk(7Eo9A>6K>nOef{t#ni@G zMq}Mr#Nb}}nz63@aynTI`=NkKU7gMfnQ3WhxsB~|Vv$jd;8Ml8Pym1`vfiO2=NY2e zyu6IS+44bkcX5uNdCK(i3hUU>!FK>)io=?tGZl0A{`uaEYki! zo5yi1(mwFk6-Y!Rd5#62X0vrdub=~nHGO^`LahE7% z&fotrBCnzn%yA8&o2=8BU{5(mQo|-g>IW}vXHMx@rC$U@0gk)WJWiY_57i0u5!je(_dDiFeomP1?fi$)8}$kZnPfCevs z0-911ww_eglwQ2}*};ldS2eT4ginCqhnGb`<3laSV!-S5Lv`$ubNf*_@}xH@@H3I z1E-fe?3B5dE%rT15J#lbVHy*W0uA?ObUaMjz6_zW@@jL%;W3cRMNn>`#QTuR^ z>#71}#iTjkC(Ao#2lQSWVR+)h6`?-I@wShTCvDD)Z5{>;KkuXwgZq>`AE^zPc_xaG)e)Qrn6VsU*cd*YYF6@ zKN(d-3fb<}DX~k(4`mhI47jqEr8QlBST4=pFd4cfbQHV2B_WHiI$!YVrq9XXIgriN z;3;Y!Z=hSTP*EF-H?AL*tol%$B4(`~v>trjq}Xf){1FpjFkmt4kK;mXIgftvKNoUN zqpcT;JJV&63hDz#nZ_JY^M!S2X2)Xa0~W+n3cLlQ>tB{!??hNhd~%vCtAbo5Vt?)R za*UboBDG=;r*=PRF{kk!4h&@g*7VWZCkCtkD|41W5Pna zoHtVF`U9o+Q3`Jes+o~~-3xKKzRZO?Zt1-lMFh6)u6wv2wk4RZ+Y?B@A3re5z70aZ zj;Idd&iV%?-+_O0@**@s9rAZuGjQzq0de9?4SOzHw+7 z4>tKJZ*0V8rg!`nI|L4yY+xRxz-RX?SWK+8|Jg50cfm+r0Oqp_be77bkB53gKd9F9 z;sH#HCiqlp4X+iG8h(;0 z@O>DoY%O+e&tX;%l&BMt+u!i!%M&(D+cJ_~Av_kBN%n;>dL}U>#Xc4csKRLI~9mQXFY>W)E*9W;ya>%EUi6e^bMajd>Luu;Sf8PZUuG>2Vxv%;P zlu2YiKyF6@-S>B?uMO$bKTBQ}Z$;=9IDy5EID5clMRdSppR@i#R&Lx#vjVNUR+Z9y zzPLiS3D0LIB>4p78f~9KNI**=JeB2$s~tnhv4wSbnT7R}FQ2Zf*yvqZ5mM|5GuJ9N zr+V9al^E^20-aKFb)VmAHRl=g;_(DT<$KLUfX+#{9ne^O8JXmW12ugyJ>#6=S5ULc?TQ*R90<@>Rx3oJzTCw^aq+-xKw6ar8 zFS5`4&5+m0BPYCM*8yrnsnC50Mn(zBASPWypLtS@r});mP?%^a%ihgrQe=`@#)opH zSz4-j#Jq{0x2G*nFwa|NSvaM7XG8JR#f*A#e94yVBq7 z>kZ>sz13L2OQ@@kh79n?-|og%)!%^?@IocDT^@7+pBp6i0>=Sy=yaSxoFZ6Ct`FxC zzJP#7le`L5v+j=dPI{CabpXJD*7Pu^qBc0GCh6U6udj!fnXzZNU3W|U7)%L~6C{P}`Eh0Z(60jT>z+m_3 z_*Ch9lhoDs5FOJaTgwHBMolvv0!h}QB4wJah`bmwFs=#>`Hh<95d9AUGf*nQfJ*|u z5N2skc4PWABhnMDP1Ewb|1xYbg`But<@p5Zmw|n=xIzoy5}XR$BvzX%`gz1_x zYe;13-jSBxL2A1_H$br!&Vz=KY1&2HMVp|$pjhWddQ1r0N6i_q)s!gCTXm(^ANk1B zY zgkucXee-5IniZ>QS75;Y}a*0;3;B^qov$sh#^5jr_uJ zv{ff>##~ieR9ia$KId$Jzp=R%s~cIWIWDD^%su2aV^XwZjM?KM>g=d=KIpfjs>6ga z+CzluzFcKSWYAUD2xK|LGr-qqDM%)pNMtl}GTyZ;3>c~)5&0p1Ogg0O1mqiT#<{%X zV4U;JCLXLNll2}0;mYDuY{;M1Ht_)j7b=OrI8* zbeheVFuE5=f=q%&{nAGvqtZJfs6NTAk#mwB@R_0fZr$sPSAeThh5WjLUgK2XMHy2j zPQ}y>_hVumyvH2o;O!>D{M>lhf;xtW&Larx0d*(S#U+q^%R!eV&$hOYn^T3rX6{sE zrpuim8+%jM`Q@7mP@67X>El1&5(hM+mrJl*q($p)7grdw>U?bjP%We{?C%U5PzX(2 z-dJ1(AOUfO(^p807$zQg!IO>--phyHCWRBl7;FY$&bc83XlPIC2b9l+Rp9v!n%t`n z3gZ9_ex&ONZ#O%5iRrcjd)+&e$!HT`KGEtPFo7zMy_t+gAB85}9i-SU`P^dJDrXVxGaK?%5(P0(T^VEFCr%@^mTADH&(NVsW^lyxc}gz^$&_kogO{Q6?XIORD&zvL$$ z+HfqYnIx~+BO0!}uI|7M0`%@@Ij2*6p-c}!Q}ece-LOR_HukaJk?N5SV^H@dop=&= zZ6cgQ)!h7)miH{84=o{6WjUE%=ml_ki{h9at6Y?}Np)cH#|S|lXMml|zLXxt9#;Y@ zxmRXw=5*KJooE8LR;6^>YLAFHF3cJbXdH5)4Raam$N)CFVfHFS%gLlj8x&iNnIby* zDY%Bg?)$k5ApZ!v%et^3wtM|LHQzz;Qz(*Wovne^q8CJ5;90!@BksiUi2_|^sZ-EG zhgCL$TEdV1<;JsNMA1PBh}&*4PsL6r@qwo;f$KKSg&57-G^wcZd~5b`p4%UHBP1+x zel#51>DNI5!*h;+J<^)$+2DY2rGL-fT@}GrM_y@}7qN&im;{0Tj#YsIWox3*)xM}^ zUwu&WWG%nYXLr&{(D;X;%=~hO8HBm|sp$pR28qgX+C;PhqDLPEz#xB-0wW!n7_IPoF@6nn}q@l zOg_yjg>+zF%hqMW`PlOz1Na)}I&GqN9X4a&VUt|WYnQ#gL?_k)y{g=F(i;Jb3Yq|$ zQrr)G%s`h=c5vc#i)WF(A{MzchlYkGHi0VB96Dwd`9p;Hgl-zR0sad=Bz&o}dw0?U zAxza6tcGkMLf3Ocpa3pr1-*r?mOje1xvC9tb;CORz#&Y^Z3J*WP?M)irL*A?uT;T= zB&O~Z(MTcOQyFYRyBSJtvhMV}bzOV*0V!ERw*h1nrJ)B^zG}FGn5b_5?UtBJ$&lmW zyRQNH|1ddX1WH0PSCY(L@ab=q8e^pjhf1Ah@W2$<=uhlQuYk0XM&Azi%2x=kj?t@d zO^$}%R8q@V#D|EC?ezKGDEmACAyq@K9a#GqGvb@k*nTq%#3BA*VTKHbd%>kGgj}9! z%&t!D%A6PpttH&l3kAh4Zs6qYLm3&KfjdZ?%9@`tiU^^k@;Cu-qW$7t`=t`}9LHaC z0X=-d2JI74#a`H_XrcFzjFJLXI;?I$Edf2ME@>5de~S^ERJ>@#&6+1DoBJJQ2bgfy z4eV7gr?j9pD#0EyppJVBHmLjwjL2@pajOe~3Gzbl4dNkQ6DvTP1j=O2Ab9TLQlAYG z<{IND{a$Igu`))LY8OjiKxrlAn}79+2q@T_kZ zK+&Hh!=Q=>;Jfj8t(*i-;=5f#UqkgMkTu9^M!`O4`P?o8U@#;1PbvYLT+>6sCo`RI z5OS)$MuQlW6DR--#bceD{bu`9SHD+LRt2(L4;)7|K9H!d=$fAs5iYmSoPZ$vx^Zn1 z=pxhXnq&252wn*e4juv(K@NZ-E?FOD&JvIdLqY>4L0Xp`47=0M?7YzvI;NX z?4NbzPqybiXp&hxkvaNgEN~InlvzN(8*xS08?Z1#BWfY!lnXTT!!g-TcCn-QL_gfD z;BHnk${C>GIG>RK@1e?W|egIL5dJT}BriR7Btpn@WIXV~6EN=t`6){!JJ|43hZ43{MI@NU#Vdba{ zDYrldC5z-=;ITk$tprE+rS#H7CmX8VsducMwGH9Wp-qsD3^P^2FR?2)bGTOIpwcZ< zWIH#Id9~J{1cd`llhK4|C-4n8408dg+i(@qF61a>U&n_)ujt4190u>*= zD*)xsU4H~c$0Ia5QcTo-A~}&&>d8yizxnVX^+_sL3v&u_61=@?^yxN0hfLOfH2EF+ z-X*^KS_m$@E#M9p?sqhr&SoY!E)RJtl{w;#EsLz;TTyi%4Zgdt!W)>E0+YC1^1C}o zH)9#=WJC@Ox`oe|GYrn=Dh%&uyeNQD4{2tUm=QXn>Nc@1=h%=j#J#Z^RzwcX!-js8 z1_yDlu%2*GGPkO}k5NrzT&BchXC@wucCpw#o*k1JH-OBYTp7HRjd9Wom(irY1p(=f zUus0=9DyXt88BC<*kCJD`u2C$o4Zr-#Czm05B?nE=ROKEnY$)r_pE13#dKV z=)IrjQ2Bi1tOs&ephEJiDFaf%mfKX;lW_($_v!_1-j>d%hrDM_#m&99wQRtV@|Fr> zWf@mNNYgTeoRuiw=|U&DlaAL|+1dxU7eNshWB@$xIb`B>>ESL`>UHr0Rs`2 z-Avn#e77En2ulkZ7bTn-nRNsQQr#(;3`RZqz!YF;ZMG+8Xax1p{uTc^E+|>q-1%Mo zyY)BsknPRO|M;qVDQe&U@8kb`1_bB-7w0ABsSvbey$n^2jT0hIsix5E*uV}a!aZS{XpB7YJF*- z(e*-$@0kA(HDWTM3L%?3ub=0wWWLE)`}s?ZJiAuGxi#1%OL`C@%&IDT(3z}D?GSNf zp`c)H6}>QxXn;?>5bq7KU(=wbMQV4g9M~`}sIc`VgaOH)Sg;K$p8*m0dkZa?;Kf`9 z&O#MnY)s{Z{#h@ySrXy{K3xQcZY87}sZp^E;smyoIV~CX^8rQTr1VLzCxDE4I72Js z=jEMuh|cg!NZ0@PgtS?cz_733X06!_;0`&n8%u7R{18pw%NK=kID$SAU*mZJ~GN$Dq(G^g_eXfE)!YidjSapKJ1Xfc<9u`Tsa`Ka>GtaW()dv+FJ- z_I|keS+WT9E8HZ(&rtC6n42pjglVH=(oDhoIPn`+Yc%BwMUgy z;NHzF!NoXNO>GIQ4m`HaAme%X$sxwS5qI(7dG!8MN@Cl#)NsIodSPBQ7D8wC`U-^S zuQth^i&Hl~CRGUE+8Z#aOC%S4xhvO4erD)zbHGj5)hC)ggL+`%VC_Qaajife;{|Tr z^lIfm>TVn$_$*KUWGliN#hd@73nuM?4C3eUKfv&!QOgrO0vBq}r7w64%*L2mkhKgW zN*gJu9iYLj-BVZm07wM$o;lmu=Lmzwj43!tWpl3=0k!J|PtM+r5*`uZ4GW9*oUFq@ z6p@UNkCSKjz*}$%ad5d-!!^G_TIhP4BnwqcD4juS7CDar?S3uX_EbHlI+-la=>$ay325qj!JLynV}XQKdbE5-Y} zlksegA#Gw9)&}%w6E1rWLAXnuHK{8m6Z__zaKL0h+Hd z=>(IrkP8saiauC$_W>tWMFOQbtIGn0{bA^=kDwlfq7pY2D$P24oM$X4>sP|=M#5)! zcCDJZ-g*M=@M`E{SR<3WumCp?eG*J-vJOqq5U6Er1N}vVfLfLgxPDlEXcB6{CayDS zje--PEFs-MHV8Q{n)T*tnU7do0xMy}a641;c&pg%)aP%l_A^_jI%He$*Z~`S%GI?-7IjR9UZ=M#v6lHKfQq#&eT7`kM zIAc6K*Kw=i3;&|P_9n_|lq~?9hKJ@q_MX#HY@@`OUDmknM1XL}L! z8&w;t{o-{q~hDVzv^co5#RUlPOPJ^wBqh0aA;#@GxSK+5nkwBpnNh|a) zwk__eb9BvO|8b!8sYVz5Q-}A-%z*SKs{(nts0czx@9gCC^ILUdVc~+DB*G%KmKv=* z0S_H>1Lr6|5R0`4;lkJ&03Jz>w8a$PauMLjDB@&Ps0Y)Gk`j!0{ln+PHe|z!XFvk= zH`wrG58W^1<^79mIv=2!&ax`FbNPDRKo6^+bU~-Ys%UalG-&fY0^a!N3Og=owIK{w zL>8$v~B0}Z``(oyP*r;{Afw76{R2muek z1?6*fAsMC@iUdIrZqpJFUDDR)xw#de(j&_v0xCdfe#jF!WlIBITsBTk(}x*ntXrK2 zlaxhlWDD-Z>dD*Wmmc2SL^w`K6>JJ%LSnejvD^P#)2#H8TakN7A#furzc=w#Mb`ED z$SSz5%eJWo6dA?-`)PQQYi1YY_Bsj zbA;nx%t*iR1Ick&?`*Tdp34}in3nek=$o~8zkPq-$YT7yZsLvytrC_F+nqrZQ zFuKzAW)1>e%Cut8ErF1pJq!YMEbFN1T76IS@dlxDN zAJ6B=$6HRDLxW(^Ua1+=H9&xYNVi~h4dT;3zv=(yoBwNUu{MI+LP1Fh%2NOxU$*3$ z9bCPR4(KhxQICkMwC0Z=kt1J2Rh0rwS3f~qAuJ5*#k~CIC(8D_h_lzy9#y!%GZr0kIu2>9+o`HJ>|?hm<;V zf`7j8SJ;^H&*c`dg`Rs4A9LMxCT!}h_Y-y^7Pe3Up}u4!;{bz2O!+K4ke+9Qg)h18 z!m0Q-h)mwR-G*C_0SJUB`BSG(`JhVOy@VTDTwDx@K#$t;G9U}LXG)QZ4bja_wj9q% zVVpezaMh>R1nQCFwW1HAk=a_r74_!l;vLS6I>KCSZvSWE{5<_%6njoMOR_(e`173ij0S&Uab-;>` zDT-|`FJqBbu@~fXrbU1u_TU>4vxRaE1S4;QQ3XK{7|+D7`w!9QYP~~setE8+?*;Vv zZ)-s-N_Tia!pdsqp&;Y}#(HkM;|h|NEUr;PBkZ~RD`%G!3Dr>-7B?3O-e+`=RKo6C zZ{RxXe*6j9c-i&5c=bQ?Ib|7QJmeuQ2)(1Sy^@EMk+cr4eK@ukgv1hXQ{t_B;qLW; zIG)SU*QIGNf%3z=JO2>0LP+X>3^V7pQIY`3i(aS#_({WSHP9R}i9%4yvM@lfB!#-<(FWfOVYK`*#yM9gebW zX^-YiSxqTqwnnKrlOv*=u=OIQXxn8R2u!6Q{ljP2;arD0VzK7{hnG)`!BP)SU}pU+D&hUevYbevEmf1Gs1O%OR0G!=?@al-=Dx{3qkh?S_a)Z07pl%D)xHHOd>y3oXqdJJNh1Q zs0IKkR;T|7>h6|;85)7niD0A6s^CChin3(nPgdvSViVBV)}Z|>@Q-Fj{pk&AHl`{e zbT&NJ;b?g{zxNkJW{_3YMC9Iu4m1=y1(w^e(EPo>+xPNw-Fzc>5)nN}1DJS}8>gFn z@y@TAx2q5sfQG0)t>l&Kf3dmloX&Cj7xersl^;+_BY@9(K;ic&n87gt=}_nJA#0NeY}mo!MGFnEEBtBC3M zw5gc^O1|vs`OoMRPsjXuDMk-HIsbg6nDroZeIG~scM#t1zx)4%X?R>74gfBI9j8DZ zc|uWOJUkaV4sWF5L&Nx0&{IimYF4^9?lpRQFflk*a>3E#4Z%h%yD)|g)Y4`Gmc887Uj?xak0D-K^TAVjQ=|iZ!MxKrum?0Sf zu#5|_eDhX}F;eH5J6~UKRTlFO`8`NP>oM=@iFeu1&Z6o`Dr*Bq8JtUOMo2@j=TwK3 z)!MNNM_4c?zr$b;5;!wx_=i!P5LlodG;D9f^eaEK2A2NFPA*8WI0~*yTU9k9j>=S| zA%=Lfb5mz4Em3%uELXVidYLT}Yl8;s^73ro<-Q2b#yy}9a%!6#2fsx9ny%NpT(|bM zBpYZ2vvzJZ#8!v(l%th?O{P`@mPl-2EkC+bg*@%y>}s?w`VTA=C<&*gzs7^mDHp&Q z%*@Y%gl$fQm9$JJY-Q&^N*_%Eh+g{8W-udEcPU(a#vbI5A$zMB82InqXXVSXFM&#Jyf zf&kg=lRamKsi%YvQ;8Bva^9ei(C-( z$0lt07L9;Ji4Ji*KEM&P*cq*uwj}y6(jtjCn3lTkGNE)Newd5#UwKyZrt>Pkzw)mE z$45=H)e(*={zF|Q>t&h*)9Wjx9S+$%ZWd_Zq|M}tw#k^`JzaUE(Oqug@;n+NIu9-s z=x4SdyvPdNI9@Qz6-b)onZ@g8IGzW4tDdtV(}K{G%dPxp0ovVtuxz(id`T7e=8MOy z+VG&7K=VDNU9R-V73TAF2ikX)+AftmXco*3c9?+)ahhp&UAn>*e}Jdhh0x}9`T?Gz2&gLuEJl~y6}mIrh@!$mc<6&Wc* zV})I-7_dj`a9kw0ngL#z&aRf)`Hm5%-^Di%Aa&SBZ|~LHE!yxHPrvf#Hp$IFu8<-S z78`dG(Eh}(KIxSubTbtcr$GVWh3O@r8$DL(E@~AP3ngO`Tkr0KZTClyR1xI$)27S1 zT;`g5s=A^_W=ue$((VeHM4lCRhO%*0${&Cv4GP#HX99;=I-pZmdV4_bqcy+9!ordc z@9VCq)eazRsYd|yBsTR1%=ullC^{Oxg7S8H4v+}ObVSRf*-2xgRWHP&r-DH z#D#|0C@TmswfB~Kz^pC?0D}7bmIpDpi4`Gxsx$#W^Q!9c+k{nMdOFJ;m!{{8zrBAF zxO&{QeJ^!k!WwQsb*9^sFQa$M?krKYjc5KU&AD&>CAR-f&VHm?FoB}+>A?`}{!KR)9RQo^=99PQ(QqO*!_Rr6xGaDj3Qy(NtgVP+53` zAkHQizCl~H{2koE_xuM;2HbJWZTy#9bb3(S9u2NC`-|9l2qQSYr6{^F_7hZ8=aOdY zM~_LL3``o7#=RSnS;}+0KC%#)bi84_UesnB;_4KbCSj-JnR4h4hGAxwmtqJ!yBr6; zWkl}1wx^sz+$q9%X{P4E^DQH_>YtR|h^5|TlI9KS{~TVGnCh3*+u(jkg`Rv3g@hom zEPsBKpeU?|sP;=WXUvC1)f6LBkL00qI?iswu``_er%m3`*#-3|0-EiRx zFoBDu+l`nyyJRK6Y`FLb-+_{-XJfvgWrhpzV?!ZH>Q}E35W$3s6WkLKN`P%%VGx9N5(_?XvB6Hl?v=PgIKX z3y&g=r_{(Ccpy+NGCv}dfqIHvDm!}ui9Ua=tbh+q{#Vf1>f1f+d;?b3*Fi&edwvUN zyTpIfkun$yZ${nPx*+{q9*bJA?sO!JT9EM05K0Kh#K|ev9gh&6p%Z#w3Z%Mo%GwfS z1Vuj(hv7K)a_&bhGJI$Z@`1DTC%jyt^fZ((fSA}ZJAt4dj5F`o%LXX&H?$&i`epjN zq9!b2N$2jEO6{#Rjf9NsG7iLP z@!UFxY$U^Zjf`?8O`87oUtdE{CaY@?Xgwxj$r|^=7?!d&EsmDH(Ujf+-8(6Won=<1 z5O#*z5Y{<_lNePsE(zJuT)ca2{Y$VLB`QHkDZVEs>mN0q)ZbZ*Ow@jBA*+C_&F9lA zdctj#3wak@3|o4<*T0_9pX4qb!;cZ1w)hy^9yYd7@#;rTJDdB?&#CP0Y|ogVXuEyO zzj>q8zVZaz&0%A%V%^6Of3s-GTlu4*=d%OjmCBulw&x2)-@v}q(zo+rb))E3+f;p9 z?LrZ2C95m4+(CeqTrsa(anRdcBUAJ=UwdNug@2DvcznR%O6Gunl2NgLp1#fpnXn< z+ydh(T3cWkQ#Foh3Ofhz)^xfN;i|oDc|+Zo9wEEw@MQtuBD><<0bNx^g^G?ouX5s9 z`bwZY^2Vp3WQb0XTNYf^a#E8P34&`^mD~?1faEW3uv_^fabzi+&7B}|n|8@A3!Vtb zWeApAd7TbA7tJ@I5vX2WF}Gw69=h{7deJ`YsC!1n8%A>*z^0VUfzfZWrQe`_P|5#v z9Uki5yRIk{W0~!HtYIoGq5yJ%r^)6xQA0CmveU}+bKxqW z8hc8!5nAYBr>cW+MEqnG=prUEe>{+HamuS)ONVhoU|Vkh!V;x61pvIK)45O2y8};q z#!@M7mhYwXQlPRIZDW#x1mE0gHfXukv)Jd*7MQ>b-6ehpS~Vz^ z=4xBEJ6%aN57M})${;A!g8g0e8jxgq}WkKOx6Sex{PU^wsp&QPVPF^O)LTeYbQ*b=qyT@Z|UjjS;jEI%H1jR z3J}?-weZ00yKK4xBHf-$(O8d<7h1)6xhuKvFFK(!E~P)twq2HHZa1}460mkl$kizB z&#vwn{to^2%{ka+kl||4e4nekeX<83m7U3dpmb6ds4e?Q{S?Z z86zO8Xx;i`X{-C=nGmB(FBV(l4OWN9@fcb7*F0J-ml@eUY~V?6oU#rU6Sh} zLrK4EeK=T2J%r52zHL+V()MpBkUpj^Xv8*G*CtU8MkjtQ zG<6e#3RIWC>F#q&;|>dVzf&UJ6ewM(5;|Up5LD&3PNE9b+maK7JWFfZ{@W3d&v0oO zB&moV3+vqVmrR(fk421GZbKrcRYF?nkrJ+kO^b*Z^8aB{%FBj2x$S zG2Do8ZFF``^r9jK0^QZc4F-Tli*GB>giI2Fc|mO9f&ha%v_`tN^omQjK4QY;RdL3f zT3_L1*fgU&70bL0l4YFC5q~IASWQeQZ3K5>RH|Nf<{ zNk=>REauYqxm(?}5GlOJ4om=x8HG`ngLJ@W?x2H6OJuQwE;O=4g`DCP+r$@IH#q^B z)_Q{bE&~*lm<2twcEF}NNnKS+B*pO>7isdv3bY!U^$D6zcZvljqRvuvBVM`&$vlRP z*&d)asNvvq;8g49jNYWDl9F+k+(jV)%{OP+z2{kmouSumW*N;a>egDAaG-eD8!r>G z1I<`-ycAW{^PXPIYJ~~-5bZ6Ys<`<*z6Q8Qy13i;_k4XuVNvw&6@CuXDdHF4#H7%l zbap_&Fo~r_-sZeBFw^OC^H_uR<|E6~lrdLX1u>0NLVCe4FYX9HpnHAI5wDON(W1^k zCQ`)_`%1%z!NnhlBH7l2-D#mcGeyA+HiY`9J0`UBJ~X@9HUpuC#E1a46VvNC(QFR$ zF4r&Ze9gD?=VW^gMHHc%^iT|_+fwW#21D$w-n%e;~bD zq=5j>5y?%qs7C9Fx4_nmux_b*OI4OIN?#{K{17MQhs|eidw*!UW3J-A>#|MAM@<$U z@f~yn!cnu=XGyG>tNUn21z2?@Oz(JedF5@v4b-#^hp1A{%vw>MCaAqt-c0hoZWt+< zC?mdgv-szo^aHU|yna3)l~GG%vC>g$+Enl*igDt~)Y0=;r0w){Aoq(p=4H5>T7pJS z@NS(-NC5fT0_{D4_WY=*>>QQl1>hos+R(9T1vfZf^V-edMUpG!y1#3|pBkx9=e9dD z|Fh|Bm3OgG@f7RPFuN#>{DXWFSB&;^j~m`*5)!4~drP779T$8RIemX9oS^z+{&f%e zd)v%fc(#PZcO$Ity^F;^hz!OkD+_zX^h`beI?yis*l1Mply2el!$A#i7+rI`Hw8RYu4fZlHXJM^j5ZSi2ZH-O*LrFpD_%^RD~C|d+#Po)R4P(2l7 zY^$cUb&+Sw8EWZKQ?w~e{Daz*{g!_}M$fVV~xAOoGP zB&Q0N*DSQD#+k{kGVhOdy;LC*x zvXykx+8bfL!N$esRE{R(>!uNIN{NI6LC--zR@HcZ@h8k~K8TJKMcO|rn8g}jk&@)? zlRPf-@@yWT_Gxye#=op$HL-!b4V#Q*4QXo__~Eo2piqu_Bnt)&Hggupf0@54NLhN? zo9)r3S4qxpp{GV-ncUWysYtM{`Ef{!I$G|7)w$}+FP8nv;V-W`L}V)~QF6!;ajJ4k zJvq{Hc@eyvh`c_>h;47 zzu50Vr=I5^>n476M352clnX+yB;>ejBZ?t1prOVN2_l6Pu)FtTvV0eN8e$tIk2m2Li(`+p_e}H1%z4nP0UEJ6CuOl}LYCA8C*E zTK#=PCr8|Ua`;c}e)E?f*340**;dqyz2`@{OO$a#dX1;&L40_!Wc5CaRIYnTfmi)} zw=n!)9tLFx0yX}q7tR|0M^bHqP<3j-%0p$T!6Kd!fp~gkgp>-CnRzb%e*R2pfQ2hY zA|w~DpZrp1fd3PDKi7ix8wJmOafhZN;*j01nI$)5%MK1?Pf$C&{N_A!4-^f7UI$Cq z+Dyd(|EMG4-&m?)oD6jK%uTVchNqY5dxIYZ0;`Tj!PZ8g z?GPq0X5_G00_SZ!DO7=klDYZZ+9SA4mMP&Gn7heP9H@(8UPzdtAp4_4W8Dzy5BV71 z5*Bn4yepT9lD^6lJ&73wz-trtNgIZ?7}p_nW6H)7^BetlKFwGjlb9Tl^(d-y_`u_T zBRyQEuD1&;%DACMP1ys2`I2O$FCcJYM05j=rbg^_4y~}Dz;Q*7ZIR6vH&d&rC2zU8L?v3ZviT27x$-}p8LentFb72!IRf3b zDk!~AN5sQ1TGJ-BOCRh?iFx_#Wa9*g3%Daox*~M122A(g$}zN_jYJ z>|_jccPWhcqdbn#!#|U?sWbhw3D^%6mZ+PAprmTb(GVWI9x>;C@OrAOA=9SpO{p|C zO^zV(*h08ajph-A>u0X?Q}d`N1})Z6!cTTTfaE?nEve7qva4}HPe}ncBL~FSARrjA z<;oWT9^D;Dz{H}E_yvJ}2FYqo?*JO4fT&(#S=~jh7E$AhJU#GZE<}|m%-+bOGfXkd zw-umPdS>7&DZ^pZ_vvEo;k?rXG;|UlWu$)_iVj*g>AV#mShv%7L)`7JNdwHaf>z%a zwgGV+>DZ4Ox^kSg-LC+0!6n?ib3BPJ<+UC=mq0gfkENMKfb{Gk^LjYm2F^^fwYZXV zFgJ`uw;`!a+n4qtCcjNe!Q#$ew4DGCF!)p8=6oFWz+pDhE5AR@P%=N?i_3-{@v7svdR ziW@@I6GBR)^68G^H!py<>@(;cUL~+Rd2*z2AlwP*m9)+-JTdaJc9-K)KA5N+sYM|I zXozb53H$WAU<9c|>S(mxc&}9g-r8EgrRWmW*iw$+1>yGDD%nONEFK&lLq)-GM~X7& zWy}@X(3Sl62gvsLh3r!nr;VLqG`ns{aeC=}O9v(G=`ShNWhF=un0*#6*Oyx0W$-;n zCjSDTn@z1NRg;CSZ<{p!EZ=k({|9Sk$B-jq?A5udl#So+J5#8uTJIx>8=fcWrTljK zc;r}}gl;R{^~L=&fyrOZE}fWhfQHY{_qi<(OW)nBqHfyB0!)`7pu&MoHGLx(Og}!e zM~8vM{~>w53BLFVAe@4%>gO=k__6BVT4!iopG%FL!Mcm$*N#AZjOG<~Cf|=u&;jdM z|C+KJc?I|``;USy#j~3)Oj5-UJlMISr8ckte_wZl#Y&h%UEa@AEQkp@3VYNcjpoIa z1oirjsW%LRRyTZ>ilD<*C}F0|Nj#z%-f%MWHhyt2xEVuMQ11KW89Bmus5?%;Pk|DHS%{0_3x7nG&`F9w?dZC7qw>x&Gh?P zhtfa%y~$TEvlw|8`Mt>0s1^<34ul!pmThQBz~@PaS&i!T=^!1G@G zy^w#>8R{W+;knt!nN8Zw6AL`JdiehIT81>mRDF3~+u3^cXSJ*|O|uDXT_d!Vn&0m1VtBJ0}_Z)F9sDnT}fU-RaOJCeUC((`z=k0DR7hSy|b4n)I#IL>FaCXSVo z0rA;hd?_FL>K?fUYWh$|+vqlMk{QYDJt7YcyDC$Rul;^p@W~NBL6p>RgWn3v;pZ<&JqemLNe;!X2f!EiN8o@?|AYIZfY>Klw)~=I;FkdqH)N z?CHKbPfrQv`r^cicCF%Dt9juUaVu;OwL+Z(zhTA!nc)IBDQZ-4 zff+fKPO&|`qIZZX8BZU%fH{fL1T3LJ?x$SS`??49hFDUElruao(uwQmSO)I-W5?vY zs&Cdyb&d3rQOvN7sT_^1b%7yrv<}-RL5wj>(%fILyy+XP%GpWZD~jSk@<*gs=i%EW z1BzIxII*#yZNpvLedgUxB|LUzZnxzE?OHbIQlP=&^^SUmZHH}<+RGwECB%|u^$rb{ zzaS%ZVuZGpT-NHGH)g>Jjv_R+OgkhP@5m412Q;WlfUR(FOY~D+~M;a zVo5Ycr*p?Ad+_7bc^(i{kL+M6q(Go&_9i1=cY9WT>F2q~gTxg6Y=vmHX(TAUIuv(V zb}XX~#FCU`{Eu6!2M!KtA&*mOOnKjZnHu5g*GVJuEQ$C-x&{8j4OUPHM2dYN7L!-; z{P2Aoh3!=N&Bhg{yE_PB`w4_V{ee>u$G+g;i_UHh`DoU@5YNs`^?j@{GMelbM|Ue~)EAvhqor)>835fj<-UK~BH7_Dk}#m+b-_|~d1T>=_WC&{94iqoz)>E^ zBhyH2VITy%}A+G^P0>yOTI^QdC zTh;_{e01}Bw*2Ij=M7Omzi*(^rk@w81fBuypP>}iQ10}grU8UNt7%?IQbi`0PQ=N! z`rdm%HkOn760cufuqrN*6L?m&3K&S#MFnQIRykFdaD``Mt}7vaS95h!HQDLJQqNFA zDo{Y&d;jenG`k>$BXWpjOl{#ZCkOVhndY-xbd0g?&kM}D!PSpnz$UI|2}By0hH_D; zwUlW2{+=^#cIkM0eD&Zo5B=!*&5wYRoEjx`xQTDE@_Gdi!X zrf_ofF~SO3$u^HQs*)OyCtW-yng0`h#=50O0JZqyeQXq-+Q_at`?VH#ipuI-1;5;S z?3n;cXY)^RPR9CY`7%7yXOpPuRXih{CwKK>mDb*~QD;l;#}lyRtsa$|^&ox5v_bH9 zfi^k+UwD$5%#jrT3w+~Y?{7$dO|^BWz7HmrN_q~-&=~M(yZO)A&i3wO{7sWFZ={^%Vj>^73e1G|GVj(?NgQ~ zp@)b>RVg@R9x)qm&4A9?-(8hHRTXmpv<;7VWLLnX@=P`W(@r_l*_xkD+;70%H$wBA z%4+{+UvikD*78dDPkBQNjhhtr-PyY;-YOd}MYQAlO>SO_19Xjy)gxpqT5vO8M3y56 z%Z@#Il$1Vn3kA;9kM4_0XXgxIdS`TEk<4zh^3QT1&0l z`HnuN!rdXLS{a(vE^R1dhH(u_i;Nm~mG6&4R(?C8qSK zeT~nzJloaRpO##*t8Q)JpnQF{7+i9@{5g4<&%VGYBow~ohW9Cuo*`k7Xq?V!Qf9r{`rp+j?lwaNRA+ zvQN?y4uVoAEUjCfU@=u*Gt!g|hVDvi6kR%Ol_&tbVKRUZlNYI7$W`C{=>pLta>vC3 zVtEm;#)elcI-9Rg<%mCTG*xbKC-*Cfw8@zDkhnydmGpfXkQhp2=tCC7u34diMx5dI z?l-0XPqqE@lsVW|gMAll(=i7A2Tm!Vn3eJPNy4X_jaC+SCnt6hAl^wzM6=EXQf+fi zW$|;Zo!ccWUs#qwt@4rOGM=)RnnIW@bpfFx2oZgxk#^qLv}Rt0&q1ws82FQByQez< znPD%{d)?#^HzeXqDlpH@EKw02q;^Hp{)zS?(;kO{UxW4p29(b-P&Ik#gG^IkpM}r( z2=Ti5^5cUa!Jj6;+J-+ES(byRj10et;Y!J?`#wA4Vw@s#i9_0L_-OHqo0B=b4_nPw z;On&53C(q7+?J=h@7^pblPQDc8ztI&nfwuw!`WCL;)SKG6{&pvWfMmZ-GTOsA?=v7 zT572NSO!(c1K$!4#WD8#FRc#wz6nSONTHXLU7cLNoes91^M_$-XccQ3s}JfaS_K!| zq}x$nV}wd(zox1Rtn1kt)hqI%U&OLgxTgVbuXDy!gX7XQW>SjTnT72QB1%7Is&fnW z=!|T8aU^dPh?>ZlDv17YEw90WyH0)U@FXdw7mxYG6Eye2+)I;1Tj$l+_1Bc7O34Q< z%W>w_IW+1peq!1rRTYjzSsi{PeP(H9M`KU$6o&}6>`1D_-|T4ylfyBxeTHD6AxEhU z0VnbouzuJ5APNcNeO{v^t2DxZqeiO6K_Gwr{H^y{6qI>#iziG92r8|@8bat%2FK=nOC!=}!#1?S4erB8~%#p(U7#?hK~52k2B{=h}PU(7lb7_$dA zcI}1D&sUZ5CWRdIB^kKbtndphWaBQ)NiS)t(rgqI{5Ar$KOk5YSxVMr_-fZ6vhLfa zO!iAUz9yRivrjEs1Dymdqj%eQOm#U`?F@pGXuEVjOBIv)sd7L0s`H|V}Li3 zDvMS-2=H0ZYm;cRFcdH(pZk~Z8LlUuLH^ujY&-GLb6sG))J}AgUA!o|hGOgL=Y@!% zd9RSy1M2J~FJpT$*q2qZ!foF_8VcXAB%iLx(u3IC(n+)P^~I4GJ3}#;R80h#OvKfc zPSpIOE6gJFAE1r|ZO!qpUrQ%wWv`6bHDH2>0#7Qv2N|50V$Yn}mu%~_P(n4oJ1r$G zo2TKybW=yHZb*#KkC#hA%`a|f_#HfU4)|bJR_}X4skf(*a}~Kp0)%2N-#^WII&V+( zfKr1v^{zcRZuknwz_PpfD8ZP53KkH*skDUg?kI%e_*XrzD?@OTg)uZhkI(|?5oej) zmdNcL)bb<`IAOODub$US-A_}0;rkh-{g+6~Kc~b~i)x2>WB4g(+5f)A^H{=*pWi1v z%`DFwe2A|zJ>MZjmGkX@_2`z6F98`LU6elr6P6&QvF;UBYyonTXJ2NlqX+~XRew)) zmtYfM9CIPL{eWGTBaNyK(Kr=FlLZ~@-q3wbR92og#Z~xOf@tz+fJmRsH>VbTk%ltW zDx8E=;+sz2O0I8f#gA6XiFpBN_JK_}JXGI41dmSR$lpYp8f*~dI8fqAnfC~^A%1R4 z=-~2lDX{zM?-z_}XJvb-{4@ayB&*4`;?G^&3FrxZ8%^&TTeJ|wGO{X#^}d)Xs2hy! zp%A;O(VHDU5mY~oa}9jOKxzEfB%lJva(>^y>SR)z@-o4mi^T{oM$jq)%M zWOFlb9T2yn5q7XbMk7PRA802vGIFN^bnqrs@+lb!D@Mgy&0dZRRYXO6+A|d=N%#WDUStVAO}A=#SiufwFk6W>_1+zHK1wW1go#4Y;qgb{`7+k ze(X1EEG>Pbo;XAwVER-GfGRC=G-)0@Z>PwL-k511nKR#vTDakSGJz1hAi4vxOi#d_F3&<~U3eQ-=L%)k3uLY(U*=CI3ZJZc zZNJs46)_C!3{UJDCETAiSIDKd_cSzGiE z^wdPxm?{S@(W=js6F-kTG!m<2kT9VWYIqtbA9HG;m%BPld^Iz>dwST4LrLj!@)~Fr z;^Tkce4Wunmj5ZGnDqFPQd_`h17&$J?~#uT$-8;CgFsa~9)F>zQ+2dl%EugE?I*&P z9Rge1xl7&8rE@d!HLKEl+z>0f(t!)cRCjw@eDR`4&;QP;faj3)puBsU{ppQf67slp zG??j79Bv}*dS!#1E`tNUz&ir(cPAtyLV?P_71>S$eKF&|0P3St7#Su^9VVy`3?y(p zRWZ}o1#cME+SXEPhhSa93v+e$}=V6l_(N+I=M0*r5sK3#;4$_pCebD|KKyH<-9S2~-AN>Vko z^uW~8lRQ5K!E+EnA~3R~euMqwhnJrv60<*Kj;g!7OeYZ3>*y$-?IRNEr3x!lh`ec? zooc0Cs%dN{cUR1Ew&Wd16~-gjo9f3;$IItgbGWEvtcN;`f!~~jD?Ot5CwOyj_wfuP zH9QhFuDifNYq2QjUu(g>w$AqAectnu z7MRU$NAhVTA{MzoS#{eV$9Zy91WC(47I16z5nf*=hs7{YOHY5a#0prDal@YgJY~ps zg#EtFw1ob_y=3vMS_88;BU?MWB1eeo%YsiyG>$^bS%ga)iXuU&2J5juih(krpIiZi zjvsm*3Q4B&_|G`*ZReeq8qAT;8-dA}C^*?!krvr=;zp0S-?eZF>rLNt@ze=69@ZRh zLL^U#lDdX)%H>m%(5DDizI}wW+Oz6GDBkf=YMUT%vbAu{`oG(v98{fGI$7_wP{cRV zlm)V0#&ceulvH-{3TkW8&^CX5J}M8mgUA8C{5Z8K-_L%t~3ytKeOqf-j@Ju3O+ zf4+GcdN6mqWI5!Zd$5xmKnBchjb&}f^I>I(B|xLA>X%8Rl7&? zfS~LzI3$e&Y!DE>FjRo3M+60nqO*U*IA4Z)5Av`PoT1{7&x2@-de?Al&HE>RH9E)T zSwUvt!UpO2Oy!Gt_>F^JTuA@_v}y%V|G+jd6uTpzY~geX7P1{av1EQ3<`-k10WDDw zk=SCSeIZ^nyUuB&1z&3owYT!Kp#z68JEs z&d{$`CE5QeeJ{w6{1h*2Ld+DnkweHmS#r%`DW9^0+Zi z*3Dx+`4{k?6kQ^+&vyMqbPd52KT)p>syP8h{SMw(Ypb{n&BS6)Q}Td2>HNgag?i96 zh~|hF?U*W~&hN(ts6+G%rW7x?Tq$)8o(ZSa{6sa%=1J{sNR4KKLBqU>%F2dcV{g-5 zHByqjfbx;?PXWHdyuNGC`-j)ZcYX|@Nl>N@T zh^V7}21sDKFhB5K{^`ARg2dDPBwib;3mzCQeT&sL_rM!na5!?V*;5=YJ)SWBajk;^ z!I{BT37-2Y6u}qrNoP_BueU_znjG`I)F9I05k{UH7BR56%O$ox{dA%K+D=spA$(Wc z#Bs?^)U6RMmU(-@4;u@terdA7XMu>Z5h5zh(`Z5Q0_!ZumiVZS8R((V$S6z%e(d}G zGB{p4Z5d@blWb1&$rS8pz-G6SfjjO4&j25_Y{c;52YV~~;@P!AdFv_F>M&y{1Ic0+ za|&fh;k55o$y9k6(wp(wek9tY9K6f!c8$US%)?l`GBhcpTsIVgN-&wx)yEdT3OPL#X*PLmM8X7jAZg<(~0!sfTT0#voDZN)9Zc>yvStd4C85Fajn1QAAtC9&P3AZ4e+n@$RBh9rsp6`hp5G z=3uJC+4Kk3vDAlp#d_VJ4Qe*r6}m5yMjd8&ygZmty{LfWnLIb!Hh%g`G*-Cd-eB6u zodAW|Ll_3t-YlvGtf{6q`~3+Qy!n$Qod#Tk7U_|ESDqc*PHic19`=`Bgd=+ZZy!(a z0cpzbD8CCk@F}Wh{ea=E)Bj1E zxhH)sj;JKAfAo?1BTwkU(^2A0vH9Vsnv&~Z0@XWxN9i{WvvBgpRby+pZC10X?~iW^ zG=GPh(RT80!`(4KW#(CDdLMxxwQz5q*wI~ZK{1jg^!kpQ&7<_D~wd-?JCQ>j(EoMEX_Bi^pWBg2&jb`OKbpQ_2*%mtO;O& z&4T`tYosTq-rVEVn3*xvac<+*pYYO*nX(dzH!Vxw$J+CwpeKc8Po$CTtKsqckjJDO zB9%)mB;{Bi-O2ts1D()ck@?Mzhe3`L+g1qzgnRB+Mc_FRXuX1nk9<+S+QXNx41hD` z)^@|J3({v05o%p-{nC!IU{-k1014pDzXrn96#LLNRH`kvZnc!El)Q0`xhu3`aXnk+ zX9?h1=(`9?{f0FZ|3D75kn2B+ATlp;b^|rAbVFc4drAo1J6$!lw9z6{*F@Y*pJ#zb)vb%lvU^dX;5ouqt+= zoV$}-x_uAFu!ON92*8ZgX-!Fe0v&9{cc;7bjxeIxxK}|i7M)2VelE4U-=y?t!&hWh zTU&$FiR4*=J!t7BMfpHW?H3VvB`+HGDKvjwL%}rO5N=U9R*0NLuM%KJaIJ;$jaEd| z0ysg*v@f8f_XgcU>e!X2Mu=rO87Bpmjt&Wi${H8~n;J~Kg4F7RPQf*&o{X}GP45vR z34qBv*CN%Z)i3%Shoc0wK-+=ykK|ho4;wT59D>^Xau~j8YlW0>C-fruZfy{VaeL7@ zLeFUmH{=d5fUVK(2F_c|u7Q1MY(eK0e#0FyV+>u?&7uL)bF58?)YGyh zwET!nDIT>REqCIs%>-Jm?2BehBV6mjpD>?YefUm37?7rP1K?E1LCdR@w1m3wNSzB) zc`&N-xj+{{l%_J1m)%{ZV&3CvP3~v&QTI_F3*#ir_0tHkG8OGTCb2tD_Cgzoq858nI^f)EEv$C`}|16tiG*ka{ma50C_jueL!~>;vZ>x_Qx@RW-0Cd zM!uq!wf-QyJ=jT|vbJ{KNXH~+uI9Mx@IJ?+cjh*xP3F(Jr=vhY+%T0oL_L88Rw`i7 z`33P3Ymwb-Es9igfIv0FLsmguwlVhxQiS;8iokp|lM7O{tAbf@M+;>FhlX+kgLSP0 z8ooS?I#PnNTIf4&8pOW5K95MGMry%d?L3hSo>5P5q1-ho7a5VBJ+GD<*N0BpMwW(0 z6LXLMI`WLc{v3urLjxZ9UXmz_R$IkGc?TK15oqZUi+W3Bp`jN#i2Rw{n-JZ~`G|L7 z{RLsToCR&K&6b{s3tC0T;uiVcn0Fvg!Orp^%IRF=$r0kRa~+Z|%%6eSS(S952|7!$ zRzmYsu3~w9hoX=dLJKWG&%CUn6aR@0N5)eNbMXo6FB2p$FWnCM(G`2yD!{mp6OyeB zU|c!8-BW=W$S7Rytf8+ zHJN~hunm|&n=eYL!aW?%?ikD8uRu{L3%&0Jh$jD_h{@x z=t4BvWMgc>+vYDM~}=IPJ(PJefJR}`O)0rH&p)T6!ULH)7IqBc zs<5g#nDmVmu<){0;MqD=eep%t#Dh~Jv^Yd3rFNEee#6~dZKleq20IBaet&`JuyMoR zM=$(7S>qd2$3S;gt8{ffx!<*>$yE7|tmNyNf5&c&Y|A$&wCumW!hdN{fakgkh$l%I zgdW+({U-bW{lxGu%$ukFsazP@6;xe)pnM81&-7f_fk{)%8|Y|Zlmb5t*CjC~ye^hY)Udulpqs9BbPy9zB`2TuwwBk^FDY99h#Yvn1LJkAy%dxQo zM<}l?m^Lb_AW$<iz>XsbJhmH5M55vsMhh(?g{Uai=FPJs zX0o#~!@3du6;OqP9Uf%JE+N+zq{TCm3We|j3QICbd9Fc<3P}_gt@dK9kQx)E0sjQ` ze1u2^JpAX(Adk`jM1kb!DS%fg{T;Gj9boWoj&DGR7jipXT>5mm@!=F4zP@Zt?;APF#u7F3Kwj_p*-*t#6w*y z#0qFXW-jPny-^*IhfGbLq4;|dcWS_nN_7>LcO4Y#`uX$cV_(~Oo{XAsMOex;TVy~k zCWmt=is&tMe+M#t>y8pYjyZnqKqw`rThN@}Qq|Uc6CtwK7?waWHaHwtP4}(Vd z_0QWrKOvBAyp_T6VuNful>8cq6+A|KnEF_7QQd&fg)3FqI-J1(a|bz-M0h_%@#RQ-oR*Z>f=rYX8{VPV7#E|UI*Y10Ij7c zYR(6l7*OxUTS|PJQ}ly79Oca1y9jJT3Ad6}`X?+hdk6CB>#Vkul*?~Vhq@1PI`7>2 z!CR!d>5$cs^c*il>LjY1J2r*I~k8-U5l60o*P}5eAji zu}j$9iF8JIt{0dB6QyjjQz>6R$nf3n;!YwV_q~SN6ZuTEaIm({kM0|nddJl+=fMkr z0vn)n0EGr13DWc;Lo~m#j#(gY_cM|}B-EDgef5Bts9NSb^TIv2Y>ej^fe={+LB!q? zJJ#_Kt0l0I`M^xV%G#L#a}0}E+Zu|k%lnM7{g?om^5-WH!hy5{7uy4*YVp_=HwZXD z3r?d#>gJ)1wKNQk0v<&Or9!iw7Xj&$q?pnfl#fQ^j+Q0z4lSN;HF89@$HZK!Yf6RhFL$fQ6*Z9EZ+8vqu$$X~Xno_AC|=z+NvLD!V|>2k9>_*MLT->yh7pX@%G zw}L3mNq+}t$V<-S9|TO2D)Kx@n!fwC-QdLa77$RNH5K&<{YGI5hR3PV_S1Xr0EAZh z_a8&(pu^5>(#^x0v(U9sHaqE|i=HR4eyVgXCU{rk@d-U}Z#iSOrgUXs zB!1EJT-nnLt<)j{7zf-#fEj$k>50ETXum?W9@)=u?V=Ks)S=A}BL>i!z$fkk< z!7Cv-P0>I6VU0o{gSB%+Ta*@s>jH%pQwq(pubJhBmlP1)$0eb6-)a1L@!SA(*lh8v zRIhAza|H^)g2F9nznB7bs;+e?f7V}UL*50G)mTEbAuU~pPLRz?m(o;p$_h6JgQX{6 zTxKuCTRMCsNK_&`Di#A#ZBP8?CBXMj(q7Ga2pW+hkKqYsRoM%h7q1E79v|aHsYXq! zPHb7t^^F_~+%VV&6TQbX7}|Pwi&(KNAm+AS#y5bzQ6UMX{I$0$ROmcilN7BijL4K# zXTuj$^fQrbAqtr7NeNU)MT2H3VQ$2VuhP7dlZO|siK@`=Hw*hdLG*6ou-dVr)jSqu zJ%^sq0Doo)$tZHAR6cqQMZ_m}E=m%!Uo{~C=|=~W;nQ7846URAm1{ThhrYlkMUf)P z{9Vj*uG{?61#(?S8&VtO-#=eBdfgjMI;i+)%6tucdgE5k7$7*u$UouVsWb(CK~zBj zz%Le>%OJ3Wa1%VREGJWI;bG)fSVcUWFWz9(82{4m{%Tm+m=Tw|)c#^|o# z*U?*TegkwH*K7=VJ2K1re8C)YeDxrkWMTg3OR9dPHD82Riph5i>c!pPHPXEo%tjtA zAn4ykWB{I_?nPkdMJ@k=cBQ)zWCxA?0FHD90)NuC%IfebP?Oh8Ns5BmNg!-y8v7BC z{NXanu!|3`U5nI8fou5=sKSBPRX`n~tTl=b)Fygu3Nu{>{QW$V|A#G1gZa?Qo`JJ1$~4=LMpvqVzSKYaT;604jHDtQOj z@|A^A|73rE)b*q(P#Wpme%Y^henH!uC<(vV%B^#OxlpId7dq1llu*XPL-NCTLuZWs zvQW<4xK}Ssr#eeMzSz(-r1VG0rMAgtJ~{)i#P%jlFVnlo^t z7{g_Va_;@cVkj>kpLMMr$RW?XyTFI%)~D51ZcU*CCQXC=pCWlDlKrn2MfF?DzW%wx znK9!9^ReB_{tzS}4TR_8=FcGqsosUAjT7vcK9IV8=TE#D+im4Z4KuGJ_+JNFd78?Ei8+su8?ZN)s z$^WUYT!o?;93IqgI$yJv1@9K>1A>JYK5{FQDag}a9tGnzKp7DI;vF0|bvg`H@wW~N z^LcyWS@x6!CyDW8IC00_Uv%69Z_`HFN>`3-R`1_ZZuhJEjcm{kgz`mM!cYUgfHA~= zTKE~jbc=7*0J**oOjm0I3UE&k5=qBhq!;_tA<4na((6N=FL3%nhHhWo0&HMyXD`>k zv_@uaLfj~5_9w#uxi=eY*ovOicl$NVrm$UQe^hAim~7u(M;OOhIGF@8;%mHIK(F4o zdm!@Tf^HiBdi~D9av+V=BTf8{A0XjD0DV;Dx+oI3$9n+ij9Om6>1v>CDX<%L_J@y_ z%=>-K3eu1cA`5hi*(NMUSm3hMtZl-!g9i4bmp`sq0pf5FIyK9d=_CEQh4s|wnaIhy zoE*VkENXhT^sY=RJUY|x3LHQiGoNi_9dgv+sIs99=#|B$Wf1h^2!(qSAR_ z#5F<3iSjnj!iKAnbzA4$&CHhD^mO+2-06?@tKL7J^N`gWb2tID*Z{?%{f@pXi(r~% zswWQ{qzRdVT}gP_GidM|pj|y0BM(3L)FNEJqnm=Gm93}W02iO8(#o&<(VizrD=vR! zCXTgZc@%!AA;v8uln6fn^eHU%Y|9a=3gpp7SkKqqhDXk^Q;Pf;ZIThT#N_r>0+FdG zB}%Q3pB}L;As$~DzT^wIr-)Oa8?b5O&jMBv0MoG;OyE3Y(5}-&ti!2pK#U)9kllkW z=bn3cI5E_RA%EFnzndEHz7h0mZNpe?3l$Sk7mtPr#4ghUy)qimqn3w&t>37(80gkm zT80+w07zC$tuD%}bMz^T2$J8n>laL@&g?+liSXY6%|Fq=KcG)4%5~W@XF_q;6yh%3 z0damphA47ffaSiV54d=w=b%vlZM^kjgYE85sMepytngzhSlVT3AB^tmJJ7_=T!0De zFyROnLCCxw@(=JL%l#IG8)pBd&E0f7zvBCA)I3UR;kODS3iGb&=7_-DV?KPNN4}2v z!jh2LFz6C=V%&D12`7-4H)Ly{;A8iQ6Y}BPQAmafLxp}z|K=>2YhV<1$rfkm`E7v0 zaf~b(?a&x}q}=QXu~tbOVnfP=vYavoM1x7-kABOM1* zqddbGvG6M@Y^8dgI3eck)4mGqw8>PIk&w>a>&2nUFzHc`zn@_o=k(5g1Up<`wvI;C z)n~A`6a39-yGK{8w;DddaDKhZe_Lls(qtMR;t^C9v=+2rTE!!LGE49tOG#vTFjA&K=B}Yb8=9A4HULODOH8Ifoot~os#D^(?(!I1G=uhuMze0^VtcCj zf#Z{A;m?Ej^#L%&Y!kgFAyfqIV>AR z5}h>C?j%};5*||3K7A;V%v#J|ICn((us4H@#H682inqAC?=sMU+L{FT^ItW&J>0b6 z=UQ`N588UrMK;-awNh1bx{Nx9G~cVvTtjS`t&?ePvoP8X&Q*gj7 z>21&M6YY9cHlCSfCsq-!95|{T8ihk}fyOmI!fI{a|%~i6`NL(w~uW1aWn3OTYR*LY5gazv7{H2|}PR zkHVxk^snO%nIA5$6r&wm%VF07yVF?>=O!-gfR3dkx9fvl{6opX4BAoykS=7O)hsoc zOu5)DSX#TE!{a#5v8#Hf*bBRqzl$cLQBg!>0_YP|sG|Ye6MvtK5#REGoU0!2;ibb=otQtx*gV5P!py546)9!YhV5!}9#Qu=;v))Z~O+_JX>nUGN!22WNxYD1r zSt>Yp`BI6{NEDw$5{g26eEBItyPoO`ObK$zNU(js9j}6?=RnlYGUz?cmKdlo>wE)> zSh|f}q$6#1*ron7|3J@zYhaoEam^-mmq`GSv$Vj+(^=y`Qd$cxK^!n2>g zvYEl?#ZDe*bXVV0E;=QmqC?oQHnSgw-5|=RWywDO6XE+PlKz0+qE{aM7&4F{?2*I? zt$U{r;FahXoW==3yof(l*pK33bqCZs#Abmz+S?;(eR=D*mJ${(b31`S_KnbU3k zHNI~PMm64T=(S9uj0%hSBt?K=>xje=N=Mu212j}ayH58ViB&q{8qQT-4Slu<SPq#RBgJmnPE50=$X~b%d_Hw)TqQVB#j(BA7KQT|j@#9EP3QBgNWA=RX!1gk zN#BWE<2Iar^iBFuy~L)-ssO9zJHG4vBtM2)$3!<38x=t7fOWo#K3- z`Nse3^1Dp8cXvk__1XlRg0Kl|EAgg6gwUGFFaL$ zaF>TpC|+ZlOvw-<@J^<5e)yE@-DjY-3+v5&EW#c?%gNO*3p+Qws%B1OknZtQb0+lk zp=QI5!|y-b*xYyp9!!=gd4shQ-2E=$TzJ_q-#|N-2u7l*!tuHol0t}#Rc$NNnbVdm zwj1kvqgqq;nQ;=OsD-~>dC5#ILGfEjM{a;T;YTFC9X<8BMASdL($%k%sMn?U7$v_( zu7+Fw)T(Jc`7F*t%~`0$qg_CSYsm~pa0LIPc8{*j9?wMcE90jtB9WKr7=XTEnCI(E zFt#Lw6RS`@Sv!nYBG;nl!pj2Z;w1w_5*J?W6WL|9h#*bk0&JwE{q~d2klEpEYrU|! zm;OTSXLz|(V8%G}rhBB2;2|taXQq8gkzQr;dLIUXQy}y#o$984A$y72r6JnJ~|=l;!g23)2dB9ECzXCqC1OT&T$Z6uUe=8O+%BF?QhL z3*(%{y)%&(ns^){D;nQBek1DwU;otUkFhrINNtJ~pvFcV zC4Xt485v{^(kBGiFHK(Z;F#X$VLvOpddHDYYEZr`T|Ni?CT@nG>B-zuvx7Nn`uURq zR8yxrJGOy%day)${+ya#4M_cY+@uw714+?~vf!Lt=06KhBTD>=oQYv2#Q=UF&m-XY zavOLgbYY=f41XMNdBTb>H?864`}M$C=CRJfhZ(nVEI717V8R?XjbZ&&PL*cy6IRwi zh(x|BZ@*~y?3(0br-u&@aA}I}FV(M+Vf@py{6=E)Ra?(!K}FN(*t@MOs!9@=YXBvi zX=s_wo?I_8tWw~vj{X`w$JV-ZX9Jt`mEetg#4oH^hqDf6ml3zW!gb#~EF;7B={UV@ z!|xeG+s@s%6ArtiJY_4~h(RU&>m~eFyk~Z>TK$qVwC65u5q3CA>bHlFPYPP4@wNoo z@p6YoH#cl|ZeI{Nh>O$f<5$e@cI&FpXfaq%xxHQ;o(;{VQHzCIy{1|rww+r_`Sj7f zv3#!|ftRyqRmS;98mg8%nHl|397hzQKU|*^ElSI|!_w%v-qTF<(`1W{GWQ}dRov}w zgB3MBQSq$%QMF5?1eIAOMM*l6o&p>3nF3ZcGSm0hk7MM4n>LLEuB9i@m_PT0o?pD3 zd}7}8meD1M+$uH&y@QV&ev==U++SpFqSboB#cI`;q5tTYVu6m#A zNk5v`Fxb;gCEW=f9$omr7sft^Qo1nTWq~`CC^k8{dX4RonJ85*%=hmlL5)zr<->GZ zxSJuF9v^|v(-wR*P@|{#T1nNGJL~yhtV3r*iq};O_Y8HyeK#uh?3$rxE4P9B_J=&lcN*HQXh3;cbn310tWW@gmz=ig8i`DLbyw3HRa#pF3@{8%yVE zutPcR1&T_3lw+iNRXsjphG)=5MJV8f;dJto8J6|nI>}n{XBrIRmUEJ&4*^4cx1?S*5TLX)2M6jcL_TFK>lDj|MTKF)yiQ*>cS{5G}fxLaZLdNW#0 zM6n0N9Sv~M?nXd|(OIXI7Yu?fS9JsTe6`LncO)cQTdZco44e0T`qi8#bT6beD!O^T zhtW~I!9DvtK%-;>Z_z^*}gx`~E{%^*AZ2PzHyS$DZsu z+C-2(9CmIc%PCFd(XQL!PZ`>uuQ9fy0+L|xDqa~JXqW76uSJ7tniGB8t>1{6;Aw_o3f*vG|6E$-;w$|5PJpXB%%TF!s^Y3QXV zl1W05PaLbhCEPf~aCJ9T%2NW9YtWSqZ0Px7)k1a3)ay6-EUVSGPCOC)?Fi((1r{Sw zqiJ%hZG?FKOBixEE;g!Oo(p&Wjw8pHK2r9rmtU z7B$&$w+#hWX-Vq9WvYVkxis`26a;T2txIW?j_{aC+#X5t@5ep+wj{c6>$&U-I{1 z{@*Q}sN(ZC7UItwp+_|Zn83n!1qfilE$v@(OJzI3$-qj(DYx6%tY-plyjHBE!{r<}p)Wh9 z4kIA0Os@dq;Pve{xW}>&uXJIDSg20>?4KgE-Qz`A+@=cz*@cFXn@~_{`N{JdFIo6M z-UV1xB>h$5MB-ePfn7RniJYwfY#mL9-wpoGy+iWkxJ`}pJs;GJ9W;CXAaSV(s4g9Y zB>;G%Y*zum7>L%X?(7byLv=DQ=38Yw;}HahC_En(iD@slWFWl)V}n!tLzeI!BVQdp!S{_cnB>a@ zF*Rl~nF3y+64QPu}835d1k1yjQi-=-C6QVkD<&01)kTC^|03zhEfz{k!=%6rJUrSVRO4VIN>6 z_nTK&LDMn@1n%G&fh657r-w=}lh0@;zxYxVvcfzg$CY!2E7N3uVX_B6Z1f+w7`KuA0g{=G`{zChxM$0{*@Ou@?XFW9#1Y zAc=@6LdKuiUFWCt64E@bHv<`Y(Tv-0TE4THRID=~DBF@1UBrZ0PI zFn_-6jVRJRaX5qPsD1YixS1xttzv#zWOTNtNZ=kv;<nm=?}KgsJ&z=0N|{xW+?f_7Br+nu@_nMFEX0te1-mdLqjBdz$@fZa@no>Uk(c zEBvVIXI}s`uvk_qKL&QyCaUibwst@@!aq~ZbrlI|@G@sd?t||tdu6DO>S<&p+<=s8 z@768!pU7h9n9Vqr6%7^Z0O^ngTB0e~zmt4~xleY&1?CQWz@UsnP6VvrfkhW~62HY{ zaOM*sx!oYAv2>R5{4=E{F+pa-Xi)3pI^X=w+~;~aPxKCAeft!-wZ{%fzm7SasDfua zY!Z9=!;Oep_h?R+8o-S3k7On1nbell$-#s5p}5b&`7%xiztvF^P9pmd6AhU1z78aq zB;3YErrqjBt2tWG2T8`on}OOj!l`lhA=$%GG>C>G7#tTl(@2jPm*G3NcJ;Hue?R)L zf4GP|-N>KW*%NXkj8R=9;0&rsl+H1!{eSG`=1aZWHM1we=%r1or;|%#XlC!p(yuPa zbIPaFfv1$T8NSN{`bW#~%-7f2Y~Fn`R>*(5wtJ=mPkby103lh3VO0iot3$FX{>)dp znY9$NVQ=x`PMd%o=Y(dJ;@5=aVq5g`U`q#s*`~F z`sK6AM4^h?pI2CZJ?6f?s#(j4X}5|yrLorbi(Ov~(^6KQ{T;-LFuNwcJU6mGO0a%M zqSEA^3Gyvu`@|EhoAmse^=NyiOKF3{iNXG`tv>7cn_k9Yo_7zbq%x~x46%b}*>Ulz zOZp&*AD@{nyRIR=PP9+8K8R6wb-Yt)=AGWWYcFl+2`QnZ+t*tmU6P35vTGGB3NW!2 zi*Rl~*Cr@Zvq$9|5~CzO6dvGz5@!DPH?3g&_Fzo&Mbkg1HFZPr$juX9>7f?d2)roz z!~<>jfC3WQL=L23jbrr}hP9Z}_;o)^DKl$)SsIsO+-NNQOnO4F~XhU*|Q-NgX#LX?fQezgGzMJ00!-jY)e@U=VnR{F5g>6**d&Ywd}O)AL8kN8eBvKDqKW59kn zq^WZ4^AA>aMzw!Iv+kV{eSv@BYJn!2s^Je|$n6$oKvH-{5i1=D6hvBLl4{HO-yW9M zQvlWiMM^@gN2NeyxGdS8NvnuG5&4y0%C6IVJMH^h*1m7FCE~|~4=2)3@c5eWy9!;w z*l}UIrAnf++-YrTSOk2Y7TEIOft7=Ei7e zKaraq$G51h!99~beDT}tFMkk|I`4gWOUXUehGOt0<&u|i)Pzwp42|?L){=oAeG@M- zSFpi0dut4k)%2I2DitwK!lU9u=tp|6)v95u==TXv6(SJ&{gsRvPQQCA-73}w_IzD( zyg9-7gC!TnO(7#_+?ls!4$Kz*f<(g*C!P)e5|j(!2)v&rW_+ULb0)N{8JO4r!c{PZ zlN~JieJE=zd#7Iu2|B^U)ub@}T(kQ)Rcb(mgv521h}Ea9952!4GC|fzLoTc&1-Nn| zpwoEjrmc0YK2{ZT*%c>q>>jdULaS0Fx8ONy@}x}PCMQgWtjP8HPFG7&)1hbY2#$i= zAXC)X*Sp7}8g;+3E05MdUkWp#5jQ z!}W%ufN%T^cgqbFfLfKqj)GP-E_}Vz4I_W~U2>`I&06PbfHlUT0v=lk)T3in+;!Vb zb>B-HkBYHMmT4C_wN!=t4_(4S_9a*o+C3J0;2GrV~9?)sLPGuSi zz`VAb-Xqa>4VMxn8hJ!nSK6O{auaf=jLweXZ%}xaZ`g)+DAe>}tIph9(KEJY9ou|0 zeA4UF^ENbPai;0azQAF5!QFt2xIUbdPO9ga@tkf6fivOE!1GXi5n}XVn2767!cI93!V?pOb!mze4d${2)`^u+1a1j+4j0=r;ZCYmR>R0 zynjECpC0|EV(0Wp-#cWQz5nz4qfwJn!wf0*$K}7?-;L-9PrW0)O(Nm4ygxiE4M2jE z_(I0Csv0rZZWaG4(GVnev05i2A%|3Fh|nMwx!xd_?9j z=ugXOLrS!y)%Qx`uq}_dtYjfM$$#z+`aG#rIrXuU?rFOvA|y&Z8+S zj}2HM6g|wQH;`K6w#t9&{2}C_+)afoCNhs}_D)o-X46U$e7@xEPARh+AVAt785ZD| z>s&SRvYKCHgm99N<=i$-hxfJVN{1=(*9RJotIsynrp7%#t%1#SrF>jlh*9BMIFgli z85#J%!pOPcCq&k1fVe|U>dGk4Hb|v^ORein}`ohh5c|7$u~C`>cMWJI+sANMNyfY>g86%9HxmYp@a< zeux-C5#y#jT{aMSI>)8YcOuHu%ujvfxt2sPmz#{;Y;{C+0moV=82IFTwE?P!zkMZG zHn0;aANa@V-{HS?d#~-$!KAo1Mwhr!k<6R24n&evb(~OO(hBCZYT1(=g`M>)^I&PB zeM#Ii184pn+fDPu^_3kBB2cf9VK_f3kEn;nyp*p%fy?pwWyOw2p4^oOZejs!6Do7~ z=qt``JmCDznSC?p$Vbx>&c0cp50RkJD06__6uM=G607aw>&HOt<}7B(E%K^EZY<(mB?rQ~qWb zZ8<}k+TK#Mil9`uoF|+WCZAdGVF*ztZd;Suv8vyY`-It_A=-Q%(V?OpKxZnCTs@wu z)pEa)4n4eSLD|(@U-;DG1;uYrP3C=AF#p9L68n&LaMzummjs_trz5C+ zZ#?^kvJQ1_tPRLXe|s}^Aq6@!>y2}P8A^d@0X#pdv#Ec8s|`h$m5;L`++MhI_l!8B z^a=fBmuf=BG9NY)+cJma(TZrAVoM59?{<48Dz6nz(XnYLH#l9@QZC*9z9`tBm7h(` zbi`FIyN{y7ty*}c$&>%mQ=vUoz|w0XGi0#<9NjYQIKKfrE3k~1b3`LWm((b4J_fAk zlKLD|o_~flQaI!Cr*oxz*WWS@EE^ZB~2CTgiGZrr>06%r5}9(l`A;f)SG|*(foG$g*ys5 z*`rc%)!AhklF)NM=+m%I3M(v-Sh=azcl z7N5rUtU?R5{`mX5Tk@uTBe)~PKN-4oFw!%ro=%q$9IA)r<7mI{cYtfVAvKaBpM;x# zMg|MBQ#^Z}U!Iewb9p4%vXd#@1GKP#(t&;13E0rzQV%q3F#Y@;Iuj`Hst z_h>4;qGX7_oc>UljWZIYl;9MqW*arDGfU5K{M0lLt2YoMovN$~^NJT9Y~jqfLQHKJ z!q3>&+U_uLBFO~xHWQ(y7n8DnVldW>9&@$vBJz^dpygWOk7a18sh3p49>HMQ4oC@~ zKg3XNTFZ+UW$ZE?yRkd>uN$GU^lf&wC4rjYIZ^Y4)L`dfXikaj2&PEe_aGVFY zyTtdl1ue`2_1DmnA;PSN`HH?hL)FRDF=kxk%z8jmuukwbe%VH+uz`ft!tH1B`12vT z3|a%AT_CL6hL#{AI&ipL4DeruCF zj{VKRcJKpLjm+qi#7*0KHl3A49wuu0w8$P2rb+61slynnVnm&8fx8_^ul{E?A{0fI zv-$JuHoDzMxj#(r)X4M!gr_0ge!GZkNEeZOS$f{ZmuIKMYy6$__JPRDmY_nAETB(X zOoBMtI*;M;vIe*FU(~VdNV?G_)g#5GvajcyJypA9#U)HtgQuU8t?H6|TcWw=WK6$4 zx$$Z)(Y4wNDC}K~jRIVZ^6{6kyVB8+bS)#Sm-8`R(1| z8GIx^TfKN{C05`%$2aW> zvfB<1W>$W(MOm-!>^I!WIt#Akd!G*QA{D~0$64#%S9({YX3S^Fw{35S3j``@T0J`# zcmC43z~VD!s(*AlrIEd+!Rz1{V*VO_RQ~5>yKepepGYr*uz6+R;odFiD{K?46#cag z++W$6cp|KuIdg3;ccYaytmzI7XGV;6gEGc1x7Tn%dW6)AE_Gs>!Qe#rF=nP z1yR~rK`UDkm<5wYEeo>!9bV#F0hnL80nG8Pxk`iVyrcSEEb8!UvcV~xRJ{VQGC58& zorw7Hj=;+&l3@}%Bf0g%E1d|9MVj|0eA^$-!WCii;at|6UZ`(=a_WHJO`I_+c=j|v z{?-jwd3|vxSUPnJUq^vv-tr<1NiJ+k!x!PrmVgXkwg~$uS@aQ7YG!}|W19fHv;#G@ zAk%QtU-Vv%_vS{X#(~JdMhn&o^L)Q*oNKc2ZhG@?5s8b*NDCp%hQiYeK9=%*>;?FI zYOsC0QfEajSpKnKOU(3ZK(-F9e&FNs+t%TF2^;eQ#7N)lTPX&kQ!(Awy&kv)_;nog zAlF#EbN5Cc#ERTlTpn~Qg3f{=1yrPRED*u0ZKw z2p6LP0<`8!l5&A@HT(?_tk58HuDUK-PWh@_iwnc<06~lE3V8dRE|Fa(T8_V)rOd*g zEaY9?0r9Og$aA|z1fNWi7==fC;A{(5Osv=;9Ssqca7H!FFsI^P(IxT|<{C%}<0d+d zr&&k!44U--7mDE>Nof=uje10pT^%FmsPz#S5*!W(q-i|R$x2y+2IN`TpD+om1zKlJ zv%^EfJsR(CI5%4BuirBYo&&^nwzf((tF5QY39#T{L7-XG*t)i1-O?|>%vf8W5|Tg* zAqrYBP78mn?#Fopo=)43@DT$Uu~c$?yC|4)Gbb}*6}E`ju0&kkv^e)4qYsLq_#pJG zt*KowJCu!q5?FAJeOm65@rEjK#W{`$z8&AeU}a~67zMM{}m9cAD#O5 z67z>e+PiL$jIE?)(%^PR2tP*`%H6U70@D~}SZGv2BcFm4rPD3UhPs0IQU3=#s*y%tk!9z= zM9jiV$S3_1IHF$%KDom2JMi-&QAygx9{em#v!2}vHChHzV;o|b1%Pr;u0Nufp~A6; zF>2yszm2r^(Q|Nj15qZY`|b=K4)*4x14f3^xst$!8IX(msZN$nO#{LKp7n(PnaBRw z%cn-92E`K``sh=z(}rE5HYMTOt5>8CA*F~Z4Nh|&%Xi0sl zx_b7;+rLFwXH#FQy*CACT#+CVxi=2LtgftsH_4b^L^AQaG>}ACD0vBmUITtC>QtMh zE->N-vhTsNgNayJ%Ay^LlfOlh>WI=CH#k?sxge*=i57R2{q7Z|-LN6sKcGEOIxU$* zIG=U?ldet^#R5DNf=2|WkArApH4u7PpMG-Y*Y zho$9_N}=LI$hpI53uX2QU+!B#(Hx5|xx55COaUj|A6al>_0KziSAqE~o!ZUL-t@Ph z-L3=~MA~g?#Yy#$-<>mYrOL7qt1TJuDe9a`Z7otI3gj41Nwu1vkvAi7Ckbn&sQO@xoztm<;m-K^`>8-EdRRFJzzQnnIFh|78uc{@nb zc2iX!CUlH71QBUl*_H)=;nXI~RrohfN^EVC%Dm$c7dPrO zJHASP=v>xe`j09}P7mk11#%0OI>-?s@%e48GI!XI*qmc37VdF2^XwT*_7q|iI4cw< zv|zDbJl`$eSYa-Oq?sh2K-#g!*6WjLnPVf=)& zJ3XgJlu*FWuI)Nc4foNPtg^&&ktcEO_}`xZF%2jKGUx9ihk5h*<-Md_6SyN#1jy%BF$PU~JV&orqitIJG*>eqCUDq?c-F zK)R)=PV(7CqpnY<=OQc!0e@P)FixLej8D~HNbYg&R6PilRUiN*M%t?<7aVO^=(6Ya zsY#xR?Qr{d*qJ$IaM)&I#)6(DiZnz*pNa|s~JneO?Kj2u;U|Lz6 zA*Q_(A3{2?TnY(wgk@~!f~23wrGJ(Wc}6m?&ENje_}k+F)BQNGQP=*qM%j9i6#W{v zl@efIQH`wS7;|PBcUzT^J$8&uGOBk^mj3|tki+!gHGyGqzDC7e(Ofw`Xm-?4>Ui(5v9D24=Lf zgAqh}din`Ake;H)%=w5~_r>p^(g2eS*o-wGj!xPc007g0W6>dL`9JmyCI1Oxfgdzy zJ`QG;Lcp$x8Jz$yzULOcJ_Rq+L4+Mn_2n5L4xOPNPV~qS3?|4(ryd1K0{ep*S)VKd zJQ8?9Iq-3+oOd8Pq%{k$$-g_T|Ia=W{VqBBZg;;F`~$3WVYCh0;5j4&WwZ)`{u+LV zIu%}w-Fs-d*a4|Of>LZB7C`NiPX-z(3h?ZZclh6*p6kDi?BAbMULz_WXl6bO>c>T( zBL#qFO&ZxFAf79FFHw(?4!dX}xupO3e-f*7rz!mp88dVX)JLX3Q!TGW%70Uk6S-ji z^(N%X=~(=)x6x;bnRoyBj{oofVEpei{(t`w?*B8s__f)Nj@efM;XClAuNWke04(=*7lhf}n-HmlpE+92fok&VkdP2teMk(-fEu z0ufh25YSpAo;HPr2rXC`-IauAqyc^wgQa3beUXGtxB>oaCbaH53!aUSLEsty=TgoV zw3TDaucG_{t1Qd0FI24PcJKGX|3&6%tG$=q1 zkbYY_*m#t8#d;Oazj1>JfgyPk1j%$DJFF=D(XAe|n^yApZ!3j@N?`0sq6is;YdCq| z+3Engsng&bP!f9?<)! zYd!L@ovA=LLL?ibx+q0frydzA60zvhaC^ zGrzw6BxrzAkUP813>wk9Wi$DeYFd`f(I;pCpSSvGGa(_(iQE#R0da0!@jv6OF4#Ld8nsrS(vy7)2jx_ zCu^8A0K!12PBJpc3%q6ZeIPM%?*xYo&!wmKI?1QdMvyyOKWZXzd_t|$s<#YErHpVt zlAKoc*8ov-*sm5)X>l~Cs${!>WzR(E6L|DqeOv%7s{wH^{|1Qpd58`XDVB`VJae!p zrmn+^YY7kEF$V>Av+DC-6m#@Z&M^$3$V< zp2zjmwt4Eh(8lb%>KBvNOxRR7|MyuG%U+3y|M2fbnq%?tlNVSq((e4~uRZ;180L9q znVF?QWL8-Pzup)$R3ZMUF!bZk3$d?yY{BmSv}6QIdYJcd?aACd0mBdj%2%zlqh*&C zb$^gij9yq)1c^BNO+76Cpmd;#HetfOzr+2!5j?qO*;l0*kmVe{hjUr+^3@8e?js&3 z(+qY)BOYlxP=2uY)TE=jk38*s^_$&Et=4ZPorL^gLPm9R!#v;;ke14T!P$W9Ph?&d z$)*CG!?E$m<;SR|`RyPLI`E83aJ3=A!LFIv#dk`k{%G|QUO{-Rl28?VspVEh9Up$W z!JkPJqj3(i239oJmLA{;Rh#d^grf|qnTjX>rw+Eoz)3%Tf>m=9L zh6)@yQfpPvqM5=1m{K{&3pabKEN?k!U{ur;8*aX{hy8Mx+Y(#`)&}r1B`rVLy`K>I zJ|aTFm9GPPkWXAogHMtc^|X|Gzn%94Glv$C#XC_aZWIn2XPh23q$n$%-Fx8OAbFat zV?dQW1-O(D@+!y2IO6l0x*HjkKb9mVjKiyX2%R6<$;0;+dCjOdb`6|~gynWfVt)IoDCvNwkSRC$yj*Zj=!w)_Z8foQj%BtZ ze{4HbHh@plD^!a#F{^Gpf~vM72riqJ z+Zlj^jEoJSd1#qyLw(EvtsobbaalA|Q+zT-)=BRXB^}_Cln=w`74S$N^GU*+Sks0V zgl8vL(kD5}J<cje} znRWCyp#L>Q*$IGKHZ6^BX}ST*HW}##9lCGw3UZ<&|Ct*DREl@sXV?iB?9|IC(nH5L z>{lRJa;`Ahg|72*XmuPrxoE?3`(^jC#=k}2*&QL`za|y*RF$TmI7fsX0E0z#dR4Pp z#p~`+r32v#mQBqd03^Sd1XoGs%Z%%JL}(_>K;Na_06tg*?=GnNpHLe|SVc69y|qEB zvOrj(NL(MXSOpu4_N^7D7?G>eDGEa+Hb+f3B^|$d6rd}Hw{gs&ZP>lZyTXh54jE4hrTc{d!{*YQ!mDtQhF-CAwcmSIArcU`4Hy)3Yv;wtA0 zC>mj7)%GUQy2A6046LY28A>-Ub9iQ;Zpp7wCypR_9w?$j3l;K5=m;{u=aYVWz#D8M zw)p%yd{d)SmTyMh9f*hs_kC)+KXWAs#hbd{pDY2}qx>;&t+I2qZ8M1*6fTR{dN%_k z!7peKCV#1fXC=Z#Bbuj_`Sq}e7wkWydT#rplAz8}+xl!l33`#IN&QM@A7K_`t#F;D zGckcB#G7A{SsdBR{xbk29o|9n70IbQ0hy82oMCNvy1ccY&GCZI0uUKLqkMsHeTq87 z%v%w89Y@F|?oVxX8c~RV<@^=^S5CzpmMjLXa@p5N$W^0EBMNkzxCM0)edy;{(epzw zUH}Nve$)?^fUH}_*o#?BmdGn@SZV}7=Z{mC0&?$!$O(<*Tm>j`+Co#u`ZWT5egm4n zeu2jSN##n67A=R6cwxw2_Nu1(ciD%h?SBI1q; zy$AYsXOj)`V48kzey`D*vO|@acEzj)aH3+PA79g>pipO)I61R6bBf-k*c)%4J!^6r=m4Y(Mm(F zW^#Uu50BmQx)Fhw%k|=wl*qv-8Mp7fQv;WHm#y7k>P`l!JQ~@8{j)c0z6%OzhKuM* zA#bO}w4F^}c}suu+E@Gi+F6L(mQx zO$RNjs6d*+lJ&PC3wqhu$T(OV3EI;mud%-pnN22`6w=}Dv$_M00D9^{^2`ag1{5>4l??8g`e+ajuBdf zoW(TN#5gP}Z?&!G>_twHfyXhNhx5~b+KZ8dFE%WLD8mHg!gP{4QZ+6tu z(Y?jccm_g=6xoE;i^Y{wVJ}3h;#PiwcMms@5Kgw!T?@Ns0R_OYq}(L@6{nLZL6?Uz z0_juq^L-9Qp?UTDgkras+G#e3gUZ+I0NN2_3>zLgh$i!w1Z2rlzQ>lpJSoF%a}X^b zpocJ3(w*^rVaV0$2L3bh3UEh>0(ZDH1x0i-MU>@8fvELUzy!|1O1f^`tTHtwfqPRuT9Y35e9f?c zpW>RycRw2UP|E!fw98eihlz`o2N;KtH#akB_c)K=fekW@$SkOfT4N15#F^@SrY+J6 zL5JmCSrdsIjW_g@UmgxBti_Me?LVT7b`wt3i~{>~1aFv)8ka6)eVKAGcA;yMcSECekZFERq06yWcNewdQDt28Gnd6g2F$U09@nHRGVv!f=#jk z*vKq`5L>_Y1Gbtsdid9(G@X}Umq#|O%M#^#H#{yYMrC|(i;t6j_l7Kc^=<%(nrNTj zlPMXL5M_qAY+_$5p^6uKu$flFx>hdVJFLQHXv2qc)Xo-AO;XdhXz->vUbH4e?xj4RA!~3^@B^!;>Z>Bp=lia+pnWY!sfV z5!J>Cw&}0G0e2&^EoH$bck#MSnLFP<#eg11DX`!zoTg&}u59Rt{<6$l@gP@vA2qM8_)>Oz0FLn*7_W?S?$;l?G>J3?#E(q%qbOuug+pC^1 zXba@>_U*+maXpGw1!%6av0qh9GbN1G1)97GKb!9!YIJ{59p~aL?$qO;Pu%pyf@sen zZh_m$3)-x|ARyLMIU4zZScli~+)vUADMYaZ33geF^oBKX{>g89 zVeE}y-0mo}FJu~dG2~MNK&2z{ulja9)$+(P<#?$ntEF*L0~my1AN+NA_biM^7XEQ- z7Vv9F5LX0Os5ly((N;T#+U);f?=9n^+TO5XMHE3SN-QItNieIhQIdC$d?bGxo;piBb+sfCvB_m-)-a8L&+11mN-4@jCMX8JjziwY0 z+Xv$=+W6SF4xoGOljXiMu%xlal9+&KzG{^T!xQk`0`JHF};fOJ&tVTBIy?myHKbLTK#;8Yo8_8KD=Y&EDGq?LDGG%h=RO4STOO=;Go5L%nu3JSJ+xmpH!uO3Bo<6U~+a9_d4s?qBfUg%7SW)J2P)wjvo+` zN%_oAai9Etg!H`dc|xdQ*9tfT{D?eD(_g@E+E%G?ay+OIn0dX-GT`tWoTZ$TMorU{ z9M3&ihpN&ji|L@=gK|pky&uwghf-=)3TxN7B~N4$!=EZL5`XmSLr=VkoM+p?oK_FK zs5eA|7R-4F)3BbYlRg^h5yQmz0eBe@l{n4%mT19?q@cuou^elpHrp(@RAU3w# zk)3aVf;HFe6{E*30X$Mac(h`88WuPZay;Rph2m@|Icg(@IYW-0o0X7b@dm-79jZNCUn-Z_7CRtuFzKGsc17<6jlBsXU?$ooki z*ix6@y6dFKveV0W1e1;R(e=k+L)EUQxil8Em7jk=6DbnrcOvxhUuN({W=mQmc_SZcLyBKUIF2UIY z3`*MZ@$6D~zKB;Q$+a^f&ceP^NY^e@amrmZYnCg7{4Nyxax2}u%|GifvEO387jq=b z%Yb-IW^v0mpk0LIK%U{OzsWt-TYha6WQ+{(;8{M1B4iQ(*bmX@*n~yG50>j-VS&)Z zfOb&AO8|EdyiGnE9=`N#&iO0T< z74eS~>iMwbng>(#R`B+_-koK6ssq5Vg%l}2wk%fdga=nYWb&O>KWKaQLoYp!S$o&U zW9ioQ%tZqeRDjJdn7;K$6)P+vk^O82K2@BG)(smJ8M!bh4v~)XT=C{4HK(hTEKqkS z5hc}596=B3;Jcvy@@2as$xayU{YtqP=3?i4;!?UjpK-DalqTQ2Z)#|7#VM;!7wVTs zS5)c2&RNDkrhe_Us^Aacrprzj+}p7U=lZl-2h_~+T`D7X?~u1UZmP>Vcwe0r1iu{$ zDG_*sZT#UJUd-zQz^ow8q(JE#-^vGG5d0w;Z0}n)>0s0OIp@1C@ifLLw9^8fp5iyG z6Ajuu=8Ifo>j8tZBK)3{9Ey@C)TE&xSz3A-EJCuZO0f`ft^9V^)v}{2VO-Y^naN_l zW%%NvtD1i8t}?ZxoP{5N`jQ4|G|!hr9>}ZZLbhS-#XxS&9u!~`mUPEO)g&w>&NhXT zw?mw4s?e0Pw=r*?61GeSq}t^%1hf72Peq_u?1(Z1Q7OwSFOUr5ICz^qMhZ`C>W;eN z!`6tSSykdgr2Mx$Ex8>UZgMGw?!o@Z?EuhYROaOHsEgkzy%zq`fwv__`7WFQWwKMI z)5+C;{qW91C$4ktE_q?pcgY>jVQ0sIs>rFM$;zwgO_A00bLDzaE{~g6)WRhcc~lD- za%m%Cu$@wGmW`jqDI-Vje6K$qg7X|v*iTpEB|xteYL0e)O97{ZD zY=HFYHGfsM5}hOO()-um{z~7cZFfQsQjPJSe45C2QcE6?jHtH)Y z0Y!V~H_ypbl3;uncxMr^4x`O9(WYx8}J9VwE z0tiT?0N?jV&TL}y8@4J{P^wY8_AWovx6osaVjSSw(vR>b zI|DHC6^P6M#f|M{tObp;(}#W_ftd&5{XX&(}b zhZj5a<-Jtlkk^i0p{@S>g)+pN;mA%^HEdp``U56Td_V#iXVgoVjS2x++L)ol6R>nI z0}#^zz*Py6JRDNlvCdoq;eM=S;~dWYfyVWE=h{J<%k@iHOK(13KnGey=2*3#S@nQa zV?eetB%FlEUV5})9UPe%uNv?t4S~hv-&~k#VKToxfU3~OugWnt0IJxfuX+-|4tMDT zoi~6#;juC4>&qzvv-K0H%HGpjuhw4asYEKZq-|g^M_)`+OM4;zf;U;&=a>+e#6b8n z>!UbR!~-U&aM*>DCW9115oCpO-Sy0+L9wC4*!8v|tq#CoMylIt#Qu!6V`K$FlL5dd zHCt6g2x^ev%clatsj;9V$qNDqg5jt{z-_{r9!7)^-gM3^A!v@qkN@ok&7%((?VSqE zZ{l|#_d`*8j6x_1BHXo__&ffb8sC+3K~9u6G7 z#XJ$`crA^Kv*|>=F$t+MarboyppJED`G)+KEm0hM#Y$Z6XKC8eOWE%gAYX#-V_n_VvhoD5Z{*^glTlN)2T$E>A=;`dqVg|7q z<{d&FNPRGJ;xq)~Cgf10w2(oZMdwL(9l$F`+RL3G*d1X=Ho zuBQ>0u{S4x~lcC>T{M;_*54a%MRPzZ%6 z2)gpDgxp++18$axv;@}EKFol{d;iZczvdRfhx`$f`@ z%X^tV5v-j`9S#cmPl~qhCTnJJy(@FJ4S3$$tZpgQ0ATn(IZrHP|9K+VA#T8G=PtOV zsPvU(I$=-|QFuuTCKaS(5uA%=_C)Z{`l;*T(+Ns9mJ@DCWA^!OxH;ETQ z?u~`Ku-x~&n2X)-V8qWxL^Gx82_>E@F(8AC!LW>I1Qr1I}4^o0a05U&h9D*G$~_eInd9u zur!q0jPu9|Fl=U++<-h+9NfpGU2c}K5I#;*H7?|g+n7Mhy@093TA5}+!2+qeZ$yF{ir1P`O7OOBADa?i zI7~eb(OP~0v9sRU+Az=YpQacn%Hwf8@4GE%*QM-_zYKJG{1U8Eb(-euHoG{C{CXLN z^3#bY=sw%AziXXsHXF<)LEvpxbFa5mTg6kg?XG}2^TvsGhyEifay)LfgEa&F?dl)^zl97#_U@6hC@6~w5nr}6r| zO_M{T7ii>vyl8rpR2&JdY*XE0N;x<{T-`V^A|_oiTAC4Sg5;5fqtAhqTr0NtXs;w= z<;o}>HeBCHs)$ibZ!oXR@Lk?`nz4EYUwLyq23>89rWDmIra)i0Dau-enfyDQ9#+lr zpM^~Y8~vOYyC@>!1F_^;9t#Ae$It^M+jvo0`r7{LZ=gP;PCJ#6dKvQzP|cb!xEbJ% zK8;fkr2MX)@xcn~+QS)evj*X*Aoy?=D6bb_8k+tv&kvq{?b;&TwfITeKWI+C}RaUgPlGKyHe!biXUhSxs=t}#;~>ZpNRdAH-Az7pxco@X*}L5bE8DF=s`@$ zk*%-Eq&&8)NGl6~8Frq{U@Fmh9Ge4&Ao6iwWZkpQqKtQS>SCq^jvg9-xNQt36Zs`f z$%r@cJij#9a{`11z0C!mx5A8$rY+t?8XL2tLN)nA>{b(9{CO6E=@3W5_b~o!lxp4` z2~`u~2qm)G;tPk?aXx)Kfn4*oQz*=xhj$YuKvGLV zjb46u*?@JqImrrMV-`IV*}=5Dt&Tc$jP9MV)J#{M{Nl%yNQV@9!u}}Xt!l}`*g!D7 z<-TzUg+{?2<`!O_nGSvOR%R{|(k((W+Vb~w-90dmirMSPiU^I8)DKf=5xTbmNw%fW zUjb#{0J{(m&YLn+9Q(9Fe;fSzIj4 zuE`qhYQ@Y0z3huJHmy6TIvHPoBbv%A;fEN8xG)-B^j@EI zn5Z~sXYPR9(S&;svcuFNyONW#)`ytat)E%4=6b%SEOXx~&~9xy z#v9~AbtSl(ew!jcC@=%oU zW=GsxZ4_+%rRCPzRPE4)iJ~|NOYK~_)mJCYs8N4tB)^ye4$V#vF42dHd`&j$7TL>* z{;)ecP9oPTx#DA_9pyEEcL`}dwnId<)|57Xh0JW)edu$Nx4kv`3uQ5xF*V6P0%W6f z+(>tB3gwO5743xEXi6 zD0H#ur)%gH$0Un4^c37gh%|0^PZFt*UR3vh@5a`o=$p&l+4bwotc*Yu=lqV(cV zFr&4J6Cb01nx7skp^Vqa_@B}!E{J!?D9km6d&MAS>){0F2`W1bt*+NDsvyCLkn6=s z|DKu!@CO}YOK9I;g&3sJ{84W%6@N1|d zt4j(Q;M&wLoB}&5vgk|uY;OGJhE8XvEKiEh2s&3_yz%&cyZve*u)1h6{hSbMz%Lg!T9!B;szxra`z!osD z@*C?_OY8j5EI0~?R9U(duv~STb1(!%S=tnyaYD%P1YG%*Xy*^3ngJQq3&)2L(0R&P zup$;}!G4|7tMqeKPo{y+Y)3wt|=L*iKvh}g|~ z^ETp|d^I5MBcmScEW;BxfZNY15`gLhBuD1AUW9?2-GuZ->yq+^qa)ehi3uCY#*L}; zK-C5JO`j(q`&9fej6T&ad!Dj7?7TveKvF*iei2qg1&dswAYzabe}@CTCF_$a<3RGq z7s13+)>8sR+5H4lc#5MVkh$s9eVWL||0)-_Vy5OqMj{R=LU%f9f}M%wu}KtNY_@Sb zYi(7uqE)E`Ewu(h1+yUEdEVg~Yo@b0#5V6eunA+3@1W5O&K_6YIj)Y-6>3(0np18G zt|DJO-rGEYYZQ>lFHnBmj9!uL*TzrGp@h;CJe6rC6Pz&WXwfu{a!NL?Ct<0NM0}RV zcQ$-Z8=g8u=+K&{)~c6#?9eo75_Im4Pbm)&7G5eEvqupfyRWYd}i!T;p6|z z8Q)2*G*3PJ8@bG7nKv`~VCRIB4AqB*Xi%=AQatPTD=8v(xq-=K_E=q!n9?p(4;?gb zQD=58Q|pz4bb}W3rB(Lgx+#!^(1Y>Vv|DJLL+*8}JkXzkMbFitL zw9b!jFF*#2ruaKB!x!3Z99zlNbKW@tmGY&5a|k$lcTjGKquSOj_9QtefuGWM5CiBT87rmDfB-|YV6%_HDM?LkAJdyYsj1E?N1g{OKT5^|+wJqR0-w>v6UkA838zuls(!45oa~O_9ufu? z)DTM)i2aR9OjZ}CWAW6;g8Nypf&_ot<76FemOlP_Nz)bxu{MJwLXI>uCt7p%y%a8z z44#e*Ae?xvA9kPYzC)q2o&FCY&2Ve(4%M#EHowvK71GJ-za`%YtILfGe^fX8L-Q9L zK4cUO)cF%!9bhII?E$C$P126K>xZD=y|^7Gk`yPWQ+V+cw2R00mP1o!n4c#^fYt(o z>xIi}favAK8Ks7hl_i-DXMO^M`R4jDz&_+FXH_SVP=^`OxdKsv-f%Z?vZnp93}};K zf~N)R75jvQ=LoJ4gD%Cn+wyb$cHx_-Vg!0a8Zui+ITJ6^PVwo3La(3?9q0&aKLgE% zP$Za%bF)lS#EXa*K-9gt=xD|m7R zq21{r?yXh^i#0Ir=p$zm20l@a=kNTAC6>pd9?yatbT+?!a!#T9{z37{mT^jQ!gvjc z?rsk#OUz|6!r12+)eyUsTUT=L)Hx1`(RfV;&YvwPB1s7~57BwJho;)<}#;675mnSkE&POV{i^v>#pQ{(QlBSz(g@pgE%_Kmztg*XQR%n$Tg;RzsWrm$qOUcuO7aSq&LP1=7bt-Z#5f$6_vSu8BYD-z~=)DDZw*?8XFlllRvL97@fB_N=&0oGg z8@xOK!-vyPZz+*z$oD|?>?dGz_hhTq1e+);|CC9J^R!wTf$Z~;_q;U}eRBgcEKl)l zZ?pwoT$?OzB=JyGuOH#HX-;L510Y`@#bzn{cO;z;eYS50h{A3o;^!HDSN?Z40sPys z_=v;;abl*usZBx&Y4-GtJt^P^&GKuW+%%(ya0#OwhYHQ2lI>BVif}UmQ=^ zQt^`#?tZN#HFqw~{9evO?_rwI1L%ZMWHD+gFOln!!znV#ZhUQW>bR~o2rK$B3~(B9 z2-(-V7Wg0&7)9KskbZhxel)J~-7b~HQtn5$N+&eARIJ0-&q~%dOHDC}&A-pc-(m_# zUA@oUltPJ)niKB0u9l-Z_ZftJrHP%pm_wfeey829ja*8C5#w1%lHUf9LsHR?8(`8o z2Uy#K&+7(M+DdC7Eyx-g=j6?EQP&{NrGUg!Vl7xa2%St{_H=Tgz#iNp_=9+c+&d zA(&DN)S~T-I_=t)G)A5SjGIvovG}4l8IM!yEz2{J zL%Fa_w!Vjq=Jh||HJAllJM8Hp<4~+Iz9#|7A37bA-Q=?)5-fBsBKc4xolyLq=#BLE z`jJ3f-5gve(jqDdR}G72lfHMZ_73-dVI92kn%aca46s*EwCen3Pa&=Lwh>9PS6UmAPum)qSRo*EiYVPa`- zgxqg+G@~sq9Z#N+0QMbqlvf{ruzgZIsYOBNglu50dA&z>HR4o!<(8i9w-R_JDET4vY4{2^>ewpytyz(@xAacROQO>*AiRqbU0X zgLfvIWd9BxeA zo?_}vJx&FR`nGMw`MU-yz+q|z<1204z9PmUZdV=j?@V9H@{jE2(f=LG+T^jzqR>!+ z0)8*3{Z+uVGTbpAK?2&}LjSqb$3OT$w5$~+V359P$&1^6`t=g%&Qz!&!EsL33V7^4 zfj(IMXC*{PkimThFSeQAy1|L91fmm5D5GM?bZDH{)+U zuRzRs&WH#Ar*8rlwW=faK5h??y7?iYh|FvYs8$6bZg+i4^1*T7jz&%VRuic0m4-H! zL7HgmQo3ZMCm8SAdPc&F64Xa5Y^IhfC%hKGnP*$r4k#xhf7#`ff_65tIcviTQr(_H zXZ7JOlsfGU{1-p2rVk36z}I?7pjwDd~+0yIq} z_mXTW`wZU$!|ATbCJ1boK_&1vfx@X_b#Tk<05}J*OQtK$L0lq0C5S;NO&Fa zQ=>?4f>%3`DG&#j`fek*2Qs_Sj`Jms#+{)0cy_doE;H2bwF021b>W3glB^AocHN2w znyKBoQujd!!a#MaLzX^nc1bm#s>C-SU4T2-m0f#ZwE*G@YViFL5Ssx>%x{N|+MBu( z5whS7t-Cjj4FH3hde%_clkM&!jpzmK3`6omJrH((6Oh$4ck7nGvW`aI2vhQ3x$&3G zF3Cf$OQJY7(o3Fe@MwV&sk%e01h_i63yMhW@pgpoaFx8iBs)KJjh)0?$UG!bQBVx# zBD`YSnh{(gwdtr!UeM7q@)Mj^H;(l4O5d8))~i!D2snXGQcw}(kDbRxt}sJ-CGH@| zNatp8Y`!a)tUWoJs8XRwJB8E~?1u&T|N6yP9__II-O0k(gG)!83vx$TGZU8=<&yiM zj53#m{CJRmxIV?H5TP9D?3;Ug9^%Ub1BA5Ss&2rzYgbMH6`oZ_*^BH23{W%Pgd)<% zhhp}#7ufZ$FS|5Cfu0c24$?_O@$bb`o~z*N@^BXY&&&Ku!4E}Hm10^H&YiiUE0DZT z)L(!=M0Ge3(6kk4X&u1bLUB((*}r-Z0TSQ}7B9PTfoTnM4LoTL@R=wYgdvZ(yICz? zsEz>(I*gV@TbYvw<7*odHR@d31YEN}0hS@vV=be=oRN9g;q4?4je9FEo`330OSp2i zvwFcBONtr32^Vca8$svo450Z%Vkf~S!|U?IcD5Ptv7Uq0yIr{f5bKB_s(pr_HxKPg z$O+~H=d9z9k|$&a1La8K#)>ow?m*0!@um(0~A=|m})*6~dp63Y#_t$_)1^>W`jk&WNWN3*LH0flo z@!HY-&^z3kY5H*-qSfC$@N&M8Pl^Kq6;e^`Z$7y=p9EwhW(4tHdta_4D5C-)0bKbf zVSQ8WD}DE=6|{JqPfQO@j?8C`ri<_o_n_y10*LP31O0TzezphK%xJo`UYrie;T|-A z-nH1tgSH^M!-&&WYv*>zB6q&-ql3TCAnH)~;T=29hSduAnB1Yr;SD7FOfi*c2%)^u zEU=YGN7CGvb&ir!1g4kpmvEs-Bq?dq?CH{G;J8ww9#{?bdYGprP^?_-7zgDV6S;c`4lY9aG$aZ<#V7XqKj_j zRN1+^b9F~>o-7IptTYzgGS^9sZ({rxM0?+>9^K1;a?p4&u{jQ05=eXq#s{ggdPiG)PWPaMZE{qQX9OP*U_~90l?%-d{xX^< z_a-2wyfzp<-ZFkc-W`}Qd;%PGy4nt~?7_K|pyLk!KT*2y5S0+^I=i-Qm~kXz3Pb~N z+2_%^fN2fRz0D&eSiOCjJ_DfK-K3^KM+>p2$O#pwfDI@`vv-AdwAhrmz3MC2_4W*+ zdP^FrE|+s_UxED5+^|`YE-<30{v@tcA3`!6M8Kn_2pMcy{nD-9`RM8}!(%%Om~&S_ zm2NHe@Q>NfCR@XXEhxq}$3K8>IvA+zisr4k`?LQ`7e@R)RxubLDT)rIClq|=h%1K` z?Z>ih0Zu@t$u*K+ESj(=^`B>fN%E-Bc|KriGU5fU1ze4S%pv<}!k4s|d;K+FI42tf znq2OxM`UIULm4o0qJFtJ9dAXDBkjr=1IN0E8+MrB35Z`QeqX696n-DiO7;<8$ zk^xo;m!acUVK4}0iT7Y=2&jPqpey%n1x$UeLTs4tK=W8RnEv3pfHwp}ZQF0H2@o?~0d=E;{$JeFN8bSSLdC$cItuu{dNAHrqRr>4QiJmMz(eiLc5wQ)Lz4PC_w7G_Ukrk48}0y=Rxq%y5I7N^IT8fK zp8y1FCV%svIc6M8DIySl0?@O)Q{)65)zNI~sq9}4P`NMuwE}un1SHmT067U4Jj-~> za_`Suz>2tD-??z=`nPA)sK((3W&OV|9*Z$(Jcs}bG&uA9KlkBFemL@{j~RHIzrLlZ zvPKOuGynXakATrc?eC`mcn82Ct21tyf8I-J3({LcI@-_mPUhjrzt&ihw$`mb^fD_T zq$TUx1Dm>D{y(=c&7vB(F;R3u?ivb%VSl~v7FDhUR zJmM!r__L4<7pfsRkU{eSabXcEGHS#3vx)Ne9-! zrX8K#d$^g){&Dd8w>%>)gNp`}?c^eecYf|6POsT?6Q0_}@DC-!=H(I{1Ao z{O?)#-+u6WA^dMo{NJAVzdiB)4|}4=H;@1fz=auT5YZ2ekq6BHa%}bW2qSpaa~*W^ zlTfni(#q*U*{RhPv7aA(2b;e6T}q4g-g>jN0{FFWwE@qg7Y#|`oWSHz02p>!R)PVH z(sGLICiSIW$P%e9U9e0Wpf9}+d^jkc3Ikc`me$ROVFrCpoR$~Lf%lUj5R<1Vd_0yu zaLx3W+zeIW2b1d~IYUXOm8_Gk0y6;qSr}~P+=x873r!R;0GhXlqKSA_YK}LfeQaES z-NoTzoh`iwC&178!MtZi?5FRifONYcW=FJuzZqOYhG#Ia{qRcQ@UjDxo|Tb zSVY;#mu;rc9_8;3xHgX*{Yq}Ju>-bs7{k+pC;QFY-)8;AKORp3>dFWWz?6_4UVp8M z-~at~vU0X^A49k%0X{FM;pzO17RrO^fX~H1{_>$7NDVGX?E0KweL91NSX9Qj zqw(|eSAdb7)z{4^*Mw)ve*4uz7j~5h8}sciY7N~CQ*QarRWc+4hPEC~Kq(w~*hr?1 z_o2S_%tNLQI2fq4U}Pl^)SSS`HG&-VpO13p%(`yS>|<{RxwGN;7l9EH1_MA-8@kO9 z*)1=F^{ty%UwrnLcZdK^cg4`H2&U))Fg@b6Gu-c14)WEf!i zW4*pI2Ebhmz>@5suv7IqEW=fIxmj#KSbayLz$sImbK%6`77}=nG#Kg`uG2##r(b6% zzDjsOOa3ts+bNycchP-2fe_W(SO4=_znyHHt@Jvh@?tnX?eu8yl+zG0QS!=)H>TWd zXO(c^{Ja%zc$Bl@ggXX!V6D9`aSGz}2rJp!0=SU@K^M%tY%}@Hm7T!AOHlG??&_fg zkOZt-4ghY)uWiWVHYWPo8H!grXRH7Z8om0TcRurse&^$a#7i(Es&YSCpr1YZ@uY?N zcEHeE@6&D-Z%6lb9-sYQl69|-=P+fPL*7v8=JVz(+Giin=3SKa`{=(u?gbVLKZF!I zffpA9KW&&6EVjsycLxRNdZIgD7mBhM0^%UOJ_al>d&sU9x?_r!fbAnV=+?>C8Rl1| z4-_Q*AQD8Y`2_sJYD8Qaz&o;E#rs!023pO~!Y~5^Bp%lm+CbnFmc2hQ=sk7>E`h!G zZo}+dh#86dNFebZkVs7Br^KtOkz%)m9~F}!LW z4{*-{VF2UyqJ=RW=u;J+gOPC`w2OVZg>K7t8J@I_7O*m&&^>B7*#VIv%}|hYI@od= zx9YbR0R5rHy+`BKFd)YYEKzU8JINhFp5y&cs)zv=I2BoPgJI0??aK)ei2Ge%k&5pK zHg87eH98v4rqK<4luuL)-{1zdqC>elrwuyQ^ zcPe``1YXh1f^bgl^}1IJ+F*W_4lwigeSr(zo0wxKnwI^3d-++#xtw5$t?Z>HFqy!a zfxwB3XNSk%2qZ0AHm?V*%3z4`TEfqtR ztigIZU`~C1woE*W4w%a3@kI9ka)Y{oC<+jmbh&@xMC^0z#n&uVtecOPcm})DhRXCu z1b_#j=#VK^|e4^WVKYSJJHcc2p z6}Ps}E}5&<%WIOt%`_gEqOINx>;m0x9p*fbTdNjBbr%hwBd{jTTTYBDO%J01K96el zNM7C<>0ak@T;r1%v72}^u$U$|dICj$HtB7w%2b*yweamY_R}AKmlcF)-tLiL%WUm8 ziTI#m;??VrFMhh~b6V>ui5ud}+V88t5L>LsiMSg{h%$~cA@NL@t{T(%$A;il~R=C z;XD?U0H)DmLMi|}MgU9

    iqn5izn6z@z7cXEY-a=U!%1S~Qi{3e z5)K+=C4R*+KZ|)U?}u(`eWP=WX)a7k=E8+;c;klG#%-h591QjN_q-2AvIM}nyHZyc z`yRy*OrtKnW=jZXR*jX#yARxL?Frq8FF7-Ri+wqv*d@FUNOzY!PoZiC2kv~fm}7>$ z+ozlIDfwJ;M^FjGjGy#b%Ma$ic$X2)&rn;Vw*u|7%wnTSw^aS4+!uFu!5oIJ%FUCP7Ty4GD|^IHZ1g5A%?!_Kw>rT;z@p zs3PU2#{k+gM{AEaHc1xmH9OhQNpy1!mCEIq+C0@xbn{L%$wyDHre`>-zo;uE!y+=T znc+E6jrdDPuv4oKa?OpXQJ_NlW>Vie(GW(k63;%K6*c;@=~q3X&G#bDrx};Iq4$)= z{CI%LXtVK&J)4szuIqsbjpx=IdM>YOE>wnW=QHWr<0v>VP;hcun?gNCZ9r+y%g2ba zGVkrTrd-R3_bl6%-4|apF3@g#*S*MyWL*$Lm$^puGabIoSb%OOIJt~TkBN#FMHXY5 zlQvWRwD_1?_ahDiil-b0gfRh+M+iuN9xt*=YD*uiEhsjadYZkWrg%>$BbiyM_Rd{n zZE)fo>ovVg%9?~^*w~!2?)`v|T12**!bSL)b<04KM{}8JdlNiw%^MqLHu>Ya2MT2w zhIHDyLF7sbt$sXS%L=B-_JeBd6tPV@W5-_y1!CbTjAxHAF)zF-DX<4uZoBYhBIRa< zfOA!k@XpH3eeW>32-XFTjakux#Y%lT!qS%Y=ViCE7!JA}yiaghSsQzm=H0J^&Rg+P zG}IXOdY)uo^|J64e=;c^y;Ve(I1UDWC|az08QEEj-DSPn5_76__OPF8_C5_{p%%4j zon~YEWZXTTk~8~-wUk<3(S66u;i(>|+s+`1k$6hQa}`N{8#^|I(Z2snjv*^UB}`ot zB*Ncfvc)aXpVpDFQ|31NoS5B7^|P^@DsfA{iUoMsr|00L^{V%K8d=>a z){c>1UD$})#wD(EvrN3KSbOe$n-P^AmDG{SvFfE3T$jV5*RR?@qby;MJX+jt;@3f; zeeaVinwQ?>Zsa}fRP3w&PvQ3Qxa8hL>6@{iW!EoEUg2Z0iD~f1D1V4;c)%KyjIFt3 z0$WTHefMy^Q=E#>1@<%cvoann;Y)~R#VnSJR=maTn`p!kabzc5PDrw({E_fAYhCO! z zTO|LKZ_|J(Dh2pUHF;J3V~*@ka(kS|?`?Bjjg`y8wi9$#@6qM+KyA)So5>uxV?vEgRe6JlaCixACn z@0+A;#ud}C9xE5!nem!l0kTWuR%*m{<6}%npMoVCpHBsFp?Fn1!C}EIHCm%r`6gQ81OCLwKz+Pdscq@~ zwsLltIO_@BT-I3?qbNE0uI*mW)aF<9x3L*6%THdLCp7;IgkJ(b32%l_JUFCmcVEz;A}!G>-u+QH&?RJxdCB1FwfMnBqP z<^w`C?iuA{XE$@-OCLPg(G>3NQ(C@cxZm@n=P22!S7exnEvrd$tRqF#)ee_|6)Px- zu2-%<**`WiIz7NaMO=vn;iG~Og--XeqbeuqFZSNJ^c#CKC4-<0dBpA=bF7CMT_wOZ zFB@vF@V=^Czk0jkPA0O;8a+>GnY9Isig;V{W0VgD+^oIF7CzMWnoq~7FZHSIH* zjTt1?rmv8c6RkBB8wEcfoZP&XXS!+@CI3wV_X0Co)U`6YKu-%VFFAAO_HD!iDb1>~ zmD+-v_AN>9J>RRIulsJNM)O7IA6HW3ef*4WIoYmYF@4oN9lOFSCxKgfVX6}ArF~#f zx@<0aI5AwtXIP-bdzw#=O{r+kQ@uAS&>^et#*X$Vwllm8Z<_qzcL^8i{#@31G~vCce{_xQ|=Qdt)%VWLM4@_tfb+(4eqSn=^0###g%oy zE1J=p87=1)y)+8B1D%4%U4O7zYYn_xKduN~V_lJYrQuV+g}!^ZMkCw#Xe_`}S?*NX zuum**pE2uE#V$mwC!kXavtRmPb~X8A=QV+NVaYXHlF1)H#~DgYS?08DGi)60nEz{O9t{@n9J<<%x6C&R}8 zw<)wmf|pq%PD%Cc1#i-f46E6cNEZo^UQFRO8xTl3udsL57aOr0@bLvWTt233$d(Q^ zeBCZB&$%i*fZvJ}A*{a=FKWFTf5s%r2eb=z61ddCgl`sj6aH}>BR%+l{d1tHeD ztjcJTiJ_|Goc2``>P*BkfqR7D0MoI+v7i^6VE|uuD$ubQf7z-5c1xU;uVmZp_g};rwAR*GKfDM?r36TL*?h<1e=zXmUiE6 z)#I1&$rfCcEj6^4@(plYX=YxVxnhLf#ieQcs23WEkWj9%`W{A<^jd`yt;=H=gdxe=<>xku#JvfBPs=q=*p

    bv)2gQSi8y7rFN8djd3NcD6?Pd*;7nVxYD(3=GowYFlsfGv zdCqqj98RJK(2{(zrn4!2q$A+ba!8O!_P%4Wk-RJKBj5U7YAq=%@1@}sc@fjPWNy4LIhsBW&V=QVZ12 zF!5$pp_?ZKw9f&AX$ny-HC9hXTfA_4#W0g}SXSfO9iKtD&8V#f=+HQKXvTFp!;!Yf~1Dqc={yxl_j;@uB4;W$in^l-YHqD$^ub*Co7oa+ql>OcYE#p?U_E3<>bNTh!xf+mC`R@7-XUX)r^+L&;wYP3ea zi>0;Ko20aOF8$!>uwvR>Xzs1t(`H)EViMy4+OJFIHfu z08Uy%0}GVD5I928-aC^!70B`-_d-7(#;JD0fbhxKQIeebV&f(bCG+rw`oGj&!Mo0m!Ki{9?U=7q3#YJnrMF zd047+vA?`=Uo^v96dy{zqAHkR+BS$@buadwo0s}g&oVBS?mI~KY5B<)=Ci9Jf=gN& znmMy|#W?e}(fZy)#hsC5$|VRf(L43vJ z7|~u`Gd^QmEu=@3J8H}tAM3|Qh%xtxx$6;AM0cNvb<|qSqR|G-6Y@@p;nIoShhaaeqnXgmvv1D}9FWWOP|BT+FI`1fl%lJd8TMTqA~>8pGg*fvK4C)1 zo?3z%tj?B0u_TurFd1}Qs&+hmr!c1Xfs)CFpv_<+;}!n{DUUt~6+S14&9{)A%$=1G z#JNWCSWmqce|GS^fvx?)67`afOsRg$bCL7B!xYumP=Go-7NOqcO|`o=Px(d_{Swg3 ztH^4W6E{YWrR|Mk$pYlA=ZieqIwaP`mV6L=i_Xp>69=CJ;38C-Fk6lvv$uzRUWEUj z_P+cZ>i+**3w@@NE>u*AY*WaZosvqjg|3h#+0u|Q#27;f6)sD%8xz?=_945-&Wz9u z!c>^aHlqfUnTGrIzV7dRPM`ZPxPQ2RbLKdQc`vW$^Z9r_7D+rS6>oK!jpEoHCN=*F zN}CPdNj@@~7;zXzn=fa;@T7BA{A+dloTaUj5BlVQt3ggVafj0YvspXrE+YHBZ0f68 z^mK|wZbGDoKY7%7r4kh(xlUi^j?JzdA(cWvtEcNbpwYN089Vj$7uc=9X~Rl7))(?& z;Q4XH4qF(}0qOZRtX*1q~y?$xLm*Mv_ z3>IE!ZX^5!_~d4kh4!pUS6pRl)FjjugZaJ};+6Wy_c zXwvHW$85)B$EP>|@DByJJL>^Il>Q~?V4QE`M7>t)4*9IbRq8d}t~qF?h?|aIpwe4%;oTcOgCxXYr{RbkA$FkRi3FI0#ygIbCk& z>{S@EIcSS3rjd{R$I_6XcNl1pf4uDc4jU|zZ?9z0SzDigEt?~$fAFnnsdoAK*8fE0ro~I4mF%n;&7@ zHl1_prk!X|f**f@u_GYCW&}Hi_L%Zgx|%hQ=Q|`@f^_Jhe1HW15q3JA3OSma1qF0B@) z>a20})TdDrf1LX7Bo6hO*r^AlnE#U65iML|(kmmGy*pCSvsiGdcREh!Q6Ew$?@BPW zq_q5$Ab9+d@0}?h{gxCaQviKQ{2*rnn;#6_@iWc&ni62 zxb-*PEb9x3i*<$-{8OzMy=Jh0zO%i==B|EP5Idu!Q16_aYRg-(b=Utp*A7eI_ zcxPv=8eH)L{D8bK!mdIcQmiFs03`273sU{d(zRtoL*#}%ln#Z8>4TIu4ihdY#oP?sw|N4 z_zKd$WeJ3S+2z4V(tlWvVqf4#66;*aO*t-%hWW-%dFG?q3D28@+E@v=-*a+9faGkT z?qiUI_b=(O;?Q5+RuvN67szrK45E+YQ>%O1@EpuK6Qi25B@800#1(~J{N z8xpk-WXT;Sfdxw6GS}aLyVrd`qCT{+VuqQ+GW(vcD&Tn!!N64)^);qw81U|2JT3zN zo!H{F^{^7e(yJ$5t5`CoP0h4P#u>$HBanNOLYHn*PT^{7%3hb(bnZ=zlk-hq*GDG^ z*Dr%6i*b?kb7t%B3a7na@{37k+t}Gd6~PyoRSB4~vMQip3)jvm(?`u6@6M_zL}Jh! zRNGF`(G1pqA;$KP<8~V^iVYzi$A#SZy8B_s1+7w`II;sD>mz$sj~baga#x*vU%R_D zT6B%+`W}CtZ`wn<@Mu^@@$P$fhqWJ*!M3|>ci0G_LD$C->@Q^wigF|9up;T=7l=eF zN5#mbcGsQbRUa=M8#*GKVS%Qx=mWf}i>QPk!n*bXu^~Cwu*Fx$sngkS41>-iH&0t$ zn)bRh9p>as6FzV9N=fxBZoSMa<%?ejU6h>RCPYPpOEMYcXjz+ZfP;$Q;JC|P1CBXX z6JYl;UDo`wU&bsI^_IY_2%SGYz(kxwRWn98%(#^DL%qGfSy5*~bK~X*pF>DX_s*_{ zT^PMtQDXX!*|D(Rsb(M#{I_kUK3*1j-^flK{d+ zONB-3{aV&d&*AGUI{;ce4TZT4L5nu(i^yPR?^3>m5Acc{8gSmI7Ii9>^Y<U zpVh+os#2@}CXu1ZB?|~JP~Wq4KDmi>Wg4cmTy1*RDIf3Z${%atV!RJrZ7o%b_uHI-Z}~)Jn9E{MRuH8t7g%$$xgMTi?%(_C@@N zb6!W|pIzc&kM76C_3d`z<2G}T!i+8DeCm~shzgQHD9xaaUpW>rFx@V9Teat7RMp7oo|oEZ zC3}SbD&bZANvQ%-w3oN7)D*e5Kn{gc6#u^)D8Q&tkQ@|VwHrrtyO%FjB6Lzv?uB>? zqPZ#BQqC6rp7+Sh+j91M)Cix0YH;7tb3ye$Y523(>61|FP}m{>f$SUHLX3(xo%cS- z$Njya3CgS!YK}lhS#0oZwj8(F>+>6c`S)g6t*jKIW62*2)}8H?%ZAc-@z%Uz@PHrC=Kh-O5M70M=nV;p1D%`e8> zcW>F7eK8~@XPX=!Na~g?hCfP{D(2+wOiBfVX_pmF+ z^1s|rq$h1#NG9pYI!K>f$s{*cgxCG?H1TX1VjH<0^he^rx6v0?`sv#d?p|j-h=b?ZI2hm;w^WLMR3#36Sol0!d(0 ztEbsqBMB#vwOy#1FjzaNiISThjL<_<}^-B@KQy$y~!q?1Pr9AilRxE5(l1>7%I3o z@-9&5;XGwopA7a5SK2)Fi=Go2fV;poBEo)`wXt+m8ECH(sL7zd+x>_stFlMPl}?|9 zE4_$#h{^`*;(0WR8-`|utXSW=op%u+Z=8~4dmCkG-i#S8Jt*xV!9cFdNcMjYr9YJ~ z0hUF3-N%eXU90T%W|4p5s>qAZ#_vi=d!Ej?%K#k|DwTc3EAwSxi z6pG$m=IGQ zM?45T{uZc?g&Gkod9yl~IRXjK@QfeKw(U%MLha31eb=LZueAwJju7349ule8&hNdX zD4w*W(+>`=0s)e4hL`x!fV5vzJ6icdit-NI9VP7v2P@E_plR7tyt|-fL{(FlWo_>z z(kN6VZVj_t1<>QQq@@YvPhmPSEnPlksN|HLitujrq+1xnnrS&}yElg)3}ot--JdW^ z@72or?x1}g&nP@2&=ei$LLmaSnEe(MT9gUMY?zUrVS0Thn_Y=h^zp8Da4cx?Vgv$( zwxzHTjw$ zvcT#q1oY%CA@T*rG}=nK?s?vJ9?;eYtVRhAo}vqqb5Hd2<)2D zbTc03dkm6x9&`bG zB{tu0Km%Y1@E;(#y#r(uHs2a^OFRB~FC!eR@0K|=(1mu}Q6FW0=k_UX-o|ufWsUQv z`zXbqwUy0FPK>*N?vs#mnfiLdK~3;zj;7ztPKsqX2N1$sTE+eNGZyt!NAJE{11N*H z1@Kd7CHDQ`Z)*A-yePILw10(6MKPeRa96nD(qQFno`ui&b`w(HDM_}g>lUDwxh^lw ztgZ>=tVUKTquPwz;L$c0-Z-g%C$glatHYVe{-*%qp?*hNo52eOQyE4$DD}R(`vbJ! z$t8-}u6j1kYVmHd52c#?l^S|D^9o3D>>JO-;p-^B2pYu~|HGNMTl&`YL4{-I$pk(B zsSdrC#~VF{TR+^ovZ}XNG(92aV->z;pE!H?Y5ZG73TK7|p6mwC$29l&3a0U-*LVnU z$pJEYO4#rW$2^djf_ea|z1Y$X{Hv}L+VLBWBOC|(Ik$~nAR5wJv`6Jr9U-_lYH{QM zm+eoAa%4I@JBi7Cdw9C9*=Zl9&V!Q49XT<(@_I2__Y+DJqTo=!3WNu5>X2U@7U^UC ztOcdD>!vFuGRRbMOeSYtGcll@ZvUQF31 z8rewek0N`H6|lI?wp4x{U5XgLGcFc{P>Fk}3=evVjR85rxseKjsakW17fdTP&Syoc z`xlXcrAu36z};8*IFR@BX6m};<4oX5@=iFm*9q#LNmM|8lW)T{F{m7fb>gYGKeMt2 zxN_cTwUC#UOxpcJ@Y0o4Nck=Q6?^E0;{&4#7Ia`Ke0O4;%32NdyHo57$cqX)e)MwW z($gx%e{rH` zW+T$Rn2B>E)JBu?#4AERm3BvT!%B+`r4>@nA!GO;yPSgimv+WhpoS2c4e2fUR&@jX3hM!sgX%3j^badfR--2o3APfTK-(-^NA_=vd;{ ze?Y_Tyv0yM_a=Anbi)R0(%g7PZdPiR1FaLse-Spp)a|qfqPBXvzTryIQV>Z8zXWro zT!$i+Kyyaej0kFhn5@)`XF{%R2FcE`3&ZEHUHDj2!~OJDF%m?CmZ{!>*7 ztB>Pp=JA%OH5fSLnA%~yBBk*C1W zjHWg*<70UFS*f0EW_()noXiD7p}>pXH`%Uiw~d?@bX)M;NeTOyJhM+==5;bC^%94i zDYFv7f6vbAt5FwqUbd!3XiV(Gg6VRXOX=Z`-kC+fnvVS;uGyIQIRh{SIfB-mDPyR?U9E`%-k5>m0_BeBR}{f#G- zO7C`N$vo`LtV)!JYV=}YFUq1o{*L>$Rcvhjxodmlj9WF!PJ94|nZu-f4>LZf`Smhy z^`0_bMgKU_rU@a>1eLN%g0emBCuj3G5(IjukcZHPia#f$5!TZ*bI+AN%IO?v=C5FG z!qL4t6p!gXgR?lz+Zi6I-gUq?#ZwltH1MdvU2Ze-`{Sf(|Dad7kRGW&8FX3f@K&+p z*xlzcsUl7Lez?oLs|AU|XBlV;$MlQ#`|OSBe4(k36@<&ph@-GOYc&ASN?X0raR`Q& zwoU7)jDXe57o5R(!whAfy==D>_w{B$6h;{Z&A-6-yg81I+7s1=ChAKzG>3I?VA`~g zh<`Llcc2clwIYdC928>SE|*XjDUSR3vgqZbr4ukdYCIWM1<1C}Os)die;6B3B=pSe z`*Xo}rsUNsIFz3hp}Xd~Ih0>=DUGu7x=lJc}q{_L^ONr;fO? zb5vv4Ay&i|*t*%*fQBqpnQBY7$a&-+6Alsfl-%(35{2OfmFM|=Sji_s+Lp!*5+Y}W zy4R^MBO^as?*}~FD8a_tI@|!^|NT}cp9tPL zgWCT>nQcqzEMI#LCc~E6KvJ{t+2V_ao(}AD8>05JHQ^Sktt>TjwnfZ;+$B_PoPU2i zl6F6sv=TEeb)V%&>czxY)<p+a_%d9d_O;5Ovl2q*P8I|YSGKeV zY!iL};Y*D+u>KfuOI&^p0b`bnfojD3SEg*o7|HpM6;@`{%rNAkKVF$(F@fdVT5>^} zIFrY5!gxr%Vfr8Z;lXqZdFmC*5bK6rAra?c8MJ$Ku*Q6=^Br~CsjiYacEBp_Uto2& z5~MZ|EWdJ4L$b4(l&y{Ie;})XWo0R96C#z6<#5#`T_P>MJ|Sf6wdp(g+?L2(xl=*+ z%}q7|2kbJeyHL3+SWvKEWsW}Fkc{X!3%7Xj(DV!ZD|WZlo+t|Pt&o-JFD+l}BbN>> z*pQqE_Mm^$ne}Aa+<{@pJp>8fr_@)&;6E50%%|zmv}LR^X9?K*qeTCB*jyRV9u!o_ zydr4;j=VN;3a^=4B7E%~FqAXxT>>0!qlTI_fO6=&VLVj@n{`3aF;$7oM(oX+b8MO- z#40u3*_=L(oRm918aa<-u^rHutE^kofU$2AF$-gv%Qk1P`oyHn#eZzLi6+RAwJS8RkG|NtPhYvEiu8&} zcmGXI?@rc!bGWw`KY(vOBRZd%H0(;Z!rk}WS-nuSpb5JzcgKmb*Kja^nv{{Mp`5$5 z+Xp#hvv#^C^_%L#9_==Vv6B}c6iUr1b8t2m+6BTN8UST?K%?KTPm72K=$qj>4R%h> zE<4W!{_DlM+N>U@GSWhA&&J^^eUmAHrayO!H_FW-T?5YA|pdTfK)$-R8w3+0R36PF>KEJW7qJ183=2Zw6I)w)b;f(dhDZhLUwsWDbyMg-*21 zHOhU+(N^Sq6VCX4Bkoq6N4XxvJPk8I*A1=*Dp@>E%eG02nKu7mp}S(sb|)o(mb!2g z$TOVFDWf?XwfC^fGWZYbViJWw8_C?%RnC05il~VTVng zLDFp9%clX5VtUNofUu=RKEX(;N>NGCcqkQ)_@1(qzG*;~$DQ`a`2V)AKrS!PyeXkM zJO6mO8&?eJ=94^y@Z3Uj3q4TgL-ML6{hq*e`hjrZv7B0gyfLrDC*~?E6UhQ6eoZJg zT!_sLdT}2UgZ%((hA3sg7O9+)^cUj5g4#zd zi0)|4^jijToIX$p+Rt^cI@SC9beFPi%;wmp>4W`$d?TJ)b@0UZCXh4uJOw(WQJ@og zbA88FIHUza0=u5n3J4vg?hvS4o52;>je)~KZI$N29!blDM$h>rfCk@}6c=s(4O!z_ z*Lo#_HoT$%7>N&%f$HZm_0RE~$8&m@7l-GaUlXKZ1HrFV4T~kE{o#J#uhn2oc(6af z^j5XG>}B{FsHnE@Kq@CsFk57=T(}+W1f2ASfP2x6m|W;W4uNE58>8c4+< z^hJ}|zY3;H$9%_p0OIE$^h)OOH*F+U9YSKWAX&vEmC_EDo|Dah;pPLmkWmG~e_ep# zpje%u7gv=g${-LLe8nkoo)_U|3hj|4M;hf1--2ez%V=$_-xkL11qmANd5pi zgTPE+JynfbeIl`J^yk0EgI$#Xj(m)k8qC2zuM_mM^0Uur|8YkCre6 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.csv b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.csv deleted file mode 100644 index 306f937..0000000 --- a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.csv +++ /dev/null @@ -1,102 +0,0 @@ -close_time,daily_pnl,cum_pnl -2026-01-05,85.61999999999999,85.61999999999999 -2026-01-06,-61.83,23.789999999999992 -2026-01-07,-64.69000000000001,-40.90000000000002 -2026-01-08,-48.95,-89.85000000000002 -2026-01-09,-0.17,-90.02000000000002 -2026-01-10,0.0,-90.02000000000002 -2026-01-11,0.0,-90.02000000000002 -2026-01-12,380.8,290.78 -2026-01-13,-134.17,156.60999999999999 -2026-01-14,65.9,222.51 -2026-01-15,-130.47,92.03999999999999 -2026-01-16,-10.7,81.33999999999999 -2026-01-17,0.0,81.33999999999999 -2026-01-18,0.0,81.33999999999999 -2026-01-19,-182.78,-101.44000000000001 -2026-01-20,86.51,-14.930000000000007 -2026-01-21,16.120000000000005,1.1899999999999977 -2026-01-22,-243.25,-242.06 -2026-01-23,-67.38,-309.44 -2026-01-24,0.0,-309.44 -2026-01-25,0.0,-309.44 -2026-01-26,465.11,155.67000000000002 -2026-01-27,-1.4299999999999784,154.24000000000004 -2026-01-28,580.72,734.96 -2026-01-29,-655.47,79.49000000000001 -2026-01-30,-326.9,-247.40999999999997 -2026-01-31,0.0,-247.40999999999997 -2026-02-01,0.0,-247.40999999999997 -2026-02-02,0.0,-247.40999999999997 -2026-02-03,447.03,199.62 -2026-02-04,533.68,733.3 -2026-02-05,-354.43,378.86999999999995 -2026-02-06,-563.19,-184.3200000000001 -2026-02-07,0.0,-184.3200000000001 -2026-02-08,0.0,-184.3200000000001 -2026-02-09,241.38,57.05999999999989 -2026-02-10,123.99000000000001,181.0499999999999 -2026-02-11,111.97,293.01999999999987 -2026-02-12,-190.67000000000002,102.34999999999985 -2026-02-13,-530.6,-428.25000000000017 -2026-02-14,0.0,-428.25000000000017 -2026-02-15,0.0,-428.25000000000017 -2026-02-16,-149.54999999999998,-577.8000000000002 -2026-02-17,70.7,-507.1000000000002 -2026-02-18,0.0,-507.1000000000002 -2026-02-19,445.3,-61.80000000000018 -2026-02-20,-67.5,-129.30000000000018 -2026-02-21,0.0,-129.30000000000018 -2026-02-22,0.0,-129.30000000000018 -2026-02-23,1518.2,1388.8999999999999 -2026-02-24,-656.6600000000001,732.2399999999998 -2026-02-25,-317.33,414.9099999999998 -2026-02-26,37.540000000000006,452.4499999999998 -2026-02-27,329.27,781.7199999999998 -2026-02-28,0.0,781.7199999999998 -2026-03-01,0.0,781.7199999999998 -2026-03-02,1041.1699999999998,1822.8899999999996 -2026-03-03,-502.8700000000001,1320.0199999999995 -2026-03-04,-151.68,1168.3399999999995 -2026-03-05,-188.37,979.9699999999995 -2026-03-06,-376.65999999999997,603.3099999999995 -2026-03-07,0.0,603.3099999999995 -2026-03-08,0.0,603.3099999999995 -2026-03-09,-296.76,306.5499999999995 -2026-03-10,246.82999999999998,553.3799999999994 -2026-03-11,290.42,843.7999999999995 -2026-03-12,113.06,956.8599999999994 -2026-03-13,-159.65000000000003,797.2099999999994 -2026-03-14,0.0,797.2099999999994 -2026-03-15,0.0,797.2099999999994 -2026-03-16,87.19,884.3999999999994 -2026-03-17,-173.84,710.5599999999994 -2026-03-18,177.18,887.7399999999993 -2026-03-19,1335.5,2223.2399999999993 -2026-03-20,-220.1,2003.1399999999994 -2026-03-21,0.0,2003.1399999999994 -2026-03-22,0.0,2003.1399999999994 -2026-03-23,-83.66,1919.4799999999993 -2026-03-24,-243.82,1675.6599999999994 -2026-03-25,-539.69,1135.9699999999993 -2026-03-26,618.53,1754.4999999999993 -2026-03-27,365.03,2119.5299999999993 -2026-03-28,0.0,2119.5299999999993 -2026-03-29,0.0,2119.5299999999993 -2026-03-30,-1182.6200000000001,936.9099999999992 -2026-03-31,425.55,1362.4599999999991 -2026-04-01,75.17,1437.6299999999992 -2026-04-02,951.76,2389.3899999999994 -2026-04-03,0.0,2389.3899999999994 -2026-04-04,0.0,2389.3899999999994 -2026-04-05,0.0,2389.3899999999994 -2026-04-06,421.78999999999996,2811.1799999999994 -2026-04-07,-317.53999999999996,2493.6399999999994 -2026-04-08,798.5600000000001,3292.1999999999994 -2026-04-09,-652.1,2640.0999999999995 -2026-04-10,-176.86,2463.2399999999993 -2026-04-11,0.0,2463.2399999999993 -2026-04-12,0.0,2463.2399999999993 -2026-04-13,-408.28000000000003,2054.959999999999 -2026-04-14,174.01000000000002,2228.9699999999993 -2026-04-15,600.54,2829.5099999999993 diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.pdf b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.pdf deleted file mode 100644 index 158c7809525e5549abf414eb2d98672235122ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23147 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 QpoiMmQM +#include +#include +#include +#include "MagicNumberHelpers.mqh" +#include "PerformanceEvaluator.mqh" + +//+------------------------------------------------------------------+ +//| Strategy Enable/Disable Switches | +//+------------------------------------------------------------------+ +input group "=== Strategy Enable/Disable ===" +input bool EnableDarvasBox = true; +input bool EnableEMASlopeDistance = true; +input bool EnableRSICrossOverReversal = true; +input bool EnableRSIMidPointHijack = true; +input bool EnableRSIScalpingAPPL = true; +input bool EnableRSIScalpingBTCUSD = true; +input bool EnableRSIScalpingMSFT = true; +input bool EnableRSIScalpingNVDA = true; +input bool EnableRSIScalpingTSLA = true; +input bool EnableRSIScalpingXAUUSD = true; + +//+------------------------------------------------------------------+ +//| Strategy 1: DarvasBoxXAUUSD | +//+------------------------------------------------------------------+ +input group "=== DarvasBox Strategy ===" +input string DB_Symbol = "XAUUSD"; +input int DB_BoxPeriod = 165; +input double DB_BoxDeviation = 30000; // Increased to allow larger ranges (was 25140) +input int DB_VolumeThreshold = 0; // Set to 0 to disable volume threshold check. Volume data from indicator used instead. +input double DB_StopLoss = 1665; +input double DB_TakeProfit = 3685; +input bool DB_EnableLogging = false; +input color DB_BoxColor = clrBlue; +input int DB_BoxWidth = 1; +input ENUM_TIMEFRAMES DB_TrendTimeframe = PERIOD_H2; +input int DB_MA_Period = 125; +input ENUM_MA_METHOD DB_MA_Method = MODE_EMA; +input ENUM_APPLIED_PRICE DB_MA_Price = PRICE_WEIGHTED; +input double DB_TrendThreshold = 4.94; +input int DB_VolumeMA_Period = 110; +input double DB_VolumeThresholdMultiplier = 1.5; +input int DB_MagicNumber = 135790; + +//+------------------------------------------------------------------+ +//| Strategy 2: EMASlopeDistanceCocktailXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== EMA Slope Distance Strategy ===" +input string ES_Symbol = "XAUUSD"; +input int ES_EMA_Periode = 46; +input double ES_PreisSchwelle = 600.0; +input double ES_SteigungSchwelle = 80.0; +input int ES_ÜberwachungTimeout = 800; +input double ES_TrailingStop = 250.0; +input double ES_LotGröße = 0.03; +input int ES_MagicNumber = 12350; +input bool ES_UseSpreadAdjustment = true; +input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; +input bool ES_UseBarData = true; +input int ES_MaxTradesPerCrossover = 9; +input int ES_ProfitCheckBars = 18; +input bool ES_CloseUnprofitableTrades = true; + +//+------------------------------------------------------------------+ +//| Strategy 3: RSICrossOverReversalXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== RSI CrossOver Reversal Strategy ===" +input string RC_Symbol = "XAUUSD"; +input int RC_MagicNumber = 7; +input int RC_rsiPeriod = 19; +input int RC_overboughtLevel = 93; +input int RC_oversoldLevel = 22; +input double RC_entryRSIBuySpread = 0; +input double RC_entryRSISellSpread = 0; +input double RC_lotSize = 0.01; +input int RC_slippage = 3; +input int RC_cooldownSeconds = 209; +input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; +input ENUM_TIMEFRAMES RC_TimeFrame2 = PERIOD_M1; +input ENUM_TIMEFRAMES RC_BarTimeFrame = PERIOD_M12; +input int RC_emaPeriod = 140; +input double RC_emaSlopeThreshold = 105; +input double RC_exitBuyRSI = 86; +input double RC_exitSellRSI = 10; +input double RC_TrailingStop = 295; +input double RC_emaDistanceThreshold = 165; +input int RC_tradingHourOneBegin = 24; +input int RC_tradingHourOneEnd = 22; +input int RC_tradingHourTwoBegin = 6; +input int RC_tradingHourTwoEnd = 19; +input bool RC_Sunday = false; +input bool RC_Monday = false; +input bool RC_Tuesday = true; +input bool RC_Wednesday = true; +input bool RC_Thursday = true; +input bool RC_Friday = false; +input bool RC_Saturday = false; + +//+------------------------------------------------------------------+ +//| Strategy 4: RSIMidPointHijackXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== RSI MidPoint Hijack Strategy ===" +input string RM_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; +input double RM_InpLotSize = 0.02; +input int RM_InpMagicNumberRSIFollow = 1001; +input int RM_InpMagicNumberRSIReverse = 1002; +input int RM_InpMagicNumberEMACross = 1003; +input bool RM_InpEnableRSIFollow = true; +input bool RM_InpEnableRSIReverse = true; +input bool RM_InpEnableEMACross = true; +input bool RM_InpEnableStrategyLock = false; +input double RM_InpLockProfitThreshold = 0.0; +input bool RM_InpCloseOppositeTrades = false; +input int RM_InpRSIPeriod = 32; +input int RM_InpRSIOverbought = 78; +input int RM_InpRSIOversold = 46; +input int RM_InpRSIExitLevel = 44; +input int RM_InpRSIFollowStartHour = 23; +input int RM_InpRSIFollowEndHour = 8; +input bool RM_InpRSIFollowCloseOutsideHours = false; +input int RM_InpRSIReversePeriod = 59; +input int RM_InpRSIReverseOverbought = 51; +input int RM_InpRSIReverseOversold = 49; +input int RM_InpRSIReverseCrossLevel = 53; +input int RM_InpRSIReverseExitLevel = 48; +input int RM_InpRSIReverseStartHour = 7; +input int RM_InpRSIReverseEndHour = 13; +input bool RM_InpRSIReverseCloseOutsideHours = false; +input int RM_InpRSIReverseCooldownBars = 15; +input bool RM_InpRSIReverseCooldownOnLoss = true; +input int RM_InpEMAPeriod = 120; +input int RM_InpEMACrossStartHour = 8; +input int RM_InpEMACrossEndHour = 14; +input bool RM_InpEMACrossCloseOutsideHours = true; +input bool RM_InpUseEMADistanceEntry = true; +input double RM_InpEMADistancePips = 160.0; +input int RM_InpEMADistancePeriod = 26; + +//+------------------------------------------------------------------+ +//| Strategy 5-10: RSI Scalping Strategies | +//| Each RSI Scalping strategy trades on its own symbol: | +//| - APPL: Apple stock (AAPL) | +//| - BTCUSD: Bitcoin/USD | +//| - MSFT: Microsoft stock | +//| - NVDA: NVIDIA stock | +//| - TSLA: Tesla stock | +//| - XAUUSD: Gold/USD | +//| | +//| PEPPERSTONE US SYMBOL FORMATS: | +//| - Stocks may use: "AAPL.US", "NASDAQ:AAPL", or just "AAPL" | +//| - To find correct symbols: | +//| 1. Open Market Watch (Ctrl+M) | +//| 2. Right-click > Show All | +//| 3. Search for the stock name | +//| 4. Use the exact symbol name shown | +//+------------------------------------------------------------------+ +input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" +input string RS_APPL_Symbol = "AAPL.US"; // Try: "AAPL.US", "NASDAQ:AAPL", or "AAPL" +input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; +input int RS_APPL_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; +input double RS_APPL_RSI_Overbought = 80; +input double RS_APPL_RSI_Oversold = 78; +input double RS_APPL_RSI_Target_Buy = 94; +input double RS_APPL_RSI_Target_Sell = 44; +input int RS_APPL_BarsToWait = 7; +input double RS_APPL_LotSize = 25; +input int RS_APPL_MagicNumber = 20001; +input int RS_APPL_Slippage = 3; + +input group "=== RSI Scalping BTCUSD ===" +input string RS_BTCUSD_Symbol = "BTCUSD"; // Pepperstone may use: "BTCUSD", "BTC/USD", or "BTCUSD.c" +input ENUM_TIMEFRAMES RS_BTCUSD_TimeFrame = PERIOD_H1; +input int RS_BTCUSD_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_BTCUSD_RSI_Applied_Price = PRICE_CLOSE; +input double RS_BTCUSD_RSI_Overbought = 90; +input double RS_BTCUSD_RSI_Oversold = 73; +input double RS_BTCUSD_RSI_Target_Buy = 88; +input double RS_BTCUSD_RSI_Target_Sell = 48; +input int RS_BTCUSD_BarsToWait = 6; +input double RS_BTCUSD_LotSize = 0.1; +input int RS_BTCUSD_MagicNumber = 123459123; +input int RS_BTCUSD_Slippage = 3; + +input group "=== RSI Scalping MSFT - Pepperstone US ===" +input string RS_MSFT_Symbol = "MSFT.US"; // Try: "MSFT.US", "NASDAQ:MSFT", or "MSFT" +input ENUM_TIMEFRAMES RS_MSFT_TimeFrame = PERIOD_H3; +input int RS_MSFT_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_MSFT_RSI_Applied_Price = PRICE_CLOSE; +input double RS_MSFT_RSI_Overbought = 19; +input double RS_MSFT_RSI_Oversold = 50; +input double RS_MSFT_RSI_Target_Buy = 71; +input double RS_MSFT_RSI_Target_Sell = 70; +input int RS_MSFT_BarsToWait = 1; +input double RS_MSFT_LotSize = 50; +input int RS_MSFT_MagicNumber = 20002; +input int RS_MSFT_Slippage = 3; + +input group "=== RSI Scalping NVDA - Pepperstone US ===" +input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" +input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; +input int RS_NVDA_RSI_Period = 8; +input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; +input double RS_NVDA_RSI_Overbought = 36; +input double RS_NVDA_RSI_Oversold = 38; +input double RS_NVDA_RSI_Target_Buy = 90; +input double RS_NVDA_RSI_Target_Sell = 70; +input int RS_NVDA_BarsToWait = 5; +input double RS_NVDA_LotSize = 50; +input int RS_NVDA_MagicNumber = 20003; +input int RS_NVDA_Slippage = 3; + +input group "=== RSI Scalping TSLA - Pepperstone US ===" +input string RS_TSLA_Symbol = "TSLA.US"; // Try: "TSLA.US", "NASDAQ:TSLA", or "TSLA" +input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; +input int RS_TSLA_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; +input double RS_TSLA_RSI_Overbought = 54; +input double RS_TSLA_RSI_Oversold = 73; +input double RS_TSLA_RSI_Target_Buy = 87; +input double RS_TSLA_RSI_Target_Sell = 33; +input int RS_TSLA_BarsToWait = 1; +input double RS_TSLA_LotSize = 50; +input int RS_TSLA_MagicNumber = 125421321; +input int RS_TSLA_Slippage = 3; + +input group "=== RSI Scalping XAUUSD ===" +input string RS_XAUUSD_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RS_XAUUSD_TimeFrame = PERIOD_H1; +input int RS_XAUUSD_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_XAUUSD_RSI_Applied_Price = PRICE_CLOSE; +input double RS_XAUUSD_RSI_Overbought = 71; +input double RS_XAUUSD_RSI_Oversold = 57; +input double RS_XAUUSD_RSI_Target_Buy = 80; +input double RS_XAUUSD_RSI_Target_Sell = 57; +input int RS_XAUUSD_BarsToWait = 4; +input double RS_XAUUSD_LotSize = 0.1; +input int RS_XAUUSD_MagicNumber = 129102315; +input int RS_XAUUSD_Slippage = 3; + +//+------------------------------------------------------------------+ +//| Global Variables - DarvasBox | +//+------------------------------------------------------------------+ +struct DarvasBoxData { + string symbol; + bool isInitialized; + double boxHigh; + double boxLow; + bool boxFormed; + datetime lastBoxTime; + string boxName; + double minStopLevel; + double point; + CTrade trade; + int maHandle; + int volumeHandle; + datetime lastBarTime; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - EMA Slope Distance | +//+------------------------------------------------------------------+ +struct EMASlopeData { + string symbol; + bool isInitialized; + int ema_handle; + double ema_array[]; + datetime letzte_überwachung_zeit; + bool überwachung_aktiv; + bool preis_trigger_aktiv; + bool steigung_trigger_aktiv; + int ticket; + CTrade trade; + int trades_in_current_crossover; + bool crossover_detected; + datetime trade_open_time; + datetime last_bar_time; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI CrossOver Reversal | +//+------------------------------------------------------------------+ +struct RSICrossOverData { + string symbol; + bool isInitialized; + int rsiHandle; + int emaHandle; + double previousRSIDef; + CTrade trade; + datetime lastTradeTime; + datetime bartime; + bool WeekDays[7]; + datetime lastBarTime; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI MidPoint Hijack | +//+------------------------------------------------------------------+ +struct RSIMidPointData { + string symbol; + bool isInitialized; + int rsiHandle; + int rsiReverseHandle; + int emaHandle; + bool rsiOverbought; + bool rsiOversold; + bool rsiReverseOverbought; + bool rsiReverseOversold; + CTrade trade; + CPositionInfo positionInfo; + bool emaCrossBuySignal; + bool emaCrossSellSignal; + int emaCrossSignalBar; + datetime lastBarTime; + datetime rsiReverseLastCloseTime; + bool rsiReverseInCooldown; + double lastBarRSI; + double lastBarRSIReverse; + double lastBarEMA; + double lastBarClose; + double lastBarEMAPrev; + double lastBarClosePrev; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI Scalping | +//+------------------------------------------------------------------+ +struct RSIScalpingData { + string symbol; + bool isInitialized; + CTrade trade; + int rsi_handle; + double rsi_buffer[]; + double rsi_prev; + double rsi_current; + double rsi_two_bars_ago; + bool position_open; + ulong position_ticket; + ENUM_POSITION_TYPE current_position_type; + datetime last_bar_time; + bool rsi_against_position; + int bars_against_count; +}; + +//+------------------------------------------------------------------+ +//| Global Strategy Instances | +//+------------------------------------------------------------------+ +DarvasBoxData dbData; +EMASlopeData esData; +RSICrossOverData rcData; +RSIMidPointData rmData; +RSIScalpingData rsAPPLData; +RSIScalpingData rsBTCUSDData; +RSIScalpingData rsMSFTData; +RSIScalpingData rsNVDAData; +RSIScalpingData rsTSLAData; +RSIScalpingData rsXAUUSDData; + +//+------------------------------------------------------------------+ +//| Global Variables for Dynamic Lot Sizes | +//+------------------------------------------------------------------+ +// All strategies start with minimum lot size for safety (will be adjusted by performance evaluator) +double g_DB_LotSize = 0.01; // DarvasBox uses fixed lot size +double g_ES_LotSize = 0.01; // EMA Slope Distance - start with minimum +double g_RC_LotSize = 0.01; // RSI CrossOver Reversal - start with minimum +double g_RM_LotSize = 0.01; // RSI MidPoint Hijack - start with minimum +double g_RS_APPL_LotSize = 5.0; // Stock - start with stock minimum (5.0) +double g_RS_BTCUSD_LotSize = 0.01; // Crypto - start with forex minimum (0.01) +double g_RS_MSFT_LotSize = 5.0; // Stock - start with stock minimum (5.0) +double g_RS_NVDA_LotSize = 5.0; // Stock - start with stock minimum (5.0) +double g_RS_TSLA_LotSize = 5.0; // Stock - start with stock minimum (5.0) +double g_RS_XAUUSD_LotSize = 0.01; // Forex - start with forex minimum (0.01) + +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() +{ + int initResult = INIT_SUCCEEDED; + + // Initialize Performance Evaluator + InitPerformanceTracking(); + + // Initialize strategies - log warnings but don't fail entire EA if symbol unavailable + if(EnableDarvasBox) + { + if(!InitDarvasBox(DB_Symbol)) + Print("Warning: DarvasBox strategy failed to initialize for symbol '", DB_Symbol, "'"); + else + RegisterStrategy("DarvasBox", DB_MagicNumber, 0.01, DB_Symbol); // Fixed lot size + } + + if(EnableEMASlopeDistance) + { + if(!InitEMASlopeDistance(ES_Symbol)) + Print("Warning: EMASlopeDistance strategy failed to initialize for symbol '", ES_Symbol, "'"); + else + { + RegisterStrategy("EMASlopeDistance", ES_MagicNumber, ES_LotGröße, ES_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(ES_Symbol); + g_ES_LotSize = minLot; + } + } + + if(EnableRSICrossOverReversal) + { + if(!InitRSICrossOverReversal(RC_Symbol)) + Print("Warning: RSICrossOverReversal strategy failed to initialize for symbol '", RC_Symbol, "'"); + else + { + RegisterStrategy("RSICrossOverReversal", RC_MagicNumber, RC_lotSize, RC_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RC_Symbol); + g_RC_LotSize = minLot; + } + } + + if(EnableRSIMidPointHijack) + { + if(!InitRSIMidPointHijack(RM_Symbol)) + Print("Warning: RSIMidPointHijack strategy failed to initialize for symbol '", RM_Symbol, "'"); + else + { + RegisterStrategy("RSIMidPointHijack", RM_InpMagicNumberRSIFollow, RM_InpLotSize, RM_Symbol); + RegisterStrategy("RSIMidPointHijack_Reverse", RM_InpMagicNumberRSIReverse, RM_InpLotSize, RM_Symbol); + RegisterStrategy("RSIMidPointHijack_EMACross", RM_InpMagicNumberEMACross, RM_InpLotSize, RM_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RM_Symbol); + g_RM_LotSize = minLot; + } + } + + // Initialize RSI Scalping strategies - don't fail entire EA if symbol unavailable + if(EnableRSIScalpingAPPL) + { + InitRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_MagicNumber, RS_APPL_Slippage); + RegisterStrategy("RSIScalpingAPPL", RS_APPL_MagicNumber, RS_APPL_LotSize, RS_APPL_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_APPL_Symbol); + g_RS_APPL_LotSize = minLot; + } + + if(EnableRSIScalpingBTCUSD) + { + InitRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_MagicNumber, RS_BTCUSD_Slippage); + RegisterStrategy("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber, RS_BTCUSD_LotSize, RS_BTCUSD_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_BTCUSD_Symbol); + g_RS_BTCUSD_LotSize = minLot; + } + + if(EnableRSIScalpingMSFT) + { + InitRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, RS_MSFT_MagicNumber, RS_MSFT_Slippage); + RegisterStrategy("RSIScalpingMSFT", RS_MSFT_MagicNumber, RS_MSFT_LotSize, RS_MSFT_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_MSFT_Symbol); + g_RS_MSFT_LotSize = minLot; + } + + if(EnableRSIScalpingNVDA) + { + InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); + RegisterStrategy("RSIScalpingNVDA", RS_NVDA_MagicNumber, RS_NVDA_LotSize, RS_NVDA_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_NVDA_Symbol); + g_RS_NVDA_LotSize = minLot; + } + + if(EnableRSIScalpingTSLA) + { + InitRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_MagicNumber, RS_TSLA_Slippage); + RegisterStrategy("RSIScalpingTSLA", RS_TSLA_MagicNumber, RS_TSLA_LotSize, RS_TSLA_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_TSLA_Symbol); + g_RS_TSLA_LotSize = minLot; + } + + if(EnableRSIScalpingXAUUSD) + { + InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); + RegisterStrategy("RSIScalpingXAUUSD", RS_XAUUSD_MagicNumber, RS_XAUUSD_LotSize, RS_XAUUSD_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_XAUUSD_Symbol); + g_RS_XAUUSD_LotSize = minLot; + } + + // Load adjusted lot sizes from performance evaluator + if(PE_EnableAutoAdjustment) + { + double adjustedLot; + adjustedLot = GetStrategyLotSize("EMASlopeDistance", ES_MagicNumber); + if(adjustedLot > 0) g_ES_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSICrossOverReversal", RC_MagicNumber); + if(adjustedLot > 0) g_RC_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIMidPointHijack", RM_InpMagicNumberRSIFollow); + if(adjustedLot > 0) g_RM_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingAPPL", RS_APPL_MagicNumber); + if(adjustedLot > 0) g_RS_APPL_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); + if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); + if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingTSLA", RS_TSLA_MagicNumber); + if(adjustedLot > 0) g_RS_TSLA_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingXAUUSD", RS_XAUUSD_MagicNumber); + if(adjustedLot > 0) g_RS_XAUUSD_LotSize = adjustedLot; + } + + Print("United EA initialized. Active strategies: ", + (EnableDarvasBox ? "DarvasBox " : ""), + (EnableEMASlopeDistance ? "EMASlope " : ""), + (EnableRSICrossOverReversal ? "RSICrossOver " : ""), + (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), + (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), + (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), + (EnableRSIScalpingMSFT ? "RSIScalpingMSFT " : ""), + (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), + (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), + (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : "")); + + if(PE_EnableLogging) + Print(GetPerformanceSummary()); + + return initResult; +} + +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) +{ + if(EnableDarvasBox) + DeinitDarvasBox(); + + if(EnableEMASlopeDistance) + DeinitEMASlopeDistance(); + + if(EnableRSICrossOverReversal) + DeinitRSICrossOverReversal(); + + if(EnableRSIMidPointHijack) + DeinitRSIMidPointHijack(); + + if(EnableRSIScalpingAPPL) + DeinitRSIScalping(rsAPPLData); + + if(EnableRSIScalpingBTCUSD) + DeinitRSIScalping(rsBTCUSDData); + + if(EnableRSIScalpingMSFT) + DeinitRSIScalping(rsMSFTData); + + if(EnableRSIScalpingNVDA) + DeinitRSIScalping(rsNVDAData); + + if(EnableRSIScalpingTSLA) + DeinitRSIScalping(rsTSLAData); + + if(EnableRSIScalpingXAUUSD) + DeinitRSIScalping(rsXAUUSDData); + + Print("United EA deinitialized. Reason: ", reason); +} + +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() +{ + // Process performance evaluation (checks for quarter end and adjusts lot sizes) + ProcessPerformanceEvaluation(); + + // Update lot sizes from performance evaluator if auto-adjustment is enabled + if(PE_EnableAutoAdjustment) + { + double adjustedLot; + adjustedLot = GetStrategyLotSize("EMASlopeDistance", ES_MagicNumber); + if(adjustedLot > 0) g_ES_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSICrossOverReversal", RC_MagicNumber); + if(adjustedLot > 0) g_RC_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIMidPointHijack", RM_InpMagicNumberRSIFollow); + if(adjustedLot > 0) g_RM_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingAPPL", RS_APPL_MagicNumber); + if(adjustedLot > 0) g_RS_APPL_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); + if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); + if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingTSLA", RS_TSLA_MagicNumber); + if(adjustedLot > 0) g_RS_TSLA_LotSize = adjustedLot; + + adjustedLot = GetStrategyLotSize("RSIScalpingXAUUSD", RS_XAUUSD_MagicNumber); + if(adjustedLot > 0) g_RS_XAUUSD_LotSize = adjustedLot; + } + + if(EnableDarvasBox) + ProcessDarvasBox(DB_Symbol); + + if(EnableEMASlopeDistance) + ProcessEMASlopeDistance(ES_Symbol); + + if(EnableRSICrossOverReversal) + ProcessRSICrossOverReversal(RC_Symbol); + + if(EnableRSIMidPointHijack) + ProcessRSIMidPointHijack(RM_Symbol); + + if(EnableRSIScalpingAPPL) + ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, + RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, + RS_APPL_BarsToWait, g_RS_APPL_LotSize, RS_APPL_MagicNumber); + + if(EnableRSIScalpingBTCUSD) + ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, + RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, + RS_BTCUSD_BarsToWait, g_RS_BTCUSD_LotSize, RS_BTCUSD_MagicNumber); + + if(EnableRSIScalpingMSFT) + ProcessRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, + RS_MSFT_RSI_Overbought, RS_MSFT_RSI_Oversold, RS_MSFT_RSI_Target_Buy, RS_MSFT_RSI_Target_Sell, + RS_MSFT_BarsToWait, g_RS_MSFT_LotSize, RS_MSFT_MagicNumber); + + if(EnableRSIScalpingNVDA) + ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, + RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, + RS_NVDA_BarsToWait, g_RS_NVDA_LotSize, RS_NVDA_MagicNumber); + + if(EnableRSIScalpingTSLA) + ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, + RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, + RS_TSLA_BarsToWait, g_RS_TSLA_LotSize, RS_TSLA_MagicNumber); + + if(EnableRSIScalpingXAUUSD) + ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, + RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, + RS_XAUUSD_BarsToWait, g_RS_XAUUSD_LotSize, RS_XAUUSD_MagicNumber); +} + +//+------------------------------------------------------------------+ +//| Include strategy implementations | +//+------------------------------------------------------------------+ +#include "Strategies/DarvasBoxStrategy.mqh" +#include "Strategies/EMASlopeDistanceStrategy.mqh" +#include "Strategies/RSICrossOverReversalStrategy.mqh" +#include "Strategies/RSIMidPointHijackStrategy.mqh" +#include "Strategies/RSIScalpingStrategy.mqh" + +//+------------------------------------------------------------------+ diff --git a/frontline/units/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set b/frontline/units/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set new file mode 100644 index 0000000..ca12828 --- /dev/null +++ b/frontline/units/DarvasBoxXAUUSD/DarvasBoxXAUUSD_Genetic_Optimization.set @@ -0,0 +1,27 @@ +; saved on 2026.04.22 +; genetic optimization set for DarvasBoxXAUUSD/main.mq5 +; load in MT5 Strategy Tester -> Inputs -> Load +; +; === Core Darvas Box Parameters === +BoxPeriod=165||80||5||280||Y +BoxDeviation=25140||8000||500||50000||Y +VolumeThreshold=938||200||25||2500||Y +StopLoss=1665||600||50||4000||Y +TakeProfit=3685||1200||75||8000||Y +EnableLogging=false||false||0||true||N +BoxColor=255||0||1||16777215||N +BoxWidth=1||1||1||3||N +; +; === Trend Confirmation Parameters === +TrendTimeframe=16386||16385||1||16388||Y +MA_Period=125||20||5||260||Y +MA_Method=1||0||1||3||Y +MA_Price=6||0||1||6||Y +TrendThreshold=4.94||1.0||0.2||20.0||Y +; +; === Volume Analysis Parameters === +VolumeMA_Period=110||20||5||220||Y +VolumeThresholdMultiplier=1.5||1.0||0.1||3.5||Y +; +; === Execution / ID === +MagicNumber=135790||135790||1||1357900||N diff --git a/frontline/MQL5/DarvasBoxXAUUSD/main.mq5 b/frontline/units/DarvasBoxXAUUSD/main.mq5 similarity index 100% rename from frontline/MQL5/DarvasBoxXAUUSD/main.mq5 rename to frontline/units/DarvasBoxXAUUSD/main.mq5 diff --git a/frontline/MQL5/MeanReversionXAUUSD/main.mq5 b/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 similarity index 86% rename from frontline/MQL5/MeanReversionXAUUSD/main.mq5 rename to frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 index 8a0349e..06b1086 100644 --- a/frontline/MQL5/MeanReversionXAUUSD/main.mq5 +++ b/frontline/units/EMASlopeDistanceCocktailXAUUSD/main.mq5 @@ -3,25 +3,30 @@ //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ -#property link "https://www.mql5.com" #property copyright "Copyright 2025, MetaQuotes Ltd." +#property link "https://www.mql5.com" #property version "1.00" #include #include "../_united/MagicNumberHelpers.mqh" //--- Eingabeparameter (Input Parameters) - Optimized Profitable Parameters -input int EMA_Periode = 46; // EMA Periode -input double PreisSchwelle = 600.0; // Preisbewegung Schwelle in Pips -input double SteigungSchwelle = 80.0; // EMA Steigung Schwelle in Pips -input int ÜberwachungTimeout = 800; // Überwachungszeit in Sekunden -input double TrailingStop = 260.0; // Gleitender Stop in Pips -input double LotGröße = 0.03; // Handelsvolumen -input int MagicNumber = 12351; // Magic Number für Trades +input int EMA_Periode = 50; // EMA Periode +input double PreisSchwelle = 700.0; // Preisbewegung Schwelle in Pips +input double SteigungSchwelle = 25.0; // EMA Steigung Schwelle in Pips +input int ÜberwachungTimeout = 340; // Überwachungszeit in Sekunden +input double TrailingStop = 370.0; // Gleitender Stop in Pips +input double LotGröße = 0.07; // Handelsvolumen +input int MagicNumber = 135790; // Magic Number für Trades input bool UseSpreadAdjustment = true; // Spread-Anpassung verwenden input ENUM_TIMEFRAMES Timeframe = PERIOD_H1; // Zeitraum für Analyse input bool UseBarData = true; // Bar-Daten statt Tick-Daten verwenden -input int MaxTradesPerCrossover = 9; // Maximale Trades pro Crossover-Ereignis -input int ProfitCheckBars = 12; // Bars bis zur Profit-Prüfung +input int MaxTradesPerCrossover = 10; // Maximale Trades pro Crossover-Ereignis +input int ProfitCheckBars = 15; // Bars bis zur Profit-Prüfung input bool CloseUnprofitableTrades = true; // Unprofitable Trades nach X Bars schließen +input bool UseWeeklyADXFilter = true; // W1 ADX Trendfilter aktivieren +input int WeeklyADXPeriod = 15; // ADX-Periode auf W1 +input double WeeklyADXMin = 40.0; // Minimaler ADX fuer Trendfreigabe +input int WeeklyADXBarShift = 2; // 1=letzte geschlossene W1-Kerze +input bool WeeklyADXUseDirection = true; // +DI/-DI Richtung mitpruefen //--- Globale Variablen (Global Variables) int ema_handle; // EMA Indicator Handle @@ -36,6 +41,64 @@ int trades_in_current_crossover = 0; // Anzahl Trades im aktuellen Crossover bool crossover_detected = false; // Crossover erkannt datetime trade_open_time = 0; // Zeitpunkt des Trade-Öffnens +//+------------------------------------------------------------------+ +//| Weekly ADX trend filter | +//+------------------------------------------------------------------+ +bool IsWeeklyADXTrendFavorable(ENUM_ORDER_TYPE order_type) +{ + if(!UseWeeklyADXFilter) + return true; + + int adxShift = WeeklyADXBarShift; + if(adxShift < 0) + adxShift = 0; + + int adx_handle = iADX(_Symbol, PERIOD_W1, WeeklyADXPeriod); + if(adx_handle == INVALID_HANDLE) + { + Print("TRACE: Weekly ADX Handle ungültig - Filter blockiert Entry"); + return false; + } + + double adx_buf[], plus_di_buf[], minus_di_buf[]; + ArraySetAsSeries(adx_buf, true); + ArraySetAsSeries(plus_di_buf, true); + ArraySetAsSeries(minus_di_buf, true); + + bool ok_adx = (CopyBuffer(adx_handle, 0, adxShift, 1, adx_buf) > 0); + bool ok_plus = (CopyBuffer(adx_handle, 1, adxShift, 1, plus_di_buf) > 0); + bool ok_minus = (CopyBuffer(adx_handle, 2, adxShift, 1, minus_di_buf) > 0); + IndicatorRelease(adx_handle); + + if(!ok_adx || !ok_plus || !ok_minus) + { + Print("TRACE: Weekly ADX Daten nicht verfügbar - Filter blockiert Entry"); + return false; + } + + double adx_value = adx_buf[0]; + double plus_di = plus_di_buf[0]; + double minus_di = minus_di_buf[0]; + + bool strength_ok = (adx_value >= WeeklyADXMin); + bool direction_ok = true; + if(WeeklyADXUseDirection) + { + if(order_type == ORDER_TYPE_BUY) + direction_ok = (plus_di > minus_di); + else + direction_ok = (minus_di > plus_di); + } + + Print("TRACE: Weekly ADX Filter | ADX=", DoubleToString(adx_value, 2), + " +DI=", DoubleToString(plus_di, 2), + " -DI=", DoubleToString(minus_di, 2), + " strength_ok=", strength_ok, + " direction_ok=", direction_ok); + + return (strength_ok && direction_ok); +} + //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ @@ -292,6 +355,11 @@ void PrüfeTrigger() if(bullish_signal && !PositionExistsByMagic(_Symbol, MagicNumber)) { + if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_BUY)) + { + Print("TRACE: Weekly ADX blockiert BUY-Entry"); + return; + } Print("TRACE: Versuche KAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); if(PlatziereTrade(ORDER_TYPE_BUY)) { @@ -300,6 +368,11 @@ void PrüfeTrigger() } else if(bearish_signal && !PositionExistsByMagic(_Symbol, MagicNumber)) { + if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_SELL)) + { + Print("TRACE: Weekly ADX blockiert SELL-Entry"); + return; + } Print("TRACE: Versuche VERKAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); if(PlatziereTrade(ORDER_TYPE_SELL)) { diff --git a/frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/report.html b/frontline/units/EMASlopeDistanceCocktailXAUUSD/report.html similarity index 100% rename from frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/report.html rename to frontline/units/EMASlopeDistanceCocktailXAUUSD/report.html diff --git a/frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/report.png b/frontline/units/EMASlopeDistanceCocktailXAUUSD/report.png similarity index 100% rename from frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/report.png rename to frontline/units/EMASlopeDistanceCocktailXAUUSD/report.png diff --git a/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX.mq5 b/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX.mq5 new file mode 100644 index 0000000..03c6d6d --- /dev/null +++ b/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX.mq5 @@ -0,0 +1,362 @@ +#property strict +#property version "1.00" +#property description "BTCUSD mean reversion: RSI extreme + EMA distance + low ADX; escape when ADX trends up." + +#include + +input group "=== Market ===" +input string InpSymbol = "BTCUSD"; +input ENUM_TIMEFRAMES InpTimeframe = PERIOD_M20; +input double InpLots = 0.01; +input int InpSlippagePoints = 30; +input int InpMagic = 930201; +input int InpMaxPositions = 5; +input bool InpDebugLogs = false; + +input group "=== EMA distance (mean reversion stretch) ===" +input int InpEmaPeriod = 250; +input double InpMinEmaDistancePts = 3650.0; // |close-EMA| in points; raise/lower for BTC broker digits + +input group "=== RSI ===" +input int InpRsiPeriod = 28; +input double InpRsiOversold = 40.0; +input double InpRsiOverbought = 83.0; +input bool InpUseRsiCross = false; // true: require cross into zone on last bar + +input group "=== ADX (trend filter + escape) ===" +input int InpAdxPeriod = 27; +input double InpAdxMaxForEntry = 17.0; // no new trades if ADX >= this (ranging bias) +input double InpAdxEscape = 34.0; // close all if ADX >= this (trend building) + +input group "=== Price action (optional) ===" +input bool InpRequireReversalBar = false; // buy: bearish bar at signal; sell: bullish bar + +input group "=== Risk ===" +input bool InpUseHardSLTP = false; +input double InpSLPoints = 1300; +input double InpTPPoints = 13400; + +CTrade trade; +datetime g_lastBarTime = 0; + +int g_hRsi = INVALID_HANDLE; +int g_hEma = INVALID_HANDLE; +int g_hAdx = INVALID_HANDLE; + +void DebugLog(const string msg) +{ + if(InpDebugLogs) + Print("[MeanRevEMA_RSI_ADX] ", msg); +} + +bool IsNewBar(const string symbol, const ENUM_TIMEFRAMES tf) +{ + datetime t = iTime(symbol, tf, 0); + if(t <= 0 || t == g_lastBarTime) + return false; + g_lastBarTime = t; + return true; +} + +bool CopyOne(const int handle, const int buffer, const int shift, double &out) +{ + if(handle == INVALID_HANDLE) + return false; + double v[1]; + if(CopyBuffer(handle, buffer, shift, 1, v) != 1) + return false; + out = v[0]; + return true; +} + +double GetAdx(const int shift) +{ + double v = 0.0; + if(!CopyOne(g_hAdx, 0, shift, v)) + return 0.0; + return v; +} + +double GetRsi(const int shift) +{ + double v = 0.0; + if(!CopyOne(g_hRsi, 0, shift, v)) + return 0.0; + return v; +} + +double GetEma(const int shift) +{ + double v = 0.0; + if(!CopyOne(g_hEma, 0, shift, v)) + return 0.0; + return v; +} + +int CountPositionsByMagic(const string symbol, const int magic) +{ + int count = 0; + for(int i = PositionsTotal() - 1; i >= 0; --i) + { + ulong t = PositionGetTicket(i); + if(t == 0) + continue; + if(PositionGetString(POSITION_SYMBOL) == symbol && + (int)PositionGetInteger(POSITION_MAGIC) == magic) + count++; + } + return count; +} + +void CloseAllByMagic(const string symbol, const int magic) +{ + for(int i = PositionsTotal() - 1; i >= 0; --i) + { + ulong t = PositionGetTicket(i); + if(t == 0) + continue; + if(PositionGetString(POSITION_SYMBOL) == symbol && + (int)PositionGetInteger(POSITION_MAGIC) == magic) + trade.PositionClose(t); + } +} + +void ComputeSLTP(const bool isBuy, const double entry, double &sl, double &tp) +{ + if(!InpUseHardSLTP) + { + sl = 0.0; + tp = 0.0; + return; + } + if(isBuy) + { + sl = entry - InpSLPoints * _Point; + tp = entry + InpTPPoints * _Point; + } + else + { + sl = entry + InpSLPoints * _Point; + tp = entry - InpTPPoints * _Point; + } +} + +bool RsiOversoldSignal() +{ + double r1 = 0.0, r2 = 0.0; + if(!CopyOne(g_hRsi, 0, 1, r1) || !CopyOne(g_hRsi, 0, 2, r2)) + return false; + if(InpUseRsiCross) + return (r2 > InpRsiOversold && r1 <= InpRsiOversold); + return (r1 <= InpRsiOversold); +} + +bool RsiOverboughtSignal() +{ + double r1 = 0.0, r2 = 0.0; + if(!CopyOne(g_hRsi, 0, 1, r1) || !CopyOne(g_hRsi, 0, 2, r2)) + return false; + if(InpUseRsiCross) + return (r2 < InpRsiOverbought && r1 >= InpRsiOverbought); + return (r1 >= InpRsiOverbought); +} + +bool BarBearish(const int shift) +{ + double o = iOpen(InpSymbol, InpTimeframe, shift); + double c = iClose(InpSymbol, InpTimeframe, shift); + return (c < o); +} + +bool BarBullish(const int shift) +{ + double o = iOpen(InpSymbol, InpTimeframe, shift); + double c = iClose(InpSymbol, InpTimeframe, shift); + return (c > o); +} + +bool BuySetup() +{ + if(!RsiOversoldSignal()) + return false; + + double ema = GetEma(1); + double cls = iClose(InpSymbol, InpTimeframe, 1); + if(ema <= 0.0 || cls <= 0.0) + return false; + + double distPts = (ema - cls) / _Point; + if(distPts < InpMinEmaDistancePts) + return false; + + if(InpRequireReversalBar && !BarBearish(1)) + return false; + + double adx = GetAdx(1); + if(adx <= 0.0) + return false; + if(adx >= InpAdxMaxForEntry) + return false; + + return true; +} + +bool SellSetup() +{ + if(!RsiOverboughtSignal()) + return false; + + double ema = GetEma(1); + double cls = iClose(InpSymbol, InpTimeframe, 1); + if(ema <= 0.0 || cls <= 0.0) + return false; + + double distPts = (cls - ema) / _Point; + if(distPts < InpMinEmaDistancePts) + return false; + + if(InpRequireReversalBar && !BarBullish(1)) + return false; + + double adx = GetAdx(1); + if(adx <= 0.0) + return false; + if(adx >= InpAdxMaxForEntry) + return false; + + return true; +} + +int OnInit() +{ + if(StringLen(InpSymbol) == 0) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: InpSymbol is empty."); + return INIT_PARAMETERS_INCORRECT; + } + if(InpRsiPeriod < 2 || InpEmaPeriod < 1 || InpAdxPeriod < 1) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: invalid periods rsi=", InpRsiPeriod, + " ema=", InpEmaPeriod, " adx=", InpAdxPeriod); + return INIT_PARAMETERS_INCORRECT; + } + if(!SymbolSelect(InpSymbol, true)) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: SymbolSelect failed (symbol missing on this agent?): ", InpSymbol, + " err=", GetLastError(), + " — use Local agents only for broker-specific names, or set InpSymbol to a symbol the agent has."); + return INIT_PARAMETERS_INCORRECT; + } + + g_hRsi = iRSI(InpSymbol, InpTimeframe, InpRsiPeriod, PRICE_CLOSE); + if(g_hRsi == INVALID_HANDLE) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: iRSI failed sym=", InpSymbol, " tf=", (int)InpTimeframe, + " period=", InpRsiPeriod, " err=", GetLastError()); + return INIT_FAILED; + } + g_hEma = iMA(InpSymbol, InpTimeframe, InpEmaPeriod, 0, MODE_EMA, PRICE_CLOSE); + if(g_hEma == INVALID_HANDLE) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: iMA failed sym=", InpSymbol, " tf=", (int)InpTimeframe, + " period=", InpEmaPeriod, " err=", GetLastError()); + IndicatorRelease(g_hRsi); + g_hRsi = INVALID_HANDLE; + return INIT_FAILED; + } + g_hAdx = iADX(InpSymbol, InpTimeframe, InpAdxPeriod); + if(g_hAdx == INVALID_HANDLE) + { + Print("[MeanRevEMA_RSI_ADX] OnInit: iADX failed sym=", InpSymbol, " tf=", (int)InpTimeframe, + " period=", InpAdxPeriod, " err=", GetLastError()); + IndicatorRelease(g_hRsi); + IndicatorRelease(g_hEma); + g_hRsi = g_hEma = INVALID_HANDLE; + return INIT_FAILED; + } + + trade.SetExpertMagicNumber(InpMagic); + trade.SetDeviationInPoints(InpSlippagePoints); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(g_hRsi != INVALID_HANDLE) IndicatorRelease(g_hRsi); + if(g_hEma != INVALID_HANDLE) IndicatorRelease(g_hEma); + if(g_hAdx != INVALID_HANDLE) IndicatorRelease(g_hAdx); + g_hRsi = g_hEma = g_hAdx = INVALID_HANDLE; +} + +void OnTick() +{ + if(_Symbol != InpSymbol) + { + static datetime lastMismatchLog = 0; + datetime nowBar = iTime(_Symbol, PERIOD_M1, 0); + if(nowBar != lastMismatchLog) + { + lastMismatchLog = nowBar; + DebugLog(StringFormat("Skipped: chart symbol=%s but InpSymbol=%s.", _Symbol, InpSymbol)); + } + return; + } + + const int posCount = CountPositionsByMagic(InpSymbol, InpMagic); + const double adxLive = GetAdx(0); + + if(posCount > 0 && adxLive > 0.0 && adxLive >= InpAdxEscape) + { + DebugLog(StringFormat("ADX escape: adx0=%.2f >= %.2f -> closing %d position(s).", adxLive, InpAdxEscape, posCount)); + CloseAllByMagic(InpSymbol, InpMagic); + return; + } + + if(!IsNewBar(InpSymbol, InpTimeframe)) + return; + + const double rsi1 = GetRsi(1); + const double adx1 = GetAdx(1); + const double ema1 = GetEma(1); + const double c1 = iClose(InpSymbol, InpTimeframe, 1); + DebugLog(StringFormat("Bar=%s rsi1=%.2f adx1=%.2f ema1=%.5f close1=%.5f positions=%d", + TimeToString(iTime(InpSymbol, InpTimeframe, 1), TIME_DATE | TIME_MINUTES), + rsi1, adx1, ema1, c1, posCount)); + + if(posCount >= InpMaxPositions) + { + DebugLog(StringFormat("Skipped: max positions (%d).", InpMaxPositions)); + return; + } + + MqlTick tick; + if(!SymbolInfoTick(InpSymbol, tick)) + { + DebugLog("Skipped: SymbolInfoTick failed."); + return; + } + + double sl = 0.0, tp = 0.0; + + if(BuySetup()) + { + ComputeSLTP(true, tick.ask, sl, tp); + if(trade.Buy(InpLots, InpSymbol, tick.ask, sl, tp, "MeanRev_RSI_OS_EMA")) + DebugLog(StringFormat("BUY lots=%.2f ask=%.2f sl=%.2f tp=%.2f", InpLots, tick.ask, sl, tp)); + else + DebugLog(StringFormat("BUY failed retcode=%d", trade.ResultRetcode())); + return; + } + + if(SellSetup()) + { + ComputeSLTP(false, tick.bid, sl, tp); + if(trade.Sell(InpLots, InpSymbol, tick.bid, sl, tp, "MeanRev_RSI_OB_EMA")) + DebugLog(StringFormat("SELL lots=%.2f bid=%.2f sl=%.2f tp=%.2f", InpLots, tick.bid, sl, tp)); + else + DebugLog(StringFormat("SELL failed retcode=%d", trade.ResultRetcode())); + return; + } + + DebugLog("No entry: RSI/EMA distance/ADX/bar filters not aligned."); +} diff --git a/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX_genetic.set b/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX_genetic.set new file mode 100644 index 0000000..4339e99 --- /dev/null +++ b/frontline/units/MeanReversionBTCUSD/MeanReversionEMA_RSI_ADX_genetic.set @@ -0,0 +1,29 @@ +; Synced with daughter.set (ranges + current defaults). Strategy Tester → Inputs → Load. +; Format: value||start||step||stop||Y|N +; +; === Market === +InpSymbol=BTCUSD +InpTimeframe=20||15||0||16385||Y +InpLots=0.01||0.01||0.001000||0.050000||N +InpSlippagePoints=30||30||1||300||N +InpMagic=930201||930201||1||930201||N +InpMaxPositions=5||1||1||8||Y +InpDebugLogs=false||false||0||true||N +; === EMA distance (mean reversion stretch) === +InpEmaPeriod=250||50||10||400||Y +InpMinEmaDistancePts=3650||200.0||50.0||5000.0||Y +; === RSI === +InpRsiPeriod=28||7||1||28||Y +InpRsiOversold=40||18.0||1.0||42.0||Y +InpRsiOverbought=83||58.0||1.0||88.0||Y +InpUseRsiCross=false||false||0||true||Y +; === ADX (trend filter + escape) === +InpAdxPeriod=27||7||1||28||Y +InpAdxMaxForEntry=17||15.0||1.0||40.0||Y +InpAdxEscape=34||22.0||1.0||55.0||Y +; === Price action (optional) === +InpRequireReversalBar=false||false||0||true||Y +; === Risk === +InpUseHardSLTP=false||false||0||true||Y +InpSLPoints=1300||800.0||100.0||8000.0||Y +InpTPPoints=13400||1000.0||200.0||15000.0||Y diff --git a/frontline/units/MeanReversionBTCUSD/daughter.set b/frontline/units/MeanReversionBTCUSD/daughter.set new file mode 100644 index 0000000..f9ebfad --- /dev/null +++ b/frontline/units/MeanReversionBTCUSD/daughter.set @@ -0,0 +1,30 @@ +; saved on 2026.04.23 22:29:36 +; this file contains input parameters for testing/optimizing MeanReversion expert advisor +; to use it in the strategy tester, click Load in the context menu of the Inputs tab +; +; === Market === +InpSymbol=BTCUSD +InpTimeframe=20||15||0||16385||Y +InpLots=0.01||0.01||0.001000||0.050000||N +InpSlippagePoints=30||30||1||300||N +InpMagic=930201||930201||1||930201||N +InpMaxPositions=5||1||1||8||Y +InpDebugLogs=false||false||0||true||N +; === EMA distance (mean reversion stretch) === +InpEmaPeriod=250||50||10||400||Y +InpMinEmaDistancePts=3650||200.0||50.0||5000.0||Y +; === RSI === +InpRsiPeriod=28||7||1||28||Y +InpRsiOversold=40||18.0||1.0||42.0||Y +InpRsiOverbought=83||58.0||1.0||88.0||Y +InpUseRsiCross=false||false||0||true||Y +; === ADX (trend filter + escape) === +InpAdxPeriod=27||7||1||28||Y +InpAdxMaxForEntry=17||15.0||1.0||40.0||Y +InpAdxEscape=34||22.0||1.0||55.0||Y +; === Price action (optional) === +InpRequireReversalBar=false||false||0||true||Y +; === Risk === +InpUseHardSLTP=false||false||0||true||Y +InpSLPoints=1300||800.0||100.0||8000.0||Y +InpTPPoints=13400||1000.0||200.0||15000.0||Y diff --git a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 new file mode 100644 index 0000000..09c4d7d --- /dev/null +++ b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation.mq5 @@ -0,0 +1,347 @@ +//+------------------------------------------------------------------+ +//| RSIConsolidation.mq5 | +//| Mean-reversion RSI for ranging markets; trend filters block runs | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2025" +#property link "https://www.mql5.com" +#property version "1.00" + +#include + +//--- Symbol (empty = chart symbol) +input group "=== Symbol & session ===" +input string InpSymbol = ""; + +input group "=== Timeframe & bar logic ===" +input ENUM_TIMEFRAMES SignalTF = PERIOD_M15; +input bool EntryOnNewBarOnly = true; + +//--- Core: no trend / consolidation regime +input group "=== Regime: consolidation (anti-trend) ===" +input int ADX_Period = 23; +input double ADX_Max = 29.0; +input bool UseATRRatioFilter = true; +input int ATR_Period = 8; +input int ATR_SMA_Period = 35; +input double ATR_Ratio_Max = 1.36; +input bool UseFlatEMAFilter = true; +input int EMA_Fast = 13; +input int EMA_Slow = 17; +input double EMA_Separation_MaxPct = 0.26; + +//--- RSI entries (fade extremes toward mean) +input group "=== RSI entries ===" +input int RSI_Period = 8; +input ENUM_APPLIED_PRICE RSI_Price = PRICE_OPEN; +input double RSI_Oversold = 22.0; +input double RSI_Overbought = 63.0; + +//--- Exits: mean target + hard ATR bracket +input group "=== Exits ===" +input bool UseRSI_MeanExit = true; +input double RSI_Exit_Long = 48.0; +input double RSI_Exit_Short = 52.0; +input double SL_ATR_Mult = 2.15; +input double TP_ATR_Mult = 2.40; +input int MaxBarsInTrade = 54; + +input group "=== Risk & execution ===" +input double Lots = 0.10; +input ulong MagicNumber = 20250420; +input int Slippage = 10; +input int MaxSpreadPoints = 28; + +CTrade trade; +string g_sym; + +int h_rsi = INVALID_HANDLE; +int h_adx = INVALID_HANDLE; +int h_atr = INVALID_HANDLE; +int h_ema_fast = INVALID_HANDLE; +int h_ema_slow = INVALID_HANDLE; + +datetime g_last_bar = 0; + +bool PositionExistsByMagicSym(string sym, ulong magic) +{ + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) continue; + if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) + return true; + } + return false; +} + +ulong GetPositionTicketByMagicSym(string sym, ulong magic) +{ + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) continue; + if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) + return t; + } + return 0; +} + +bool SelectPositionTicketSymMagic(ulong ticket, string sym, ulong magic) +{ + if(!PositionSelectByTicket(ticket)) return false; + return PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic; +} + +double NormalizeVolume(string sym, double vol) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + vol = MathFloor(vol / step) * step; + if(vol < minLot) vol = minLot; + if(vol > maxLot) vol = maxLot; + return vol; +} + +int CurrentSpreadPoints(string sym) +{ + long spread = 0; + if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) + return 999999; + return (int)spread; +} + +double MinStopsDistancePrice(string sym) +{ + long lvl = 0; + if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) + return 0; + double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + if(pt <= 0) + return 0; + return (double)lvl * pt; +} + +bool Copy1(int handle, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, 0, 1, b) < 1) return false; + v = b[0]; + return true; +} + +bool RSI_Buffers(double &cur, double &prev, double &twoAgo) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(h_rsi, 0, 0, 3, b) < 3) return false; + cur = b[0]; + prev = b[1]; + twoAgo = b[2]; + return true; +} + +bool Regime_IsConsolidation() +{ + double adx = 0; + if(!Copy1(h_adx, adx)) + return false; + if(adx >= ADX_Max) + return false; + + if(UseATRRatioFilter) + { + double atrArr[], atrSma[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(h_atr, 0, 0, ATR_SMA_Period + 1, atrArr) < ATR_SMA_Period + 1) + return false; + double sum = 0; + for(int i = 1; i <= ATR_SMA_Period; i++) + sum += atrArr[i]; + double smaAtr = sum / (double)ATR_SMA_Period; + if(smaAtr <= 0.0) + return false; + double ratio = atrArr[0] / smaAtr; + if(ratio > ATR_Ratio_Max) + return false; + } + + if(UseFlatEMAFilter) + { + double ef[], es[]; + ArraySetAsSeries(ef, true); + ArraySetAsSeries(es, true); + if(CopyBuffer(h_ema_fast, 0, 0, 1, ef) < 1) return false; + if(CopyBuffer(h_ema_slow, 0, 0, 1, es) < 1) return false; + double c = SymbolInfoDouble(g_sym, SYMBOL_BID); + if(c <= 0) return false; + double sep = MathAbs(ef[0] - es[0]) / c * 100.0; + if(sep > EMA_Separation_MaxPct) + return false; + } + + return true; +} + +bool Entry_BuyCross(double twoAgo, double prev) +{ + return (twoAgo <= RSI_Oversold && prev > RSI_Oversold); +} + +bool Entry_SellCross(double twoAgo, double prev) +{ + return (twoAgo >= RSI_Overbought && prev < RSI_Overbought); +} + +void TryCloseByRSI(ENUM_POSITION_TYPE typ, double rsi) +{ + ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); + if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) + return; + if(!UseRSI_MeanExit) + return; + if(typ == POSITION_TYPE_BUY && rsi >= RSI_Exit_Long) + trade.PositionClose(tk); + else if(typ == POSITION_TYPE_SELL && rsi <= RSI_Exit_Short) + trade.PositionClose(tk); +} + +void ManageOpenPosition(double rsi) +{ + ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); + if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) + return; + ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openT = (datetime)PositionGetInteger(POSITION_TIME); + int barsAgo = iBarShift(g_sym, SignalTF, openT, false); + if(barsAgo >= 0 && barsAgo >= MaxBarsInTrade) + { + trade.PositionClose(tk); + return; + } + TryCloseByRSI(typ, rsi); +} + +int OnInit() +{ + g_sym = InpSymbol; + StringTrimLeft(g_sym); + StringTrimRight(g_sym); + if(StringLen(g_sym) == 0) + g_sym = _Symbol; + + if(!SymbolSelect(g_sym, true)) + { + Print("RSIConsolidation: SymbolSelect failed: ", g_sym); + return INIT_FAILED; + } + + trade.SetExpertMagicNumber(MagicNumber); + trade.SetDeviationInPoints(Slippage); + trade.SetTypeFilling(ORDER_FILLING_RETURN); + + h_rsi = iRSI(g_sym, SignalTF, RSI_Period, RSI_Price); + h_adx = iADX(g_sym, SignalTF, ADX_Period); + h_atr = iATR(g_sym, SignalTF, ATR_Period); + h_ema_fast = iMA(g_sym, SignalTF, EMA_Fast, 0, MODE_EMA, PRICE_CLOSE); + h_ema_slow = iMA(g_sym, SignalTF, EMA_Slow, 0, MODE_EMA, PRICE_CLOSE); + + if(h_rsi == INVALID_HANDLE || h_adx == INVALID_HANDLE || h_atr == INVALID_HANDLE + || h_ema_fast == INVALID_HANDLE || h_ema_slow == INVALID_HANDLE) + { + Print("RSIConsolidation: indicator init failed"); + return INIT_FAILED; + } + + Print("RSIConsolidation: symbol=", g_sym, " TF=", EnumToString(SignalTF)); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(h_rsi != INVALID_HANDLE) IndicatorRelease(h_rsi); + if(h_adx != INVALID_HANDLE) IndicatorRelease(h_adx); + if(h_atr != INVALID_HANDLE) IndicatorRelease(h_atr); + if(h_ema_fast != INVALID_HANDLE) IndicatorRelease(h_ema_fast); + if(h_ema_slow != INVALID_HANDLE) IndicatorRelease(h_ema_slow); +} + +bool EnoughHistory() +{ + int need = MathMax(RSI_Period + 3, MathMax(ADX_Period + 2, ATR_SMA_Period + 3)); + if(Bars(g_sym, SignalTF) < need) + return false; + return true; +} + +void OnTick() +{ + if(!EnoughHistory()) + return; + + if(MaxSpreadPoints > 0 && CurrentSpreadPoints(g_sym) > MaxSpreadPoints) + return; + + double rsi, rsiPrev, rsi2; + if(!RSI_Buffers(rsi, rsiPrev, rsi2)) + return; + + datetime barTime = iTime(g_sym, SignalTF, 0); + bool isNew = (barTime != g_last_bar); + + if(PositionExistsByMagicSym(g_sym, MagicNumber)) + { + ManageOpenPosition(rsi); + if(isNew) + g_last_bar = barTime; + return; + } + + if(EntryOnNewBarOnly && !isNew) + return; + + g_last_bar = barTime; + + if(!Regime_IsConsolidation()) + return; + + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(h_atr, 0, 0, 1, atrArr) < 1) + return; + double atr = atrArr[0]; + int dig = (int)SymbolInfoInteger(g_sym, SYMBOL_DIGITS); + + double slDist = atr * SL_ATR_Mult; + double tpDist = atr * TP_ATR_Mult; + double minD = MinStopsDistancePrice(g_sym); + if(slDist < minD) + slDist = minD; + if(tpDist < minD) + tpDist = minD; + + double vol = NormalizeVolume(g_sym, Lots); + + if(Entry_BuyCross(rsi2, rsiPrev)) + { + double ask = SymbolInfoDouble(g_sym, SYMBOL_ASK); + double sl = ask - slDist; + double tp = ask + tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + trade.Buy(vol, g_sym, ask, sl, tp, "RSIConsolidation BUY"); + } + else if(Entry_SellCross(rsi2, rsiPrev)) + { + double bid = SymbolInfoDouble(g_sym, SYMBOL_BID); + double sl = bid + slDist; + double tp = bid - tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + trade.Sell(vol, g_sym, bid, sl, tp, "RSIConsolidation SELL"); + } +} + +//+------------------------------------------------------------------+ diff --git a/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set new file mode 100644 index 0000000..d6a75ed --- /dev/null +++ b/frontline/units/RSIConsolidationXAUUSD/RSIConsolidation_optimization.set @@ -0,0 +1,37 @@ +; RSIConsolidation.mq5 — optimization preset (Strategy Tester → Inputs → Load) +; Format: Name=Current||Start||Step||Stop||Y|N (Y = include in optimization) +; +; === Symbol & session === +InpSymbol= +; === Timeframe & bar logic === +; SignalTF: optimize per run (ENUM is non-sequential); M15=15, H1=16385, H4=16388 +SignalTF=15||15||0||15||N +EntryOnNewBarOnly=true||false||0||true||N +; === Regime: consolidation (anti-trend) === +ADX_Period=14||7||1||28||Y +ADX_Max=22.0||16.0||1.0||32.0||Y +UseATRRatioFilter=true||false||0||true||N +ATR_Period=14||7||1||21||Y +ATR_SMA_Period=50||20||5||100||Y +ATR_Ratio_Max=1.18||1.0||0.02||1.35||Y +UseFlatEMAFilter=true||false||0||true||N +EMA_Fast=8||5||1||13||Y +EMA_Slow=21||13||2||34||Y +EMA_Separation_MaxPct=0.22||0.08||0.02||0.45||Y +; === RSI entries === +RSI_Period=14||7||1||21||Y +RSI_Price=1||1||1||7||Y +RSI_Oversold=32.0||22.0||1.0||42.0||Y +RSI_Overbought=68.0||58.0||1.0||78.0||Y +; === Exits === +UseRSI_MeanExit=true||false||0||true||N +RSI_Exit_Long=52.0||48.0||1.0||62.0||Y +RSI_Exit_Short=48.0||38.0||1.0||52.0||Y +SL_ATR_Mult=1.35||0.9||0.05||2.2||Y +TP_ATR_Mult=1.85||1.0||0.05||3.0||Y +MaxBarsInTrade=36||12||2||80||Y +; === Risk & execution === +Lots=0.1||0.1||0.01||1.0||N +MagicNumber=20250420||20250420||1||20250420||N +Slippage=10||10||1||100||N +MaxSpreadPoints=0||0||1||30||Y diff --git a/frontline/MQL5/RSICrossOverReversalXAUUSD/main.mq5 b/frontline/units/RSICrossOverReversalXAUUSD/main.mq5 similarity index 99% rename from frontline/MQL5/RSICrossOverReversalXAUUSD/main.mq5 rename to frontline/units/RSICrossOverReversalXAUUSD/main.mq5 index c4c7508..8412fa6 100644 --- a/frontline/MQL5/RSICrossOverReversalXAUUSD/main.mq5 +++ b/frontline/units/RSICrossOverReversalXAUUSD/main.mq5 @@ -9,7 +9,7 @@ input int overboughtLevel = 93; // Overbought level (RSI > 70 for sell) input int oversoldLevel = 22; // Oversold level (RSI < 30 for buy) input double entryRSIBuySpread = 0; input double entryRSISellSpread = 0; -input double lotSize = 0.01; // Trade lot size +input double lotSize = 0.1; // Trade lot size input int slippage = 3; // Slippage for orders input int cooldownSeconds = 209; // Cooldown period in seconds input ENUM_TIMEFRAMES TimeFrame1 = PERIOD_M1; // RSI Timeframe diff --git a/frontline/MQL5/RSIMidPointHijackXAUUSD/main.mq5 b/frontline/units/RSIMidPointHijackXAUUSD/main.mq5 similarity index 98% rename from frontline/MQL5/RSIMidPointHijackXAUUSD/main.mq5 rename to frontline/units/RSIMidPointHijackXAUUSD/main.mq5 index 161c0bd..de9ddb3 100644 --- a/frontline/MQL5/RSIMidPointHijackXAUUSD/main.mq5 +++ b/frontline/units/RSIMidPointHijackXAUUSD/main.mq5 @@ -14,7 +14,7 @@ // Input Parameters input group "General Settings" input ENUM_TIMEFRAMES InpTimeframe = PERIOD_H1; // Trading Timeframe -input double InpLotSize = 0.02; // Lot Size +input double InpLotSize = 0.1; // Lot Size input int InpMagicNumberRSIFollow = 1001; // Magic Number RSI Follow input int InpMagicNumberRSIReverse = 1002;// Magic Number RSI Reverse input int InpMagicNumberEMACross = 1003; // Magic Number EMA Cross @@ -23,9 +23,9 @@ input group "Strategy Switches" input bool InpEnableRSIFollow = true; // Enable RSI Follow Strategy input bool InpEnableRSIReverse = true; // Enable RSI Reverse Strategy input bool InpEnableEMACross = true; // Enable EMA Cross Strategy -input bool InpEnableStrategyLock = false; // Enable Strategy Lock -input double InpLockProfitThreshold = 0.0; // Lock Profit Threshold (pips) -input bool InpCloseOppositeTrades = false; // Close Opposite Trades When Profiting +input bool InpEnableStrategyLock = true; // Enable Strategy Lock +input double InpLockProfitThreshold = 6.0; // Lock Profit Threshold (pips) +input bool InpCloseOppositeTrades = true; // Close Opposite Trades When Profiting input group "RSI Follow Strategy" input int InpRSIPeriod = 32; // RSI Period diff --git a/frontline/MQL5/RSIMidPointHijackXAUUSD/report.html b/frontline/units/RSIMidPointHijackXAUUSD/report.html similarity index 100% rename from frontline/MQL5/RSIMidPointHijackXAUUSD/report.html rename to frontline/units/RSIMidPointHijackXAUUSD/report.html diff --git a/frontline/MQL5/RSIMidPointHijackXAUUSD/report.png b/frontline/units/RSIMidPointHijackXAUUSD/report.png similarity index 100% rename from frontline/MQL5/RSIMidPointHijackXAUUSD/report.png rename to frontline/units/RSIMidPointHijackXAUUSD/report.png diff --git a/frontline/MQL5/RSIReversalAsianAUDUSD/main.mq5 b/frontline/units/RSIReversalAsianAUDUSD/main.mq5 similarity index 100% rename from frontline/MQL5/RSIReversalAsianAUDUSD/main.mq5 rename to frontline/units/RSIReversalAsianAUDUSD/main.mq5 diff --git a/frontline/MQL5/RSIReversalAsianAUDUSD/test-balance.png b/frontline/units/RSIReversalAsianAUDUSD/test-balance.png similarity index 100% rename from frontline/MQL5/RSIReversalAsianAUDUSD/test-balance.png rename to frontline/units/RSIReversalAsianAUDUSD/test-balance.png diff --git a/frontline/MQL5/RSIReversalAsianEURUSD/main.mq5 b/frontline/units/RSIReversalAsianEURUSD/main.mq5 similarity index 100% rename from frontline/MQL5/RSIReversalAsianEURUSD/main.mq5 rename to frontline/units/RSIReversalAsianEURUSD/main.mq5 diff --git a/frontline/MQL5/RSIReversalAsianEURUSD/test-balance.jpg b/frontline/units/RSIReversalAsianEURUSD/test-balance.jpg similarity index 100% rename from frontline/MQL5/RSIReversalAsianEURUSD/test-balance.jpg rename to frontline/units/RSIReversalAsianEURUSD/test-balance.jpg diff --git a/frontline/MQL5/RSIScalpingAPPL/main.mq5 b/frontline/units/RSIScalpingAPPL/main.mq5 similarity index 100% rename from frontline/MQL5/RSIScalpingAPPL/main.mq5 rename to frontline/units/RSIScalpingAPPL/main.mq5 diff --git a/frontline/MQL5/RSIScalpingBTCUSD/main.mq5 b/frontline/units/RSIScalpingBTCUSD/main.mq5 similarity index 100% rename from frontline/MQL5/RSIScalpingBTCUSD/main.mq5 rename to frontline/units/RSIScalpingBTCUSD/main.mq5 diff --git a/frontline/MQL5/RSIScalpingBTCUSD/report.html b/frontline/units/RSIScalpingBTCUSD/report.html similarity index 100% rename from frontline/MQL5/RSIScalpingBTCUSD/report.html rename to frontline/units/RSIScalpingBTCUSD/report.html diff --git a/frontline/MQL5/RSIScalpingBTCUSD/report.png b/frontline/units/RSIScalpingBTCUSD/report.png similarity index 100% rename from frontline/MQL5/RSIScalpingBTCUSD/report.png rename to frontline/units/RSIScalpingBTCUSD/report.png diff --git a/frontline/MQL5/RSIScalpingNVDA/NVDA_Genetic_Optimization.set b/frontline/units/RSIScalpingNVDA/NVDA_Genetic_Optimization.set similarity index 100% rename from frontline/MQL5/RSIScalpingNVDA/NVDA_Genetic_Optimization.set rename to frontline/units/RSIScalpingNVDA/NVDA_Genetic_Optimization.set diff --git a/frontline/MQL5/RSIScalpingNVDA/NVDA_Genetic_Optimization_Alternative.set b/frontline/units/RSIScalpingNVDA/NVDA_Genetic_Optimization_Alternative.set similarity index 100% rename from frontline/MQL5/RSIScalpingNVDA/NVDA_Genetic_Optimization_Alternative.set rename to frontline/units/RSIScalpingNVDA/NVDA_Genetic_Optimization_Alternative.set diff --git a/frontline/MQL5/RSIScalpingNVDA/OPTIMIZATION_GUIDE.md b/frontline/units/RSIScalpingNVDA/OPTIMIZATION_GUIDE.md similarity index 100% rename from frontline/MQL5/RSIScalpingNVDA/OPTIMIZATION_GUIDE.md rename to frontline/units/RSIScalpingNVDA/OPTIMIZATION_GUIDE.md diff --git a/frontline/MQL5/RSIScalpingNVDA/main.mq5 b/frontline/units/RSIScalpingNVDA/main.mq5 similarity index 100% rename from frontline/MQL5/RSIScalpingNVDA/main.mq5 rename to frontline/units/RSIScalpingNVDA/main.mq5 diff --git a/frontline/MQL5/RSIScalpingTSLA/main.mq5 b/frontline/units/RSIScalpingTSLA/main.mq5 similarity index 100% rename from frontline/MQL5/RSIScalpingTSLA/main.mq5 rename to frontline/units/RSIScalpingTSLA/main.mq5 diff --git a/frontline/MQL5/RSIScalpingTSLA/report.html b/frontline/units/RSIScalpingTSLA/report.html similarity index 100% rename from frontline/MQL5/RSIScalpingTSLA/report.html rename to frontline/units/RSIScalpingTSLA/report.html diff --git a/frontline/MQL5/RSIScalpingTSLA/report.png b/frontline/units/RSIScalpingTSLA/report.png similarity index 100% rename from frontline/MQL5/RSIScalpingTSLA/report.png rename to frontline/units/RSIScalpingTSLA/report.png diff --git a/frontline/MQL5/RSIScalpingXAUUSD/main.mq5 b/frontline/units/RSIScalpingXAUUSD/main.mq5 similarity index 64% rename from frontline/MQL5/RSIScalpingXAUUSD/main.mq5 rename to frontline/units/RSIScalpingXAUUSD/main.mq5 index d416608..8377c49 100644 --- a/frontline/MQL5/RSIScalpingXAUUSD/main.mq5 +++ b/frontline/units/RSIScalpingXAUUSD/main.mq5 @@ -5,7 +5,7 @@ //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" -#property version "1.01" +#property version "1.02" #include #include "../_united/MagicNumberHelpers.mqh" @@ -16,6 +16,8 @@ input int RSI_Period = 14; // RSI Period input ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE; // RSI Applied Price input double RSI_Overbought = 71; // RSI Overbought Level input double RSI_Oversold = 57; // RSI Oversold Level +input bool UseEntrySlopeFilter = false; // require RSI momentum on entry bars +input double EntryMinSlopePerBar = 1.0; // minimum RSI delta per bar for entry input double RSI_Target_Buy = 80; // RSI Target for Buy Exit input double RSI_Target_Sell = 57; // RSI Target for Sell Exit input int BarsToWait = 4; // Bars to wait when RSI goes against position @@ -23,6 +25,14 @@ input double LotSize = 0.1; // Lot Size input int MagicNumber = 129102315; // Magic Number input int Slippage = 3; // Slippage in points +input group "=== Reversal escape (intrabar, multi-signal) ===" +input bool UseReversalEscape = true; // run while in position every tick +input int ReversalATRPeriod = 14; // ATR lookback on signal timeframe +input double ReversalAdverseAtrMult = 5.25; // close if price vs entry >= this * ATR +input int ReversalSignsRequired = 2; // how many independent signs must align +input double ReversalRsiVelocity = 16.0; // RSI points drop (long) / rise (short) vs prior buffer +input double ReversalBodyAtrMult = 5.1; // last closed bar body >= this * ATR counts as one sign + //--- Global variables CTrade trade; int rsi_handle; @@ -72,37 +82,32 @@ void OnDeinit(const int reason) //+------------------------------------------------------------------+ void OnTick() { - // Check if we have enough bars if(Bars(_Symbol, TimeFrame) < RSI_Period + 2) - { return; - } - - // Check if this is a new bar - datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); - if(current_bar_time == last_bar_time) - { - return; // Still the same bar, don't process - } - - last_bar_time = current_bar_time; - - // Update RSI values + + const datetime current_bar_time = iTime(_Symbol, TimeFrame, 0); + const bool new_bar = (current_bar_time != last_bar_time); + const bool in_pos = position_open || PositionExistsByMagic(_Symbol, (ulong)MagicNumber); + + if(!in_pos && !new_bar) + return; + if(!UpdateRSI()) - { return; - } + + if(in_pos && UseReversalEscape) + TryReversalEscape(); + + if(!new_bar) + return; + + last_bar_time = current_bar_time; ResyncPositionFromMarket(); - - // Check for existing position CheckExistingPosition(); - - // Check for new entry signals (also verify no position exists with our magic number) - if(!position_open && !PositionExistsByMagic(_Symbol, MagicNumber)) - { + + if(!position_open && !PositionExistsByMagic(_Symbol, (ulong)MagicNumber)) CheckEntrySignals(); - } } //+------------------------------------------------------------------+ @@ -122,6 +127,108 @@ bool UpdateRSI() return true; } +//+------------------------------------------------------------------+ +//| Wilder ATR in price units (signal timeframe) | +//+------------------------------------------------------------------+ +double ATRPriceOnTF(const int period) +{ + if(period < 1) + return 0.0; + MqlRates rates[]; + const int need = period + 2; + if(CopyRates(_Symbol, TimeFrame, 0, need, rates) < need) + return 0.0; + ArraySetAsSeries(rates, true); + double sum = 0.0; + for(int i = 1; i <= period; i++) + { + const double hl = rates[i].high - rates[i].low; + const double hc = MathAbs(rates[i].high - rates[i + 1].close); + const double lc = MathAbs(rates[i].low - rates[i + 1].close); + sum += MathMax(hl, MathMax(hc, lc)); + } + return sum / (double)period; +} + +//+------------------------------------------------------------------+ +//| Independent adverse signs (need ReversalSignsRequired to exit) | +//+------------------------------------------------------------------+ +int CountReversalEscapeSigns(const ENUM_POSITION_TYPE ptype, const double atr) +{ + if(atr <= 0.0) + return 0; + + const double entry = PositionGetDouble(POSITION_PRICE_OPEN); + const double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); + const double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); + int signs = 0; + + if(ptype == POSITION_TYPE_BUY) + { + if(entry - bid >= ReversalAdverseAtrMult * atr) + signs++; + if(rsi_prev - rsi_current >= ReversalRsiVelocity) + signs++; + } + else if(ptype == POSITION_TYPE_SELL) + { + if(ask - entry >= ReversalAdverseAtrMult * atr) + signs++; + if(rsi_current - rsi_prev >= ReversalRsiVelocity) + signs++; + } + else + return 0; + + MqlRates r[]; + if(CopyRates(_Symbol, TimeFrame, 0, 4, r) >= 4) + { + ArraySetAsSeries(r, true); + const double body = MathAbs(r[1].close - r[1].open); + if(body >= ReversalBodyAtrMult * atr) + { + if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) + signs++; + else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) + signs++; + } + if(ptype == POSITION_TYPE_BUY) + { + if(r[1].close < r[2].close && r[2].close < r[3].close) + signs++; + } + else + { + if(r[1].close > r[2].close && r[2].close > r[3].close) + signs++; + } + } + + return signs; +} + +//+------------------------------------------------------------------+ +//| Cut losers fast on violent reversals (evaluated every tick) | +//+------------------------------------------------------------------+ +void TryReversalEscape() +{ + if(!PositionSelectByMagic(_Symbol, (ulong)MagicNumber)) + return; + + const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + const double atr = ATRPriceOnTF(ReversalATRPeriod); + if(atr <= 0.0) + return; + + const int n = CountReversalEscapeSigns(ptype, atr); + if(n < ReversalSignsRequired) + return; + + ClosePosition(); + Print("RSIScalpingXAUUSD: reversal escape signs=", n, " need=", ReversalSignsRequired, + " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS))); +} + void ResyncPositionFromMarket() { if(position_open) @@ -238,14 +345,21 @@ void CheckExistingPosition() //+------------------------------------------------------------------+ void CheckEntrySignals() { + const double upSlope1 = rsi_prev - rsi_two_bars_ago; // older->prev + const double upSlope2 = rsi_current - rsi_prev; // prev->current + const double dnSlope1 = rsi_two_bars_ago - rsi_prev; // older->prev + const double dnSlope2 = rsi_prev - rsi_current; // prev->current + const bool buySlopeOk = (!UseEntrySlopeFilter) || (upSlope1 >= EntryMinSlopePerBar && upSlope2 >= EntryMinSlopePerBar); + const bool sellSlopeOk = (!UseEntrySlopeFilter) || (dnSlope1 >= EntryMinSlopePerBar && dnSlope2 >= EntryMinSlopePerBar); + // Buy signal: RSI crosses from oversold to above oversold (checking the actual crossover) - if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold) + if(rsi_two_bars_ago <= RSI_Oversold && rsi_prev > RSI_Oversold && buySlopeOk) { OpenBuyPosition(); } // Sell signal: RSI crosses from overbought to below overbought (checking the actual crossover) - if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought) + if(rsi_two_bars_ago >= RSI_Overbought && rsi_prev < RSI_Overbought && sellSlopeOk) { OpenSellPosition(); } diff --git a/frontline/MQL5/RSIScalpingXAUUSD/report.html b/frontline/units/RSIScalpingXAUUSD/report.html similarity index 100% rename from frontline/MQL5/RSIScalpingXAUUSD/report.html rename to frontline/units/RSIScalpingXAUUSD/report.html diff --git a/frontline/MQL5/RSIScalpingXAUUSD/report.png b/frontline/units/RSIScalpingXAUUSD/report.png similarity index 100% rename from frontline/MQL5/RSIScalpingXAUUSD/report.png rename to frontline/units/RSIScalpingXAUUSD/report.png diff --git a/frontline/MQL5/RSI_secret_sauce_XAUUSD/main.mq5 b/frontline/units/RSI_secret_sauce_XAUUSD/main.mq5 similarity index 100% rename from frontline/MQL5/RSI_secret_sauce_XAUUSD/main.mq5 rename to frontline/units/RSI_secret_sauce_XAUUSD/main.mq5 diff --git a/frontline/MQL5/SuperEMAXAUUSD/SuperEMA.set b/frontline/units/SuperEMAXAUUSD/SuperEMA.set similarity index 100% rename from frontline/MQL5/SuperEMAXAUUSD/SuperEMA.set rename to frontline/units/SuperEMAXAUUSD/SuperEMA.set diff --git a/frontline/MQL5/SuperEMAXAUUSD/main.mq5 b/frontline/units/SuperEMAXAUUSD/main.mq5 similarity index 100% rename from frontline/MQL5/SuperEMAXAUUSD/main.mq5 rename to frontline/units/SuperEMAXAUUSD/main.mq5 diff --git a/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_fixed.set b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_fixed.set new file mode 100644 index 0000000..a6faa9d --- /dev/null +++ b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_fixed.set @@ -0,0 +1,21 @@ +; EMASlopeDistanceCocktailBTCUSD\main.mq5 — fixed inputs (same as desktop ultimate.set) +; Attach EA to BTCUSD chart. Timeframe 16385 = H1. +; +EMA_Periode=50||50||1||500||N +PreisSchwelle=700.0||700.0||70.000000||7000.000000||N +SteigungSchwelle=25.0||25.0||2.500000||250.000000||N +ÜberwachungTimeout=340||340||1||3400||N +TrailingStop=370.0||370.0||37.000000||3700.000000||N +LotGröße=0.07||0.07||0.007000||0.700000||N +MagicNumber=135790||135790||1||1357900||N +UseSpreadAdjustment=true||false||0||true||N +Timeframe=16385||0||0||49153||N +UseBarData=true||false||0||true||N +MaxTradesPerCrossover=10||10||1||100||N +ProfitCheckBars=15||15||1||150||N +CloseUnprofitableTrades=true||false||0||true||N +UseWeeklyADXFilter=true||false||0||true||N +WeeklyADXPeriod=15||15||1||150||N +WeeklyADXMin=40.0||40.0||4.000000||400.000000||N +WeeklyADXBarShift=2||2||1||20||N +WeeklyADXUseDirection=true||false||0||true||N diff --git a/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_test.set b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_test.set new file mode 100644 index 0000000..9e749a8 --- /dev/null +++ b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/BTCUSD_test.set @@ -0,0 +1,24 @@ +; EMASlopeDistanceCocktailBTCUSD\main.mq5 — BTCUSD Strategy Tester preset +; Load: Tester → Inputs → context menu → Load. Attach EA to BTCUSD chart (EA uses _Symbol). +; +; value||start||step||stop||Y|N (MT5 convention). Timeframe 16385 = H1. +; Tune PreisSchwelle / TrailingStop / SteigungSchwelle to your broker's _Point for BTC. +; +EMA_Periode=50||30||5||200||Y +PreisSchwelle=700.0||200.0||50.0||5000.0||Y +SteigungSchwelle=25.0||5.0||1.0||80.0||Y +ÜberwachungTimeout=340||60||20||900||Y +TrailingStop=370.0||150.0||20.0||5000.0||Y +LotGröße=0.07||0.01||0.01||0.50||N +MagicNumber=135790||135790||1||1357900||N +UseSpreadAdjustment=true||false||0||true||Y +Timeframe=16385||0||0||49153||N +UseBarData=true||false||0||true||N +MaxTradesPerCrossover=10||1||1||25||Y +ProfitCheckBars=15||5||1||60||Y +CloseUnprofitableTrades=true||false||0||true||Y +UseWeeklyADXFilter=true||false||0||true||Y +WeeklyADXPeriod=15||7||1||28||Y +WeeklyADXMin=40.0||15.0||2.0||55.0||Y +WeeklyADXBarShift=2||1||1||5||Y +WeeklyADXUseDirection=true||false||0||true||Y diff --git a/frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/main.mq5 b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/main.mq5 similarity index 86% rename from frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/main.mq5 rename to lab/EAs/EMASlopeDistanceCocktailBTCUSD/main.mq5 index bd4661d..06b1086 100644 --- a/frontline/MQL5/EMASlopeDistanceCocktailXAUUSD/main.mq5 +++ b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/main.mq5 @@ -9,19 +9,24 @@ #include #include "../_united/MagicNumberHelpers.mqh" //--- Eingabeparameter (Input Parameters) - Optimized Profitable Parameters -input int EMA_Periode = 46; // EMA Periode -input double PreisSchwelle = 600.0; // Preisbewegung Schwelle in Pips -input double SteigungSchwelle = 80.0; // EMA Steigung Schwelle in Pips -input int ÜberwachungTimeout = 800; // Überwachungszeit in Sekunden -input double TrailingStop = 250.0; // Gleitender Stop in Pips -input double LotGröße = 0.03; // Handelsvolumen -input int MagicNumber = 12350; // Magic Number für Trades +input int EMA_Periode = 50; // EMA Periode +input double PreisSchwelle = 700.0; // Preisbewegung Schwelle in Pips +input double SteigungSchwelle = 25.0; // EMA Steigung Schwelle in Pips +input int ÜberwachungTimeout = 340; // Überwachungszeit in Sekunden +input double TrailingStop = 370.0; // Gleitender Stop in Pips +input double LotGröße = 0.07; // Handelsvolumen +input int MagicNumber = 135790; // Magic Number für Trades input bool UseSpreadAdjustment = true; // Spread-Anpassung verwenden input ENUM_TIMEFRAMES Timeframe = PERIOD_H1; // Zeitraum für Analyse input bool UseBarData = true; // Bar-Daten statt Tick-Daten verwenden -input int MaxTradesPerCrossover = 9; // Maximale Trades pro Crossover-Ereignis -input int ProfitCheckBars = 18; // Bars bis zur Profit-Prüfung +input int MaxTradesPerCrossover = 10; // Maximale Trades pro Crossover-Ereignis +input int ProfitCheckBars = 15; // Bars bis zur Profit-Prüfung input bool CloseUnprofitableTrades = true; // Unprofitable Trades nach X Bars schließen +input bool UseWeeklyADXFilter = true; // W1 ADX Trendfilter aktivieren +input int WeeklyADXPeriod = 15; // ADX-Periode auf W1 +input double WeeklyADXMin = 40.0; // Minimaler ADX fuer Trendfreigabe +input int WeeklyADXBarShift = 2; // 1=letzte geschlossene W1-Kerze +input bool WeeklyADXUseDirection = true; // +DI/-DI Richtung mitpruefen //--- Globale Variablen (Global Variables) int ema_handle; // EMA Indicator Handle @@ -36,6 +41,64 @@ int trades_in_current_crossover = 0; // Anzahl Trades im aktuellen Crossover bool crossover_detected = false; // Crossover erkannt datetime trade_open_time = 0; // Zeitpunkt des Trade-Öffnens +//+------------------------------------------------------------------+ +//| Weekly ADX trend filter | +//+------------------------------------------------------------------+ +bool IsWeeklyADXTrendFavorable(ENUM_ORDER_TYPE order_type) +{ + if(!UseWeeklyADXFilter) + return true; + + int adxShift = WeeklyADXBarShift; + if(adxShift < 0) + adxShift = 0; + + int adx_handle = iADX(_Symbol, PERIOD_W1, WeeklyADXPeriod); + if(adx_handle == INVALID_HANDLE) + { + Print("TRACE: Weekly ADX Handle ungültig - Filter blockiert Entry"); + return false; + } + + double adx_buf[], plus_di_buf[], minus_di_buf[]; + ArraySetAsSeries(adx_buf, true); + ArraySetAsSeries(plus_di_buf, true); + ArraySetAsSeries(minus_di_buf, true); + + bool ok_adx = (CopyBuffer(adx_handle, 0, adxShift, 1, adx_buf) > 0); + bool ok_plus = (CopyBuffer(adx_handle, 1, adxShift, 1, plus_di_buf) > 0); + bool ok_minus = (CopyBuffer(adx_handle, 2, adxShift, 1, minus_di_buf) > 0); + IndicatorRelease(adx_handle); + + if(!ok_adx || !ok_plus || !ok_minus) + { + Print("TRACE: Weekly ADX Daten nicht verfügbar - Filter blockiert Entry"); + return false; + } + + double adx_value = adx_buf[0]; + double plus_di = plus_di_buf[0]; + double minus_di = minus_di_buf[0]; + + bool strength_ok = (adx_value >= WeeklyADXMin); + bool direction_ok = true; + if(WeeklyADXUseDirection) + { + if(order_type == ORDER_TYPE_BUY) + direction_ok = (plus_di > minus_di); + else + direction_ok = (minus_di > plus_di); + } + + Print("TRACE: Weekly ADX Filter | ADX=", DoubleToString(adx_value, 2), + " +DI=", DoubleToString(plus_di, 2), + " -DI=", DoubleToString(minus_di, 2), + " strength_ok=", strength_ok, + " direction_ok=", direction_ok); + + return (strength_ok && direction_ok); +} + //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ @@ -292,6 +355,11 @@ void PrüfeTrigger() if(bullish_signal && !PositionExistsByMagic(_Symbol, MagicNumber)) { + if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_BUY)) + { + Print("TRACE: Weekly ADX blockiert BUY-Entry"); + return; + } Print("TRACE: Versuche KAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); if(PlatziereTrade(ORDER_TYPE_BUY)) { @@ -300,6 +368,11 @@ void PrüfeTrigger() } else if(bearish_signal && !PositionExistsByMagic(_Symbol, MagicNumber)) { + if(!IsWeeklyADXTrendFavorable(ORDER_TYPE_SELL)) + { + Print("TRACE: Weekly ADX blockiert SELL-Entry"); + return; + } Print("TRACE: Versuche VERKAUF-Trade zu platzieren (Trade #", trades_in_current_crossover + 1, ")"); if(PlatziereTrade(ORDER_TYPE_SELL)) { diff --git a/lab/EAs/EMASlopeDistanceCocktailBTCUSD/report.html b/lab/EAs/EMASlopeDistanceCocktailBTCUSD/report.html new file mode 100644 index 0000000000000000000000000000000000000000..8d9931ff2cb1f08db57f053ae8cae2d908f9597f GIT binary patch literal 1883870 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 z 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

    jB@%P_b0(KZRKre6ZN$~N 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 K?f>@CpZ)_kQm#}0 literal 0 HcmV?d00001 diff --git a/lab/EAs/MartingaleBTCUSD_Safe.mq5 b/lab/EAs/MartingaleBTCUSD_Safe.mq5 new file mode 100644 index 0000000..158d234 --- /dev/null +++ b/lab/EAs/MartingaleBTCUSD_Safe.mq5 @@ -0,0 +1,246 @@ +//+------------------------------------------------------------------+ +//| MartingaleBTCUSD_Safe.mq5 | +//| Classic martingale: double lot after loss, reset after win (BTC) | +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property version "1.01" +#property strict + +#include + +input group "=== Market ===" +input string InpSymbol = "BTCUSD"; +input ENUM_TIMEFRAMES InpTf = PERIOD_M15; +input ulong InpMagic = 202604241; +input int InpSlippagePts = 50; + +input group "=== Martingale (classic) ===" +input double InpBaseLots = 0.01; +input double InpLotMultiplier = 2.0; // traditional = 2.0 +input int InpMaxDoublings = 16; // cap exponent (0..MaxDoublings); then lot stops growing + +input group "=== Entry (RSI) ===" +input int InpRsiPeriod = 14; +input double InpRsiBuyBelow = 32.0; +input double InpRsiSellAbove = 68.0; + +input group "=== SL / TP (optional) ===" +input bool InpUseSLTP = false; +input double InpSLPts = 4000.0; +input double InpTPPts = 3500.0; + +CTrade g_trade; +int g_hRsi = INVALID_HANDLE; +int g_lossStreak = 0; +ulong g_lastPosId = 0; + +string WorkSym() { return InpSymbol; } +double SymPoint() { return SymbolInfoDouble(WorkSym(), SYMBOL_POINT); } + +void SetFilling() +{ + const long fill = SymbolInfoInteger(WorkSym(), SYMBOL_FILLING_MODE); + if((fill & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK) + g_trade.SetTypeFilling(ORDER_FILLING_FOK); + else if((fill & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC) + g_trade.SetTypeFilling(ORDER_FILLING_IOC); +} + +double NetProfitForPositionId(const ulong posId) +{ + if(posId == 0) + return 0.0; + const datetime to = TimeCurrent(); + if(!HistorySelect(0, to)) + return 0.0; + double sum = 0.0; + const int n = HistoryDealsTotal(); + for(int i = 0; i < n; i++) + { + const ulong deal = HistoryDealGetTicket(i); + if(deal == 0) + continue; + if((ulong)HistoryDealGetInteger(deal, DEAL_POSITION_ID) != posId) + continue; + sum += HistoryDealGetDouble(deal, DEAL_PROFIT); + sum += HistoryDealGetDouble(deal, DEAL_SWAP); + sum += HistoryDealGetDouble(deal, DEAL_COMMISSION); + } + return sum; +} + +int OurPositionCount() +{ + int c = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong t = PositionGetTicket(i); + if(t == 0 || !PositionSelectByTicket(t)) + continue; + if(PositionGetString(POSITION_SYMBOL) != WorkSym()) + continue; + if((ulong)PositionGetInteger(POSITION_MAGIC) == InpMagic) + c++; + } + return c; +} + +double LotsNow() +{ + const int exp = MathMax(0, MathMin(g_lossStreak, InpMaxDoublings)); + double lot = InpBaseLots * MathPow(InpLotMultiplier, (double)exp); + const double minLot = SymbolInfoDouble(WorkSym(), SYMBOL_VOLUME_MIN); + const double maxLot = SymbolInfoDouble(WorkSym(), SYMBOL_VOLUME_MAX); + const double stepLot = SymbolInfoDouble(WorkSym(), SYMBOL_VOLUME_STEP); + if(stepLot > 0.0) + lot = MathFloor(lot / stepLot) * stepLot; + if(lot < minLot) + lot = minLot; + if(lot > maxLot) + lot = maxLot; + return NormalizeDouble(lot, 8); +} + +bool CopyRsi1(double &rsi1) +{ + double buf[1]; + if(CopyBuffer(g_hRsi, 0, 1, 1, buf) != 1) + return false; + rsi1 = buf[0]; + return true; +} + +void BuildSLTP(const bool isBuy, const double price, double &sl, double &tp) +{ + sl = tp = 0.0; + if(!InpUseSLTP) + return; + const double pt = SymPoint(); + if(pt <= 0.0) + return; + if(isBuy) + { + sl = price - InpSLPts * pt; + tp = price + InpTPPts * pt; + } + else + { + sl = price + InpSLPts * pt; + tp = price - InpTPPts * pt; + } +} + +void OnClosedPosition() +{ + const double net = NetProfitForPositionId(g_lastPosId); + if(net < 0.0) + g_lossStreak++; + else + g_lossStreak = 0; + Print("Martingale: closed net=", net, " lossStreak=", g_lossStreak, " next lot=", LotsNow()); + g_lastPosId = 0; +} + +bool OurPositionOpenById(const ulong posId) +{ + if(posId == 0) + return false; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong t = PositionGetTicket(i); + if(t == 0 || !PositionSelectByTicket(t)) + continue; + if(PositionGetString(POSITION_SYMBOL) != WorkSym()) + continue; + if((ulong)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + if((ulong)PositionGetInteger(POSITION_IDENTIFIER) == posId) + return true; + } + return false; +} + +void CaptureLastPositionId() +{ + Sleep(20); + for(int k = 0; k < PositionsTotal(); k++) + { + const ulong t = PositionGetTicket(k); + if(t == 0 || !PositionSelectByTicket(t)) + continue; + if(PositionGetString(POSITION_SYMBOL) != WorkSym()) + continue; + if((ulong)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + g_lastPosId = (ulong)PositionGetInteger(POSITION_IDENTIFIER); + return; + } +} + +int OnInit() +{ + if(InpBaseLots <= 0.0 || InpLotMultiplier < 1.0 || InpMaxDoublings < 0) + return INIT_PARAMETERS_INCORRECT; + if(!SymbolSelect(WorkSym(), true)) + Print("Martingale: SymbolSelect note ", WorkSym()); + g_hRsi = iRSI(WorkSym(), InpTf, InpRsiPeriod, PRICE_CLOSE); + if(g_hRsi == INVALID_HANDLE) + return INIT_FAILED; + g_trade.SetExpertMagicNumber(InpMagic); + g_trade.SetDeviationInPoints(InpSlippagePts); + SetFilling(); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(g_hRsi != INVALID_HANDLE) + IndicatorRelease(g_hRsi); +} + +void OnTick() +{ + if(_Symbol != WorkSym()) + return; + + if(g_lastPosId != 0 && !OurPositionOpenById(g_lastPosId)) + OnClosedPosition(); + + static datetime lastBar = 0; + const datetime tb = iTime(WorkSym(), InpTf, 0); + if(tb == 0 || tb == lastBar) + return; + lastBar = tb; + + if(OurPositionCount() > 0) + return; + + double rsi1 = 0.0; + if(!CopyRsi1(rsi1)) + return; + + const double lot = LotsNow(); + if(lot <= 0.0) + return; + + MqlTick tick; + if(!SymbolInfoTick(WorkSym(), tick)) + return; + + double sl = 0.0, tp = 0.0; + const bool wantBuy = (rsi1 <= InpRsiBuyBelow); + const bool wantSell = (rsi1 >= InpRsiSellAbove); + + if(wantBuy && !wantSell) + { + BuildSLTP(true, tick.ask, sl, tp); + if(g_trade.Buy(lot, WorkSym(), tick.ask, sl, tp, "Martingale buy")) + CaptureLastPositionId(); + } + else if(wantSell && !wantBuy) + { + BuildSLTP(false, tick.bid, sl, tp); + if(g_trade.Sell(lot, WorkSym(), tick.bid, sl, tp, "Martingale sell")) + CaptureLastPositionId(); + } +} diff --git a/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation.mq5 b/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation.mq5 new file mode 100644 index 0000000..a859e7c --- /dev/null +++ b/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation.mq5 @@ -0,0 +1,367 @@ +//+------------------------------------------------------------------+ +//| RSIConsolidation.mq5 | +//| Mean-reversion RSI for ranging markets; trend filters block runs | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2025" +#property link "https://www.mql5.com" +#property version "1.01" + +#include + +//--- Symbol (empty = chart symbol) +input group "=== Symbol & session ===" +input string InpSymbol = ""; + +input group "=== Timeframe & bar logic ===" +input ENUM_TIMEFRAMES SignalTF = PERIOD_M15; +input bool EntryOnNewBarOnly = true; + +//--- Core: no trend / consolidation regime +input group "=== Regime: consolidation (anti-trend) ===" +input int ADX_Period = 23; +input double ADX_Max = 38.0; // allow more bars (was 29 — very few on BTC) +input bool UseATRRatioFilter = true; +input int ATR_Period = 8; +input int ATR_SMA_Period = 35; +input double ATR_Ratio_Max = 1.55; // slightly looser vs 1.36 +input bool UseFlatEMAFilter = true; +input int EMA_Fast = 13; +input int EMA_Slow = 17; +input double EMA_Separation_MaxPct = 0.42; // %; was 0.26 — very strict on crypto + +//--- RSI entries (fade extremes toward mean) +input group "=== RSI entries ===" +input int RSI_Period = 8; +input ENUM_APPLIED_PRICE RSI_Price = PRICE_CLOSE; // OPEN made crosses rarer; CLOSE is standard +input double RSI_Oversold = 28.0; +input double RSI_Overbought = 68.0; +input bool UseStrictRsiCross = false; // true = exact cross; false = looser bounce (more trades) +input double RsiCrossSlack = 4.0; // only if !UseStrictRsiCross: widen cross band + +//--- Exits: mean target + hard ATR bracket +input group "=== Exits ===" +input bool UseRSI_MeanExit = true; +input double RSI_Exit_Long = 48.0; +input double RSI_Exit_Short = 52.0; +input double SL_ATR_Mult = 2.15; +input double TP_ATR_Mult = 2.40; +input int MaxBarsInTrade = 54; + +input group "=== Risk & execution ===" +input double Lots = 0.10; +input ulong MagicNumber = 20250420; +input int Slippage = 10; +input int MaxSpreadPoints = 0; // 0 = off (BTC tester/live often blocked at 28) + +CTrade trade; +string g_sym; + +int h_rsi = INVALID_HANDLE; +int h_adx = INVALID_HANDLE; +int h_atr = INVALID_HANDLE; +int h_ema_fast = INVALID_HANDLE; +int h_ema_slow = INVALID_HANDLE; + +datetime g_last_bar = 0; + +bool PositionExistsByMagicSym(string sym, ulong magic) +{ + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) continue; + if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) + return true; + } + return false; +} + +ulong GetPositionTicketByMagicSym(string sym, ulong magic) +{ + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) continue; + if(PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic) + return t; + } + return 0; +} + +bool SelectPositionTicketSymMagic(ulong ticket, string sym, ulong magic) +{ + if(!PositionSelectByTicket(ticket)) return false; + return PositionGetString(POSITION_SYMBOL) == sym && PositionGetInteger(POSITION_MAGIC) == (long)magic; +} + +double NormalizeVolume(string sym, double vol) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + vol = MathFloor(vol / step) * step; + if(vol < minLot) vol = minLot; + if(vol > maxLot) vol = maxLot; + return vol; +} + +int CurrentSpreadPoints(string sym) +{ + long spread = 0; + if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) + return 999999; + return (int)spread; +} + +double MinStopsDistancePrice(string sym) +{ + long lvl = 0; + if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) + return 0; + double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + if(pt <= 0) + return 0; + return (double)lvl * pt; +} + +bool Copy1(int handle, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, 0, 1, b) < 1) return false; + v = b[0]; + return true; +} + +bool CopyAtShift(int handle, const int shift, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, shift, 1, b) < 1) return false; + v = b[0]; + return true; +} + +bool RSI_Buffers(double &cur, double &prev, double &twoAgo) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(h_rsi, 0, 0, 3, b) < 3) return false; + cur = b[0]; + prev = b[1]; + twoAgo = b[2]; + return true; +} + +bool Regime_IsConsolidation() +{ + const int sh = 1; + double adx = 0; + if(!CopyAtShift(h_adx, sh, adx)) + return false; + if(adx >= ADX_Max) + return false; + + if(UseATRRatioFilter) + { + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(h_atr, 0, sh, ATR_SMA_Period + 1, atrArr) < ATR_SMA_Period + 1) + return false; + double sum = 0; + for(int i = 1; i <= ATR_SMA_Period; i++) + sum += atrArr[i]; + double smaAtr = sum / (double)ATR_SMA_Period; + if(smaAtr <= 0.0) + return false; + double ratio = atrArr[0] / smaAtr; + if(ratio > ATR_Ratio_Max) + return false; + } + + if(UseFlatEMAFilter) + { + double ef[], es[]; + ArraySetAsSeries(ef, true); + ArraySetAsSeries(es, true); + if(CopyBuffer(h_ema_fast, 0, sh, 1, ef) < 1) return false; + if(CopyBuffer(h_ema_slow, 0, sh, 1, es) < 1) return false; + double c = SymbolInfoDouble(g_sym, SYMBOL_BID); + if(c <= 0) return false; + double sep = MathAbs(ef[0] - es[0]) / c * 100.0; + if(sep > EMA_Separation_MaxPct) + return false; + } + + return true; +} + +bool Entry_BuyCross(double twoAgo, double prev) +{ + if(UseStrictRsiCross) + return (twoAgo <= RSI_Oversold && prev > RSI_Oversold); + const double lo = RSI_Oversold - RsiCrossSlack; + const double hi = RSI_Oversold + RsiCrossSlack; + return (twoAgo <= hi && prev > lo && prev > twoAgo); +} + +bool Entry_SellCross(double twoAgo, double prev) +{ + if(UseStrictRsiCross) + return (twoAgo >= RSI_Overbought && prev < RSI_Overbought); + const double lo = RSI_Overbought - RsiCrossSlack; + const double hi = RSI_Overbought + RsiCrossSlack; + return (twoAgo >= lo && prev < hi && prev < twoAgo); +} + +void TryCloseByRSI(ENUM_POSITION_TYPE typ, double rsi) +{ + ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); + if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) + return; + if(!UseRSI_MeanExit) + return; + if(typ == POSITION_TYPE_BUY && rsi >= RSI_Exit_Long) + trade.PositionClose(tk); + else if(typ == POSITION_TYPE_SELL && rsi <= RSI_Exit_Short) + trade.PositionClose(tk); +} + +void ManageOpenPosition(double rsi) +{ + ulong tk = GetPositionTicketByMagicSym(g_sym, MagicNumber); + if(tk == 0 || !SelectPositionTicketSymMagic(tk, g_sym, MagicNumber)) + return; + ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openT = (datetime)PositionGetInteger(POSITION_TIME); + int barsAgo = iBarShift(g_sym, SignalTF, openT, false); + if(barsAgo >= 0 && barsAgo >= MaxBarsInTrade) + { + trade.PositionClose(tk); + return; + } + TryCloseByRSI(typ, rsi); +} + +int OnInit() +{ + g_sym = InpSymbol; + StringTrimLeft(g_sym); + StringTrimRight(g_sym); + if(StringLen(g_sym) == 0) + g_sym = _Symbol; + + if(!SymbolSelect(g_sym, true)) + { + Print("RSIConsolidation: SymbolSelect failed: ", g_sym); + return INIT_FAILED; + } + + trade.SetExpertMagicNumber(MagicNumber); + trade.SetDeviationInPoints(Slippage); + trade.SetTypeFilling(ORDER_FILLING_RETURN); + + h_rsi = iRSI(g_sym, SignalTF, RSI_Period, RSI_Price); + h_adx = iADX(g_sym, SignalTF, ADX_Period); + h_atr = iATR(g_sym, SignalTF, ATR_Period); + h_ema_fast = iMA(g_sym, SignalTF, EMA_Fast, 0, MODE_EMA, PRICE_CLOSE); + h_ema_slow = iMA(g_sym, SignalTF, EMA_Slow, 0, MODE_EMA, PRICE_CLOSE); + + if(h_rsi == INVALID_HANDLE || h_adx == INVALID_HANDLE || h_atr == INVALID_HANDLE + || h_ema_fast == INVALID_HANDLE || h_ema_slow == INVALID_HANDLE) + { + Print("RSIConsolidation: indicator init failed"); + return INIT_FAILED; + } + + Print("RSIConsolidation: symbol=", g_sym, " TF=", EnumToString(SignalTF)); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(h_rsi != INVALID_HANDLE) IndicatorRelease(h_rsi); + if(h_adx != INVALID_HANDLE) IndicatorRelease(h_adx); + if(h_atr != INVALID_HANDLE) IndicatorRelease(h_atr); + if(h_ema_fast != INVALID_HANDLE) IndicatorRelease(h_ema_fast); + if(h_ema_slow != INVALID_HANDLE) IndicatorRelease(h_ema_slow); +} + +bool EnoughHistory() +{ + int need = MathMax(RSI_Period + 3, MathMax(ADX_Period + 2, ATR_SMA_Period + 3)); + if(Bars(g_sym, SignalTF) < need) + return false; + return true; +} + +void OnTick() +{ + if(!EnoughHistory()) + return; + + if(MaxSpreadPoints > 0 && CurrentSpreadPoints(g_sym) > MaxSpreadPoints) + return; + + double rsi, rsiPrev, rsi2; + if(!RSI_Buffers(rsi, rsiPrev, rsi2)) + return; + + datetime barTime = iTime(g_sym, SignalTF, 0); + bool isNew = (barTime != g_last_bar); + + if(PositionExistsByMagicSym(g_sym, MagicNumber)) + { + ManageOpenPosition(rsi); + if(isNew) + g_last_bar = barTime; + return; + } + + if(EntryOnNewBarOnly && !isNew) + return; + + g_last_bar = barTime; + + if(!Regime_IsConsolidation()) + return; + + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(h_atr, 0, 0, 1, atrArr) < 1) + return; + double atr = atrArr[0]; + int dig = (int)SymbolInfoInteger(g_sym, SYMBOL_DIGITS); + + double slDist = atr * SL_ATR_Mult; + double tpDist = atr * TP_ATR_Mult; + double minD = MinStopsDistancePrice(g_sym); + if(slDist < minD) + slDist = minD; + if(tpDist < minD) + tpDist = minD; + + double vol = NormalizeVolume(g_sym, Lots); + + if(Entry_BuyCross(rsi2, rsiPrev)) + { + double ask = SymbolInfoDouble(g_sym, SYMBOL_ASK); + double sl = ask - slDist; + double tp = ask + tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + trade.Buy(vol, g_sym, ask, sl, tp, "RSIConsolidation BUY"); + } + else if(Entry_SellCross(rsi2, rsiPrev)) + { + double bid = SymbolInfoDouble(g_sym, SYMBOL_BID); + double sl = bid + slDist; + double tp = bid - tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + trade.Sell(vol, g_sym, bid, sl, tp, "RSIConsolidation SELL"); + } +} + +//+------------------------------------------------------------------+ diff --git a/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation_optimization.set b/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation_optimization.set new file mode 100644 index 0000000..23d8c3f --- /dev/null +++ b/lab/EAs/RSIConsolidationBTCUSD/RSIConsolidation_optimization.set @@ -0,0 +1,38 @@ +; RSIConsolidation.mq5 v1.01 — BTCUSD preset (matches relaxed defaults) +; Strategy Tester → Inputs → Load +; +; === Symbol & session === +InpSymbol=BTCUSD +; === Timeframe & bar logic === +SignalTF=15||15||0||15||N +EntryOnNewBarOnly=true||false||0||true||N +; === Regime: consolidation (anti-trend) === +ADX_Period=23||10||1||40||Y +ADX_Max=38.0||22.0||1.0||50.0||Y +UseATRRatioFilter=true||false||0||true||N +ATR_Period=8||5||1||21||Y +ATR_SMA_Period=35||14||2||80||Y +ATR_Ratio_Max=1.55||1.0||0.02||2.0||Y +UseFlatEMAFilter=true||false||0||true||N +EMA_Fast=13||5||1||21||Y +EMA_Slow=17||10||1||34||Y +EMA_Separation_MaxPct=0.42||0.10||0.02||0.70||Y +; === RSI entries === +RSI_Period=8||5||1||21||Y +RSI_Price=0||0||0||7||Y +RSI_Oversold=28.0||18.0||1.0||42.0||Y +RSI_Overbought=68.0||55.0||1.0||82.0||Y +UseStrictRsiCross=false||false||0||true||Y +RsiCrossSlack=4.0||0.0||0.5||12.0||Y +; === Exits === +UseRSI_MeanExit=true||false||0||true||N +RSI_Exit_Long=48.0||40.0||1.0||55.0||Y +RSI_Exit_Short=52.0||45.0||1.0||60.0||Y +SL_ATR_Mult=2.15||1.0||0.05||3.5||Y +TP_ATR_Mult=2.40||1.2||0.05||4.0||Y +MaxBarsInTrade=54||20||2||120||Y +; === Risk & execution === +Lots=0.1||0.01||0.01||0.50||N +MagicNumber=20250420||20250420||1||20250420||N +Slippage=30||20||5||200||N +MaxSpreadPoints=0||0||1||400||Y diff --git a/lab/EAs/__pycache__/quxiuhanidea_alpha_backtest.cpython-312.pyc b/lab/EAs/__pycache__/quxiuhanidea_alpha_backtest.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e676fa53142be608bbbdea7ddc8037ecf40fce1 GIT binary patch literal 25489 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 literal 0 HcmV?d00001 diff --git a/lab/EAs/rsiDivergence.mq5 b/lab/EAs/rsiDivergence.mq5 new file mode 100644 index 0000000..ea2527c --- /dev/null +++ b/lab/EAs/rsiDivergence.mq5 @@ -0,0 +1,384 @@ +//+------------------------------------------------------------------+ +//| rsiDivergence.mq5 | +//| Lab EA: RSI divergence + EMA distance filter | +//+------------------------------------------------------------------+ +#property copyright "Lab" +#property version "1.00" +#property strict + +#include + +input group "=== Market ===" +input string InpSymbol = ""; +input ENUM_TIMEFRAMES InpTf = PERIOD_CURRENT; +input double InpLots = 0.01; +input ulong InpMagic = 202604231; +input int InpSlippagePts = 30; +input int InpMaxPositions = 1; +input bool InpRequireFlat = true; // no new entry while any position with this magic exists + +input group "=== Indicators ===" +input int InpRsiPeriod = 14; +input int InpEmaPeriod = 200; + +input group "=== Swing / divergence ===" +input int InpPivotRadius = 2; // bars each side; pivot confirms after radius closes +input int InpSwingLookback = 80; // search swings within [radius+1 .. lookback] +input int InpMinPivotGap = 3; // min bars between the two swings used for a pair + +input group "=== EMA distance (entry filter) ===" +input double InpMinEmaDistPtsBuy = 80.0; // buy: (EMA - close) / _Point >= this on signal bar +input double InpMinEmaDistPtsSell = 80.0; // sell: (close - EMA) / _Point >= this + +input group "=== Risk ===" +input bool InpUseSLTP = true; // off = naked positions (can run years until margin stop) +input double InpSLPts = 500.0; // points; tune per symbol (_Point) +input double InpTPPts = 1000.0; +input int InpMaxHoldBars = 0; // 0=off; else close position after this many bars open (signal TF) + +CTrade g_trade; +int g_hRsi = INVALID_HANDLE; +int g_hEma = INVALID_HANDLE; +datetime g_lastBar = 0; +datetime g_lastBuyPivotNew = 0; +datetime g_lastBuyPivotOld = 0; +datetime g_lastSellPivotNew = 0; +datetime g_lastSellPivotOld = 0; + +string WorkSymbol() +{ + if(StringLen(InpSymbol) > 0) + return InpSymbol; + return _Symbol; +} + +ENUM_TIMEFRAMES WorkTf() +{ + if(InpTf == PERIOD_CURRENT) + return (ENUM_TIMEFRAMES)_Period; + return InpTf; +} + +void SetFilling() +{ + const long fill = SymbolInfoInteger(WorkSymbol(), SYMBOL_FILLING_MODE); + if((fill & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK) + g_trade.SetTypeFilling(ORDER_FILLING_FOK); + else if((fill & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC) + g_trade.SetTypeFilling(ORDER_FILLING_IOC); +} + +bool CopyRsiEma(const int bars, double &rsi[], double &ema[]) +{ + ArrayResize(rsi, bars); + ArrayResize(ema, bars); + ArraySetAsSeries(rsi, true); + ArraySetAsSeries(ema, true); + if(CopyBuffer(g_hRsi, 0, 0, bars, rsi) < bars) + return false; + if(CopyBuffer(g_hEma, 0, 0, bars, ema) < bars) + return false; + return true; +} + +bool IsSwingLow(const int s, const int r) +{ + if(s < r + 1) + return false; + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + double lv = iLow(sym, tf, s); + for(int k = -r; k <= r; k++) + { + if(k == 0) + continue; + if(iLow(sym, tf, s + k) <= lv) + return false; + } + return true; +} + +bool IsSwingHigh(const int s, const int r) +{ + if(s < r + 1) + return false; + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + double hv = iHigh(sym, tf, s); + for(int k = -r; k <= r; k++) + { + if(k == 0) + continue; + if(iHigh(sym, tf, s + k) >= hv) + return false; + } + return true; +} + +bool CollectSwingLows(int &outSwings[], const int r, const int lookback) +{ + ArrayResize(outSwings, 0); + const int from = r + 1; + if(lookback <= from) + return false; + for(int s = from; s <= lookback; s++) + { + if(!IsSwingLow(s, r)) + continue; + int n = ArraySize(outSwings); + ArrayResize(outSwings, n + 1); + outSwings[n] = s; + } + return ArraySize(outSwings) >= 2; +} + +bool CollectSwingHighs(int &outSwings[], const int r, const int lookback) +{ + ArrayResize(outSwings, 0); + const int from = r + 1; + if(lookback <= from) + return false; + for(int s = from; s <= lookback; s++) + { + if(!IsSwingHigh(s, r)) + continue; + int n = ArraySize(outSwings); + ArrayResize(outSwings, n + 1); + outSwings[n] = s; + } + return ArraySize(outSwings) >= 2; +} + +void SortSwingsAscending(int &sw[]) +{ + int n = ArraySize(sw); + for(int i = 0; i < n - 1; i++) + for(int j = i + 1; j < n; j++) + if(sw[i] > sw[j]) + { + int t = sw[i]; + sw[i] = sw[j]; + sw[j] = t; + } +} + +bool BullishDivergence(const double &rsi[], const int r, const int lookback, int &sNew, int &sOld) +{ + int swings[]; + if(!CollectSwingLows(swings, r, lookback)) + return false; + SortSwingsAscending(swings); + const int n = ArraySize(swings); + sNew = swings[0]; + sOld = swings[1]; + if(sOld - sNew < InpMinPivotGap) + return false; + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + const double lowNew = iLow(sym, tf, sNew); + const double lowOld = iLow(sym, tf, sOld); + if(lowNew >= lowOld) + return false; + if(rsi[sNew] <= rsi[sOld]) + return false; + return true; +} + +bool BearishDivergence(const double &rsi[], const int r, const int lookback, int &sNew, int &sOld) +{ + int swings[]; + if(!CollectSwingHighs(swings, r, lookback)) + return false; + SortSwingsAscending(swings); + sNew = swings[0]; + sOld = swings[1]; + if(sOld - sNew < InpMinPivotGap) + return false; + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + const double hiNew = iHigh(sym, tf, sNew); + const double hiOld = iHigh(sym, tf, sOld); + if(hiNew <= hiOld) + return false; + if(rsi[sNew] >= rsi[sOld]) + return false; + return true; +} + +bool EmaDistanceBuyOk(const double &ema[], const int barShift) +{ + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + const double c = iClose(sym, tf, barShift); + if(c <= 0.0 || ema[barShift] <= 0.0) + return false; + const double pts = (ema[barShift] - c) / _Point; + return (pts >= InpMinEmaDistPtsBuy); +} + +bool EmaDistanceSellOk(const double &ema[], const int barShift) +{ + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + const double c = iClose(sym, tf, barShift); + if(c <= 0.0 || ema[barShift] <= 0.0) + return false; + const double pts = (c - ema[barShift]) / _Point; + return (pts >= InpMinEmaDistPtsSell); +} + +int CountOurPositions() +{ + const string sym = WorkSymbol(); + int c = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong ticket = PositionGetTicket(i); + if(ticket == 0 || !PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != sym) + continue; + if((ulong)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + c++; + } + return c; +} + +void ManageMaxHoldBars() +{ + if(InpMaxHoldBars <= 0) + return; + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + const ulong ticket = PositionGetTicket(i); + if(ticket == 0 || !PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != sym) + continue; + if((ulong)PositionGetInteger(POSITION_MAGIC) != InpMagic) + continue; + + const datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + const int sh = iBarShift(sym, tf, openTime); + if(sh < 0) + continue; + if(sh >= InpMaxHoldBars) + g_trade.PositionClose(ticket); + } +} + +void BuildSLTP(const bool isBuy, const double price, double &sl, double &tp) +{ + sl = tp = 0.0; + if(!InpUseSLTP) + return; + if(isBuy) + { + sl = price - InpSLPts * _Point; + tp = price + InpTPPts * _Point; + } + else + { + sl = price + InpSLPts * _Point; + tp = price - InpTPPts * _Point; + } +} + +int OnInit() +{ + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + if(!SymbolSelect(sym, true)) + Print("rsiDivergence: SymbolSelect note for ", sym); + + g_hRsi = iRSI(sym, tf, InpRsiPeriod, PRICE_CLOSE); + g_hEma = iMA(sym, tf, InpEmaPeriod, 0, MODE_EMA, PRICE_CLOSE); + if(g_hRsi == INVALID_HANDLE || g_hEma == INVALID_HANDLE) + return INIT_FAILED; + + g_trade.SetExpertMagicNumber(InpMagic); + g_trade.SetDeviationInPoints(InpSlippagePts); + SetFilling(); + return INIT_SUCCEEDED; +} + +void OnDeinit(const int reason) +{ + if(g_hRsi != INVALID_HANDLE) IndicatorRelease(g_hRsi); + if(g_hEma != INVALID_HANDLE) IndicatorRelease(g_hEma); +} + +void OnTick() +{ + const string sym = WorkSymbol(); + const ENUM_TIMEFRAMES tf = WorkTf(); + + ManageMaxHoldBars(); + + datetime t = iTime(sym, tf, 0); + if(t == 0 || t == g_lastBar) + return; + g_lastBar = t; + + const int need = InpSwingLookback + InpPivotRadius + 5; + double rsi[], ema[]; + if(!CopyRsiEma(need, rsi, ema)) + return; + + const int openN = CountOurPositions(); + if(openN >= InpMaxPositions) + return; + if(InpRequireFlat && openN > 0) + return; + + const int r = MathMax(1, InpPivotRadius); + const int lb = MathMax(r + 3, InpSwingLookback); + + int sNew = 0, sOld = 0; + MqlTick tick; + if(!SymbolInfoTick(sym, tick)) + return; + + if(BullishDivergence(rsi, r, lb, sNew, sOld) && EmaDistanceBuyOk(ema, 1)) + { + const datetime tPivotNew = iTime(sym, tf, sNew); + const datetime tPivotOld = iTime(sym, tf, sOld); + if(tPivotNew == 0 || tPivotOld == 0) + return; + if(tPivotNew == g_lastBuyPivotNew && tPivotOld == g_lastBuyPivotOld) + return; + + double sl, tp; + BuildSLTP(true, tick.ask, sl, tp); + if(g_trade.Buy(InpLots, sym, tick.ask, sl, tp, "RSI div+EMA buy")) + { + g_lastBuyPivotNew = tPivotNew; + g_lastBuyPivotOld = tPivotOld; + Print("Buy RSI div: swings ", sOld, "->", sNew, " pivots ", TimeToString(tPivotOld), " -> ", TimeToString(tPivotNew)); + } + return; + } + + if(BearishDivergence(rsi, r, lb, sNew, sOld) && EmaDistanceSellOk(ema, 1)) + { + const datetime tPivotNew = iTime(sym, tf, sNew); + const datetime tPivotOld = iTime(sym, tf, sOld); + if(tPivotNew == 0 || tPivotOld == 0) + return; + if(tPivotNew == g_lastSellPivotNew && tPivotOld == g_lastSellPivotOld) + return; + + double sl, tp; + BuildSLTP(false, tick.bid, sl, tp); + if(g_trade.Sell(InpLots, sym, tick.bid, sl, tp, "RSI div+EMA sell")) + { + g_lastSellPivotNew = tPivotNew; + g_lastSellPivotOld = tPivotOld; + Print("Sell RSI div: swings ", sOld, "->", sNew, " pivots ", TimeToString(tPivotOld), " -> ", TimeToString(tPivotNew)); + } + } +} diff --git a/lab/EAs/rsiDivergence_XAUUSD.set b/lab/EAs/rsiDivergence_XAUUSD.set new file mode 100644 index 0000000..55397f5 --- /dev/null +++ b/lab/EAs/rsiDivergence_XAUUSD.set @@ -0,0 +1,29 @@ +; rsiDivergence.mq5 — XAUUSD test / optimization preset +; Strategy Tester → Inputs → Load. If your server lists "XAU" not "XAUUSD", change InpSymbol only. +; +; value||start||step||stop||Y|N (MT5 convention) +; InpTf: 0 = chart timeframe (PERIOD_CURRENT). Attach EA to XAUUSD chart at desired TF (e.g. H1). +; +; === Market === +InpSymbol=XAUUSD +InpTf=0||0||0||49153||N +InpLots=0.01||0.01||0.01||0.20||N +InpMagic=930204||930204||1||9302040||N +InpSlippagePts=80||30||10||400||N +InpMaxPositions=1||1||1||4||N +InpRequireFlat=true||false||0||true||N +; === Indicators === +InpRsiPeriod=14||7||1||28||Y +InpEmaPeriod=200||50||10||400||Y +; === Swing / divergence === +InpPivotRadius=2||2||1||8||N +InpSwingLookback=120||60||10||300||Y +InpMinPivotGap=3||2||1||15||Y +; === EMA distance (entry filter) — gold: wider point ranges than FX === +InpMinEmaDistPtsBuy=200.0||50.0||25.0||2500.0||Y +InpMinEmaDistPtsSell=200.0||50.0||25.0||2500.0||Y +; === Risk === +InpUseSLTP=true||false||0||true||N +InpSLPts=800.0||300.0||50.0||5000.0||Y +InpTPPts=1600.0||500.0||100.0||10000.0||Y +InpMaxHoldBars=48||0||8||240||Y

    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 RUIKBlp^ek|{Pg;K`UTnoQf>eM diff --git a/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.png b/frontline/MQL5/_united_dynamic/report/pnl_timeseries_line.png deleted file mode 100644 index 5557e2e9a7f372bd8c15ef66870f5880146052b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142585 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 Market Watch` - -2. **Show All Symbols** - - Right-click in the Market Watch window - - Select `Show All` or `Symbols` - - This shows all available symbols from your broker - -3. **Search for Your Symbols** - - Use the search box in the Market Watch window - - Search for: "AAPL", "MSFT", "NVDA", "TSLA", "BTCUSD", "XAUUSD" - -4. **Note the Exact Symbol Name** - - The symbol name shown in Market Watch is what you need to use - - Common formats for Pepperstone US: - - Stocks: `AAPL.US`, `MSFT.US`, `NVDA.US`, `TSLA.US` - - Or: `NASDAQ:AAPL`, `NASDAQ:MSFT`, etc. - - Or: Just `AAPL`, `MSFT`, etc. (if available) - -5. **Add to Market Watch** - - Double-click the symbol to add it to your Market Watch - - Or right-click and select `Show` - -6. **Update EA Inputs** - - Open the EA inputs in MetaTrader 5 - - Update each symbol parameter with the exact name from Market Watch - -## Common Pepperstone US Symbol Formats - -### US Stocks: -- **Apple**: `AAPL.US` or `NASDAQ:AAPL` or `AAPL` -- **Microsoft**: `MSFT.US` or `NASDAQ:MSFT` or `MSFT` -- **NVIDIA**: `NVDA.US` or `NASDAQ:NVDA` or `NVDA` -- **Tesla**: `TSLA.US` or `NASDAQ:TSLA` or `TSLA` - -### Cryptocurrencies: -- **Bitcoin**: `BTCUSD` or `BTC/USD` or `BTCUSD.c` - -### Precious Metals: -- **Gold**: `XAUUSD` or `GOLD` or `XAU/USD` - -## Important Notes: - -1. **Symbol Names are Case-Sensitive**: Use exact capitalization -2. **Add Symbols to Market Watch**: Symbols must be in Market Watch for the EA to access them -3. **Check Trading Hours**: US stocks trade during US market hours (9:30 AM - 4:00 PM ET) -4. **CFD vs Stock**: Pepperstone offers CFDs on stocks, not actual stocks -5. **Spread**: Check the spread for each symbol - some may have wider spreads - -## Troubleshooting: - -### If Symbol Not Found: -1. Check if you're connected to Pepperstone US server -2. Verify your account type supports the symbol -3. Contact Pepperstone support for symbol availability -4. Check if symbol requires special account permissions - -### If EA Shows "Symbol Not Available": -1. Make sure symbol is added to Market Watch -2. Verify symbol name matches exactly (including dots, colons, etc.) -3. Check broker connection status -4. Try different symbol format variations - -## Testing Symbols: - -You can test if a symbol works by: -1. Opening a chart with that symbol -2. If chart opens successfully, the symbol name is correct -3. Use that exact symbol name in the EA inputs diff --git a/frontline/cluster-0/README.md b/frontline/cluster-0/README.md new file mode 100644 index 0000000..e69de29 diff --git a/frontline/MQL5/_united/MagicNumberHelpers.mqh b/frontline/cluster-0/_united-V2/MagicNumberHelpers.mqh similarity index 100% rename from frontline/MQL5/_united/MagicNumberHelpers.mqh rename to frontline/cluster-0/_united-V2/MagicNumberHelpers.mqh diff --git a/frontline/MQL5/_united/PerformanceEvaluator.mqh b/frontline/cluster-0/_united-V2/PerformanceEvaluator.mqh similarity index 100% rename from frontline/MQL5/_united/PerformanceEvaluator.mqh rename to frontline/cluster-0/_united-V2/PerformanceEvaluator.mqh diff --git a/frontline/MQL5/_united/STRATEGY_CONFIGURATION.md b/frontline/cluster-0/_united-V2/STRATEGY_CONFIGURATION.md similarity index 100% rename from frontline/MQL5/_united/STRATEGY_CONFIGURATION.md rename to frontline/cluster-0/_united-V2/STRATEGY_CONFIGURATION.md diff --git a/frontline/MQL5/_united/Strategies/DarvasBoxStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/DarvasBoxStrategy.mqh similarity index 100% rename from frontline/MQL5/_united/Strategies/DarvasBoxStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/DarvasBoxStrategy.mqh diff --git a/frontline/MQL5/_united/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh similarity index 100% rename from frontline/MQL5/_united/Strategies/EMASlopeDistanceStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh diff --git a/frontline/cluster-0/_united-V2/Strategies/RSIConsolidationStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/RSIConsolidationStrategy.mqh new file mode 100644 index 0000000..c996950 --- /dev/null +++ b/frontline/cluster-0/_united-V2/Strategies/RSIConsolidationStrategy.mqh @@ -0,0 +1,387 @@ +//+------------------------------------------------------------------+ +//| RSIConsolidationStrategy.mqh | +//| Ported from cluster-0/RSIConsolidation/RSIConsolidation.mq5 | +//+------------------------------------------------------------------+ +#ifndef RSI_CONSOLIDATION_STRATEGY_MQH +#define RSI_CONSOLIDATION_STRATEGY_MQH + +struct RSIConsolidationData +{ + string symbol; + bool isInitialized; + CTrade trade; + ENUM_TIMEFRAMES signalTF; + bool entryOnNewBarOnly; + int adxPeriod; + double adxMax; + bool useATRRatioFilter; + int atrPeriod; + int atrSmaPeriod; + double atrRatioMax; + bool useFlatEMAFilter; + int emaFast; + int emaSlow; + double emaSeparationMaxPct; + int rsiPeriod; + ENUM_APPLIED_PRICE rsiPrice; + double rsiOversold; + double rsiOverbought; + bool useRSIMeanExit; + double rsiExitLong; + double rsiExitShort; + double slAtrMult; + double tpAtrMult; + int maxBarsInTrade; + ulong magic; + int slippage; + int maxSpreadPoints; + int h_rsi; + int h_adx; + int h_atr; + int h_ema_fast; + int h_ema_slow; + datetime lastBar; +}; + +bool RCO_Copy1(const int handle, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, 0, 1, b) < 1) + return false; + v = b[0]; + return true; +} + +bool RCO_RsiBuffers(RSIConsolidationData &d, double &cur, double &prev, double &twoAgo) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(d.h_rsi, 0, 0, 3, b) < 3) + return false; + cur = b[0]; + prev = b[1]; + twoAgo = b[2]; + return true; +} + +double RCO_NormalizeVolume(const string sym, double vol) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + vol = MathFloor(vol / step) * step; + if(vol < minLot) + vol = minLot; + if(vol > maxLot) + vol = maxLot; + return vol; +} + +int RCO_CurrentSpreadPoints(const string sym) +{ + long spread = 0; + if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) + return 999999; + return (int)spread; +} + +double RCO_MinStopsDistancePrice(const string sym) +{ + long lvl = 0; + if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) + return 0; + double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + if(pt <= 0) + return 0; + return (double)lvl * pt; +} + +bool RCO_RegimeIsConsolidation(RSIConsolidationData &d) +{ + double adx = 0; + if(!RCO_Copy1(d.h_adx, adx)) + return false; + if(adx >= d.adxMax) + return false; + + if(d.useATRRatioFilter) + { + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, d.atrSmaPeriod + 1, atrArr) < d.atrSmaPeriod + 1) + return false; + double sum = 0; + for(int i = 1; i <= d.atrSmaPeriod; i++) + sum += atrArr[i]; + double smaAtr = sum / (double)d.atrSmaPeriod; + if(smaAtr <= 0.0) + return false; + double ratio = atrArr[0] / smaAtr; + if(ratio > d.atrRatioMax) + return false; + } + + if(d.useFlatEMAFilter) + { + double ef[], es[]; + ArraySetAsSeries(ef, true); + ArraySetAsSeries(es, true); + if(CopyBuffer(d.h_ema_fast, 0, 0, 1, ef) < 1) + return false; + if(CopyBuffer(d.h_ema_slow, 0, 0, 1, es) < 1) + return false; + double c = SymbolInfoDouble(d.symbol, SYMBOL_BID); + if(c <= 0) + return false; + double sep = MathAbs(ef[0] - es[0]) / c * 100.0; + if(sep > d.emaSeparationMaxPct) + return false; + } + + return true; +} + +bool RCO_EntryBuyCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo <= d.rsiOversold && prev > d.rsiOversold); +} + +bool RCO_EntrySellCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo >= d.rsiOverbought && prev < d.rsiOverbought); +} + +void RCO_TryCloseByRSI(RSIConsolidationData &d, const ENUM_POSITION_TYPE typ, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + if(!d.useRSIMeanExit) + return; + if(typ == POSITION_TYPE_BUY && rsi >= d.rsiExitLong) + d.trade.PositionClose(tk); + else if(typ == POSITION_TYPE_SELL && rsi <= d.rsiExitShort) + d.trade.PositionClose(tk); +} + +void RCO_ManageOpenPosition(RSIConsolidationData &d, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openT = (datetime)PositionGetInteger(POSITION_TIME); + int barsAgo = iBarShift(d.symbol, d.signalTF, openT, false); + if(barsAgo >= 0 && barsAgo >= d.maxBarsInTrade) + { + d.trade.PositionClose(tk); + return; + } + RCO_TryCloseByRSI(d, typ, rsi); +} + +bool InitRSIConsolidation(RSIConsolidationData &d, + const string inpSymbol, + const ENUM_TIMEFRAMES signalTF, + const bool entryOnNewBarOnly, + const int adxPeriod, + const double adxMax, + const bool useATRRatioFilter, + const int atrPeriod, + const int atrSmaPeriod, + const double atrRatioMax, + const bool useFlatEMAFilter, + const int emaFast, + const int emaSlow, + const double emaSeparationMaxPct, + const int rsiPeriod, + const ENUM_APPLIED_PRICE rsiPrice, + const double rsiOversold, + const double rsiOverbought, + const bool useRSIMeanExit, + const double rsiExitLong, + const double rsiExitShort, + const double slAtrMult, + const double tpAtrMult, + const int maxBarsInTrade, + const ulong magic, + const int slippage, + const int maxSpreadPoints) +{ + d.isInitialized = false; + d.symbol = inpSymbol; + StringTrimLeft(d.symbol); + StringTrimRight(d.symbol); + if(StringLen(d.symbol) == 0) + d.symbol = _Symbol; + + d.signalTF = signalTF; + d.entryOnNewBarOnly = entryOnNewBarOnly; + d.adxPeriod = adxPeriod; + d.adxMax = adxMax; + d.useATRRatioFilter = useATRRatioFilter; + d.atrPeriod = atrPeriod; + d.atrSmaPeriod = atrSmaPeriod; + d.atrRatioMax = atrRatioMax; + d.useFlatEMAFilter = useFlatEMAFilter; + d.emaFast = emaFast; + d.emaSlow = emaSlow; + d.emaSeparationMaxPct = emaSeparationMaxPct; + d.rsiPeriod = rsiPeriod; + d.rsiPrice = rsiPrice; + d.rsiOversold = rsiOversold; + d.rsiOverbought = rsiOverbought; + d.useRSIMeanExit = useRSIMeanExit; + d.rsiExitLong = rsiExitLong; + d.rsiExitShort = rsiExitShort; + d.slAtrMult = slAtrMult; + d.tpAtrMult = tpAtrMult; + d.maxBarsInTrade = maxBarsInTrade; + d.magic = magic; + d.slippage = slippage; + d.maxSpreadPoints = maxSpreadPoints; + d.lastBar = 0; + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; + + if(!SymbolSelect(d.symbol, true)) + { + Print("RSIConsolidation: SymbolSelect failed: ", d.symbol); + return false; + } + + d.trade.SetExpertMagicNumber((long)d.magic); + d.trade.SetDeviationInPoints(d.slippage); + d.trade.SetTypeFillingBySymbol(d.symbol); + + d.h_rsi = iRSI(d.symbol, d.signalTF, d.rsiPeriod, d.rsiPrice); + d.h_adx = iADX(d.symbol, d.signalTF, d.adxPeriod); + d.h_atr = iATR(d.symbol, d.signalTF, d.atrPeriod); + d.h_ema_fast = iMA(d.symbol, d.signalTF, d.emaFast, 0, MODE_EMA, PRICE_CLOSE); + d.h_ema_slow = iMA(d.symbol, d.signalTF, d.emaSlow, 0, MODE_EMA, PRICE_CLOSE); + + if(d.h_rsi == INVALID_HANDLE || d.h_adx == INVALID_HANDLE || d.h_atr == INVALID_HANDLE + || d.h_ema_fast == INVALID_HANDLE || d.h_ema_slow == INVALID_HANDLE) + { + Print("RSIConsolidation: indicator init failed"); + DeinitRSIConsolidation(d); + return false; + } + + d.isInitialized = true; + Print("RSIConsolidation: symbol=", d.symbol, " TF=", EnumToString(d.signalTF)); + return true; +} + +void DeinitRSIConsolidation(RSIConsolidationData &d) +{ + if(d.h_rsi != INVALID_HANDLE) + IndicatorRelease(d.h_rsi); + if(d.h_adx != INVALID_HANDLE) + IndicatorRelease(d.h_adx); + if(d.h_atr != INVALID_HANDLE) + IndicatorRelease(d.h_atr); + if(d.h_ema_fast != INVALID_HANDLE) + IndicatorRelease(d.h_ema_fast); + if(d.h_ema_slow != INVALID_HANDLE) + IndicatorRelease(d.h_ema_slow); + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; +} + +bool RCO_EnoughHistory(RSIConsolidationData &d) +{ + int need = MathMax(d.rsiPeriod + 3, MathMax(d.adxPeriod + 2, d.atrSmaPeriod + 3)); + if(Bars(d.symbol, d.signalTF) < need) + return false; + return true; +} + +void ProcessRSIConsolidation(RSIConsolidationData &d, const double lots) +{ + if(!d.isInitialized) + return; + + if(!RCO_EnoughHistory(d)) + return; + + if(d.maxSpreadPoints > 0 && RCO_CurrentSpreadPoints(d.symbol) > d.maxSpreadPoints) + return; + + double rsi, rsiPrev, rsi2; + if(!RCO_RsiBuffers(d, rsi, rsiPrev, rsi2)) + return; + + datetime barTime = iTime(d.symbol, d.signalTF, 0); + bool isNew = (barTime != d.lastBar); + + if(PositionExistsByMagic(d.symbol, d.magic)) + { + RCO_ManageOpenPosition(d, rsi); + if(isNew) + d.lastBar = barTime; + return; + } + + if(d.entryOnNewBarOnly && !isNew) + return; + + d.lastBar = barTime; + + if(!RCO_RegimeIsConsolidation(d)) + return; + + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, 1, atrArr) < 1) + return; + double atr = atrArr[0]; + int dig = (int)SymbolInfoInteger(d.symbol, SYMBOL_DIGITS); + + double slDist = atr * d.slAtrMult; + double tpDist = atr * d.tpAtrMult; + double minD = RCO_MinStopsDistancePrice(d.symbol); + if(slDist < minD) + slDist = minD; + if(tpDist < minD) + tpDist = minD; + + double vol = RCO_NormalizeVolume(d.symbol, lots); + + if(RCO_EntryBuyCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, true)) + return; + double ask = SymbolInfoDouble(d.symbol, SYMBOL_ASK); + double sl = ask - slDist; + double tp = ask + tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Buy(vol, d.symbol, ask, sl, tp, "RSIConsolidation BUY")) + Print("RSIConsolidation BUY failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } + else if(RCO_EntrySellCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, false)) + return; + double bid = SymbolInfoDouble(d.symbol, SYMBOL_BID); + double sl = bid + slDist; + double tp = bid - tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Sell(vol, d.symbol, bid, sl, tp, "RSIConsolidation SELL")) + Print("RSIConsolidation SELL failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } +} + +#endif // RSI_CONSOLIDATION_STRATEGY_MQH diff --git a/frontline/MQL5/_united_dynamic/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh similarity index 90% rename from frontline/MQL5/_united_dynamic/Strategies/RSICrossOverReversalStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh index f182476..266292a 100644 --- a/frontline/MQL5/_united_dynamic/Strategies/RSICrossOverReversalStrategy.mqh +++ b/frontline/cluster-0/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh @@ -20,6 +20,23 @@ bool WeekDays_Check(datetime aTime) return(rcData.WeekDays[stm.day_of_week]); } +bool RC_HourInWindow(const int h, const int beginRaw, const int endRaw) +{ + const int b = beginRaw % 24; + const int e = endRaw % 24; + if(b == e) + return false; + if(b < e) + return (h >= b && h < e); + return (h >= b || h < e); +} + +bool RC_TradingHoursAllow(const int currentHour) +{ + return RC_HourInWindow(currentHour, RC_tradingHourOneBegin, RC_tradingHourOneEnd) + || RC_HourInWindow(currentHour, RC_tradingHourTwoBegin, RC_tradingHourTwoEnd); +} + int TimeHour(datetime when = 0) { if(when == 0) when = TimeCurrent(); @@ -151,8 +168,7 @@ void ProcessRSICrossOverReversal(string symbol) return; } - if(!((currentHour < RC_tradingHourOneEnd && currentHour > RC_tradingHourOneBegin) || - (currentHour < RC_tradingHourTwoEnd && currentHour > RC_tradingHourTwoBegin))) + if(!RC_TradingHoursAllow(currentHour)) { Close_Position_MN(RC_MagicNumber); return; @@ -173,7 +189,7 @@ void ProcessRSICrossOverReversal(string symbol) double previousEMA = ema[1]; double emaSlope = (currentEMA - previousEMA) * 100; - double closeCurr = iClose(Symbol(), Period(), 0); + const double closeCurr = iClose(rcData.symbol, RC_TimeFrame1, 0); double priceToEmaDistance = (closeCurr - currentEMA) * 10; bool isBuyPosition = false; @@ -211,10 +227,10 @@ void ProcessRSICrossOverReversal(string symbol) { Close_Position_MN(RC_MagicNumber); rcData.lastTradeTime = currentTime; - return; } - - if(currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && + + if(!isTrendStrong && + currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && !isSellPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); @@ -223,8 +239,9 @@ void ProcessRSICrossOverReversal(string symbol) rcData.lastTradeTime = currentTime; } } - - if(currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && + + if(!isTrendStrong && + currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && !isBuyPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); diff --git a/frontline/MQL5/_united/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh similarity index 100% rename from frontline/MQL5/_united/Strategies/RSIMidPointHijackStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh diff --git a/frontline/MQL5/_united/Strategies/RSIReversalAsianStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/RSIReversalAsianStrategy.mqh similarity index 100% rename from frontline/MQL5/_united/Strategies/RSIReversalAsianStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/RSIReversalAsianStrategy.mqh diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/RSIScalpingStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/RSIScalpingStrategy.mqh similarity index 78% rename from frontline/MQL5/_united_dynamic_cent/Strategies/RSIScalpingStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/RSIScalpingStrategy.mqh index 666dc1d..5daa1c1 100644 --- a/frontline/MQL5/_united_dynamic_cent/Strategies/RSIScalpingStrategy.mqh +++ b/frontline/cluster-0/_united-V2/Strategies/RSIScalpingStrategy.mqh @@ -22,6 +22,104 @@ struct RSIScalpingData { int bars_against_count; }; +void ClosePosition(RSIScalpingData& data, int MagicNumber); + +double RS_ATRPriceOnTF(const string symbol, const ENUM_TIMEFRAMES tf, const int period) +{ + if(period < 1) + return 0.0; + MqlRates rates[]; + const int need = period + 2; + if(CopyRates(symbol, tf, 0, need, rates) < need) + return 0.0; + ArraySetAsSeries(rates, true); + double sum = 0.0; + for(int i = 1; i <= period; i++) + { + const double hl = rates[i].high - rates[i].low; + const double hc = MathAbs(rates[i].high - rates[i + 1].close); + const double lc = MathAbs(rates[i].low - rates[i + 1].close); + sum += MathMax(hl, MathMax(hc, lc)); + } + return sum / (double)period; +} + +int RS_CountReversalEscapeSigns(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, + const ENUM_POSITION_TYPE ptype, const double atr, + const double adverseAtrMult, const double rsiVelocity, + const double bodyAtrMult) +{ + if(atr <= 0.0) + return 0; + const double entry = PositionGetDouble(POSITION_PRICE_OPEN); + const double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); + const double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); + int signs = 0; + + if(ptype == POSITION_TYPE_BUY) + { + if(entry - bid >= adverseAtrMult * atr) + signs++; + if(data.rsi_prev - data.rsi_current >= rsiVelocity) + signs++; + } + else if(ptype == POSITION_TYPE_SELL) + { + if(ask - entry >= adverseAtrMult * atr) + signs++; + if(data.rsi_current - data.rsi_prev >= rsiVelocity) + signs++; + } + else + return 0; + + MqlRates r[]; + if(CopyRates(data.symbol, tf, 0, 4, r) >= 4) + { + ArraySetAsSeries(r, true); + const double body = MathAbs(r[1].close - r[1].open); + if(body >= bodyAtrMult * atr) + { + if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) + signs++; + else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) + signs++; + } + if(ptype == POSITION_TYPE_BUY) + { + if(r[1].close < r[2].close && r[2].close < r[3].close) + signs++; + } + else + { + if(r[1].close > r[2].close && r[2].close > r[3].close) + signs++; + } + } + return signs; +} + +void RS_TryReversalEscape(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, const int MagicNumber, + const int atrPeriod, const double adverseAtrMult, const int signsRequired, + const double rsiVelocity, const double bodyAtrMult) +{ + if(!PositionSelectByMagic(data.symbol, (ulong)MagicNumber)) + return; + + const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + const double atr = RS_ATRPriceOnTF(data.symbol, tf, atrPeriod); + if(atr <= 0.0) + return; + + const int n = RS_CountReversalEscapeSigns(data, tf, ptype, atr, adverseAtrMult, rsiVelocity, bodyAtrMult); + if(n < signsRequired) + return; + + ClosePosition(data, MagicNumber); + Print("RSIScalping: reversal escape symbol=", data.symbol, " signs=", n, " need=", signsRequired, + " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(data.symbol, SYMBOL_DIGITS))); +} + string ErrorDescription(int errorCode) { switch(errorCode) @@ -420,7 +518,9 @@ void ClosePosition(RSIScalpingData& data, int MagicNumber) void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, ENUM_APPLIED_PRICE RSI_Applied_Price, double RSI_Overbought, double RSI_Oversold, double RSI_Target_Buy, double RSI_Target_Sell, - int BarsToWait, double LotSize, int MagicNumber) + int BarsToWait, double LotSize, int MagicNumber, + bool UseReversalEscape, int ReversalATRPeriod, double ReversalAdverseAtrMult, + int ReversalSignsRequired, double ReversalRsiVelocity, double ReversalBodyAtrMult) { // Skip if not initialized (symbol not available) if(!data.isInitialized) @@ -429,16 +529,25 @@ void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES Ti data.symbol = symbol; // Update symbol in case it changed if(Bars(data.symbol, TimeFrame) < RSI_Period + 2) return; - - datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); - if(current_bar_time == data.last_bar_time) + + const datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); + const bool new_bar = (current_bar_time != data.last_bar_time); + const bool in_pos = data.position_open || PositionExistsByMagic(data.symbol, MagicNumber); + if(!in_pos && !new_bar) return; - - data.last_bar_time = current_bar_time; - + if(!UpdateRSI(data)) return; - + + if(in_pos && UseReversalEscape) + RS_TryReversalEscape(data, TimeFrame, MagicNumber, ReversalATRPeriod, ReversalAdverseAtrMult, + ReversalSignsRequired, ReversalRsiVelocity, ReversalBodyAtrMult); + + if(!new_bar) + return; + + data.last_bar_time = current_bar_time; + CheckExistingPosition(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, RSI_Target_Buy, RSI_Target_Sell, BarsToWait); diff --git a/frontline/MQL5/_united_dynamic/Strategies/SuperEMAStrategy.mqh b/frontline/cluster-0/_united-V2/Strategies/SuperEMAStrategy.mqh similarity index 96% rename from frontline/MQL5/_united_dynamic/Strategies/SuperEMAStrategy.mqh rename to frontline/cluster-0/_united-V2/Strategies/SuperEMAStrategy.mqh index 3b1a974..3dba90e 100644 --- a/frontline/MQL5/_united_dynamic/Strategies/SuperEMAStrategy.mqh +++ b/frontline/cluster-0/_united-V2/Strategies/SuperEMAStrategy.mqh @@ -228,6 +228,9 @@ int SuperEMA_BarsSinceOpen(SuperEMAData &d, const datetime openTime) void SuperEMA_CloseTicket(SuperEMAData &d, const ulong ticket, const string reason) { +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif d.trade.SetExpertMagicNumber(d.magic); if(d.trade.PositionClose(ticket)) SuperEMA_Log(d, "Close: " + reason); @@ -235,6 +238,9 @@ void SuperEMA_CloseTicket(SuperEMAData &d, const ulong ticket, const string reas void SuperEMA_ManageExits(SuperEMAData &d) { +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif for(int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); @@ -412,9 +418,6 @@ void ProcessSuperEMA(SuperEMAData &d, const double lots) SuperEMA_ManageExits(d); - if(d.oneTradeOnly && SuperEMA_PositionsByMagic(d) > 0) - return; - const int sh = d.emaTrendBars; double h1 = 0.0, h2 = 0.0; if(!SuperEMA_MacdHistAt(d, 1, h1) || !SuperEMA_MacdHistAt(d, 2, h2)) @@ -450,6 +453,16 @@ void ProcessSuperEMA(SuperEMAData &d, const double lots) break; } + if(d.oneTradeOnly && SuperEMA_PositionsByMagic(d) > 0) + { + if(wantBuy && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, true)) + wantBuy = false; + if(wantSell && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, false)) + wantSell = false; + if(!wantBuy && !wantSell) + return; + } + MqlTick tick; if(!SymbolInfoTick(d.symbol, tick)) return; @@ -458,13 +471,17 @@ void ProcessSuperEMA(SuperEMAData &d, const double lots) if(wantBuy && !wantSell) { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE SuperEMA_ComputeSLTP(d, true, sl, tp); +#endif if(d.trade.Buy(lots, d.symbol, tick.ask, sl, tp, "United SuperEMA long")) SuperEMA_Log(d, StringFormat("BUY ask=%.5f sl=%.5f", tick.ask, sl)); } else if(wantSell && !wantBuy) { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE SuperEMA_ComputeSLTP(d, false, sl, tp); +#endif if(d.trade.Sell(lots, d.symbol, tick.bid, sl, tp, "United SuperEMA short")) SuperEMA_Log(d, StringFormat("SELL bid=%.5f sl=%.5f", tick.bid, sl)); } diff --git a/frontline/MQL5/_united_dynamic_cent/main.mq5 b/frontline/cluster-0/_united-V2/main.mq5 similarity index 65% rename from frontline/MQL5/_united_dynamic_cent/main.mq5 rename to frontline/cluster-0/_united-V2/main.mq5 index 191d017..35e7106 100644 --- a/frontline/MQL5/_united_dynamic_cent/main.mq5 +++ b/frontline/cluster-0/_united-V2/main.mq5 @@ -1,15 +1,11 @@ //+------------------------------------------------------------------+ //| UnitedEA.mq5 | -//| Cent ".c" symbols; InpDynamicRefDeposit MUST match ACCOUNT_ | -//| CURRENCY numbers (USC ~50k for ~$500, or USD ~500 — not mixed). | -//| Per-order max lots = broker spec 最大量 SYMBOL_VOLUME_MAX | -//| (often 1000 on *.c); EA cannot exceed it — see symbol contract. | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" -#property version "1.10" +#property version "1.00" #property strict #include @@ -17,22 +13,29 @@ #include #include #include "MagicNumberHelpers.mqh" - -// Lot globals must exist before strategy .mqh (Darvas uses g_DB_LotSize; EMA/RC/RM use g_ES/g_RC/g_RM) -double g_ES_LotSize; -double g_RC_LotSize; -double g_RM_LotSize; -double g_DB_LotSize; -double g_DynLotScaleLast = 1.0; // last applied scale: lots = baseLot * scale * InpLotSizeScale -double g_DynamicRefBaseline = 0.0; // when InpDynamicRefDeposit<=0, frozen ref = equity at first sizing call - // Include strategy implementations early so structs are available #include "Strategies/DarvasBoxStrategy.mqh" #include "Strategies/EMASlopeDistanceStrategy.mqh" #include "Strategies/RSICrossOverReversalStrategy.mqh" #include "Strategies/RSIMidPointHijackStrategy.mqh" #include "Strategies/RSIScalpingStrategy.mqh" +#include "Strategies/SuperEMAStrategy.mqh" #include "Strategies/RSIReversalAsianStrategy.mqh" +#include "Strategies/RSIConsolidationStrategy.mqh" + +//+------------------------------------------------------------------+ +//| Global Lot Size Variables (for dynamic lot sizing) | +//+------------------------------------------------------------------+ +double g_ES_LotSize; // EMA Slope Distance lot size +double g_RC_LotSize; // RSI CrossOver Reversal lot size +double g_RM_LotSize; // RSI MidPoint Hijack lot size + +bool United_MayOpenNewEntry(const string symbol, const ulong magic, const bool isBuy) +{ + if(PositionExistsByMagic(symbol, magic)) + return false; + return true; +} //+------------------------------------------------------------------+ //| Strategy Enable/Disable Switches | @@ -47,51 +50,30 @@ input bool EnableRSIScalpingBTCUSD = true; input bool EnableRSIScalpingNVDA = true; input bool EnableRSIScalpingTSLA = true; input bool EnableRSIScalpingXAUUSD = true; +input bool EnableSuperEMA = true; +input bool EnableRSIConsolidation = true; input bool EnableRSIReversalAsianEURUSD = true; input bool EnableRSIReversalAsianAUDUSD = true; -//+------------------------------------------------------------------+ -//| Dynamic lot sizing — 默认「按比例」:lots = base × (equity/ref) × lotScale | -//| 可选幂曲线:lots = base × (equity/ref)^exp × lotScale(旧行为) | -//| min/max 约束的是「比例系数」不是手数本身;max<=0 表示比例系数上不封顶 | -//| | -//| USC (deposit currency) vs "lot size": | -//| • Equity/ref for the multiplier are BOTH in account currency | -//| (USC). Same units → ratio is correct; no ×100 on the ratio. | -//| • Strategy base lots (e.g. DB_BaseLotSize) are ORDER VOLUME in | -//| lots, not "USC lots". Broker SYMBOL_VOLUME_* / contract define | -//| how much margin and P/L appear in USC. | -//| • Do not multiply lot inputs by 100 only because balance is USC. | -//| If DD too high: raise InpDynamicRefDeposit and/or lower base lots.| -//| If balance is USD ~500 but ref is ~50k–300k: mult→floor, lots→0.01.| -//| Ref<=0: 挂上时余额/净值为参考,之后手数随净值相对该基准的比例变化。 | -//| 单笔上限:品种规格里的「最大量」(SYMBOL_VOLUME_MAX),非 EA 参数。 | -//| InpMaxLotsPerOrder:EA 再截一刀,防止动态+scale 顶满 1000 爆仓。 | -//+------------------------------------------------------------------+ -enum ENUM_LOT_SCALE_CURVE -{ - LOT_CURVE_PROPORTIONAL = 0, // 按比例:scale = 净值/参考(线性) - LOT_CURVE_POWER = 1 // 幂:scale = (净值/参考)^exp -}; - -input group "=== Dynamic lot sizing (动态手数) ===" -input bool InpDynamicLotEnable = true; // Enable balance/equity-based scaling -input ENUM_LOT_SCALE_CURVE InpDynamicLotCurve = LOT_CURVE_PROPORTIONAL; // 默认按比例;幂曲线=旧 (equity/ref)^exp -input double InpDynamicRefDeposit = 0.0; // <=0: auto — ref=挂上时净值/余额(与测试器初始一致则手数随盈利涨); >0 手动参考金 -input bool InpDynamicRefEqualsEquity = false; // true: 比例系数固定为 1(只用基础手×lotScale) -input double InpDynamicExponent = 1.22; // 仅 LOT_CURVE_POWER 时:(净值/参考) 的指数 -input double InpDynamicMinMult = 0.0; // 比例系数下限;<=0 不抬(按比例时净值<参考会缩小手数) -input double InpDynamicMaxMult = 20.0; // 比例系数上限;<=0 不封顶(高风险) -input bool InpDynamicUseEquity = true; // true=ACCOUNT_EQUITY, false=ACCOUNT_BALANCE -input double InpDynamicStockLotCap = 0.0; // Max lots after scale (0=off); raise if InpLotSizeScale is large -input double InpLotSizeScale = 1.0; // 全局手数倍率; 曾用100易过大,默认1按需再加 -input double InpMaxLotsPerOrder = 20.0; // 单笔最大手数(0=仅券商SYMBOL_VOLUME_MAX); 保守可设5~10 +input group "=== Centralized Lot Size (Granular Per Robot) ===" +input double LOT_ES_EMASlopeDistance = 0.05; +input double LOT_RC_RSICrossOver = 0.1; +input double LOT_RM_RSIMidPointHijack = 0.01; +input double LOT_RS_APPL = 100.0; +input double LOT_RS_BTCUSD = 0.15; +input double LOT_RS_NVDA = 60.0; +input double LOT_RS_TSLA = 20.0; +input double LOT_RS_XAUUSD = 0.02; +input double LOT_RRA_EURUSD = 0.01; +input double LOT_RRA_AUDUSD = 0.10; +input double LOT_SE_SuperEMA = 0.01; +input double LOT_RCO_RSIConsolidation = 0.04; //+------------------------------------------------------------------+ -//| Strategy 1: DarvasBoxXAUUSD (cent symbol) | +//| Strategy 1: DarvasBoxXAUUSD | //+------------------------------------------------------------------+ input group "=== DarvasBox Strategy ===" -input string DB_Symbol = "XAUUSD.c"; +input string DB_Symbol = "XAUUSD"; input int DB_BoxPeriod = 165; input double DB_BoxDeviation = 30000; // Increased to allow larger ranges (was 25140) input int DB_VolumeThreshold = 0; // Set to 0 to disable volume threshold check. Volume data from indicator used instead. @@ -108,20 +90,19 @@ input double DB_TrendThreshold = 4.94; input int DB_VolumeMA_Period = 110; input double DB_VolumeThresholdMultiplier = 1.5; input int DB_MagicNumber = 135790; -input double DB_BaseLotSize = 0.02; // Base lot at InpDynamicRefDeposit (Darvas) //+------------------------------------------------------------------+ //| Strategy 2: EMASlopeDistanceCocktailXAUUSD | -//| Cent: gold is usually "XAUUSD.c" (verify in Market Watch). | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | //+------------------------------------------------------------------+ input group "=== EMA Slope Distance Strategy ===" -input string ES_Symbol = "XAUUSD.c"; +input string ES_Symbol = "XAUUSD"; input int ES_EMA_Periode = 46; input double ES_PreisSchwelle = 600.0; input double ES_SteigungSchwelle = 80.0; input int ES_ÜberwachungTimeout = 800; input double ES_TrailingStop = 250.0; -input double ES_LotGröße = 0.05; +input double ES_LotGröße = 0.03; input int ES_MagicNumber = 12350; input bool ES_UseSpreadAdjustment = true; input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; @@ -132,17 +113,17 @@ input bool ES_CloseUnprofitableTrades = true; //+------------------------------------------------------------------+ //| Strategy 3: RSICrossOverReversalXAUUSD | -//| Cent: use "XAUUSD.c" if that is what the broker lists. | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | //+------------------------------------------------------------------+ input group "=== RSI CrossOver Reversal Strategy ===" -input string RC_Symbol = "XAUUSD.c"; +input string RC_Symbol = "XAUUSD"; input int RC_MagicNumber = 7; input int RC_rsiPeriod = 19; input int RC_overboughtLevel = 93; input int RC_oversoldLevel = 22; input double RC_entryRSIBuySpread = 0; input double RC_entryRSISellSpread = 0; -input double RC_lotSize = 0.02; +input double RC_lotSize = 0.01; input int RC_slippage = 3; input int RC_cooldownSeconds = 209; input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; @@ -168,12 +149,12 @@ input bool RC_Saturday = false; //+------------------------------------------------------------------+ //| Strategy 4: RSIMidPointHijackXAUUSD | -//| Cent: use "XAUUSD.c" if that is what the broker lists. | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | //+------------------------------------------------------------------+ input group "=== RSI MidPoint Hijack Strategy ===" -input string RM_Symbol = "XAUUSD.c"; +input string RM_Symbol = "XAUUSD"; input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; -input double RM_InpLotSize = 0.03; +input double RM_InpLotSize = 0.02; input int RM_InpMagicNumberRSIFollow = 1001; input int RM_InpMagicNumberRSIReverse = 1002; input int RM_InpMagicNumberEMACross = 1003; @@ -217,11 +198,16 @@ input int RM_InpEMADistancePeriod = 26; //| - TSLA: Tesla stock | //| - XAUUSD: Gold/USD | //| | -//| USC cent: many symbols end with ".c" — use Market Watch names. | -//| Stocks may be "AAPL.US.c" or unchanged; verify before live. | +//| PEPPERSTONE US SYMBOL FORMATS: | +//| - Stocks may use: "AAPL.US", "NASDAQ:AAPL", or just "AAPL" | +//| - To find correct symbols: | +//| 1. Open Market Watch (Ctrl+M) | +//| 2. Right-click > Show All | +//| 3. Search for the stock name | +//| 4. Use the exact symbol name shown | //+------------------------------------------------------------------+ -input group "=== RSI Scalping APPL (AAPL) - cent ===" -input string RS_APPL_Symbol = "AAPL.US.c"; // If missing, try AAPL.US / NASDAQ:AAPL / AAPL +input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" +input string RS_APPL_Symbol = "AAPL.US"; // Try: "AAPL.US", "NASDAQ:AAPL", or "AAPL" input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; input int RS_APPL_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; @@ -230,12 +216,12 @@ input double RS_APPL_RSI_Oversold = 78; input double RS_APPL_RSI_Target_Buy = 94; input double RS_APPL_RSI_Target_Sell = 44; input int RS_APPL_BarsToWait = 7; -input double RS_APPL_LotSize = 38; +input double RS_APPL_LotSize = 25; input int RS_APPL_MagicNumber = 20001; input int RS_APPL_Slippage = 3; input group "=== RSI Scalping BTCUSD ===" -input string RS_BTCUSD_Symbol = "BTCUSD.c"; // If missing, try BTCUSD or BTC/USD +input string RS_BTCUSD_Symbol = "BTCUSD"; // Pepperstone may use: "BTCUSD", "BTC/USD", or "BTCUSD.c" input ENUM_TIMEFRAMES RS_BTCUSD_TimeFrame = PERIOD_H1; input int RS_BTCUSD_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_BTCUSD_RSI_Applied_Price = PRICE_CLOSE; @@ -244,12 +230,12 @@ input double RS_BTCUSD_RSI_Oversold = 73; input double RS_BTCUSD_RSI_Target_Buy = 88; input double RS_BTCUSD_RSI_Target_Sell = 48; input int RS_BTCUSD_BarsToWait = 6; -input double RS_BTCUSD_LotSize = 0.15; +input double RS_BTCUSD_LotSize = 0.1; input int RS_BTCUSD_MagicNumber = 123459123; input int RS_BTCUSD_Slippage = 3; -input group "=== RSI Scalping NVDA - cent ===" -input string RS_NVDA_Symbol = "NVDA.US.c"; // If missing, try NVDA.US / NASDAQ:NVDA / NVDA +input group "=== RSI Scalping NVDA - Pepperstone US ===" +input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; input int RS_NVDA_RSI_Period = 8; input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; @@ -258,12 +244,12 @@ input double RS_NVDA_RSI_Oversold = 38; input double RS_NVDA_RSI_Target_Buy = 90; input double RS_NVDA_RSI_Target_Sell = 70; input int RS_NVDA_BarsToWait = 5; -input double RS_NVDA_LotSize = 75; +input double RS_NVDA_LotSize = 50; input int RS_NVDA_MagicNumber = 20003; input int RS_NVDA_Slippage = 3; -input group "=== RSI Scalping TSLA - cent ===" -input string RS_TSLA_Symbol = "TSLA.US.c"; // If missing, try TSLA.US / NASDAQ:TSLA / TSLA +input group "=== RSI Scalping TSLA - Pepperstone US ===" +input string RS_TSLA_Symbol = "TSLA.US"; // Try: "TSLA.US", "NASDAQ:TSLA", or "TSLA" input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; input int RS_TSLA_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; @@ -272,12 +258,12 @@ input double RS_TSLA_RSI_Oversold = 73; input double RS_TSLA_RSI_Target_Buy = 87; input double RS_TSLA_RSI_Target_Sell = 33; input int RS_TSLA_BarsToWait = 1; -input double RS_TSLA_LotSize = 75; +input double RS_TSLA_LotSize = 50; input int RS_TSLA_MagicNumber = 125421321; input int RS_TSLA_Slippage = 3; input group "=== RSI Scalping XAUUSD ===" -input string RS_XAUUSD_Symbol = "XAUUSD.c"; +input string RS_XAUUSD_Symbol = "XAUUSD"; input ENUM_TIMEFRAMES RS_XAUUSD_TimeFrame = PERIOD_H1; input int RS_XAUUSD_RSI_Period = 14; input ENUM_APPLIED_PRICE RS_XAUUSD_RSI_Applied_Price = PRICE_CLOSE; @@ -286,10 +272,18 @@ input double RS_XAUUSD_RSI_Oversold = 57; input double RS_XAUUSD_RSI_Target_Buy = 80; input double RS_XAUUSD_RSI_Target_Sell = 57; input int RS_XAUUSD_BarsToWait = 4; -input double RS_XAUUSD_LotSize = 0.15; +input double RS_XAUUSD_LotSize = 0.1; input int RS_XAUUSD_MagicNumber = 129102315; input int RS_XAUUSD_Slippage = 3; +input group "=== RSI Scalping Reversal Escape (XAUUSD only) ===" +input bool RS_UseReversalEscape = true; +input int RS_ReversalATRPeriod = 14; +input double RS_ReversalAdverseAtrMult = 5.25; +input int RS_ReversalSignsRequired = 2; +input double RS_ReversalRsiVelocity = 16.0; +input double RS_ReversalBodyAtrMult = 5.1; + //+------------------------------------------------------------------+ //| Strategy 11-12: RSI Reversal Asian Strategies | //| Each RSI Reversal Asian strategy trades on its own symbol: | @@ -297,13 +291,13 @@ input int RS_XAUUSD_Slippage = 3; //| - AUDUSD: Australian Dollar/USD | //+------------------------------------------------------------------+ input group "=== RSI Reversal Asian EURUSD ===" -input string RRA_EURUSD_Symbol = "EURUSD.c"; +input string RRA_EURUSD_Symbol = "EURUSD"; input int RRA_EURUSD_RSIPeriod = 28; input double RRA_EURUSD_OverboughtLevel = 60; input double RRA_EURUSD_OversoldLevel = 8; input int RRA_EURUSD_TakeProfitPips = 175; input int RRA_EURUSD_StopLossPips = 5; -input double RRA_EURUSD_MaxLotSize = 0.15; +input double RRA_EURUSD_MaxLotSize = 0.1; input int RRA_EURUSD_MaxSpread = 1000; input int RRA_EURUSD_MaxDuration = 270; input bool RRA_EURUSD_UseStopLoss = false; @@ -316,13 +310,13 @@ input int RRA_EURUSD_MagicNumber = 30001; input int RRA_EURUSD_Slippage = 3; input group "=== RSI Reversal Asian AUDUSD ===" -input string RRA_AUDUSD_Symbol = "AUDUSD.c"; +input string RRA_AUDUSD_Symbol = "AUDUSD"; input int RRA_AUDUSD_RSIPeriod = 28; input double RRA_AUDUSD_OverboughtLevel = 68; input double RRA_AUDUSD_OversoldLevel = 30; input int RRA_AUDUSD_TakeProfitPips = 175; input int RRA_AUDUSD_StopLossPips = 5; -input double RRA_AUDUSD_MaxLotSize = 0.3; +input double RRA_AUDUSD_MaxLotSize = 0.2; input int RRA_AUDUSD_MaxSpread = 1000; input int RRA_AUDUSD_MaxDuration = 340; input bool RRA_AUDUSD_UseStopLoss = false; @@ -334,6 +328,63 @@ input ENUM_TIMEFRAMES RRA_AUDUSD_TimeFrame = PERIOD_M15; input int RRA_AUDUSD_MagicNumber = 30002; input int RRA_AUDUSD_Slippage = 3; +input group "=== SuperEMA (EMA + CCI + MACD) ===" +input string SE_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES SE_Timeframe = PERIOD_M15; +input double SE_LotSize = 0.01; +input int SE_SlippagePoints = 55; +input int SE_MagicNumber = 940001; +input int SE_EmaFast = 40; +input int SE_EmaMid = 180; +input int SE_EmaSlow = 125; +input int SE_EmaTrendBars = 3; +input int SE_CciPeriod = 17; +input double SE_CciOverbought = 80.0; +input double SE_CciOversold = -140.0; +input int SE_PullbackCciLookback = 20; +input int SE_MacdFast = 14; +input int SE_MacdSlow = 38; +input int SE_MacdSignal = 9; +input ENUM_SE_ENTRY_STYLE SE_EntryStyle = SE_ENTRY_LAMBERT; +input bool SE_OneTradeOnly = true; +input bool SE_UseStructuralSL = false; +input double SE_SlBufferPoints = 110; +input bool SE_ExitOnTrendFlip = false; +input bool SE_ExitOnMacdFlip = false; +input bool SE_ExitOnCciZeroCross = true; +input int SE_MaxHoldingBars = 168; +input bool SE_ExitBelowMidEma = false; +input bool SE_DebugLogs = false; + +input group "=== RSI Consolidation (ranging / mean-reversion) ===" +input string RCO_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RCO_SignalTF = PERIOD_M15; +input bool RCO_EntryOnNewBarOnly = true; +input int RCO_ADX_Period = 23; +input double RCO_ADX_Max = 29.0; +input bool RCO_UseATRRatioFilter = true; +input int RCO_ATR_Period = 8; +input int RCO_ATR_SMA_Period = 35; +input double RCO_ATR_Ratio_Max = 1.36; +input bool RCO_UseFlatEMAFilter = true; +input int RCO_EMA_Fast = 13; +input int RCO_EMA_Slow = 17; +input double RCO_EMA_Separation_MaxPct = 0.26; +input int RCO_RSI_Period = 8; +input ENUM_APPLIED_PRICE RCO_RSI_Price = PRICE_OPEN; +input double RCO_RSI_Oversold = 22.0; +input double RCO_RSI_Overbought = 63.0; +input bool RCO_UseRSI_MeanExit = true; +input double RCO_RSI_Exit_Long = 48.0; +input double RCO_RSI_Exit_Short = 52.0; +input double RCO_SL_ATR_Mult = 2.15; +input double RCO_TP_ATR_Mult = 2.40; +input int RCO_MaxBarsInTrade = 54; +input double RCO_Lots = 0.10; +input ulong RCO_MagicNumber = 20250420; +input int RCO_Slippage = 10; +input int RCO_MaxSpreadPoints = 28; + //+------------------------------------------------------------------+ //| Global Variables - DarvasBox | //+------------------------------------------------------------------+ @@ -430,6 +481,8 @@ RSIScalpingData rsBTCUSDData; RSIScalpingData rsNVDAData; RSIScalpingData rsTSLAData; RSIScalpingData rsXAUUSDData; +SuperEMAData seData; +RSIConsolidationData rcoData; //+------------------------------------------------------------------+ //| Global Variables - RSI Reversal Asian | @@ -437,107 +490,6 @@ RSIScalpingData rsXAUUSDData; RSIReversalAsianData rraEURUSDData; RSIReversalAsianData rraAUDUSDData; -//+------------------------------------------------------------------+ -//| Dynamic lot helpers | -//+------------------------------------------------------------------+ -double DynClamp(const double v, const double lo, const double hi) -{ - return MathMax(lo, MathMin(hi, v)); -} - -// Clamp scale factor (proportion or pow result). max<=0 = no upper clamp. -double ApplyDynamicScaleClamp(const double scaleRaw) -{ - double s = scaleRaw; - if(InpDynamicMinMult > 0.0) - s = MathMax(s, InpDynamicMinMult); - if(InpDynamicMaxMult > 0.0) - s = MathMin(s, InpDynamicMaxMult); - return s; -} - -// Reference for (equity/ref)^exp: manual deposit, or first-seen balance when input <= 0 -double GetDynamicRefForRatio() -{ - if(InpDynamicRefDeposit > 0.0) - return MathMax(InpDynamicRefDeposit, 1.0); - double capNow = InpDynamicUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - if(g_DynamicRefBaseline <= 0.0) - g_DynamicRefBaseline = MathMax(capNow, 1.0); - return MathMax(g_DynamicRefBaseline, 1.0); -} - -// Broker hard cap: 最大量 = SYMBOL_VOLUME_MAX (e.g. 1000 on EURUSD.c / XAUUSD.c) -double NormalizeVolumeForSymbol(const string symbol, double lots) -{ - double minL = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); - double maxL = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); - double step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); - if(step > 0.0) - lots = MathFloor(lots / step + 1e-12) * step; - if(lots < minL) lots = minL; - if(lots > maxL) lots = maxL; - return lots; -} - -// Apply EA risk cap before broker min/step/max (InpMaxLotsPerOrder 0 = disabled) -double NormalizeVolumeForSymbolWithEACap(const string symbol, double lots) -{ - if(InpMaxLotsPerOrder > 0.0) - lots = MathMin(lots, InpMaxLotsPerOrder); - return NormalizeVolumeForSymbol(symbol, lots); -} - -// Scale factor for lots: baseLot * scale * InpLotSizeScale (then caps) -double GetDynamicLotScaleFactor() -{ - if(!InpDynamicLotEnable) - return 1.0; - if(InpDynamicRefEqualsEquity) - return ApplyDynamicScaleClamp(1.0); - double cap = InpDynamicUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - double refv = GetDynamicRefForRatio(); - if(cap <= 0.0) - cap = refv; - double ratio = cap / refv; - if(ratio <= 0.0) - ratio = 1.0; - double scaleRaw = ratio; - if(InpDynamicLotCurve == LOT_CURVE_POWER) - scaleRaw = MathPow(ratio, InpDynamicExponent); - return ApplyDynamicScaleClamp(scaleRaw); -} - -// baseLot = size at reference deposit; optionalCap 0 = no extra ceiling (broker min/max still apply) -double DynamicLotForSymbol(const string symbol, const double baseLot, const double optionalCap = 0.0) -{ - double scale = GetDynamicLotScaleFactor(); - g_DynLotScaleLast = scale; - double sc = (InpLotSizeScale > 0.0 ? InpLotSizeScale : 1.0); - double v = baseLot * scale * sc; - if(optionalCap > 0.0 && v > optionalCap) - v = optionalCap; - return NormalizeVolumeForSymbolWithEACap(symbol, v); -} - -void RefreshDynamicStrategyLots() -{ - double sc = (InpLotSizeScale > 0.0 ? InpLotSizeScale : 1.0); - if(!InpDynamicLotEnable) - { - g_ES_LotSize = NormalizeVolumeForSymbolWithEACap(ES_Symbol, ES_LotGröße * sc); - g_RC_LotSize = NormalizeVolumeForSymbolWithEACap(RC_Symbol, RC_lotSize * sc); - g_RM_LotSize = NormalizeVolumeForSymbolWithEACap(RM_Symbol, RM_InpLotSize * sc); - g_DB_LotSize = NormalizeVolumeForSymbolWithEACap(DB_Symbol, DB_BaseLotSize * sc); - g_DynLotScaleLast = 1.0; - return; - } - g_ES_LotSize = DynamicLotForSymbol(ES_Symbol, ES_LotGröße); - g_RC_LotSize = DynamicLotForSymbol(RC_Symbol, RC_lotSize); - g_RM_LotSize = DynamicLotForSymbol(RM_Symbol, RM_InpLotSize); - g_DB_LotSize = DynamicLotForSymbol(DB_Symbol, DB_BaseLotSize); -} - //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ @@ -545,17 +497,10 @@ int OnInit() { int initResult = INIT_SUCCEEDED; - g_DynamicRefBaseline = 0.0; - - RefreshDynamicStrategyLots(); - - string acctCur = AccountInfoString(ACCOUNT_CURRENCY); - double eq0 = AccountInfoDouble(ACCOUNT_EQUITY); - if(InpDynamicLotEnable && !InpDynamicRefEqualsEquity && InpDynamicRefDeposit > 1000.0 && eq0 > 0.0 - && eq0 <= InpDynamicRefDeposit / 25.0) - Print("United EA: equity ", DoubleToString(eq0, 2), " ", acctCur, " vs ref ", InpDynamicRefDeposit, - " — dynamic mult is tiny; set InpDynamicRefDeposit to your balance in ", acctCur, - " (e.g. 500 for USD) or enable InpDynamicRefEqualsEquity. Else lots stay at broker minimum."); + // Initialize global lot size variables + g_ES_LotSize = LOT_ES_EMASlopeDistance; + g_RC_LotSize = LOT_RC_RSICrossOver; + g_RM_LotSize = LOT_RM_RSIMidPointHijack; // Initialize strategies - log warnings but don't fail entire EA if symbol unavailable if(EnableDarvasBox) @@ -589,11 +534,30 @@ int OnInit() if(EnableRSIScalpingXAUUSD) InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); + + if(EnableSuperEMA) + if(!InitSuperEMA(seData, SE_Symbol, SE_Timeframe, SE_SlippagePoints, SE_MagicNumber, + SE_EmaFast, SE_EmaMid, SE_EmaSlow, SE_EmaTrendBars, + SE_CciPeriod, SE_CciOverbought, SE_CciOversold, SE_PullbackCciLookback, + SE_MacdFast, SE_MacdSlow, SE_MacdSignal, + SE_EntryStyle, SE_OneTradeOnly, SE_UseStructuralSL, SE_SlBufferPoints, + SE_ExitOnTrendFlip, SE_ExitOnMacdFlip, SE_ExitOnCciZeroCross, + SE_MaxHoldingBars, SE_ExitBelowMidEma, SE_DebugLogs)) + Print("Warning: SuperEMA failed to initialize for symbol '", SE_Symbol, "'"); + + if(EnableRSIConsolidation) + if(!InitRSIConsolidation(rcoData, RCO_Symbol, RCO_SignalTF, RCO_EntryOnNewBarOnly, + RCO_ADX_Period, RCO_ADX_Max, RCO_UseATRRatioFilter, RCO_ATR_Period, RCO_ATR_SMA_Period, RCO_ATR_Ratio_Max, + RCO_UseFlatEMAFilter, RCO_EMA_Fast, RCO_EMA_Slow, RCO_EMA_Separation_MaxPct, + RCO_RSI_Period, RCO_RSI_Price, RCO_RSI_Oversold, RCO_RSI_Overbought, + RCO_UseRSI_MeanExit, RCO_RSI_Exit_Long, RCO_RSI_Exit_Short, RCO_SL_ATR_Mult, RCO_TP_ATR_Mult, + RCO_MaxBarsInTrade, RCO_MagicNumber, RCO_Slippage, RCO_MaxSpreadPoints)) + Print("Warning: RSIConsolidation failed to initialize for symbol '", RCO_Symbol, "'"); // Initialize RSI Reversal Asian strategies if(EnableRSIReversalAsianEURUSD) if(!InitRSIReversalAsian(rraEURUSDData, RRA_EURUSD_Symbol, RRA_EURUSD_RSIPeriod, RRA_EURUSD_OverboughtLevel, RRA_EURUSD_OversoldLevel, - RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, RRA_EURUSD_MaxLotSize, + RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, LOT_RRA_EURUSD, RRA_EURUSD_MaxSpread, RRA_EURUSD_MaxDuration, RRA_EURUSD_UseStopLoss, RRA_EURUSD_UseTakeProfit, RRA_EURUSD_UseRSIExit, RRA_EURUSD_RSIExitLevel, RRA_EURUSD_CloseOutsideSession, RRA_EURUSD_TimeFrame, RRA_EURUSD_MagicNumber, RRA_EURUSD_Slippage)) @@ -601,24 +565,12 @@ int OnInit() if(EnableRSIReversalAsianAUDUSD) if(!InitRSIReversalAsian(rraAUDUSDData, RRA_AUDUSD_Symbol, RRA_AUDUSD_RSIPeriod, RRA_AUDUSD_OverboughtLevel, RRA_AUDUSD_OversoldLevel, - RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, RRA_AUDUSD_MaxLotSize, + RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, LOT_RRA_AUDUSD, RRA_AUDUSD_MaxSpread, RRA_AUDUSD_MaxDuration, RRA_AUDUSD_UseStopLoss, RRA_AUDUSD_UseTakeProfit, RRA_AUDUSD_UseRSIExit, RRA_AUDUSD_RSIExitLevel, RRA_AUDUSD_CloseOutsideSession, RRA_AUDUSD_TimeFrame, RRA_AUDUSD_MagicNumber, RRA_AUDUSD_Slippage)) Print("Warning: RSIReversalAsianAUDUSD strategy failed to initialize for symbol '", RRA_AUDUSD_Symbol, "'"); - double refEffInit = GetDynamicRefForRatio(); - double capInit = InpDynamicUseEquity ? eq0 : AccountInfoDouble(ACCOUNT_BALANCE); - if(capInit <= 0.0) - capInit = refEffInit; - double ratioInit = capInit / refEffInit; - double powInit = MathPow(ratioInit, InpDynamicExponent); - string curveStr = (InpDynamicLotCurve == LOT_CURVE_POWER ? "POWER" : "PROP"); - Print("United EA v1.10 ", acctCur, " curve=", curveStr, " equity=", DoubleToString(eq0, 2), " refEff=", DoubleToString(refEffInit, 2), - " (inpRef=", InpDynamicRefDeposit, " baseline=", DoubleToString(g_DynamicRefBaseline, 2), ") equity/ref=", DoubleToString(ratioInit, 6), - " pow^exp=", DoubleToString(powInit, 6), " scaleOut=", DoubleToString(g_DynLotScaleLast, 6), - " minS=", InpDynamicMinMult, " maxS=", InpDynamicMaxMult, " lotScale=", InpLotSizeScale, " maxLots=", InpMaxLotsPerOrder, - " lots ES=", g_ES_LotSize, " RC=", g_RC_LotSize, " RM=", g_RM_LotSize, " DB=", g_DB_LotSize); Print("United EA initialized. Active strategies: ", (EnableDarvasBox ? "DarvasBox " : ""), (EnableEMASlopeDistance ? "EMASlope " : ""), @@ -629,6 +581,8 @@ int OnInit() (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : ""), + (EnableSuperEMA ? "SuperEMA " : ""), + (EnableRSIConsolidation ? "RSIConsolidation " : ""), (EnableRSIReversalAsianEURUSD ? "RSIReversalAsianEURUSD " : ""), (EnableRSIReversalAsianAUDUSD ? "RSIReversalAsianAUDUSD " : "")); @@ -666,6 +620,12 @@ void OnDeinit(const int reason) if(EnableRSIScalpingXAUUSD) DeinitRSIScalping(rsXAUUSDData); + + if(EnableSuperEMA) + DeinitSuperEMA(seData); + + if(EnableRSIConsolidation) + DeinitRSIConsolidation(rcoData); if(EnableRSIReversalAsianEURUSD) DeinitRSIReversalAsian(rraEURUSDData); @@ -681,8 +641,6 @@ void OnDeinit(const int reason) //+------------------------------------------------------------------+ void OnTick() { - RefreshDynamicStrategyLots(); - if(EnableDarvasBox) ProcessDarvasBox(DB_Symbol); @@ -698,39 +656,49 @@ void OnTick() if(EnableRSIScalpingAPPL) ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, - RS_APPL_BarsToWait, - DynamicLotForSymbol(RS_APPL_Symbol, RS_APPL_LotSize, InpDynamicStockLotCap), - RS_APPL_MagicNumber); + RS_APPL_BarsToWait, LOT_RS_APPL, RS_APPL_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); if(EnableRSIScalpingBTCUSD) ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, - RS_BTCUSD_BarsToWait, DynamicLotForSymbol(RS_BTCUSD_Symbol, RS_BTCUSD_LotSize), RS_BTCUSD_MagicNumber); + RS_BTCUSD_BarsToWait, LOT_RS_BTCUSD, RS_BTCUSD_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); if(EnableRSIScalpingNVDA) ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, - RS_NVDA_BarsToWait, - DynamicLotForSymbol(RS_NVDA_Symbol, RS_NVDA_LotSize, InpDynamicStockLotCap), - RS_NVDA_MagicNumber); + RS_NVDA_BarsToWait, LOT_RS_NVDA, RS_NVDA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); if(EnableRSIScalpingTSLA) ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, - RS_TSLA_BarsToWait, - DynamicLotForSymbol(RS_TSLA_Symbol, RS_TSLA_LotSize, InpDynamicStockLotCap), - RS_TSLA_MagicNumber); + RS_TSLA_BarsToWait, LOT_RS_TSLA, RS_TSLA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); if(EnableRSIScalpingXAUUSD) ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, - RS_XAUUSD_BarsToWait, DynamicLotForSymbol(RS_XAUUSD_Symbol, RS_XAUUSD_LotSize), RS_XAUUSD_MagicNumber); + RS_XAUUSD_BarsToWait, LOT_RS_XAUUSD, RS_XAUUSD_MagicNumber, + RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); if(EnableRSIReversalAsianEURUSD) - ProcessRSIReversalAsian(rraEURUSDData, DynamicLotForSymbol(RRA_EURUSD_Symbol, RRA_EURUSD_MaxLotSize)); + ProcessRSIReversalAsian(rraEURUSDData, LOT_RRA_EURUSD); if(EnableRSIReversalAsianAUDUSD) - ProcessRSIReversalAsian(rraAUDUSDData, DynamicLotForSymbol(RRA_AUDUSD_Symbol, RRA_AUDUSD_MaxLotSize)); + ProcessRSIReversalAsian(rraAUDUSDData, LOT_RRA_AUDUSD); + + if(EnableSuperEMA) + ProcessSuperEMA(seData, LOT_SE_SuperEMA); + + if(EnableRSIConsolidation) + ProcessRSIConsolidation(rcoData, LOT_RCO_RSIConsolidation); } //+------------------------------------------------------------------+ diff --git a/frontline/MQL5/_united/report.png b/frontline/cluster-0/_united-V2/report.png similarity index 100% rename from frontline/MQL5/_united/report.png rename to frontline/cluster-0/_united-V2/report.png diff --git a/frontline/MQL5/_united/self-evaluate.mq5 b/frontline/cluster-0/_united-V2/self-evaluate.mq5 similarity index 100% rename from frontline/MQL5/_united/self-evaluate.mq5 rename to frontline/cluster-0/_united-V2/self-evaluate.mq5 diff --git a/frontline/MQL5/_united_dynamic/MagicNumberHelpers.mqh b/frontline/united_template/_united-V2/MagicNumberHelpers.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic/MagicNumberHelpers.mqh rename to frontline/united_template/_united-V2/MagicNumberHelpers.mqh diff --git a/frontline/MQL5/_united_dynamic_cent/PerformanceEvaluator.mqh b/frontline/united_template/_united-V2/PerformanceEvaluator.mqh similarity index 99% rename from frontline/MQL5/_united_dynamic_cent/PerformanceEvaluator.mqh rename to frontline/united_template/_united-V2/PerformanceEvaluator.mqh index 1389540..991f603 100644 --- a/frontline/MQL5/_united_dynamic_cent/PerformanceEvaluator.mqh +++ b/frontline/united_template/_united-V2/PerformanceEvaluator.mqh @@ -104,7 +104,7 @@ bool IsStockSymbol(string symbol) // String-based checks (.US, NASDAQ:, NYSE:, common tickers) are sufficient // Common stock tickers (without .US suffix) - string commonStocks[] = {"AAPL", "NVDA", "TSLA", "GOOGL", "AMZN", "META", "AMD", "NFLX"}; + string commonStocks[] = {"AAPL", "MSFT", "NVDA", "TSLA", "GOOGL", "AMZN", "META", "NFLX"}; for(int i = 0; i < ArraySize(commonStocks); i++) { if(StringFind(symbol, commonStocks[i]) == 0) return true; diff --git a/frontline/MQL5/_united_dynamic/STRATEGY_CONFIGURATION.md b/frontline/united_template/_united-V2/STRATEGY_CONFIGURATION.md similarity index 100% rename from frontline/MQL5/_united_dynamic/STRATEGY_CONFIGURATION.md rename to frontline/united_template/_united-V2/STRATEGY_CONFIGURATION.md diff --git a/frontline/MQL5/_united_dynamic/Strategies/DarvasBoxStrategy.mqh b/frontline/united_template/_united-V2/Strategies/DarvasBoxStrategy.mqh similarity index 98% rename from frontline/MQL5/_united_dynamic/Strategies/DarvasBoxStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/DarvasBoxStrategy.mqh index ff1d13b..6c2d7d5 100644 --- a/frontline/MQL5/_united_dynamic/Strategies/DarvasBoxStrategy.mqh +++ b/frontline/united_template/_united-V2/Strategies/DarvasBoxStrategy.mqh @@ -195,9 +195,9 @@ bool PlaceOrder(ENUM_ORDER_TYPE orderType, double price, double sl, double tp) // Use market price (0) instead of explicit price - this ensures market order execution // In backtesting, explicit price might fail if price has moved if(orderType == ORDER_TYPE_BUY) - result = dbData.trade.Buy(g_DB_LotSize, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); + result = dbData.trade.Buy(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); else - result = dbData.trade.Sell(g_DB_LotSize, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); + result = dbData.trade.Sell(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); // Always log errors, success only if logging enabled if(result) diff --git a/frontline/MQL5/_united_dynamic/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/united_template/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic/Strategies/EMASlopeDistanceStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/EMASlopeDistanceStrategy.mqh diff --git a/frontline/united_template/_united-V2/Strategies/RSIConsolidationStrategy.mqh b/frontline/united_template/_united-V2/Strategies/RSIConsolidationStrategy.mqh new file mode 100644 index 0000000..c996950 --- /dev/null +++ b/frontline/united_template/_united-V2/Strategies/RSIConsolidationStrategy.mqh @@ -0,0 +1,387 @@ +//+------------------------------------------------------------------+ +//| RSIConsolidationStrategy.mqh | +//| Ported from cluster-0/RSIConsolidation/RSIConsolidation.mq5 | +//+------------------------------------------------------------------+ +#ifndef RSI_CONSOLIDATION_STRATEGY_MQH +#define RSI_CONSOLIDATION_STRATEGY_MQH + +struct RSIConsolidationData +{ + string symbol; + bool isInitialized; + CTrade trade; + ENUM_TIMEFRAMES signalTF; + bool entryOnNewBarOnly; + int adxPeriod; + double adxMax; + bool useATRRatioFilter; + int atrPeriod; + int atrSmaPeriod; + double atrRatioMax; + bool useFlatEMAFilter; + int emaFast; + int emaSlow; + double emaSeparationMaxPct; + int rsiPeriod; + ENUM_APPLIED_PRICE rsiPrice; + double rsiOversold; + double rsiOverbought; + bool useRSIMeanExit; + double rsiExitLong; + double rsiExitShort; + double slAtrMult; + double tpAtrMult; + int maxBarsInTrade; + ulong magic; + int slippage; + int maxSpreadPoints; + int h_rsi; + int h_adx; + int h_atr; + int h_ema_fast; + int h_ema_slow; + datetime lastBar; +}; + +bool RCO_Copy1(const int handle, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, 0, 1, b) < 1) + return false; + v = b[0]; + return true; +} + +bool RCO_RsiBuffers(RSIConsolidationData &d, double &cur, double &prev, double &twoAgo) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(d.h_rsi, 0, 0, 3, b) < 3) + return false; + cur = b[0]; + prev = b[1]; + twoAgo = b[2]; + return true; +} + +double RCO_NormalizeVolume(const string sym, double vol) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + vol = MathFloor(vol / step) * step; + if(vol < minLot) + vol = minLot; + if(vol > maxLot) + vol = maxLot; + return vol; +} + +int RCO_CurrentSpreadPoints(const string sym) +{ + long spread = 0; + if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) + return 999999; + return (int)spread; +} + +double RCO_MinStopsDistancePrice(const string sym) +{ + long lvl = 0; + if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) + return 0; + double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + if(pt <= 0) + return 0; + return (double)lvl * pt; +} + +bool RCO_RegimeIsConsolidation(RSIConsolidationData &d) +{ + double adx = 0; + if(!RCO_Copy1(d.h_adx, adx)) + return false; + if(adx >= d.adxMax) + return false; + + if(d.useATRRatioFilter) + { + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, d.atrSmaPeriod + 1, atrArr) < d.atrSmaPeriod + 1) + return false; + double sum = 0; + for(int i = 1; i <= d.atrSmaPeriod; i++) + sum += atrArr[i]; + double smaAtr = sum / (double)d.atrSmaPeriod; + if(smaAtr <= 0.0) + return false; + double ratio = atrArr[0] / smaAtr; + if(ratio > d.atrRatioMax) + return false; + } + + if(d.useFlatEMAFilter) + { + double ef[], es[]; + ArraySetAsSeries(ef, true); + ArraySetAsSeries(es, true); + if(CopyBuffer(d.h_ema_fast, 0, 0, 1, ef) < 1) + return false; + if(CopyBuffer(d.h_ema_slow, 0, 0, 1, es) < 1) + return false; + double c = SymbolInfoDouble(d.symbol, SYMBOL_BID); + if(c <= 0) + return false; + double sep = MathAbs(ef[0] - es[0]) / c * 100.0; + if(sep > d.emaSeparationMaxPct) + return false; + } + + return true; +} + +bool RCO_EntryBuyCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo <= d.rsiOversold && prev > d.rsiOversold); +} + +bool RCO_EntrySellCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo >= d.rsiOverbought && prev < d.rsiOverbought); +} + +void RCO_TryCloseByRSI(RSIConsolidationData &d, const ENUM_POSITION_TYPE typ, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + if(!d.useRSIMeanExit) + return; + if(typ == POSITION_TYPE_BUY && rsi >= d.rsiExitLong) + d.trade.PositionClose(tk); + else if(typ == POSITION_TYPE_SELL && rsi <= d.rsiExitShort) + d.trade.PositionClose(tk); +} + +void RCO_ManageOpenPosition(RSIConsolidationData &d, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openT = (datetime)PositionGetInteger(POSITION_TIME); + int barsAgo = iBarShift(d.symbol, d.signalTF, openT, false); + if(barsAgo >= 0 && barsAgo >= d.maxBarsInTrade) + { + d.trade.PositionClose(tk); + return; + } + RCO_TryCloseByRSI(d, typ, rsi); +} + +bool InitRSIConsolidation(RSIConsolidationData &d, + const string inpSymbol, + const ENUM_TIMEFRAMES signalTF, + const bool entryOnNewBarOnly, + const int adxPeriod, + const double adxMax, + const bool useATRRatioFilter, + const int atrPeriod, + const int atrSmaPeriod, + const double atrRatioMax, + const bool useFlatEMAFilter, + const int emaFast, + const int emaSlow, + const double emaSeparationMaxPct, + const int rsiPeriod, + const ENUM_APPLIED_PRICE rsiPrice, + const double rsiOversold, + const double rsiOverbought, + const bool useRSIMeanExit, + const double rsiExitLong, + const double rsiExitShort, + const double slAtrMult, + const double tpAtrMult, + const int maxBarsInTrade, + const ulong magic, + const int slippage, + const int maxSpreadPoints) +{ + d.isInitialized = false; + d.symbol = inpSymbol; + StringTrimLeft(d.symbol); + StringTrimRight(d.symbol); + if(StringLen(d.symbol) == 0) + d.symbol = _Symbol; + + d.signalTF = signalTF; + d.entryOnNewBarOnly = entryOnNewBarOnly; + d.adxPeriod = adxPeriod; + d.adxMax = adxMax; + d.useATRRatioFilter = useATRRatioFilter; + d.atrPeriod = atrPeriod; + d.atrSmaPeriod = atrSmaPeriod; + d.atrRatioMax = atrRatioMax; + d.useFlatEMAFilter = useFlatEMAFilter; + d.emaFast = emaFast; + d.emaSlow = emaSlow; + d.emaSeparationMaxPct = emaSeparationMaxPct; + d.rsiPeriod = rsiPeriod; + d.rsiPrice = rsiPrice; + d.rsiOversold = rsiOversold; + d.rsiOverbought = rsiOverbought; + d.useRSIMeanExit = useRSIMeanExit; + d.rsiExitLong = rsiExitLong; + d.rsiExitShort = rsiExitShort; + d.slAtrMult = slAtrMult; + d.tpAtrMult = tpAtrMult; + d.maxBarsInTrade = maxBarsInTrade; + d.magic = magic; + d.slippage = slippage; + d.maxSpreadPoints = maxSpreadPoints; + d.lastBar = 0; + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; + + if(!SymbolSelect(d.symbol, true)) + { + Print("RSIConsolidation: SymbolSelect failed: ", d.symbol); + return false; + } + + d.trade.SetExpertMagicNumber((long)d.magic); + d.trade.SetDeviationInPoints(d.slippage); + d.trade.SetTypeFillingBySymbol(d.symbol); + + d.h_rsi = iRSI(d.symbol, d.signalTF, d.rsiPeriod, d.rsiPrice); + d.h_adx = iADX(d.symbol, d.signalTF, d.adxPeriod); + d.h_atr = iATR(d.symbol, d.signalTF, d.atrPeriod); + d.h_ema_fast = iMA(d.symbol, d.signalTF, d.emaFast, 0, MODE_EMA, PRICE_CLOSE); + d.h_ema_slow = iMA(d.symbol, d.signalTF, d.emaSlow, 0, MODE_EMA, PRICE_CLOSE); + + if(d.h_rsi == INVALID_HANDLE || d.h_adx == INVALID_HANDLE || d.h_atr == INVALID_HANDLE + || d.h_ema_fast == INVALID_HANDLE || d.h_ema_slow == INVALID_HANDLE) + { + Print("RSIConsolidation: indicator init failed"); + DeinitRSIConsolidation(d); + return false; + } + + d.isInitialized = true; + Print("RSIConsolidation: symbol=", d.symbol, " TF=", EnumToString(d.signalTF)); + return true; +} + +void DeinitRSIConsolidation(RSIConsolidationData &d) +{ + if(d.h_rsi != INVALID_HANDLE) + IndicatorRelease(d.h_rsi); + if(d.h_adx != INVALID_HANDLE) + IndicatorRelease(d.h_adx); + if(d.h_atr != INVALID_HANDLE) + IndicatorRelease(d.h_atr); + if(d.h_ema_fast != INVALID_HANDLE) + IndicatorRelease(d.h_ema_fast); + if(d.h_ema_slow != INVALID_HANDLE) + IndicatorRelease(d.h_ema_slow); + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; +} + +bool RCO_EnoughHistory(RSIConsolidationData &d) +{ + int need = MathMax(d.rsiPeriod + 3, MathMax(d.adxPeriod + 2, d.atrSmaPeriod + 3)); + if(Bars(d.symbol, d.signalTF) < need) + return false; + return true; +} + +void ProcessRSIConsolidation(RSIConsolidationData &d, const double lots) +{ + if(!d.isInitialized) + return; + + if(!RCO_EnoughHistory(d)) + return; + + if(d.maxSpreadPoints > 0 && RCO_CurrentSpreadPoints(d.symbol) > d.maxSpreadPoints) + return; + + double rsi, rsiPrev, rsi2; + if(!RCO_RsiBuffers(d, rsi, rsiPrev, rsi2)) + return; + + datetime barTime = iTime(d.symbol, d.signalTF, 0); + bool isNew = (barTime != d.lastBar); + + if(PositionExistsByMagic(d.symbol, d.magic)) + { + RCO_ManageOpenPosition(d, rsi); + if(isNew) + d.lastBar = barTime; + return; + } + + if(d.entryOnNewBarOnly && !isNew) + return; + + d.lastBar = barTime; + + if(!RCO_RegimeIsConsolidation(d)) + return; + + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, 1, atrArr) < 1) + return; + double atr = atrArr[0]; + int dig = (int)SymbolInfoInteger(d.symbol, SYMBOL_DIGITS); + + double slDist = atr * d.slAtrMult; + double tpDist = atr * d.tpAtrMult; + double minD = RCO_MinStopsDistancePrice(d.symbol); + if(slDist < minD) + slDist = minD; + if(tpDist < minD) + tpDist = minD; + + double vol = RCO_NormalizeVolume(d.symbol, lots); + + if(RCO_EntryBuyCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, true)) + return; + double ask = SymbolInfoDouble(d.symbol, SYMBOL_ASK); + double sl = ask - slDist; + double tp = ask + tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Buy(vol, d.symbol, ask, sl, tp, "RSIConsolidation BUY")) + Print("RSIConsolidation BUY failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } + else if(RCO_EntrySellCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, false)) + return; + double bid = SymbolInfoDouble(d.symbol, SYMBOL_BID); + double sl = bid + slDist; + double tp = bid - tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Sell(vol, d.symbol, bid, sl, tp, "RSIConsolidation SELL")) + Print("RSIConsolidation SELL failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } +} + +#endif // RSI_CONSOLIDATION_STRATEGY_MQH diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/united_template/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh similarity index 90% rename from frontline/MQL5/_united_dynamic_cent/Strategies/RSICrossOverReversalStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh index f182476..266292a 100644 --- a/frontline/MQL5/_united_dynamic_cent/Strategies/RSICrossOverReversalStrategy.mqh +++ b/frontline/united_template/_united-V2/Strategies/RSICrossOverReversalStrategy.mqh @@ -20,6 +20,23 @@ bool WeekDays_Check(datetime aTime) return(rcData.WeekDays[stm.day_of_week]); } +bool RC_HourInWindow(const int h, const int beginRaw, const int endRaw) +{ + const int b = beginRaw % 24; + const int e = endRaw % 24; + if(b == e) + return false; + if(b < e) + return (h >= b && h < e); + return (h >= b || h < e); +} + +bool RC_TradingHoursAllow(const int currentHour) +{ + return RC_HourInWindow(currentHour, RC_tradingHourOneBegin, RC_tradingHourOneEnd) + || RC_HourInWindow(currentHour, RC_tradingHourTwoBegin, RC_tradingHourTwoEnd); +} + int TimeHour(datetime when = 0) { if(when == 0) when = TimeCurrent(); @@ -151,8 +168,7 @@ void ProcessRSICrossOverReversal(string symbol) return; } - if(!((currentHour < RC_tradingHourOneEnd && currentHour > RC_tradingHourOneBegin) || - (currentHour < RC_tradingHourTwoEnd && currentHour > RC_tradingHourTwoBegin))) + if(!RC_TradingHoursAllow(currentHour)) { Close_Position_MN(RC_MagicNumber); return; @@ -173,7 +189,7 @@ void ProcessRSICrossOverReversal(string symbol) double previousEMA = ema[1]; double emaSlope = (currentEMA - previousEMA) * 100; - double closeCurr = iClose(Symbol(), Period(), 0); + const double closeCurr = iClose(rcData.symbol, RC_TimeFrame1, 0); double priceToEmaDistance = (closeCurr - currentEMA) * 10; bool isBuyPosition = false; @@ -211,10 +227,10 @@ void ProcessRSICrossOverReversal(string symbol) { Close_Position_MN(RC_MagicNumber); rcData.lastTradeTime = currentTime; - return; } - - if(currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && + + if(!isTrendStrong && + currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && !isSellPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); @@ -223,8 +239,9 @@ void ProcessRSICrossOverReversal(string symbol) rcData.lastTradeTime = currentTime; } } - - if(currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && + + if(!isTrendStrong && + currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && !isBuyPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); diff --git a/frontline/MQL5/_united_dynamic/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/united_template/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic/Strategies/RSIMidPointHijackStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/RSIMidPointHijackStrategy.mqh diff --git a/frontline/MQL5/_united_dynamic/Strategies/RSIReversalAsianStrategy.mqh b/frontline/united_template/_united-V2/Strategies/RSIReversalAsianStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic/Strategies/RSIReversalAsianStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/RSIReversalAsianStrategy.mqh diff --git a/frontline/MQL5/_united_dynamic/Strategies/RSIScalpingStrategy.mqh b/frontline/united_template/_united-V2/Strategies/RSIScalpingStrategy.mqh similarity index 78% rename from frontline/MQL5/_united_dynamic/Strategies/RSIScalpingStrategy.mqh rename to frontline/united_template/_united-V2/Strategies/RSIScalpingStrategy.mqh index 666dc1d..5daa1c1 100644 --- a/frontline/MQL5/_united_dynamic/Strategies/RSIScalpingStrategy.mqh +++ b/frontline/united_template/_united-V2/Strategies/RSIScalpingStrategy.mqh @@ -22,6 +22,104 @@ struct RSIScalpingData { int bars_against_count; }; +void ClosePosition(RSIScalpingData& data, int MagicNumber); + +double RS_ATRPriceOnTF(const string symbol, const ENUM_TIMEFRAMES tf, const int period) +{ + if(period < 1) + return 0.0; + MqlRates rates[]; + const int need = period + 2; + if(CopyRates(symbol, tf, 0, need, rates) < need) + return 0.0; + ArraySetAsSeries(rates, true); + double sum = 0.0; + for(int i = 1; i <= period; i++) + { + const double hl = rates[i].high - rates[i].low; + const double hc = MathAbs(rates[i].high - rates[i + 1].close); + const double lc = MathAbs(rates[i].low - rates[i + 1].close); + sum += MathMax(hl, MathMax(hc, lc)); + } + return sum / (double)period; +} + +int RS_CountReversalEscapeSigns(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, + const ENUM_POSITION_TYPE ptype, const double atr, + const double adverseAtrMult, const double rsiVelocity, + const double bodyAtrMult) +{ + if(atr <= 0.0) + return 0; + const double entry = PositionGetDouble(POSITION_PRICE_OPEN); + const double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); + const double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); + int signs = 0; + + if(ptype == POSITION_TYPE_BUY) + { + if(entry - bid >= adverseAtrMult * atr) + signs++; + if(data.rsi_prev - data.rsi_current >= rsiVelocity) + signs++; + } + else if(ptype == POSITION_TYPE_SELL) + { + if(ask - entry >= adverseAtrMult * atr) + signs++; + if(data.rsi_current - data.rsi_prev >= rsiVelocity) + signs++; + } + else + return 0; + + MqlRates r[]; + if(CopyRates(data.symbol, tf, 0, 4, r) >= 4) + { + ArraySetAsSeries(r, true); + const double body = MathAbs(r[1].close - r[1].open); + if(body >= bodyAtrMult * atr) + { + if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) + signs++; + else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) + signs++; + } + if(ptype == POSITION_TYPE_BUY) + { + if(r[1].close < r[2].close && r[2].close < r[3].close) + signs++; + } + else + { + if(r[1].close > r[2].close && r[2].close > r[3].close) + signs++; + } + } + return signs; +} + +void RS_TryReversalEscape(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, const int MagicNumber, + const int atrPeriod, const double adverseAtrMult, const int signsRequired, + const double rsiVelocity, const double bodyAtrMult) +{ + if(!PositionSelectByMagic(data.symbol, (ulong)MagicNumber)) + return; + + const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + const double atr = RS_ATRPriceOnTF(data.symbol, tf, atrPeriod); + if(atr <= 0.0) + return; + + const int n = RS_CountReversalEscapeSigns(data, tf, ptype, atr, adverseAtrMult, rsiVelocity, bodyAtrMult); + if(n < signsRequired) + return; + + ClosePosition(data, MagicNumber); + Print("RSIScalping: reversal escape symbol=", data.symbol, " signs=", n, " need=", signsRequired, + " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(data.symbol, SYMBOL_DIGITS))); +} + string ErrorDescription(int errorCode) { switch(errorCode) @@ -420,7 +518,9 @@ void ClosePosition(RSIScalpingData& data, int MagicNumber) void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, ENUM_APPLIED_PRICE RSI_Applied_Price, double RSI_Overbought, double RSI_Oversold, double RSI_Target_Buy, double RSI_Target_Sell, - int BarsToWait, double LotSize, int MagicNumber) + int BarsToWait, double LotSize, int MagicNumber, + bool UseReversalEscape, int ReversalATRPeriod, double ReversalAdverseAtrMult, + int ReversalSignsRequired, double ReversalRsiVelocity, double ReversalBodyAtrMult) { // Skip if not initialized (symbol not available) if(!data.isInitialized) @@ -429,16 +529,25 @@ void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES Ti data.symbol = symbol; // Update symbol in case it changed if(Bars(data.symbol, TimeFrame) < RSI_Period + 2) return; - - datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); - if(current_bar_time == data.last_bar_time) + + const datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); + const bool new_bar = (current_bar_time != data.last_bar_time); + const bool in_pos = data.position_open || PositionExistsByMagic(data.symbol, MagicNumber); + if(!in_pos && !new_bar) return; - - data.last_bar_time = current_bar_time; - + if(!UpdateRSI(data)) return; - + + if(in_pos && UseReversalEscape) + RS_TryReversalEscape(data, TimeFrame, MagicNumber, ReversalATRPeriod, ReversalAdverseAtrMult, + ReversalSignsRequired, ReversalRsiVelocity, ReversalBodyAtrMult); + + if(!new_bar) + return; + + data.last_bar_time = current_bar_time; + CheckExistingPosition(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, RSI_Target_Buy, RSI_Target_Sell, BarsToWait); diff --git a/frontline/united_template/_united-V2/Strategies/SuperEMAStrategy.mqh b/frontline/united_template/_united-V2/Strategies/SuperEMAStrategy.mqh new file mode 100644 index 0000000..3dba90e --- /dev/null +++ b/frontline/united_template/_united-V2/Strategies/SuperEMAStrategy.mqh @@ -0,0 +1,495 @@ +//+------------------------------------------------------------------+ +//| SuperEMAStrategy.mqh — EMA + CCI + MACD (United EA module) | +//+------------------------------------------------------------------+ +#ifndef SUPER_EMA_STRATEGY_MQH +#define SUPER_EMA_STRATEGY_MQH + +#include + +enum ENUM_SE_ENTRY_STYLE +{ + SE_ENTRY_CCIZERO_MACD = 0, + SE_ENTRY_LAMBERT = 1, + SE_ENTRY_PULLBACK = 2 +}; + +struct SuperEMAData +{ + string symbol; + ENUM_TIMEFRAMES tf; + datetime lastBarTime; + CTrade trade; + bool isInitialized; + int slippagePoints; + int magic; + int emaFast; + int emaMid; + int emaSlow; + int emaTrendBars; + int cciPeriod; + double cciOverbought; + double cciOversold; + int pullbackCciLookback; + int macdFast; + int macdSlow; + int macdSignal; + ENUM_SE_ENTRY_STYLE entryStyle; + bool oneTradeOnly; + bool useStructuralSL; + double slBufferPoints; + bool exitOnTrendFlip; + bool exitOnMacdFlip; + bool exitOnCciZeroCross; + int maxHoldingBars; + bool exitBelowMidEma; + bool debugLogs; +}; + +void SuperEMA_Log(SuperEMAData &d, const string s) +{ + if(d.debugLogs) + Print("[SuperEMA] ", s); +} + +bool SuperEMA_IsNewBar(SuperEMAData &d) +{ + datetime t = iTime(d.symbol, d.tf, 0); + if(t <= 0 || t == d.lastBarTime) + return false; + d.lastBarTime = t; + return true; +} + +double SuperEMA_EmaAt(SuperEMAData &d, const int period, const int shift) +{ + int h = iMA(d.symbol, d.tf, period, 0, MODE_EMA, PRICE_CLOSE); + if(h == INVALID_HANDLE) + return 0.0; + double b[1]; + if(CopyBuffer(h, 0, shift, 1, b) <= 0) + { + IndicatorRelease(h); + return 0.0; + } + IndicatorRelease(h); + return b[0]; +} + +double SuperEMA_CciAt(SuperEMAData &d, const int shift) +{ + int h = iCCI(d.symbol, d.tf, d.cciPeriod, PRICE_TYPICAL); + if(h == INVALID_HANDLE) + return 0.0; + double b[1]; + if(CopyBuffer(h, 0, shift, 1, b) <= 0) + { + IndicatorRelease(h); + return 0.0; + } + IndicatorRelease(h); + return b[0]; +} + +bool SuperEMA_MacdHistAt(SuperEMAData &d, const int shift, double &hist) +{ + int h = iMACD(d.symbol, d.tf, d.macdFast, d.macdSlow, d.macdSignal, PRICE_CLOSE); + if(h == INVALID_HANDLE) + return false; + double mainLine[1], sigLine[1]; + if(CopyBuffer(h, 0, shift, 1, mainLine) <= 0 || CopyBuffer(h, 1, shift, 1, sigLine) <= 0) + { + IndicatorRelease(h); + return false; + } + IndicatorRelease(h); + hist = mainLine[0] - sigLine[0]; + return true; +} + +bool SuperEMA_TrendUp(SuperEMAData &d, const int sh) +{ + double c = iClose(d.symbol, d.tf, sh); + double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); + return (emaS > 0.0 && c > emaS); +} + +bool SuperEMA_TrendDown(SuperEMAData &d, const int sh) +{ + double c = iClose(d.symbol, d.tf, sh); + double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); + return (emaS > 0.0 && c < emaS); +} + +bool SuperEMA_CciCrossAboveZero(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 <= 0.0 && c1 > 0.0); +} + +bool SuperEMA_CciCrossBelowZero(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 >= 0.0 && c1 < 0.0); +} + +bool SuperEMA_CciCrossAbove100(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 < d.cciOverbought && c1 > d.cciOverbought); +} + +bool SuperEMA_CciCrossBelowMinus100(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 > d.cciOversold && c1 < d.cciOversold); +} + +bool SuperEMA_HadCciOversoldRecently(SuperEMAData &d) +{ + for(int i = 2; i <= d.pullbackCciLookback + 1; i++) + { + double v = SuperEMA_CciAt(d, i); + if(v <= d.cciOversold) + return true; + } + return false; +} + +bool SuperEMA_HadCciOverboughtRecently(SuperEMAData &d) +{ + for(int i = 2; i <= d.pullbackCciLookback + 1; i++) + { + double v = SuperEMA_CciAt(d, i); + if(v >= d.cciOverbought) + return true; + } + return false; +} + +bool SuperEMA_PullbackNearFastEmaLong(SuperEMAData &d) +{ + double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); + double lo = iLow(d.symbol, d.tf, 1); + if(emaF <= 0.0) + return false; + return (lo <= emaF + d.slBufferPoints * _Point * 3.0); +} + +bool SuperEMA_PullbackNearFastEmaShort(SuperEMAData &d) +{ + double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); + double hi = iHigh(d.symbol, d.tf, 1); + if(emaF <= 0.0) + return false; + return (hi >= emaF - d.slBufferPoints * _Point * 3.0); +} + +int SuperEMA_PositionsByMagic(SuperEMAData &d) +{ + int n = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) + continue; + if(PositionGetString(POSITION_SYMBOL) == d.symbol && (int)PositionGetInteger(POSITION_MAGIC) == d.magic) + n++; + } + return n; +} + +void SuperEMA_ComputeSLTP(SuperEMAData &d, const bool isBuy, double &sl, double &tp) +{ + sl = 0.0; + tp = 0.0; + if(!d.useStructuralSL) + return; + double emaM = SuperEMA_EmaAt(d, d.emaMid, d.emaTrendBars); + double buf = d.slBufferPoints * _Point; + if(isBuy) + sl = emaM - buf; + else + sl = emaM + buf; +} + +int SuperEMA_BarsSinceOpen(SuperEMAData &d, const datetime openTime) +{ + if(openTime <= 0) + return 0; + int sh = iBarShift(d.symbol, d.tf, openTime, false); + if(sh < 0) + return 999999; + return sh; +} + +void SuperEMA_CloseTicket(SuperEMAData &d, const ulong ticket, const string reason) +{ +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif + d.trade.SetExpertMagicNumber(d.magic); + if(d.trade.PositionClose(ticket)) + SuperEMA_Log(d, "Close: " + reason); +} + +void SuperEMA_ManageExits(SuperEMAData &d) +{ +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong ticket = PositionGetTicket(i); + if(ticket == 0) + continue; + if(!PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != d.symbol) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != d.magic) + continue; + + ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + + double h1 = 0.0; + if(!SuperEMA_MacdHistAt(d, 1, h1)) + continue; + + bool closeLong = false; + bool closeShort = false; + string reason = ""; + + if(d.maxHoldingBars > 0) + { + int held = SuperEMA_BarsSinceOpen(d, openTime); + if(held >= d.maxHoldingBars) + { + if(ptype == POSITION_TYPE_BUY) + closeLong = true; + else + closeShort = true; + reason = "time stop (max bars)"; + } + } + + if(ptype == POSITION_TYPE_BUY) + { + if(d.exitOnTrendFlip && SuperEMA_TrendDown(d, d.emaTrendBars)) + { + closeLong = true; + reason = "trend flip (below slow EMA)"; + } + if(d.exitOnMacdFlip && h1 < 0.0) + { + closeLong = true; + reason = "MACD histogram < 0"; + } + if(d.exitOnCciZeroCross && SuperEMA_CciCrossBelowZero(d)) + { + closeLong = true; + reason = "CCI crossed below zero"; + } + if(d.exitBelowMidEma) + { + double c = iClose(d.symbol, d.tf, 1); + double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); + if(emaM > 0.0 && c < emaM) + { + closeLong = true; + reason = "close below mid EMA"; + } + } + if(closeLong) + SuperEMA_CloseTicket(d, ticket, reason); + } + else if(ptype == POSITION_TYPE_SELL) + { + if(d.exitOnTrendFlip && SuperEMA_TrendUp(d, d.emaTrendBars)) + { + closeShort = true; + reason = "trend flip (above slow EMA)"; + } + if(d.exitOnMacdFlip && h1 > 0.0) + { + closeShort = true; + reason = "MACD histogram > 0"; + } + if(d.exitOnCciZeroCross && SuperEMA_CciCrossAboveZero(d)) + { + closeShort = true; + reason = "CCI crossed above zero"; + } + if(d.exitBelowMidEma) + { + double c = iClose(d.symbol, d.tf, 1); + double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); + if(emaM > 0.0 && c > emaM) + { + closeShort = true; + reason = "close above mid EMA"; + } + } + if(closeShort) + SuperEMA_CloseTicket(d, ticket, reason); + } + } +} + +bool InitSuperEMA(SuperEMAData &d, + const string symbol, + const ENUM_TIMEFRAMES tf, + const int slippagePoints, + const int magic, + const int emaFast, + const int emaMid, + const int emaSlow, + const int emaTrendBars, + const int cciPeriod, + const double cciOverbought, + const double cciOversold, + const int pullbackCciLookback, + const int macdFast, + const int macdSlow, + const int macdSignal, + const ENUM_SE_ENTRY_STYLE entryStyle, + const bool oneTradeOnly, + const bool useStructuralSL, + const double slBufferPoints, + const bool exitOnTrendFlip, + const bool exitOnMacdFlip, + const bool exitOnCciZeroCross, + const int maxHoldingBars, + const bool exitBelowMidEma, + const bool debugLogs) +{ + d.symbol = symbol; + if(StringLen(d.symbol) == 0) + d.symbol = _Symbol; + d.tf = tf; + d.lastBarTime = 0; + d.isInitialized = false; + d.slippagePoints = slippagePoints; + d.magic = magic; + d.emaFast = emaFast; + d.emaMid = emaMid; + d.emaSlow = emaSlow; + d.emaTrendBars = emaTrendBars; + d.cciPeriod = cciPeriod; + d.cciOverbought = cciOverbought; + d.cciOversold = cciOversold; + d.pullbackCciLookback = pullbackCciLookback; + d.macdFast = macdFast; + d.macdSlow = macdSlow; + d.macdSignal = macdSignal; + d.entryStyle = entryStyle; + d.oneTradeOnly = oneTradeOnly; + d.useStructuralSL = useStructuralSL; + d.slBufferPoints = slBufferPoints; + d.exitOnTrendFlip = exitOnTrendFlip; + d.exitOnMacdFlip = exitOnMacdFlip; + d.exitOnCciZeroCross = exitOnCciZeroCross; + d.maxHoldingBars = maxHoldingBars; + d.exitBelowMidEma = exitBelowMidEma; + d.debugLogs = debugLogs; + + if(!SymbolSelect(d.symbol, true)) + { + Print("SuperEMA: symbol not available: ", d.symbol); + return false; + } + d.trade.SetExpertMagicNumber(d.magic); + d.trade.SetDeviationInPoints(d.slippagePoints); + d.isInitialized = true; + return true; +} + +void ProcessSuperEMA(SuperEMAData &d, const double lots) +{ + if(!d.isInitialized) + return; + + if(!SuperEMA_IsNewBar(d)) + return; + + SuperEMA_ManageExits(d); + + const int sh = d.emaTrendBars; + double h1 = 0.0, h2 = 0.0; + if(!SuperEMA_MacdHistAt(d, 1, h1) || !SuperEMA_MacdHistAt(d, 2, h2)) + return; + + bool up = SuperEMA_TrendUp(d, sh); + bool dn = SuperEMA_TrendDown(d, sh); + + bool wantBuy = false; + bool wantSell = false; + + switch(d.entryStyle) + { + case SE_ENTRY_CCIZERO_MACD: + if(up && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0) + wantBuy = true; + if(dn && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0) + wantSell = true; + break; + + case SE_ENTRY_LAMBERT: + if(up && SuperEMA_CciCrossAbove100(d) && h1 > 0.0) + wantBuy = true; + if(dn && SuperEMA_CciCrossBelowMinus100(d) && h1 < 0.0) + wantSell = true; + break; + + case SE_ENTRY_PULLBACK: + if(up && SuperEMA_HadCciOversoldRecently(d) && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0 && SuperEMA_PullbackNearFastEmaLong(d)) + wantBuy = true; + if(dn && SuperEMA_HadCciOverboughtRecently(d) && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0 && SuperEMA_PullbackNearFastEmaShort(d)) + wantSell = true; + break; + } + + if(d.oneTradeOnly && SuperEMA_PositionsByMagic(d) > 0) + { + if(wantBuy && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, true)) + wantBuy = false; + if(wantSell && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, false)) + wantSell = false; + if(!wantBuy && !wantSell) + return; + } + + MqlTick tick; + if(!SymbolInfoTick(d.symbol, tick)) + return; + + double sl = 0.0, tp = 0.0; + + if(wantBuy && !wantSell) + { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE + SuperEMA_ComputeSLTP(d, true, sl, tp); +#endif + if(d.trade.Buy(lots, d.symbol, tick.ask, sl, tp, "United SuperEMA long")) + SuperEMA_Log(d, StringFormat("BUY ask=%.5f sl=%.5f", tick.ask, sl)); + } + else if(wantSell && !wantBuy) + { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE + SuperEMA_ComputeSLTP(d, false, sl, tp); +#endif + if(d.trade.Sell(lots, d.symbol, tick.bid, sl, tp, "United SuperEMA short")) + SuperEMA_Log(d, StringFormat("SELL bid=%.5f sl=%.5f", tick.bid, sl)); + } +} + +void DeinitSuperEMA(SuperEMAData &d) +{ + d.isInitialized = false; +} + +#endif // SUPER_EMA_STRATEGY_MQH diff --git a/frontline/united_template/_united-V2/main.mq5 b/frontline/united_template/_united-V2/main.mq5 new file mode 100644 index 0000000..35e7106 --- /dev/null +++ b/frontline/united_template/_united-V2/main.mq5 @@ -0,0 +1,704 @@ +//+------------------------------------------------------------------+ +//| UnitedEA.mq5 | +//| Copyright 2025, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2025, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" +#property strict + +#include +#include +#include +#include +#include "MagicNumberHelpers.mqh" +// Include strategy implementations early so structs are available +#include "Strategies/DarvasBoxStrategy.mqh" +#include "Strategies/EMASlopeDistanceStrategy.mqh" +#include "Strategies/RSICrossOverReversalStrategy.mqh" +#include "Strategies/RSIMidPointHijackStrategy.mqh" +#include "Strategies/RSIScalpingStrategy.mqh" +#include "Strategies/SuperEMAStrategy.mqh" +#include "Strategies/RSIReversalAsianStrategy.mqh" +#include "Strategies/RSIConsolidationStrategy.mqh" + +//+------------------------------------------------------------------+ +//| Global Lot Size Variables (for dynamic lot sizing) | +//+------------------------------------------------------------------+ +double g_ES_LotSize; // EMA Slope Distance lot size +double g_RC_LotSize; // RSI CrossOver Reversal lot size +double g_RM_LotSize; // RSI MidPoint Hijack lot size + +bool United_MayOpenNewEntry(const string symbol, const ulong magic, const bool isBuy) +{ + if(PositionExistsByMagic(symbol, magic)) + return false; + return true; +} + +//+------------------------------------------------------------------+ +//| Strategy Enable/Disable Switches | +//+------------------------------------------------------------------+ +input group "=== Strategy Enable/Disable ===" +input bool EnableDarvasBox = true; +input bool EnableEMASlopeDistance = true; +input bool EnableRSICrossOverReversal = true; +input bool EnableRSIMidPointHijack = true; +input bool EnableRSIScalpingAPPL = true; +input bool EnableRSIScalpingBTCUSD = true; +input bool EnableRSIScalpingNVDA = true; +input bool EnableRSIScalpingTSLA = true; +input bool EnableRSIScalpingXAUUSD = true; +input bool EnableSuperEMA = true; +input bool EnableRSIConsolidation = true; +input bool EnableRSIReversalAsianEURUSD = true; +input bool EnableRSIReversalAsianAUDUSD = true; + +input group "=== Centralized Lot Size (Granular Per Robot) ===" +input double LOT_ES_EMASlopeDistance = 0.05; +input double LOT_RC_RSICrossOver = 0.1; +input double LOT_RM_RSIMidPointHijack = 0.01; +input double LOT_RS_APPL = 100.0; +input double LOT_RS_BTCUSD = 0.15; +input double LOT_RS_NVDA = 60.0; +input double LOT_RS_TSLA = 20.0; +input double LOT_RS_XAUUSD = 0.02; +input double LOT_RRA_EURUSD = 0.01; +input double LOT_RRA_AUDUSD = 0.10; +input double LOT_SE_SuperEMA = 0.01; +input double LOT_RCO_RSIConsolidation = 0.04; + +//+------------------------------------------------------------------+ +//| Strategy 1: DarvasBoxXAUUSD | +//+------------------------------------------------------------------+ +input group "=== DarvasBox Strategy ===" +input string DB_Symbol = "XAUUSD"; +input int DB_BoxPeriod = 165; +input double DB_BoxDeviation = 30000; // Increased to allow larger ranges (was 25140) +input int DB_VolumeThreshold = 0; // Set to 0 to disable volume threshold check. Volume data from indicator used instead. +input double DB_StopLoss = 1665; +input double DB_TakeProfit = 3685; +input bool DB_EnableLogging = false; +input color DB_BoxColor = clrBlue; +input int DB_BoxWidth = 1; +input ENUM_TIMEFRAMES DB_TrendTimeframe = PERIOD_H2; +input int DB_MA_Period = 125; +input ENUM_MA_METHOD DB_MA_Method = MODE_EMA; +input ENUM_APPLIED_PRICE DB_MA_Price = PRICE_WEIGHTED; +input double DB_TrendThreshold = 4.94; +input int DB_VolumeMA_Period = 110; +input double DB_VolumeThresholdMultiplier = 1.5; +input int DB_MagicNumber = 135790; + +//+------------------------------------------------------------------+ +//| Strategy 2: EMASlopeDistanceCocktailXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== EMA Slope Distance Strategy ===" +input string ES_Symbol = "XAUUSD"; +input int ES_EMA_Periode = 46; +input double ES_PreisSchwelle = 600.0; +input double ES_SteigungSchwelle = 80.0; +input int ES_ÜberwachungTimeout = 800; +input double ES_TrailingStop = 250.0; +input double ES_LotGröße = 0.03; +input int ES_MagicNumber = 12350; +input bool ES_UseSpreadAdjustment = true; +input ENUM_TIMEFRAMES ES_Timeframe = PERIOD_H1; +input bool ES_UseBarData = true; +input int ES_MaxTradesPerCrossover = 9; +input int ES_ProfitCheckBars = 18; +input bool ES_CloseUnprofitableTrades = true; + +//+------------------------------------------------------------------+ +//| Strategy 3: RSICrossOverReversalXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== RSI CrossOver Reversal Strategy ===" +input string RC_Symbol = "XAUUSD"; +input int RC_MagicNumber = 7; +input int RC_rsiPeriod = 19; +input int RC_overboughtLevel = 93; +input int RC_oversoldLevel = 22; +input double RC_entryRSIBuySpread = 0; +input double RC_entryRSISellSpread = 0; +input double RC_lotSize = 0.01; +input int RC_slippage = 3; +input int RC_cooldownSeconds = 209; +input ENUM_TIMEFRAMES RC_TimeFrame1 = PERIOD_M1; +input ENUM_TIMEFRAMES RC_TimeFrame2 = PERIOD_M1; +input ENUM_TIMEFRAMES RC_BarTimeFrame = PERIOD_M12; +input int RC_emaPeriod = 140; +input double RC_emaSlopeThreshold = 105; +input double RC_exitBuyRSI = 86; +input double RC_exitSellRSI = 10; +input double RC_TrailingStop = 295; +input double RC_emaDistanceThreshold = 165; +input int RC_tradingHourOneBegin = 24; +input int RC_tradingHourOneEnd = 22; +input int RC_tradingHourTwoBegin = 6; +input int RC_tradingHourTwoEnd = 19; +input bool RC_Sunday = false; +input bool RC_Monday = false; +input bool RC_Tuesday = true; +input bool RC_Wednesday = true; +input bool RC_Thursday = true; +input bool RC_Friday = false; +input bool RC_Saturday = false; + +//+------------------------------------------------------------------+ +//| Strategy 4: RSIMidPointHijackXAUUSD | +//| PEPPERSTONE US: Gold symbol is typically "XAUUSD" or "GOLD" | +//+------------------------------------------------------------------+ +input group "=== RSI MidPoint Hijack Strategy ===" +input string RM_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RM_InpTimeframe = PERIOD_H1; +input double RM_InpLotSize = 0.02; +input int RM_InpMagicNumberRSIFollow = 1001; +input int RM_InpMagicNumberRSIReverse = 1002; +input int RM_InpMagicNumberEMACross = 1003; +input bool RM_InpEnableRSIFollow = true; +input bool RM_InpEnableRSIReverse = true; +input bool RM_InpEnableEMACross = true; +input bool RM_InpEnableStrategyLock = false; +input double RM_InpLockProfitThreshold = 0.0; +input bool RM_InpCloseOppositeTrades = false; +input int RM_InpRSIPeriod = 32; +input int RM_InpRSIOverbought = 78; +input int RM_InpRSIOversold = 46; +input int RM_InpRSIExitLevel = 44; +input int RM_InpRSIFollowStartHour = 23; +input int RM_InpRSIFollowEndHour = 8; +input bool RM_InpRSIFollowCloseOutsideHours = false; +input int RM_InpRSIReversePeriod = 59; +input int RM_InpRSIReverseOverbought = 51; +input int RM_InpRSIReverseOversold = 49; +input int RM_InpRSIReverseCrossLevel = 53; +input int RM_InpRSIReverseExitLevel = 48; +input int RM_InpRSIReverseStartHour = 7; +input int RM_InpRSIReverseEndHour = 13; +input bool RM_InpRSIReverseCloseOutsideHours = false; +input int RM_InpRSIReverseCooldownBars = 15; +input bool RM_InpRSIReverseCooldownOnLoss = true; +input int RM_InpEMAPeriod = 120; +input int RM_InpEMACrossStartHour = 8; +input int RM_InpEMACrossEndHour = 14; +input bool RM_InpEMACrossCloseOutsideHours = true; +input bool RM_InpUseEMADistanceEntry = true; +input double RM_InpEMADistancePips = 160.0; +input int RM_InpEMADistancePeriod = 26; + +//+------------------------------------------------------------------+ +//| Strategy 5-10: RSI Scalping Strategies | +//| Each RSI Scalping strategy trades on its own symbol: | +//| - APPL: Apple stock (AAPL) | +//| - BTCUSD: Bitcoin/USD | +//| - NVDA: NVIDIA stock | +//| - TSLA: Tesla stock | +//| - XAUUSD: Gold/USD | +//| | +//| PEPPERSTONE US SYMBOL FORMATS: | +//| - Stocks may use: "AAPL.US", "NASDAQ:AAPL", or just "AAPL" | +//| - To find correct symbols: | +//| 1. Open Market Watch (Ctrl+M) | +//| 2. Right-click > Show All | +//| 3. Search for the stock name | +//| 4. Use the exact symbol name shown | +//+------------------------------------------------------------------+ +input group "=== RSI Scalping APPL (AAPL) - Pepperstone US ===" +input string RS_APPL_Symbol = "AAPL.US"; // Try: "AAPL.US", "NASDAQ:AAPL", or "AAPL" +input ENUM_TIMEFRAMES RS_APPL_TimeFrame = PERIOD_M10; +input int RS_APPL_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_APPL_RSI_Applied_Price = PRICE_CLOSE; +input double RS_APPL_RSI_Overbought = 80; +input double RS_APPL_RSI_Oversold = 78; +input double RS_APPL_RSI_Target_Buy = 94; +input double RS_APPL_RSI_Target_Sell = 44; +input int RS_APPL_BarsToWait = 7; +input double RS_APPL_LotSize = 25; +input int RS_APPL_MagicNumber = 20001; +input int RS_APPL_Slippage = 3; + +input group "=== RSI Scalping BTCUSD ===" +input string RS_BTCUSD_Symbol = "BTCUSD"; // Pepperstone may use: "BTCUSD", "BTC/USD", or "BTCUSD.c" +input ENUM_TIMEFRAMES RS_BTCUSD_TimeFrame = PERIOD_H1; +input int RS_BTCUSD_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_BTCUSD_RSI_Applied_Price = PRICE_CLOSE; +input double RS_BTCUSD_RSI_Overbought = 90; +input double RS_BTCUSD_RSI_Oversold = 73; +input double RS_BTCUSD_RSI_Target_Buy = 88; +input double RS_BTCUSD_RSI_Target_Sell = 48; +input int RS_BTCUSD_BarsToWait = 6; +input double RS_BTCUSD_LotSize = 0.1; +input int RS_BTCUSD_MagicNumber = 123459123; +input int RS_BTCUSD_Slippage = 3; + +input group "=== RSI Scalping NVDA - Pepperstone US ===" +input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" +input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; +input int RS_NVDA_RSI_Period = 8; +input ENUM_APPLIED_PRICE RS_NVDA_RSI_Applied_Price = PRICE_CLOSE; +input double RS_NVDA_RSI_Overbought = 36; +input double RS_NVDA_RSI_Oversold = 38; +input double RS_NVDA_RSI_Target_Buy = 90; +input double RS_NVDA_RSI_Target_Sell = 70; +input int RS_NVDA_BarsToWait = 5; +input double RS_NVDA_LotSize = 50; +input int RS_NVDA_MagicNumber = 20003; +input int RS_NVDA_Slippage = 3; + +input group "=== RSI Scalping TSLA - Pepperstone US ===" +input string RS_TSLA_Symbol = "TSLA.US"; // Try: "TSLA.US", "NASDAQ:TSLA", or "TSLA" +input ENUM_TIMEFRAMES RS_TSLA_TimeFrame = PERIOD_H1; +input int RS_TSLA_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_TSLA_RSI_Applied_Price = PRICE_CLOSE; +input double RS_TSLA_RSI_Overbought = 54; +input double RS_TSLA_RSI_Oversold = 73; +input double RS_TSLA_RSI_Target_Buy = 87; +input double RS_TSLA_RSI_Target_Sell = 33; +input int RS_TSLA_BarsToWait = 1; +input double RS_TSLA_LotSize = 50; +input int RS_TSLA_MagicNumber = 125421321; +input int RS_TSLA_Slippage = 3; + +input group "=== RSI Scalping XAUUSD ===" +input string RS_XAUUSD_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RS_XAUUSD_TimeFrame = PERIOD_H1; +input int RS_XAUUSD_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_XAUUSD_RSI_Applied_Price = PRICE_CLOSE; +input double RS_XAUUSD_RSI_Overbought = 71; +input double RS_XAUUSD_RSI_Oversold = 57; +input double RS_XAUUSD_RSI_Target_Buy = 80; +input double RS_XAUUSD_RSI_Target_Sell = 57; +input int RS_XAUUSD_BarsToWait = 4; +input double RS_XAUUSD_LotSize = 0.1; +input int RS_XAUUSD_MagicNumber = 129102315; +input int RS_XAUUSD_Slippage = 3; + +input group "=== RSI Scalping Reversal Escape (XAUUSD only) ===" +input bool RS_UseReversalEscape = true; +input int RS_ReversalATRPeriod = 14; +input double RS_ReversalAdverseAtrMult = 5.25; +input int RS_ReversalSignsRequired = 2; +input double RS_ReversalRsiVelocity = 16.0; +input double RS_ReversalBodyAtrMult = 5.1; + +//+------------------------------------------------------------------+ +//| Strategy 11-12: RSI Reversal Asian Strategies | +//| Each RSI Reversal Asian strategy trades on its own symbol: | +//| - EURUSD: Euro/USD | +//| - AUDUSD: Australian Dollar/USD | +//+------------------------------------------------------------------+ +input group "=== RSI Reversal Asian EURUSD ===" +input string RRA_EURUSD_Symbol = "EURUSD"; +input int RRA_EURUSD_RSIPeriod = 28; +input double RRA_EURUSD_OverboughtLevel = 60; +input double RRA_EURUSD_OversoldLevel = 8; +input int RRA_EURUSD_TakeProfitPips = 175; +input int RRA_EURUSD_StopLossPips = 5; +input double RRA_EURUSD_MaxLotSize = 0.1; +input int RRA_EURUSD_MaxSpread = 1000; +input int RRA_EURUSD_MaxDuration = 270; +input bool RRA_EURUSD_UseStopLoss = false; +input bool RRA_EURUSD_UseTakeProfit = false; +input bool RRA_EURUSD_UseRSIExit = true; +input double RRA_EURUSD_RSIExitLevel = 55; +input bool RRA_EURUSD_CloseOutsideSession = false; +input ENUM_TIMEFRAMES RRA_EURUSD_TimeFrame = PERIOD_M15; +input int RRA_EURUSD_MagicNumber = 30001; +input int RRA_EURUSD_Slippage = 3; + +input group "=== RSI Reversal Asian AUDUSD ===" +input string RRA_AUDUSD_Symbol = "AUDUSD"; +input int RRA_AUDUSD_RSIPeriod = 28; +input double RRA_AUDUSD_OverboughtLevel = 68; +input double RRA_AUDUSD_OversoldLevel = 30; +input int RRA_AUDUSD_TakeProfitPips = 175; +input int RRA_AUDUSD_StopLossPips = 5; +input double RRA_AUDUSD_MaxLotSize = 0.2; +input int RRA_AUDUSD_MaxSpread = 1000; +input int RRA_AUDUSD_MaxDuration = 340; +input bool RRA_AUDUSD_UseStopLoss = false; +input bool RRA_AUDUSD_UseTakeProfit = false; +input bool RRA_AUDUSD_UseRSIExit = true; +input double RRA_AUDUSD_RSIExitLevel = 48; +input bool RRA_AUDUSD_CloseOutsideSession = true; +input ENUM_TIMEFRAMES RRA_AUDUSD_TimeFrame = PERIOD_M15; +input int RRA_AUDUSD_MagicNumber = 30002; +input int RRA_AUDUSD_Slippage = 3; + +input group "=== SuperEMA (EMA + CCI + MACD) ===" +input string SE_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES SE_Timeframe = PERIOD_M15; +input double SE_LotSize = 0.01; +input int SE_SlippagePoints = 55; +input int SE_MagicNumber = 940001; +input int SE_EmaFast = 40; +input int SE_EmaMid = 180; +input int SE_EmaSlow = 125; +input int SE_EmaTrendBars = 3; +input int SE_CciPeriod = 17; +input double SE_CciOverbought = 80.0; +input double SE_CciOversold = -140.0; +input int SE_PullbackCciLookback = 20; +input int SE_MacdFast = 14; +input int SE_MacdSlow = 38; +input int SE_MacdSignal = 9; +input ENUM_SE_ENTRY_STYLE SE_EntryStyle = SE_ENTRY_LAMBERT; +input bool SE_OneTradeOnly = true; +input bool SE_UseStructuralSL = false; +input double SE_SlBufferPoints = 110; +input bool SE_ExitOnTrendFlip = false; +input bool SE_ExitOnMacdFlip = false; +input bool SE_ExitOnCciZeroCross = true; +input int SE_MaxHoldingBars = 168; +input bool SE_ExitBelowMidEma = false; +input bool SE_DebugLogs = false; + +input group "=== RSI Consolidation (ranging / mean-reversion) ===" +input string RCO_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RCO_SignalTF = PERIOD_M15; +input bool RCO_EntryOnNewBarOnly = true; +input int RCO_ADX_Period = 23; +input double RCO_ADX_Max = 29.0; +input bool RCO_UseATRRatioFilter = true; +input int RCO_ATR_Period = 8; +input int RCO_ATR_SMA_Period = 35; +input double RCO_ATR_Ratio_Max = 1.36; +input bool RCO_UseFlatEMAFilter = true; +input int RCO_EMA_Fast = 13; +input int RCO_EMA_Slow = 17; +input double RCO_EMA_Separation_MaxPct = 0.26; +input int RCO_RSI_Period = 8; +input ENUM_APPLIED_PRICE RCO_RSI_Price = PRICE_OPEN; +input double RCO_RSI_Oversold = 22.0; +input double RCO_RSI_Overbought = 63.0; +input bool RCO_UseRSI_MeanExit = true; +input double RCO_RSI_Exit_Long = 48.0; +input double RCO_RSI_Exit_Short = 52.0; +input double RCO_SL_ATR_Mult = 2.15; +input double RCO_TP_ATR_Mult = 2.40; +input int RCO_MaxBarsInTrade = 54; +input double RCO_Lots = 0.10; +input ulong RCO_MagicNumber = 20250420; +input int RCO_Slippage = 10; +input int RCO_MaxSpreadPoints = 28; + +//+------------------------------------------------------------------+ +//| Global Variables - DarvasBox | +//+------------------------------------------------------------------+ +struct DarvasBoxData { + string symbol; + bool isInitialized; + double boxHigh; + double boxLow; + bool boxFormed; + datetime lastBoxTime; + string boxName; + double minStopLevel; + double point; + CTrade trade; + int maHandle; + int volumeHandle; + datetime lastBarTime; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - EMA Slope Distance | +//+------------------------------------------------------------------+ +struct EMASlopeData { + string symbol; + bool isInitialized; + int ema_handle; + double ema_array[]; + datetime letzte_überwachung_zeit; + bool überwachung_aktiv; + bool preis_trigger_aktiv; + bool steigung_trigger_aktiv; + int ticket; + CTrade trade; + int trades_in_current_crossover; + bool crossover_detected; + datetime trade_open_time; + datetime last_bar_time; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI CrossOver Reversal | +//+------------------------------------------------------------------+ +struct RSICrossOverData { + string symbol; + bool isInitialized; + int rsiHandle; + int emaHandle; + double previousRSIDef; + CTrade trade; + datetime lastTradeTime; + datetime bartime; + bool WeekDays[7]; + datetime lastBarTime; +}; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI MidPoint Hijack | +//+------------------------------------------------------------------+ +struct RSIMidPointData { + string symbol; + bool isInitialized; + int rsiHandle; + int rsiReverseHandle; + int emaHandle; + bool rsiOverbought; + bool rsiOversold; + bool rsiReverseOverbought; + bool rsiReverseOversold; + CTrade trade; + CPositionInfo positionInfo; + bool emaCrossBuySignal; + bool emaCrossSellSignal; + int emaCrossSignalBar; + datetime lastBarTime; + datetime rsiReverseLastCloseTime; + bool rsiReverseInCooldown; + double lastBarRSI; + double lastBarRSIReverse; + double lastBarEMA; + double lastBarClose; + double lastBarEMAPrev; + double lastBarClosePrev; +}; + +//+------------------------------------------------------------------+ +//| Global Strategy Instances | +//+------------------------------------------------------------------+ +DarvasBoxData dbData; +EMASlopeData esData; +RSICrossOverData rcData; +RSIMidPointData rmData; +RSIScalpingData rsAPPLData; +RSIScalpingData rsBTCUSDData; +RSIScalpingData rsNVDAData; +RSIScalpingData rsTSLAData; +RSIScalpingData rsXAUUSDData; +SuperEMAData seData; +RSIConsolidationData rcoData; + +//+------------------------------------------------------------------+ +//| Global Variables - RSI Reversal Asian | +//+------------------------------------------------------------------+ +RSIReversalAsianData rraEURUSDData; +RSIReversalAsianData rraAUDUSDData; + +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() +{ + int initResult = INIT_SUCCEEDED; + + // Initialize global lot size variables + g_ES_LotSize = LOT_ES_EMASlopeDistance; + g_RC_LotSize = LOT_RC_RSICrossOver; + g_RM_LotSize = LOT_RM_RSIMidPointHijack; + + // Initialize strategies - log warnings but don't fail entire EA if symbol unavailable + if(EnableDarvasBox) + if(!InitDarvasBox(DB_Symbol)) + Print("Warning: DarvasBox strategy failed to initialize for symbol '", DB_Symbol, "'"); + + if(EnableEMASlopeDistance) + if(!InitEMASlopeDistance(ES_Symbol)) + Print("Warning: EMASlopeDistance strategy failed to initialize for symbol '", ES_Symbol, "'"); + + if(EnableRSICrossOverReversal) + if(!InitRSICrossOverReversal(RC_Symbol)) + Print("Warning: RSICrossOverReversal strategy failed to initialize for symbol '", RC_Symbol, "'"); + + if(EnableRSIMidPointHijack) + if(!InitRSIMidPointHijack(RM_Symbol)) + Print("Warning: RSIMidPointHijack strategy failed to initialize for symbol '", RM_Symbol, "'"); + + // Initialize RSI Scalping strategies - don't fail entire EA if symbol unavailable + if(EnableRSIScalpingAPPL) + InitRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_MagicNumber, RS_APPL_Slippage); + + if(EnableRSIScalpingBTCUSD) + InitRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_MagicNumber, RS_BTCUSD_Slippage); + + if(EnableRSIScalpingNVDA) + InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); + + if(EnableRSIScalpingTSLA) + InitRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_MagicNumber, RS_TSLA_Slippage); + + if(EnableRSIScalpingXAUUSD) + InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); + + if(EnableSuperEMA) + if(!InitSuperEMA(seData, SE_Symbol, SE_Timeframe, SE_SlippagePoints, SE_MagicNumber, + SE_EmaFast, SE_EmaMid, SE_EmaSlow, SE_EmaTrendBars, + SE_CciPeriod, SE_CciOverbought, SE_CciOversold, SE_PullbackCciLookback, + SE_MacdFast, SE_MacdSlow, SE_MacdSignal, + SE_EntryStyle, SE_OneTradeOnly, SE_UseStructuralSL, SE_SlBufferPoints, + SE_ExitOnTrendFlip, SE_ExitOnMacdFlip, SE_ExitOnCciZeroCross, + SE_MaxHoldingBars, SE_ExitBelowMidEma, SE_DebugLogs)) + Print("Warning: SuperEMA failed to initialize for symbol '", SE_Symbol, "'"); + + if(EnableRSIConsolidation) + if(!InitRSIConsolidation(rcoData, RCO_Symbol, RCO_SignalTF, RCO_EntryOnNewBarOnly, + RCO_ADX_Period, RCO_ADX_Max, RCO_UseATRRatioFilter, RCO_ATR_Period, RCO_ATR_SMA_Period, RCO_ATR_Ratio_Max, + RCO_UseFlatEMAFilter, RCO_EMA_Fast, RCO_EMA_Slow, RCO_EMA_Separation_MaxPct, + RCO_RSI_Period, RCO_RSI_Price, RCO_RSI_Oversold, RCO_RSI_Overbought, + RCO_UseRSI_MeanExit, RCO_RSI_Exit_Long, RCO_RSI_Exit_Short, RCO_SL_ATR_Mult, RCO_TP_ATR_Mult, + RCO_MaxBarsInTrade, RCO_MagicNumber, RCO_Slippage, RCO_MaxSpreadPoints)) + Print("Warning: RSIConsolidation failed to initialize for symbol '", RCO_Symbol, "'"); + + // Initialize RSI Reversal Asian strategies + if(EnableRSIReversalAsianEURUSD) + if(!InitRSIReversalAsian(rraEURUSDData, RRA_EURUSD_Symbol, RRA_EURUSD_RSIPeriod, RRA_EURUSD_OverboughtLevel, RRA_EURUSD_OversoldLevel, + RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, LOT_RRA_EURUSD, + RRA_EURUSD_MaxSpread, RRA_EURUSD_MaxDuration, RRA_EURUSD_UseStopLoss, + RRA_EURUSD_UseTakeProfit, RRA_EURUSD_UseRSIExit, RRA_EURUSD_RSIExitLevel, + RRA_EURUSD_CloseOutsideSession, RRA_EURUSD_TimeFrame, RRA_EURUSD_MagicNumber, RRA_EURUSD_Slippage)) + Print("Warning: RSIReversalAsianEURUSD strategy failed to initialize for symbol '", RRA_EURUSD_Symbol, "'"); + + if(EnableRSIReversalAsianAUDUSD) + if(!InitRSIReversalAsian(rraAUDUSDData, RRA_AUDUSD_Symbol, RRA_AUDUSD_RSIPeriod, RRA_AUDUSD_OverboughtLevel, RRA_AUDUSD_OversoldLevel, + RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, LOT_RRA_AUDUSD, + RRA_AUDUSD_MaxSpread, RRA_AUDUSD_MaxDuration, RRA_AUDUSD_UseStopLoss, + RRA_AUDUSD_UseTakeProfit, RRA_AUDUSD_UseRSIExit, RRA_AUDUSD_RSIExitLevel, + RRA_AUDUSD_CloseOutsideSession, RRA_AUDUSD_TimeFrame, RRA_AUDUSD_MagicNumber, RRA_AUDUSD_Slippage)) + Print("Warning: RSIReversalAsianAUDUSD strategy failed to initialize for symbol '", RRA_AUDUSD_Symbol, "'"); + + Print("United EA initialized. Active strategies: ", + (EnableDarvasBox ? "DarvasBox " : ""), + (EnableEMASlopeDistance ? "EMASlope " : ""), + (EnableRSICrossOverReversal ? "RSICrossOver " : ""), + (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), + (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), + (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), + (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), + (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), + (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : ""), + (EnableSuperEMA ? "SuperEMA " : ""), + (EnableRSIConsolidation ? "RSIConsolidation " : ""), + (EnableRSIReversalAsianEURUSD ? "RSIReversalAsianEURUSD " : ""), + (EnableRSIReversalAsianAUDUSD ? "RSIReversalAsianAUDUSD " : "")); + + return initResult; +} + +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) +{ + if(EnableDarvasBox) + DeinitDarvasBox(); + + if(EnableEMASlopeDistance) + DeinitEMASlopeDistance(); + + if(EnableRSICrossOverReversal) + DeinitRSICrossOverReversal(); + + if(EnableRSIMidPointHijack) + DeinitRSIMidPointHijack(); + + if(EnableRSIScalpingAPPL) + DeinitRSIScalping(rsAPPLData); + + if(EnableRSIScalpingBTCUSD) + DeinitRSIScalping(rsBTCUSDData); + + if(EnableRSIScalpingNVDA) + DeinitRSIScalping(rsNVDAData); + + if(EnableRSIScalpingTSLA) + DeinitRSIScalping(rsTSLAData); + + if(EnableRSIScalpingXAUUSD) + DeinitRSIScalping(rsXAUUSDData); + + if(EnableSuperEMA) + DeinitSuperEMA(seData); + + if(EnableRSIConsolidation) + DeinitRSIConsolidation(rcoData); + + if(EnableRSIReversalAsianEURUSD) + DeinitRSIReversalAsian(rraEURUSDData); + + if(EnableRSIReversalAsianAUDUSD) + DeinitRSIReversalAsian(rraAUDUSDData); + + Print("United EA deinitialized. Reason: ", reason); +} + +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() +{ + if(EnableDarvasBox) + ProcessDarvasBox(DB_Symbol); + + if(EnableEMASlopeDistance) + ProcessEMASlopeDistance(ES_Symbol); + + if(EnableRSICrossOverReversal) + ProcessRSICrossOverReversal(RC_Symbol); + + if(EnableRSIMidPointHijack) + ProcessRSIMidPointHijack(RM_Symbol); + + if(EnableRSIScalpingAPPL) + ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, + RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, + RS_APPL_BarsToWait, LOT_RS_APPL, RS_APPL_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); + + if(EnableRSIScalpingBTCUSD) + ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, + RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, + RS_BTCUSD_BarsToWait, LOT_RS_BTCUSD, RS_BTCUSD_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); + + if(EnableRSIScalpingNVDA) + ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, + RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, + RS_NVDA_BarsToWait, LOT_RS_NVDA, RS_NVDA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); + + if(EnableRSIScalpingTSLA) + ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, + RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, + RS_TSLA_BarsToWait, LOT_RS_TSLA, RS_TSLA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); + + if(EnableRSIScalpingXAUUSD) + ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, + RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, + RS_XAUUSD_BarsToWait, LOT_RS_XAUUSD, RS_XAUUSD_MagicNumber, + RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); + + if(EnableRSIReversalAsianEURUSD) + ProcessRSIReversalAsian(rraEURUSDData, LOT_RRA_EURUSD); + + if(EnableRSIReversalAsianAUDUSD) + ProcessRSIReversalAsian(rraAUDUSDData, LOT_RRA_AUDUSD); + + if(EnableSuperEMA) + ProcessSuperEMA(seData, LOT_SE_SuperEMA); + + if(EnableRSIConsolidation) + ProcessRSIConsolidation(rcoData, LOT_RCO_RSIConsolidation); +} + +//+------------------------------------------------------------------+ diff --git a/frontline/MQL5/_united_dynamic/report.png b/frontline/united_template/_united-V2/report.png similarity index 100% rename from frontline/MQL5/_united_dynamic/report.png rename to frontline/united_template/_united-V2/report.png diff --git a/frontline/MQL5/_united_dynamic/self-evaluate.mq5 b/frontline/united_template/_united-V2/self-evaluate.mq5 similarity index 92% rename from frontline/MQL5/_united_dynamic/self-evaluate.mq5 rename to frontline/united_template/_united-V2/self-evaluate.mq5 index 99e078a..b9d92e9 100644 --- a/frontline/MQL5/_united_dynamic/self-evaluate.mq5 +++ b/frontline/united_template/_united-V2/self-evaluate.mq5 @@ -25,6 +25,7 @@ input bool EnableRSICrossOverReversal = true; input bool EnableRSIMidPointHijack = true; input bool EnableRSIScalpingAPPL = true; input bool EnableRSIScalpingBTCUSD = true; +input bool EnableRSIScalpingMSFT = true; input bool EnableRSIScalpingNVDA = true; input bool EnableRSIScalpingTSLA = true; input bool EnableRSIScalpingXAUUSD = true; @@ -154,6 +155,7 @@ input int RM_InpEMADistancePeriod = 26; //| Each RSI Scalping strategy trades on its own symbol: | //| - APPL: Apple stock (AAPL) | //| - BTCUSD: Bitcoin/USD | +//| - MSFT: Microsoft stock | //| - NVDA: NVIDIA stock | //| - TSLA: Tesla stock | //| - XAUUSD: Gold/USD | @@ -194,6 +196,20 @@ input double RS_BTCUSD_LotSize = 0.1; input int RS_BTCUSD_MagicNumber = 123459123; input int RS_BTCUSD_Slippage = 3; +input group "=== RSI Scalping MSFT - Pepperstone US ===" +input string RS_MSFT_Symbol = "MSFT.US"; // Try: "MSFT.US", "NASDAQ:MSFT", or "MSFT" +input ENUM_TIMEFRAMES RS_MSFT_TimeFrame = PERIOD_H3; +input int RS_MSFT_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_MSFT_RSI_Applied_Price = PRICE_CLOSE; +input double RS_MSFT_RSI_Overbought = 19; +input double RS_MSFT_RSI_Oversold = 50; +input double RS_MSFT_RSI_Target_Buy = 71; +input double RS_MSFT_RSI_Target_Sell = 70; +input int RS_MSFT_BarsToWait = 1; +input double RS_MSFT_LotSize = 50; +input int RS_MSFT_MagicNumber = 20002; +input int RS_MSFT_Slippage = 3; + input group "=== RSI Scalping NVDA - Pepperstone US ===" input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; @@ -349,6 +365,7 @@ RSICrossOverData rcData; RSIMidPointData rmData; RSIScalpingData rsAPPLData; RSIScalpingData rsBTCUSDData; +RSIScalpingData rsMSFTData; RSIScalpingData rsNVDAData; RSIScalpingData rsTSLAData; RSIScalpingData rsXAUUSDData; @@ -363,6 +380,7 @@ double g_RC_LotSize = 0.01; // RSI CrossOver Reversal - start with minimum double g_RM_LotSize = 0.01; // RSI MidPoint Hijack - start with minimum double g_RS_APPL_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_BTCUSD_LotSize = 0.01; // Crypto - start with forex minimum (0.01) +double g_RS_MSFT_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_NVDA_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_TSLA_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_XAUUSD_LotSize = 0.01; // Forex - start with forex minimum (0.01) @@ -446,6 +464,15 @@ int OnInit() g_RS_BTCUSD_LotSize = minLot; } + if(EnableRSIScalpingMSFT) + { + InitRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, RS_MSFT_MagicNumber, RS_MSFT_Slippage); + RegisterStrategy("RSIScalpingMSFT", RS_MSFT_MagicNumber, RS_MSFT_LotSize, RS_MSFT_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_MSFT_Symbol); + g_RS_MSFT_LotSize = minLot; + } + if(EnableRSIScalpingNVDA) { InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); @@ -492,6 +519,9 @@ int OnInit() adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; @@ -509,6 +539,7 @@ int OnInit() (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), + (EnableRSIScalpingMSFT ? "RSIScalpingMSFT " : ""), (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : "")); @@ -542,6 +573,9 @@ void OnDeinit(const int reason) if(EnableRSIScalpingBTCUSD) DeinitRSIScalping(rsBTCUSDData); + if(EnableRSIScalpingMSFT) + DeinitRSIScalping(rsMSFTData); + if(EnableRSIScalpingNVDA) DeinitRSIScalping(rsNVDAData); @@ -581,6 +615,9 @@ void OnTick() adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; @@ -613,6 +650,11 @@ void OnTick() RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, RS_BTCUSD_BarsToWait, g_RS_BTCUSD_LotSize, RS_BTCUSD_MagicNumber); + if(EnableRSIScalpingMSFT) + ProcessRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, + RS_MSFT_RSI_Overbought, RS_MSFT_RSI_Oversold, RS_MSFT_RSI_Target_Buy, RS_MSFT_RSI_Target_Sell, + RS_MSFT_BarsToWait, g_RS_MSFT_LotSize, RS_MSFT_MagicNumber); + if(EnableRSIScalpingNVDA) ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, diff --git a/frontline/MQL5/_united_dynamic_cent/MagicNumberHelpers.mqh b/frontline/united_template/_united-V2_exponential/MagicNumberHelpers.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/MagicNumberHelpers.mqh rename to frontline/united_template/_united-V2_exponential/MagicNumberHelpers.mqh diff --git a/frontline/MQL5/_united_dynamic/PerformanceEvaluator.mqh b/frontline/united_template/_united-V2_exponential/PerformanceEvaluator.mqh similarity index 99% rename from frontline/MQL5/_united_dynamic/PerformanceEvaluator.mqh rename to frontline/united_template/_united-V2_exponential/PerformanceEvaluator.mqh index 1389540..991f603 100644 --- a/frontline/MQL5/_united_dynamic/PerformanceEvaluator.mqh +++ b/frontline/united_template/_united-V2_exponential/PerformanceEvaluator.mqh @@ -104,7 +104,7 @@ bool IsStockSymbol(string symbol) // String-based checks (.US, NASDAQ:, NYSE:, common tickers) are sufficient // Common stock tickers (without .US suffix) - string commonStocks[] = {"AAPL", "NVDA", "TSLA", "GOOGL", "AMZN", "META", "AMD", "NFLX"}; + string commonStocks[] = {"AAPL", "MSFT", "NVDA", "TSLA", "GOOGL", "AMZN", "META", "NFLX"}; for(int i = 0; i < ArraySize(commonStocks); i++) { if(StringFind(symbol, commonStocks[i]) == 0) return true; diff --git a/frontline/MQL5/_united_dynamic_cent/STRATEGY_CONFIGURATION.md b/frontline/united_template/_united-V2_exponential/STRATEGY_CONFIGURATION.md similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/STRATEGY_CONFIGURATION.md rename to frontline/united_template/_united-V2_exponential/STRATEGY_CONFIGURATION.md diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/DarvasBoxStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/DarvasBoxStrategy.mqh similarity index 98% rename from frontline/MQL5/_united_dynamic_cent/Strategies/DarvasBoxStrategy.mqh rename to frontline/united_template/_united-V2_exponential/Strategies/DarvasBoxStrategy.mqh index ff1d13b..6c2d7d5 100644 --- a/frontline/MQL5/_united_dynamic_cent/Strategies/DarvasBoxStrategy.mqh +++ b/frontline/united_template/_united-V2_exponential/Strategies/DarvasBoxStrategy.mqh @@ -195,9 +195,9 @@ bool PlaceOrder(ENUM_ORDER_TYPE orderType, double price, double sl, double tp) // Use market price (0) instead of explicit price - this ensures market order execution // In backtesting, explicit price might fail if price has moved if(orderType == ORDER_TYPE_BUY) - result = dbData.trade.Buy(g_DB_LotSize, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); + result = dbData.trade.Buy(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); else - result = dbData.trade.Sell(g_DB_LotSize, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); + result = dbData.trade.Sell(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); // Always log errors, success only if logging enabled if(result) diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/EMASlopeDistanceStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/Strategies/EMASlopeDistanceStrategy.mqh rename to frontline/united_template/_united-V2_exponential/Strategies/EMASlopeDistanceStrategy.mqh diff --git a/frontline/united_template/_united-V2_exponential/Strategies/RSIConsolidationStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/RSIConsolidationStrategy.mqh new file mode 100644 index 0000000..c996950 --- /dev/null +++ b/frontline/united_template/_united-V2_exponential/Strategies/RSIConsolidationStrategy.mqh @@ -0,0 +1,387 @@ +//+------------------------------------------------------------------+ +//| RSIConsolidationStrategy.mqh | +//| Ported from cluster-0/RSIConsolidation/RSIConsolidation.mq5 | +//+------------------------------------------------------------------+ +#ifndef RSI_CONSOLIDATION_STRATEGY_MQH +#define RSI_CONSOLIDATION_STRATEGY_MQH + +struct RSIConsolidationData +{ + string symbol; + bool isInitialized; + CTrade trade; + ENUM_TIMEFRAMES signalTF; + bool entryOnNewBarOnly; + int adxPeriod; + double adxMax; + bool useATRRatioFilter; + int atrPeriod; + int atrSmaPeriod; + double atrRatioMax; + bool useFlatEMAFilter; + int emaFast; + int emaSlow; + double emaSeparationMaxPct; + int rsiPeriod; + ENUM_APPLIED_PRICE rsiPrice; + double rsiOversold; + double rsiOverbought; + bool useRSIMeanExit; + double rsiExitLong; + double rsiExitShort; + double slAtrMult; + double tpAtrMult; + int maxBarsInTrade; + ulong magic; + int slippage; + int maxSpreadPoints; + int h_rsi; + int h_adx; + int h_atr; + int h_ema_fast; + int h_ema_slow; + datetime lastBar; +}; + +bool RCO_Copy1(const int handle, double &v) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(handle, 0, 0, 1, b) < 1) + return false; + v = b[0]; + return true; +} + +bool RCO_RsiBuffers(RSIConsolidationData &d, double &cur, double &prev, double &twoAgo) +{ + double b[]; + ArraySetAsSeries(b, true); + if(CopyBuffer(d.h_rsi, 0, 0, 3, b) < 3) + return false; + cur = b[0]; + prev = b[1]; + twoAgo = b[2]; + return true; +} + +double RCO_NormalizeVolume(const string sym, double vol) +{ + double minLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX); + double step = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP); + if(step > 0.0) + vol = MathFloor(vol / step) * step; + if(vol < minLot) + vol = minLot; + if(vol > maxLot) + vol = maxLot; + return vol; +} + +int RCO_CurrentSpreadPoints(const string sym) +{ + long spread = 0; + if(!SymbolInfoInteger(sym, SYMBOL_SPREAD, spread)) + return 999999; + return (int)spread; +} + +double RCO_MinStopsDistancePrice(const string sym) +{ + long lvl = 0; + if(!SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL, lvl)) + return 0; + double pt = SymbolInfoDouble(sym, SYMBOL_POINT); + if(pt <= 0) + return 0; + return (double)lvl * pt; +} + +bool RCO_RegimeIsConsolidation(RSIConsolidationData &d) +{ + double adx = 0; + if(!RCO_Copy1(d.h_adx, adx)) + return false; + if(adx >= d.adxMax) + return false; + + if(d.useATRRatioFilter) + { + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, d.atrSmaPeriod + 1, atrArr) < d.atrSmaPeriod + 1) + return false; + double sum = 0; + for(int i = 1; i <= d.atrSmaPeriod; i++) + sum += atrArr[i]; + double smaAtr = sum / (double)d.atrSmaPeriod; + if(smaAtr <= 0.0) + return false; + double ratio = atrArr[0] / smaAtr; + if(ratio > d.atrRatioMax) + return false; + } + + if(d.useFlatEMAFilter) + { + double ef[], es[]; + ArraySetAsSeries(ef, true); + ArraySetAsSeries(es, true); + if(CopyBuffer(d.h_ema_fast, 0, 0, 1, ef) < 1) + return false; + if(CopyBuffer(d.h_ema_slow, 0, 0, 1, es) < 1) + return false; + double c = SymbolInfoDouble(d.symbol, SYMBOL_BID); + if(c <= 0) + return false; + double sep = MathAbs(ef[0] - es[0]) / c * 100.0; + if(sep > d.emaSeparationMaxPct) + return false; + } + + return true; +} + +bool RCO_EntryBuyCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo <= d.rsiOversold && prev > d.rsiOversold); +} + +bool RCO_EntrySellCross(RSIConsolidationData &d, const double twoAgo, const double prev) +{ + return (twoAgo >= d.rsiOverbought && prev < d.rsiOverbought); +} + +void RCO_TryCloseByRSI(RSIConsolidationData &d, const ENUM_POSITION_TYPE typ, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + if(!d.useRSIMeanExit) + return; + if(typ == POSITION_TYPE_BUY && rsi >= d.rsiExitLong) + d.trade.PositionClose(tk); + else if(typ == POSITION_TYPE_SELL && rsi <= d.rsiExitShort) + d.trade.PositionClose(tk); +} + +void RCO_ManageOpenPosition(RSIConsolidationData &d, const double rsi) +{ + ulong tk = GetPositionTicketByMagic(d.symbol, d.magic); + if(tk == 0 || !PositionSelectByTicketSymbolAndMagic(tk, d.symbol, d.magic)) + return; + ENUM_POSITION_TYPE typ = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openT = (datetime)PositionGetInteger(POSITION_TIME); + int barsAgo = iBarShift(d.symbol, d.signalTF, openT, false); + if(barsAgo >= 0 && barsAgo >= d.maxBarsInTrade) + { + d.trade.PositionClose(tk); + return; + } + RCO_TryCloseByRSI(d, typ, rsi); +} + +bool InitRSIConsolidation(RSIConsolidationData &d, + const string inpSymbol, + const ENUM_TIMEFRAMES signalTF, + const bool entryOnNewBarOnly, + const int adxPeriod, + const double adxMax, + const bool useATRRatioFilter, + const int atrPeriod, + const int atrSmaPeriod, + const double atrRatioMax, + const bool useFlatEMAFilter, + const int emaFast, + const int emaSlow, + const double emaSeparationMaxPct, + const int rsiPeriod, + const ENUM_APPLIED_PRICE rsiPrice, + const double rsiOversold, + const double rsiOverbought, + const bool useRSIMeanExit, + const double rsiExitLong, + const double rsiExitShort, + const double slAtrMult, + const double tpAtrMult, + const int maxBarsInTrade, + const ulong magic, + const int slippage, + const int maxSpreadPoints) +{ + d.isInitialized = false; + d.symbol = inpSymbol; + StringTrimLeft(d.symbol); + StringTrimRight(d.symbol); + if(StringLen(d.symbol) == 0) + d.symbol = _Symbol; + + d.signalTF = signalTF; + d.entryOnNewBarOnly = entryOnNewBarOnly; + d.adxPeriod = adxPeriod; + d.adxMax = adxMax; + d.useATRRatioFilter = useATRRatioFilter; + d.atrPeriod = atrPeriod; + d.atrSmaPeriod = atrSmaPeriod; + d.atrRatioMax = atrRatioMax; + d.useFlatEMAFilter = useFlatEMAFilter; + d.emaFast = emaFast; + d.emaSlow = emaSlow; + d.emaSeparationMaxPct = emaSeparationMaxPct; + d.rsiPeriod = rsiPeriod; + d.rsiPrice = rsiPrice; + d.rsiOversold = rsiOversold; + d.rsiOverbought = rsiOverbought; + d.useRSIMeanExit = useRSIMeanExit; + d.rsiExitLong = rsiExitLong; + d.rsiExitShort = rsiExitShort; + d.slAtrMult = slAtrMult; + d.tpAtrMult = tpAtrMult; + d.maxBarsInTrade = maxBarsInTrade; + d.magic = magic; + d.slippage = slippage; + d.maxSpreadPoints = maxSpreadPoints; + d.lastBar = 0; + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; + + if(!SymbolSelect(d.symbol, true)) + { + Print("RSIConsolidation: SymbolSelect failed: ", d.symbol); + return false; + } + + d.trade.SetExpertMagicNumber((long)d.magic); + d.trade.SetDeviationInPoints(d.slippage); + d.trade.SetTypeFillingBySymbol(d.symbol); + + d.h_rsi = iRSI(d.symbol, d.signalTF, d.rsiPeriod, d.rsiPrice); + d.h_adx = iADX(d.symbol, d.signalTF, d.adxPeriod); + d.h_atr = iATR(d.symbol, d.signalTF, d.atrPeriod); + d.h_ema_fast = iMA(d.symbol, d.signalTF, d.emaFast, 0, MODE_EMA, PRICE_CLOSE); + d.h_ema_slow = iMA(d.symbol, d.signalTF, d.emaSlow, 0, MODE_EMA, PRICE_CLOSE); + + if(d.h_rsi == INVALID_HANDLE || d.h_adx == INVALID_HANDLE || d.h_atr == INVALID_HANDLE + || d.h_ema_fast == INVALID_HANDLE || d.h_ema_slow == INVALID_HANDLE) + { + Print("RSIConsolidation: indicator init failed"); + DeinitRSIConsolidation(d); + return false; + } + + d.isInitialized = true; + Print("RSIConsolidation: symbol=", d.symbol, " TF=", EnumToString(d.signalTF)); + return true; +} + +void DeinitRSIConsolidation(RSIConsolidationData &d) +{ + if(d.h_rsi != INVALID_HANDLE) + IndicatorRelease(d.h_rsi); + if(d.h_adx != INVALID_HANDLE) + IndicatorRelease(d.h_adx); + if(d.h_atr != INVALID_HANDLE) + IndicatorRelease(d.h_atr); + if(d.h_ema_fast != INVALID_HANDLE) + IndicatorRelease(d.h_ema_fast); + if(d.h_ema_slow != INVALID_HANDLE) + IndicatorRelease(d.h_ema_slow); + d.h_rsi = INVALID_HANDLE; + d.h_adx = INVALID_HANDLE; + d.h_atr = INVALID_HANDLE; + d.h_ema_fast = INVALID_HANDLE; + d.h_ema_slow = INVALID_HANDLE; + d.isInitialized = false; +} + +bool RCO_EnoughHistory(RSIConsolidationData &d) +{ + int need = MathMax(d.rsiPeriod + 3, MathMax(d.adxPeriod + 2, d.atrSmaPeriod + 3)); + if(Bars(d.symbol, d.signalTF) < need) + return false; + return true; +} + +void ProcessRSIConsolidation(RSIConsolidationData &d, const double lots) +{ + if(!d.isInitialized) + return; + + if(!RCO_EnoughHistory(d)) + return; + + if(d.maxSpreadPoints > 0 && RCO_CurrentSpreadPoints(d.symbol) > d.maxSpreadPoints) + return; + + double rsi, rsiPrev, rsi2; + if(!RCO_RsiBuffers(d, rsi, rsiPrev, rsi2)) + return; + + datetime barTime = iTime(d.symbol, d.signalTF, 0); + bool isNew = (barTime != d.lastBar); + + if(PositionExistsByMagic(d.symbol, d.magic)) + { + RCO_ManageOpenPosition(d, rsi); + if(isNew) + d.lastBar = barTime; + return; + } + + if(d.entryOnNewBarOnly && !isNew) + return; + + d.lastBar = barTime; + + if(!RCO_RegimeIsConsolidation(d)) + return; + + double atrArr[]; + ArraySetAsSeries(atrArr, true); + if(CopyBuffer(d.h_atr, 0, 0, 1, atrArr) < 1) + return; + double atr = atrArr[0]; + int dig = (int)SymbolInfoInteger(d.symbol, SYMBOL_DIGITS); + + double slDist = atr * d.slAtrMult; + double tpDist = atr * d.tpAtrMult; + double minD = RCO_MinStopsDistancePrice(d.symbol); + if(slDist < minD) + slDist = minD; + if(tpDist < minD) + tpDist = minD; + + double vol = RCO_NormalizeVolume(d.symbol, lots); + + if(RCO_EntryBuyCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, true)) + return; + double ask = SymbolInfoDouble(d.symbol, SYMBOL_ASK); + double sl = ask - slDist; + double tp = ask + tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Buy(vol, d.symbol, ask, sl, tp, "RSIConsolidation BUY")) + Print("RSIConsolidation BUY failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } + else if(RCO_EntrySellCross(d, rsi2, rsiPrev)) + { + if(!United_MayOpenNewEntry(d.symbol, d.magic, false)) + return; + double bid = SymbolInfoDouble(d.symbol, SYMBOL_BID); + double sl = bid + slDist; + double tp = bid - tpDist; + sl = NormalizeDouble(sl, dig); + tp = NormalizeDouble(tp, dig); + if(!d.trade.Sell(vol, d.symbol, bid, sl, tp, "RSIConsolidation SELL")) + Print("RSIConsolidation SELL failed | retcode=", d.trade.ResultRetcode(), " ", d.trade.ResultRetcodeDescription()); + } +} + +#endif // RSI_CONSOLIDATION_STRATEGY_MQH diff --git a/frontline/MQL5/_united/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/RSICrossOverReversalStrategy.mqh similarity index 90% rename from frontline/MQL5/_united/Strategies/RSICrossOverReversalStrategy.mqh rename to frontline/united_template/_united-V2_exponential/Strategies/RSICrossOverReversalStrategy.mqh index f182476..266292a 100644 --- a/frontline/MQL5/_united/Strategies/RSICrossOverReversalStrategy.mqh +++ b/frontline/united_template/_united-V2_exponential/Strategies/RSICrossOverReversalStrategy.mqh @@ -20,6 +20,23 @@ bool WeekDays_Check(datetime aTime) return(rcData.WeekDays[stm.day_of_week]); } +bool RC_HourInWindow(const int h, const int beginRaw, const int endRaw) +{ + const int b = beginRaw % 24; + const int e = endRaw % 24; + if(b == e) + return false; + if(b < e) + return (h >= b && h < e); + return (h >= b || h < e); +} + +bool RC_TradingHoursAllow(const int currentHour) +{ + return RC_HourInWindow(currentHour, RC_tradingHourOneBegin, RC_tradingHourOneEnd) + || RC_HourInWindow(currentHour, RC_tradingHourTwoBegin, RC_tradingHourTwoEnd); +} + int TimeHour(datetime when = 0) { if(when == 0) when = TimeCurrent(); @@ -151,8 +168,7 @@ void ProcessRSICrossOverReversal(string symbol) return; } - if(!((currentHour < RC_tradingHourOneEnd && currentHour > RC_tradingHourOneBegin) || - (currentHour < RC_tradingHourTwoEnd && currentHour > RC_tradingHourTwoBegin))) + if(!RC_TradingHoursAllow(currentHour)) { Close_Position_MN(RC_MagicNumber); return; @@ -173,7 +189,7 @@ void ProcessRSICrossOverReversal(string symbol) double previousEMA = ema[1]; double emaSlope = (currentEMA - previousEMA) * 100; - double closeCurr = iClose(Symbol(), Period(), 0); + const double closeCurr = iClose(rcData.symbol, RC_TimeFrame1, 0); double priceToEmaDistance = (closeCurr - currentEMA) * 10; bool isBuyPosition = false; @@ -211,10 +227,10 @@ void ProcessRSICrossOverReversal(string symbol) { Close_Position_MN(RC_MagicNumber); rcData.lastTradeTime = currentTime; - return; } - - if(currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && + + if(!isTrendStrong && + currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && !isSellPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); @@ -223,8 +239,9 @@ void ProcessRSICrossOverReversal(string symbol) rcData.lastTradeTime = currentTime; } } - - if(currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && + + if(!isTrendStrong && + currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && !isBuyPosition && !hasPosition && cooldownPassed) { rcData.trade.SetExpertMagicNumber(RC_MagicNumber); diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/RSIMidPointHijackStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/Strategies/RSIMidPointHijackStrategy.mqh rename to frontline/united_template/_united-V2_exponential/Strategies/RSIMidPointHijackStrategy.mqh diff --git a/frontline/MQL5/_united_dynamic_cent/Strategies/RSIReversalAsianStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/RSIReversalAsianStrategy.mqh similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/Strategies/RSIReversalAsianStrategy.mqh rename to frontline/united_template/_united-V2_exponential/Strategies/RSIReversalAsianStrategy.mqh diff --git a/frontline/united_template/_united-V2_exponential/Strategies/RSIScalpingStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/RSIScalpingStrategy.mqh new file mode 100644 index 0000000..5daa1c1 --- /dev/null +++ b/frontline/united_template/_united-V2_exponential/Strategies/RSIScalpingStrategy.mqh @@ -0,0 +1,560 @@ +//+------------------------------------------------------------------+ +//| RSIScalpingStrategy.mqh | +//+------------------------------------------------------------------+ + +//+------------------------------------------------------------------+ +//| RSI Scalping Strategy Data Structure | +//+------------------------------------------------------------------+ +struct RSIScalpingData { + string symbol; + bool isInitialized; + CTrade trade; + int rsi_handle; + double rsi_buffer[]; + double rsi_prev; + double rsi_current; + double rsi_two_bars_ago; + bool position_open; + ulong position_ticket; + ENUM_POSITION_TYPE current_position_type; + datetime last_bar_time; + bool rsi_against_position; + int bars_against_count; +}; + +void ClosePosition(RSIScalpingData& data, int MagicNumber); + +double RS_ATRPriceOnTF(const string symbol, const ENUM_TIMEFRAMES tf, const int period) +{ + if(period < 1) + return 0.0; + MqlRates rates[]; + const int need = period + 2; + if(CopyRates(symbol, tf, 0, need, rates) < need) + return 0.0; + ArraySetAsSeries(rates, true); + double sum = 0.0; + for(int i = 1; i <= period; i++) + { + const double hl = rates[i].high - rates[i].low; + const double hc = MathAbs(rates[i].high - rates[i + 1].close); + const double lc = MathAbs(rates[i].low - rates[i + 1].close); + sum += MathMax(hl, MathMax(hc, lc)); + } + return sum / (double)period; +} + +int RS_CountReversalEscapeSigns(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, + const ENUM_POSITION_TYPE ptype, const double atr, + const double adverseAtrMult, const double rsiVelocity, + const double bodyAtrMult) +{ + if(atr <= 0.0) + return 0; + const double entry = PositionGetDouble(POSITION_PRICE_OPEN); + const double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); + const double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); + int signs = 0; + + if(ptype == POSITION_TYPE_BUY) + { + if(entry - bid >= adverseAtrMult * atr) + signs++; + if(data.rsi_prev - data.rsi_current >= rsiVelocity) + signs++; + } + else if(ptype == POSITION_TYPE_SELL) + { + if(ask - entry >= adverseAtrMult * atr) + signs++; + if(data.rsi_current - data.rsi_prev >= rsiVelocity) + signs++; + } + else + return 0; + + MqlRates r[]; + if(CopyRates(data.symbol, tf, 0, 4, r) >= 4) + { + ArraySetAsSeries(r, true); + const double body = MathAbs(r[1].close - r[1].open); + if(body >= bodyAtrMult * atr) + { + if(ptype == POSITION_TYPE_BUY && r[1].close < r[1].open) + signs++; + else if(ptype == POSITION_TYPE_SELL && r[1].close > r[1].open) + signs++; + } + if(ptype == POSITION_TYPE_BUY) + { + if(r[1].close < r[2].close && r[2].close < r[3].close) + signs++; + } + else + { + if(r[1].close > r[2].close && r[2].close > r[3].close) + signs++; + } + } + return signs; +} + +void RS_TryReversalEscape(RSIScalpingData& data, const ENUM_TIMEFRAMES tf, const int MagicNumber, + const int atrPeriod, const double adverseAtrMult, const int signsRequired, + const double rsiVelocity, const double bodyAtrMult) +{ + if(!PositionSelectByMagic(data.symbol, (ulong)MagicNumber)) + return; + + const ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + const double atr = RS_ATRPriceOnTF(data.symbol, tf, atrPeriod); + if(atr <= 0.0) + return; + + const int n = RS_CountReversalEscapeSigns(data, tf, ptype, atr, adverseAtrMult, rsiVelocity, bodyAtrMult); + if(n < signsRequired) + return; + + ClosePosition(data, MagicNumber); + Print("RSIScalping: reversal escape symbol=", data.symbol, " signs=", n, " need=", signsRequired, + " ATR=", DoubleToString(atr, (int)SymbolInfoInteger(data.symbol, SYMBOL_DIGITS))); +} + +string ErrorDescription(int errorCode) +{ + switch(errorCode) + { + case 4801: return "Symbol not found"; + case 4802: return "Symbol not selected"; + case 4803: return "Symbol not visible"; + case 4804: return "Symbol not available"; + case 4805: return "Cannot load indicator - insufficient history data"; + default: return "Unknown error " + IntegerToString(errorCode); + } +} + +bool InitRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, + ENUM_APPLIED_PRICE RSI_Applied_Price, int MagicNumber, int Slippage) +{ + data.symbol = symbol; + data.isInitialized = false; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("RSIScalping: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; // Return false but don't fail entire EA + } + + // Wait a bit for symbol to be ready + Sleep(100); + + // Try to create RSI indicator with retry logic (for insufficient history in backtesting) + data.rsi_handle = INVALID_HANDLE; + int retryCount = 0; + int maxRetries = 5; + + while(retryCount < maxRetries && data.rsi_handle == INVALID_HANDLE) + { + data.rsi_handle = iRSI(symbol, TimeFrame, RSI_Period, RSI_Applied_Price); + + if(data.rsi_handle == INVALID_HANDLE) + { + int error = GetLastError(); + + // Error 4805 = insufficient history - wait longer and retry + if(error == 4805 && retryCount < maxRetries - 1) + { + Sleep(1000); // Wait 1 second for history to load + retryCount++; + continue; + } + + Print("RSIScalping: Error creating RSI indicator for '", symbol, "' - Error: ", error, " (", ErrorDescription(error), ")"); + return false; // Return false but don't fail entire EA + } + } + + if(data.rsi_handle == INVALID_HANDLE) + { + Print("RSIScalping: Failed to create RSI indicator for '", symbol, "' after ", maxRetries, " retries"); + return false; + } + + data.trade.SetExpertMagicNumber(MagicNumber); + data.trade.SetDeviationInPoints(Slippage); + data.trade.SetTypeFilling(ORDER_FILLING_FOK); + + ArraySetAsSeries(data.rsi_buffer, true); + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + data.isInitialized = true; + + Print("RSIScalping: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +void DeinitRSIScalping(RSIScalpingData& data) +{ + if(data.rsi_handle != INVALID_HANDLE) + IndicatorRelease(data.rsi_handle); +} + +bool UpdateRSI(RSIScalpingData& data) +{ + if(CopyBuffer(data.rsi_handle, 0, 0, 3, data.rsi_buffer) < 3) + return false; + + data.rsi_current = data.rsi_buffer[0]; + data.rsi_prev = data.rsi_buffer[1]; + data.rsi_two_bars_ago = data.rsi_buffer[2]; + + return true; +} + +void CheckExistingPosition(RSIScalpingData& data, ENUM_TIMEFRAMES TimeFrame, int MagicNumber, + double RSI_Oversold, double RSI_Overbought, double RSI_Target_Buy, + double RSI_Target_Sell, int BarsToWait) +{ + // Always check if position exists, even if tracking says it doesn't + bool positionExists = PositionExistsByMagic(data.symbol, MagicNumber); + + if(!positionExists && data.position_open) + { + // Position was closed externally, reset tracking + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + return; + } + + if(!positionExists) + return; + + // Update tracking if we have a position but tracking was lost + if(!data.position_open && positionExists) + { + ulong ticket = GetPositionTicketByMagic(data.symbol, MagicNumber); + if(ticket > 0 && PositionSelectByTicketSymbolAndMagic(ticket, data.symbol, MagicNumber)) + { + data.position_ticket = ticket; + data.position_open = true; + data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + } + } + + // Verify our tracked position still exists + if(data.position_open && data.position_ticket > 0) + { + if(!PositionSelectByTicketSymbolAndMagic(data.position_ticket, data.symbol, MagicNumber)) + { + // Try to find the position again + ulong ticket = GetPositionTicketByMagic(data.symbol, MagicNumber); + if(ticket > 0 && PositionSelectByTicketSymbolAndMagic(ticket, data.symbol, MagicNumber)) + { + data.position_ticket = ticket; + data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + } + else + { + // Position doesn't exist, reset tracking + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + return; + } + } + else + { + // Update position type in case it changed (shouldn't happen, but be safe) + data.current_position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + } + } + + if(data.current_position_type == POSITION_TYPE_BUY) + { + if(data.rsi_current < RSI_Oversold) + { + if(!data.rsi_against_position) + { + data.rsi_against_position = true; + data.bars_against_count = 1; + } + else + { + data.bars_against_count++; + } + + if(data.bars_against_count >= BarsToWait) + { + ClosePosition(data, MagicNumber); + return; + } + } + else + { + if(data.rsi_against_position) + { + data.rsi_against_position = false; + data.bars_against_count = 0; + } + + if(data.rsi_current >= RSI_Target_Buy) + { + ClosePosition(data, MagicNumber); + } + } + } + else if(data.current_position_type == POSITION_TYPE_SELL) + { + if(data.rsi_current > RSI_Overbought) + { + if(!data.rsi_against_position) + { + data.rsi_against_position = true; + data.bars_against_count = 1; + } + else + { + data.bars_against_count++; + } + + if(data.bars_against_count >= BarsToWait) + { + ClosePosition(data, MagicNumber); + return; + } + } + else + { + if(data.rsi_against_position) + { + data.rsi_against_position = false; + data.bars_against_count = 0; + } + + if(data.rsi_current <= RSI_Target_Sell) + { + ClosePosition(data, MagicNumber); + } + } + } +} + +void CheckEntrySignals(RSIScalpingData& data, ENUM_TIMEFRAMES TimeFrame, int MagicNumber, + double RSI_Oversold, double RSI_Overbought, double LotSize) +{ + if(data.rsi_two_bars_ago <= RSI_Oversold && data.rsi_prev > RSI_Oversold) + { + OpenBuyPosition(data, MagicNumber, LotSize); + } + + if(data.rsi_two_bars_ago >= RSI_Overbought && data.rsi_prev < RSI_Overbought) + { + OpenSellPosition(data, MagicNumber, LotSize); + } +} + +//+------------------------------------------------------------------+ +//| Normalize Lot Size According to Symbol Properties | +//+------------------------------------------------------------------+ +double NormalizeLotSize(string symbol, double lotSize) +{ + double minLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); + double maxLot = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); + double lotStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); + + // Round to lot step + if(lotStep > 0) + lotSize = MathFloor(lotSize / lotStep) * lotStep; + + // Apply min/max constraints + if(lotSize < minLot) + lotSize = minLot; + if(lotSize > maxLot) + lotSize = maxLot; + + return lotSize; +} + +void OpenBuyPosition(RSIScalpingData& data, int MagicNumber, double LotSize) +{ + if(PositionExistsByMagic(data.symbol, MagicNumber)) + return; + + // Normalize lot size according to symbol properties + double normalizedLot = NormalizeLotSize(data.symbol, LotSize); + + double ask = SymbolInfoDouble(data.symbol, SYMBOL_ASK); + + if(data.trade.Buy(normalizedLot, data.symbol, ask, 0, 0, "RSI Scalping Buy")) + { + ulong new_ticket = data.trade.ResultOrder(); + if(new_ticket > 0) + { + if(PositionSelectByTicketSymbolAndMagic(new_ticket, data.symbol, MagicNumber)) + { + data.position_ticket = new_ticket; + data.position_open = true; + data.current_position_type = POSITION_TYPE_BUY; + } + } + } +} + +void OpenSellPosition(RSIScalpingData& data, int MagicNumber, double LotSize) +{ + if(PositionExistsByMagic(data.symbol, MagicNumber)) + return; + + // Normalize lot size according to symbol properties + double normalizedLot = NormalizeLotSize(data.symbol, LotSize); + + double bid = SymbolInfoDouble(data.symbol, SYMBOL_BID); + + if(data.trade.Sell(normalizedLot, data.symbol, bid, 0, 0, "RSI Scalping Sell")) + { + ulong new_ticket = data.trade.ResultOrder(); + if(new_ticket > 0) + { + if(PositionSelectByTicketSymbolAndMagic(new_ticket, data.symbol, MagicNumber)) + { + data.position_ticket = new_ticket; + data.position_open = true; + data.current_position_type = POSITION_TYPE_SELL; + } + } + } +} + +void ClosePosition(RSIScalpingData& data, int MagicNumber) +{ + // First verify position still exists + if(!PositionExistsByMagic(data.symbol, MagicNumber)) + { + // Position doesn't exist, reset tracking + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + return; + } + + // Try to close by ticket first (more reliable) + bool closed = false; + if(data.position_ticket > 0) + { + if(PositionSelectByTicket(data.position_ticket)) + { + // Verify it's our position + if(PositionGetString(POSITION_SYMBOL) == data.symbol && + PositionGetInteger(POSITION_MAGIC) == MagicNumber) + { + closed = data.trade.PositionClose(data.position_ticket); + if(!closed) + { + Print("RSIScalping: Failed to close position by ticket ", data.position_ticket, + " - Error: ", data.trade.ResultRetcode(), " (", data.trade.ResultRetcodeDescription(), ")"); + } + } + } + } + + // If ticket method failed, try magic number method + if(!closed) + { + closed = ClosePositionByMagic(data.trade, data.symbol, MagicNumber); + if(!closed) + { + Print("RSIScalping: Failed to close position by magic number for '", data.symbol, + "' - Error: ", data.trade.ResultRetcode(), " (", data.trade.ResultRetcodeDescription(), ")"); + } + } + + // Verify position is actually closed + if(closed) + { + // Wait a moment and verify + Sleep(50); + if(!PositionExistsByMagic(data.symbol, MagicNumber)) + { + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + Print("RSIScalping: Position successfully closed for '", data.symbol, "'"); + } + else + { + Print("RSIScalping: Warning - Close returned success but position still exists for '", data.symbol, "'"); + // Try one more time + Sleep(100); + if(PositionExistsByMagic(data.symbol, MagicNumber)) + { + ClosePositionByMagic(data.trade, data.symbol, MagicNumber); + } + // Reset tracking anyway to prevent getting stuck + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + } + } + else + { + // Close failed, but reset tracking to prevent getting stuck + // The position might have been closed externally + data.position_open = false; + data.position_ticket = 0; + data.rsi_against_position = false; + data.bars_against_count = 0; + } +} + +void ProcessRSIScalping(RSIScalpingData& data, string symbol, ENUM_TIMEFRAMES TimeFrame, int RSI_Period, + ENUM_APPLIED_PRICE RSI_Applied_Price, double RSI_Overbought, + double RSI_Oversold, double RSI_Target_Buy, double RSI_Target_Sell, + int BarsToWait, double LotSize, int MagicNumber, + bool UseReversalEscape, int ReversalATRPeriod, double ReversalAdverseAtrMult, + int ReversalSignsRequired, double ReversalRsiVelocity, double ReversalBodyAtrMult) +{ + // Skip if not initialized (symbol not available) + if(!data.isInitialized) + return; + + data.symbol = symbol; // Update symbol in case it changed + if(Bars(data.symbol, TimeFrame) < RSI_Period + 2) + return; + + const datetime current_bar_time = iTime(data.symbol, TimeFrame, 0); + const bool new_bar = (current_bar_time != data.last_bar_time); + const bool in_pos = data.position_open || PositionExistsByMagic(data.symbol, MagicNumber); + if(!in_pos && !new_bar) + return; + + if(!UpdateRSI(data)) + return; + + if(in_pos && UseReversalEscape) + RS_TryReversalEscape(data, TimeFrame, MagicNumber, ReversalATRPeriod, ReversalAdverseAtrMult, + ReversalSignsRequired, ReversalRsiVelocity, ReversalBodyAtrMult); + + if(!new_bar) + return; + + data.last_bar_time = current_bar_time; + + CheckExistingPosition(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, + RSI_Target_Buy, RSI_Target_Sell, BarsToWait); + + if(!data.position_open && !PositionExistsByMagic(data.symbol, MagicNumber)) + { + CheckEntrySignals(data, TimeFrame, MagicNumber, RSI_Oversold, RSI_Overbought, LotSize); + } +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united-V2_exponential/Strategies/SuperEMAStrategy.mqh b/frontline/united_template/_united-V2_exponential/Strategies/SuperEMAStrategy.mqh new file mode 100644 index 0000000..3dba90e --- /dev/null +++ b/frontline/united_template/_united-V2_exponential/Strategies/SuperEMAStrategy.mqh @@ -0,0 +1,495 @@ +//+------------------------------------------------------------------+ +//| SuperEMAStrategy.mqh — EMA + CCI + MACD (United EA module) | +//+------------------------------------------------------------------+ +#ifndef SUPER_EMA_STRATEGY_MQH +#define SUPER_EMA_STRATEGY_MQH + +#include + +enum ENUM_SE_ENTRY_STYLE +{ + SE_ENTRY_CCIZERO_MACD = 0, + SE_ENTRY_LAMBERT = 1, + SE_ENTRY_PULLBACK = 2 +}; + +struct SuperEMAData +{ + string symbol; + ENUM_TIMEFRAMES tf; + datetime lastBarTime; + CTrade trade; + bool isInitialized; + int slippagePoints; + int magic; + int emaFast; + int emaMid; + int emaSlow; + int emaTrendBars; + int cciPeriod; + double cciOverbought; + double cciOversold; + int pullbackCciLookback; + int macdFast; + int macdSlow; + int macdSignal; + ENUM_SE_ENTRY_STYLE entryStyle; + bool oneTradeOnly; + bool useStructuralSL; + double slBufferPoints; + bool exitOnTrendFlip; + bool exitOnMacdFlip; + bool exitOnCciZeroCross; + int maxHoldingBars; + bool exitBelowMidEma; + bool debugLogs; +}; + +void SuperEMA_Log(SuperEMAData &d, const string s) +{ + if(d.debugLogs) + Print("[SuperEMA] ", s); +} + +bool SuperEMA_IsNewBar(SuperEMAData &d) +{ + datetime t = iTime(d.symbol, d.tf, 0); + if(t <= 0 || t == d.lastBarTime) + return false; + d.lastBarTime = t; + return true; +} + +double SuperEMA_EmaAt(SuperEMAData &d, const int period, const int shift) +{ + int h = iMA(d.symbol, d.tf, period, 0, MODE_EMA, PRICE_CLOSE); + if(h == INVALID_HANDLE) + return 0.0; + double b[1]; + if(CopyBuffer(h, 0, shift, 1, b) <= 0) + { + IndicatorRelease(h); + return 0.0; + } + IndicatorRelease(h); + return b[0]; +} + +double SuperEMA_CciAt(SuperEMAData &d, const int shift) +{ + int h = iCCI(d.symbol, d.tf, d.cciPeriod, PRICE_TYPICAL); + if(h == INVALID_HANDLE) + return 0.0; + double b[1]; + if(CopyBuffer(h, 0, shift, 1, b) <= 0) + { + IndicatorRelease(h); + return 0.0; + } + IndicatorRelease(h); + return b[0]; +} + +bool SuperEMA_MacdHistAt(SuperEMAData &d, const int shift, double &hist) +{ + int h = iMACD(d.symbol, d.tf, d.macdFast, d.macdSlow, d.macdSignal, PRICE_CLOSE); + if(h == INVALID_HANDLE) + return false; + double mainLine[1], sigLine[1]; + if(CopyBuffer(h, 0, shift, 1, mainLine) <= 0 || CopyBuffer(h, 1, shift, 1, sigLine) <= 0) + { + IndicatorRelease(h); + return false; + } + IndicatorRelease(h); + hist = mainLine[0] - sigLine[0]; + return true; +} + +bool SuperEMA_TrendUp(SuperEMAData &d, const int sh) +{ + double c = iClose(d.symbol, d.tf, sh); + double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); + return (emaS > 0.0 && c > emaS); +} + +bool SuperEMA_TrendDown(SuperEMAData &d, const int sh) +{ + double c = iClose(d.symbol, d.tf, sh); + double emaS = SuperEMA_EmaAt(d, d.emaSlow, sh); + return (emaS > 0.0 && c < emaS); +} + +bool SuperEMA_CciCrossAboveZero(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 <= 0.0 && c1 > 0.0); +} + +bool SuperEMA_CciCrossBelowZero(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 >= 0.0 && c1 < 0.0); +} + +bool SuperEMA_CciCrossAbove100(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 < d.cciOverbought && c1 > d.cciOverbought); +} + +bool SuperEMA_CciCrossBelowMinus100(SuperEMAData &d) +{ + double c1 = SuperEMA_CciAt(d, 1); + double c2 = SuperEMA_CciAt(d, 2); + return (c2 > d.cciOversold && c1 < d.cciOversold); +} + +bool SuperEMA_HadCciOversoldRecently(SuperEMAData &d) +{ + for(int i = 2; i <= d.pullbackCciLookback + 1; i++) + { + double v = SuperEMA_CciAt(d, i); + if(v <= d.cciOversold) + return true; + } + return false; +} + +bool SuperEMA_HadCciOverboughtRecently(SuperEMAData &d) +{ + for(int i = 2; i <= d.pullbackCciLookback + 1; i++) + { + double v = SuperEMA_CciAt(d, i); + if(v >= d.cciOverbought) + return true; + } + return false; +} + +bool SuperEMA_PullbackNearFastEmaLong(SuperEMAData &d) +{ + double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); + double lo = iLow(d.symbol, d.tf, 1); + if(emaF <= 0.0) + return false; + return (lo <= emaF + d.slBufferPoints * _Point * 3.0); +} + +bool SuperEMA_PullbackNearFastEmaShort(SuperEMAData &d) +{ + double emaF = SuperEMA_EmaAt(d, d.emaFast, 1); + double hi = iHigh(d.symbol, d.tf, 1); + if(emaF <= 0.0) + return false; + return (hi >= emaF - d.slBufferPoints * _Point * 3.0); +} + +int SuperEMA_PositionsByMagic(SuperEMAData &d) +{ + int n = 0; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong t = PositionGetTicket(i); + if(t == 0) + continue; + if(PositionGetString(POSITION_SYMBOL) == d.symbol && (int)PositionGetInteger(POSITION_MAGIC) == d.magic) + n++; + } + return n; +} + +void SuperEMA_ComputeSLTP(SuperEMAData &d, const bool isBuy, double &sl, double &tp) +{ + sl = 0.0; + tp = 0.0; + if(!d.useStructuralSL) + return; + double emaM = SuperEMA_EmaAt(d, d.emaMid, d.emaTrendBars); + double buf = d.slBufferPoints * _Point; + if(isBuy) + sl = emaM - buf; + else + sl = emaM + buf; +} + +int SuperEMA_BarsSinceOpen(SuperEMAData &d, const datetime openTime) +{ + if(openTime <= 0) + return 0; + int sh = iBarShift(d.symbol, d.tf, openTime, false); + if(sh < 0) + return 999999; + return sh; +} + +void SuperEMA_CloseTicket(SuperEMAData &d, const ulong ticket, const string reason) +{ +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif + d.trade.SetExpertMagicNumber(d.magic); + if(d.trade.PositionClose(ticket)) + SuperEMA_Log(d, "Close: " + reason); +} + +void SuperEMA_ManageExits(SuperEMAData &d) +{ +#ifdef UNITED_MARTINGALE_NO_SELF_CLOSE + return; +#endif + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + ulong ticket = PositionGetTicket(i); + if(ticket == 0) + continue; + if(!PositionSelectByTicket(ticket)) + continue; + if(PositionGetString(POSITION_SYMBOL) != d.symbol) + continue; + if((int)PositionGetInteger(POSITION_MAGIC) != d.magic) + continue; + + ENUM_POSITION_TYPE ptype = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + + double h1 = 0.0; + if(!SuperEMA_MacdHistAt(d, 1, h1)) + continue; + + bool closeLong = false; + bool closeShort = false; + string reason = ""; + + if(d.maxHoldingBars > 0) + { + int held = SuperEMA_BarsSinceOpen(d, openTime); + if(held >= d.maxHoldingBars) + { + if(ptype == POSITION_TYPE_BUY) + closeLong = true; + else + closeShort = true; + reason = "time stop (max bars)"; + } + } + + if(ptype == POSITION_TYPE_BUY) + { + if(d.exitOnTrendFlip && SuperEMA_TrendDown(d, d.emaTrendBars)) + { + closeLong = true; + reason = "trend flip (below slow EMA)"; + } + if(d.exitOnMacdFlip && h1 < 0.0) + { + closeLong = true; + reason = "MACD histogram < 0"; + } + if(d.exitOnCciZeroCross && SuperEMA_CciCrossBelowZero(d)) + { + closeLong = true; + reason = "CCI crossed below zero"; + } + if(d.exitBelowMidEma) + { + double c = iClose(d.symbol, d.tf, 1); + double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); + if(emaM > 0.0 && c < emaM) + { + closeLong = true; + reason = "close below mid EMA"; + } + } + if(closeLong) + SuperEMA_CloseTicket(d, ticket, reason); + } + else if(ptype == POSITION_TYPE_SELL) + { + if(d.exitOnTrendFlip && SuperEMA_TrendUp(d, d.emaTrendBars)) + { + closeShort = true; + reason = "trend flip (above slow EMA)"; + } + if(d.exitOnMacdFlip && h1 > 0.0) + { + closeShort = true; + reason = "MACD histogram > 0"; + } + if(d.exitOnCciZeroCross && SuperEMA_CciCrossAboveZero(d)) + { + closeShort = true; + reason = "CCI crossed above zero"; + } + if(d.exitBelowMidEma) + { + double c = iClose(d.symbol, d.tf, 1); + double emaM = SuperEMA_EmaAt(d, d.emaMid, 1); + if(emaM > 0.0 && c > emaM) + { + closeShort = true; + reason = "close above mid EMA"; + } + } + if(closeShort) + SuperEMA_CloseTicket(d, ticket, reason); + } + } +} + +bool InitSuperEMA(SuperEMAData &d, + const string symbol, + const ENUM_TIMEFRAMES tf, + const int slippagePoints, + const int magic, + const int emaFast, + const int emaMid, + const int emaSlow, + const int emaTrendBars, + const int cciPeriod, + const double cciOverbought, + const double cciOversold, + const int pullbackCciLookback, + const int macdFast, + const int macdSlow, + const int macdSignal, + const ENUM_SE_ENTRY_STYLE entryStyle, + const bool oneTradeOnly, + const bool useStructuralSL, + const double slBufferPoints, + const bool exitOnTrendFlip, + const bool exitOnMacdFlip, + const bool exitOnCciZeroCross, + const int maxHoldingBars, + const bool exitBelowMidEma, + const bool debugLogs) +{ + d.symbol = symbol; + if(StringLen(d.symbol) == 0) + d.symbol = _Symbol; + d.tf = tf; + d.lastBarTime = 0; + d.isInitialized = false; + d.slippagePoints = slippagePoints; + d.magic = magic; + d.emaFast = emaFast; + d.emaMid = emaMid; + d.emaSlow = emaSlow; + d.emaTrendBars = emaTrendBars; + d.cciPeriod = cciPeriod; + d.cciOverbought = cciOverbought; + d.cciOversold = cciOversold; + d.pullbackCciLookback = pullbackCciLookback; + d.macdFast = macdFast; + d.macdSlow = macdSlow; + d.macdSignal = macdSignal; + d.entryStyle = entryStyle; + d.oneTradeOnly = oneTradeOnly; + d.useStructuralSL = useStructuralSL; + d.slBufferPoints = slBufferPoints; + d.exitOnTrendFlip = exitOnTrendFlip; + d.exitOnMacdFlip = exitOnMacdFlip; + d.exitOnCciZeroCross = exitOnCciZeroCross; + d.maxHoldingBars = maxHoldingBars; + d.exitBelowMidEma = exitBelowMidEma; + d.debugLogs = debugLogs; + + if(!SymbolSelect(d.symbol, true)) + { + Print("SuperEMA: symbol not available: ", d.symbol); + return false; + } + d.trade.SetExpertMagicNumber(d.magic); + d.trade.SetDeviationInPoints(d.slippagePoints); + d.isInitialized = true; + return true; +} + +void ProcessSuperEMA(SuperEMAData &d, const double lots) +{ + if(!d.isInitialized) + return; + + if(!SuperEMA_IsNewBar(d)) + return; + + SuperEMA_ManageExits(d); + + const int sh = d.emaTrendBars; + double h1 = 0.0, h2 = 0.0; + if(!SuperEMA_MacdHistAt(d, 1, h1) || !SuperEMA_MacdHistAt(d, 2, h2)) + return; + + bool up = SuperEMA_TrendUp(d, sh); + bool dn = SuperEMA_TrendDown(d, sh); + + bool wantBuy = false; + bool wantSell = false; + + switch(d.entryStyle) + { + case SE_ENTRY_CCIZERO_MACD: + if(up && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0) + wantBuy = true; + if(dn && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0) + wantSell = true; + break; + + case SE_ENTRY_LAMBERT: + if(up && SuperEMA_CciCrossAbove100(d) && h1 > 0.0) + wantBuy = true; + if(dn && SuperEMA_CciCrossBelowMinus100(d) && h1 < 0.0) + wantSell = true; + break; + + case SE_ENTRY_PULLBACK: + if(up && SuperEMA_HadCciOversoldRecently(d) && SuperEMA_CciCrossAboveZero(d) && h1 > 0.0 && SuperEMA_PullbackNearFastEmaLong(d)) + wantBuy = true; + if(dn && SuperEMA_HadCciOverboughtRecently(d) && SuperEMA_CciCrossBelowZero(d) && h1 < 0.0 && SuperEMA_PullbackNearFastEmaShort(d)) + wantSell = true; + break; + } + + if(d.oneTradeOnly && SuperEMA_PositionsByMagic(d) > 0) + { + if(wantBuy && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, true)) + wantBuy = false; + if(wantSell && !United_MayOpenNewEntry(d.symbol, (ulong)d.magic, false)) + wantSell = false; + if(!wantBuy && !wantSell) + return; + } + + MqlTick tick; + if(!SymbolInfoTick(d.symbol, tick)) + return; + + double sl = 0.0, tp = 0.0; + + if(wantBuy && !wantSell) + { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE + SuperEMA_ComputeSLTP(d, true, sl, tp); +#endif + if(d.trade.Buy(lots, d.symbol, tick.ask, sl, tp, "United SuperEMA long")) + SuperEMA_Log(d, StringFormat("BUY ask=%.5f sl=%.5f", tick.ask, sl)); + } + else if(wantSell && !wantBuy) + { +#ifndef UNITED_MARTINGALE_NO_SELF_CLOSE + SuperEMA_ComputeSLTP(d, false, sl, tp); +#endif + if(d.trade.Sell(lots, d.symbol, tick.bid, sl, tp, "United SuperEMA short")) + SuperEMA_Log(d, StringFormat("SELL bid=%.5f sl=%.5f", tick.bid, sl)); + } +} + +void DeinitSuperEMA(SuperEMAData &d) +{ + d.isInitialized = false; +} + +#endif // SUPER_EMA_STRATEGY_MQH diff --git a/frontline/MQL5/_united_dynamic/main.mq5 b/frontline/united_template/_united-V2_exponential/main.mq5 similarity index 56% rename from frontline/MQL5/_united_dynamic/main.mq5 rename to frontline/united_template/_united-V2_exponential/main.mq5 index ec22fc9..0fc64f4 100644 --- a/frontline/MQL5/_united_dynamic/main.mq5 +++ b/frontline/united_template/_united-V2_exponential/main.mq5 @@ -5,7 +5,7 @@ //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" -#property version "1.17" +#property version "1.00" #property strict #include @@ -13,25 +13,33 @@ #include #include #include "MagicNumberHelpers.mqh" - -// Lot globals must exist before strategy .mqh (Darvas uses g_DB_LotSize; EMA/RC/RM use g_ES/g_RC/g_RM) -double g_ES_LotSize; -double g_RC_LotSize; -double g_RM_LotSize; -double g_DB_LotSize; -double g_DynMultLast = 1.0; -double g_equityPeakHighWater = 0.0; // for drawdown lot cap (updated each tick via Refresh) -datetime g_ddLotCapAnchorTime = 0; // tester/attach start — grace period before DD cap may apply - // Include strategy implementations early so structs are available #include "Strategies/DarvasBoxStrategy.mqh" #include "Strategies/EMASlopeDistanceStrategy.mqh" #include "Strategies/RSICrossOverReversalStrategy.mqh" #include "Strategies/RSIMidPointHijackStrategy.mqh" #include "Strategies/RSIScalpingStrategy.mqh" -#include "Strategies/RSIReversalAsianStrategy.mqh" -#include "Strategies/RSISecretSauceStrategy.mqh" #include "Strategies/SuperEMAStrategy.mqh" +#include "Strategies/RSIReversalAsianStrategy.mqh" +#include "Strategies/RSIConsolidationStrategy.mqh" + +//+------------------------------------------------------------------+ +//| Global Lot Size Variables (for dynamic lot sizing) | +//+------------------------------------------------------------------+ +double g_ES_LotSize; // EMA Slope Distance lot size +double g_RC_LotSize; // RSI CrossOver Reversal lot size +double g_RM_LotSize; // RSI MidPoint Hijack lot size +double g_LotScaleGrowth = 1.0; +double g_LotScaleMargin = 1.0; +double g_LotScaleFinal = 1.0; +datetime g_LastScaleLogTime = 0; + +bool United_MayOpenNewEntry(const string symbol, const ulong magic, const bool isBuy) +{ + if(PositionExistsByMagic(symbol, magic)) + return false; + return true; +} //+------------------------------------------------------------------+ //| Strategy Enable/Disable Switches | @@ -46,69 +54,143 @@ input bool EnableRSIScalpingBTCUSD = true; input bool EnableRSIScalpingNVDA = true; input bool EnableRSIScalpingTSLA = true; input bool EnableRSIScalpingXAUUSD = true; -input bool EnableRSIReversalEURUSD = true; // RSI Reversal Asian session (EURUSD) -input bool EnableRSIReversalAUDUSD = true; // RSI Reversal Asian session (AUDUSD) -input bool EnableRSISecretSauceXAUUSD = true; input bool EnableSuperEMA = true; +input bool EnableRSIConsolidation = true; +input bool EnableRSIReversalAsianEURUSD = true; +input bool EnableRSIReversalAsianAUDUSD = true; -//+------------------------------------------------------------------+ -//| SuperEMA — EMA + CCI + MACD (XAUUSD default) | -//+------------------------------------------------------------------+ -input group "=== SuperEMA (EMA + CCI + MACD) ===" -input string SE_Symbol = "XAUUSD"; -input ENUM_TIMEFRAMES SE_Timeframe = PERIOD_M15; -input double SE_LotSize = 0.01; -input int SE_SlippagePoints = 55; -input int SE_MagicNumber = 940001; -input int SE_EmaFast = 40; -input int SE_EmaMid = 180; -input int SE_EmaSlow = 125; -input int SE_EmaTrendBars = 3; -input int SE_CciPeriod = 17; -input double SE_CciOverbought = 80.0; -input double SE_CciOversold = -140.0; -input int SE_PullbackCciLookback = 20; -input int SE_MacdFast = 14; -input int SE_MacdSlow = 38; -input int SE_MacdSignal = 9; -input ENUM_SE_ENTRY_STYLE SE_EntryStyle = SE_ENTRY_LAMBERT; -input bool SE_OneTradeOnly = true; -input bool SE_UseStructuralSL = false; -input double SE_SlBufferPoints = 110; -input bool SE_ExitOnTrendFlip = false; -input bool SE_ExitOnMacdFlip = false; -input bool SE_ExitOnCciZeroCross = true; -input int SE_MaxHoldingBars = 168; -input bool SE_ExitBelowMidEma = false; -input bool SE_DebugLogs = false; +input group "=== Centralized Lot Size (Granular Per Robot) ===" +input double LOT_ES_EMASlopeDistance = 0.05; +input double LOT_RC_RSICrossOver = 0.1; +input double LOT_RM_RSIMidPointHijack = 0.01; +input double LOT_RS_APPL = 100.0; +input double LOT_RS_BTCUSD = 0.15; +input double LOT_RS_NVDA = 60.0; +input double LOT_RS_TSLA = 20.0; +input double LOT_RS_XAUUSD = 0.02; +input double LOT_RRA_EURUSD = 0.01; +input double LOT_RRA_AUDUSD = 0.10; +input double LOT_SE_SuperEMA = 0.01; +input double LOT_RCO_RSIConsolidation = 0.04; -//+------------------------------------------------------------------+ -//| Dynamic lot sizing — scale base lots vs reference deposit | -//| mult=(equity/ref)^exp; maxMult<=0 上不封顶; minMult<=0 不锁下限 | -//+------------------------------------------------------------------+ -input group "=== Dynamic lot sizing (动态手数) ===" -input bool InpDynamicLotEnable = true; // Enable balance/equity-based scaling -input double InpDynamicRefDeposit = 3000.0; // Reference balance (match Tester initial deposit) -input double InpDynamicExponent = 1.15; // 1.0=linear; >1 faster growth; <1 conservative -input double InpDynamicMinMult = 0.0; // <=0 不锁下限; >0 例如0.25 为最低倍数 -input double InpDynamicMaxMult = 0.0; // <=0 动态倍数不封顶; >0 上限封顶 -input bool InpDynamicUseEquity = true; // true=ACCOUNT_EQUITY, false=ACCOUNT_BALANCE -input double InpDynamicStockLotCap = 0.0; // Extra cap for stock CFDs (0 = none) +input group "=== Auto Lot Scaling (Equity/Balance + Margin Guard) ===" +input bool EnableAutoLotScaling = true; +input double ScalingReferenceBalanceUSD = 1000.0; +input double ScalingCurveExponent = 0.70; // 1.0=linear, <1 smoother, >1 aggressive +input double ScaleMinMultiplier = 0.50; +input double ScaleMaxMultiplier = 3.00; +input bool EnableMarginGuard = true; +input double MarginSafeLevelPercent = 420.0; // >= safe: no reduction +input double MarginCriticalLevelPercent = 170.0; +input double MarginGuardMinMultiplier = 0.20; +input int ScaleLogIntervalSeconds = 300; +input bool ShowScaleStatusOnChart = true; -//+------------------------------------------------------------------+ -//| Lot cap: optional account-wide DD from peak, and/or per-strategy | -//| (last *closed* calendar month losing for that magic). | -//+------------------------------------------------------------------+ -input group "=== Drawdown / loser lot cap ===" -input bool InpDdLotCapEnable = true; // master: allow clamping when a mode below triggers -input bool InpDdLotCapGlobalEquityEnable = false; // cap *all* robots when equity DD from peak >= X% (after grace) -input bool InpDdLotCapPerStratEnable = true; // cap only robots whose last closed month was red (by magic) -input bool InpDdLotCapUseEquity = true; // true=ACCOUNT_EQUITY, false=BALANCE (global mode + peak tracking) -input double InpDdLotCapFromPeakPercent = 7.0; // global: trigger if (peak-equity)/peak*100 >= this -input double InpDdLotCapMaxLots = 0.01; // max volume per order while that mode is triggered -input int InpDdLotCapGraceDays = 90; // global only: wait N days from attach before DD cap can apply (0=immediate) -input double InpDdLotCapStratLossThreshold = 0.0; // per-strat: month P/L < -this counts as losing (0 = any loss) -input int InpDdLotCapUpdateSeconds = 3600; // min 60; refresh last-month P/L when adaptive monthly is off +input group "=== Minimum Balance Recommendation ===" +input bool PrintMinimumBalanceRecommendation = true; +input double MinBalPerLot_ES = 1200.0; +input double MinBalPerLot_RC = 900.0; +input double MinBalPerLot_RM = 900.0; +input double MinBalPerLot_RS_APPL = 8.0; +input double MinBalPerLot_RS_BTCUSD = 2500.0; +input double MinBalPerLot_RS_NVDA = 8.0; +input double MinBalPerLot_RS_TSLA = 8.0; +input double MinBalPerLot_RS_XAUUSD = 3000.0; +input double MinBalPerLot_RRA_EURUSD = 1200.0; +input double MinBalPerLot_RRA_AUDUSD = 1200.0; +input double MinBalPerLot_SE = 1500.0; +input double MinBalPerLot_RCO = 1800.0; +input double MinBalanceSafetyBufferPercent = 25.0; +input double MinAbsoluteRecommendedBalance = 300.0; + +double ClampValue(const double v, const double minV, const double maxV) +{ + if(v < minV) return minV; + if(v > maxV) return maxV; + return v; +} + +double GetAutoScaledLot(const double baseLot) +{ + const double scaled = baseLot * g_LotScaleFinal; + if(scaled <= 0.0) + return 0.0; + return scaled; +} + +double ComputeRecommendedMinBalance() +{ + double required = 0.0; + required += LOT_ES_EMASlopeDistance * MinBalPerLot_ES; + required += LOT_RC_RSICrossOver * MinBalPerLot_RC; + required += LOT_RM_RSIMidPointHijack * MinBalPerLot_RM; + required += LOT_RS_APPL * MinBalPerLot_RS_APPL; + required += LOT_RS_BTCUSD * MinBalPerLot_RS_BTCUSD; + required += LOT_RS_NVDA * MinBalPerLot_RS_NVDA; + required += LOT_RS_TSLA * MinBalPerLot_RS_TSLA; + required += LOT_RS_XAUUSD * MinBalPerLot_RS_XAUUSD; + required += LOT_RRA_EURUSD * MinBalPerLot_RRA_EURUSD; + required += LOT_RRA_AUDUSD * MinBalPerLot_RRA_AUDUSD; + required += LOT_SE_SuperEMA * MinBalPerLot_SE; + required += LOT_RCO_RSIConsolidation * MinBalPerLot_RCO; + required *= (1.0 + MinBalanceSafetyBufferPercent / 100.0); + if(required < MinAbsoluteRecommendedBalance) + required = MinAbsoluteRecommendedBalance; + return required; +} + +void UpdateAutoLotScaling() +{ + if(!EnableAutoLotScaling) + { + g_LotScaleGrowth = 1.0; + g_LotScaleMargin = 1.0; + g_LotScaleFinal = 1.0; + return; + } + + double refBalance = ScalingReferenceBalanceUSD; + if(refBalance < 1.0) + refBalance = 1.0; + + const double balance = AccountInfoDouble(ACCOUNT_BALANCE); + const double equity = AccountInfoDouble(ACCOUNT_EQUITY); + double base = MathMax(balance, equity); + if(base < 1.0) + base = 1.0; + + const double growthRatio = base / refBalance; + g_LotScaleGrowth = MathPow(growthRatio, ScalingCurveExponent); + g_LotScaleGrowth = ClampValue(g_LotScaleGrowth, ScaleMinMultiplier, ScaleMaxMultiplier); + + g_LotScaleMargin = 1.0; + if(EnableMarginGuard) + { + const double ml = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); + if(ml <= 0.0 || ml != ml) + { + g_LotScaleMargin = 1.0; + } + else if(ml >= MarginSafeLevelPercent) + { + g_LotScaleMargin = 1.0; + } + else if(ml <= MarginCriticalLevelPercent) + { + g_LotScaleMargin = MarginGuardMinMultiplier; + } + else + { + const double span = MarginSafeLevelPercent - MarginCriticalLevelPercent; + const double t = (span > 0.0) ? (ml - MarginCriticalLevelPercent) / span : 0.0; + g_LotScaleMargin = MarginGuardMinMultiplier + t * (1.0 - MarginGuardMinMultiplier); + } + g_LotScaleMargin = ClampValue(g_LotScaleMargin, MarginGuardMinMultiplier, 1.0); + } + + g_LotScaleFinal = g_LotScaleGrowth * g_LotScaleMargin; + g_LotScaleFinal = ClampValue(g_LotScaleFinal, ScaleMinMultiplier, ScaleMaxMultiplier); +} //+------------------------------------------------------------------+ //| Strategy 1: DarvasBoxXAUUSD | @@ -131,7 +213,6 @@ input double DB_TrendThreshold = 4.94; input int DB_VolumeMA_Period = 110; input double DB_VolumeThresholdMultiplier = 1.5; input int DB_MagicNumber = 135790; -input double DB_BaseLotSize = 0.01; // Base lot at InpDynamicRefDeposit (Darvas) //+------------------------------------------------------------------+ //| Strategy 2: EMASlopeDistanceCocktailXAUUSD | @@ -318,35 +399,21 @@ input double RS_XAUUSD_LotSize = 0.1; input int RS_XAUUSD_MagicNumber = 129102315; input int RS_XAUUSD_Slippage = 3; -//+------------------------------------------------------------------+ -//| Strategy: RSI Secret Sauce XAUUSD (leave zone → re-entry peak/bottom) | -//| Defaults match secret_sauce.set except symbol stays XAUUSD here. | -//+------------------------------------------------------------------+ -input group "=== RSI Secret Sauce XAUUSD ===" -input string RSS_XAUUSD_Symbol = "XAUUSD"; // not BTCUSD — gold chart / portfolio default -input double RSS_XAUUSD_LotSize = 0.1; -input int RSS_XAUUSD_MagicNumber = 789012; -input int RSS_XAUUSD_Slippage = 10; -input ENUM_TIMEFRAMES RSS_XAUUSD_Timeframe = PERIOD_M30; -input int RSS_XAUUSD_RSIPeriod = 16; -input double RSS_XAUUSD_RSIOverbought = 72.5; -input double RSS_XAUUSD_RSIOversold = 32.5; -input int RSS_XAUUSD_RSILookback = 60; -input int RSS_XAUUSD_PeakBars = 2; -input bool RSS_XAUUSD_RequireDivergence = false; -input double RSS_XAUUSD_StopLossATR = 2.75; -input double RSS_XAUUSD_TakeProfitATR = 5.0; -input int RSS_XAUUSD_ATRPeriod = 14; -input bool RSS_XAUUSD_UseSwingStopLoss = false; -input int RSS_XAUUSD_SwingLookback = 30; -input int RSS_XAUUSD_MaxPositions = 1; -input int RSS_XAUUSD_MinBarsBetweenTrades = 7; +input group "=== RSI Scalping Reversal Escape (XAUUSD only) ===" +input bool RS_UseReversalEscape = true; +input int RS_ReversalATRPeriod = 14; +input double RS_ReversalAdverseAtrMult = 5.25; +input int RS_ReversalSignsRequired = 2; +input double RS_ReversalRsiVelocity = 16.0; +input double RS_ReversalBodyAtrMult = 5.1; //+------------------------------------------------------------------+ -//| Strategy 11-12: RSI Reversal (Asian session) EURUSD & AUDUSD | -//| Same logic as RSIReversalAsianEURUSD / RSIReversalAsianAUDUSD EAs | +//| Strategy 11-12: RSI Reversal Asian Strategies | +//| Each RSI Reversal Asian strategy trades on its own symbol: | +//| - EURUSD: Euro/USD | +//| - AUDUSD: Australian Dollar/USD | //+------------------------------------------------------------------+ -input group "=== RSI Reversal EURUSD (Asian session) ===" +input group "=== RSI Reversal Asian EURUSD ===" input string RRA_EURUSD_Symbol = "EURUSD"; input int RRA_EURUSD_RSIPeriod = 28; input double RRA_EURUSD_OverboughtLevel = 60; @@ -365,7 +432,7 @@ input ENUM_TIMEFRAMES RRA_EURUSD_TimeFrame = PERIOD_M15; input int RRA_EURUSD_MagicNumber = 30001; input int RRA_EURUSD_Slippage = 3; -input group "=== RSI Reversal AUDUSD (Asian session) ===" +input group "=== RSI Reversal Asian AUDUSD ===" input string RRA_AUDUSD_Symbol = "AUDUSD"; input int RRA_AUDUSD_RSIPeriod = 28; input double RRA_AUDUSD_OverboughtLevel = 68; @@ -384,45 +451,62 @@ input ENUM_TIMEFRAMES RRA_AUDUSD_TimeFrame = PERIOD_M15; input int RRA_AUDUSD_MagicNumber = 30002; input int RRA_AUDUSD_Slippage = 3; -//+------------------------------------------------------------------+ -//| Chart panel: closed-deal P&L by strategy (magic) + optional open | -//+------------------------------------------------------------------+ -input group "=== Chart profit panel (by magic) ===" -input bool UnitedPanel_Enable = false; // OBJ_LABEL + background on chart -input int UnitedPanel_Seconds = 60; // refresh interval (min 5); history scan once per tick -input int UnitedPanel_Corner = 0; // ENUM_BASE_CORNER e.g. 0=left upper -input int UnitedPanel_X = 8; -input int UnitedPanel_Y = 24; -input int UnitedPanel_Width = 360; -input int UnitedPanel_FontSize = 9; -input int UnitedPanel_XMargin = 6; -input int UnitedPanel_YMargin = 6; -input bool UnitedPanel_ShowFloating = false; // open P/L+swap per magic +input group "=== SuperEMA (EMA + CCI + MACD) ===" +input string SE_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES SE_Timeframe = PERIOD_M15; +input double SE_LotSize = 0.01; +input int SE_SlippagePoints = 55; +input int SE_MagicNumber = 940001; +input int SE_EmaFast = 40; +input int SE_EmaMid = 180; +input int SE_EmaSlow = 125; +input int SE_EmaTrendBars = 3; +input int SE_CciPeriod = 17; +input double SE_CciOverbought = 80.0; +input double SE_CciOversold = -140.0; +input int SE_PullbackCciLookback = 20; +input int SE_MacdFast = 14; +input int SE_MacdSlow = 38; +input int SE_MacdSignal = 9; +input ENUM_SE_ENTRY_STYLE SE_EntryStyle = SE_ENTRY_LAMBERT; +input bool SE_OneTradeOnly = true; +input bool SE_UseStructuralSL = false; +input double SE_SlBufferPoints = 110; +input bool SE_ExitOnTrendFlip = false; +input bool SE_ExitOnMacdFlip = false; +input bool SE_ExitOnCciZeroCross = true; +input int SE_MaxHoldingBars = 168; +input bool SE_ExitBelowMidEma = false; +input bool SE_DebugLogs = false; -enum ENUM_ADAPTIVE_STREAK_UNIT -{ - ADAPTIVE_STREAK_BY_MONTH = 0, // consecutive closed calendar months - ADAPTIVE_STREAK_BY_DAY = 1 // consecutive closed calendar days (server time) -}; - -//+------------------------------------------------------------------+ -//| Pause strategies after consecutive losing periods (month or day)| -//+------------------------------------------------------------------+ -input group "=== Adaptive regime (per robot / magic) ===" -input bool InpAdaptiveEnable = true; // If false, every other InpAdaptive* input is ignored (no streak / canary / pause). Set true to optimize or use adaptive regime. -input ENUM_ADAPTIVE_STREAK_UNIT InpAdaptiveStreakUnit = ADAPTIVE_STREAK_BY_DAY; -input int InpAdaptiveRedStreak = 5; // consecutive red months OR red days (see streak unit) -input double InpAdaptiveRedThreshold = 0.0; // period P/L < -threshold counts red (0 = any loss) -input int InpAdaptiveLookbackMonths = 14; // if unit=MONTH: history depth in months (>= streak+1) -input int InpAdaptiveLookbackDays = 36; // if unit=DAY: closed days of history (>= streak+1) -input int InpAdaptiveUpdateSeconds = 3600; // min 60; how often to recompute -input double InpAdaptiveCanaryLotMult = 0.07; // probation: scale lots (0 = hard pause on streak, no canary) -input int InpAdaptiveHardRetryMonths = 3; // if unit=MONTH: 0=no auto retry; else retry after N months -input int InpAdaptiveHardRetryDays = 32; // if unit=DAY: 0=no auto retry; else retry after N days -input int InpAdaptivePostCanaryCooldownDays = 37; // after successful canary, block re-arming another canary (days) - -#include "UnitedProfitPanel.mqh" -#include "AdaptiveMonthlyRegime.mqh" +input group "=== RSI Consolidation (ranging / mean-reversion) ===" +input string RCO_Symbol = "XAUUSD"; +input ENUM_TIMEFRAMES RCO_SignalTF = PERIOD_M15; +input bool RCO_EntryOnNewBarOnly = true; +input int RCO_ADX_Period = 23; +input double RCO_ADX_Max = 29.0; +input bool RCO_UseATRRatioFilter = true; +input int RCO_ATR_Period = 8; +input int RCO_ATR_SMA_Period = 35; +input double RCO_ATR_Ratio_Max = 1.36; +input bool RCO_UseFlatEMAFilter = true; +input int RCO_EMA_Fast = 13; +input int RCO_EMA_Slow = 17; +input double RCO_EMA_Separation_MaxPct = 0.26; +input int RCO_RSI_Period = 8; +input ENUM_APPLIED_PRICE RCO_RSI_Price = PRICE_OPEN; +input double RCO_RSI_Oversold = 22.0; +input double RCO_RSI_Overbought = 63.0; +input bool RCO_UseRSI_MeanExit = true; +input double RCO_RSI_Exit_Long = 48.0; +input double RCO_RSI_Exit_Short = 52.0; +input double RCO_SL_ATR_Mult = 2.15; +input double RCO_TP_ATR_Mult = 2.40; +input int RCO_MaxBarsInTrade = 54; +input double RCO_Lots = 0.10; +input ulong RCO_MagicNumber = 20250420; +input int RCO_Slippage = 10; +input int RCO_MaxSpreadPoints = 28; //+------------------------------------------------------------------+ //| Global Variables - DarvasBox | @@ -520,137 +604,14 @@ RSIScalpingData rsBTCUSDData; RSIScalpingData rsNVDAData; RSIScalpingData rsTSLAData; RSIScalpingData rsXAUUSDData; +SuperEMAData seData; +RSIConsolidationData rcoData; //+------------------------------------------------------------------+ //| Global Variables - RSI Reversal Asian | //+------------------------------------------------------------------+ RSIReversalAsianData rraEURUSDData; RSIReversalAsianData rraAUDUSDData; -RSISecretSauceData rsSecretSauceXAUUSDData; -SuperEMAData seData; - -//+------------------------------------------------------------------+ -//| Dynamic lot helpers | -//+------------------------------------------------------------------+ -double DynClamp(const double v, const double lo, const double hi) -{ - return MathMax(lo, MathMin(hi, v)); -} - -// maxMult<=0: no ceiling. minMult<=0: no floor on raw (equity/ref)^exp. -double ApplyDynamicMultClamp(const double mult) -{ - double m = mult; - if(InpDynamicMinMult > 0.0) - m = MathMax(m, InpDynamicMinMult); - if(InpDynamicMaxMult > 0.0) - m = MathMin(m, InpDynamicMaxMult); - return m; -} - -double NormalizeVolumeForSymbol(const string symbol, double lots) -{ - double minL = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); - double maxL = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); - double step = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); - if(step > 0.0) - lots = MathFloor(lots / step + 1e-12) * step; - if(lots < minL) lots = minL; - if(lots > maxL) lots = maxL; - return lots; -} - -void UpdateEquityPeakForDdCap() -{ - if(!InpDdLotCapEnable || !InpDdLotCapGlobalEquityEnable) - return; - const double cur = InpDdLotCapUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - if(cur > g_equityPeakHighWater) - g_equityPeakHighWater = cur; -} - -// After dynamic sizing: global equity DD and/or per-strategy last-month loser -> clamp to InpDdLotCapMaxLots. -double LotsAfterDrawdownCap(const string symbol, const double lotsRaw, const int ddStratId = -1) -{ - double lots = NormalizeVolumeForSymbol(symbol, lotsRaw); - if(!InpDdLotCapEnable) - return lots; - - bool needCap = false; - - if(InpDdLotCapGlobalEquityEnable) - { - bool globalCheck = true; - if(InpDdLotCapGraceDays > 0 && g_ddLotCapAnchorTime > 0) - { - const long needSec = (long)InpDdLotCapGraceDays * 86400L; - if((long)(TimeCurrent() - g_ddLotCapAnchorTime) < needSec) - globalCheck = false; - } - if(globalCheck && g_equityPeakHighWater > 0.0) - { - const double cur = InpDdLotCapUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - if(cur < g_equityPeakHighWater) - { - const double ddPct = 100.0 * (g_equityPeakHighWater - cur) / g_equityPeakHighWater; - if(ddPct >= InpDdLotCapFromPeakPercent) - needCap = true; - } - } - } - - if(InpDdLotCapPerStratEnable && ddStratId >= 0 && UnitedAdaptive_StratLastMonthIsLosing(ddStratId)) - needCap = true; - - if(!needCap) - return lots; - return NormalizeVolumeForSymbol(symbol, MathMin(lots, InpDdLotCapMaxLots)); -} - -double GetDynamicMultiplier() -{ - if(!InpDynamicLotEnable) - return 1.0; - double cap = InpDynamicUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - if(cap <= 0.0) - cap = InpDynamicRefDeposit; - double refv = MathMax(InpDynamicRefDeposit, 1.0); - double ratio = cap / refv; - if(ratio <= 0.0) - ratio = 1.0; - double mult = MathPow(ratio, InpDynamicExponent); - return ApplyDynamicMultClamp(mult); -} - -// baseLot = size at reference deposit; optionalCap 0 = no extra ceiling (broker min/max still apply) -double DynamicLotForSymbol(const string symbol, const double baseLot, const double optionalCap = 0.0, const int ddStratId = -1) -{ - double mult = GetDynamicMultiplier(); - g_DynMultLast = mult; - double v = baseLot * mult; - if(optionalCap > 0.0 && v > optionalCap) - v = optionalCap; - return LotsAfterDrawdownCap(symbol, v, ddStratId); -} - -void RefreshDynamicStrategyLots() -{ - UpdateEquityPeakForDdCap(); - - if(!InpDynamicLotEnable) - { - g_ES_LotSize = LotsAfterDrawdownCap(ES_Symbol, ES_LotGröße * UnitedAdaptive_GetLotMult(UNITED_AD_ES), UNITED_AD_ES); - g_RC_LotSize = LotsAfterDrawdownCap(RC_Symbol, RC_lotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RC), UNITED_AD_RC); - g_RM_LotSize = LotsAfterDrawdownCap(RM_Symbol, RM_InpLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RM), UNITED_AD_RM); - g_DB_LotSize = LotsAfterDrawdownCap(DB_Symbol, DB_BaseLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_DARVAS), UNITED_AD_DARVAS); - g_DynMultLast = 1.0; - return; - } - g_ES_LotSize = DynamicLotForSymbol(ES_Symbol, ES_LotGröße * UnitedAdaptive_GetLotMult(UNITED_AD_ES), 0.0, UNITED_AD_ES); - g_RC_LotSize = DynamicLotForSymbol(RC_Symbol, RC_lotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RC), 0.0, UNITED_AD_RC); - g_RM_LotSize = DynamicLotForSymbol(RM_Symbol, RM_InpLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RM), 0.0, UNITED_AD_RM); - g_DB_LotSize = DynamicLotForSymbol(DB_Symbol, DB_BaseLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_DARVAS), 0.0, UNITED_AD_DARVAS); -} //+------------------------------------------------------------------+ //| Expert initialization function | @@ -659,16 +620,21 @@ int OnInit() { int initResult = INIT_SUCCEEDED; - UnitedAdaptive_Init(); + UpdateAutoLotScaling(); + + // Initialize global lot size variables + g_ES_LotSize = GetAutoScaledLot(LOT_ES_EMASlopeDistance); + g_RC_LotSize = GetAutoScaledLot(LOT_RC_RSICrossOver); + g_RM_LotSize = GetAutoScaledLot(LOT_RM_RSIMidPointHijack); - g_equityPeakHighWater = InpDdLotCapUseEquity ? AccountInfoDouble(ACCOUNT_EQUITY) : AccountInfoDouble(ACCOUNT_BALANCE); - if(g_equityPeakHighWater <= 0.0) - g_equityPeakHighWater = MathMax(InpDynamicRefDeposit, 1.0); - g_ddLotCapAnchorTime = TimeCurrent(); - - UnitedAdaptive_UpdateIfDue(); - - RefreshDynamicStrategyLots(); + if(PrintMinimumBalanceRecommendation) + { + const double minBalance = ComputeRecommendedMinBalance(); + Print("Lot scaling initialized | scale=", DoubleToString(g_LotScaleFinal, 3), + " (growth=", DoubleToString(g_LotScaleGrowth, 3), + ", margin=", DoubleToString(g_LotScaleMargin, 3), ")", + " | recommended minimum balance=", DoubleToString(minBalance, 2)); + } // Initialize strategies - log warnings but don't fail entire EA if symbol unavailable if(EnableDarvasBox) @@ -702,31 +668,6 @@ int OnInit() if(EnableRSIScalpingXAUUSD) InitRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_MagicNumber, RS_XAUUSD_Slippage); - - // Initialize RSI Reversal Asian strategies - if(EnableRSIReversalEURUSD) - if(!InitRSIReversalAsian(rraEURUSDData, RRA_EURUSD_Symbol, RRA_EURUSD_RSIPeriod, RRA_EURUSD_OverboughtLevel, RRA_EURUSD_OversoldLevel, - RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, RRA_EURUSD_MaxLotSize, - RRA_EURUSD_MaxSpread, RRA_EURUSD_MaxDuration, RRA_EURUSD_UseStopLoss, - RRA_EURUSD_UseTakeProfit, RRA_EURUSD_UseRSIExit, RRA_EURUSD_RSIExitLevel, - RRA_EURUSD_CloseOutsideSession, RRA_EURUSD_TimeFrame, RRA_EURUSD_MagicNumber, RRA_EURUSD_Slippage)) - Print("Warning: RSIReversalEURUSD strategy failed to initialize for symbol '", RRA_EURUSD_Symbol, "'"); - - if(EnableRSIReversalAUDUSD) - if(!InitRSIReversalAsian(rraAUDUSDData, RRA_AUDUSD_Symbol, RRA_AUDUSD_RSIPeriod, RRA_AUDUSD_OverboughtLevel, RRA_AUDUSD_OversoldLevel, - RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, RRA_AUDUSD_MaxLotSize, - RRA_AUDUSD_MaxSpread, RRA_AUDUSD_MaxDuration, RRA_AUDUSD_UseStopLoss, - RRA_AUDUSD_UseTakeProfit, RRA_AUDUSD_UseRSIExit, RRA_AUDUSD_RSIExitLevel, - RRA_AUDUSD_CloseOutsideSession, RRA_AUDUSD_TimeFrame, RRA_AUDUSD_MagicNumber, RRA_AUDUSD_Slippage)) - Print("Warning: RSIReversalAUDUSD strategy failed to initialize for symbol '", RRA_AUDUSD_Symbol, "'"); - - if(EnableRSISecretSauceXAUUSD) - if(!InitRSISecretSauce(rsSecretSauceXAUUSDData, RSS_XAUUSD_Symbol, RSS_XAUUSD_Timeframe, RSS_XAUUSD_RSIPeriod, - RSS_XAUUSD_RSIOverbought, RSS_XAUUSD_RSIOversold, RSS_XAUUSD_RSILookback, RSS_XAUUSD_PeakBars, - RSS_XAUUSD_RequireDivergence, RSS_XAUUSD_StopLossATR, RSS_XAUUSD_TakeProfitATR, RSS_XAUUSD_ATRPeriod, - RSS_XAUUSD_UseSwingStopLoss, RSS_XAUUSD_SwingLookback, RSS_XAUUSD_MaxPositions, - RSS_XAUUSD_MinBarsBetweenTrades, RSS_XAUUSD_MagicNumber, RSS_XAUUSD_Slippage)) - Print("Warning: RSISecretSauceXAUUSD failed to initialize for symbol '", RSS_XAUUSD_Symbol, "'"); if(EnableSuperEMA) if(!InitSuperEMA(seData, SE_Symbol, SE_Timeframe, SE_SlippagePoints, SE_MagicNumber, @@ -737,19 +678,33 @@ int OnInit() SE_ExitOnTrendFlip, SE_ExitOnMacdFlip, SE_ExitOnCciZeroCross, SE_MaxHoldingBars, SE_ExitBelowMidEma, SE_DebugLogs)) Print("Warning: SuperEMA failed to initialize for symbol '", SE_Symbol, "'"); + + if(EnableRSIConsolidation) + if(!InitRSIConsolidation(rcoData, RCO_Symbol, RCO_SignalTF, RCO_EntryOnNewBarOnly, + RCO_ADX_Period, RCO_ADX_Max, RCO_UseATRRatioFilter, RCO_ATR_Period, RCO_ATR_SMA_Period, RCO_ATR_Ratio_Max, + RCO_UseFlatEMAFilter, RCO_EMA_Fast, RCO_EMA_Slow, RCO_EMA_Separation_MaxPct, + RCO_RSI_Period, RCO_RSI_Price, RCO_RSI_Oversold, RCO_RSI_Overbought, + RCO_UseRSI_MeanExit, RCO_RSI_Exit_Long, RCO_RSI_Exit_Short, RCO_SL_ATR_Mult, RCO_TP_ATR_Mult, + RCO_MaxBarsInTrade, RCO_MagicNumber, RCO_Slippage, RCO_MaxSpreadPoints)) + Print("Warning: RSIConsolidation failed to initialize for symbol '", RCO_Symbol, "'"); + + // Initialize RSI Reversal Asian strategies + if(EnableRSIReversalAsianEURUSD) + if(!InitRSIReversalAsian(rraEURUSDData, RRA_EURUSD_Symbol, RRA_EURUSD_RSIPeriod, RRA_EURUSD_OverboughtLevel, RRA_EURUSD_OversoldLevel, + RRA_EURUSD_TakeProfitPips, RRA_EURUSD_StopLossPips, LOT_RRA_EURUSD, + RRA_EURUSD_MaxSpread, RRA_EURUSD_MaxDuration, RRA_EURUSD_UseStopLoss, + RRA_EURUSD_UseTakeProfit, RRA_EURUSD_UseRSIExit, RRA_EURUSD_RSIExitLevel, + RRA_EURUSD_CloseOutsideSession, RRA_EURUSD_TimeFrame, RRA_EURUSD_MagicNumber, RRA_EURUSD_Slippage)) + Print("Warning: RSIReversalAsianEURUSD strategy failed to initialize for symbol '", RRA_EURUSD_Symbol, "'"); + + if(EnableRSIReversalAsianAUDUSD) + if(!InitRSIReversalAsian(rraAUDUSDData, RRA_AUDUSD_Symbol, RRA_AUDUSD_RSIPeriod, RRA_AUDUSD_OverboughtLevel, RRA_AUDUSD_OversoldLevel, + RRA_AUDUSD_TakeProfitPips, RRA_AUDUSD_StopLossPips, LOT_RRA_AUDUSD, + RRA_AUDUSD_MaxSpread, RRA_AUDUSD_MaxDuration, RRA_AUDUSD_UseStopLoss, + RRA_AUDUSD_UseTakeProfit, RRA_AUDUSD_UseRSIExit, RRA_AUDUSD_RSIExitLevel, + RRA_AUDUSD_CloseOutsideSession, RRA_AUDUSD_TimeFrame, RRA_AUDUSD_MagicNumber, RRA_AUDUSD_Slippage)) + Print("Warning: RSIReversalAsianAUDUSD strategy failed to initialize for symbol '", RRA_AUDUSD_Symbol, "'"); - string acctCur = AccountInfoString(ACCOUNT_CURRENCY); - double eq0 = AccountInfoDouble(ACCOUNT_EQUITY); - double refvInit = MathMax(InpDynamicRefDeposit, 1.0); - double capInit = InpDynamicUseEquity ? eq0 : AccountInfoDouble(ACCOUNT_BALANCE); - if(capInit <= 0.0) - capInit = refvInit; - double ratioInit = capInit / refvInit; - double rawPowInit = MathPow(ratioInit, InpDynamicExponent); - Print("United EA v1.17 ", acctCur, " equity=", DoubleToString(eq0, 2), " equity/ref=", DoubleToString(ratioInit, 6), - " raw^exp=", DoubleToString(rawPowInit, 6), " multOut=", DoubleToString(g_DynMultLast, 6), - " minM=", InpDynamicMinMult, " maxM=", InpDynamicMaxMult, " ref=", InpDynamicRefDeposit, " exp=", InpDynamicExponent, - " lots ES=", g_ES_LotSize, " RC=", g_RC_LotSize, " RM=", g_RM_LotSize, " DB=", g_DB_LotSize); Print("United EA initialized. Active strategies: ", (EnableDarvasBox ? "DarvasBox " : ""), (EnableEMASlopeDistance ? "EMASlope " : ""), @@ -760,29 +715,11 @@ int OnInit() (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : ""), - (EnableRSIReversalEURUSD ? "RSIReversalEURUSD " : ""), - (EnableRSIReversalAUDUSD ? "RSIReversalAUDUSD " : ""), - (EnableRSISecretSauceXAUUSD ? "RSISecretSauceXAUUSD " : ""), - (EnableSuperEMA ? "SuperEMA " : "")); - - EventSetTimer(0); - int timerSec = 0; - if(UnitedPanel_Enable) - timerSec = MathMax(5, UnitedPanel_Seconds); - if(InpAdaptiveEnable) - { - const int adSec = MathMax(60, InpAdaptiveUpdateSeconds); - timerSec = (timerSec == 0) ? adSec : MathMin(timerSec, adSec); - } - if(InpDdLotCapEnable && InpDdLotCapPerStratEnable && !InpAdaptiveEnable) - { - const int ddSec = MathMax(60, InpDdLotCapUpdateSeconds); - timerSec = (timerSec == 0) ? ddSec : MathMin(timerSec, ddSec); - } - if(timerSec > 0) - EventSetTimer(timerSec); - UnitedProfitPanelInit(); - + (EnableSuperEMA ? "SuperEMA " : ""), + (EnableRSIConsolidation ? "RSIConsolidation " : ""), + (EnableRSIReversalAsianEURUSD ? "RSIReversalAsianEURUSD " : ""), + (EnableRSIReversalAsianAUDUSD ? "RSIReversalAsianAUDUSD " : "")); + return initResult; } @@ -791,9 +728,6 @@ int OnInit() //+------------------------------------------------------------------+ void OnDeinit(const int reason) { - EventSetTimer(0); - UnitedProfitPanelDeinit(); - if(EnableDarvasBox) DeinitDarvasBox(); @@ -820,18 +754,18 @@ void OnDeinit(const int reason) if(EnableRSIScalpingXAUUSD) DeinitRSIScalping(rsXAUUSDData); - - if(EnableRSIReversalEURUSD) - DeinitRSIReversalAsian(rraEURUSDData); - - if(EnableRSIReversalAUDUSD) - DeinitRSIReversalAsian(rraAUDUSDData); - - if(EnableRSISecretSauceXAUUSD) - DeinitRSISecretSauce(rsSecretSauceXAUUSDData); if(EnableSuperEMA) DeinitSuperEMA(seData); + + if(EnableRSIConsolidation) + DeinitRSIConsolidation(rcoData); + + if(EnableRSIReversalAsianEURUSD) + DeinitRSIReversalAsian(rraEURUSDData); + + if(EnableRSIReversalAsianAUDUSD) + DeinitRSIReversalAsian(rraAUDUSDData); Print("United EA deinitialized. Reason: ", reason); } @@ -841,84 +775,94 @@ void OnDeinit(const int reason) //+------------------------------------------------------------------+ void OnTick() { - UnitedAdaptive_ProcessCanaryTransitions(); - RefreshDynamicStrategyLots(); - - if(EnableDarvasBox && UnitedAdaptive_StrategyActive(UNITED_AD_DARVAS)) + UpdateAutoLotScaling(); + g_ES_LotSize = GetAutoScaledLot(LOT_ES_EMASlopeDistance); + g_RC_LotSize = GetAutoScaledLot(LOT_RC_RSICrossOver); + g_RM_LotSize = GetAutoScaledLot(LOT_RM_RSIMidPointHijack); + + if(ScaleLogIntervalSeconds > 0) + { + const datetime now = TimeCurrent(); + if(g_LastScaleLogTime == 0 || (now - g_LastScaleLogTime) >= ScaleLogIntervalSeconds) + { + g_LastScaleLogTime = now; + Print("Lot scale update | final=", DoubleToString(g_LotScaleFinal, 3), + " growth=", DoubleToString(g_LotScaleGrowth, 3), + " margin=", DoubleToString(g_LotScaleMargin, 3), + " ml=", DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN_LEVEL), 1), + " eq=", DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY), 2), + " bal=", DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE), 2)); + } + } + + if(ShowScaleStatusOnChart) + { + const double minBalance = ComputeRecommendedMinBalance(); + Comment("Scale=", DoubleToString(g_LotScaleFinal, 3), + " (growth=", DoubleToString(g_LotScaleGrowth, 3), + ", margin=", DoubleToString(g_LotScaleMargin, 3), ")", + " | Rec.Min.Balance=", DoubleToString(minBalance, 2), + " | MarginLevel=", DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN_LEVEL), 1), "%"); + } + + if(EnableDarvasBox) ProcessDarvasBox(DB_Symbol); - if(EnableEMASlopeDistance && UnitedAdaptive_StrategyActive(UNITED_AD_ES)) + if(EnableEMASlopeDistance) ProcessEMASlopeDistance(ES_Symbol); - if(EnableRSICrossOverReversal && UnitedAdaptive_StrategyActive(UNITED_AD_RC)) + if(EnableRSICrossOverReversal) ProcessRSICrossOverReversal(RC_Symbol); - if(EnableRSIMidPointHijack && UnitedAdaptive_StrategyActive(UNITED_AD_RM)) + if(EnableRSIMidPointHijack) ProcessRSIMidPointHijack(RM_Symbol); - if(EnableRSIScalpingAPPL && UnitedAdaptive_StrategyActive(UNITED_AD_RS_APPL)) + if(EnableRSIScalpingAPPL) ProcessRSIScalping(rsAPPLData, RS_APPL_Symbol, RS_APPL_TimeFrame, RS_APPL_RSI_Period, RS_APPL_RSI_Applied_Price, RS_APPL_RSI_Overbought, RS_APPL_RSI_Oversold, RS_APPL_RSI_Target_Buy, RS_APPL_RSI_Target_Sell, - RS_APPL_BarsToWait, - DynamicLotForSymbol(RS_APPL_Symbol, RS_APPL_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RS_APPL), InpDynamicStockLotCap, UNITED_AD_RS_APPL), - RS_APPL_MagicNumber); + RS_APPL_BarsToWait, GetAutoScaledLot(LOT_RS_APPL), RS_APPL_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); - if(EnableRSIScalpingBTCUSD && UnitedAdaptive_StrategyActive(UNITED_AD_RS_BTC)) + if(EnableRSIScalpingBTCUSD) ProcessRSIScalping(rsBTCUSDData, RS_BTCUSD_Symbol, RS_BTCUSD_TimeFrame, RS_BTCUSD_RSI_Period, RS_BTCUSD_RSI_Applied_Price, RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, - RS_BTCUSD_BarsToWait, DynamicLotForSymbol(RS_BTCUSD_Symbol, RS_BTCUSD_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RS_BTC), 0.0, UNITED_AD_RS_BTC), RS_BTCUSD_MagicNumber); + RS_BTCUSD_BarsToWait, GetAutoScaledLot(LOT_RS_BTCUSD), RS_BTCUSD_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); - if(EnableRSIScalpingNVDA && UnitedAdaptive_StrategyActive(UNITED_AD_RS_NVDA)) + if(EnableRSIScalpingNVDA) ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, - RS_NVDA_BarsToWait, - DynamicLotForSymbol(RS_NVDA_Symbol, RS_NVDA_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RS_NVDA), InpDynamicStockLotCap, UNITED_AD_RS_NVDA), - RS_NVDA_MagicNumber); + RS_NVDA_BarsToWait, GetAutoScaledLot(LOT_RS_NVDA), RS_NVDA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); - if(EnableRSIScalpingTSLA && UnitedAdaptive_StrategyActive(UNITED_AD_RS_TSLA)) + if(EnableRSIScalpingTSLA) ProcessRSIScalping(rsTSLAData, RS_TSLA_Symbol, RS_TSLA_TimeFrame, RS_TSLA_RSI_Period, RS_TSLA_RSI_Applied_Price, RS_TSLA_RSI_Overbought, RS_TSLA_RSI_Oversold, RS_TSLA_RSI_Target_Buy, RS_TSLA_RSI_Target_Sell, - RS_TSLA_BarsToWait, - DynamicLotForSymbol(RS_TSLA_Symbol, RS_TSLA_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RS_TSLA), InpDynamicStockLotCap, UNITED_AD_RS_TSLA), - RS_TSLA_MagicNumber); + RS_TSLA_BarsToWait, GetAutoScaledLot(LOT_RS_TSLA), RS_TSLA_MagicNumber, + false, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); - if(EnableRSIScalpingXAUUSD && UnitedAdaptive_StrategyActive(UNITED_AD_RS_XAU)) + if(EnableRSIScalpingXAUUSD) ProcessRSIScalping(rsXAUUSDData, RS_XAUUSD_Symbol, RS_XAUUSD_TimeFrame, RS_XAUUSD_RSI_Period, RS_XAUUSD_RSI_Applied_Price, RS_XAUUSD_RSI_Overbought, RS_XAUUSD_RSI_Oversold, RS_XAUUSD_RSI_Target_Buy, RS_XAUUSD_RSI_Target_Sell, - RS_XAUUSD_BarsToWait, DynamicLotForSymbol(RS_XAUUSD_Symbol, RS_XAUUSD_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RS_XAU), 0.0, UNITED_AD_RS_XAU), RS_XAUUSD_MagicNumber); + RS_XAUUSD_BarsToWait, GetAutoScaledLot(LOT_RS_XAUUSD), RS_XAUUSD_MagicNumber, + RS_UseReversalEscape, RS_ReversalATRPeriod, RS_ReversalAdverseAtrMult, RS_ReversalSignsRequired, + RS_ReversalRsiVelocity, RS_ReversalBodyAtrMult); - if(EnableRSIReversalEURUSD && UnitedAdaptive_StrategyActive(UNITED_AD_RRA_EUR)) - ProcessRSIReversalAsian(rraEURUSDData, DynamicLotForSymbol(RRA_EURUSD_Symbol, RRA_EURUSD_MaxLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RRA_EUR), 0.0, UNITED_AD_RRA_EUR)); + if(EnableRSIReversalAsianEURUSD) + ProcessRSIReversalAsian(rraEURUSDData, GetAutoScaledLot(LOT_RRA_EURUSD)); - if(EnableRSIReversalAUDUSD && UnitedAdaptive_StrategyActive(UNITED_AD_RRA_AUD)) - ProcessRSIReversalAsian(rraAUDUSDData, DynamicLotForSymbol(RRA_AUDUSD_Symbol, RRA_AUDUSD_MaxLotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RRA_AUD), 0.0, UNITED_AD_RRA_AUD)); + if(EnableRSIReversalAsianAUDUSD) + ProcessRSIReversalAsian(rraAUDUSDData, GetAutoScaledLot(LOT_RRA_AUDUSD)); - if(EnableRSISecretSauceXAUUSD && UnitedAdaptive_StrategyActive(UNITED_AD_RSS)) - ProcessRSISecretSauce(rsSecretSauceXAUUSDData, DynamicLotForSymbol(RSS_XAUUSD_Symbol, RSS_XAUUSD_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_RSS), 0.0, UNITED_AD_RSS)); + if(EnableSuperEMA) + ProcessSuperEMA(seData, GetAutoScaledLot(LOT_SE_SuperEMA)); - if(EnableSuperEMA && UnitedAdaptive_StrategyActive(UNITED_AD_SUPEREMA)) - ProcessSuperEMA(seData, DynamicLotForSymbol(SE_Symbol, SE_LotSize * UnitedAdaptive_GetLotMult(UNITED_AD_SUPEREMA), 0.0, UNITED_AD_SUPEREMA)); -} - -//+------------------------------------------------------------------+ -//| Timer — refresh profit panel (history scan) | -//+------------------------------------------------------------------+ -void OnTimer() -{ - if(InpAdaptiveEnable) - UnitedAdaptive_ProcessCanaryTransitions(); - if(InpAdaptiveEnable || (InpDdLotCapEnable && InpDdLotCapPerStratEnable)) - UnitedAdaptive_UpdateIfDue(); - if(UnitedPanel_Enable) - UnitedProfitPanelRefresh(); -} - -//+------------------------------------------------------------------+ -//| Chart events — panel layout on resize | -//+------------------------------------------------------------------+ -void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) -{ - UnitedProfitPanelOnChartEvent(id); + if(EnableRSIConsolidation) + ProcessRSIConsolidation(rcoData, GetAutoScaledLot(LOT_RCO_RSIConsolidation)); } //+------------------------------------------------------------------+ diff --git a/frontline/MQL5/_united_dynamic_cent/report.png b/frontline/united_template/_united-V2_exponential/report.png similarity index 100% rename from frontline/MQL5/_united_dynamic_cent/report.png rename to frontline/united_template/_united-V2_exponential/report.png diff --git a/frontline/MQL5/_united_dynamic_cent/self-evaluate.mq5 b/frontline/united_template/_united-V2_exponential/self-evaluate.mq5 similarity index 92% rename from frontline/MQL5/_united_dynamic_cent/self-evaluate.mq5 rename to frontline/united_template/_united-V2_exponential/self-evaluate.mq5 index 99e078a..b9d92e9 100644 --- a/frontline/MQL5/_united_dynamic_cent/self-evaluate.mq5 +++ b/frontline/united_template/_united-V2_exponential/self-evaluate.mq5 @@ -25,6 +25,7 @@ input bool EnableRSICrossOverReversal = true; input bool EnableRSIMidPointHijack = true; input bool EnableRSIScalpingAPPL = true; input bool EnableRSIScalpingBTCUSD = true; +input bool EnableRSIScalpingMSFT = true; input bool EnableRSIScalpingNVDA = true; input bool EnableRSIScalpingTSLA = true; input bool EnableRSIScalpingXAUUSD = true; @@ -154,6 +155,7 @@ input int RM_InpEMADistancePeriod = 26; //| Each RSI Scalping strategy trades on its own symbol: | //| - APPL: Apple stock (AAPL) | //| - BTCUSD: Bitcoin/USD | +//| - MSFT: Microsoft stock | //| - NVDA: NVIDIA stock | //| - TSLA: Tesla stock | //| - XAUUSD: Gold/USD | @@ -194,6 +196,20 @@ input double RS_BTCUSD_LotSize = 0.1; input int RS_BTCUSD_MagicNumber = 123459123; input int RS_BTCUSD_Slippage = 3; +input group "=== RSI Scalping MSFT - Pepperstone US ===" +input string RS_MSFT_Symbol = "MSFT.US"; // Try: "MSFT.US", "NASDAQ:MSFT", or "MSFT" +input ENUM_TIMEFRAMES RS_MSFT_TimeFrame = PERIOD_H3; +input int RS_MSFT_RSI_Period = 14; +input ENUM_APPLIED_PRICE RS_MSFT_RSI_Applied_Price = PRICE_CLOSE; +input double RS_MSFT_RSI_Overbought = 19; +input double RS_MSFT_RSI_Oversold = 50; +input double RS_MSFT_RSI_Target_Buy = 71; +input double RS_MSFT_RSI_Target_Sell = 70; +input int RS_MSFT_BarsToWait = 1; +input double RS_MSFT_LotSize = 50; +input int RS_MSFT_MagicNumber = 20002; +input int RS_MSFT_Slippage = 3; + input group "=== RSI Scalping NVDA - Pepperstone US ===" input string RS_NVDA_Symbol = "NVDA.US"; // Try: "NVDA.US", "NASDAQ:NVDA", or "NVDA" input ENUM_TIMEFRAMES RS_NVDA_TimeFrame = PERIOD_M15; @@ -349,6 +365,7 @@ RSICrossOverData rcData; RSIMidPointData rmData; RSIScalpingData rsAPPLData; RSIScalpingData rsBTCUSDData; +RSIScalpingData rsMSFTData; RSIScalpingData rsNVDAData; RSIScalpingData rsTSLAData; RSIScalpingData rsXAUUSDData; @@ -363,6 +380,7 @@ double g_RC_LotSize = 0.01; // RSI CrossOver Reversal - start with minimum double g_RM_LotSize = 0.01; // RSI MidPoint Hijack - start with minimum double g_RS_APPL_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_BTCUSD_LotSize = 0.01; // Crypto - start with forex minimum (0.01) +double g_RS_MSFT_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_NVDA_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_TSLA_LotSize = 5.0; // Stock - start with stock minimum (5.0) double g_RS_XAUUSD_LotSize = 0.01; // Forex - start with forex minimum (0.01) @@ -446,6 +464,15 @@ int OnInit() g_RS_BTCUSD_LotSize = minLot; } + if(EnableRSIScalpingMSFT) + { + InitRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, RS_MSFT_MagicNumber, RS_MSFT_Slippage); + RegisterStrategy("RSIScalpingMSFT", RS_MSFT_MagicNumber, RS_MSFT_LotSize, RS_MSFT_Symbol); + // Start with minimum lot size (will be adjusted by performance evaluator) + double minLot = GetMinLotSizeForSymbol(RS_MSFT_Symbol); + g_RS_MSFT_LotSize = minLot; + } + if(EnableRSIScalpingNVDA) { InitRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_MagicNumber, RS_NVDA_Slippage); @@ -492,6 +519,9 @@ int OnInit() adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; @@ -509,6 +539,7 @@ int OnInit() (EnableRSIMidPointHijack ? "RSIMidPoint " : ""), (EnableRSIScalpingAPPL ? "RSIScalpingAPPL " : ""), (EnableRSIScalpingBTCUSD ? "RSIScalpingBTCUSD " : ""), + (EnableRSIScalpingMSFT ? "RSIScalpingMSFT " : ""), (EnableRSIScalpingNVDA ? "RSIScalpingNVDA " : ""), (EnableRSIScalpingTSLA ? "RSIScalpingTSLA " : ""), (EnableRSIScalpingXAUUSD ? "RSIScalpingXAUUSD " : "")); @@ -542,6 +573,9 @@ void OnDeinit(const int reason) if(EnableRSIScalpingBTCUSD) DeinitRSIScalping(rsBTCUSDData); + if(EnableRSIScalpingMSFT) + DeinitRSIScalping(rsMSFTData); + if(EnableRSIScalpingNVDA) DeinitRSIScalping(rsNVDAData); @@ -581,6 +615,9 @@ void OnTick() adjustedLot = GetStrategyLotSize("RSIScalpingBTCUSD", RS_BTCUSD_MagicNumber); if(adjustedLot > 0) g_RS_BTCUSD_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingMSFT", RS_MSFT_MagicNumber); + if(adjustedLot > 0) g_RS_MSFT_LotSize = adjustedLot; + adjustedLot = GetStrategyLotSize("RSIScalpingNVDA", RS_NVDA_MagicNumber); if(adjustedLot > 0) g_RS_NVDA_LotSize = adjustedLot; @@ -613,6 +650,11 @@ void OnTick() RS_BTCUSD_RSI_Overbought, RS_BTCUSD_RSI_Oversold, RS_BTCUSD_RSI_Target_Buy, RS_BTCUSD_RSI_Target_Sell, RS_BTCUSD_BarsToWait, g_RS_BTCUSD_LotSize, RS_BTCUSD_MagicNumber); + if(EnableRSIScalpingMSFT) + ProcessRSIScalping(rsMSFTData, RS_MSFT_Symbol, RS_MSFT_TimeFrame, RS_MSFT_RSI_Period, RS_MSFT_RSI_Applied_Price, + RS_MSFT_RSI_Overbought, RS_MSFT_RSI_Oversold, RS_MSFT_RSI_Target_Buy, RS_MSFT_RSI_Target_Sell, + RS_MSFT_BarsToWait, g_RS_MSFT_LotSize, RS_MSFT_MagicNumber); + if(EnableRSIScalpingNVDA) ProcessRSIScalping(rsNVDAData, RS_NVDA_Symbol, RS_NVDA_TimeFrame, RS_NVDA_RSI_Period, RS_NVDA_RSI_Applied_Price, RS_NVDA_RSI_Overbought, RS_NVDA_RSI_Oversold, RS_NVDA_RSI_Target_Buy, RS_NVDA_RSI_Target_Sell, diff --git a/frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/MagicNumberHelpers.mqh b/frontline/united_template/_united/MagicNumberHelpers.mqh similarity index 89% rename from frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/MagicNumberHelpers.mqh rename to frontline/united_template/_united/MagicNumberHelpers.mqh index 20b66bd..dc1fa31 100644 --- a/frontline/MQL5/RSIScalpingXAUUSD_DeepMarkov/MagicNumberHelpers.mqh +++ b/frontline/united_template/_united/MagicNumberHelpers.mqh @@ -1,28 +1,30 @@ //+------------------------------------------------------------------+ //| MagicNumberHelpers.mqh | //| Copyright 2025, MetaQuotes Ltd. | +//| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" -#include - //+------------------------------------------------------------------+ //| Select position by symbol and magic number | //+------------------------------------------------------------------+ bool PositionSelectByMagic(string symbol, ulong magic_number) { + // First try to find position by symbol if(!PositionSelect(symbol)) return false; - + + // Check if the selected position has the correct magic number if(PositionGetInteger(POSITION_MAGIC) != magic_number) { + // Position exists but wrong magic number, search all positions for(int i = PositionsTotal() - 1; i >= 0; i--) { if(PositionGetTicket(i) > 0) { - if(PositionGetString(POSITION_SYMBOL) == symbol && + if(PositionGetString(POSITION_SYMBOL) == symbol && PositionGetInteger(POSITION_MAGIC) == magic_number) { return true; @@ -31,7 +33,7 @@ bool PositionSelectByMagic(string symbol, ulong magic_number) } return false; } - + return true; } @@ -42,7 +44,7 @@ bool PositionSelectByTicketAndMagic(ulong ticket, ulong magic_number) { if(!PositionSelectByTicket(ticket)) return false; - + return (PositionGetInteger(POSITION_MAGIC) == magic_number); } @@ -53,8 +55,8 @@ bool PositionSelectByTicketSymbolAndMagic(ulong ticket, string symbol, ulong mag { if(!PositionSelectByTicket(ticket)) return false; - - return (PositionGetString(POSITION_SYMBOL) == symbol && + + return (PositionGetString(POSITION_SYMBOL) == symbol && PositionGetInteger(POSITION_MAGIC) == magic_number); } @@ -76,7 +78,7 @@ ulong GetPositionTicketByMagic(string symbol, ulong magic_number) ulong ticket = PositionGetTicket(i); if(ticket > 0) { - if(PositionGetString(POSITION_SYMBOL) == symbol && + if(PositionGetString(POSITION_SYMBOL) == symbol && PositionGetInteger(POSITION_MAGIC) == magic_number) { return ticket; @@ -94,20 +96,20 @@ bool ClosePositionByMagic(CTrade &trade_obj, string symbol, ulong magic_number) ulong ticket = GetPositionTicketByMagic(symbol, magic_number); if(ticket == 0) return false; - + return trade_obj.PositionClose(ticket); } //+------------------------------------------------------------------+ //| Modify position by symbol and magic number | //+------------------------------------------------------------------+ -bool ModifyPositionByMagic(CTrade &trade_obj, string symbol, ulong magic_number, - double sl, double tp) +bool ModifyPositionByMagic(CTrade &trade_obj, string symbol, ulong magic_number, + double sl, double tp) { ulong ticket = GetPositionTicketByMagic(symbol, magic_number); if(ticket == 0) return false; - + return trade_obj.PositionModify(ticket, sl, tp); } @@ -118,7 +120,7 @@ double GetPositionProfitByMagic(string symbol, ulong magic_number) { if(!PositionSelectByMagic(symbol, magic_number)) return 0.0; - + return PositionGetDouble(POSITION_PROFIT); } @@ -129,7 +131,7 @@ ENUM_POSITION_TYPE GetPositionTypeByMagic(string symbol, ulong magic_number) { if(!PositionSelectByMagic(symbol, magic_number)) return WRONG_VALUE; - + return (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); } @@ -144,7 +146,7 @@ int CountPositionsByMagic(string symbol, ulong magic_number) ulong ticket = PositionGetTicket(i); if(ticket > 0) { - if(PositionGetString(POSITION_SYMBOL) == symbol && + if(PositionGetString(POSITION_SYMBOL) == symbol && PositionGetInteger(POSITION_MAGIC) == magic_number) { count++; diff --git a/frontline/united_template/_united/PerformanceEvaluator.mqh b/frontline/united_template/_united/PerformanceEvaluator.mqh new file mode 100644 index 0000000..991f603 --- /dev/null +++ b/frontline/united_template/_united/PerformanceEvaluator.mqh @@ -0,0 +1,607 @@ +//+------------------------------------------------------------------+ +//| PerformanceEvaluator.mqh | +//| Copyright 2025, MetaQuotes Ltd. | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2025, MetaQuotes Ltd." +#property link "https://www.mql5.com" +#property version "1.00" + +//+------------------------------------------------------------------+ +//| Performance Metrics Structure | +//+------------------------------------------------------------------+ +struct StrategyPerformance { + string strategyName; + string symbol; // Store symbol to determine if it's a stock + int magicNumber; + double initialLotSize; + double currentLotSize; + double quarterProfit; + double quarterTrades; + double quarterWins; + double quarterLosses; + double maxDrawdown; + double winRate; + datetime quarterStart; + datetime quarterEnd; + bool isActive; + bool inPenaltyMode; // True if strategy is in penalty (worst performer) + double lotSizeBeforePenalty; // Store lot size before penalty + datetime penaltyStartTime; // When penalty started +}; + +//+------------------------------------------------------------------+ +//| Global Performance Tracking | +//+------------------------------------------------------------------+ +StrategyPerformance strategyPerformances[]; +int totalStrategies = 0; +datetime lastMonthCheck = 0; +datetime currentMonthStart = 0; +datetime currentMonthEnd = 0; + +//+------------------------------------------------------------------+ +//| Performance Adjustment Parameters | +//+------------------------------------------------------------------+ +input group "=== Performance Evaluation Settings ===" +input bool PE_EnableAutoAdjustment = true; // Enable automatic lot size adjustment +input double PE_LotSizeIncreasePercent = 10.0; // % increase for top-ranked strategies +input double PE_LotSizeDecreasePercent = 10.0; // % decrease for bottom-ranked strategies +input double PE_MinLotSize = 0.01; // Minimum lot size for forex/crypto +input double PE_MinLotSizeStocks = 5.0; // Minimum lot size for stocks (5-10 range) +input double PE_MaxLotSize = 100.0; // Maximum lot size after adjustment +input int PE_TopPerformersCount = 3; // Number of top strategies to increase lot size +input int PE_BottomPerformersCount = 3; // Number of bottom strategies to decrease lot size +input bool PE_UseWinRateWeight = true; // Consider win rate in ranking (50% profit, 50% win rate) +input bool PE_EnableBlitzPlay = true; // Enable blitz play: worst performer gets minimum lot size penalty +input bool PE_EnableLogging = true; // Enable performance logging + +//+------------------------------------------------------------------+ +//| Initialize Performance Tracking | +//+------------------------------------------------------------------+ +void InitPerformanceTracking() +{ + // Calculate current month dates + MqlDateTime dt; + TimeToStruct(TimeCurrent(), dt); + + // Determine month start (first day of current month) + dt.day = 1; + dt.hour = 0; + dt.min = 0; + dt.sec = 0; + currentMonthStart = StructToTime(dt); + + // Calculate month end (first day of next month - 1 second) + dt.mon += 1; + if(dt.mon > 12) + { + dt.mon = 1; + dt.year++; + } + currentMonthEnd = StructToTime(dt) - 1; // End of last day of month + + lastMonthCheck = TimeCurrent(); + + if(PE_EnableLogging) + { + Print("Performance Evaluator: Initialized"); + Print("Current Month Start: ", TimeToString(currentMonthStart)); + Print("Current Month End: ", TimeToString(currentMonthEnd)); + } +} + +//+------------------------------------------------------------------+ +//| Check if Symbol is a Stock | +//+------------------------------------------------------------------+ +bool IsStockSymbol(string symbol) +{ + // Check if symbol contains common stock indicators + if(StringFind(symbol, ".US") >= 0) return true; + if(StringFind(symbol, "NASDAQ:") >= 0) return true; + if(StringFind(symbol, "NYSE:") >= 0) return true; + + // Note: Symbol category check removed to avoid enum conversion issues + // String-based checks (.US, NASDAQ:, NYSE:, common tickers) are sufficient + + // Common stock tickers (without .US suffix) + string commonStocks[] = {"AAPL", "MSFT", "NVDA", "TSLA", "GOOGL", "AMZN", "META", "NFLX"}; + for(int i = 0; i < ArraySize(commonStocks); i++) + { + if(StringFind(symbol, commonStocks[i]) == 0) return true; + } + + return false; +} + +//+------------------------------------------------------------------+ +//| Get Minimum Lot Size for Symbol | +//+------------------------------------------------------------------+ +double GetMinLotSizeForSymbol(string symbol) +{ + if(IsStockSymbol(symbol)) + return PE_MinLotSizeStocks; + else + return PE_MinLotSize; +} + +//+------------------------------------------------------------------+ +//| Register Strategy for Performance Tracking | +//+------------------------------------------------------------------+ +void RegisterStrategy(string strategyName, int magicNumber, double initialLotSize, string symbol = "") +{ + // Check if strategy already registered + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].strategyName == strategyName && + strategyPerformances[i].magicNumber == magicNumber) + { + if(PE_EnableLogging) + Print("Performance Evaluator: Strategy '", strategyName, "' already registered"); + return; + } + } + + // Add new strategy + int newSize = ArraySize(strategyPerformances) + 1; + ArrayResize(strategyPerformances, newSize); + + strategyPerformances[newSize - 1].strategyName = strategyName; + strategyPerformances[newSize - 1].symbol = symbol; + strategyPerformances[newSize - 1].magicNumber = magicNumber; + strategyPerformances[newSize - 1].initialLotSize = initialLotSize; + // Start with minimum lot size for safety (symbol-specific minimum) + double minLot = GetMinLotSizeForSymbol(symbol); + strategyPerformances[newSize - 1].currentLotSize = minLot; + strategyPerformances[newSize - 1].quarterProfit = 0.0; + strategyPerformances[newSize - 1].quarterTrades = 0; + strategyPerformances[newSize - 1].quarterWins = 0; + strategyPerformances[newSize - 1].quarterLosses = 0; + strategyPerformances[newSize - 1].maxDrawdown = 0.0; + strategyPerformances[newSize - 1].winRate = 0.0; + strategyPerformances[newSize - 1].quarterStart = currentMonthStart; + strategyPerformances[newSize - 1].quarterEnd = currentMonthEnd; + strategyPerformances[newSize - 1].isActive = true; + strategyPerformances[newSize - 1].inPenaltyMode = false; + strategyPerformances[newSize - 1].lotSizeBeforePenalty = initialLotSize; + strategyPerformances[newSize - 1].penaltyStartTime = 0; + + totalStrategies = newSize; + + if(PE_EnableLogging) + Print("Performance Evaluator: Registered strategy '", strategyName, + "' (Magic: ", magicNumber, ", Initial Lot: ", initialLotSize, ")"); +} + +//+------------------------------------------------------------------+ +//| Update Strategy Performance Metrics | +//+------------------------------------------------------------------+ +void UpdateStrategyPerformance(string strategyName, int magicNumber) +{ + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].strategyName == strategyName && + strategyPerformances[i].magicNumber == magicNumber && + strategyPerformances[i].isActive) + { + // Calculate performance for current quarter + double totalProfit = 0.0; + int totalTrades = 0; + int wins = 0; + int losses = 0; + double maxDD = 0.0; + double peakBalance = 0.0; + + // Scan all closed deals in current quarter + datetime quarterStart = strategyPerformances[i].quarterStart; + datetime quarterEnd = strategyPerformances[i].quarterEnd; + + // Select history for the quarter + if(HistorySelect(quarterStart, quarterEnd)) + { + int totalDeals = HistoryDealsTotal(); + for(int j = 0; j < totalDeals; j++) + { + ulong ticket = HistoryDealGetTicket(j); + if(ticket > 0) + { + long dealMagic = HistoryDealGetInteger(ticket, DEAL_MAGIC); + if(dealMagic == magicNumber) + { + double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); + double swap = HistoryDealGetDouble(ticket, DEAL_SWAP); + double commission = HistoryDealGetDouble(ticket, DEAL_COMMISSION); + double totalDealProfit = profit + swap + commission; + + totalProfit += totalDealProfit; + totalTrades++; + + if(totalDealProfit > 0) + wins++; + else if(totalDealProfit < 0) + losses++; + } + } + } + } + + // Calculate win rate + double winRate = 0.0; + if(totalTrades > 0) + winRate = (double)wins / (double)totalTrades * 100.0; + + // Update metrics + strategyPerformances[i].quarterProfit = totalProfit; + strategyPerformances[i].quarterTrades = totalTrades; + strategyPerformances[i].quarterWins = wins; + strategyPerformances[i].quarterLosses = losses; + strategyPerformances[i].winRate = winRate; + + break; + } + } +} + +//+------------------------------------------------------------------+ +//| Strategy Ranking Structure | +//+------------------------------------------------------------------+ +struct StrategyRank { + int index; + double score; +}; + +//+------------------------------------------------------------------+ +//| Calculate Strategy Score for Ranking | +//+------------------------------------------------------------------+ +double CalculateStrategyScore(int strategyIndex) +{ + double profit = strategyPerformances[strategyIndex].quarterProfit; + double winRate = strategyPerformances[strategyIndex].winRate; + double trades = strategyPerformances[strategyIndex].quarterTrades; + + // Normalize profit (scale to 0-100 range, assuming max profit of $1000) + double normalizedProfit = MathMin(profit / 10.0, 100.0); + if(profit < 0) normalizedProfit = profit / 5.0; // Penalize losses more + + // Calculate score + double score = 0.0; + if(PE_UseWinRateWeight) + { + // 50% profit, 50% win rate (if enough trades) + if(trades >= 5) + score = (normalizedProfit * 0.5) + (winRate * 0.5); + else + score = normalizedProfit; // Not enough trades, use profit only + } + else + { + // Profit only + score = normalizedProfit; + } + + return score; +} + +//+------------------------------------------------------------------+ +//| Check if Month Ended and Evaluate Performance | +//+------------------------------------------------------------------+ +void CheckMonthEnd() +{ + datetime now = TimeCurrent(); + + // Check if we've entered a new month + if(now >= currentMonthEnd) + { + if(PE_EnableLogging) + Print("Performance Evaluator: Month ended. Evaluating and ranking strategies..."); + + // Update performance metrics for all strategies + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + { + UpdateStrategyPerformance(strategyPerformances[i].strategyName, + strategyPerformances[i].magicNumber); + } + } + + // Rank strategies + int activeCount = 0; + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + activeCount++; + } + + if(activeCount > 0) + { + // Create ranking array + StrategyRank ranks[]; + ArrayResize(ranks, activeCount); + int rankIndex = 0; + + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + { + ranks[rankIndex].index = i; + ranks[rankIndex].score = CalculateStrategyScore(i); + rankIndex++; + } + } + + // Sort by score (descending - highest score first) + for(int i = 0; i < activeCount - 1; i++) + { + for(int j = i + 1; j < activeCount; j++) + { + if(ranks[j].score > ranks[i].score) + { + StrategyRank temp = ranks[i]; + ranks[i] = ranks[j]; + ranks[j] = temp; + } + } + } + + // Adjust lot sizes based on ranking + if(PE_EnableAutoAdjustment) + { + // Increase top performers (skip if in penalty mode) + int topCount = MathMin(PE_TopPerformersCount, activeCount); + for(int i = 0; i < topCount; i++) + { + int strategyIdx = ranks[i].index; + + // Skip if strategy is in penalty mode + if(strategyPerformances[strategyIdx].inPenaltyMode) + continue; + + double oldLotSize = strategyPerformances[strategyIdx].currentLotSize; + double newLotSize = oldLotSize * (1.0 + PE_LotSizeIncreasePercent / 100.0); + + if(newLotSize > PE_MaxLotSize) + newLotSize = PE_MaxLotSize; + + strategyPerformances[strategyIdx].currentLotSize = newLotSize; + + if(PE_EnableLogging) + Print("Performance Evaluator: Rank #", (i+1), " - Increasing '", + strategyPerformances[strategyIdx].strategyName, + "' lot size from ", oldLotSize, " to ", newLotSize, + " (Score: ", DoubleToString(ranks[i].score, 2), + ", Profit: $", DoubleToString(strategyPerformances[strategyIdx].quarterProfit, 2), + ", Win Rate: ", DoubleToString(strategyPerformances[strategyIdx].winRate, 2), "%)"); + } + + // Decrease bottom performers (skip worst one if blitz play is enabled) + int bottomCount = MathMin(PE_BottomPerformersCount, activeCount); + int startIdx = activeCount - bottomCount; + + // If blitz play is enabled, skip the worst performer (it will get minimum penalty) + if(PE_EnableBlitzPlay && activeCount > 0) + startIdx = activeCount - bottomCount + 1; + + for(int i = startIdx; i < activeCount; i++) + { + int strategyIdx = ranks[i].index; + + // Skip if strategy is in penalty mode + if(strategyPerformances[strategyIdx].inPenaltyMode) + continue; + + double oldLotSize = strategyPerformances[strategyIdx].currentLotSize; + double newLotSize = oldLotSize * (1.0 - PE_LotSizeDecreasePercent / 100.0); + + // Use symbol-specific minimum lot size + double minLot = GetMinLotSizeForSymbol(strategyPerformances[strategyIdx].symbol); + if(newLotSize < minLot) + newLotSize = minLot; + + strategyPerformances[strategyIdx].currentLotSize = newLotSize; + + if(PE_EnableLogging) + Print("Performance Evaluator: Rank #", (i+1), " - Decreasing '", + strategyPerformances[strategyIdx].strategyName, + "' lot size from ", oldLotSize, " to ", newLotSize, + " (Score: ", DoubleToString(ranks[i].score, 2), + ", Profit: $", DoubleToString(strategyPerformances[strategyIdx].quarterProfit, 2), + ", Win Rate: ", DoubleToString(strategyPerformances[strategyIdx].winRate, 2), "%)"); + } + } + + // Blitz Play: Apply penalty to worst performer + if(PE_EnableBlitzPlay && activeCount > 0) + { + // Find worst performer (last in ranking) + int worstIdx = ranks[activeCount - 1].index; + + // Remove penalty from previous worst performer (if any) + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive && strategyPerformances[i].inPenaltyMode) + { + // Check if penalty period has passed (one month) + if(now - strategyPerformances[i].penaltyStartTime >= 2592000) // ~30 days + { + // Restore lot size to before penalty + strategyPerformances[i].currentLotSize = strategyPerformances[i].lotSizeBeforePenalty; + strategyPerformances[i].inPenaltyMode = false; + strategyPerformances[i].penaltyStartTime = 0; + + if(PE_EnableLogging) + Print("Blitz Play: Penalty removed from '", strategyPerformances[i].strategyName, + "'. Lot size restored to ", strategyPerformances[i].currentLotSize); + } + } + } + + // Apply penalty to new worst performer + if(!strategyPerformances[worstIdx].inPenaltyMode) + { + strategyPerformances[worstIdx].lotSizeBeforePenalty = strategyPerformances[worstIdx].currentLotSize; + // Use symbol-specific minimum lot size + double minLot = GetMinLotSizeForSymbol(strategyPerformances[worstIdx].symbol); + strategyPerformances[worstIdx].currentLotSize = minLot; + strategyPerformances[worstIdx].inPenaltyMode = true; + strategyPerformances[worstIdx].penaltyStartTime = now; + + if(PE_EnableLogging) + Print("Blitz Play: WORST PERFORMER - '", strategyPerformances[worstIdx].strategyName, + "' penalized! Lot size reduced from ", strategyPerformances[worstIdx].lotSizeBeforePenalty, + " to minimum ", minLot, " (Score: ", DoubleToString(ranks[activeCount - 1].score, 2), + ", Profit: $", DoubleToString(strategyPerformances[worstIdx].quarterProfit, 2), ")"); + } + } + + // Log performance report + if(PE_EnableLogging) + { + Print("=== Monthly Performance Ranking ==="); + for(int i = 0; i < activeCount; i++) + { + int strategyIdx = ranks[i].index; + Print("Rank #", (i+1), ": ", strategyPerformances[strategyIdx].strategyName, + " - Score: ", DoubleToString(ranks[i].score, 2), + ", Profit: $", DoubleToString(strategyPerformances[strategyIdx].quarterProfit, 2), + ", Win Rate: ", DoubleToString(strategyPerformances[strategyIdx].winRate, 2), "%", + ", Trades: ", (int)strategyPerformances[strategyIdx].quarterTrades, + ", Lot Size: ", DoubleToString(strategyPerformances[strategyIdx].currentLotSize, 2)); + } + Print("==================================="); + } + } + + // Reset month metrics for all strategies + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + { + strategyPerformances[i].quarterProfit = 0.0; + strategyPerformances[i].quarterTrades = 0; + strategyPerformances[i].quarterWins = 0; + strategyPerformances[i].quarterLosses = 0; + strategyPerformances[i].maxDrawdown = 0.0; + strategyPerformances[i].winRate = 0.0; + } + } + + // Update month dates + MqlDateTime dt; + TimeToStruct(now, dt); + + // First day of current month + dt.day = 1; + dt.hour = 0; + dt.min = 0; + dt.sec = 0; + currentMonthStart = StructToTime(dt); + + // First day of next month - 1 second + dt.mon += 1; + if(dt.mon > 12) + { + dt.mon = 1; + dt.year++; + } + currentMonthEnd = StructToTime(dt) - 1; + + // Update month dates for all strategies + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + strategyPerformances[i].quarterStart = currentMonthStart; + strategyPerformances[i].quarterEnd = currentMonthEnd; + } + + lastMonthCheck = now; + } +} + +//+------------------------------------------------------------------+ +//| Get Current Lot Size for Strategy | +//+------------------------------------------------------------------+ +double GetStrategyLotSize(string strategyName, int magicNumber) +{ + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].strategyName == strategyName && + strategyPerformances[i].magicNumber == magicNumber && + strategyPerformances[i].isActive) + { + return strategyPerformances[i].currentLotSize; + } + } + return 0.0; +} + +//+------------------------------------------------------------------+ +//| Process Performance Evaluation (call from OnTick) | +//+------------------------------------------------------------------+ +void ProcessPerformanceEvaluation() +{ + // Check if month ended + CheckMonthEnd(); + + // Check for penalty expiration (blitz play) + if(PE_EnableBlitzPlay) + { + datetime now = TimeCurrent(); + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive && strategyPerformances[i].inPenaltyMode) + { + // Check if penalty period has passed (one month = ~30 days) + if(now - strategyPerformances[i].penaltyStartTime >= 2592000) + { + // Restore lot size to before penalty + strategyPerformances[i].currentLotSize = strategyPerformances[i].lotSizeBeforePenalty; + strategyPerformances[i].inPenaltyMode = false; + strategyPerformances[i].penaltyStartTime = 0; + + if(PE_EnableLogging) + Print("Blitz Play: Penalty expired for '", strategyPerformances[i].strategyName, + "'. Lot size restored to ", strategyPerformances[i].currentLotSize); + } + } + } + } + + // Update performance metrics periodically (every hour) + static datetime lastUpdate = 0; + if(TimeCurrent() - lastUpdate >= 3600) + { + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + { + UpdateStrategyPerformance(strategyPerformances[i].strategyName, + strategyPerformances[i].magicNumber); + } + } + lastUpdate = TimeCurrent(); + } +} + +//+------------------------------------------------------------------+ +//| Get Performance Summary | +//+------------------------------------------------------------------+ +string GetPerformanceSummary() +{ + string summary = "\n=== Performance Summary ===\n"; + summary += "Current Month: " + TimeToString(currentMonthStart) + " to " + TimeToString(currentMonthEnd) + "\n\n"; + + for(int i = 0; i < ArraySize(strategyPerformances); i++) + { + if(strategyPerformances[i].isActive) + { + summary += strategyPerformances[i].strategyName + ":\n"; + summary += " Profit: $" + DoubleToString(strategyPerformances[i].quarterProfit, 2) + "\n"; + summary += " Trades: " + IntegerToString((int)strategyPerformances[i].quarterTrades) + "\n"; + summary += " Win Rate: " + DoubleToString(strategyPerformances[i].winRate, 2) + "%\n"; + summary += " Lot Size: " + DoubleToString(strategyPerformances[i].currentLotSize, 2) + "\n\n"; + } + } + + return summary; +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united/STRATEGY_CONFIGURATION.md b/frontline/united_template/_united/STRATEGY_CONFIGURATION.md new file mode 100644 index 0000000..799c760 --- /dev/null +++ b/frontline/united_template/_united/STRATEGY_CONFIGURATION.md @@ -0,0 +1,76 @@ +# United EA Strategy Configuration Summary + +## Strategy Symbols and Magic Numbers + +### Strategy 1: DarvasBox +- **Symbol**: XAUUSD (Gold/USD) +- **Magic Number**: 135790 + +### Strategy 2: EMASlopeDistance +- **Symbol**: XAUUSD (Gold/USD) +- **Magic Number**: 12350 + +### Strategy 3: RSICrossOverReversal +- **Symbol**: XAUUSD (Gold/USD) +- **Magic Number**: 7 + +### Strategy 4: RSIMidPointHijack +- **Symbol**: XAUUSD (Gold/USD) +- **Magic Numbers**: + - RSIFollow: 1001 + - RSIReverse: 1002 + - EMACross: 1003 + +### Strategy 5: RSI Scalping APPL (Apple) +- **Symbol**: AAPL (Apple stock) +- **Magic Number**: 20001 +- **Note**: Changed from "APPL" to "AAPL" (correct ticker symbol) + +### Strategy 6: RSI Scalping BTCUSD +- **Symbol**: BTCUSD (Bitcoin/USD) +- **Magic Number**: 123459123 + +### Strategy 7: RSI Scalping MSFT +- **Symbol**: MSFT (Microsoft stock) +- **Magic Number**: 20002 + +### Strategy 8: RSI Scalping NVDA +- **Symbol**: NVDA (NVIDIA stock) +- **Magic Number**: 20003 + +### Strategy 9: RSI Scalping TSLA +- **Symbol**: TSLA (Tesla stock) +- **Magic Number**: 125421321 + +### Strategy 10: RSI Scalping XAUUSD +- **Symbol**: XAUUSD (Gold/USD) +- **Magic Number**: 129102315 + +## Important Notes + +1. **Stock Symbols**: Stock symbols (AAPL, MSFT, NVDA, TSLA) must be: + - Added to Market Watch in MetaTrader 5 + - Available from your broker + - Use the correct ticker symbol (e.g., "AAPL" not "APPL") + +2. **Magic Numbers**: All strategies have unique magic numbers to prevent interference: + - Each strategy can be identified by its magic number + - RSIMidPointHijack uses 3 magic numbers (one for each sub-strategy) + +3. **Symbol Configuration**: Each strategy trades on its own symbol: + - You can change symbols in the input parameters + - The EA will log warnings if a symbol is not available + - Strategies with unavailable symbols will be skipped (EA continues running) + +4. **RSI Scalping Strategies**: + - Each RSI Scalping variant trades on a different symbol + - They all use the same strategy logic but with different parameters + - Buy and sell signals are generated based on RSI levels for each symbol + +## Troubleshooting + +If stock symbols are not working: +1. Check if the symbol exists in your broker's symbol list +2. Add the symbol to Market Watch in MetaTrader 5 +3. Verify the symbol name matches your broker's naming convention +4. Some brokers use prefixes/suffixes (e.g., "NASDAQ:AAPL" or "AAPL.US") diff --git a/frontline/united_template/_united/Strategies/DarvasBoxStrategy.mqh b/frontline/united_template/_united/Strategies/DarvasBoxStrategy.mqh new file mode 100644 index 0000000..6c2d7d5 --- /dev/null +++ b/frontline/united_template/_united/Strategies/DarvasBoxStrategy.mqh @@ -0,0 +1,300 @@ +//+------------------------------------------------------------------+ +//| DarvasBoxStrategy.mqh | +//+------------------------------------------------------------------+ + +bool InitDarvasBox(string symbol) +{ + dbData.symbol = symbol; + dbData.boxHigh = 0; + dbData.boxLow = 0; + dbData.boxFormed = false; + dbData.lastBoxTime = 0; + dbData.boxName = "DarvasBox_" + IntegerToString(DB_MagicNumber) + "_"; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("DarvasBox: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; + } + + Sleep(100); // Wait for symbol to be ready + + dbData.point = SymbolInfoDouble(symbol, SYMBOL_POINT); + dbData.minStopLevel = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * dbData.point; + + dbData.maHandle = iMA(symbol, DB_TrendTimeframe, DB_MA_Period, 0, DB_MA_Method, DB_MA_Price); + dbData.volumeHandle = iVolumes(symbol, PERIOD_CURRENT, VOLUME_TICK); + + if(dbData.maHandle == INVALID_HANDLE || dbData.volumeHandle == INVALID_HANDLE) + { + Print("DarvasBox: Error creating indicators for '", symbol, "'"); + return false; + } + + dbData.trade.SetDeviationInPoints(10); + dbData.trade.SetTypeFilling(ORDER_FILLING_IOC); + dbData.trade.SetAsyncMode(false); + dbData.trade.SetExpertMagicNumber(DB_MagicNumber); + + ObjectsDeleteAll(0, dbData.boxName); + dbData.isInitialized = true; + Print("DarvasBox: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +void DeinitDarvasBox() +{ + if(dbData.maHandle != INVALID_HANDLE) IndicatorRelease(dbData.maHandle); + if(dbData.volumeHandle != INVALID_HANDLE) IndicatorRelease(dbData.volumeHandle); + ObjectsDeleteAll(0, dbData.boxName); +} + +void DrawDarvasBox() +{ + if(!dbData.boxFormed) return; + + datetime time1 = iTime(dbData.symbol, PERIOD_H1, DB_BoxPeriod); + datetime time2 = iTime(dbData.symbol, PERIOD_H1, 0); + + ObjectsDeleteAll(0, dbData.boxName); + + ObjectCreate(0, dbData.boxName + "Top", OBJ_TREND, 0, time1, dbData.boxHigh, time2, dbData.boxHigh); + ObjectCreate(0, dbData.boxName + "Bottom", OBJ_TREND, 0, time1, dbData.boxLow, time2, dbData.boxLow); + + ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_COLOR, DB_BoxColor); + ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_COLOR, DB_BoxColor); + ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_WIDTH, DB_BoxWidth); + ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_WIDTH, DB_BoxWidth); + ObjectSetInteger(0, dbData.boxName + "Top", OBJPROP_RAY_RIGHT, true); + ObjectSetInteger(0, dbData.boxName + "Bottom", OBJPROP_RAY_RIGHT, true); +} + +void CalculateDarvasBox() +{ + double high = 0; + double low = DBL_MAX; + + // Find highest high and lowest low in the period - EXACTLY like original + for(int i = 0; i < DB_BoxPeriod; i++) + { + high = MathMax(high, iHigh(dbData.symbol, PERIOD_H1, i)); + low = MathMin(low, iLow(dbData.symbol, PERIOD_H1, i)); + } + + double range = high - low; + double allowedRange = DB_BoxDeviation * dbData.point; // Use dbData.point instead of _Point + + if(DB_EnableLogging) + { + Print("DarvasBox: Box Calculation - High: ", high, " Low: ", low, " Range: ", range, " Allowed Range: ", allowedRange); + } + + // Check if box is formed - EXACTLY like original + if(range <= allowedRange) + { + dbData.boxHigh = high; + dbData.boxLow = low; + dbData.boxFormed = true; + dbData.lastBoxTime = iTime(dbData.symbol, PERIOD_CURRENT, 0); + + // Draw the box + DrawDarvasBox(); + + if(DB_EnableLogging) + Print("DarvasBox: Box Formed - High: ", dbData.boxHigh, " Low: ", dbData.boxLow, " Time: ", dbData.lastBoxTime); + } + else + { + dbData.boxFormed = false; + // Delete box if it exists + ObjectsDeleteAll(0, dbData.boxName); + } +} + +bool ValidateStopLevels(double price, double &sl, double &tp, ENUM_ORDER_TYPE orderType) +{ + double minSlDistance = MathMax(dbData.minStopLevel, DB_StopLoss * dbData.point); + double minTpDistance = MathMax(dbData.minStopLevel, DB_TakeProfit * dbData.point); + + if(orderType == ORDER_TYPE_BUY) + { + sl = price - minSlDistance; + tp = price + minTpDistance; + } + else + { + sl = price + minSlDistance; + tp = price - minTpDistance; + } + + return true; +} + +bool IsTrendFavorable(ENUM_ORDER_TYPE orderType) +{ + double ma[]; + ArraySetAsSeries(ma, true); + + if(CopyBuffer(dbData.maHandle, 0, 0, 2, ma) <= 0) + return false; + + double currentPrice = SymbolInfoDouble(dbData.symbol, SYMBOL_ASK); + double trendStrength = MathAbs(currentPrice - ma[0]) / dbData.point; + + if(orderType == ORDER_TYPE_BUY) + return (currentPrice > ma[0] && trendStrength > DB_TrendThreshold); + else + return (currentPrice < ma[0] && trendStrength > DB_TrendThreshold); +} + +bool CheckVolumeConditions() +{ + double volumes[]; + ArraySetAsSeries(volumes, true); + + if(CopyBuffer(dbData.volumeHandle, 0, 0, DB_VolumeMA_Period + 1, volumes) <= 0) + return false; + + double volumeMA = 0; + for(int i = 1; i <= DB_VolumeMA_Period; i++) + volumeMA += volumes[i]; + volumeMA /= DB_VolumeMA_Period; + + double currentVolume = volumes[0]; + double volumeRatio = currentVolume / volumeMA; + + return (volumeRatio > DB_VolumeThresholdMultiplier); +} + +bool PlaceOrder(ENUM_ORDER_TYPE orderType, double price, double sl, double tp) +{ + if(!ValidateStopLevels(price, sl, tp, orderType)) + { + if(DB_EnableLogging) + Print("DarvasBox: Order rejected - Stop levels validation failed"); + return false; + } + + if(!IsTrendFavorable(orderType)) + { + if(DB_EnableLogging) + Print("DarvasBox: Order rejected - Trend not favorable for ", EnumToString(orderType)); + return false; + } + + if(!CheckVolumeConditions()) + { + if(DB_EnableLogging) + Print("DarvasBox: Order rejected - Volume conditions not met"); + return false; + } + + bool result = false; + + // Use market price (0) instead of explicit price - this ensures market order execution + // In backtesting, explicit price might fail if price has moved + if(orderType == ORDER_TYPE_BUY) + result = dbData.trade.Buy(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakout"); + else + result = dbData.trade.Sell(0.01, dbData.symbol, 0, sl, tp, "Darvas Box Breakdown"); + + // Always log errors, success only if logging enabled + if(result) + { + if(DB_EnableLogging) + Print("DarvasBox: ", (orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), " Order Placed Successfully"); + } + else + { + // Always log failures with detailed info + uint retcode_uint = dbData.trade.ResultRetcode(); + int retcode = (int)retcode_uint; + string desc = dbData.trade.ResultRetcodeDescription(); + ulong deal = dbData.trade.ResultDeal(); + ulong order = dbData.trade.ResultOrder(); + Print("DarvasBox: ", (orderType == ORDER_TYPE_BUY ? "Buy" : "Sell"), + " Order Failed - Retcode: ", retcode, + ", Description: ", desc, + ", Deal: ", deal, + ", Order: ", order, + ", Symbol: ", dbData.symbol, + ", Requested Price: ", price, + ", SL: ", sl, + ", TP: ", tp); + } + + return result; +} + +void ProcessDarvasBox(string symbol) +{ + // Skip if not initialized (symbol not available) + if(!dbData.isInitialized) + return; + + dbData.symbol = symbol; // Update symbol in case it changed + + // Calculate new box levels - EXACTLY like original (called every tick) + CalculateDarvasBox(); + + // Check for trading signals - EXACTLY like original (checked every tick) + if(dbData.boxFormed) + { + double currentPrice = SymbolInfoDouble(dbData.symbol, SYMBOL_ASK); + long currentVolume_long = iVolume(dbData.symbol, PERIOD_CURRENT, 0); + double currentVolume = (double)currentVolume_long; + + if(DB_EnableLogging) + { + Print("DarvasBox: Current Price: ", currentPrice, " Box High: ", dbData.boxHigh, " Box Low: ", dbData.boxLow); + Print("DarvasBox: Current Volume: ", currentVolume, " Volume Threshold: ", DB_VolumeThreshold); + } + + // Check for breakout above box - EXACTLY like original + if(currentPrice > dbData.boxHigh && currentVolume > DB_VolumeThreshold) + { + if(DB_EnableLogging) + Print("DarvasBox: Breakout Signal Detected - Price above box high"); + + // Buy signal + if(!PositionExistsByMagic(dbData.symbol, (ulong)DB_MagicNumber)) // No existing positions with our magic number + { + double sl = currentPrice - DB_StopLoss * dbData.point; + double tp = currentPrice + DB_TakeProfit * dbData.point; + + if(DB_EnableLogging) + Print("DarvasBox: Preparing Buy Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); + + PlaceOrder(ORDER_TYPE_BUY, currentPrice, sl, tp); + } + else if(DB_EnableLogging) + Print("DarvasBox: Skipping Buy Signal - Position already exists"); + } + + // Check for breakdown below box - EXACTLY like original + if(currentPrice < dbData.boxLow && currentVolume > DB_VolumeThreshold) + { + if(DB_EnableLogging) + Print("DarvasBox: Breakdown Signal Detected - Price below box low"); + + // Sell signal + if(!PositionExistsByMagic(dbData.symbol, (ulong)DB_MagicNumber)) // No existing positions with our magic number + { + double sl = currentPrice + DB_StopLoss * dbData.point; + double tp = currentPrice - DB_TakeProfit * dbData.point; + + if(DB_EnableLogging) + Print("DarvasBox: Preparing Sell Order - Price: ", currentPrice, " SL: ", sl, " TP: ", tp); + + PlaceOrder(ORDER_TYPE_SELL, currentPrice, sl, tp); + } + else if(DB_EnableLogging) + Print("DarvasBox: Skipping Sell Signal - Position already exists"); + } + } + else if(DB_EnableLogging) + Print("DarvasBox: No Box Formed - Waiting for consolidation"); +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united/Strategies/EMASlopeDistanceStrategy.mqh b/frontline/united_template/_united/Strategies/EMASlopeDistanceStrategy.mqh new file mode 100644 index 0000000..70e4502 --- /dev/null +++ b/frontline/united_template/_united/Strategies/EMASlopeDistanceStrategy.mqh @@ -0,0 +1,496 @@ +//+------------------------------------------------------------------+ +//| EMASlopeDistanceStrategy.mqh | +//+------------------------------------------------------------------+ + +bool InitEMASlopeDistance(string symbol) +{ + esData.symbol = symbol; + esData.letzte_überwachung_zeit = 0; + esData.überwachung_aktiv = false; + esData.preis_trigger_aktiv = false; + esData.steigung_trigger_aktiv = false; + esData.ticket = 0; + esData.trades_in_current_crossover = 0; + esData.crossover_detected = false; + esData.trade_open_time = 0; + esData.last_bar_time = 0; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("EMASlopeDistance: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; + } + + Sleep(100); // Wait for symbol to be ready + + esData.trade.SetExpertMagicNumber(ES_MagicNumber); + esData.trade.SetDeviationInPoints(10); + esData.trade.SetTypeFilling(ORDER_FILLING_IOC); + + esData.ema_handle = iMA(symbol, ES_Timeframe, ES_EMA_Periode, 0, MODE_EMA, PRICE_CLOSE); + + if(esData.ema_handle == INVALID_HANDLE) + { + Print("EMASlopeDistance: Error creating EMA indicator for '", symbol, "'"); + return false; + } + + ArraySetAsSeries(esData.ema_array, true); + esData.isInitialized = true; + Print("EMASlopeDistance: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +void DeinitEMASlopeDistance() +{ + if(esData.ema_handle != INVALID_HANDLE) + IndicatorRelease(esData.ema_handle); +} + +//+------------------------------------------------------------------+ +//| EMA Berechnung (EMA Calculation) | +//+------------------------------------------------------------------+ +void BerechneEMA() +{ + //--- EMA Werte vom Indicator kopieren (Copy EMA values from indicator) + int copied = CopyBuffer(esData.ema_handle, 0, 0, 3, esData.ema_array); + + if(copied <= 0) + { + Print("TRACE: Fehler beim Kopieren der EMA Werte - Copied: ", copied); + return; + } + + Print("TRACE: EMA Werte kopiert: ", copied, " Bars"); + Print("TRACE: EMA [0]: ", esData.ema_array[0], " [1]: ", esData.ema_array[1], " [2]: ", esData.ema_array[2]); +} + +//+------------------------------------------------------------------+ +//| Trigger-Bedingungen prüfen (Check trigger conditions) | +//+------------------------------------------------------------------+ +void PrüfeTrigger() +{ + if(ArraySize(esData.ema_array) < 2) + { + Print("TRACE: Array zu klein - Größe: ", ArraySize(esData.ema_array)); + return; + } + + //--- Aktuelle Werte (Current values) + double aktueller_preis = SymbolInfoDouble(esData.symbol, SYMBOL_BID); + double aktueller_ask = SymbolInfoDouble(esData.symbol, SYMBOL_ASK); + double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); + int digits = (int)SymbolInfoInteger(esData.symbol, SYMBOL_DIGITS); + double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); + double pips_multiplier = (digits == 3 || digits == 5) ? 10.0 : 1.0; + + //--- EMA Werte in Variablen (EMA values in variables) + double ema_aktuell = esData.ema_array[0]; + double ema_vorher = esData.ema_array[1]; + + //--- EMA Crossover Erkennung (EMA Crossover Detection) + // Prüfe ob Preis die EMA kreuzt (Check if price crosses EMA) + static double last_close = 0; + static double last_ema = 0; + + if(last_close != 0 && last_ema != 0) + { + bool crossover_bullish = (last_close <= last_ema) && (aktueller_close > ema_aktuell); + bool crossover_bearish = (last_close >= last_ema) && (aktueller_close < ema_aktuell); + + //--- Neues Crossover-Ereignis erkannt (New crossover event detected) + if(crossover_bullish || crossover_bearish) + { + esData.trades_in_current_crossover = 0; // Reset trade counter + Print("TRACE: EMA Crossover erkannt - ", (crossover_bullish ? "BULLISH" : "BEARISH"), " - Trade-Counter zurückgesetzt"); + Print("TRACE: Vorher: Close=", last_close, " EMA=", last_ema, " Jetzt: Close=", aktueller_close, " EMA=", ema_aktuell); + } + } + + //--- Aktuelle Werte für nächsten Vergleich speichern (Save current values for next comparison) + last_close = aktueller_close; + last_ema = ema_aktuell; + + //--- Preisbewegung zur EMA prüfen (Check price action to EMA) + double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / point / pips_multiplier; + + Print("TRACE: Preis-Abstand: ", preis_abstand, " Pips (Schwelle: ", ES_PreisSchwelle, ")"); + Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); + Print("TRACE: Trades im aktuellen Crossover: ", esData.trades_in_current_crossover, "/", ES_MaxTradesPerCrossover); + + if(preis_abstand > ES_PreisSchwelle && !esData.preis_trigger_aktiv) + { + esData.preis_trigger_aktiv = true; + Print("TRACE: Preis-Trigger aktiviert: ", preis_abstand, " Pips"); + } + + //--- EMA Steigung prüfen (Check EMA slope) + double steigung = (ema_aktuell - ema_vorher) / point / pips_multiplier; + + Print("TRACE: EMA Steigung: ", steigung, " Pips (Schwelle: ", ES_SteigungSchwelle, ")"); + + if(MathAbs(steigung) > ES_SteigungSchwelle && !esData.steigung_trigger_aktiv) + { + esData.steigung_trigger_aktiv = true; + Print("TRACE: Steigungs-Trigger aktiviert: ", steigung, " Pips"); + } + + //--- Überwachung starten wenn beide Trigger aktiv sind (Start monitoring when both triggers are active) + if(esData.preis_trigger_aktiv && esData.steigung_trigger_aktiv && !esData.überwachung_aktiv) + { + esData.überwachung_aktiv = true; + + if(ES_UseBarData) + { + esData.letzte_überwachung_zeit = iTime(esData.symbol, ES_Timeframe, 0); // Aktuelle Bar-Zeit + Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Bar: ", TimeToString(esData.letzte_überwachung_zeit), ")"); + } + else + { + esData.letzte_überwachung_zeit = TimeCurrent(); // Aktuelle Tick-Zeit + Print("TRACE: Überwachung gestartet - Beide Trigger aktiv (Tick)"); + } + } + + //--- Trade platzieren wenn Überwachung aktiv und Preis über/unter EMA (Place trade when monitoring active and price above/below EMA) + if(esData.überwachung_aktiv) + { + bool bullish_signal = aktueller_close > ema_aktuell; + bool bearish_signal = aktueller_close < ema_aktuell; + + Print("TRACE: Signal Check - Bullish: ", bullish_signal, " Bearish: ", bearish_signal); + Print("TRACE: Close: ", aktueller_close, " EMA: ", ema_aktuell); + Print("TRACE: Differenz: ", aktueller_close - ema_aktuell); + + //--- Trade-Limit prüfen (Check trade limit) + if(esData.trades_in_current_crossover >= ES_MaxTradesPerCrossover) + { + Print("TRACE: Trade-Limit erreicht (", ES_MaxTradesPerCrossover, ") - Kein neuer Trade"); + return; + } + + if(bullish_signal && !PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) + { + Print("TRACE: Versuche KAUF-Trade zu platzieren (Trade #", esData.trades_in_current_crossover + 1, ")"); + if(PlatziereTrade(ORDER_TYPE_BUY)) + { + esData.trades_in_current_crossover++; + } + } + else if(bearish_signal && !PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) + { + Print("TRACE: Versuche VERKAUF-Trade zu platzieren (Trade #", esData.trades_in_current_crossover + 1, ")"); + if(PlatziereTrade(ORDER_TYPE_SELL)) + { + esData.trades_in_current_crossover++; + } + } + else if(PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) + { + Print("TRACE: Position bereits offen - kein neuer Trade"); + } + } +} + +//+------------------------------------------------------------------+ +//| Trade platzieren (Place trade) | +//+------------------------------------------------------------------+ +bool PlatziereTrade(ENUM_ORDER_TYPE order_type) +{ + Print("TRACE: Versuche Trade zu platzieren - Typ: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF"); + Print("TRACE: Lot: ", g_ES_LotSize); + + bool success = false; + + if(order_type == ORDER_TYPE_BUY) + { + success = esData.trade.Buy(g_ES_LotSize, esData.symbol, 0, 0, 0, "EMA Crossover Trade"); + } + else + { + success = esData.trade.Sell(g_ES_LotSize, esData.symbol, 0, 0, 0, "EMA Crossover Trade"); + } + + if(success) + { + esData.ticket = (int)esData.trade.ResultOrder(); + Print("TRACE: Trade erfolgreich platziert: ", (order_type == ORDER_TYPE_BUY) ? "KAUF" : "VERKAUF", " Ticket: ", esData.ticket); + + //--- Trade-Öffnungszeit speichern (Save trade opening time) + esData.trade_open_time = iTime(esData.symbol, ES_Timeframe, 0); + Print("TRACE: Trade-Öffnungszeit: ", TimeToString(esData.trade_open_time)); + + //--- Überwachung zurücksetzen (Reset monitoring) + esData.überwachung_aktiv = false; + esData.preis_trigger_aktiv = false; + esData.steigung_trigger_aktiv = false; + + return true; + } + else + { + Print("TRACE: Fehler beim Platzieren des Trades - Retcode: ", esData.trade.ResultRetcode()); + Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); + + return false; + } +} + +//+------------------------------------------------------------------+ +//| Trades verwalten (Manage trades) | +//+------------------------------------------------------------------+ +void VerwalteTrades() +{ + if(!PositionSelectByMagic(esData.symbol, (ulong)ES_MagicNumber)) + return; + + double position_profit = PositionGetDouble(POSITION_PROFIT); + double position_open_price = PositionGetDouble(POSITION_PRICE_OPEN); + double current_price = PositionGetDouble(POSITION_PRICE_CURRENT); + ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + + int digits = (int)SymbolInfoInteger(esData.symbol, SYMBOL_DIGITS); + double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); + double pips_multiplier = (digits == 3 || digits == 5) ? 10.0 : 1.0; + double trailing_stop_pips = ES_TrailingStop; + + //--- Gleitender Stop (Trailing Stop) - nur wenn Position im Profit ist + if(position_profit > 0) // Only apply trailing stop when in profit + { + if(position_type == POSITION_TYPE_BUY) + { + double new_stop_loss = current_price - (trailing_stop_pips * point * pips_multiplier); + double current_stop_loss = PositionGetDouble(POSITION_SL); + + // Only move stop loss if new stop is higher than current stop + if(new_stop_loss > current_stop_loss) + { + ÄndereStopLoss(new_stop_loss); + } + } + else if(position_type == POSITION_TYPE_SELL) + { + double new_stop_loss = current_price + (trailing_stop_pips * point * pips_multiplier); + double current_stop_loss = PositionGetDouble(POSITION_SL); + + // Only move stop loss if new stop is lower than current stop + if(new_stop_loss < current_stop_loss || current_stop_loss == 0) + { + ÄndereStopLoss(new_stop_loss); + } + } + } + + //--- Ausstieg bei Preis unter/über EMA (Exit when price below/above EMA) + if(ArraySize(esData.ema_array) >= 1) + { + double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); + double ema_aktuell = esData.ema_array[0]; + bool exit_bullish = (position_type == POSITION_TYPE_SELL && aktueller_close > ema_aktuell); + bool exit_bearish = (position_type == POSITION_TYPE_BUY && aktueller_close < ema_aktuell); + + if(exit_bullish || exit_bearish) + { + Print("TRACE: Ausstiegssignal - Close: ", aktueller_close, " EMA: ", ema_aktuell); + SchließePosition("EMA Crossover Exit"); + + Print("TRACE: Position geschlossen - Trade-Counter bleibt bei ", esData.trades_in_current_crossover); + } + } + + //--- Profit-Prüfung nach X Bars (Profit check after X bars) + if(ES_CloseUnprofitableTrades && esData.trade_open_time != 0 && PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)) + { + Print("TRACE: Profit-Prüfung aktiviert - CloseUnprofitableTrades: ", ES_CloseUnprofitableTrades); + PrüfeProfitNachBars(); + } + else if(!ES_CloseUnprofitableTrades) + { + Print("TRACE: Profit-Prüfung deaktiviert - CloseUnprofitableTrades: ", ES_CloseUnprofitableTrades); + } +} + +//+------------------------------------------------------------------+ +//| Profit-Prüfung nach X Bars (Profit check after X bars) | +//+------------------------------------------------------------------+ +void PrüfeProfitNachBars() +{ + if(!PositionSelectByMagic(esData.symbol, (ulong)ES_MagicNumber)) + { + return; // Keine Position offen + } + + datetime current_bar_time = iTime(esData.symbol, ES_Timeframe, 0); + int bars_since_trade_open = iBarShift(esData.symbol, ES_Timeframe, esData.trade_open_time); + + Print("TRACE: Bars seit Trade-Öffnung: ", bars_since_trade_open, "/", ES_ProfitCheckBars); + + //--- Prüfe ob genügend Bars vergangen sind (Check if enough bars have passed) + if(bars_since_trade_open >= ES_ProfitCheckBars) + { + double position_profit = PositionGetDouble(POSITION_PROFIT); + double position_volume = PositionGetDouble(POSITION_VOLUME); + ENUM_POSITION_TYPE position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + + Print("TRACE: Profit-Prüfung nach ", ES_ProfitCheckBars, " Bars"); + Print("TRACE: Position Profit: ", position_profit, " USD"); + + //--- Schließe Position wenn nicht im Profit (Close position if not in profit) + if(position_profit <= 0) + { + Print("TRACE: Position nicht im Profit - Schließe Position"); + SchließePosition("Profit Check - Unprofitable"); + + //--- Trade-Öffnungszeit zurücksetzen (Reset trade opening time) + esData.trade_open_time = 0; + Print("TRACE: Trade-Öffnungszeit zurückgesetzt"); + } + else + { + Print("TRACE: Position im Profit - Behalte Position"); + //--- Trade-Öffnungszeit zurücksetzen um weitere Prüfungen zu vermeiden (Reset to avoid further checks) + esData.trade_open_time = 0; + } + } +} + +//+------------------------------------------------------------------+ +//| Stop Loss ändern (Modify Stop Loss) | +//+------------------------------------------------------------------+ +void ÄndereStopLoss(double new_stop_loss) +{ + Print("TRACE: Versuche Stop Loss zu ändern auf: ", new_stop_loss); + + bool success = ModifyPositionByMagic(esData.trade, esData.symbol, (ulong)ES_MagicNumber, new_stop_loss, PositionGetDouble(POSITION_TP)); + + if(success) + { + Print("TRACE: Stop Loss erfolgreich geändert auf: ", new_stop_loss); + } + else + { + Print("TRACE: Fehler beim Ändern des Stop Loss - Retcode: ", esData.trade.ResultRetcode()); + Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); + } +} + +//+------------------------------------------------------------------+ +//| Position schließen (Close position) | +//+------------------------------------------------------------------+ +void SchließePosition(string reason = "Unbekannt") +{ + Print("TRACE: Versuche Position zu schließen - Grund: ", reason); + + bool success = ClosePositionByMagic(esData.trade, esData.symbol, (ulong)ES_MagicNumber); + + if(success) + { + Print("TRACE: Position erfolgreich geschlossen - Grund: ", reason); + } + else + { + Print("TRACE: Fehler beim Schließen der Position - Retcode: ", esData.trade.ResultRetcode()); + Print("TRACE: Fehlerbeschreibung: ", esData.trade.ResultRetcodeDescription()); + } +} + +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void ProcessEMASlopeDistance(string symbol) +{ + // Skip if not initialized (symbol not available) + if(!esData.isInitialized) + return; + + esData.symbol = symbol; // Update symbol in case it changed + + //--- Bar-Daten oder Tick-Daten verwenden (Use bar data or tick data) + if(ES_UseBarData) + { + //--- Nur bei neuen Bars ausführen (Only execute on new bars) + datetime current_bar_time = iTime(esData.symbol, ES_Timeframe, 0); + + if(current_bar_time == esData.last_bar_time) + { + return; // Kein neuer Bar, nichts tun + } + + esData.last_bar_time = current_bar_time; + } + + //--- EMA Werte berechnen (Calculate EMA values) + BerechneEMA(); + + //--- Debug: Aktuelle Werte ausgeben (Debug: Output current values) + if(ArraySize(esData.ema_array) > 0) + { + double aktueller_close = iClose(esData.symbol, ES_Timeframe, 0); + double ema_aktuell = esData.ema_array[0]; + double ema_vorher = esData.ema_array[1]; + int digits = (int)SymbolInfoInteger(esData.symbol, SYMBOL_DIGITS); + double point = SymbolInfoDouble(esData.symbol, SYMBOL_POINT); + double preis_abstand = MathAbs(aktueller_close - ema_aktuell) / point; + double steigung = (ema_aktuell - ema_vorher) / point; + + if(ES_UseBarData) + { + Print("=== DEBUG INFO (Neuer Bar) ==="); + Print("Bar Zeit: ", TimeToString(iTime(esData.symbol, ES_Timeframe, 0))); + } + else + { + Print("=== DEBUG INFO (Tick) ==="); + } + + Print("Aktueller Close: ", aktueller_close); + Print("EMA: ", ema_aktuell); + Print("Preis-Abstand: ", preis_abstand, " Pips"); + Print("EMA Steigung: ", steigung, " Pips"); + Print("Differenz Close-EMA: ", aktueller_close - ema_aktuell); + Print("Preis-Trigger: ", esData.preis_trigger_aktiv, " Steigungs-Trigger: ", esData.steigung_trigger_aktiv); + Print("Überwachung aktiv: ", esData.überwachung_aktiv); + Print("Position offen: ", PositionExistsByMagic(esData.symbol, (ulong)ES_MagicNumber)); + Print("Trades im aktuellen Crossover: ", esData.trades_in_current_crossover, "/", ES_MaxTradesPerCrossover); + Print("=================="); + } + + //--- Überwachung prüfen (Check monitoring) + if(esData.überwachung_aktiv) + { + if(ES_UseBarData) + { + // Bar-basierte Überwachungszeit + int bars_since_monitoring = iBarShift(esData.symbol, ES_Timeframe, esData.letzte_überwachung_zeit); + int timeout_bars = (int)(ES_ÜberwachungTimeout / PeriodSeconds(ES_Timeframe)); + + if(bars_since_monitoring > timeout_bars) + { + esData.überwachung_aktiv = false; + esData.preis_trigger_aktiv = false; + esData.steigung_trigger_aktiv = false; + Print("Überwachung beendet - Bar-basierte Zeitüberschreitung (", bars_since_monitoring, " Bars)"); + } + } + else + { + // Tick-basierte Überwachungszeit + if(TimeCurrent() - esData.letzte_überwachung_zeit > ES_ÜberwachungTimeout) + { + esData.überwachung_aktiv = false; + esData.preis_trigger_aktiv = false; + esData.steigung_trigger_aktiv = false; + Print("Überwachung beendet - Tick-basierte Zeitüberschreitung"); + } + } + } + + //--- Trigger-Bedingungen prüfen (Check trigger conditions) + PrüfeTrigger(); + + //--- Trade Management (Trade management) + VerwalteTrades(); +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united/Strategies/RSICrossOverReversalStrategy.mqh b/frontline/united_template/_united/Strategies/RSICrossOverReversalStrategy.mqh new file mode 100644 index 0000000..266292a --- /dev/null +++ b/frontline/united_template/_united/Strategies/RSICrossOverReversalStrategy.mqh @@ -0,0 +1,257 @@ +//+------------------------------------------------------------------+ +//| RSICrossOverReversalStrategy.mqh | +//+------------------------------------------------------------------+ + +void WeekDays_Init() +{ + rcData.WeekDays[0] = RC_Sunday; + rcData.WeekDays[1] = RC_Monday; + rcData.WeekDays[2] = RC_Tuesday; + rcData.WeekDays[3] = RC_Wednesday; + rcData.WeekDays[4] = RC_Thursday; + rcData.WeekDays[5] = RC_Friday; + rcData.WeekDays[6] = RC_Saturday; +} + +bool WeekDays_Check(datetime aTime) +{ + MqlDateTime stm; + TimeToStruct(aTime, stm); + return(rcData.WeekDays[stm.day_of_week]); +} + +bool RC_HourInWindow(const int h, const int beginRaw, const int endRaw) +{ + const int b = beginRaw % 24; + const int e = endRaw % 24; + if(b == e) + return false; + if(b < e) + return (h >= b && h < e); + return (h >= b || h < e); +} + +bool RC_TradingHoursAllow(const int currentHour) +{ + return RC_HourInWindow(currentHour, RC_tradingHourOneBegin, RC_tradingHourOneEnd) + || RC_HourInWindow(currentHour, RC_tradingHourTwoBegin, RC_tradingHourTwoEnd); +} + +int TimeHour(datetime when = 0) +{ + if(when == 0) when = TimeCurrent(); + MqlDateTime dt; + TimeToStruct(when, dt); + return dt.hour; +} + +bool InitRSICrossOverReversal(string symbol) +{ + WeekDays_Init(); + + rcData.symbol = symbol; + rcData.previousRSIDef = 0; + rcData.lastTradeTime = 0; + rcData.bartime = 0; + rcData.lastBarTime = 0; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("RSICrossOverReversal: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; + } + + Sleep(100); // Wait for symbol to be ready + + rcData.rsiHandle = iRSI(symbol, RC_TimeFrame1, RC_rsiPeriod, PRICE_CLOSE); + if(rcData.rsiHandle == INVALID_HANDLE) + { + Print("RSICrossOverReversal: Error creating RSI handle for '", symbol, "'"); + return false; + } + + rcData.emaHandle = iMA(symbol, RC_TimeFrame2, RC_emaPeriod, 0, MODE_EMA, PRICE_CLOSE); + if(rcData.emaHandle == INVALID_HANDLE) + { + Print("RSICrossOverReversal: Error creating EMA handle for '", symbol, "'"); + return false; + } + + rcData.trade.SetExpertMagicNumber(RC_MagicNumber); + rcData.isInitialized = true; + Print("RSICrossOverReversal: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +void DeinitRSICrossOverReversal() +{ + if(rcData.rsiHandle != INVALID_HANDLE) + IndicatorRelease(rcData.rsiHandle); + if(rcData.emaHandle != INVALID_HANDLE) + IndicatorRelease(rcData.emaHandle); +} + +void Close_Position_MN(ulong magicNumber) +{ + ClosePositionByMagic(rcData.trade, rcData.symbol, (int)magicNumber); +} + +void ApplyTrailingStop() +{ + if(!PositionSelectByMagic(rcData.symbol, RC_MagicNumber)) + return; + + ulong PositionTicket = PositionGetInteger(POSITION_TICKET); + ENUM_POSITION_TYPE trade_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + string symbol = rcData.symbol; + + double POINT = SymbolInfoDouble(symbol, SYMBOL_POINT); + int DIGIT = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS); + + if(trade_type == POSITION_TYPE_BUY) + { + double Bid = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_BID), DIGIT); + + if(Bid - PositionGetDouble(POSITION_PRICE_OPEN) > NormalizeDouble(POINT * RC_TrailingStop, DIGIT)) + { + if(PositionGetDouble(POSITION_SL) < NormalizeDouble(Bid - POINT * RC_TrailingStop, DIGIT)) + { + ModifyPositionByMagic(rcData.trade, symbol, RC_MagicNumber, + NormalizeDouble(Bid - POINT * RC_TrailingStop, DIGIT), + PositionGetDouble(POSITION_TP)); + } + } + } + else if(trade_type == POSITION_TYPE_SELL) + { + double Ask = NormalizeDouble(SymbolInfoDouble(symbol, SYMBOL_ASK), DIGIT); + + if((PositionGetDouble(POSITION_PRICE_OPEN) - Ask) > NormalizeDouble(POINT * RC_TrailingStop, DIGIT)) + { + if((PositionGetDouble(POSITION_SL) > NormalizeDouble(Ask + POINT * RC_TrailingStop, DIGIT)) || + (PositionGetDouble(POSITION_SL) == 0)) + { + ModifyPositionByMagic(rcData.trade, symbol, RC_MagicNumber, + NormalizeDouble(Ask + POINT * RC_TrailingStop, DIGIT), + PositionGetDouble(POSITION_TP)); + } + } + } +} + +void ProcessRSICrossOverReversal(string symbol) +{ + // Skip if not initialized (symbol not available) + if(!rcData.isInitialized) + return; + + rcData.symbol = symbol; // Update symbol in case it changed + if(rcData.bartime == iTime(rcData.symbol, RC_BarTimeFrame, 0)) + return; + rcData.bartime = iTime(rcData.symbol, RC_BarTimeFrame, 0); + + double rsi[]; + if(CopyBuffer(rcData.rsiHandle, 0, 0, 2, rsi) <= 0) + return; + + double ema[]; + if(CopyBuffer(rcData.emaHandle, 0, 0, 2, ema) <= 0) + return; + + datetime currentTime = TimeCurrent(); + int currentHour = TimeHour(TimeCurrent()); + + if(!WeekDays_Check(TimeTradeServer())) + { + Close_Position_MN(RC_MagicNumber); + return; + } + + if(!RC_TradingHoursAllow(currentHour)) + { + Close_Position_MN(RC_MagicNumber); + return; + } + + bool hasPosition = PositionExistsByMagic(rcData.symbol, RC_MagicNumber); + + double currentRSI = rsi[0]; + double previousRSI = rsi[1]; + + if(rcData.previousRSIDef == 0) + { + rcData.previousRSIDef = currentRSI; + return; + } + + double currentEMA = ema[0]; + double previousEMA = ema[1]; + + double emaSlope = (currentEMA - previousEMA) * 100; + const double closeCurr = iClose(rcData.symbol, RC_TimeFrame1, 0); + double priceToEmaDistance = (closeCurr - currentEMA) * 10; + + bool isBuyPosition = false; + bool isSellPosition = false; + if(hasPosition) + { + if(PositionSelectByMagic(rcData.symbol, RC_MagicNumber)) + { + ENUM_POSITION_TYPE positionType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + if(positionType == POSITION_TYPE_BUY) + isBuyPosition = true; + else if(positionType == POSITION_TYPE_SELL) + isSellPosition = true; + } + } + + ApplyTrailingStop(); + + bool cooldownPassed = (currentTime - rcData.lastTradeTime) >= RC_cooldownSeconds; + bool isTrendStrong = MathAbs(emaSlope) > RC_emaSlopeThreshold || MathAbs(priceToEmaDistance) > RC_emaDistanceThreshold; + + if(isBuyPosition && currentRSI > RC_exitBuyRSI) + { + Close_Position_MN(RC_MagicNumber); + rcData.lastTradeTime = currentTime; + } + + if(isSellPosition && currentRSI < RC_exitSellRSI) + { + Close_Position_MN(RC_MagicNumber); + rcData.lastTradeTime = currentTime; + } + + if(isTrendStrong) + { + Close_Position_MN(RC_MagicNumber); + rcData.lastTradeTime = currentTime; + } + + if(!isTrendStrong && + currentRSI < RC_overboughtLevel - RC_entryRSISellSpread && rcData.previousRSIDef >= RC_overboughtLevel && + !isSellPosition && !hasPosition && cooldownPassed) + { + rcData.trade.SetExpertMagicNumber(RC_MagicNumber); + if(rcData.trade.Sell(g_RC_LotSize, rcData.symbol, 0.0, 0.0, 0.0, "Sell Order")) + { + rcData.lastTradeTime = currentTime; + } + } + + if(!isTrendStrong && + currentRSI > RC_oversoldLevel + RC_entryRSIBuySpread && rcData.previousRSIDef <= RC_oversoldLevel && + !isBuyPosition && !hasPosition && cooldownPassed) + { + rcData.trade.SetExpertMagicNumber(RC_MagicNumber); + if(rcData.trade.Buy(g_RC_LotSize, rcData.symbol, 0.0, 0.0, 0.0, "Buy Order")) + { + rcData.lastTradeTime = currentTime; + } + } + + rcData.previousRSIDef = currentRSI; +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united/Strategies/RSIMidPointHijackStrategy.mqh b/frontline/united_template/_united/Strategies/RSIMidPointHijackStrategy.mqh new file mode 100644 index 0000000..3db8db5 --- /dev/null +++ b/frontline/united_template/_united/Strategies/RSIMidPointHijackStrategy.mqh @@ -0,0 +1,471 @@ +//+------------------------------------------------------------------+ +//| RSIMidPointHijackStrategy.mqh | +//+------------------------------------------------------------------+ + +bool IsNewBar(string symbol) +{ + datetime time[]; + if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) + { + if(time[0] != rmData.lastBarTime) + { + rmData.lastBarTime = time[0]; + return true; + } + } + return false; +} + +bool IsWithinTradingHours(int startHour, int endHour) +{ + MqlDateTime currentTime; + TimeToStruct(TimeCurrent(), currentTime); + + if(startHour <= endHour) + return (currentTime.hour >= startHour && currentTime.hour < endHour); + else + return (currentTime.hour >= startHour || currentTime.hour < endHour); +} + +bool HasPosition(string symbol, int magic) +{ + return PositionExistsByMagic(symbol, magic); +} + +bool HasProfitablePosition(int excludeMagic) +{ + bool hasProfitable = false; + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + if(rmData.positionInfo.SelectByIndex(i)) + { + if(rmData.positionInfo.Magic() != excludeMagic) + { + double profit = rmData.positionInfo.Profit(); + if(profit > RM_InpLockProfitThreshold * _Point) + { + hasProfitable = true; + if(RM_InpCloseOppositeTrades) + { + if((excludeMagic == RM_InpMagicNumberRSIFollow && rmData.positionInfo.Magic() == RM_InpMagicNumberRSIReverse) || + (excludeMagic == RM_InpMagicNumberRSIReverse && rmData.positionInfo.Magic() == RM_InpMagicNumberRSIFollow) || + (excludeMagic == RM_InpMagicNumberEMACross && (rmData.positionInfo.Magic() == RM_InpMagicNumberRSIReverse || rmData.positionInfo.Magic() == RM_InpMagicNumberRSIFollow)) || + ((excludeMagic == RM_InpMagicNumberRSIFollow || excludeMagic == RM_InpMagicNumberRSIReverse) && rmData.positionInfo.Magic() == RM_InpMagicNumberEMACross)) + { + ClosePosition(rmData.symbol, (int)rmData.positionInfo.Magic()); + } + } + } + } + } + } + return hasProfitable; +} + +bool IsRSIReverseInCooldown(string symbol) +{ + if(RM_InpRSIReverseCooldownBars <= 0) + return false; + + if(!rmData.rsiReverseInCooldown) + return false; + + datetime time[]; + if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) + { + datetime currentBarTime = time[0]; + datetime cooldownEndTime = rmData.rsiReverseLastCloseTime + RM_InpRSIReverseCooldownBars * PeriodSeconds(RM_InpTimeframe); + + if(currentBarTime >= cooldownEndTime) + { + rmData.rsiReverseInCooldown = false; + return false; + } + } + + return true; +} + +void CheckRSIFollowStrategy(string symbol) +{ + if(!IsWithinTradingHours(RM_InpRSIFollowStartHour, RM_InpRSIFollowEndHour)) + { + if(RM_InpRSIFollowCloseOutsideHours) + { + if(HasPosition(symbol, RM_InpMagicNumberRSIFollow)) + ClosePosition(symbol, RM_InpMagicNumberRSIFollow); + } + return; + } + + if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberRSIFollow)) + return; + + if(rmData.lastBarRSI > RM_InpRSIOverbought) + rmData.rsiOverbought = true; + else if(rmData.lastBarRSI < RM_InpRSIOversold) + rmData.rsiOversold = true; + + if(rmData.rsiOverbought && rmData.lastBarRSI < RM_InpRSIExitLevel) + { + if(!HasPosition(symbol, RM_InpMagicNumberRSIFollow)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); + rmData.trade.Sell(g_RM_LotSize, symbol, 0, 0, 0, "RSI Follow"); + } + rmData.rsiOverbought = false; + } + else if(rmData.rsiOversold && rmData.lastBarRSI > RM_InpRSIExitLevel) + { + if(!HasPosition(symbol, RM_InpMagicNumberRSIFollow)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); + rmData.trade.Buy(g_RM_LotSize, symbol, 0, 0, 0, "RSI Follow"); + } + rmData.rsiOversold = false; + } +} + +void CheckRSIReverseStrategy(string symbol) +{ + if(!IsWithinTradingHours(RM_InpRSIReverseStartHour, RM_InpRSIReverseEndHour)) + { + if(RM_InpRSIReverseCloseOutsideHours) + { + if(HasPosition(symbol, RM_InpMagicNumberRSIReverse)) + ClosePosition(symbol, RM_InpMagicNumberRSIReverse); + } + return; + } + + if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberRSIReverse)) + return; + + if(IsRSIReverseInCooldown(symbol)) + return; + + if(rmData.lastBarRSIReverse > RM_InpRSIReverseOverbought) + rmData.rsiReverseOverbought = true; + else if(rmData.lastBarRSIReverse < RM_InpRSIReverseOversold) + rmData.rsiReverseOversold = true; + + if(rmData.rsiReverseOverbought && rmData.lastBarRSIReverse < RM_InpRSIReverseCrossLevel) + { + if(!HasPosition(symbol, RM_InpMagicNumberRSIReverse)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIReverse); + rmData.trade.Sell(g_RM_LotSize, symbol, 0, 0, 0, "RSI Reverse"); + } + rmData.rsiReverseOverbought = false; + } + else if(rmData.rsiReverseOversold && rmData.lastBarRSIReverse > RM_InpRSIReverseCrossLevel) + { + if(!HasPosition(symbol, RM_InpMagicNumberRSIReverse)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIReverse); + rmData.trade.Buy(g_RM_LotSize, symbol, 0, 0, 0, "RSI Reverse"); + } + rmData.rsiReverseOversold = false; + } +} + +void CheckEMACrossStrategy(string symbol) +{ + if(!IsWithinTradingHours(RM_InpEMACrossStartHour, RM_InpEMACrossEndHour)) + { + if(RM_InpEMACrossCloseOutsideHours) + { + if(HasPosition(symbol, RM_InpMagicNumberEMACross)) + ClosePosition(symbol, RM_InpMagicNumberEMACross); + } + return; + } + + if(RM_InpEnableStrategyLock && HasProfitablePosition(RM_InpMagicNumberEMACross)) + return; + + if(rmData.lastBarEMAPrev < rmData.lastBarClosePrev && rmData.lastBarEMA > rmData.lastBarClose) + { + rmData.emaCrossBuySignal = true; + rmData.emaCrossSellSignal = false; + rmData.emaCrossSignalBar = 0; + } + else if(rmData.lastBarEMAPrev > rmData.lastBarClosePrev && rmData.lastBarEMA < rmData.lastBarClose) + { + rmData.emaCrossSellSignal = true; + rmData.emaCrossBuySignal = false; + rmData.emaCrossSignalBar = 0; + } + + if(RM_InpUseEMADistanceEntry) + { + if(rmData.emaCrossBuySignal) + { + bool distanceConditionMet = true; + double emaHistory[], closeHistory[]; + ArraySetAsSeries(emaHistory, true); + ArraySetAsSeries(closeHistory, true); + + if(CopyBuffer(rmData.emaHandle, 0, 0, RM_InpEMADistancePeriod, emaHistory) > 0 && + CopyClose(symbol, RM_InpTimeframe, 0, RM_InpEMADistancePeriod, closeHistory) > 0) + { + double point = SymbolInfoDouble(symbol, SYMBOL_POINT); + for(int i = 0; i < RM_InpEMADistancePeriod; i++) + { + double distance = (closeHistory[i] - emaHistory[i]) / point; + if(distance < RM_InpEMADistancePips) + { + distanceConditionMet = false; + break; + } + } + + if(distanceConditionMet && !HasPosition(symbol, RM_InpMagicNumberEMACross)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); + rmData.trade.Buy(g_RM_LotSize, symbol, 0, 0, 0, "EMA Cross Distance"); + rmData.emaCrossBuySignal = false; + } + } + } + else if(rmData.emaCrossSellSignal) + { + bool distanceConditionMet = true; + double emaHistory[], closeHistory[]; + ArraySetAsSeries(emaHistory, true); + ArraySetAsSeries(closeHistory, true); + + if(CopyBuffer(rmData.emaHandle, 0, 0, RM_InpEMADistancePeriod, emaHistory) > 0 && + CopyClose(symbol, RM_InpTimeframe, 0, RM_InpEMADistancePeriod, closeHistory) > 0) + { + double point = SymbolInfoDouble(symbol, SYMBOL_POINT); + for(int i = 0; i < RM_InpEMADistancePeriod; i++) + { + double distance = (emaHistory[i] - closeHistory[i]) / point; + if(distance < RM_InpEMADistancePips) + { + distanceConditionMet = false; + break; + } + } + + if(distanceConditionMet && !HasPosition(symbol, RM_InpMagicNumberEMACross)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); + rmData.trade.Sell(g_RM_LotSize, symbol, 0, 0, 0, "EMA Cross Distance"); + rmData.emaCrossSellSignal = false; + } + } + } + } + else + { + if(rmData.lastBarEMAPrev < rmData.lastBarClosePrev && rmData.lastBarEMA > rmData.lastBarClose) + { + if(!HasPosition(symbol, RM_InpMagicNumberEMACross)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); + rmData.trade.Buy(g_RM_LotSize, symbol, 0, 0, 0, "EMA Cross"); + } + } + else if(rmData.lastBarEMAPrev > rmData.lastBarClosePrev && rmData.lastBarEMA < rmData.lastBarClose) + { + if(!HasPosition(symbol, RM_InpMagicNumberEMACross)) + { + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberEMACross); + rmData.trade.Sell(g_RM_LotSize, symbol, 0, 0, 0, "EMA Cross"); + } + } + } + + if(rmData.emaCrossBuySignal || rmData.emaCrossSellSignal) + { + rmData.emaCrossSignalBar++; + if(rmData.emaCrossSignalBar > RM_InpEMADistancePeriod * 2) + { + rmData.emaCrossBuySignal = false; + rmData.emaCrossSellSignal = false; + } + } +} + +void CheckExitConditions(string symbol) +{ + if(RM_InpEnableRSIFollow) + { + if(HasPosition(symbol, RM_InpMagicNumberRSIFollow)) + { + if(PositionSelectByMagic(symbol, RM_InpMagicNumberRSIFollow)) + { + ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + if((posType == POSITION_TYPE_BUY && rmData.lastBarRSI < RM_InpRSIExitLevel) || + (posType == POSITION_TYPE_SELL && rmData.lastBarRSI > RM_InpRSIExitLevel)) + { + ClosePosition(symbol, RM_InpMagicNumberRSIFollow); + } + } + } + } + + if(RM_InpEnableRSIReverse) + { + if(HasPosition(symbol, RM_InpMagicNumberRSIReverse)) + { + if(PositionSelectByMagic(symbol, RM_InpMagicNumberRSIReverse)) + { + ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + if((posType == POSITION_TYPE_BUY && rmData.lastBarRSIReverse < RM_InpRSIReverseExitLevel) || + (posType == POSITION_TYPE_SELL && rmData.lastBarRSIReverse > RM_InpRSIReverseExitLevel)) + { + ClosePosition(symbol, RM_InpMagicNumberRSIReverse); + } + } + } + } + + if(RM_InpEnableEMACross) + { + if(HasPosition(symbol, RM_InpMagicNumberEMACross)) + { + if(PositionSelectByMagic(symbol, RM_InpMagicNumberEMACross)) + { + ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + if((posType == POSITION_TYPE_BUY && rmData.lastBarEMA > rmData.lastBarClose) || + (posType == POSITION_TYPE_SELL && rmData.lastBarEMA < rmData.lastBarClose)) + { + ClosePosition(symbol, RM_InpMagicNumberEMACross); + } + } + } + } +} + +void ClosePosition(string symbol, int magic) +{ + if(!PositionExistsByMagic(symbol, magic)) + return; + + ulong ticket = GetPositionTicketByMagic(symbol, magic); + if(ticket == 0) + return; + + if(magic == RM_InpMagicNumberRSIReverse) + { + if(PositionSelectByTicketSymbolAndMagic(ticket, symbol, magic)) + { + datetime time[]; + if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) + { + rmData.rsiReverseLastCloseTime = time[0]; + double profit = PositionGetDouble(POSITION_PROFIT); + if(!RM_InpRSIReverseCooldownOnLoss || profit < 0) + { + rmData.rsiReverseInCooldown = true; + } + } + } + } + + ClosePositionByMagic(rmData.trade, symbol, magic); +} + +bool InitRSIMidPointHijack(string symbol) +{ + rmData.symbol = symbol; + rmData.rsiOverbought = false; + rmData.rsiOversold = false; + rmData.rsiReverseOverbought = false; + rmData.rsiReverseOversold = false; + rmData.emaCrossBuySignal = false; + rmData.emaCrossSellSignal = false; + rmData.emaCrossSignalBar = 0; + rmData.rsiReverseInCooldown = false; + rmData.lastBarRSI = 0; + rmData.lastBarRSIReverse = 0; + rmData.lastBarEMA = 0; + rmData.lastBarClose = 0; + rmData.lastBarEMAPrev = 0; + rmData.lastBarClosePrev = 0; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("RSIMidPointHijack: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; + } + + Sleep(100); // Wait for symbol to be ready + + rmData.rsiHandle = iRSI(symbol, RM_InpTimeframe, RM_InpRSIPeriod, PRICE_CLOSE); + rmData.rsiReverseHandle = iRSI(symbol, RM_InpTimeframe, RM_InpRSIReversePeriod, PRICE_CLOSE); + rmData.emaHandle = iMA(symbol, RM_InpTimeframe, RM_InpEMAPeriod, 0, MODE_EMA, PRICE_CLOSE); + + if(rmData.rsiHandle == INVALID_HANDLE || rmData.rsiReverseHandle == INVALID_HANDLE || rmData.emaHandle == INVALID_HANDLE) + { + Print("RSIMidPointHijack: Error creating indicators for '", symbol, "'"); + return false; + } + + rmData.trade.SetExpertMagicNumber(RM_InpMagicNumberRSIFollow); + rmData.trade.SetMarginMode(); + rmData.trade.SetTypeFillingBySymbol(symbol); + rmData.trade.SetDeviationInPoints(10); + + datetime time[]; + if(CopyTime(symbol, RM_InpTimeframe, 0, 1, time) > 0) + rmData.lastBarTime = time[0]; + + rmData.isInitialized = true; + Print("RSIMidPointHijack: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +void DeinitRSIMidPointHijack() +{ + if(rmData.rsiHandle != INVALID_HANDLE) IndicatorRelease(rmData.rsiHandle); + if(rmData.rsiReverseHandle != INVALID_HANDLE) IndicatorRelease(rmData.rsiReverseHandle); + if(rmData.emaHandle != INVALID_HANDLE) IndicatorRelease(rmData.emaHandle); +} + +void ProcessRSIMidPointHijack(string symbol) +{ + // Skip if not initialized (symbol not available) + if(!rmData.isInitialized) + return; + + rmData.symbol = symbol; // Update symbol in case it changed + if(!IsNewBar(rmData.symbol)) + return; + + double rsi[], rsiReverse[], ema[], close[]; + ArraySetAsSeries(rsi, true); + ArraySetAsSeries(rsiReverse, true); + ArraySetAsSeries(ema, true); + ArraySetAsSeries(close, true); + + rmData.lastBarEMAPrev = rmData.lastBarEMA; + rmData.lastBarClosePrev = rmData.lastBarClose; + + if(CopyBuffer(rmData.rsiHandle, 0, 0, 1, rsi) > 0) + rmData.lastBarRSI = rsi[0]; + + if(CopyBuffer(rmData.rsiReverseHandle, 0, 0, 1, rsiReverse) > 0) + rmData.lastBarRSIReverse = rsiReverse[0]; + + if(CopyBuffer(rmData.emaHandle, 0, 0, 1, ema) > 0) + rmData.lastBarEMA = ema[0]; + + if(CopyClose(rmData.symbol, RM_InpTimeframe, 0, 1, close) > 0) + rmData.lastBarClose = close[0]; + + if(RM_InpEnableRSIFollow) + CheckRSIFollowStrategy(rmData.symbol); + if(RM_InpEnableRSIReverse) + CheckRSIReverseStrategy(rmData.symbol); + if(RM_InpEnableEMACross) + CheckEMACrossStrategy(rmData.symbol); + + CheckExitConditions(rmData.symbol); +} + +//+------------------------------------------------------------------+ diff --git a/frontline/united_template/_united/Strategies/RSIReversalAsianStrategy.mqh b/frontline/united_template/_united/Strategies/RSIReversalAsianStrategy.mqh new file mode 100644 index 0000000..6762248 --- /dev/null +++ b/frontline/united_template/_united/Strategies/RSIReversalAsianStrategy.mqh @@ -0,0 +1,493 @@ +//+------------------------------------------------------------------+ +//| RSIReversalAsianStrategy.mqh | +//+------------------------------------------------------------------+ + +//+------------------------------------------------------------------+ +//| RSI Reversal Asian Strategy Data Structure | +//+------------------------------------------------------------------+ +struct RSIReversalAsianData { + string symbol; + bool isInitialized; + int rsiHandle; + CTrade trade; + bool isPositionOpen; + double positionOpenPrice; + datetime positionOpenTime; + ENUM_POSITION_TYPE lastPositionType; + bool sessionCloseAttempted; + + // RSI crossover variables + double rsiCurrent; + double rsiPrevious; + double rsiPrevious2; + bool rsiCrossedOverbought; + bool rsiCrossedOversold; + bool rsiCrossedExitLevel; + + // Strategy parameters + int RSIPeriod; + double OverboughtLevel; + double OversoldLevel; + int TakeProfitPips; + int StopLossPips; + double MaxLotSize; + int MaxSpread; + int MaxDuration; + bool UseStopLoss; + bool UseTakeProfit; + bool UseRSIExit; + double RSIExitLevel; + bool CloseOutsideSession; + ENUM_TIMEFRAMES TimeFrame; + int MagicNumber; + int Slippage; + double point; +}; + +// Session times (UTC) +const int AsianSessionStart = 0; // 00:00 UTC +const int AsianSessionEnd = 8; // 08:00 UTC + +//+------------------------------------------------------------------+ +//| Check if current time is in Asian session | +//+------------------------------------------------------------------+ +bool IsAsianSession() +{ + datetime currentTime = TimeCurrent(); + MqlDateTime timeStruct; + TimeToStruct(currentTime, timeStruct); + + return (timeStruct.hour >= AsianSessionStart && timeStruct.hour < AsianSessionEnd); +} + +//+------------------------------------------------------------------+ +//| Check if trading is allowed for symbol | +//+------------------------------------------------------------------+ +bool IsTradingAllowed(RSIReversalAsianData& data) +{ + // Check if market is open + long tradeMode = SymbolInfoInteger(data.symbol, SYMBOL_TRADE_MODE); + if(tradeMode != SYMBOL_TRADE_MODE_FULL) + { + return false; + } + + // Check if we have enough money + if(AccountInfoDouble(ACCOUNT_MARGIN_FREE) <= 0) + { + return false; + } + + return true; +} + +//+------------------------------------------------------------------+ +//| Check RSI crossover conditions | +//+------------------------------------------------------------------+ +void CheckRSICrossover(RSIReversalAsianData& data) +{ + // Reset crossover flags + data.rsiCrossedOverbought = false; + data.rsiCrossedOversold = false; + data.rsiCrossedExitLevel = false; + + // Check for overbought crossover (RSI crosses above overbought level) + if(data.rsiPrevious < data.OverboughtLevel && data.rsiCurrent >= data.OverboughtLevel) + { + data.rsiCrossedOverbought = true; + } + + // Check for oversold crossover (RSI crosses below oversold level) + if(data.rsiPrevious > data.OversoldLevel && data.rsiCurrent <= data.OversoldLevel) + { + data.rsiCrossedOversold = true; + } + + // Check for exit level crossover + if(data.rsiPrevious < data.RSIExitLevel && data.rsiCurrent >= data.RSIExitLevel) + { + data.rsiCrossedExitLevel = true; + } + else if(data.rsiPrevious > data.RSIExitLevel && data.rsiCurrent <= data.RSIExitLevel) + { + data.rsiCrossedExitLevel = true; + } +} + +//+------------------------------------------------------------------+ +//| Close all trades for the symbol | +//+------------------------------------------------------------------+ +bool CloseAllTrades(RSIReversalAsianData& data, string reason = "") +{ + bool allClosed = true; + int totalPositions = PositionsTotal(); + + if(totalPositions == 0) + return true; + + for(int i = totalPositions - 1; i >= 0; i--) + { + if(PositionGetSymbol(i) == data.symbol) + { + ulong ticket = PositionGetTicket(i); + if(ticket > 0 && PositionSelectByTicket(ticket)) + { + if(PositionGetInteger(POSITION_MAGIC) == (ulong)data.MagicNumber) + { + // Try to close position with retry logic + int retryCount = 0; + bool positionClosed = false; + + while(retryCount < 3 && !positionClosed) + { + if(data.trade.PositionClose(ticket)) + { + data.isPositionOpen = false; + positionClosed = true; + } + else + { + int error = GetLastError(); + + // If error is 4756 (Trade disabled), wait longer before retry + if(error == 4756) + { + Sleep(5000); // Wait 5 seconds before retry + retryCount++; + } + else + { + // For other errors, break the loop + break; + } + } + } + + if(!positionClosed) + { + allClosed = false; + } + } + } + } + } + + return allClosed; +} + +//+------------------------------------------------------------------+ +//| Initialize RSI Reversal Asian Strategy | +//+------------------------------------------------------------------+ +bool InitRSIReversalAsian(RSIReversalAsianData& data, string symbol, + int RSIPeriod, double OverboughtLevel, double OversoldLevel, + int TakeProfitPips, int StopLossPips, double MaxLotSize, + int MaxSpread, int MaxDuration, bool UseStopLoss, + bool UseTakeProfit, bool UseRSIExit, double RSIExitLevel, + bool CloseOutsideSession, ENUM_TIMEFRAMES TimeFrame, + int MagicNumber, int Slippage) +{ + data.symbol = symbol; + data.isInitialized = false; + + // Check if symbol exists + if(!SymbolSelect(symbol, true)) + { + Print("RSIReversalAsian: Symbol '", symbol, "' not available in Market Watch. Please add it to Market Watch or check symbol name."); + return false; + } + + // Wait a bit for symbol to be ready + Sleep(100); + + // Get symbol point + data.point = SymbolInfoDouble(symbol, SYMBOL_POINT); + + // Store parameters + data.RSIPeriod = RSIPeriod; + data.OverboughtLevel = OverboughtLevel; + data.OversoldLevel = OversoldLevel; + data.TakeProfitPips = TakeProfitPips; + data.StopLossPips = StopLossPips; + data.MaxLotSize = MaxLotSize; + data.MaxSpread = MaxSpread; + data.MaxDuration = MaxDuration; + data.UseStopLoss = UseStopLoss; + data.UseTakeProfit = UseTakeProfit; + data.UseRSIExit = UseRSIExit; + data.RSIExitLevel = RSIExitLevel; + data.CloseOutsideSession = CloseOutsideSession; + data.TimeFrame = TimeFrame; + data.MagicNumber = MagicNumber; + data.Slippage = Slippage; + + // Initialize RSI indicator with retry logic (for insufficient history in backtesting) + data.rsiHandle = INVALID_HANDLE; + int retryCount = 0; + int maxRetries = 5; + + while(retryCount < maxRetries && data.rsiHandle == INVALID_HANDLE) + { + data.rsiHandle = iRSI(symbol, TimeFrame, RSIPeriod, PRICE_CLOSE); + + if(data.rsiHandle == INVALID_HANDLE) + { + int error = GetLastError(); + + // Error 4805 = insufficient history - wait longer and retry + if(error == 4805 && retryCount < maxRetries - 1) + { + Sleep(1000); // Wait 1 second for history to load + retryCount++; + continue; + } + + Print("RSIReversalAsian: Error creating RSI indicator for '", symbol, "' - Error: ", error, " (", error == 4805 ? "Insufficient history data" : "Unknown", ")"); + return false; + } + } + + if(data.rsiHandle == INVALID_HANDLE) + { + Print("RSIReversalAsian: Failed to create RSI indicator for '", symbol, "' after ", maxRetries, " retries"); + return false; + } + + // Wait a bit for the indicator to be ready + Sleep(100); + + // Initialize RSI values with retry logic + double rsi[]; + ArraySetAsSeries(rsi, true); + + retryCount = 0; + bool rsiInitialized = false; + + while(retryCount < 10 && !rsiInitialized) + { + int copied = CopyBuffer(data.rsiHandle, 0, 0, 3, rsi); + if(copied >= 3) + { + data.rsiCurrent = rsi[0]; + data.rsiPrevious = rsi[1]; + data.rsiPrevious2 = rsi[2]; + rsiInitialized = true; + } + else + { + retryCount++; + Sleep(100); + } + } + + if(!rsiInitialized) + { + // Don't fail initialization, just set default values + data.rsiCurrent = 50.0; + data.rsiPrevious = 50.0; + data.rsiPrevious2 = 50.0; + } + + // Set trade parameters + data.trade.SetExpertMagicNumber(MagicNumber); + data.trade.SetDeviationInPoints(Slippage); + data.trade.SetTypeFilling(ORDER_FILLING_IOC); + + // Initialize state + data.isPositionOpen = false; + data.positionOpenPrice = 0; + data.positionOpenTime = 0; + data.lastPositionType = POSITION_TYPE_BUY; + data.sessionCloseAttempted = false; + data.rsiCrossedOverbought = false; + data.rsiCrossedOversold = false; + data.rsiCrossedExitLevel = false; + + data.isInitialized = true; + + Print("RSIReversalAsian: Successfully initialized for symbol '", symbol, "'"); + return true; +} + +//+------------------------------------------------------------------+ +//| Deinitialize RSI Reversal Asian Strategy | +//+------------------------------------------------------------------+ +void DeinitRSIReversalAsian(RSIReversalAsianData& data) +{ + if(data.rsiHandle != INVALID_HANDLE) + IndicatorRelease(data.rsiHandle); +} + +//+------------------------------------------------------------------+ +//| Process RSI Reversal Asian Strategy | +//+------------------------------------------------------------------+ +void ProcessRSIReversalAsian(RSIReversalAsianData& data, double lotSize) +{ + if(!data.isInitialized) + return; + + // Check if trading is allowed + if(!IsTradingAllowed(data)) + { + return; + } + + // Check if we're in Asian session + if(!IsAsianSession()) + { + // Close all positions if outside Asian session and CloseOutsideSession is true + if(data.CloseOutsideSession && !data.sessionCloseAttempted) + { + CloseAllTrades(data, "Outside Asian session"); + data.sessionCloseAttempted = true; + } + return; + } + else + { + // Reset the session close attempt flag when we enter Asian session + data.sessionCloseAttempted = false; + } + + // Get current spread + double spread = SymbolInfoDouble(data.symbol, SYMBOL_ASK) - SymbolInfoDouble(data.symbol, SYMBOL_BID); + int spreadInPips = (int)(spread / data.point); + + // Check if spread is too high + if(spreadInPips > data.MaxSpread) + { + return; + } + + // Get RSI values from bar data + double rsi[]; + ArraySetAsSeries(rsi, true); + + int copied = CopyBuffer(data.rsiHandle, 0, 0, 3, rsi); + if(copied < 3) + { + return; + } + + // Update RSI values + data.rsiPrevious2 = data.rsiPrevious; + data.rsiPrevious = data.rsiCurrent; + data.rsiCurrent = rsi[0]; + + // Validate RSI values + if(data.rsiCurrent == 0 || data.rsiPrevious == 0) + { + return; + } + + // Check for RSI crossovers + CheckRSICrossover(data); + + // Get current prices + double currentBid = SymbolInfoDouble(data.symbol, SYMBOL_BID); + double currentAsk = SymbolInfoDouble(data.symbol, SYMBOL_ASK); + + // Check for open position + bool hasOpenPosition = PositionExistsByMagic(data.symbol, (ulong)data.MagicNumber); + + if(hasOpenPosition) + { + // Get position details + ulong ticket = GetPositionTicketByMagic(data.symbol, (ulong)data.MagicNumber); + if(ticket > 0 && PositionSelectByTicket(ticket)) + { + ENUM_POSITION_TYPE posType = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); + datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); + + // Check for RSI exit if enabled + if(data.UseRSIExit && data.rsiCrossedExitLevel) + { + bool shouldExit = false; + + // For long positions, exit when RSI crosses above exit level + if(posType == POSITION_TYPE_BUY && data.rsiCurrent >= data.RSIExitLevel && data.rsiPrevious < data.RSIExitLevel) + { + shouldExit = true; + } + // For short positions, exit when RSI crosses below exit level + else if(posType == POSITION_TYPE_SELL && data.rsiCurrent <= data.RSIExitLevel && data.rsiPrevious > data.RSIExitLevel) + { + shouldExit = true; + } + + if(shouldExit) + { + CloseAllTrades(data, "RSI Exit Crossover"); + return; + } + } + + // Check for timeout + if(TimeCurrent() - openTime > data.MaxDuration * 3600) + { + CloseAllTrades(data, "Timeout"); + return; + } + } + } + + // If no position is open, look for entry signals based on RSI crossover + if(!hasOpenPosition) + { + // Place buy order if RSI crosses below oversold level (oversold crossover) + if(data.rsiCrossedOversold) + { + double sl = data.UseStopLoss ? currentBid - data.StopLossPips * data.point : 0; + double tp = data.UseTakeProfit ? currentBid + data.TakeProfitPips * data.point : 0; + + if(data.UseStopLoss && sl >= currentBid) + return; + if(data.UseTakeProfit && tp <= currentBid) + return; + + // Set trade parameters + data.trade.SetDeviationInPoints(data.Slippage); + data.trade.SetTypeFilling(ORDER_FILLING_IOC); + data.trade.SetExpertMagicNumber(data.MagicNumber); + + // Use dynamic lot size + double tradeLotSize = lotSize > 0 ? lotSize : data.MaxLotSize; + + // Place buy order using CTrade + if(data.trade.Buy(tradeLotSize, data.symbol, currentAsk, sl, tp, "RSI Oversold Crossover Buy")) + { + data.isPositionOpen = true; + data.positionOpenPrice = currentAsk; + data.positionOpenTime = TimeCurrent(); + data.lastPositionType = POSITION_TYPE_BUY; + } + } + // Place sell order if RSI crosses above overbought level (overbought crossover) + else if(data.rsiCrossedOverbought) + { + double sl = data.UseStopLoss ? currentAsk + data.StopLossPips * data.point : 0; + double tp = data.UseTakeProfit ? currentAsk - data.TakeProfitPips * data.point : 0; + + if(data.UseStopLoss && sl <= currentAsk) + return; + if(data.UseTakeProfit && tp >= currentAsk) + return; + + // Set trade parameters + data.trade.SetDeviationInPoints(data.Slippage); + data.trade.SetTypeFilling(ORDER_FILLING_IOC); + data.trade.SetExpertMagicNumber(data.MagicNumber); + + // Use dynamic lot size + double tradeLotSize = lotSize > 0 ? lotSize : data.MaxLotSize; + + // Place sell order using CTrade + if(data.trade.Sell(tradeLotSize, data.symbol, currentBid, sl, tp, "RSI Overbought Crossover Sell")) + { + data.isPositionOpen = true; + data.positionOpenPrice = currentBid; + data.positionOpenTime = TimeCurrent(); + data.lastPositionType = POSITION_TYPE_SELL; + } + } + } +} diff --git a/frontline/MQL5/_united/Strategies/RSIScalpingStrategy.mqh b/frontline/united_template/_united/Strategies/RSIScalpingStrategy.mqh similarity index 100% rename from frontline/MQL5/_united/Strategies/RSIScalpingStrategy.mqh rename to frontline/united_template/_united/Strategies/RSIScalpingStrategy.mqh diff --git a/frontline/MQL5/_united/main.mq5 b/frontline/united_template/_united/main.mq5 similarity index 100% rename from frontline/MQL5/_united/main.mq5 rename to frontline/united_template/_united/main.mq5 diff --git a/frontline/united_template/_united/report.png b/frontline/united_template/_united/report.png new file mode 100644 index 0000000000000000000000000000000000000000..a174d73e8892fb14262661005155b71297b1e0fd GIT binary patch literal 29959 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 z