From ffcf43067e84e40450699dc2e1a09e2a5faaf7ef Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Fri, 4 Apr 2025 22:03:57 +0330 Subject: [PATCH] add Function Docs and some Cleanups ... --- .../Signals/x-121.smc.xind.signal.class.mq5 | 247 ++++++++++++++---- .../Signals/x-121.smc.xind.signal.lib.mq5 | 4 +- 2 files changed, 203 insertions(+), 48 deletions(-) diff --git a/X121SMCEA/Signals/x-121.smc.xind.signal.class.mq5 b/X121SMCEA/Signals/x-121.smc.xind.signal.class.mq5 index 8c8c0056..d431e400 100644 --- a/X121SMCEA/Signals/x-121.smc.xind.signal.class.mq5 +++ b/X121SMCEA/Signals/x-121.smc.xind.signal.class.mq5 @@ -37,8 +37,8 @@ class XCX121SMCXINDSignalDetector : public XCBase bool useGuards; double rfRewar; XBoxZone mWaitingBoxes[]; - XBoxZone mActivatedBoxes[]; XBoxZone mBreakedBoxes[]; + XBoxZone mActivatedBoxes[]; XBoxZone mUnAvailableBoxes[]; X121SMCStrategyXINDSignalConditions mConditions; X121SMCStrategyXINDSignalConditions mConditionsCollection[]; @@ -67,14 +67,17 @@ class XCX121SMCXINDSignalDetector : public XCBase // // - // - // Detect Setup Conditions ... + /** + * Detect Setup Conditions based on Signalling ... + * + * @param provider: X121SMCStrategySignalProviderData instance Reference, Specified Data for Cycles ... + * @param maxAllowedSLDistanceInPoint: int, Max Allowed SL Distance in Points (if Bigger thn Zero Provided) ... + * + * @return ( bool ) + */ bool DetectSignalSetup( - // X121SMCStrategySignalProviderData &provider, - // - double maxAllowedSLDistanceInPoint = 300 - // + double maxAllowedSLDistanceInPoint = 300 // ) { // @@ -105,6 +108,11 @@ class XCX121SMCXINDSignalDetector : public XCBase // int loopback = 10; + // + int idx = -1; + int count = 0; + bool has = false; + // mConditions.symbol = symbol; mConditions.period = period; @@ -224,6 +232,9 @@ class XCX121SMCXINDSignalDetector : public XCBase { // hasSignalBox = HasXPVConditions( + mWaitingBoxes, + mActivatedBoxes, + mBreakedBoxes, X_CYCLE_DECISION, signalBox, signalBoxDir, @@ -232,7 +243,11 @@ class XCX121SMCXINDSignalDetector : public XCBase ); if (hasSignalBox) { + // signalProvider = X121SMC_XIND_PROVIDER_XSTR; + + // + MakeSignalBoxUnAvailable(signalBox); } } @@ -240,10 +255,6 @@ class XCX121SMCXINDSignalDetector : public XCBase // // - // // - // // Update Models To Time ... - // UpdateTo(cTime); - // // Cleanup Signal if UnApproved ... if (!hasSignalBox) @@ -422,17 +433,19 @@ class XCX121SMCXINDSignalDetector : public XCBase return result; } - // - // Detect Trigger Conditions ... + /** + * Detect Trigger Conditions for Specified Signal ... + * + * @param conditions: X121SMCStrategyXINDSignalConditions instance Reference, Specified Signal Conditions ... + * @param provider: X121SMCStrategySignalProviderData instance Reference, Specified Data for Cycles ... + * @param maxAllowedSetupAge: specified Setup Age for Expiration (if bigger than Zero) ... + * + * @return ( bool ) + */ bool DetectSignalTrigger( - // X121SMCStrategyXINDSignalConditions &conditions, - // X121SMCStrategySignalProviderData &provider, - // - int maxAllowedSetupAge = 60 - // - ) + int maxAllowedSetupAge = 60) { // bool result = false; @@ -524,16 +537,19 @@ class XCX121SMCXINDSignalDetector : public XCBase return result; } - // - // Detect Guards ... + /** + * Detect Guards bsed on Signalling Class ... + * + * @param guards: X121SMCGuard instance Collection, Holds Provided Guards ... + * @param positions: XPosition instance Collection, Provides Signalling Based Positions for Apply Guards on them ... + * @param provider: X121SMCStrategySignalProviderData instance Reference, Specified Data for Cycles ... + * + * @return ( bool ) + */ bool DetectGuards( - // X121SMCGuard &guards[], const XPosition &positions[], - // - X121SMCStrategySignalProviderData &provider - // - ) + X121SMCStrategySignalProviderData &provider) { // bool result = false; @@ -1069,8 +1085,14 @@ class XCX121SMCXINDSignalDetector : public XCBase return result; } - // - // Waiting Boxes ... + /** + * Detect and Manage Important Zones and Categorized them for Signalling Clss ... + * + * @param cycle: ENUM_X_CYCLES member, Specified Source Cycle for Detecting ... + * @param provider: X121SMCStrategySignalProviderData instance Reference, Specified Data for Cycles ... + * + * @return ( int ) + */ int UpdateWaitingBoxes( ENUM_X_CYCLES cycle, X121SMCStrategySignalProviderData &provider // @@ -1416,7 +1438,138 @@ class XCX121SMCXINDSignalDetector : public XCBase return result; } - // + /** + * Make a Detected Signal Box UnAvailable for Prevent of Double Executing ... + * + * @param box: XBoxZone instance Reference, Specified Signal Box ... + */ + void MakeSignalBoxUnAvailable( + XBoxZone &box // + ) + { + // + int idx = -1; + int count = 0; + bool has = false; + + // + // Validate Box ... + has = box.IsValid(); + if (!has) + { + return; + } + + // + // Check Waiting Boxes ... + count = ArraySize(mWaitingBoxes); + has = IsValidSize(count); + if (has) + { + // + has = FindBoxIndex( + idx, + box, + mWaitingBoxes // + ); + if (has) + { + // + // Remove Signal Box From Collection ... + ArrayRemove( + mWaitingBoxes, + idx, + 1 // + ); + + // + // Add Signal Box to UnAvailable Boxes ... + AddRef( + box, + mUnAvailableBoxes // + ); + + // + return; + } + } + + // + // Check Activated Boxes ... + count = ArraySize(mActivatedBoxes); + has = IsValidSize(count); + if (has) + { + // + has = FindBoxIndex( + idx, + box, + mActivatedBoxes // + ); + if (has) + { + // + // Remove Signal Box From Collection ... + ArrayRemove( + mActivatedBoxes, + idx, + 1 // + ); + + // + // Add Signal Box to UnAvailable Boxes ... + AddRef( + box, + mUnAvailableBoxes // + ); + + // + return; + } + } + + // + // Check Breaked Boxes ... + count = ArraySize(mBreakedBoxes); + has = IsValidSize(count); + if (has) + { + // + has = FindBoxIndex( + idx, + box, + mBreakedBoxes // + ); + if (has) + { + // + // Remove Signal Box From Collection ... + ArrayRemove( + mBreakedBoxes, + idx, + 1 // + ); + + // + // Add Signal Box to UnAvailable Boxes ... + AddRef( + box, + mUnAvailableBoxes // + ); + + // + return; + } + } + } + + /** + * Check a Box is Exists in Box Collections of Signalling Collections ... + * + * @param box: XBoxZone instance Reference, Specified Box to Check ... + * + * @return ( bool ) + */ bool IsBoxExists(XBoxZone &box) { // @@ -1507,8 +1660,13 @@ class XCX121SMCXINDSignalDetector : public XCBase return result; } - // - // Add Conditions to Conditions Collection ... + /** + * Add Conditions to Conditions Collection if not Exists ... + * + * @param maxAllowed: int, Specified Max Allowed Holding Conditions ... + * + * @return ( int ) + */ int AddConditionsIfNotExists( int maxAllowed = 10 // ) @@ -1586,9 +1744,13 @@ class XCX121SMCXINDSignalDetector : public XCBase // // Draw Functions ... - // - // + /** + * Draw Specified Bar on Chart ... + * + * @param bar: XOHCL instance Reference, Specified Bar ... + * @param forceClean: force Clean Drawn Objects ... + */ void DrawBar( XOHCL &bar, XCPOIDrawer *drawer, @@ -1649,7 +1811,11 @@ class XCX121SMCXINDSignalDetector : public XCBase } } - // + /** + * Draw Boxes of Signallings on Chart ... + * + * @param forceClean: force Clean Drawn Objects ... + */ void DrawBoxes( XCPOIDrawer *drawer, bool forceClean = false // @@ -1758,19 +1924,6 @@ class XCX121SMCXINDSignalDetector : public XCBase mBarObjects.Clear(); } - // /** - // * Update To Time of Exists Components ... - // * - // * @param value: updated time ... - // */ - // void UpdateTo( - // datetime value = NULL // - // ) - // { - // // - // value = NormalizeTime(value); - // } - // }; diff --git a/X121SMCEA/Signals/x-121.smc.xind.signal.lib.mq5 b/X121SMCEA/Signals/x-121.smc.xind.signal.lib.mq5 index abd945b9..c39d388e 100644 --- a/X121SMCEA/Signals/x-121.smc.xind.signal.lib.mq5 +++ b/X121SMCEA/Signals/x-121.smc.xind.signal.lib.mq5 @@ -228,8 +228,10 @@ struct X121SMCStrategyXINDSignalConditions // // Detect Signals Based On XPV Indicator Golden Zones ... -// bool HasXPVConditions( + XBoxZone &waitingBoxes[], + XBoxZone &ctivtedBoxes[], + XBoxZone &breakedBoxes[], ENUM_X_CYCLES cycle, XBoxZone &box, ENUM_X_DIRECTION &dir,