diff --git a/XCAEA/Classes/xcaea.x-poi.detector.class.mq5 b/XCAEA/Classes/xcaea.x-poi.detector.class.mq5 index c58c52ed..ee7c27be 100644 --- a/XCAEA/Classes/xcaea.x-poi.detector.class.mq5 +++ b/XCAEA/Classes/xcaea.x-poi.detector.class.mq5 @@ -129,6 +129,9 @@ struct XCAPivot // Clean(values); + + // + ZeroMemory(this); } /** @@ -465,6 +468,80 @@ struct XCAPivot // }; +// +struct XCAPVFVG +{ + // + // Props ... + double value; + XCAPivot fvgs[]; + ENUM_X_DIRECTION dir; + + // + // Constructor ... + XCAPVFVG() + { + Clean(); + } + + // + // Tools ... + + // + void Clean() + { + // + value = 0; + Clean(fvgs); + dir = X_DIRECTION_NONE; + + // + ZeroMemory(this); + } + + // + bool IsValid() + { + // + bool result = false; + + // + result = value != 0 && + HasDirection(dir); + + // + return result; + } + + // + void AddPivot(XCAPivot &pivot) + { + // + if (!IsValid() || + !pivot.IsValid()) + { + return; + } + + // + int idx = -1; + bool has = FindPivotIndex( + idx, + pivot, + fvgs // + ); + if (has) { + return; + } + + // + AddRef( + pivot, + fvgs // + ); + } +}; + /** * Find Specified Pivot Index inside a Collection of Pivots ... * @@ -4762,7 +4839,7 @@ class XCXCAEAPOIDetector : public XCBase } Clean(tmp); } - + // // OSCS ... diff --git a/XCAEA/Classes/xcaea.x-poi.drawer.class.mq5 b/XCAEA/Classes/xcaea.x-poi.drawer.class.mq5 index 5cd7f85c..96513216 100644 --- a/XCAEA/Classes/xcaea.x-poi.drawer.class.mq5 +++ b/XCAEA/Classes/xcaea.x-poi.drawer.class.mq5 @@ -63,6 +63,63 @@ class XCXCAEAPOIDrawer : public XCBase bool drawCCICrossedOverOSPivots; bool drawCCICrossedUnderOBPivots; + // + // Colorize Props ... + + // + color peakPivotColor; + color valePivotColor; + color sameHHPivotColor; + color sameLLPivotColor; + color kiBullishPivotColor; + color kiBearishPivotColor; + color fvgBullishPivotColor; + color fvgBearishPivotColor; + color defBullishPivotColor; + color defBearishPivotColor; + color oscsBullishPivotColor; + color oscsBearishPivotColor; + color trendBullishPivotColor; + color trendBearishPivotColor; + + // + // Width Props ... + + // + int peakPivotWidth; + int valePivotWidth; + int sameHHPivotWidth; + int sameLLPivotWidth; + int kiBullishPivotWidth; + int kiBearishPivotWidth; + int fvgBullishPivotWidth; + int fvgBearishPivotWidth; + int defBullishPivotWidth; + int defBearishPivotWidth; + int oscsBullishPivotWidth; + int oscsBearishPivotWidth; + int trendBullishPivotWidth; + int trendBearishPivotWidth; + + // + // Style Props ... + + // + ENUM_LINE_STYLE peakPivotStyle; + ENUM_LINE_STYLE valePivotStyle; + ENUM_LINE_STYLE sameHHPivotStyle; + ENUM_LINE_STYLE sameLLPivotStyle; + ENUM_LINE_STYLE kiBullishPivotStyle; + ENUM_LINE_STYLE kiBearishPivotStyle; + ENUM_LINE_STYLE fvgBullishPivotStyle; + ENUM_LINE_STYLE fvgBearishPivotStyle; + ENUM_LINE_STYLE defBullishPivotStyle; + ENUM_LINE_STYLE defBearishPivotStyle; + ENUM_LINE_STYLE oscsBullishPivotStyle; + ENUM_LINE_STYLE oscsBearishPivotStyle; + ENUM_LINE_STYLE trendBullishPivotStyle; + ENUM_LINE_STYLE trendBearishPivotStyle; + // // Constructors ... XCXCAEAPOIDrawer( @@ -93,7 +150,7 @@ class XCXCAEAPOIDrawer : public XCBase mKIBullishPivotObjects.Clear(); mKIBearishPivotObjects.Clear(); mFVGBullishPivotObjects.Clear(); - mFVGBearishPivotObjects.Clear(); + mFVGBearishPivotObjects.Clear(); mPeakSWHResPivotObjects.Clear(); mValeSWLSupPivotObjects.Clear(); mTKIBullishPivotObjects.Clear(); @@ -135,7 +192,7 @@ class XCXCAEAPOIDrawer : public XCBase drawKIBullishPivots = false; drawKIBearishPivots = false; drawFVGBullishPivots = false; - drawFVGBearishPivots = false; + drawFVGBearishPivots = false; drawPeakSWHResPivots = false; drawValeSWLSupPivots = false; drawTKIBullishPivots = false; @@ -150,6 +207,63 @@ class XCXCAEAPOIDrawer : public XCBase drawRSICrossedUnderOBPivots = false; drawCCICrossedOverOSPivots = false; drawCCICrossedUnderOBPivots = false; + + // + // Color ... + defBullishPivotColor = clrLime; + defBearishPivotColor = clrRed; + + // + peakPivotColor = defBearishPivotColor; + valePivotColor = defBullishPivotColor; + sameHHPivotColor = defBearishPivotColor; + sameLLPivotColor = defBullishPivotColor; + kiBullishPivotColor = defBullishPivotColor; + kiBearishPivotColor = defBearishPivotColor; + fvgBullishPivotColor = defBullishPivotColor; + fvgBearishPivotColor = defBearishPivotColor; + oscsBullishPivotColor = defBullishPivotColor; + oscsBearishPivotColor = defBearishPivotColor; + trendBullishPivotColor = defBullishPivotColor; + trendBearishPivotColor = defBearishPivotColor; + + // + // Width ... + defBullishPivotWidth = 1; + defBearishPivotWidth = 1; + + // + peakPivotWidth = defBearishPivotWidth; + valePivotWidth = defBullishPivotWidth; + sameHHPivotWidth = defBearishPivotWidth; + sameLLPivotWidth = defBullishPivotWidth; + kiBullishPivotWidth = defBullishPivotWidth; + kiBearishPivotWidth = defBearishPivotWidth; + fvgBullishPivotWidth = defBullishPivotWidth; + fvgBearishPivotWidth = defBearishPivotWidth; + oscsBullishPivotWidth = defBullishPivotWidth; + oscsBearishPivotWidth = defBearishPivotWidth; + trendBullishPivotWidth = defBullishPivotWidth; + trendBearishPivotWidth = defBearishPivotWidth; + + // + // Style ... + defBullishPivotStyle = STYLE_DOT; + defBearishPivotStyle = STYLE_DOT; + + // + peakPivotStyle = defBearishPivotStyle; + valePivotStyle = defBullishPivotStyle; + sameHHPivotStyle = defBearishPivotStyle; + sameLLPivotStyle = defBullishPivotStyle; + kiBullishPivotStyle = defBullishPivotStyle; + kiBearishPivotStyle = defBearishPivotStyle; + fvgBullishPivotStyle = defBullishPivotStyle; + fvgBearishPivotStyle = defBearishPivotStyle; + oscsBullishPivotStyle = defBullishPivotStyle; + oscsBearishPivotStyle = defBearishPivotStyle; + trendBullishPivotStyle = defBullishPivotStyle; + trendBearishPivotStyle = defBearishPivotStyle; } // @@ -233,6 +347,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(peakPivotColor); + iObj.BoxWidth(peakPivotWidth); + iObj.BoxStyle(peakPivotStyle); + + // mSWHPivotObjects.Add(iObj); } @@ -286,6 +406,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(valePivotColor); + iObj.BoxWidth(valePivotWidth); + iObj.BoxStyle(valePivotStyle); + + // mSWLPivotObjects.Add(iObj); } @@ -339,6 +465,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(peakPivotColor); + iObj.BoxWidth(peakPivotWidth); + iObj.BoxStyle(peakPivotStyle); + + // mPeakPivotObjects.Add(iObj); } @@ -392,6 +524,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(valePivotColor); + iObj.BoxWidth(valePivotWidth); + iObj.BoxStyle(valePivotStyle); + + // mValePivotObjects.Add(iObj); } @@ -445,6 +583,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(kiBullishPivotColor); + iObj.BoxWidth(kiBullishPivotWidth); + iObj.BoxStyle(kiBullishPivotStyle); + + // mKIBullishPivotObjects.Add(iObj); } @@ -498,6 +642,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(kiBearishPivotColor); + iObj.BoxWidth(kiBearishPivotWidth); + iObj.BoxStyle(kiBearishPivotStyle); + + // mKIBearishPivotObjects.Add(iObj); } @@ -505,11 +655,13 @@ class XCXCAEAPOIDrawer : public XCBase iBox.Clean(); } } - + // - void DrawFVGBullishPivots(datetime to = NULL) { + void DrawFVGBullishPivots(datetime to = NULL) + { // - if (!drawFVGBullishPivots) { + if (!drawFVGBullishPivots) + { return; } @@ -518,24 +670,28 @@ class XCXCAEAPOIDrawer : public XCBase // bool has = detector.HasFVGBullishPivots(); - if (!has) { + if (!has) + { return; } // int count = detector.CountFVGBullishPivots(); - for (int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) + { // XBoxZone iBox; has = detector.fvgBullishPivots[i].AsBox(iBox); - if (!has) { + if (!has) + { // iBox.Clean(); continue; } // - if (canUpdateTo) { + if (canUpdateTo) + { iBox.to = to; } @@ -545,16 +701,25 @@ class XCXCAEAPOIDrawer : public XCBase iBox, iObj // ); - if (has) { + if (has) + { + // + iObj.BoxColor(fvgBullishPivotColor); + iObj.BoxWidth(fvgBullishPivotWidth); + iObj.BoxStyle(fvgBullishPivotStyle); + + // mFVGBullishPivotObjects.Add(iObj); } } } - + // - void DrawFVGBearishPivots(datetime to = NULL) { + void DrawFVGBearishPivots(datetime to = NULL) + { // - if (!drawFVGBearishPivots) { + if (!drawFVGBearishPivots) + { return; } @@ -563,24 +728,28 @@ class XCXCAEAPOIDrawer : public XCBase // bool has = detector.HasFVGBearishPivots(); - if (!has) { + if (!has) + { return; } // int count = detector.CountFVGBearishPivots(); - for (int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) + { // XBoxZone iBox; has = detector.fvgBearishPivots[i].AsBox(iBox); - if (!has) { + if (!has) + { // iBox.Clean(); continue; } // - if (canUpdateTo) { + if (canUpdateTo) + { iBox.to = to; } @@ -590,7 +759,14 @@ class XCXCAEAPOIDrawer : public XCBase iBox, iObj // ); - if (has) { + if (has) + { + // + iObj.BoxColor(fvgBearishPivotColor); + iObj.BoxWidth(fvgBearishPivotWidth); + iObj.BoxStyle(fvgBearishPivotStyle); + + // mFVGBearishPivotObjects.Add(iObj); } } @@ -641,6 +817,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(peakPivotColor); + iObj.BoxWidth(peakPivotWidth); + iObj.BoxStyle(peakPivotStyle); + + // mPeakSWHResPivotObjects.Add(iObj); } @@ -694,6 +876,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(valePivotColor); + iObj.BoxWidth(valePivotWidth); + iObj.BoxStyle(valePivotStyle); + + // mValeSWLSupPivotObjects.Add(iObj); } @@ -747,6 +935,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(kiBullishPivotColor); + iObj.BoxWidth(kiBullishPivotWidth); + iObj.BoxStyle(kiBullishPivotStyle); + + // mTKIBullishPivotObjects.Add(iObj); } @@ -800,6 +994,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(kiBearishPivotColor); + iObj.BoxWidth(kiBearishPivotWidth); + iObj.BoxStyle(kiBearishPivotStyle); + + // mTKIBearishPivotObjects.Add(iObj); } @@ -853,6 +1053,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(trendBullishPivotColor); + iObj.BoxWidth(trendBullishPivotWidth); + iObj.BoxStyle(trendBullishPivotStyle); + + // mTrendBullishPivotObjects.Add(iObj); } @@ -906,6 +1112,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(trendBearishPivotColor); + iObj.BoxWidth(trendBearishPivotWidth); + iObj.BoxStyle(trendBearishPivotStyle); + + // mTrendBearishPivotObjects.Add(iObj); } @@ -959,6 +1171,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(trendBullishPivotColor); + iObj.BoxWidth(trendBullishPivotWidth); + iObj.BoxStyle(trendBullishPivotStyle); + + // mTKITRNDBullishPivotObjects.Add(iObj); } @@ -1012,6 +1230,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(trendBearishPivotColor); + iObj.BoxWidth(trendBearishPivotWidth); + iObj.BoxStyle(trendBearishPivotStyle); + + // mTKITRNDBearishPivotObjects.Add(iObj); } @@ -1066,6 +1290,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameLLPivotColor); + iObj.BoxWidth(sameLLPivotWidth); + iObj.BoxStyle(sameLLPivotStyle); + + // mCycleSameLLPivotObjects.Add(iObj); } @@ -1105,6 +1335,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameLLPivotColor); + iObj.BoxWidth(sameLLPivotWidth); + iObj.BoxStyle(sameLLPivotStyle); + + // mCycleSameLLPivotObjects.Add(iObj); } @@ -1144,6 +1380,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameLLPivotColor); + iObj.BoxWidth(sameLLPivotWidth); + iObj.BoxStyle(sameLLPivotStyle); + + // mCycleSameLLPivotObjects.Add(iObj); } @@ -1183,6 +1425,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameLLPivotColor); + iObj.BoxWidth(sameLLPivotWidth); + iObj.BoxStyle(sameLLPivotStyle); + + // mCycleSameLLPivotObjects.Add(iObj); } @@ -1238,6 +1486,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameHHPivotColor); + iObj.BoxWidth(sameHHPivotWidth); + iObj.BoxStyle(sameHHPivotStyle); + + // mCycleSameHHPivotObjects.Add(iObj); } @@ -1277,6 +1531,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameHHPivotColor); + iObj.BoxWidth(sameHHPivotWidth); + iObj.BoxStyle(sameHHPivotStyle); + + // mCycleSameHHPivotObjects.Add(iObj); } @@ -1316,6 +1576,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameHHPivotColor); + iObj.BoxWidth(sameHHPivotWidth); + iObj.BoxStyle(sameHHPivotStyle); + + // mCycleSameHHPivotObjects.Add(iObj); } @@ -1355,6 +1621,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(sameHHPivotColor); + iObj.BoxWidth(sameHHPivotWidth); + iObj.BoxStyle(sameHHPivotStyle); + + // mCycleSameHHPivotObjects.Add(iObj); } @@ -1410,6 +1682,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBearishPivotColor); + iObj.BoxWidth(oscsBearishPivotWidth); + iObj.BoxStyle(oscsBearishPivotStyle); + + // mRSIPeakPivotObjects.Add(iObj); } @@ -1465,6 +1743,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBullishPivotColor); + iObj.BoxWidth(oscsBullishPivotWidth); + iObj.BoxStyle(oscsBullishPivotStyle); + + // mRSIValePivotObjects.Add(iObj); } @@ -1518,6 +1802,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBullishPivotColor); + iObj.BoxWidth(oscsBullishPivotWidth); + iObj.BoxStyle(oscsBullishPivotStyle); + + // mRSICrossedOverOSPivotObjects.Add(iObj); } @@ -1571,6 +1861,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBearishPivotColor); + iObj.BoxWidth(oscsBearishPivotWidth); + iObj.BoxStyle(oscsBearishPivotStyle); + + // mRSICrossedUnderOBPivotObjects.Add(iObj); } @@ -1626,6 +1922,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBearishPivotColor); + iObj.BoxWidth(oscsBearishPivotWidth); + iObj.BoxStyle(oscsBearishPivotStyle); + + // mCCIPeakPivotObjects.Add(iObj); } @@ -1681,6 +1983,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBullishPivotColor); + iObj.BoxWidth(oscsBullishPivotWidth); + iObj.BoxStyle(oscsBullishPivotStyle); + + // mCCIValePivotObjects.Add(iObj); } @@ -1734,6 +2042,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBullishPivotColor); + iObj.BoxWidth(oscsBullishPivotWidth); + iObj.BoxStyle(oscsBullishPivotStyle); + + // mCCICrossedOverOSPivotObjects.Add(iObj); } @@ -1787,6 +2101,12 @@ class XCXCAEAPOIDrawer : public XCBase ); if (has) { + // + iObj.BoxColor(oscsBearishPivotColor); + iObj.BoxWidth(oscsBearishPivotWidth); + iObj.BoxStyle(oscsBearishPivotStyle); + + // mCCICrossedUnderOBPivotObjects.Add(iObj); } @@ -1824,7 +2144,7 @@ class XCXCAEAPOIDrawer : public XCBase CArrayObj mKIBullishPivotObjects; CArrayObj mKIBearishPivotObjects; CArrayObj mFVGBullishPivotObjects; - CArrayObj mFVGBearishPivotObjects; + CArrayObj mFVGBearishPivotObjects; CArrayObj mPeakSWHResPivotObjects; CArrayObj mValeSWLSupPivotObjects; CArrayObj mTKIBullishPivotObjects; diff --git a/XCAEA/Signals/xcaea.signaller.class.mq5 b/XCAEA/Signals/xcaea.signaller.class.mq5 index 561808f1..8bb9f34c 100644 --- a/XCAEA/Signals/xcaea.signaller.class.mq5 +++ b/XCAEA/Signals/xcaea.signaller.class.mq5 @@ -746,8 +746,8 @@ class XCXCAEASignaller : XCBase detector.detectKIBearishPivot = false; detector.detectFVGBullishPivot = true; detector.detectFVGBearishPivot = true; - detector.detectPeakSWHResPivot = false; - detector.detectValeSWLSupPivot = false; + detector.detectPeakSWHResPivot = true; + detector.detectValeSWLSupPivot = true; detector.detectTKIBullishPivot = false; detector.detectCycleSameLLPivot = false; detector.detectCycleSameHHPivot = false; @@ -771,10 +771,10 @@ class XCXCAEASignaller : XCBase drawer.drawSWLPivots = false; drawer.drawPeakPivots = false; drawer.drawValePivots = false; - drawer.drawRSIPeakPivots = false; - drawer.drawRSIValePivots = false; - drawer.drawCCIPeakPivots = false; - drawer.drawCCIValePivots = false; + drawer.drawRSIPeakPivots = true; + drawer.drawRSIValePivots = true; + drawer.drawCCIPeakPivots = true; + drawer.drawCCIValePivots = true; drawer.drawKIBullishPivots = false; drawer.drawKIBearishPivots = false; drawer.drawFVGBullishPivots = true; @@ -793,6 +793,33 @@ class XCXCAEASignaller : XCBase drawer.drawRSICrossedUnderOBPivots = false; drawer.drawCCICrossedOverOSPivots = false; drawer.drawCCICrossedUnderOBPivots = false; + + // + // Configure Width ... + drawer.peakPivotWidth = 1; + drawer.valePivotWidth = 1; + drawer.fvgBullishPivotWidth = 1; + drawer.fvgBearishPivotWidth = 1; + drawer.oscsBullishPivotWidth = 2; + drawer.oscsBearishPivotWidth = 2; + + // + // Configure Colors ... + drawer.peakPivotColor = clrMagenta; + drawer.valePivotColor = clrAqua; + drawer.fvgBullishPivotColor = clrLime; + drawer.fvgBearishPivotColor = clrRed; + drawer.oscsBullishPivotColor = clrYellow; + drawer.oscsBearishPivotColor = clrOrange; + + // + // Configure Style ... + drawer.peakPivotStyle = STYLE_SOLID; + drawer.valePivotStyle = STYLE_SOLID; + drawer.fvgBullishPivotStyle = STYLE_DASH; + drawer.fvgBearishPivotStyle = STYLE_DASH; + drawer.oscsBullishPivotStyle = STYLE_SOLID; + drawer.oscsBearishPivotStyle = STYLE_SOLID; } /**