////////////////////////////////////////////////////////////////////////////////////////// // // Temp Test Strategy: // ////////////////////////////////////////////////////////////////////////////////////////// // // TODO: Remove this ... XSMCStrategySetupConditions mTestConditions; bool DetectTestSignal( X121SMCStrategyConditions &conditions // ) { // bool result = false; // string symbol = GetSymbol(); ENUM_TIMEFRAMES period = GetPeriod(); // ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_SMPV; string providerStr = ToString(provider); // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; int ppIndex = pIndex + 1; // XOHCL zBar; result = zBar.Init( symbol, period, zIndex // ); if (!result) { return result; } // XOHCL cBar; result = cBar.Init( symbol, period, cIndex // ); if (!result) { return result; } // bool isBullish = false; bool isBearish = false; // 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); // double selectedSL = 0; // X121SMCCycleConditions triggerConditions = conditions.triggerConditions; X121SMCCycleConditions decisionConditions = conditions.decisionConditions; X121SMCCycleConditions analyseConditions = conditions.analyseConditions; X121SMCCycleConditions verificationConditions = conditions.verificationConditions; X121SMCCycleConditions consolidationConditions = conditions.consolidationConditions; X121SMCCycleConditions visionConditions = conditions.visionConditions; // XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Retrieve Peak and Vale ... double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[0]; double triggerVale = triggerConditions.x121Conditions.valesBuffer[0]; // int zoneValidationDivider = 10; int validPivotRepetition = mTriggerCycleHelper.mX121Helper .GetDonChainLength(); // datetime setupTime = mTestConditions.setupTime; bool isSetuped = mTestConditions.IsSetuped(); ENUM_X_DIRECTION setupDir = mTestConditions.dir; if (!isSetuped) { // // Detect Signal Setup ... // if (!result) { return result; } } // // Detect Trigger Conditions ... bool canTrigger = mTestConditions.CanTrigger(); datetime triggerTime = mTestConditions.triggerTime; result = canTrigger; if (!canTrigger) { // if (!result) { return result; } // isBullish = IsBullish(setupDir); isBearish = IsBearish(setupDir); result = isBullish || isBearish; if (!result) { // // Check Trigger Consitions ... if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } return result; } // mTestConditions.symbol = symbol; mTestConditions.period = period; mTestConditions.triggerTime = cTime; mTestConditions.sl = isBullish ? 0 : 0; mTestConditions.type = isBullish ? X_POSITION_TYPE_LONG : X_POSITION_TYPE_SHORT; // canTrigger = mTestConditions.CanTrigger(); triggerTime = mTestConditions.triggerTime; result = canTrigger; if (!result) { // // Check Trigger Consitions ... if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } // return result; } } // // Check Signal Direction ... // isBullish = IsBullish(setupDir); isBearish = IsBearish(setupDir); // result = isBullish || isBearish; if (!result) { return result; } // if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } // // Issues Signal on Conditions ... conditions.signalDir = mTestConditions.dir; conditions.provider = providerStr; conditions.sl = mTestConditions.sl; // mTestConditions.Clean(); // return result; } // // Custom Providers Conditions ... struct XSMCStrategySetupConditions { // // Props ... // string symbol; ENUM_TIMEFRAMES period; // double sl; ENUM_X_DIRECTION dir; ENUM_X_POSITION_TYPES type; // // Setup Props ... // datetime setupTime; datetime triggerTime; // // Trigger Props ... // // Constructor ... XSMCStrategySetupConditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // sl = 0; // dir = X_DIRECTION_NONE; type = X_POSITION_TYPE_NONE; // symbol = NULL; period = NULL; setupTime = NULL; triggerTime = NULL; } /** * 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; } /** * 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; } // }; ////////////////////////////////////////////////////////////////////////////////////////// // // Consolidation Based Strategy: // ////////////////////////////////////////////////////////////////////////////////////////// // // TODO: Remove this ... XSMCStrategySetupConditions mTestConditions; bool DetectTestSignal( X121SMCStrategyConditions &conditions // ) { // bool result = false; // string symbol = GetSymbol(); ENUM_TIMEFRAMES period = GetPeriod(); // ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_SMPV; string providerStr = ToString(provider); // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; int ppIndex = pIndex + 1; // XOHCL zBar; result = zBar.Init( symbol, period, zIndex // ); if (!result) { return result; } // XOHCL cBar; result = cBar.Init( symbol, period, cIndex // ); if (!result) { return result; } // bool isBullish = false; bool isBearish = false; // 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); // double selectedSL = 0; // X121SMCCycleConditions triggerConditions = conditions.triggerConditions; X121SMCCycleConditions decisionConditions = conditions.decisionConditions; X121SMCCycleConditions analyseConditions = conditions.analyseConditions; X121SMCCycleConditions verificationConditions = conditions.verificationConditions; X121SMCCycleConditions consolidationConditions = conditions.consolidationConditions; X121SMCCycleConditions visionConditions = conditions.visionConditions; // XPOIState triggerState = triggerConditions.state; XPOIState decisionState = decisionConditions.state; XPOIState analyseState = analyseConditions.state; XPOIState verificationState = verificationConditions.state; XPOIState consolidationState = consolidationConditions.state; XPOIState visionState = visionConditions.state; // // Retrieve Peak and Vale ... double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[0]; double triggerVale = triggerConditions.x121Conditions.valesBuffer[0]; // int zoneValidationDivider = 10; int validPivotRepetition = mTriggerCycleHelper.mX121Helper .GetDonChainLength(); // XOHCL breakerBar; bool hasZone = false; XPVPivotPoint validPeak; XPVPivotPoint validVale; bool canTrigger = false; bool hasValidPeak = false; bool hasValidVale = false; datetime setupTime = NULL; bool isZoneBreaked = false; bool hasConsolidation = false; XConsolidationZone consolidation; // setupTime = mTestConditions.setupTime; bool isSetuped = mTestConditions.IsSetuped(); ENUM_X_DIRECTION setupDir = mTestConditions.dir; if (!isSetuped) { // bool isNewPeak = triggerConditions.x121Conditions.isNewPeak; bool isNewVale = triggerConditions.x121Conditions.isNewVale; bool isNewPivot = isNewPeak || isNewVale; result = isNewPivot; if (!result) { return result; } // mTestConditions.peak = triggerPeak; mTestConditions.vale = triggerVale; hasConsolidation = Contains( CONSOLIDATION_BREAKED_DETECTED, mTriggerCycleEvents // ); // result = hasConsolidation; if (!result) { return result; } // result = mTriggerCycleHelper .GetLastConsolidationZone(consolidation); if (!result) { return result; } // // Validate Breaker Bar ... result = consolidation.breakerBar .GetPreviousBar(breakerBar); // // Find Momentum, Engulf Bar ... // // Engulfing ... ENUM_X_DIRECTION engulfDir; bool isEngulf = mTriggerCycleHelper.mBarAnalyser.IsEngulfBar( breakerBar, engulfDir // ); // // Momentum ... ENUM_X_DIRECTION momentumDir; bool isMomentum = mTriggerCycleHelper.mBarAnalyser.IsMomentumBar( breakerBar, momentumDir // ); // // Rejection ... ENUM_X_DIRECTION rejectionDir; bool isRejection = mTriggerCycleHelper.mBarAnalyser.IsRejectionBar( breakerBar, rejectionDir // ); // // Fibo Pressure ... ENUM_X_DIRECTION fiboPresureDir; bool hasFiboPressure = mTriggerCycleHelper.mBarAnalyser.HasFiboPressure( breakerBar, fiboPresureDir // ); // // Check Bar is Bullished ... bool isBarBullish = // // Fibo Pressure ... (hasFiboPressure && IsBullish(fiboPresureDir)) // || // ( // // Engulfing ... (isEngulf && IsBullish(engulfDir)) // || // // Momentum ... (isMomentum && IsBullish(momentumDir)) // || // // Rejection ... (isRejection && IsBullish(rejectionDir)) // ) // ; // // Check Bar is Bearish ... bool isBarBearish = // // Fibo Pressure ... (hasFiboPressure && IsBearish(fiboPresureDir)) // || // ( // // Engulfing ... (isEngulf && IsBearish(engulfDir)) // || // // Momentum ... (isMomentum && IsBearish(momentumDir)) // || // // Rejection ... (isRejection && IsBearish(rejectionDir)) // ) // ; // bool isBarPassed = isBarBullish || isBarBearish; result = isBarPassed; if (!result) { return result; } // isBullish = // isBarBullish && IsBullish(consolidation.breakDirection) // ; // isBearish = // isBarBearish && IsBearish(consolidation.breakDirection) // ; // result = isBullish || isBearish; if (!result) { return result; } // XCConsolidationZoneObject *iConsolidationObj; iConsolidationObj = new XCConsolidationZoneObject(); bool isCreated = iConsolidationObj.Create( mPOIDrawer.ChartIdentification(), mPOIDrawer.SubWindowIdentification(), consolidation // ); if (isCreated) { // iConsolidationObj.ZoneWidth(2); iConsolidationObj.ZoneColor(clrLightBlue); // AddObjectIfNotExists(iConsolidationObj); } // isSetuped = true; setupTime = cTime; mTestConditions.setupTime = setupTime; setupDir = consolidation.breakDirection; mTestConditions.dir = setupDir; } // // Detect Trigger Conditions ... canTrigger = mTestConditions.CanTrigger(); datetime triggerTime = mTestConditions.triggerTime; if (!canTrigger) { // isBullish = IsBullish(setupDir); isBearish = IsBearish(setupDir); result = isBullish || isBearish; if (!result) { // // Check Trigger Consitions ... if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } return result; } // mTestConditions.symbol = symbol; mTestConditions.period = period; mTestConditions.triggerTime = cTime; mTestConditions.sl = isBullish ? consolidation.lower : consolidation.upper; mTestConditions.type = isBullish ? X_POSITION_TYPE_LONG : X_POSITION_TYPE_SHORT; // canTrigger = mTestConditions.CanTrigger(); triggerTime = mTestConditions.triggerTime; result = canTrigger; if (!result) { // // Check Trigger Consitions ... if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } // return result; } } // if (cTime - setupTime > 2400) { // ClearDraws(); // mTestConditions.Clean(); } // // Issues Signal on Conditions ... conditions.signalDir = mTestConditions.dir; conditions.provider = providerStr; conditions.sl = mTestConditions.sl; // mTestConditions.Clean(); // return result; } // // Custom Providers Conditions ... struct XSMCStrategySetupConditions { // // Props ... // string symbol; ENUM_TIMEFRAMES period; // double sl; ENUM_X_DIRECTION dir; ENUM_X_POSITION_TYPES type; // // Setup Props ... // datetime setupTime; datetime triggerTime; XConsolidationZone zone; XConsolidationZone consolidation; // double peak; double vale; XPVPivotPoint validPeak; XPVPivotPoint validVale; // // Trigger Props ... // // Constructor ... XSMCStrategySetupConditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // sl = 0; // zone.Clean(); consolidation.Clean(); dir = X_DIRECTION_NONE; type = X_POSITION_TYPE_NONE; // symbol = NULL; period = NULL; setupTime = NULL; triggerTime = NULL; // peak = 0; vale = 0; validPeak.Clean(); validVale.Clean(); } /** * 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; } /** * 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; } // // Helpers ... void UpdateZone() { // if (!zone.IsValid() || !validPeak.IsValid() || !validVale.IsValid()) { return; } // zone.upper = validPeak.value; zone.lower = validVale.value; // zone.Update(); // if (consolidation.IsValid()) { consolidation.Update(); } } // }; ////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// // // Consolidation Based Strategy: // //////////////////////////////////////////////////////////////////////////////////////////