From a9f35d3a3a8982f3ad981741fae200691b836db0 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Wed, 16 Oct 2024 09:42:52 +0330 Subject: [PATCH] add symbol protector and move all Signal Executing mechanism including parsers into eaTradeHandler ... --- .../x-saherelm.x121.xtrade.handler.class.mq5 | Bin 178726 -> 196994 bytes Experts/x-saherelm.x121.ea.mq5 | 71 ++++-------------- 2 files changed, 14 insertions(+), 57 deletions(-) diff --git a/Classes/x-saherelm.x121.xtrade.handler.class.mq5 b/Classes/x-saherelm.x121.xtrade.handler.class.mq5 index 47317da1f8f9b7da2ae404179ac90affb08cb7de..35541f1b07b992da9e2f5b04c04e2df399c13ba8 100644 GIT binary patch delta 5932 zcmdT|ZBUfg6~6ZZ%eum5VOc;B*j)v7`Nl6aiaDhVv>E|fY=Q#6y* z&Nv91loM0Oq9%66&Qy(7W-`_Re`L~`OoE-ZlW{r@=?^>Asu=UfR5LyIeRr34ap}m~ zKOF{^ecyZTJ@>iiJm)$0%r}NZZ^fN2ipgHU+L)W|X6>w-wXjxZWp-9XKgG<&nwgjR z=$RMpMrW8y*&vHAUm~!0S#?n!THCAz(U`V_HpEhk6wlTD6}y&%70IWxjzE z%eW~v0N}tMozPq03Fqy+&=vd^1niW*(>4?w@+=Vy3DA37U$&8=Qbr<$Fx$lT(7^Sq zRtYs3+}%oWYm6z_WHRi9fuXX+5!gcMdleC{*?H#Q5!+rrU%xcWK9m$zcUeOiNVpEL zdfMRzWuM(L;r_B>aRioF^&?>h&#w#0A~2>CYX#bFgf4$|wHk*Hia5MCAoLesKJ7h) zNBZ~`aBVWg`iTeclyWCdJm#ha8Zx4UDW~5$C2BO!ajb!7q1DIZ@M;Awg1!|7JQc&O zIGoI_vHR5F$kT)kCky#%tlY@GD>e23u3@iIKn1CffUY4j{2?)B2stnZmX?Xdu&XS-T2wpGwOdwNI96*~+q(tSg-Ee)#%nRVF z*mPJJmj)&43^=J5iI`T$uR+tR(b(kXm3VeNUqsaP8m?Z+jd)`&H-IO3`N&W`|0D-Z z8NxKDjp9ho?Zx|zA{!^{+zPITxhnt^!kC;Sz>RKnA6$jBFB({HGjjOH2PYVktFTJgc; z*aZ_cc`*7Y8oxZs5 zHj1<;DiB!OBr0&+Ms`j2`6BsWDh@Y^%(o&S0m<|Tr4GbjC6*=i-vy6K>mI?o)6vQX*A%JOK0OToI0-nUS|wvu#^ zBU>my9IP?qtrJfgd9K_~G9F(=e`E^6WI-aGz6ne8!X)G2H3gn;4cs{5@$el{;YtJI z0a2~QE0$~%rjft-_}`1NYxEhnY*(*#4wca+n(l`XEbShl9_9@gxWC_>>!A$(~f~ zds8I8AS;!F0@e>9CcMkdQT245CoTNO{D0su82~$*U9y8CBcrB zdSQgTp81%(R;Z7$rktCge_p|JQY8tgI2dcHC%Qs>TEv2eSt9gQ(kMT7y@xVYa&Gq>8PkBv7a3(Si zM4*IIF^19`^RTx;WGcilIZP={`~#KW0n#$tWq^Vw%^16e7?4B@RJqfk|6xf`b=Asr#;m-Bcm&hl_^if#ZJ@55fIK9uan>>3^n(coBO`NV^Od>XeEWwS~FBX0fPM zjlTSURkbkkKOB)`)BAim_WDG$T8AVb!eovhud9`XN>kA+dj%~&6_RSJdXhUs zu1X)DCqP5IoF$8fW{$>BHG-yEJRIFF^do=j;UAdbvcZUN9Om{yD+ROsnMqEBWHGiL z=C*kn)kOu^>aXk+k|ReC^Uk~fwSnTYQLusQiFM?=ZqdU19S>&yjxWO-mE17W-Xo4A zVCK(-VMT;Ro2`T@odquq@T4`W0#L6iq*@NpvGh84*AcAR0X;3>29+f%#?E(yMRh5h z)zqvrTn4J3Q`}-adfdj%^mL-86)~%h^q!FHEMnqj9x?v|F-A7}GUfpI?#4OD@?Pw8Hg#GhEA0+%T=drIVDJyoEm7Xx&`p zY~5rdFC)FQ2ibSXhE-8%g}@ f52#am{H~tTI~B*XNrv{m!{=jV4|l_7b*BFSxwjlTddE zvud((qL;cC0Wgyg6*!ZiRT{U>SOLfZmmpgK&X*t*0Sc24Fiw}i#{m+z&RhW&CzF8r z2De_00cr!2pn49sOp*cQ1Ct;M1d~vA2$IzZw_39Sq!5>E!~qbO7Q_J*#H0l diff --git a/Experts/x-saherelm.x121.ea.mq5 b/Experts/x-saherelm.x121.ea.mq5 index 18859074..89ab3971 100644 --- a/Experts/x-saherelm.x121.ea.mq5 +++ b/Experts/x-saherelm.x121.ea.mq5 @@ -29,7 +29,6 @@ #include "../Helpers/x-saherelm.xct.helper.mq5" // -#include "../Parsers/x-saherelm.x121.parser.mq5" #include "../Strategies/x-saherelm.x121.strategy.mq5" // @@ -82,6 +81,8 @@ input int eaMaxAllowedLongs = 1; // Max Allowed Long Positio input int eaMaxAllowedShorts = 1; // Max Allowed Short Positions input string eaEnableSignallingAt = "03:30"; // Auto Enable Signalling Time input string eaDisableSignallingAt = "22:30"; // Auto Disable Signalling Time +input int eaNumberOfSLForPauseSignalling = 2; // Number of SL For Pause Signalling Per Symbol/Type +input int eaSignallingPauseDelayInMinute = 120; // Signalling Pause Delay In Minute input double eaMaxDrawdownPercentForOpenTrades = 10; // Max Drawdown Percent for Open Trades // @@ -188,19 +189,11 @@ XTimeTracker eaTimeTracker; // Trade Handler Instance Class ... X121SCTradeHandler *eaTradeHandler; -// -// Since Signal Filtering done based on -// Strategy and it's not related to Public -// TradeHandler for Seperation of Concern issue, -// we do this here ... -X121StartegyConditionsParser x121Parser; - // string mTag = ""; // double eaR2R = 1.5; -datetime lastSignalOn = NULL; bool eaUseFixedTPSLPoints = true; // @@ -580,6 +573,8 @@ bool InitEA() eaTradeHandler.MaxAllowedLongs(eaMaxAllowedLongs); eaTradeHandler.MaxAllowedShorts(eaMaxAllowedShorts); eaTradeHandler.UseMaxAllowedTradesPerSymbol(eaUseMaxAllowedTradesPerSymbol); + eaTradeHandler.NumberOfSLForPauseSignalling(eaNumberOfSLForPauseSignalling); + eaTradeHandler.SignallingPauseDelayInMinute(eaSignallingPauseDelayInMinute); eaTradeHandler.MaxDrawdownPercentForOpenTrades(eaMaxDrawdownPercentForOpenTrades); // @@ -1219,66 +1214,24 @@ void OnSignalRecieved( return; } - // - bool isFiltered = x121Parser.IsFiltered( - signal, - conditions // - ); - if (isFiltered) - { - // - eaTradeHandler.RemoveSignal(signal); - return; - } - - // - // Attach Conditions Summary to Signal ... - string conditionsSummary = conditions.GenerateSummary( - false, - false, - true, - false // - ); - - // - signal.conditions = x121Parser.GenerateSignalConditions( - signal, - conditions // - ); - - // - // Check Signal Delay ... - datetime currentTime = TimeCurrent(); - int delay = eaDelayBarBetweenTwoSignal; - bool isDelayPassed = delay <= 0 - ? true - : !IsValid(lastSignalOn) - ? true - : MathAbs(TimeToSeconds(currentTime)) - MathAbs(TimeToSeconds(lastSignalOn)) >= ulong(delay * PeriodSeconds(_Period)); - if (!isDelayPassed) - { - return; - } - // // Execute Signal Using Trade Handler ... ENUM_X_SIGNAL_EXECUTION_RESULT state; bool isExecuted = eaTradeHandler.ExecuteSignal( signal, - state // + state, + conditions // ); - - // - if (isExecuted) - { - lastSignalOn = currentTime; - } } // // Handle StopLoss Triggered Positions ... void OnStopLossTriggered(const XDeal &deal) { + // + eaTradeHandler.HandleSL( + deal.positionId); + // // Finish ... eaTradeHandler.Finish(deal); @@ -1291,6 +1244,10 @@ void OnStopLossTriggered(const XDeal &deal) // Handle Take Profit Triggered Positions ... void OnTakeProfitTriggered(const XDeal &deal) { + // + eaTradeHandler.HandleTP( + deal.positionId); + // // Finish ... eaTradeHandler.Finish(deal);