/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 X121 SMC Signal Class // ------------------------------------------------- // Name: // Description: provide all Signalling functions ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Imports ... #include "../Classes/x-121.smc.market.cycle.helper.class.mq5" #include "../Libraries/x-121.smc.lib.mq5" // // Definitions ... struct X121SMCStrategyXOEPVSignalConditions { // // Props ... // string symbol; ENUM_TIMEFRAMES period; // double sl; double target; ENUM_X_DIRECTION dir; ENUM_X_POSITION_TYPES type; // // Setup Props ... // datetime setupTime; datetime triggerTime; // XCFVG *bullishOBs[]; XCFVG *bearishOBs[]; // // Constructor ... X121SMCStrategyXOEPVSignalConditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // sl = 0; target = 0; // dir = X_DIRECTION_NONE; type = X_POSITION_TYPE_NONE; // symbol = NULL; period = NULL; setupTime = NULL; triggerTime = NULL; // ExtensionClean(); } /** * Check Condition is Setting Up ... * * @param dir: ENUM_X_DIRECTION member, Setting Up Direction ... * * @return ( bool ) */ bool IsSetuped() { // bool result = false; // result = IsValid(setupTime) && HasDirection(dir); if (!result) { return result; } // return result; } /** * Calculate Setup Age ... * * @return ( int ) */ int GetSetupAge() { // int result = 0; // if (!IsSetuped()) { return result; } // result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period); // return result; } /** * Detect How we Can Trigger Signal ... * * @return ( bool ) */ bool CanTrigger() { // bool result = false; // result = // sl > 0 && IsValid(symbol) && IsValid(period) && IsValid(triggerTime) && type != X_POSITION_TYPE_ALL && type != X_POSITION_TYPE_NONE // ; // return result; } // // Extensions ... /** * Clean Additional Properties ... */ void ExtensionClean() { CleanOBs(); } void CleanOBs() { // Clean(bullishOBs); Clean(bearishOBs); } int CountBullishOBs() { return ArraySize(bullishOBs); } bool HasBullishOBs() { return CountBullishOBs() >= 3; } int CountBearishOBs() { return ArraySize(bearishOBs); } bool HasBearishOBs() { return CountBearishOBs() >= 3; } // }; // // Extension Functions ... // // Detect Setup Conditions ... bool DetectX121SMCXOEPVSiganlSetup( string _symbol, ENUM_TIMEFRAMES _period, // X121SMCStrategyXOEPVSignalConditions &conditions, // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper // ) { // bool result = false; // bool isBullish = false; bool isBearish = false; // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; int ppIndex = pIndex + 1; // int loopback = 10; // string symbol = _symbol; ENUM_TIMEFRAMES period = _period; // conditions.symbol = symbol; conditions.period = period; // XOHCL zBar; result = zBar.Init( symbol, period, zIndex // ); if (!result) { return result; } // XOHCL cBar; result = cBar.Init( symbol, period, cIndex // ); if (!result) { return result; } // double ask = GetAsk(symbol); double bid = GetBid(symbol); datetime cTime = TimeCurrent(); // double ll = cBar.FindLowest(9, MODE_LOW); double hh = cBar.FindHighest(9, MODE_HIGH); // int zoneValidationDivider = 10; int validPivotRepetition = triggerCycleHelper.mX121Helper .GetDonChainLength(); // double selectedSL = 0; // // Cycles Conditions ... // // Trigger ... ENUM_XPOI_EVENTS triggerPoiEvents[]; ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; X121SMCCycleConditions triggerConditions; result = triggerCycleHelper.GetConditions( triggerCycleEvents, triggerPoiEvents, triggerConditions, zIndex, loopback // ); if (!result) { return result; } // // Decision ... ENUM_XPOI_EVENTS decisionPoiEvents[]; ENUM_X_CYCLE_EVENTS decisionCycleEvents[]; X121SMCCycleConditions decisionConditions; result = decisionCycleHelper.GetConditions( decisionCycleEvents, decisionPoiEvents, decisionConditions, zIndex, loopback // ); if (!result) { return result; } // // Analyse ... ENUM_XPOI_EVENTS analysePoiEvents[]; ENUM_X_CYCLE_EVENTS analyseCycleEvents[]; X121SMCCycleConditions analyseConditions; result = analyseCycleHelper.GetConditions( analyseCycleEvents, analysePoiEvents, analyseConditions, zIndex, loopback // ); if (!result) { return result; } // // Verification ... ENUM_XPOI_EVENTS verificationPoiEvents[]; ENUM_X_CYCLE_EVENTS verificationCycleEvents[]; X121SMCCycleConditions verificationConditions; result = verificationCycleHelper.GetConditions( verificationCycleEvents, verificationPoiEvents, verificationConditions, zIndex, loopback // ); if (!result) { return result; } // // Consolidation ... ENUM_XPOI_EVENTS consolidationPoiEvents[]; ENUM_X_CYCLE_EVENTS consolidationCycleEvents[]; X121SMCCycleConditions consolidationConditions; result = consolidationCycleHelper.GetConditions( consolidationCycleEvents, consolidationPoiEvents, consolidationConditions, zIndex, loopback // ); if (!result) { return result; } // // Vision ... ENUM_XPOI_EVENTS visionPoiEvents[]; ENUM_X_CYCLE_EVENTS visionCycleEvents[]; X121SMCCycleConditions visionConditions; result = visionCycleHelper.GetConditions( visionCycleEvents, visionPoiEvents, visionConditions, zIndex, loopback // ); if (!result) { return result; } // // Cycles POI States ... XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Setup Conditions ... // // Vision ... // double visionVWapFast = visionConditions.x121Conditions.vwapFastBuffer[1]; double visionVWapMid = visionConditions.x121Conditions.vwapMidBuffer[1]; double visionVWapSlow = visionConditions.x121Conditions.vwapSlowBuffer[1]; // double visionVWapFastPrev = visionConditions.x121Conditions.vwapFastBuffer[2]; double visionVWapMidPrev = visionConditions.x121Conditions.vwapMidBuffer[2]; double visionVWapSlowPrev = visionConditions.x121Conditions.vwapSlowBuffer[2]; // double visionVWaps[3] = { visionVWapFast, visionVWapMid, visionVWapSlow, }; double visionVWapMax = GetMax(visionVWaps); double visionVWapMin = GetMin(visionVWaps); // bool isVisionVWapFastCrossedOverMid = visionVWapFast > visionVWapMid && !(visionVWapFastPrev > visionVWapMidPrev); // bool isVisionVWapFastCrossedUnderMid = visionVWapFast < visionVWapMid && !(visionVWapFastPrev < visionVWapMidPrev); // bool isVisionVWapBullishState = visionConditions.x121Conditions.isVWapBullishState; bool isVisionVWapSwitchedToBullishState = visionConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isVisionVWapBearishState = visionConditions.x121Conditions.isVWapBearishState; bool isVisionVWapSwitchedToBearishState = visionConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isVisionVWapBullishOrdered = visionConditions.x121Conditions.isVWapBullishOrdered; bool isVisionVWapSwitchedToBullishOrdered = visionConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isVisionVWapBearishOrdered = visionConditions.x121Conditions.isVWapBearishOrdered; bool isVisionVWapSwitchedToBearishOrdered = visionConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isVisionVWapBullishFormed = // (isVisionVWapBullishOrdered || isVisionVWapSwitchedToBullishOrdered) && (isVisionVWapBullishState || isVisionVWapSwitchedToBullishState) // ; // bool isVisionVWapBearishFormed = // (isVisionVWapBearishOrdered || isVisionVWapSwitchedToBearishOrdered) && (isVisionVWapBearishState || isVisionVWapSwitchedToBearishState) // ; // // Consolidation ... // double consolidationVWapFast = consolidationConditions.x121Conditions.vwapFastBuffer[1]; double consolidationVWapMid = consolidationConditions.x121Conditions.vwapMidBuffer[1]; double consolidationVWapSlow = consolidationConditions.x121Conditions.vwapSlowBuffer[1]; // double consolidationVWapFastPrev = consolidationConditions.x121Conditions.vwapFastBuffer[2]; double consolidationVWapMidPrev = consolidationConditions.x121Conditions.vwapMidBuffer[2]; double consolidationVWapSlowPrev = consolidationConditions.x121Conditions.vwapSlowBuffer[2]; // double consolidationVWaps[3] = { consolidationVWapFast, consolidationVWapMid, consolidationVWapSlow, }; double consolidationVWapMax = GetMax(consolidationVWaps); double consolidationVWapMin = GetMin(consolidationVWaps); // bool isConsolidationVWapBullishState = consolidationConditions.x121Conditions.isVWapBullishState; bool isConsolidationVWapSwitchedToBullishState = consolidationConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isConsolidationVWapBearishState = consolidationConditions.x121Conditions.isVWapBearishState; bool isConsolidationVWapSwitchedToBearishState = consolidationConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isConsolidationVWapBullishOrdered = consolidationConditions.x121Conditions.isVWapBullishOrdered; bool isConsolidationVWapSwitchedToBullishOrdered = consolidationConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isConsolidationVWapBearishOrdered = consolidationConditions.x121Conditions.isVWapBearishOrdered; bool isConsolidationVWapSwitchedToBearishOrdered = consolidationConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isConsolidationVWapBullishFormed = // (isConsolidationVWapBullishOrdered || isConsolidationVWapSwitchedToBullishOrdered) && (isConsolidationVWapBullishState || isConsolidationVWapSwitchedToBullishState) // ; // bool isConsolidationVWapBearishFormed = // (isConsolidationVWapBearishOrdered || isConsolidationVWapSwitchedToBearishOrdered) && (isConsolidationVWapBearishState || isConsolidationVWapSwitchedToBearishState) // ; // // Verification ... // double verificationVWapFast = verificationConditions.x121Conditions.vwapFastBuffer[1]; double verificationVWapMid = verificationConditions.x121Conditions.vwapMidBuffer[1]; double verificationVWapSlow = verificationConditions.x121Conditions.vwapSlowBuffer[1]; // double verificationVWapFastPrev = verificationConditions.x121Conditions.vwapFastBuffer[2]; double verificationVWapMidPrev = verificationConditions.x121Conditions.vwapMidBuffer[2]; double verificationVWapSlowPrev = verificationConditions.x121Conditions.vwapSlowBuffer[2]; // double verificationVWaps[3] = { verificationVWapFast, verificationVWapMid, verificationVWapSlow, }; double verificationVWapMax = GetMax(verificationVWaps); double verificationVWapMin = GetMin(verificationVWaps); // bool isVerificationVWapBullishState = verificationConditions.x121Conditions.isVWapBullishState; bool isVerificationVWapSwitchedToBullishState = verificationConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isVerificationVWapBearishState = verificationConditions.x121Conditions.isVWapBearishState; bool isVerificationVWapSwitchedToBearishState = verificationConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isVerificationVWapBullishOrdered = verificationConditions.x121Conditions.isVWapBullishOrdered; bool isVerificationVWapSwitchedToBullishOrdered = verificationConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isVerificationVWapBearishOrdered = verificationConditions.x121Conditions.isVWapBearishOrdered; bool isVerificationVWapSwitchedToBearishOrdered = verificationConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isVerificationVWapBullishFormed = // (isVerificationVWapBullishOrdered || isVerificationVWapSwitchedToBullishOrdered) && (isVerificationVWapBullishState || isVerificationVWapSwitchedToBullishState) // ; // bool isVerificationVWapBearishFormed = // (isVerificationVWapBearishOrdered || isVerificationVWapSwitchedToBearishOrdered) && (isVerificationVWapBearishState || isVerificationVWapSwitchedToBearishState) // ; // // Analyse ... // double analyseVWapFast = analyseConditions.x121Conditions.vwapFastBuffer[1]; double analyseVWapMid = analyseConditions.x121Conditions.vwapMidBuffer[1]; double analyseVWapSlow = analyseConditions.x121Conditions.vwapSlowBuffer[1]; // double analyseVWapFastPrev = analyseConditions.x121Conditions.vwapFastBuffer[2]; double analyseVWapMidPrev = analyseConditions.x121Conditions.vwapMidBuffer[2]; double analyseVWapSlowPrev = analyseConditions.x121Conditions.vwapSlowBuffer[2]; // double analyseVWaps[3] = { analyseVWapFast, analyseVWapMid, analyseVWapSlow, }; double analyseVWapMax = GetMax(analyseVWaps); double analyseVWapMin = GetMin(analyseVWaps); // bool isAnalyseVWapBullishState = analyseConditions.x121Conditions.isVWapBullishState; bool isAnalyseVWapSwitchedToBullishState = analyseConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isAnalyseVWapBearishState = analyseConditions.x121Conditions.isVWapBearishState; bool isAnalyseVWapSwitchedToBearishState = analyseConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isAnalyseVWapBullishOrdered = analyseConditions.x121Conditions.isVWapBullishOrdered; bool isAnalyseVWapSwitchedToBullishOrdered = analyseConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isAnalyseVWapBearishOrdered = analyseConditions.x121Conditions.isVWapBearishOrdered; bool isAnalyseVWapSwitchedToBearishOrdered = analyseConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isAnalyseVWapBullishFormed = // (isAnalyseVWapBullishOrdered || isAnalyseVWapSwitchedToBullishOrdered) && (isAnalyseVWapBullishState || isAnalyseVWapSwitchedToBullishState) // ; // bool isAnalyseVWapBearishFormed = // (isAnalyseVWapBearishOrdered || isAnalyseVWapSwitchedToBearishOrdered) && (isAnalyseVWapBearishState || isAnalyseVWapSwitchedToBearishState) // ; // // Summary VWap ... // isBullish = // isVisionVWapBullishFormed && isConsolidationVWapBullishFormed && isVerificationVWapBullishFormed && isAnalyseVWapBullishFormed; // isBearish = // isVisionVWapBearishFormed && isConsolidationVWapBearishFormed && isVerificationVWapBearishFormed && isAnalyseVWapBearishFormed; // result = isBullish || isBearish; if (!result) { // // Clean Conditions for Regenerate ... conditions.CleanOBs(); return result; } // conditions.setupTime = cTime; conditions.dir = isBullish ? X_DIRECTION_BULLISH : X_DIRECTION_BEARISH; // return result; } // // Detect Trigger Conditions ... bool DetectX121SMCXOEPVSiganlTrigger( // X121SMCStrategyXOEPVSignalConditions &conditions, // string _symbol, ENUM_TIMEFRAMES _period, // XC121SMCCycleHelper *triggerCycleHelper, XC121SMCCycleHelper *decisionCycleHelper, XC121SMCCycleHelper *analyseCycleHelper, XC121SMCCycleHelper *verificationCycleHelper, XC121SMCCycleHelper *consolidationCycleHelper, XC121SMCCycleHelper *visionCycleHelper, // int maxAllowedSetupAge = 60 // // ) { // bool result = false; // result = conditions.IsSetuped(); if (!result) { return result; } // datetime setupTime = conditions.setupTime; ENUM_X_DIRECTION setupDir = conditions.dir; // bool isBullish = IsBullish(setupDir); bool isBearish = IsBearish(setupDir); // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; int ppIndex = pIndex + 1; // int loopback = 10; // string symbol = _symbol; ENUM_TIMEFRAMES period = _period; // XOHCL zBar; result = zBar.Init( symbol, period, zIndex // ); if (!result) { return result; } // XOHCL cBar; result = cBar.Init( symbol, period, cIndex // ); if (!result) { return result; } // double ask = GetAsk(symbol); double bid = GetBid(symbol); datetime cTime = TimeCurrent(); // double ll = cBar.FindLowest(9, MODE_LOW); double hh = cBar.FindHighest(9, MODE_HIGH); // int zoneValidationDivider = 10; int validPivotRepetition = triggerCycleHelper.mX121Helper .GetDonChainLength(); // double selectedSL = 0; // // Cycles Conditions ... // // Trigger ... ENUM_XPOI_EVENTS triggerPoiEvents[]; ENUM_X_CYCLE_EVENTS triggerCycleEvents[]; X121SMCCycleConditions triggerConditions; result = triggerCycleHelper.GetConditions( triggerCycleEvents, triggerPoiEvents, triggerConditions, zIndex, loopback // ); if (!result) { return result; } // // Decision ... ENUM_XPOI_EVENTS decisionPoiEvents[]; ENUM_X_CYCLE_EVENTS decisionCycleEvents[]; X121SMCCycleConditions decisionConditions; result = decisionCycleHelper.GetConditions( decisionCycleEvents, decisionPoiEvents, decisionConditions, zIndex, loopback // ); if (!result) { return result; } // // Analyse ... ENUM_XPOI_EVENTS analysePoiEvents[]; ENUM_X_CYCLE_EVENTS analyseCycleEvents[]; X121SMCCycleConditions analyseConditions; result = analyseCycleHelper.GetConditions( analyseCycleEvents, analysePoiEvents, analyseConditions, zIndex, loopback // ); if (!result) { return result; } // // Verification ... ENUM_XPOI_EVENTS verificationPoiEvents[]; ENUM_X_CYCLE_EVENTS verificationCycleEvents[]; X121SMCCycleConditions verificationConditions; result = verificationCycleHelper.GetConditions( verificationCycleEvents, verificationPoiEvents, verificationConditions, zIndex, loopback // ); if (!result) { return result; } // // Consolidation ... ENUM_XPOI_EVENTS consolidationPoiEvents[]; ENUM_X_CYCLE_EVENTS consolidationCycleEvents[]; X121SMCCycleConditions consolidationConditions; result = consolidationCycleHelper.GetConditions( consolidationCycleEvents, consolidationPoiEvents, consolidationConditions, zIndex, loopback // ); if (!result) { return result; } // // Vision ... ENUM_XPOI_EVENTS visionPoiEvents[]; ENUM_X_CYCLE_EVENTS visionCycleEvents[]; X121SMCCycleConditions visionConditions; result = visionCycleHelper.GetConditions( visionCycleEvents, visionPoiEvents, visionConditions, zIndex, loopback // ); if (!result) { return result; } // // Cycles POI States ... XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Trigger Conditions ... // // Decision ... // double decisionVWapFast = decisionConditions.x121Conditions.vwapFastBuffer[1]; double decisionVWapMid = decisionConditions.x121Conditions.vwapMidBuffer[1]; double decisionVWapSlow = decisionConditions.x121Conditions.vwapSlowBuffer[1]; // double decisionVWapFastPrev = decisionConditions.x121Conditions.vwapFastBuffer[2]; double decisionVWapMidPrev = decisionConditions.x121Conditions.vwapMidBuffer[2]; double decisionVWapSlowPrev = decisionConditions.x121Conditions.vwapSlowBuffer[2]; // double decisionVWaps[3] = { decisionVWapFast, decisionVWapMid, decisionVWapSlow, }; double decisionVWapMax = GetMax(decisionVWaps); double decisionVWapMin = GetMin(decisionVWaps); // bool isDecisionVWapBullishState = decisionConditions.x121Conditions.isVWapBullishState; bool isDecisionVWapSwitchedToBullishState = decisionConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isDecisionVWapBearishState = decisionConditions.x121Conditions.isVWapBearishState; bool isDecisionVWapSwitchedToBearishState = decisionConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isDecisionVWapBullishOrdered = decisionConditions.x121Conditions.isVWapBullishOrdered; bool isDecisionVWapSwitchedToBullishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isDecisionVWapBearishOrdered = decisionConditions.x121Conditions.isVWapBearishOrdered; bool isDecisionVWapSwitchedToBearishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isDecisionVWapBullishFormed = // (isDecisionVWapBullishOrdered || isDecisionVWapSwitchedToBullishOrdered) && (isDecisionVWapBullishState || isDecisionVWapSwitchedToBullishState) // ; // bool isDecisionVWapBearishFormed = // (isDecisionVWapBearishOrdered || isDecisionVWapSwitchedToBearishOrdered) && (isDecisionVWapBearishState || isDecisionVWapSwitchedToBearishState) // ; // // Trigger ... // double triggerVWapFast = triggerConditions.x121Conditions.vwapFastBuffer[1]; double triggerVWapMid = triggerConditions.x121Conditions.vwapMidBuffer[1]; double triggerVWapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1]; // double triggerVWapFastPrev = triggerConditions.x121Conditions.vwapFastBuffer[2]; double triggerVWapMidPrev = triggerConditions.x121Conditions.vwapMidBuffer[2]; double triggerVWapSlowPrev = triggerConditions.x121Conditions.vwapSlowBuffer[2]; // double triggerVWaps[3] = { triggerVWapFast, triggerVWapMid, triggerVWapSlow, }; double triggerVWapMax = GetMax(triggerVWaps); double triggerVWapMin = GetMin(triggerVWaps); // bool isTriggerVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState; bool isTriggerVWapSwitchedToBullishState = triggerConditions.x121Conditions.isVWapSwitchedToBullishState; // bool isTriggerVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState; bool isTriggerVWapSwitchedToBearishState = triggerConditions.x121Conditions.isVWapSwitchedToBearishState; // bool isTriggerVWapBullishOrdered = triggerConditions.x121Conditions.isVWapBullishOrdered; bool isTriggerVWapSwitchedToBullishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBullishOrdered; // bool isTriggerVWapBearishOrdered = triggerConditions.x121Conditions.isVWapBearishOrdered; bool isTriggerVWapSwitchedToBearishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBearishOrdered; // bool isTriggerVWapBullishFormed = // (isTriggerVWapBullishState && isTriggerVWapSwitchedToBullishOrdered) || (isTriggerVWapBullishOrdered && isTriggerVWapSwitchedToBullishState) // ; // bool isTriggerVWapBearishFormed = // (isTriggerVWapBearishState && isTriggerVWapSwitchedToBearishOrdered) || (isTriggerVWapBearishOrdered && isTriggerVWapSwitchedToBearishState) // ; // isBullish = // isBullish && isTriggerVWapBullishFormed && isDecisionVWapBullishFormed // ; // isBearish = // isBearish && isTriggerVWapBearishFormed && isDecisionVWapBearishFormed // ; // result = isBullish || isBearish; if (!result) { // // Cleanup Setup Conditions ... int setupAge = conditions.GetSetupAge(); if (IsValidSize(setupAge) && IsValidSize(maxAllowedSetupAge) && setupAge >= maxAllowedSetupAge) { conditions.Clean(); } // return result; } // conditions.triggerTime = cTime; conditions.sl = isBullish ? triggerVWapMin : triggerVWapMax; conditions.type = isBullish ? X_POSITION_TYPE_LONG : X_POSITION_TYPE_SHORT; // return result; } //