From ee49fcb9052b8c95dfb440b277cd9f29576f18f0 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Thu, 31 Oct 2024 13:27:39 +0330 Subject: [PATCH] Last Works ... --- Documents/BKP/121.smc.strategy.tmp.mq5 | 582 ++++++++++++++++++ Libraries/x-saherelm.common.lib.mq5 | 8 +- Libraries/x-saherelm.x-poi.lib.mq5 | 67 ++ .../Strategy/x-121.smc.strategy.class.mq5 | Bin 59465 -> 107056 bytes 4 files changed, 650 insertions(+), 7 deletions(-) diff --git a/Documents/BKP/121.smc.strategy.tmp.mq5 b/Documents/BKP/121.smc.strategy.tmp.mq5 index 7aefd587..26e37223 100644 --- a/Documents/BKP/121.smc.strategy.tmp.mq5 +++ b/Documents/BKP/121.smc.strategy.tmp.mq5 @@ -547,3 +547,585 @@ // return result; } + +//////////////////////////////////////////////////////////////////////// + + + // + int supplyZonesCount = ArraySize(supplyAndDemandZoneState.supplyZones); + int demandZonesCount = ArraySize(supplyAndDemandZoneState.demandZones); + + // + XOHCL swingHighs[]; + Copy( + orderBlocksState.swingHighs, + swingHighs // + ); + Copy( + fvgsState.swingHighs, + swingHighs, + false // + ); + Copy( + triggerState.swingHighs, + swingHighs, + false // + ); + + // + XOHCL swingLows[]; + Copy( + orderBlocksState.swingLows, + swingLows // + ); + Copy( + fvgsState.swingLows, + swingLows, + false // + ); + Copy( + triggerState.swingLows, + swingLows, + false // + ); + + // + int swingHighsCount = ArraySize(swingHighs); + int swingLowsCount = ArraySize(swingLows); + if (!IsValidSize(swingLowsCount) || + !IsValidSize(swingHighsCount) || + !IsValidSize(supplyZonesCount) || + !IsValidSize(demandZonesCount)) + { + return result; + } + + // + XOHCL zBar; + bool isInited = zBar.Init( + Symbol(), + Period(), + 0 // + ); + if (!isInited) + { + return result; + } + + // + // Detect Swing High and Low as Market Structure Boundaries ... + + // + // Swing High ... + XOHCL tmpBar; + for (int i = 0; i < swingHighsCount; i++) + { + // + XOHCL iSwing = swingHighs[i]; + + // + if (!tmpBar.IsValid() || + tmpBar.high < iSwing.high) + { + tmpBar = iSwing; + } + } + if (tmpBar.IsValid()) + { + // + mSwingHigh = tmpBar; + string name = tmpBar.GetTag(ToString(X_POI_SWING_HIGH)); + if (mSwingHighObject != NULL) + { + mSwingHighObject.Delete(); + } + mSwingHighObject = new CChartObjectHLine(); + bool isCreated = mSwingHighObject.Create( + ChartIdentification(), + name, + SubWindowIdentification(), + tmpBar.high // + ); + if (isCreated) + { + // + mSwingHighObject.Width(2); + mSwingHighObject.Color(clrRed); + mSwingHighObject.Style(STYLE_DASHDOTDOT); + } + } + + // + // Swing Low ... + tmpBar.Clean(); + for (int i = 0; i < swingLowsCount; i++) + { + // + XOHCL iSwing = swingLows[i]; + + // + if (!tmpBar.IsValid() || + tmpBar.low > iSwing.low) + { + tmpBar = iSwing; + } + } + if (tmpBar.IsValid()) + { + // + mSwingLow = tmpBar; + string name = tmpBar.GetTag(ToString(X_POI_SWING_LOW)); + if (mSwingLowObject != NULL) + { + mSwingLowObject.Delete(); + } + mSwingLowObject = new CChartObjectHLine(); + bool isCreated = mSwingLowObject.Create( + ChartIdentification(), + name, + SubWindowIdentification(), + tmpBar.low // + ); + if (isCreated) + { + // + mSwingLowObject.Width(2); + mSwingLowObject.Color(clrLime); + mSwingLowObject.Style(STYLE_DASHDOTDOT); + } + } + tmpBar.Clean(); + + // + // Demand Zone ... + for (int i = 0; i < demandZonesCount; i++) + { + // + // Demand Zone ... + XZone iDemandZone = supplyAndDemandZoneState.demandZones[i]; + conditions.demandZone = iDemandZone; + + // + // TODO: Remove this ... + // XCDemandZoneObject *iDemandZoneObj; + // bool isCreated = mPOIDrawer.CreateDemandZone( + // iDemandZone, + // iDemandZoneObj // + // ); + + // + // Order Blocks ... + int orderBlocksCount = ArraySize(orderBlocksState.bullishOrderBlocks); + if (IsValidSize(orderBlocksCount)) + { + // + for (int j = 0; j < orderBlocksCount; j++) + { + // + XZone jZone = orderBlocksState.bullishOrderBlocks[j]; + + // + bool isInside = + (jZone.lower > iDemandZone.lower && + jZone.lower < iDemandZone.upper) || + (jZone.lower < iDemandZone.lower); + if (isInside) + { + // + jZone.to = TimeCurrent(); + + // + // TODO: Remove this ... + // XCBullishOrderBlockObject *iBullOBObj; + // bool isCreated = mPOIDrawer.CreateBullishOrderBlock( + // jZone, + // iBullOBObj // + // ); + + AddRef( + jZone, + conditions.bullishOrderBlocks // + ); + } + } + } + + // + // Support Zones ... + int supportsCount = ArraySize(fvgsState.supportZones); + if (IsValidSize(supportsCount)) + { + // + for (int j = 0; j < supportsCount; j++) + { + // + XOHCL jBar = fvgsState.supportZones[j]; + + // + bool isInside = + (jBar.low > iDemandZone.lower && + jBar.low < iDemandZone.upper) || + (jBar.low < iDemandZone.lower); + if (isInside) + { + // + // TODO: Remove this ... + // XCSupportZoneObject *iSupportZoneObj; + // bool isCreated = mPOIDrawer.CreateSupportZone( + // jBar, + // iSupportZoneObj, + // TimeCurrent() // + // ); + + // + AddRef( + jBar, + conditions.supports // + ); + } + } + } + + // + // Bullish FVGs ... + int fvgsCount = ArraySize(fvgsState.bullishFVGs); + if (IsValidSize(fvgsCount)) + { + // + for (int j = 0; j < fvgsCount; j++) + { + // + XZone jFVG = fvgsState.bullishFVGs[j]; + + // + bool isInside = + jFVG.from > iDemandZone.from && + jFVG.lower < iDemandZone.upper && + jFVG.upper > iDemandZone.upper; + if (isInside) + { + // + jFVG.to = TimeCurrent(); + + // + // TODO: Remove This ... + // XCBullishFVGObject *iObj; + // bool isCreated = mPOIDrawer.CreateBullishFVG( + // jFVG, + // iObj // + // ); + + // + AddRef( + jFVG, + conditions.bullishFVGs // + ); + } + } + } + + // + // Swing Lows ... + int swingLowsCount = ArraySize(triggerState.swingLows); + if (IsValidSize(swingLowsCount)) + { + // + for (int j = 0; j < swingLowsCount; j++) + { + // + XOHCL jBar = triggerState.swingLows[j]; + + // + bool isInside = + jBar.time > iDemandZone.from && + jBar.low > iDemandZone.lower && + jBar.GetDown() < iDemandZone.upper; + if (isInside) + { + // + // TODO: Remve this ... + // XCSwingLowObject *iObj; + // bool isCreated = mPOIDrawer.CreateSwingLow( + // jBar, + // iObj // + // ); + + // + AddRef( + jBar, + conditions.swingLows // + ); + } + } + } + + // + // Bullish Momentum Bars ... + int bullishMomentumBarsCount = ArraySize(triggerState.momentumBars); + if (IsValidSize(bullishMomentumBarsCount)) + { + // + for (int j = 0; j < bullishMomentumBarsCount; j++) + { + // + XOHCL jBar = triggerState.momentumBars[j]; + + // + bool isInside = + jBar.IsBullish() && + jBar.time > iDemandZone.from && + jBar.low > iDemandZone.lower && + jBar.low < iDemandZone.upper; + if (isInside) + { + // + // TODO: Remove this ... + // XCBullishMomentumBarObject *iObj; + // bool isCreated = mPOIDrawer.CreateBullishMomentumBar( + // jBar, + // iObj // + // ); + + // + AddRef( + jBar, + conditions.bullishMomentumBars // + ); + } + } + } + + // + // Bullish Rejection Bars ... + int bullishRejectionBarsCount = ArraySize(triggerState.rejectionBars); + if (IsValidSize(bullishRejectionBarsCount)) + { + // + for (int j = 0; j < bullishRejectionBarsCount; j++) + { + // + XOHCL jBar = triggerState.rejectionBars[j]; + + // + bool isInside = + jBar.GetLowShadow() > jBar.GetHighShadow() && + jBar.time > iDemandZone.from && + jBar.low > iDemandZone.lower && + jBar.low < iDemandZone.upper; + if (isInside) + { + // + // TODO: Remove this ... + XCBullishRejectionBarObject *iObj; + bool isCreated = mPOIDrawer.CreateBullishRejectionBar( + jBar, + iObj // + ); + + // + AddRef( + jBar, + conditions.bullishRejectionBars // + ); + } + } + } + } + + // + // Supply Zone ... + // for (int i = 0; i < demandZonesCount; i++) + // { + // // + // // Supply Zone ... + // XZone iSupplyZone = supplyAndDemandZoneState.supplyZones[i]; + // conditions.supplyZone = iSupplyZone; + + // // + // // Order Blocks ... + // int orderBlocksCount = ArraySize(orderBlocksState.bearishOrderBlocks); + // if (IsValidSize(orderBlocksCount)) + // { + // // + // for (int j = 0; j < orderBlocksCount; j++) + // { + // // + // XZone jZone = orderBlocksState.bearishOrderBlocks[j]; + + // // + // bool isInside = + // jZone.from > iSupplyZone.from && + // jZone.upper > iSupplyZone.lower && + // jZone.upper < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jZone, + // conditions.bearishOrderBlocks // + // ); + // } + // } + // } + + // // + // // Resistance Zones ... + // int resistancesCount = ArraySize(fvgsState.resistanceZones); + // if (IsValidSize(resistancesCount)) + // { + // // + // for (int j = 0; j < resistancesCount; j++) + // { + // // + // XOHCL jBar = fvgsState.resistanceZones[j]; + + // // + // bool isInside = + // jBar.time > iSupplyZone.from && + // jBar.high > iSupplyZone.lower && + // jBar.high < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jBar, + // conditions.resistances // + // ); + // } + // } + // } + + // // + // // Bearish FVGs ... + // int fvgsCount = ArraySize(fvgsState.bearishFVGs); + // if (IsValidSize(fvgsCount)) + // { + // // + // for (int j = 0; j < fvgsCount; j++) + // { + // // + // XZone jZone = fvgsState.bearishFVGs[j]; + + // // + // bool isInside = + // jZone.from > iSupplyZone.from && + // jZone.upper > iSupplyZone.lower && + // jZone.upper < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jZone, + // conditions.bearishFVGs // + // ); + // } + // } + // } + + // // + // // Swing Highs ... + // int swingHighsCount = ArraySize(triggerState.swingHighs); + // if (IsValidSize(swingHighsCount)) + // { + // // + // for (int j = 0; j < swingHighsCount; j++) + // { + // // + // XOHCL jBar = triggerState.swingHighs[j]; + + // // + // bool isInside = + // jBar.time > iSupplyZone.from && + // jBar.high > iSupplyZone.lower && + // jBar.high < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jBar, + // conditions.swingHighs // + // ); + // } + // } + // } + + // // + // // Bearish Momentum Bars ... + // int bearishMomentumBarsCount = ArraySize(triggerState.momentumBars); + // if (IsValidSize(bearishMomentumBarsCount)) + // { + // // + // for (int j = 0; j < bearishMomentumBarsCount; j++) + // { + // // + // XOHCL jBar = fvgsState.momentumBars[j]; + + // // + // bool isInside = + // jBar.IsBearish() && + // jBar.time > iSupplyZone.from && + // jBar.high > iSupplyZone.lower && + // jBar.high < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jBar, + // conditions.bearishMomentumBars // + // ); + // } + // } + // } + + // // + // // Bearish Rejection Bars ... + // int bearishRejectionBarsCount = ArraySize(triggerState.rejectionBars); + // if (IsValidSize(bearishRejectionBarsCount)) + // { + // // + // for (int j = 0; j < bearishRejectionBarsCount; j++) + // { + // // + // XOHCL jBar = fvgsState.rejectionBars[j]; + + // // + // bool isInside = + // jBar.GetHighShadow() > jBar.GetLowShadow() && + // jBar.time > iSupplyZone.from && + // jBar.high > iSupplyZone.lower && + // jBar.high < iSupplyZone.upper; + // if (isInside) + // { + // // + // AddRef( + // jBar, + // conditions.bearishRejectionBars // + // ); + // } + // } + // } + // } + + // + bool isConditionReadyForDemand = + conditions.demandZone.IsValid() && + (ArraySize(conditions.supports) > 0 || + ArraySize(conditions.swingLows) > 0 || + ArraySize(conditions.bullishFVGs) > 0 || + ArraySize(conditions.bullishOrderBlocks) > 0 || + ArraySize(conditions.bullishMomentumBars) > 0 || + ArraySize(conditions.bullishRejectionBars) > 0); + + // + bool isConditionReadyForSupply = + conditions.supplyZone.IsValid() && + (ArraySize(conditions.swingHighs) > 0 || + ArraySize(conditions.bearishFVGs) > 0 || + ArraySize(conditions.resistances) > 0 || + ArraySize(conditions.bearishOrderBlocks) > 0 || + ArraySize(conditions.bearishMomentumBars) > 0 || + ArraySize(conditions.bearishRejectionBars) > 0); + + // + result = isConditionReadyForDemand || + isConditionReadyForSupply; diff --git a/Libraries/x-saherelm.common.lib.mq5 b/Libraries/x-saherelm.common.lib.mq5 index ac32b079..b91ce672 100644 --- a/Libraries/x-saherelm.common.lib.mq5 +++ b/Libraries/x-saherelm.common.lib.mq5 @@ -7860,12 +7860,6 @@ double GetPriceChanged( _length = 2; } - // - if (_factor < 0.01) - { - _factor = 0.01; - } - // double closes[]; int copiedCloses = CopyClose( @@ -7881,7 +7875,7 @@ double GetPriceChanged( } // - double change = (closes[0] - close[5]) / close[5] * 100; + double change = (closes[0] - closes[5]) / closes[5] * 100; result = change; // diff --git a/Libraries/x-saherelm.x-poi.lib.mq5 b/Libraries/x-saherelm.x-poi.lib.mq5 index a9d89520..828b596f 100644 --- a/Libraries/x-saherelm.x-poi.lib.mq5 +++ b/Libraries/x-saherelm.x-poi.lib.mq5 @@ -1644,4 +1644,71 @@ bool AddIfNotExists( return result; } +// +// State Extensions ... + +/** + * Check State has Bullish Trend or not ... + * + * @param state: XPOIState instance ... + * + * @return ( bool ) + */ +bool HasBullishTrend(XPOIState &state) +{ + // + bool result = false; + + // + // For Bullish Trends ... + int count = ArraySize(state.swingLows); + result = count >= 2; + if (!result) + { + return result; + } + + // + XOHCL lastSwing = state.swingLows[count - 1]; + XOHCL prevSwing = state.swingLows[count - 2]; + + // + result = lastSwing.low > prevSwing.low; + + // + return result; +} + +/** + * Check State has Bearish Trend or not ... + * + * @param state: XPOIState instance ... + * + * @return ( bool ) + */ +bool HasBearishTrend(XPOIState &state) +{ + // + bool result = false; + + // + // For Bullish Trends ... + int count = ArraySize(state.swingHighs); + result = count >= 2; + if (!result) + { + return result; + } + + // + XOHCL lastSwing = state.swingHighs[count - 1]; + XOHCL prevSwing = state.swingHighs[count - 2]; + + // + result = lastSwing.high < prevSwing.high; + + // + return result; +} + // \ No newline at end of file diff --git a/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 b/X121SMCEA/Strategy/x-121.smc.strategy.class.mq5 index e52eb3ad6075454be87e6c028e4ac45518875432..e213b48b2a571e84c84787c552b63ec481d06bb4 100644 GIT binary patch literal 107056 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 literal 59465 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