This commit is contained in:
2025-04-17 21:22:14 +03:30
parent c6e3c78e06
commit 04535223ea
7 changed files with 1210 additions and 381 deletions
+1 -1
View File
@@ -346,7 +346,7 @@ void OnTick()
// Execute Signal ... // Execute Signal ...
// //
has =eaTradeManager.Execute( has = eaTradeManager.Execute(
eaSignal, eaSignal,
eaConditions // eaConditions //
); );
+3 -3
View File
@@ -51,13 +51,13 @@ enum ENUM_X121_XCA_BUFFERS
X121_XCA_FIBO_L3_LINE = 16, X121_XCA_FIBO_L3_LINE = 16,
X121_XCA_SAR_LINE = 17, X121_XCA_SAR_LINE = 17,
X121_XCA_TREND_LINE = 18, X121_XCA_TREND_LINE = 18,
X121_XCA_TREND_STATE_LINE = 24,
X121_XCA_KI_LINE = 20, X121_XCA_KI_LINE = 20,
X121_XCA_KI_STATE_LINE = 25,
X121_XCA_SWING_LOW_LINE = 22, X121_XCA_SWING_LOW_LINE = 22,
X121_XCA_SWING_HIGH_LINE = 23, X121_XCA_SWING_HIGH_LINE = 23,
X121_XCA_TKI_LINE = 24, X121_XCA_TKI_LINE = 24,
X121_XCA_TKI_STATE_LINE = 30, X121_XCA_TREND_STATE_LINE = 26,
X121_XCA_KI_STATE_LINE = 27,
X121_XCA_TKI_STATE_LINE = 28,
}; };
// //
+6 -6
View File
@@ -479,17 +479,17 @@ double trendStateBuffer[];
double kiStateBuffer[]; double kiStateBuffer[];
// //
#define supBufferIndex mLastBufferIndex + 3 #define tkiStateBufferIndex mLastBufferIndex + 3
double tkiStateBuffer[];
//
#define supBufferIndex mLastBufferIndex + 4
double supBuffer[]; double supBuffer[];
// //
#define resBufferIndex mLastBufferIndex + 4 #define resBufferIndex mLastBufferIndex + 5
double resBuffer[]; double resBuffer[];
//
#define tkiStateBufferIndex mLastBufferIndex + 5
double tkiStateBuffer[];
// //
// Variables, Properties and etc ... // Variables, Properties and etc ...
+7 -2
View File
@@ -5458,6 +5458,11 @@ struct XBoxZone
*/ */
string GetTag() string GetTag()
{ {
//
int digits = GetDigits(symbol);
double nUpper = NormalizeDouble(NormalizePrice(upper, symbol), digits);
double nLower = NormalizeDouble(NormalizePrice(lower, symbol), digits);
// //
string typeStr = IsValid(type) string typeStr = IsValid(type)
? type + "_" ? type + "_"
@@ -5468,8 +5473,8 @@ struct XBoxZone
ToString(dir) + "_" + ToString(dir) + "_" +
symbol + "_" + symbol + "_" +
ToString(period) + "_" + ToString(period) + "_" +
ToString(upper) + "_" + ToString(nUpper) + "_" +
ToString(lower) ToString(nLower)
// //
; ;
+576 -10
View File
@@ -36,8 +36,14 @@ enum ENUM_XCA_PIVOTS
XCA_SWH, // SWH XCA_SWH, // SWH
XCA_VALE, // VALE XCA_VALE, // VALE
XCA_PEAK, // PEAK XCA_PEAK, // PEAK
XCA_KI_BULL, // KIBull
XCA_KI_BEAR, // KIBear
XCA_TKI_BULL, // TKIBull
XCA_TKI_BEAR, // TKIBear
XCA_PEAKSWHRES, // PeakSWHRes XCA_PEAKSWHRES, // PeakSWHRes
XCA_VALESWLSUP, // ValeSWLSup XCA_VALESWLSUP, // ValeSWLSup
XCA_TREND_BULL, // Trend Bullish
XCA_TREND_BEAR, // Trend Bearish
}; };
// //
@@ -79,6 +85,9 @@ struct XCAPivot
ENUM_XCA_PIVOTS type; ENUM_XCA_PIVOTS type;
ENUM_TIMEFRAMES period; ENUM_TIMEFRAMES period;
//
double values[];
// //
// Constructor ... // Constructor ...
XCAPivot() XCAPivot()
@@ -102,6 +111,9 @@ struct XCAPivot
symbol = NULL; symbol = NULL;
period = NULL; period = NULL;
type = XCA_NONE; type = XCA_NONE;
//
Clean(values);
} }
/** /**
@@ -304,6 +316,9 @@ struct XCAPivot
// //
case XCA_SWL: case XCA_SWL:
case XCA_VALE: case XCA_VALE:
case XCA_KI_BULL:
case XCA_TKI_BULL:
case XCA_TREND_BULL:
case XCA_VALESWLSUP: case XCA_VALESWLSUP:
iDir = X_DIRECTION_BULLISH; iDir = X_DIRECTION_BULLISH;
break; break;
@@ -311,6 +326,9 @@ struct XCAPivot
// //
case XCA_SWH: case XCA_SWH:
case XCA_PEAK: case XCA_PEAK:
case XCA_KI_BEAR:
case XCA_TKI_BEAR:
case XCA_TREND_BEAR:
case XCA_PEAKSWHRES: case XCA_PEAKSWHRES:
iDir = X_DIRECTION_BEARISH; iDir = X_DIRECTION_BEARISH;
break; break;
@@ -347,7 +365,28 @@ struct XCAPivot
box.from = from; box.from = from;
box.symbol = symbol; box.symbol = symbol;
box.period = period; box.period = period;
box.type = ToString(type);
//
string typeStr = ToString(type);
if (type == XCA_KI_BULL ||
type == XCA_KI_BEAR)
{
//
typeStr = "XCA_KI";
}
else if (type == XCA_TKI_BULL ||
type == XCA_TKI_BEAR)
{
//
typeStr = "XCA_TKI";
}
else if (type == XCA_TREND_BULL ||
type == XCA_TREND_BEAR)
{
//
typeStr = "XCA_TREND";
}
box.type = typeStr;
// //
box.upper = box.upper =
@@ -438,8 +477,14 @@ class XCXCAEAPOIDetector : public XCBase
XCAPivot swlPivots[]; XCAPivot swlPivots[];
XCAPivot peakPivots[]; XCAPivot peakPivots[];
XCAPivot valePivots[]; XCAPivot valePivots[];
XCAPivot kiBullishPivots[];
XCAPivot kiBearishPivots[];
XCAPivot tkiBullishPivots[];
XCAPivot tkiBearishPivots[];
XCAPivot peakSWHResPivots[]; XCAPivot peakSWHResPivots[];
XCAPivot valeSWLSupPivots[]; XCAPivot valeSWLSupPivots[];
XCAPivot trendBullishPivots[];
XCAPivot trendBearishPivots[];
// //
// Constructors ... // Constructors ...
@@ -491,6 +536,7 @@ class XCXCAEAPOIDetector : public XCBase
virtual void Default() virtual void Default()
{ {
// //
maxAllowedPivots = 50;
pivotVerifications = 5; pivotVerifications = 5;
} }
@@ -571,8 +617,23 @@ class XCXCAEAPOIDetector : public XCBase
// Checking Pivots ... // Checking Pivots ...
// //
// Peak Pivot ... bool detectSWHPivot = false;
bool detectSWLPivot = false;
bool detectPeakPivot = false;
bool detectValePivot = false;
bool detectKIBullishPivot = false;
bool detectKIBearishPivot = false;
bool detectTKIBullishPivot = false;
bool detectTKIBearishPivot = false;
bool detectPeakSWHResPivot = false;
bool detectValeSWLSupPivot = false;
bool detectTrendBullishPivot = true;
bool detectTrendBearishPivot = true;
//
// Peak Pivot ...
if (detectPeakPivot)
{
// //
if (!peakPivot.IsValid()) if (!peakPivot.IsValid())
{ {
@@ -621,10 +682,12 @@ class XCXCAEAPOIDetector : public XCBase
// //
peakPivot.Clean(); peakPivot.Clean();
} }
}
// //
// Peak SWH Res Pivot ... // Peak SWH Res Pivot ...
if (detectPeakSWHResPivot)
{
// //
if (!peakSWHResPivot.IsValid()) if (!peakSWHResPivot.IsValid())
{ {
@@ -672,10 +735,12 @@ class XCXCAEAPOIDetector : public XCBase
// //
peakSWHResPivot.Clean(); peakSWHResPivot.Clean();
} }
}
// //
// Vale Pivot ... // Vale Pivot ...
if (detectValePivot)
{
// //
if (!valePivot.IsValid()) if (!valePivot.IsValid())
{ {
@@ -723,10 +788,12 @@ class XCXCAEAPOIDetector : public XCBase
// //
valePivot.Clean(); valePivot.Clean();
} }
}
// //
// Vale SWL Sup Pivot ... // Vale SWL Sup Pivot ...
if (detectValeSWLSupPivot)
{
// //
if (!valeSWLSupPivot.IsValid()) if (!valeSWLSupPivot.IsValid())
{ {
@@ -774,10 +841,12 @@ class XCXCAEAPOIDetector : public XCBase
// //
valeSWLSupPivot.Clean(); valeSWLSupPivot.Clean();
} }
}
// //
// SWH Pivot ... // SWH Pivot ...
if (detectSWHPivot)
{
// //
if (!swhPivot.IsValid()) if (!swhPivot.IsValid())
{ {
@@ -799,7 +868,6 @@ class XCXCAEAPOIDetector : public XCBase
// //
if (iConditions.isSwingHighSameLast) if (iConditions.isSwingHighSameLast)
{ {
//
swhPivot.from = pBar.time; swhPivot.from = pBar.time;
} }
@@ -827,10 +895,12 @@ class XCXCAEAPOIDetector : public XCBase
// //
swhPivot.Clean(); swhPivot.Clean();
} }
}
// //
// SWL Pivot ... // SWL Pivot ...
if (detectSWLPivot)
{
// //
if (!swlPivot.IsValid()) if (!swlPivot.IsValid())
{ {
@@ -852,7 +922,6 @@ class XCXCAEAPOIDetector : public XCBase
// //
if (iConditions.isSwingLowSameLast) if (iConditions.isSwingLowSameLast)
{ {
//
swlPivot.from = pBar.time; swlPivot.from = pBar.time;
} }
@@ -880,6 +949,389 @@ class XCXCAEAPOIDetector : public XCBase
// //
swlPivot.Clean(); swlPivot.Clean();
} }
}
//
// KI Bullish ...
if (detectKIBullishPivot)
{
//
if (!kiBullishPivot.IsValid())
{
//
kiBullishPivot.type = XCA_KI_BULL;
kiBullishPivot.symbol = iConditions.symbol;
kiBullishPivot.period = iConditions.period;
//
if (iConditions.isKIBullish)
{
//
kiBullishPivot.to = cBar.time;
kiBullishPivot.from = pBar.time;
kiBullishPivot.value = iConditions.kiBuffer[cIDX];
}
}
//
if (iConditions.isKIBullish)
{
//
kiBullishPivot.from = pBar.time;
kiBullishPivot.value =
kiBullishPivot.value == 0
? iConditions.kiBuffer[cIDX]
: MathMin(iConditions.kiBuffer[cIDX], kiBullishPivot.value);
kiBullishPivot.reserve =
kiBullishPivot.reserve == 0
? iConditions.kiBuffer[cIDX]
: MathMax(iConditions.kiBuffer[cIDX], kiBullishPivot.reserve);
}
//
if (iConditions.isKISwitchedToBullish)
{
//
has =
kiBullishPivot.IsValid() &&
kiBullishPivot.GetAge() >= pivotVerifications;
if (has)
{
//
AddPivot(
kiBullishPivot,
kiBullishPivots //
);
}
//
kiBullishPivot.Clean();
}
}
//
// KI Bearish ...
if (detectKIBearishPivot)
{
//
if (!kiBearishPivot.IsValid())
{
//
kiBearishPivot.type = XCA_KI_BEAR;
kiBearishPivot.symbol = iConditions.symbol;
kiBearishPivot.period = iConditions.period;
//
if (iConditions.isKIBearish)
{
//
kiBearishPivot.to = cBar.time;
kiBearishPivot.from = pBar.time;
kiBearishPivot.value = iConditions.kiBuffer[cIDX];
}
}
//
if (iConditions.isKIBearish)
{
//
kiBearishPivot.from = pBar.time;
kiBearishPivot.value =
kiBearishPivot.value == 0
? iConditions.kiBuffer[cIDX]
: MathMax(iConditions.kiBuffer[cIDX], kiBearishPivot.value);
kiBearishPivot.reserve =
kiBearishPivot.reserve == 0
? iConditions.kiBuffer[cIDX]
: MathMin(iConditions.kiBuffer[cIDX], kiBearishPivot.reserve);
}
//
if (iConditions.isKISwitchedToBearish)
{
//
has =
kiBearishPivot.IsValid() &&
kiBearishPivot.GetAge() >= pivotVerifications;
if (has)
{
//
AddPivot(
kiBearishPivot,
kiBearishPivots //
);
}
//
kiBearishPivot.Clean();
}
}
//
// TKI Bullish ...
if (detectTKIBullishPivot)
{
//
if (!tkiBullishPivot.IsValid())
{
//
tkiBullishPivot.type = XCA_TKI_BULL;
tkiBullishPivot.symbol = iConditions.symbol;
tkiBullishPivot.period = iConditions.period;
//
if (iConditions.isTKIBullish)
{
//
tkiBullishPivot.to = cBar.time;
tkiBullishPivot.from = pBar.time;
tkiBullishPivot.value = iConditions.tkiBuffer[cIDX];
}
}
//
if (iConditions.isTKIBullish)
{
//
tkiBullishPivot.from = pBar.time;
tkiBullishPivot.value =
tkiBullishPivot.value == 0
? iConditions.tkiBuffer[cIDX]
: MathMin(iConditions.tkiBuffer[cIDX], tkiBullishPivot.value);
tkiBullishPivot.reserve =
tkiBullishPivot.reserve == 0
? iConditions.tkiBuffer[cIDX]
: MathMax(iConditions.tkiBuffer[cIDX], tkiBullishPivot.reserve);
}
//
if (iConditions.isTKISwitchedToBullish)
{
//
has =
tkiBullishPivot.IsValid() &&
tkiBullishPivot.GetAge() >= pivotVerifications;
if (has)
{
//
AddPivot(
tkiBullishPivot,
tkiBullishPivots //
);
}
//
tkiBullishPivot.Clean();
}
}
//
// TKI Bearish ...
if (detectTKIBearishPivot)
{
//
if (!tkiBearishPivot.IsValid())
{
//
tkiBearishPivot.type = XCA_TKI_BEAR;
tkiBearishPivot.symbol = iConditions.symbol;
tkiBearishPivot.period = iConditions.period;
//
if (iConditions.isTKIBearish)
{
//
tkiBearishPivot.to = cBar.time;
tkiBearishPivot.from = pBar.time;
tkiBearishPivot.value = iConditions.tkiBuffer[cIDX];
}
}
//
if (iConditions.isTKIBearish)
{
//
tkiBearishPivot.from = pBar.time;
tkiBearishPivot.value =
tkiBearishPivot.value == 0
? iConditions.kiBuffer[cIDX]
: MathMax(iConditions.kiBuffer[cIDX], tkiBearishPivot.value);
tkiBearishPivot.reserve =
tkiBearishPivot.reserve == 0
? iConditions.kiBuffer[cIDX]
: MathMin(iConditions.kiBuffer[cIDX], tkiBearishPivot.reserve);
}
//
if (iConditions.isTKISwitchedToBearish)
{
//
has =
tkiBearishPivot.IsValid() &&
tkiBearishPivot.GetAge() >= pivotVerifications;
if (has)
{
//
AddPivot(
tkiBearishPivot,
tkiBearishPivots //
);
}
//
tkiBearishPivot.Clean();
}
}
//
// TREND Bullish ...
if (detectTrendBullishPivot)
{
//
if (!trendBullishPivot.IsValid())
{
//
trendBullishPivot.type = XCA_TREND_BULL;
trendBullishPivot.symbol = iConditions.symbol;
trendBullishPivot.period = iConditions.period;
//
if (iConditions.isTrendBullish)
{
//
trendBullishPivot.to = cBar.time;
trendBullishPivot.from = pBar.time;
trendBullishPivot.value = iConditions.trendBuffer[cIDX];
trendBullishPivot.reserve = iConditions.trendBuffer[cIDX];
}
}
//
if (iConditions.isTrendBullish)
{
//
Add(
iConditions.trendBuffer[cIDX],
trendBullishPivot.values //
);
//
trendBullishPivot.from = pBar.time;
//
trendBullishPivot.value =
trendBullishPivot.value == 0
? iConditions.trendBuffer[cIDX]
: MathMin(iConditions.trendBuffer[cIDX], trendBullishPivot.value);
trendBullishPivot.reserve =
trendBullishPivot.reserve == 0
? iConditions.trendBuffer[cIDX]
: MathMax(iConditions.trendBuffer[cIDX], trendBullishPivot.reserve);
}
//
if (iConditions.isTrendSwitchedToBullish)
{
//
has =
trendBullishPivot.IsValid() &&
trendBullishPivot.GetAge() >= pivotVerifications;
if (has)
{
// //
// double ivMin = GetMin(trendBullishPivot.values);
// double ivMax = GetMax(trendBullishPivot.values);
// //
// trendBullishPivot.value = ivMin;
// trendBullishPivot.reserve = ivMax;
//
AddPivot(
trendBullishPivot,
trendBullishPivots //
);
}
//
trendBullishPivot.Clean();
}
}
//
// TREND Bearish ...
if (detectTrendBearishPivot)
{
//
if (!trendBearishPivot.IsValid())
{
//
trendBearishPivot.type = XCA_TREND_BEAR;
trendBearishPivot.symbol = iConditions.symbol;
trendBearishPivot.period = iConditions.period;
//
if (iConditions.isTrendBearish)
{
//
trendBearishPivot.to = cBar.time;
trendBearishPivot.from = pBar.time;
trendBearishPivot.value = iConditions.trendBuffer[cIDX];
trendBearishPivot.reserve = iConditions.trendBuffer[cIDX];
}
}
//
if (iConditions.isTrendBearish)
{
//
Add(
iConditions.trendBuffer[cIDX],
trendBearishPivot.values //
);
//
trendBearishPivot.from = pBar.time;
//
trendBearishPivot.value =
trendBearishPivot.value == 0
? iConditions.trendBuffer[cIDX]
: MathMax(iConditions.trendBuffer[cIDX], trendBearishPivot.value);
trendBearishPivot.reserve =
trendBearishPivot.reserve == 0
? iConditions.trendBuffer[cIDX]
: MathMin(iConditions.trendBuffer[cIDX], trendBearishPivot.reserve);
}
//
if (iConditions.isTrendSwitchedToBearish)
{
//
has =
trendBearishPivot.IsValid() &&
trendBearishPivot.GetAge() >= pivotVerifications;
if (has)
{
// //
// double ivMin = GetMin(trendBearishPivot.values);
// double ivMax = GetMax(trendBearishPivot.values);
// //
// trendBearishPivot.value = ivMax;
// trendBearishPivot.reserve = ivMin;
//
AddPivot(
trendBearishPivot,
trendBearishPivots //
);
}
//
trendBearishPivot.Clean();
}
}
// //
start++; start++;
@@ -899,7 +1351,11 @@ class XCXCAEAPOIDetector : public XCBase
// POI Handlers ... // POI Handlers ...
// //
bool HasPeakPivots() // Peaks ...
//
bool
HasPeakPivots()
{ {
return HasChild(peakPivots); return HasChild(peakPivots);
} }
@@ -910,6 +1366,9 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(peakPivots); return ArraySize(peakPivots);
} }
//
// Peak SWH Res ...
// //
bool HasPeakSWHResPivots() bool HasPeakSWHResPivots()
{ {
@@ -922,6 +1381,9 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(peakSWHResPivots); return ArraySize(peakSWHResPivots);
} }
//
// Vale ...
// //
bool HasValePivots() bool HasValePivots()
{ {
@@ -934,6 +1396,9 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(valePivots); return ArraySize(valePivots);
} }
//
// ValeSWLSup ...
// //
bool HasValeSWLSupPivots() bool HasValeSWLSupPivots()
{ {
@@ -946,6 +1411,9 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(valeSWLSupPivots); return ArraySize(valeSWLSupPivots);
} }
//
// Swing High ...
// //
bool HasSWHPivots() bool HasSWHPivots()
{ {
@@ -958,6 +1426,9 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(swhPivots); return ArraySize(swhPivots);
} }
//
// Swing Low ...
// //
bool HasSWLPivots() bool HasSWLPivots()
{ {
@@ -970,6 +1441,87 @@ class XCXCAEAPOIDetector : public XCBase
return ArraySize(swlPivots); return ArraySize(swlPivots);
} }
//
// KI ...
//
bool HasKIBullishPivots()
{
return HasChild(kiBullishPivots);
}
//
int CountKIBullishPivots()
{
return ArraySize(kiBullishPivots);
}
//
bool HasKIBearishPivots()
{
return HasChild(kiBearishPivots);
}
//
int CountKIBearishPivots()
{
return ArraySize(kiBearishPivots);
}
//
// TKI ...
//
bool HasTKIBullishPivots()
{
return HasChild(tkiBullishPivots);
}
//
int CountTKIBullishPivots()
{
return ArraySize(tkiBullishPivots);
}
//
bool HasTKIBearishPivots()
{
return HasChild(tkiBearishPivots);
}
//
int CountTKIBearishPivots()
{
return ArraySize(tkiBearishPivots);
}
//
// TREND ...
//
bool HasTrendBullishPivots()
{
return HasChild(trendBullishPivots);
}
//
int CountTrendBullishPivots()
{
return ArraySize(trendBullishPivots);
}
//
bool HasTrendBearishPivots()
{
return HasChild(trendBearishPivots);
}
//
int CountTrendBearishPivots()
{
return ArraySize(trendBearishPivots);
}
// //
// Protected ... // Protected ...
protected: protected:
@@ -982,14 +1534,21 @@ class XCXCAEAPOIDetector : public XCBase
// //
// Props ... // Props ...
int pivotVerifications; // Pivots Verifications ... int pivotVerifications; // Pivots Verifications ...
int maxAllowedPivots; // Max Allowed Holding Pibots ...
// //
XCAPivot swhPivot; XCAPivot swhPivot;
XCAPivot swlPivot; XCAPivot swlPivot;
XCAPivot peakPivot; XCAPivot peakPivot;
XCAPivot valePivot; XCAPivot valePivot;
XCAPivot kiBullishPivot;
XCAPivot kiBearishPivot;
XCAPivot tkiBullishPivot;
XCAPivot tkiBearishPivot;
XCAPivot peakSWHResPivot; XCAPivot peakSWHResPivot;
XCAPivot valeSWLSupPivot; XCAPivot valeSWLSupPivot;
XCAPivot trendBullishPivot;
XCAPivot trendBearishPivot;
// //
XCPOIDrawer *drawer; XCPOIDrawer *drawer;
@@ -1091,6 +1650,13 @@ class XCXCAEAPOIDetector : public XCBase
// //
pivots[updateIDX].to = pivot.to; pivots[updateIDX].to = pivot.to;
} }
//
// Apply Max Allowed ...
CleanupArray(
pivots,
maxAllowedPivots //
);
} }
// //
+12 -4
View File
@@ -752,13 +752,21 @@ bool DetectXCAEAConditions(
// //
bool isCond1Bullish = bool isCond1Bullish =
conditions.isValeIsPivot && // conditions.isRSIOS &&
isTKITRNDSwitchedToBullish; // conditions.isValeIsPivot &&
// isTKITRNDSwitchedToBullish
conditions.isKISwitchedToBullish
//
;
// //
bool isCond1Bearish = bool isCond1Bearish =
conditions.isPeakIsPivot && // conditions.isRSIOB &&
isTKITRNDSwitchedToBearish; // conditions.isPeakIsPivot &&
// isTKITRNDSwitchedToBearish
conditions.isKISwitchedToBearish
//
;
// //
if (isCond1Bullish || if (isCond1Bullish ||
+414 -164
View File
@@ -172,174 +172,11 @@ class XCXCAEASignaller : XCBase
); );
// //
bool drawSWHPivots = true; DrawPivots();
bool drawSWLPivots = true;
bool drawPeakPivots = false;
bool drawValePivots = false;
// //
// Draw Peak SWH Res Pivots ...
if (drawPeakPivots)
{
// //
has = detector.HasPeakSWHResPivots();
if (has)
{
// //
count = detector.CountPeakSWHResPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.peakSWHResPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper.poiDrawer.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
//
iBox.Clean();
}
//
Print("Draw Peak SWH Res Pivots ...");
}
}
//
// Draw Vale SWL Sup Pivots ...
if (drawValePivots)
{
//
has = detector.HasValeSWLSupPivots();
if (has)
{
//
count = detector.CountValeSWLSupPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.valeSWLSupPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper.poiDrawer.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
//
iBox.Clean();
}
//
Print("Draw Vale SWL Sup Pivots ...");
}
}
//
// Draw SWH Pvots ...
if (drawSWHPivots)
{
//
has = detector.HasSWHPivots();
if (has)
{
//
count = detector.CountSWHPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.swhPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw SWL Pvots ...
if (drawSWLPivots)
{
//
has = detector.HasSWLPivots();
if (has)
{
//
count = detector.CountSWLPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.swlPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
// //
XCAEAConditions conditions; XCAEAConditions conditions;
@@ -678,6 +515,419 @@ class XCXCAEASignaller : XCBase
protected: protected:
// //
//
void DrawPivots()
{
//
int count = 0;
bool has = false;
datetime cTime = TimeCurrent();
//
bool drawSWHPivots = false;
bool drawSWLPivots = false;
bool drawPeakPivots = false;
bool drawValePivots = false;
bool drawKIBullishPivots = false;
bool drawKIBearishPivots = false;
bool drawTKIBullishPivots = false;
bool drawTKIBearishPivots = false;
bool drawTrendBullishPivots = true;
bool drawTrendBearishPivots = true;
//
// Draw Peak SWH Res Pivots ...
if (drawPeakPivots)
{
//
has = detector.HasPeakSWHResPivots();
if (has)
{
//
count = detector.CountPeakSWHResPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.peakSWHResPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper.poiDrawer.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
//
iBox.Clean();
}
}
}
//
// Draw Vale SWL Sup Pivots ...
if (drawValePivots)
{
//
has = detector.HasValeSWLSupPivots();
if (has)
{
//
count = detector.CountValeSWLSupPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.valeSWLSupPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper.poiDrawer.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
//
iBox.Clean();
}
}
}
//
// Draw SWH Pvots ...
if (drawSWHPivots)
{
//
has = detector.HasSWHPivots();
if (has)
{
//
count = detector.CountSWHPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.swhPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw SWL Pvots ...
if (drawSWLPivots)
{
//
has = detector.HasSWLPivots();
if (has)
{
//
count = detector.CountSWLPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.swlPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw KI Bullish Pivots ...
if (drawKIBullishPivots)
{
//
has = detector.HasKIBullishPivots();
if (has)
{
//
count = detector.CountKIBullishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.kiBullishPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw KI Bearish Pivots ...
if (drawKIBearishPivots)
{
//
has = detector.HasKIBullishPivots();
if (has)
{
//
count = detector.CountKIBearishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.kiBearishPivots[i]
.AsBox(iBox);
if (has)
{
//
iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw TKI Bullish Pivots ...
if (drawTKIBullishPivots)
{
//
has = detector.HasTKIBullishPivots();
if (has)
{
//
count = detector.CountTKIBullishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.tkiBullishPivots[i]
.AsBox(iBox);
if (has)
{
//
// iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw TKI Bearish Pivots ...
if (drawTKIBearishPivots)
{
//
has = detector.HasTKIBullishPivots();
if (has)
{
//
count = detector.CountTKIBearishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.tkiBearishPivots[i]
.AsBox(iBox);
if (has)
{
//
// iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw Trend Bullish Pivots ...
if (drawTrendBullishPivots)
{
//
has = detector.HasTrendBullishPivots();
if (has)
{
//
count = detector.CountTrendBullishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.trendBullishPivots[i]
.AsBox(iBox);
if (has)
{
//
// iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
//
// Draw Trend Bearish Pivots ...
if (drawTrendBearishPivots)
{
//
has = detector.HasTrendBullishPivots();
if (has)
{
//
count = detector.CountTrendBearishPivots();
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox;
has = detector
.trendBearishPivots[i]
.AsBox(iBox);
if (has)
{
//
// iBox.to = cTime;
//
XCBoxObject *iObj;
has = helper
.poiDrawer
.DrawBox(
iBox,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
}
}
}
}
}
// //
// Private ... // Private ...
private: private: