last ...
This commit is contained in:
@@ -44,15 +44,15 @@ input string eaSymbols = "EURUSDb,GBPUSDb,USDJPYb,USDCHFb"; // Trading Symbols
|
|||||||
//
|
//
|
||||||
// Signalling ...
|
// Signalling ...
|
||||||
input group "Signalling";
|
input group "Signalling";
|
||||||
input bool eaAllowLong = true; // Allow Long Signals
|
input bool eaAllowLong = true; // Allow Long Signals
|
||||||
input bool eaAllowShort = true; // Allow Short Signals
|
input bool eaAllowShort = true; // Allow Short Signals
|
||||||
input int eaMaxAllowedLongs = 5; // Max Allowed Long Signals
|
input int eaMaxAllowedLongs = 5; // Max Allowed Long Signals
|
||||||
input int eaMaxAllowedShorts = 5; // Max Allowed Short Signals
|
input int eaMaxAllowedShorts = 5; // Max Allowed Short Signals
|
||||||
input bool eaUseMaxAllowedSignalsPerSymbol = true; // Use Max Allowed Signal Types Per Symbol
|
input bool eaUseMaxAllowedSignalsPerSymbol = true; // Use Max Allowed Signal Types Per Symbol
|
||||||
input double eaLastPositionProfitForAcceptNextInPoint = 30; // Last Position Profit In Points for Accept new Signal
|
input double eaLastPositionProfitForAcceptNextInPoint = 0; // Last Position Profit In Points for Accept new Signal
|
||||||
input int eaDelaysBetweenTwoSignalsInBar = 100; // Delay between two Signals in Bars
|
input int eaDelaysBetweenTwoSignalsInBar = 0; // Delay between two Signals in Bars
|
||||||
input double eaMaxAllowedSpread = 25; // Max Allowed Spread for Signalling
|
input double eaMaxAllowedSpread = 25; // Max Allowed Spread for Signalling
|
||||||
input int eaMinRequiredVerificationForSpreadPass = 20; // Minimum Spread Verification for Signalling
|
input int eaMinRequiredVerificationForSpreadPass = 20; // Minimum Spread Verification for Signalling
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trade ...
|
// Trade ...
|
||||||
|
|||||||
@@ -237,10 +237,10 @@ struct X121Conditions
|
|||||||
bool isRsiCrossedOverOverSold;
|
bool isRsiCrossedOverOverSold;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCloseOverAtrUpper;
|
bool isClosedOverAtrUpper;
|
||||||
bool isCloseOverAtrLower;
|
bool isClosedOverAtrLower;
|
||||||
bool isCloseUnderAtrUpper;
|
bool isClosedUnderAtrUpper;
|
||||||
bool isCloseUnderAtrLower;
|
bool isClosedUnderAtrLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isRejectUpAtrUpper;
|
bool isRejectUpAtrUpper;
|
||||||
@@ -349,9 +349,25 @@ struct X121Conditions
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Complex Conditions ...
|
// Complex Conditions ...
|
||||||
|
double cheMin;
|
||||||
|
double cheMax;
|
||||||
double vwapMin;
|
double vwapMin;
|
||||||
double vwapMax;
|
double vwapMax;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBreakedUpPrevCheMin;
|
||||||
|
bool isBreakedUpPrevCheMax;
|
||||||
|
bool isBreakedDownPrevCheMin;
|
||||||
|
bool isBreakedDownPrevCheMax;
|
||||||
|
bool isBreakedUpPrevCheLE1;
|
||||||
|
bool isBreakedUpPrevCheLE2;
|
||||||
|
bool isBreakedUpPrevCheSE1;
|
||||||
|
bool isBreakedUpPrevCheSE2;
|
||||||
|
bool isBreakedDownPrevCheLE1;
|
||||||
|
bool isBreakedDownPrevCheLE2;
|
||||||
|
bool isBreakedDownPrevCheSE1;
|
||||||
|
bool isBreakedDownPrevCheSE2;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isSarIncreased;
|
bool isSarIncreased;
|
||||||
bool isSarDecreased;
|
bool isSarDecreased;
|
||||||
@@ -473,11 +489,13 @@ struct X121Conditions
|
|||||||
bool isStrLowerCrossedUnderDonLowLower;
|
bool isStrLowerCrossedUnderDonLowLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool isAtrUpperOverPeak;
|
||||||
bool isAtrUpperEqualsToPeak;
|
bool isAtrUpperEqualsToPeak;
|
||||||
bool isAtrUpperCrossedUpPeak;
|
bool isAtrUpperCrossedUpPeak;
|
||||||
bool isAtrUpperCrossedDownPeak;
|
bool isAtrUpperCrossedDownPeak;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool isAtrLowerUnderVale;
|
||||||
bool isAtrLowerEqualsToVale;
|
bool isAtrLowerEqualsToVale;
|
||||||
bool isAtrLowerCrossedUpVale;
|
bool isAtrLowerCrossedUpVale;
|
||||||
bool isAtrLowerCrossedDownVale;
|
bool isAtrLowerCrossedDownVale;
|
||||||
@@ -607,6 +625,8 @@ struct X121Conditions
|
|||||||
ArraySetAsSeries(donCloseLowerBuffer, true);
|
ArraySetAsSeries(donCloseLowerBuffer, true);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
cheMin = 0;
|
||||||
|
cheMax = 0;
|
||||||
vwapMin = 0;
|
vwapMin = 0;
|
||||||
vwapMax = 0;
|
vwapMax = 0;
|
||||||
|
|
||||||
@@ -659,12 +679,12 @@ struct X121Conditions
|
|||||||
// ATR ...
|
// ATR ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isCloseOverAtrUpper = false;
|
isClosedOverAtrUpper = false;
|
||||||
isCloseOverAtrLower = false;
|
isClosedOverAtrLower = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCloseUnderAtrUpper = false;
|
isClosedUnderAtrUpper = false;
|
||||||
isCloseUnderAtrLower = false;
|
isClosedUnderAtrLower = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isRejectUpAtrUpper = false;
|
isRejectUpAtrUpper = false;
|
||||||
@@ -858,6 +878,20 @@ struct X121Conditions
|
|||||||
isBreakedUpPrevAtrLower = false;
|
isBreakedUpPrevAtrLower = false;
|
||||||
isBreakedDownPrevAtrLower = false;
|
isBreakedDownPrevAtrLower = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBreakedUpPrevCheMin = false;
|
||||||
|
isBreakedUpPrevCheMax = false;
|
||||||
|
isBreakedDownPrevCheMin = false;
|
||||||
|
isBreakedDownPrevCheMax = false;
|
||||||
|
isBreakedUpPrevCheLE1 = false;
|
||||||
|
isBreakedUpPrevCheLE2 = false;
|
||||||
|
isBreakedUpPrevCheSE1 = false;
|
||||||
|
isBreakedUpPrevCheSE2 = false;
|
||||||
|
isBreakedDownPrevCheLE1 = false;
|
||||||
|
isBreakedDownPrevCheLE2 = false;
|
||||||
|
isBreakedDownPrevCheSE1 = false;
|
||||||
|
isBreakedDownPrevCheSE2 = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isSarIncreased = false;
|
isSarIncreased = false;
|
||||||
isSarDecreased = false;
|
isSarDecreased = false;
|
||||||
@@ -899,11 +933,13 @@ struct X121Conditions
|
|||||||
isStrLowerUnderVale = false;
|
isStrLowerUnderVale = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
isAtrUpperOverPeak = false;
|
||||||
isAtrUpperEqualsToPeak = false;
|
isAtrUpperEqualsToPeak = false;
|
||||||
isAtrUpperCrossedUpPeak = false;
|
isAtrUpperCrossedUpPeak = false;
|
||||||
isAtrUpperCrossedDownPeak = false;
|
isAtrUpperCrossedDownPeak = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
isAtrLowerUnderVale = false;
|
||||||
isAtrLowerEqualsToVale = false;
|
isAtrLowerEqualsToVale = false;
|
||||||
isAtrLowerCrossedUpVale = false;
|
isAtrLowerCrossedUpVale = false;
|
||||||
isAtrLowerCrossedDownVale = false;
|
isAtrLowerCrossedDownVale = false;
|
||||||
@@ -1055,10 +1091,10 @@ struct X121Conditions
|
|||||||
"-----------------------" + separator +
|
"-----------------------" + separator +
|
||||||
"ATR ..." + separator +
|
"ATR ..." + separator +
|
||||||
"-----------------------" + separator +
|
"-----------------------" + separator +
|
||||||
ToString("isCloseOverAtrUpper", isCloseOverAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isClosedOverAtrUpper", isClosedOverAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseOverAtrLower", isCloseOverAtrLower, ignoreFalseConditions, separator) +
|
ToString("isClosedOverAtrLower", isClosedOverAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseUnderAtrUpper", isCloseUnderAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isClosedUnderAtrUpper", isClosedUnderAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseUnderAtrLower", isCloseUnderAtrLower, ignoreFalseConditions, separator) +
|
ToString("isClosedUnderAtrLower", isClosedUnderAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectUpAtrUpper", isRejectUpAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isRejectUpAtrUpper", isRejectUpAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectDownAtrUpper", isRejectDownAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isRejectDownAtrUpper", isRejectDownAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectUpAtrLower", isRejectUpAtrLower, ignoreFalseConditions, separator) +
|
ToString("isRejectUpAtrLower", isRejectUpAtrLower, ignoreFalseConditions, separator) +
|
||||||
@@ -1165,6 +1201,8 @@ struct X121Conditions
|
|||||||
ToString("isVWapMaxBreakedUp", isVWapMaxBreakedUp, ignoreFalseConditions, separator) +
|
ToString("isVWapMaxBreakedUp", isVWapMaxBreakedUp, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrUpperOverPeak", isStrUpperOverPeak, ignoreFalseConditions, separator) +
|
ToString("isStrUpperOverPeak", isStrUpperOverPeak, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrLowerOverVale", isStrLowerOverVale, ignoreFalseConditions, separator) +
|
ToString("isStrLowerOverVale", isStrLowerOverVale, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isAtrUpperOverPeak", isAtrUpperOverPeak, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isAtrLowerUnderVale", isAtrLowerUnderVale, ignoreFalseConditions, separator) +
|
||||||
ToString("isClosedOverVWapMin", isClosedOverVWapMin, ignoreFalseConditions, separator) +
|
ToString("isClosedOverVWapMin", isClosedOverVWapMin, ignoreFalseConditions, separator) +
|
||||||
ToString("isClosedOverVWapMax", isClosedOverVWapMax, ignoreFalseConditions, separator) +
|
ToString("isClosedOverVWapMax", isClosedOverVWapMax, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrUpperUnderPeak", isStrUpperUnderPeak, ignoreFalseConditions, separator) +
|
ToString("isStrUpperUnderPeak", isStrUpperUnderPeak, ignoreFalseConditions, separator) +
|
||||||
@@ -1178,14 +1216,26 @@ struct X121Conditions
|
|||||||
ToString("isBreakedDownPrevStr", isBreakedDownPrevStr, ignoreFalseConditions, separator) +
|
ToString("isBreakedDownPrevStr", isBreakedDownPrevStr, ignoreFalseConditions, separator) +
|
||||||
ToString("isSarCrossedOverVale", isSarCrossedOverVale, ignoreFalseConditions, separator) +
|
ToString("isSarCrossedOverVale", isSarCrossedOverVale, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrCrossedOverVale", isStrCrossedOverVale, ignoreFalseConditions, separator) +
|
ToString("isStrCrossedOverVale", isStrCrossedOverVale, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheLE1", isBreakedUpPrevCheLE1, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheLE2", isBreakedUpPrevCheLE2, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheSE1", isBreakedUpPrevCheSE1, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheSE2", isBreakedUpPrevCheSE2, ignoreFalseConditions, separator) +
|
||||||
ToString("isSarCrossedUnderPeak", isSarCrossedUnderPeak, ignoreFalseConditions, separator) +
|
ToString("isSarCrossedUnderPeak", isSarCrossedUnderPeak, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrCrossedUnderPeak", isStrCrossedUnderPeak, ignoreFalseConditions, separator) +
|
ToString("isStrCrossedUnderPeak", isStrCrossedUnderPeak, ignoreFalseConditions, separator) +
|
||||||
ToString("isNewPeakOverAtrUpper", isNewPeakOverAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isNewPeakOverAtrUpper", isNewPeakOverAtrUpper, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheMin", isBreakedUpPrevCheMin, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedUpPrevCheMax", isBreakedUpPrevCheMax, ignoreFalseConditions, separator) +
|
||||||
ToString("isNewValeUnderAtrLower", isNewValeUnderAtrLower, ignoreFalseConditions, separator) +
|
ToString("isNewValeUnderAtrLower", isNewValeUnderAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrUpperOverAtrUpper", isStrUpperOverAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isStrUpperOverAtrUpper", isStrUpperOverAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrLowerOverAtrLower", isStrLowerOverAtrLower, ignoreFalseConditions, separator) +
|
ToString("isStrLowerOverAtrLower", isStrLowerOverAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isAtrUpperEqualsToPeak", isAtrUpperEqualsToPeak, ignoreFalseConditions, separator) +
|
ToString("isAtrUpperEqualsToPeak", isAtrUpperEqualsToPeak, ignoreFalseConditions, separator) +
|
||||||
ToString("isAtrLowerEqualsToVale", isAtrLowerEqualsToVale, ignoreFalseConditions, separator) +
|
ToString("isAtrLowerEqualsToVale", isAtrLowerEqualsToVale, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheMin", isBreakedDownPrevCheMin, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheMax", isBreakedDownPrevCheMax, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheLE1", isBreakedDownPrevCheLE1, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheLE2", isBreakedDownPrevCheLE2, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheSE1", isBreakedDownPrevCheSE1, ignoreFalseConditions, separator) +
|
||||||
|
ToString("isBreakedDownPrevCheSE2", isBreakedDownPrevCheSE2, ignoreFalseConditions, separator) +
|
||||||
ToString("isAtrUpperCrossedUpPeak", isAtrUpperCrossedUpPeak, ignoreFalseConditions, separator) +
|
ToString("isAtrUpperCrossedUpPeak", isAtrUpperCrossedUpPeak, ignoreFalseConditions, separator) +
|
||||||
ToString("isAtrLowerCrossedUpVale", isAtrLowerCrossedUpVale, ignoreFalseConditions, separator) +
|
ToString("isAtrLowerCrossedUpVale", isAtrLowerCrossedUpVale, ignoreFalseConditions, separator) +
|
||||||
ToString("isStrUpperUnderAtrUpper", isStrUpperUnderAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isStrUpperUnderAtrUpper", isStrUpperUnderAtrUpper, ignoreFalseConditions, separator) +
|
||||||
@@ -1893,14 +1943,14 @@ class XCX121Helper : public XCBase
|
|||||||
conditions.isRsiOverBought = xatrConditions.isRsiOverBought;
|
conditions.isRsiOverBought = xatrConditions.isRsiOverBought;
|
||||||
conditions.isBreakUpAtrUpper = xatrConditions.isBreakUpAtrUpper;
|
conditions.isBreakUpAtrUpper = xatrConditions.isBreakUpAtrUpper;
|
||||||
conditions.isBreakUpAtrLower = xatrConditions.isBreakUpAtrLower;
|
conditions.isBreakUpAtrLower = xatrConditions.isBreakUpAtrLower;
|
||||||
conditions.isCloseOverAtrUpper = xatrConditions.isCloseOverAtrUpper;
|
conditions.isClosedOverAtrUpper = xatrConditions.isClosedOverAtrUpper;
|
||||||
conditions.isRejectUpAtrUpper = xatrConditions.isRejectUpAtrUpper;
|
conditions.isRejectUpAtrUpper = xatrConditions.isRejectUpAtrUpper;
|
||||||
conditions.isRejectUpAtrLower = xatrConditions.isRejectUpAtrLower;
|
conditions.isRejectUpAtrLower = xatrConditions.isRejectUpAtrLower;
|
||||||
conditions.isCloseOverAtrLower = xatrConditions.isCloseOverAtrLower;
|
conditions.isClosedOverAtrLower = xatrConditions.isClosedOverAtrLower;
|
||||||
conditions.isBreakDownAtrUpper = xatrConditions.isBreakDownAtrUpper;
|
conditions.isBreakDownAtrUpper = xatrConditions.isBreakDownAtrUpper;
|
||||||
conditions.isBreakDownAtrLower = xatrConditions.isBreakDownAtrLower;
|
conditions.isBreakDownAtrLower = xatrConditions.isBreakDownAtrLower;
|
||||||
conditions.isCloseUnderAtrUpper = xatrConditions.isCloseUnderAtrUpper;
|
conditions.isClosedUnderAtrUpper = xatrConditions.isClosedUnderAtrUpper;
|
||||||
conditions.isCloseUnderAtrLower = xatrConditions.isCloseUnderAtrLower;
|
conditions.isClosedUnderAtrLower = xatrConditions.isClosedUnderAtrLower;
|
||||||
conditions.isRejectDownAtrUpper = xatrConditions.isRejectDownAtrUpper;
|
conditions.isRejectDownAtrUpper = xatrConditions.isRejectDownAtrUpper;
|
||||||
conditions.isRejectDownAtrLower = xatrConditions.isRejectDownAtrLower;
|
conditions.isRejectDownAtrLower = xatrConditions.isRejectDownAtrLower;
|
||||||
conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold;
|
conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold;
|
||||||
@@ -2325,9 +2375,52 @@ class XCX121Helper : public XCBase
|
|||||||
//
|
//
|
||||||
double prevSar = conditions.sarBuffer[pIDX];
|
double prevSar = conditions.sarBuffer[pIDX];
|
||||||
double prevStr = conditions.strBuffer[pIDX];
|
double prevStr = conditions.strBuffer[pIDX];
|
||||||
|
double prevCheLE1 = conditions.le1Buffer[pIDX];
|
||||||
|
double prevCheLE2 = conditions.le2Buffer[pIDX];
|
||||||
|
double prevCheSE1 = conditions.se1Buffer[pIDX];
|
||||||
|
double prevCheSE2 = conditions.se2Buffer[pIDX];
|
||||||
double prevAtrUpper = conditions.atrUpperBuffer[pIDX];
|
double prevAtrUpper = conditions.atrUpperBuffer[pIDX];
|
||||||
double prevAtrLower = conditions.atrLowerBuffer[pIDX];
|
double prevAtrLower = conditions.atrLowerBuffer[pIDX];
|
||||||
|
|
||||||
|
//
|
||||||
|
double ches[];
|
||||||
|
if (prevCheLE1 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
prevCheLE1,
|
||||||
|
ches //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (prevCheLE2 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
prevCheLE2,
|
||||||
|
ches //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (prevCheSE1 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
prevCheSE1,
|
||||||
|
ches //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (prevCheSE2 != EMPTY_VALUE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
prevCheSE2,
|
||||||
|
ches //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double cheMin = GetMin(ches);
|
||||||
|
double cheMax = GetMax(ches);
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isBreakedUpPrevSar = IsBarBreak(
|
bool isBreakedUpPrevSar = IsBarBreak(
|
||||||
prevSar,
|
prevSar,
|
||||||
@@ -2376,6 +2469,74 @@ class XCX121Helper : public XCBase
|
|||||||
cBar //
|
cBar //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBreakedUpPrevCheLE1 = IsBarBreak(
|
||||||
|
prevCheLE1,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedUpPrevCheLE2 = IsBarBreak(
|
||||||
|
prevCheLE2,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedUpPrevCheSE1 = IsBarBreak(
|
||||||
|
prevCheSE1,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedUpPrevCheSE2 = IsBarBreak(
|
||||||
|
prevCheSE2,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBreakedDownPrevCheLE1 = IsBarBreak(
|
||||||
|
prevCheLE1,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedDownPrevCheLE2 = IsBarBreak(
|
||||||
|
prevCheLE2,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedDownPrevCheSE1 = IsBarBreak(
|
||||||
|
prevCheSE1,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedDownPrevCheSE2 = IsBarBreak(
|
||||||
|
prevCheSE2,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBreakedUpPrevCheMin = IsBarBreak(
|
||||||
|
cheMin,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedDownPrevCheMin = IsBarBreak(
|
||||||
|
cheMin,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBreakedUpPrevCheMax = IsBarBreak(
|
||||||
|
cheMax,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
bool isBreakedDownPrevCheMax = IsBarBreak(
|
||||||
|
cheMax,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isSarCrossedUnderPeak =
|
bool isSarCrossedUnderPeak =
|
||||||
conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] &&
|
conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] &&
|
||||||
@@ -2519,6 +2680,7 @@ class XCX121Helper : public XCBase
|
|||||||
!isStrLowerUnderDonLowLowerPrev;
|
!isStrLowerUnderDonLowLowerPrev;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool isAtrUpperOverPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX];
|
||||||
bool isAtrUpperEqualsToPeak = conditions.atrUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX];
|
bool isAtrUpperEqualsToPeak = conditions.atrUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2528,6 +2690,7 @@ class XCX121Helper : public XCBase
|
|||||||
!(conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX]);
|
!(conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX]);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
bool isAtrLowerUnderVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX];
|
||||||
bool isAtrLowerEqualsToVale = conditions.atrUpperBuffer[cIDX] == conditions.valesBuffer[cIDX];
|
bool isAtrLowerEqualsToVale = conditions.atrUpperBuffer[cIDX] == conditions.valesBuffer[cIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -2537,6 +2700,8 @@ class XCX121Helper : public XCBase
|
|||||||
!(conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]);
|
!(conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
conditions.cheMin = cheMin;
|
||||||
|
conditions.cheMax = cheMax;
|
||||||
conditions.vwapMin = vwapMin;
|
conditions.vwapMin = vwapMin;
|
||||||
conditions.vwapMax = vwapMax;
|
conditions.vwapMax = vwapMax;
|
||||||
|
|
||||||
@@ -2554,6 +2719,8 @@ class XCX121Helper : public XCBase
|
|||||||
conditions.isVWapMaxBreakedUp = isVWapMaxBreakedUp;
|
conditions.isVWapMaxBreakedUp = isVWapMaxBreakedUp;
|
||||||
conditions.isBreakedUpPrevSar = isBreakedUpPrevSar;
|
conditions.isBreakedUpPrevSar = isBreakedUpPrevSar;
|
||||||
conditions.isBreakedUpPrevStr = isBreakedUpPrevStr;
|
conditions.isBreakedUpPrevStr = isBreakedUpPrevStr;
|
||||||
|
conditions.isAtrUpperOverPeak = isAtrUpperOverPeak;
|
||||||
|
conditions.isAtrLowerUnderVale = isAtrLowerUnderVale;
|
||||||
conditions.isStrLowerUnderVale = isStrLowerUnderVale;
|
conditions.isStrLowerUnderVale = isStrLowerUnderVale;
|
||||||
conditions.isStrUpperUnderPeak = isStrUpperUnderPeak;
|
conditions.isStrUpperUnderPeak = isStrUpperUnderPeak;
|
||||||
conditions.isValeUnderAtrLower = isValeUnderAtrLower;
|
conditions.isValeUnderAtrLower = isValeUnderAtrLower;
|
||||||
@@ -2570,11 +2737,23 @@ class XCX121Helper : public XCBase
|
|||||||
conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak;
|
conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak;
|
||||||
conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak;
|
conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak;
|
||||||
conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper;
|
conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper;
|
||||||
|
conditions.isBreakedUpPrevCheLE1 = isBreakedUpPrevCheLE1;
|
||||||
|
conditions.isBreakedUpPrevCheLE2 = isBreakedUpPrevCheLE2;
|
||||||
|
conditions.isBreakedUpPrevCheSE1 = isBreakedUpPrevCheSE1;
|
||||||
|
conditions.isBreakedUpPrevCheSE2 = isBreakedUpPrevCheSE2;
|
||||||
|
conditions.isBreakedUpPrevCheMin = isBreakedUpPrevCheMin;
|
||||||
|
conditions.isBreakedUpPrevCheMax = isBreakedUpPrevCheMax;
|
||||||
conditions.isAtrUpperEqualsToPeak = isAtrUpperEqualsToPeak;
|
conditions.isAtrUpperEqualsToPeak = isAtrUpperEqualsToPeak;
|
||||||
conditions.isAtrLowerEqualsToVale = isAtrLowerEqualsToVale;
|
conditions.isAtrLowerEqualsToVale = isAtrLowerEqualsToVale;
|
||||||
conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower;
|
conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower;
|
||||||
conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper;
|
conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper;
|
||||||
conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower;
|
conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower;
|
||||||
|
conditions.isBreakedDownPrevCheMin = isBreakedDownPrevCheMin;
|
||||||
|
conditions.isBreakedDownPrevCheMax = isBreakedDownPrevCheMax;
|
||||||
|
conditions.isBreakedDownPrevCheLE1 = isBreakedDownPrevCheLE1;
|
||||||
|
conditions.isBreakedDownPrevCheLE2 = isBreakedDownPrevCheLE2;
|
||||||
|
conditions.isBreakedDownPrevCheSE1 = isBreakedDownPrevCheSE1;
|
||||||
|
conditions.isBreakedDownPrevCheSE2 = isBreakedDownPrevCheSE2;
|
||||||
conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper;
|
conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper;
|
||||||
conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower;
|
conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower;
|
||||||
conditions.isBreakedUpPrevAtrUpper = isBreakedUpPrevAtrUpper;
|
conditions.isBreakedUpPrevAtrUpper = isBreakedUpPrevAtrUpper;
|
||||||
|
|||||||
@@ -210,12 +210,12 @@ struct X121XATRConditions
|
|||||||
// ATR ...
|
// ATR ...
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCloseOverAtrUpper;
|
bool isClosedOverAtrUpper;
|
||||||
bool isCloseOverAtrLower;
|
bool isClosedOverAtrLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCloseUnderAtrUpper;
|
bool isClosedUnderAtrUpper;
|
||||||
bool isCloseUnderAtrLower;
|
bool isClosedUnderAtrLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isRejectUpAtrUpper;
|
bool isRejectUpAtrUpper;
|
||||||
@@ -296,12 +296,12 @@ struct X121XATRConditions
|
|||||||
// ATR ...
|
// ATR ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isCloseOverAtrUpper = false;
|
isClosedOverAtrUpper = false;
|
||||||
isCloseOverAtrLower = false;
|
isClosedOverAtrLower = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isCloseUnderAtrUpper = false;
|
isClosedUnderAtrUpper = false;
|
||||||
isCloseUnderAtrLower = false;
|
isClosedUnderAtrLower = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
isRejectUpAtrUpper = false;
|
isRejectUpAtrUpper = false;
|
||||||
@@ -402,10 +402,10 @@ struct X121XATRConditions
|
|||||||
ToString("isRsiCrossedOverOverSold", isRsiCrossedOverOverSold, ignoreFalseConditions, separator) +
|
ToString("isRsiCrossedOverOverSold", isRsiCrossedOverOverSold, ignoreFalseConditions, separator) +
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
ToString("isCloseOverAtrUpper", isCloseOverAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isClosedOverAtrUpper", isClosedOverAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseOverAtrLower", isCloseOverAtrLower, ignoreFalseConditions, separator) +
|
ToString("isClosedOverAtrLower", isClosedOverAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseUnderAtrUpper", isCloseUnderAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isClosedUnderAtrUpper", isClosedUnderAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isCloseUnderAtrLower", isCloseUnderAtrLower, ignoreFalseConditions, separator) +
|
ToString("isClosedUnderAtrLower", isClosedUnderAtrLower, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectUpAtrUpper", isRejectUpAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isRejectUpAtrUpper", isRejectUpAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectDownAtrUpper", isRejectDownAtrUpper, ignoreFalseConditions, separator) +
|
ToString("isRejectDownAtrUpper", isRejectDownAtrUpper, ignoreFalseConditions, separator) +
|
||||||
ToString("isRejectUpAtrLower", isRejectUpAtrLower, ignoreFalseConditions, separator) +
|
ToString("isRejectUpAtrLower", isRejectUpAtrLower, ignoreFalseConditions, separator) +
|
||||||
@@ -1022,12 +1022,12 @@ class XCX121XATRHelper : public XCBaseHelper
|
|||||||
// ATR ...
|
// ATR ...
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCloseOverAtrUpper = cBar.close > conditions.atrUpperBuffer[cIDX];
|
bool isClosedOverAtrUpper = cBar.close > conditions.atrUpperBuffer[cIDX];
|
||||||
bool isCloseOverAtrLower = cBar.close > conditions.atrLowerBuffer[cIDX];
|
bool isClosedOverAtrLower = cBar.close > conditions.atrLowerBuffer[cIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isCloseUnderAtrUpper = cBar.close < conditions.atrUpperBuffer[cIDX];
|
bool isClosedUnderAtrUpper = cBar.close < conditions.atrUpperBuffer[cIDX];
|
||||||
bool isCloseUnderAtrLower = cBar.close < conditions.atrLowerBuffer[cIDX];
|
bool isClosedUnderAtrLower = cBar.close < conditions.atrLowerBuffer[cIDX];
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isRejectUpAtrUpper = IsBarReject(
|
bool isRejectUpAtrUpper = IsBarReject(
|
||||||
@@ -1088,12 +1088,12 @@ class XCX121XATRHelper : public XCBaseHelper
|
|||||||
conditions.isBreakUpAtrLower = isBreakUpAtrLower;
|
conditions.isBreakUpAtrLower = isBreakUpAtrLower;
|
||||||
conditions.isRejectDownAtrUpper = isRejectDownAtrUpper;
|
conditions.isRejectDownAtrUpper = isRejectDownAtrUpper;
|
||||||
conditions.isRejectDownAtrLower = isRejectDownAtrLower;
|
conditions.isRejectDownAtrLower = isRejectDownAtrLower;
|
||||||
conditions.isCloseOverAtrUpper = isCloseOverAtrUpper;
|
conditions.isClosedOverAtrUpper = isClosedOverAtrUpper;
|
||||||
conditions.isCloseOverAtrLower = isCloseOverAtrLower;
|
conditions.isClosedOverAtrLower = isClosedOverAtrLower;
|
||||||
conditions.isBreakDownAtrUpper = isBreakDownAtrUpper;
|
conditions.isBreakDownAtrUpper = isBreakDownAtrUpper;
|
||||||
conditions.isBreakDownAtrLower = isBreakDownAtrLower;
|
conditions.isBreakDownAtrLower = isBreakDownAtrLower;
|
||||||
conditions.isCloseUnderAtrUpper = isCloseUnderAtrUpper;
|
conditions.isClosedUnderAtrUpper = isClosedUnderAtrUpper;
|
||||||
conditions.isCloseUnderAtrLower = isCloseUnderAtrLower;
|
conditions.isClosedUnderAtrLower = isClosedUnderAtrLower;
|
||||||
conditions.isRsiCrossedOverOverSold = isRsiCrossedOverOverSold;
|
conditions.isRsiCrossedOverOverSold = isRsiCrossedOverOverSold;
|
||||||
conditions.isRsiCrossedUnderOverSold = isRsiCrossedUnderOverSold;
|
conditions.isRsiCrossedUnderOverSold = isRsiCrossedUnderOverSold;
|
||||||
conditions.isRsiCrossedOverOverBought = isRsiCrossedOverOverBought;
|
conditions.isRsiCrossedOverOverBought = isRsiCrossedOverOverBought;
|
||||||
|
|||||||
@@ -3272,18 +3272,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
|||||||
//
|
//
|
||||||
XCSignalObject *iObj;
|
XCSignalObject *iObj;
|
||||||
mDrawer.DrawSignal(signal, iObj);
|
mDrawer.DrawSignal(signal, iObj);
|
||||||
|
|
||||||
//
|
|
||||||
XCBaseObject *conditionsObjects[];
|
|
||||||
DrawX121SMCStrategyConditions(
|
|
||||||
conditions,
|
|
||||||
conditionsObjects,
|
|
||||||
mDrawer,
|
|
||||||
false,
|
|
||||||
true, // Analyse Price Zones ...
|
|
||||||
false, // Decision Zone ...
|
|
||||||
true // Only Box ...
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ struct X121SMCStrategyXSTRPVSignalConditions
|
|||||||
double pivot;
|
double pivot;
|
||||||
double point;
|
double point;
|
||||||
|
|
||||||
|
//
|
||||||
|
XPriceZones priceZone;
|
||||||
|
bool isPriceZoneValidForPeak;
|
||||||
|
bool isPriceZoneValidForVale;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
X121SMCStrategyXSTRPVSignalConditions()
|
X121SMCStrategyXSTRPVSignalConditions()
|
||||||
@@ -169,6 +174,11 @@ struct X121SMCStrategyXSTRPVSignalConditions
|
|||||||
//
|
//
|
||||||
pivot = 0;
|
pivot = 0;
|
||||||
point = 0;
|
point = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
priceZone.Clean();
|
||||||
|
isPriceZoneValidForPeak = false;
|
||||||
|
isPriceZoneValidForVale = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -402,18 +412,68 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
// Detect Trend ...
|
// Detect Trend ...
|
||||||
|
|
||||||
//
|
//
|
||||||
ENUM_X_DIRECTION marketDir;
|
// Consolidation ...
|
||||||
bool hasMarketDir = decisionCycleHelper.DetectMarketStructure(marketDir);
|
ENUM_X_DIRECTION consolidationMarketDir;
|
||||||
|
bool hasConsolidationMarketDir = consolidationCycleHelper
|
||||||
|
.DetectMarketStructure(consolidationMarketDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
bool hasBullishTrend =
|
bool hasConsolidationBullishTrend =
|
||||||
hasMarketDir &&
|
hasConsolidationMarketDir &&
|
||||||
IsBullish(marketDir);
|
IsBullish(consolidationMarketDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
bool hasBearishTrend =
|
bool hasConsolidationBearishTrend =
|
||||||
hasMarketDir &&
|
hasConsolidationMarketDir &&
|
||||||
IsBearish(marketDir);
|
IsBearish(consolidationMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Verification ...
|
||||||
|
ENUM_X_DIRECTION verificationMarketDir;
|
||||||
|
bool hasVerificationMarketDir = verificationCycleHelper
|
||||||
|
.DetectMarketStructure(verificationMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasVerificationBullishTrend =
|
||||||
|
hasVerificationMarketDir &&
|
||||||
|
IsBullish(verificationMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasVerificationBearishTrend =
|
||||||
|
hasVerificationMarketDir &&
|
||||||
|
IsBearish(verificationMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse ...
|
||||||
|
ENUM_X_DIRECTION analyseMarketDir;
|
||||||
|
bool hasAnalyseMarketDir = analyseCycleHelper
|
||||||
|
.DetectMarketStructure(analyseMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasAnalyseBullishTrend =
|
||||||
|
hasAnalyseMarketDir &&
|
||||||
|
IsBullish(analyseMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasAnalyseBearishTrend =
|
||||||
|
hasAnalyseMarketDir &&
|
||||||
|
IsBearish(analyseMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Decision ...
|
||||||
|
ENUM_X_DIRECTION decisionMarketDir;
|
||||||
|
bool hasDecisionMarketDir = decisionCycleHelper
|
||||||
|
.DetectMarketStructure(decisionMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasDecisionBullishTrend =
|
||||||
|
hasDecisionMarketDir &&
|
||||||
|
IsBullish(decisionMarketDir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasDecisionBearishTrend =
|
||||||
|
hasDecisionMarketDir &&
|
||||||
|
IsBearish(decisionMarketDir);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect Bar State ...
|
// Detect Bar State ...
|
||||||
@@ -515,40 +575,75 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
// Detect Price Zone ...
|
// Detect Price Zone ...
|
||||||
|
|
||||||
//
|
//
|
||||||
double pzPeak = decisionConditions.x121Conditions.peaksBuffer[1];
|
double pzPeak = decisionXConditions.peaksBuffer[1];
|
||||||
double pzVale = decisionConditions.x121Conditions.valesBuffer[1];
|
double pzVale = decisionXConditions.valesBuffer[1];
|
||||||
|
|
||||||
//
|
//
|
||||||
XPriceZones priceZones;
|
// Detecting Analyse Price ones ...
|
||||||
bool hasPriceZones = CalculatePriceInsideZones(
|
XPriceZones analysePriceZone;
|
||||||
priceZones,
|
bool hasAnalysePriceZone = CalculatePriceInsideZones(
|
||||||
|
analysePriceZone,
|
||||||
analyseState,
|
analyseState,
|
||||||
cBar //
|
cBar //
|
||||||
);
|
);
|
||||||
double priceZonesUpper = 0;
|
double analysePriceZoneUpper = 0;
|
||||||
double priceZonesLower = 0;
|
double analysePriceZoneLower = 0;
|
||||||
bool isPriceZoneValidForPeak = false;
|
bool isAnalysePriceZoneValidForPeak = false;
|
||||||
bool isPriceZoneValidForVale = false;
|
bool isAnalysePriceZoneValidForVale = false;
|
||||||
if (hasPriceZones)
|
if (hasAnalysePriceZone)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool hasBoundary = priceZones.GetBoundary(
|
bool hasBoundary = analysePriceZone.GetBoundary(
|
||||||
X_DIRECTION_ALL,
|
X_DIRECTION_ALL,
|
||||||
priceZonesUpper,
|
analysePriceZoneUpper,
|
||||||
priceZonesLower //
|
analysePriceZoneLower //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
isPriceZoneValidForPeak =
|
isAnalysePriceZoneValidForPeak =
|
||||||
hasBoundary &&
|
hasBoundary &&
|
||||||
pzPeak <= priceZonesUpper &&
|
pzPeak <= analysePriceZoneUpper &&
|
||||||
pzPeak >= priceZonesLower;
|
pzPeak >= analysePriceZoneLower;
|
||||||
|
|
||||||
//
|
//
|
||||||
isPriceZoneValidForVale =
|
isAnalysePriceZoneValidForVale =
|
||||||
hasBoundary &&
|
hasBoundary &&
|
||||||
pzVale <= priceZonesUpper &&
|
pzVale <= analysePriceZoneUpper &&
|
||||||
pzVale >= priceZonesLower;
|
pzVale >= analysePriceZoneLower;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detecting Verification Price ones ...
|
||||||
|
XPriceZones verificationPriceZone;
|
||||||
|
bool hasVerificationPriceZone = CalculatePriceInsideZones(
|
||||||
|
verificationPriceZone,
|
||||||
|
verificationState,
|
||||||
|
cBar //
|
||||||
|
);
|
||||||
|
double verificationPriceZoneUpper = 0;
|
||||||
|
double verificationPriceZoneLower = 0;
|
||||||
|
bool isVerificationPriceZoneValidForPeak = false;
|
||||||
|
bool isVerificationPriceZoneValidForVale = false;
|
||||||
|
if (hasVerificationPriceZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool hasBoundary = verificationPriceZone.GetBoundary(
|
||||||
|
X_DIRECTION_ALL,
|
||||||
|
verificationPriceZoneUpper,
|
||||||
|
verificationPriceZoneLower //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
isVerificationPriceZoneValidForPeak =
|
||||||
|
hasBoundary &&
|
||||||
|
pzPeak <= verificationPriceZoneUpper &&
|
||||||
|
pzPeak >= verificationPriceZoneLower;
|
||||||
|
|
||||||
|
//
|
||||||
|
isVerificationPriceZoneValidForVale =
|
||||||
|
hasBoundary &&
|
||||||
|
pzVale <= verificationPriceZoneUpper &&
|
||||||
|
pzVale >= verificationPriceZoneLower;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -559,75 +654,363 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
// Summarize Conditions ...
|
// Summarize Conditions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
isBullish =
|
// Decision Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isDecisionBullish =
|
||||||
//
|
//
|
||||||
// Other Time Frames ...
|
hasAnalysePriceZone &&
|
||||||
//
|
analysePriceZone.IsBullish() &&
|
||||||
// Consolidation ...
|
isAnalysePriceZoneValidForVale &&
|
||||||
(consolidationXConditions.isCheBullish &&
|
|
||||||
consolidationXConditions.isStrBullish &&
|
|
||||||
consolidationXConditions.isSarBullish &&
|
|
||||||
consolidationXConditions.isClosedOverVWapMax) &&
|
|
||||||
//
|
|
||||||
// Analyse ...
|
|
||||||
(analyseXConditions.isCheBullish &&
|
|
||||||
analyseXConditions.isStrBullish &&
|
|
||||||
analyseXConditions.isSarBullish &&
|
|
||||||
analyseXConditions.isClosedOverVWapMax) &&
|
|
||||||
//
|
//
|
||||||
// Decision ...
|
// Decision ...
|
||||||
hasBullishTrend &&
|
hasVerificationBullishTrend &&
|
||||||
|
hasAnalyseBullishTrend &&
|
||||||
|
hasDecisionBullishTrend &&
|
||||||
|
decisionXConditions.isBreakedDownPrevAtrUpper &&
|
||||||
(
|
(
|
||||||
//
|
//
|
||||||
((decisionXConditions.isStrSwitchedToBullish &&
|
((decisionXConditions.isSarBullish &&
|
||||||
decisionXConditions.isCheBullish &&
|
decisionXConditions.isCheBullish &&
|
||||||
decisionXConditions.isSarBullish) ||
|
decisionXConditions.isBreakedUpPrevStr &&
|
||||||
(decisionXConditions.isCheSwitchedToBullish &&
|
decisionXConditions.isStrSwitchedToBullish) ||
|
||||||
|
(decisionXConditions.isStrBullish &&
|
||||||
decisionXConditions.isSarBullish &&
|
decisionXConditions.isSarBullish &&
|
||||||
decisionXConditions.isStrBullish) ||
|
decisionXConditions.isBreakedUpPrevCheMax &&
|
||||||
(decisionXConditions.isSarSwitchedToBullish &&
|
decisionXConditions.isCheSwitchedToBullish) ||
|
||||||
|
(decisionXConditions.isStrBullish &&
|
||||||
decisionXConditions.isCheBullish &&
|
decisionXConditions.isCheBullish &&
|
||||||
decisionXConditions.isStrBullish))
|
decisionXConditions.isBreakedUpPrevSar &&
|
||||||
|
decisionXConditions.isSarSwitchedToBullish))
|
||||||
//
|
//
|
||||||
)
|
)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
isBearish =
|
bool isDecisionBearish =
|
||||||
//
|
//
|
||||||
// Other Time Frames ...
|
hasAnalysePriceZone &&
|
||||||
//
|
analysePriceZone.IsBearish() &&
|
||||||
// Consolidation ...
|
isAnalysePriceZoneValidForPeak &&
|
||||||
(consolidationXConditions.isCheBearish &&
|
|
||||||
consolidationXConditions.isStrBearish &&
|
|
||||||
consolidationXConditions.isSarBearish &&
|
|
||||||
consolidationXConditions.isClosedUnderVWapMax) &&
|
|
||||||
//
|
|
||||||
// Analyse ...
|
|
||||||
(analyseXConditions.isCheBearish &&
|
|
||||||
analyseXConditions.isStrBearish &&
|
|
||||||
analyseXConditions.isSarBearish &&
|
|
||||||
analyseXConditions.isClosedUnderVWapMax) &&
|
|
||||||
//
|
//
|
||||||
// Decision ...
|
// Decision ...
|
||||||
hasBearishTrend &&
|
hasVerificationBearishTrend &&
|
||||||
|
hasAnalyseBearishTrend &&
|
||||||
|
hasDecisionBearishTrend &&
|
||||||
|
decisionXConditions.isBreakedDownPrevAtrLower &&
|
||||||
(
|
(
|
||||||
//
|
//
|
||||||
((decisionXConditions.isStrSwitchedToBearish &&
|
((decisionXConditions.isSarBearish &&
|
||||||
decisionXConditions.isCheBearish &&
|
decisionXConditions.isCheBearish &&
|
||||||
decisionXConditions.isSarBearish) ||
|
decisionXConditions.isBreakedDownPrevStr &&
|
||||||
(decisionXConditions.isCheSwitchedToBearish &&
|
decisionXConditions.isStrSwitchedToBearish) ||
|
||||||
|
(decisionXConditions.isStrBearish &&
|
||||||
decisionXConditions.isSarBearish &&
|
decisionXConditions.isSarBearish &&
|
||||||
decisionXConditions.isStrBearish) ||
|
decisionXConditions.isCheSwitchedToBearish &&
|
||||||
(decisionXConditions.isSarSwitchedToBearish &&
|
decisionXConditions.isBreakedDownPrevCheMin) ||
|
||||||
|
(decisionXConditions.isStrBearish &&
|
||||||
decisionXConditions.isCheBearish &&
|
decisionXConditions.isCheBearish &&
|
||||||
decisionXConditions.isStrBearish))
|
decisionXConditions.isBreakedDownPrevSar &&
|
||||||
|
decisionXConditions.isSarSwitchedToBearish))
|
||||||
//
|
//
|
||||||
)
|
)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasDecisionCondition = isDecisionBullish ||
|
||||||
|
isDecisionBearish;
|
||||||
|
if (hasDecisionCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
conditions.priceZone = analysePriceZone;
|
||||||
|
conditions.isPriceZoneValidForPeak = isAnalysePriceZoneValidForPeak;
|
||||||
|
conditions.isPriceZoneValidForVale = isAnalysePriceZoneValidForVale;
|
||||||
|
|
||||||
|
//
|
||||||
|
pzPeak = analysePriceZoneUpper;
|
||||||
|
pzVale = analysePriceZoneLower;
|
||||||
|
|
||||||
|
//
|
||||||
|
double point = GetEntry(
|
||||||
|
conditions.symbol,
|
||||||
|
conditions.dir //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Point ...
|
||||||
|
|
||||||
|
//
|
||||||
|
point =
|
||||||
|
isDecisionBullish ? pzPeak
|
||||||
|
: pzVale;
|
||||||
|
conditions.point = point;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Pivot ...
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.pivot =
|
||||||
|
isDecisionBullish
|
||||||
|
? pzVale
|
||||||
|
: pzPeak;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyse Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isAnalyseBullish =
|
||||||
|
//
|
||||||
|
!hasDecisionCondition &&
|
||||||
|
//
|
||||||
|
hasVerificationPriceZone &&
|
||||||
|
verificationPriceZone.IsBullish() &&
|
||||||
|
isVerificationPriceZoneValidForVale &&
|
||||||
|
//
|
||||||
|
hasConsolidationBullishTrend &&
|
||||||
|
hasVerificationBullishTrend &&
|
||||||
|
hasAnalyseBullishTrend &&
|
||||||
|
analyseXConditions.isBreakedDownPrevAtrUpper &&
|
||||||
|
//
|
||||||
|
(
|
||||||
|
//
|
||||||
|
((analyseXConditions.isSarBullish &&
|
||||||
|
analyseXConditions.isCheBullish &&
|
||||||
|
analyseXConditions.isBreakedUpPrevStr &&
|
||||||
|
analyseXConditions.isStrSwitchedToBullish) ||
|
||||||
|
(analyseXConditions.isStrBullish &&
|
||||||
|
analyseXConditions.isSarBullish &&
|
||||||
|
analyseXConditions.isBreakedUpPrevCheMax &&
|
||||||
|
analyseXConditions.isCheSwitchedToBullish) ||
|
||||||
|
(analyseXConditions.isStrBullish &&
|
||||||
|
analyseXConditions.isCheBullish &&
|
||||||
|
analyseXConditions.isBreakedUpPrevSar &&
|
||||||
|
analyseXConditions.isSarSwitchedToBullish))
|
||||||
|
//
|
||||||
|
)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isAnalyseBearish =
|
||||||
|
//
|
||||||
|
!hasDecisionCondition &&
|
||||||
|
//
|
||||||
|
hasVerificationPriceZone &&
|
||||||
|
verificationPriceZone.IsBearish() &&
|
||||||
|
isVerificationPriceZoneValidForPeak &&
|
||||||
|
//
|
||||||
|
hasConsolidationBearishTrend &&
|
||||||
|
hasVerificationBearishTrend &&
|
||||||
|
hasAnalyseBearishTrend &&
|
||||||
|
analyseXConditions.isBreakedDownPrevAtrLower &&
|
||||||
|
//
|
||||||
|
(
|
||||||
|
//
|
||||||
|
((analyseXConditions.isSarBearish &&
|
||||||
|
analyseXConditions.isCheBearish &&
|
||||||
|
analyseXConditions.isBreakedDownPrevStr &&
|
||||||
|
analyseXConditions.isStrSwitchedToBearish) ||
|
||||||
|
(analyseXConditions.isStrBearish &&
|
||||||
|
analyseXConditions.isSarBearish &&
|
||||||
|
analyseXConditions.isCheSwitchedToBearish &&
|
||||||
|
analyseXConditions.isBreakedDownPrevCheMin) ||
|
||||||
|
(analyseXConditions.isStrBearish &&
|
||||||
|
analyseXConditions.isCheBearish &&
|
||||||
|
analyseXConditions.isBreakedDownPrevSar &&
|
||||||
|
analyseXConditions.isSarSwitchedToBearish))
|
||||||
|
//
|
||||||
|
)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasAnalyseCondition = isAnalyseBullish ||
|
||||||
|
isAnalyseBearish;
|
||||||
|
if (hasAnalyseCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
conditions.priceZone = analysePriceZone;
|
||||||
|
conditions.isPriceZoneValidForPeak = isVerificationPriceZoneValidForPeak;
|
||||||
|
conditions.isPriceZoneValidForVale = isVerificationPriceZoneValidForVale;
|
||||||
|
|
||||||
|
//
|
||||||
|
pzPeak = analysePriceZoneUpper;
|
||||||
|
pzVale = analysePriceZoneLower;
|
||||||
|
|
||||||
|
//
|
||||||
|
double point = GetEntry(
|
||||||
|
conditions.symbol,
|
||||||
|
conditions.dir //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Point ...
|
||||||
|
|
||||||
|
//
|
||||||
|
point =
|
||||||
|
isAnalyseBullish ? pzPeak
|
||||||
|
: pzVale;
|
||||||
|
conditions.point = point;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Pivot ...
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.pivot =
|
||||||
|
isAnalyseBullish
|
||||||
|
? pzVale
|
||||||
|
: pzPeak;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
double decisionPVMiddle = decisionXConditions.valesBuffer[1] +
|
||||||
|
(decisionXConditions.peaksBuffer[1] - decisionXConditions.valesBuffer[1]) / 2;
|
||||||
|
bool isInDecisionPremium =
|
||||||
|
//
|
||||||
|
ask > decisionPVMiddle &&
|
||||||
|
bid > decisionPVMiddle &&
|
||||||
|
//
|
||||||
|
ask < decisionXConditions.peaksBuffer[1] &&
|
||||||
|
bid < decisionXConditions.peaksBuffer[1]
|
||||||
|
//
|
||||||
|
;
|
||||||
|
bool isInDecisionDiscount =
|
||||||
|
//
|
||||||
|
ask < decisionPVMiddle &&
|
||||||
|
bid < decisionPVMiddle &&
|
||||||
|
//
|
||||||
|
ask < decisionXConditions.valesBuffer[1] &&
|
||||||
|
bid < decisionXConditions.valesBuffer[1]
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPriceZoneBullish =
|
||||||
|
//
|
||||||
|
!hasDecisionCondition &&
|
||||||
|
!hasAnalyseCondition &&
|
||||||
|
//
|
||||||
|
hasVerificationBullishTrend &&
|
||||||
|
hasAnalyseBullishTrend &&
|
||||||
|
hasDecisionBullishTrend &&
|
||||||
|
//
|
||||||
|
hasAnalysePriceZone &&
|
||||||
|
analysePriceZone.IsBullish() &&
|
||||||
|
isAnalysePriceZoneValidForVale &&
|
||||||
|
//
|
||||||
|
isCBarBullishFormed &&
|
||||||
|
isInDecisionDiscount &&
|
||||||
|
decisionXConditions.isAtrLowerUnderVale &&
|
||||||
|
decisionXConditions.isAtrLowerSlopeBullish &&
|
||||||
|
true
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPriceZoneBearish =
|
||||||
|
//
|
||||||
|
!hasDecisionCondition &&
|
||||||
|
!hasAnalyseCondition &&
|
||||||
|
//
|
||||||
|
hasVerificationBearishTrend &&
|
||||||
|
hasAnalyseBearishTrend &&
|
||||||
|
hasDecisionBearishTrend &&
|
||||||
|
//
|
||||||
|
hasAnalysePriceZone &&
|
||||||
|
analysePriceZone.IsBearish() &&
|
||||||
|
isAnalysePriceZoneValidForPeak &&
|
||||||
|
//
|
||||||
|
isInDecisionPremium &&
|
||||||
|
isCBarBearishFormed &&
|
||||||
|
decisionXConditions.isAtrUpperOverPeak &&
|
||||||
|
decisionXConditions.isAtrUpperSlopeBearish &&
|
||||||
|
true
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasPriceZoneCondition = isPriceZoneBullish ||
|
||||||
|
isPriceZoneBearish;
|
||||||
|
if (hasPriceZoneCondition)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION pzDir =
|
||||||
|
isPriceZoneBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCBaseObject *drawnObjects[];
|
||||||
|
// int drawnObjectsCount = triggerCycleHelper
|
||||||
|
// .mPOIDetector
|
||||||
|
// .mDrawer
|
||||||
|
// .DrawPriceZone(
|
||||||
|
// analysePriceZone,
|
||||||
|
// drawnObjects,
|
||||||
|
// pzDir //
|
||||||
|
// );
|
||||||
|
// if (IsValidSize(drawnObjectsCount))
|
||||||
|
// {
|
||||||
|
// Print("DIR: " + EnumToString(pzDir));
|
||||||
|
// }
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.priceZone = analysePriceZone;
|
||||||
|
conditions.isPriceZoneValidForPeak = isAnalysePriceZoneValidForPeak;
|
||||||
|
conditions.isPriceZoneValidForVale = isAnalysePriceZoneValidForVale;
|
||||||
|
|
||||||
|
//
|
||||||
|
pzPeak = analysePriceZoneUpper;
|
||||||
|
pzVale = analysePriceZoneLower;
|
||||||
|
|
||||||
|
//
|
||||||
|
double point = GetEntry(
|
||||||
|
conditions.symbol,
|
||||||
|
conditions.dir //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Point ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// point =
|
||||||
|
// isPriceZoneBullish ? pzPeak
|
||||||
|
// : pzVale;
|
||||||
|
conditions.point = point;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manipulate Conditions Pivot ...
|
||||||
|
|
||||||
|
//
|
||||||
|
conditions.pivot =
|
||||||
|
isPriceZoneBullish
|
||||||
|
? pzVale
|
||||||
|
: pzPeak;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
isAnalyseBullish ||
|
||||||
|
isDecisionBullish ||
|
||||||
|
isPriceZoneBullish;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
isAnalyseBearish ||
|
||||||
|
isDecisionBearish ||
|
||||||
|
isPriceZoneBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = isBullish ||
|
result = isBullish ||
|
||||||
isBearish;
|
isBearish;
|
||||||
@@ -637,23 +1020,12 @@ bool DetectX121SMCXSTRPVSiganlSetup(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
conditions.pivot =
|
|
||||||
isBullish
|
|
||||||
? pzVale
|
|
||||||
: pzPeak;
|
|
||||||
conditions.setupTime = cTime;
|
conditions.setupTime = cTime;
|
||||||
conditions.dir =
|
conditions.dir =
|
||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
//
|
|
||||||
double point = GetEntry(
|
|
||||||
conditions.symbol,
|
|
||||||
conditions.dir //
|
|
||||||
);
|
|
||||||
conditions.point = point;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -970,7 +1342,7 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
|
|
||||||
//
|
//
|
||||||
double point = conditions.point;
|
double point = conditions.point;
|
||||||
bool isPointBreak = IsBarBreak(
|
bool isPointBreaked = IsBarBreak(
|
||||||
point,
|
point,
|
||||||
setupDir,
|
setupDir,
|
||||||
cBar //
|
cBar //
|
||||||
@@ -983,7 +1355,7 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
isBullish =
|
isBullish =
|
||||||
//
|
//
|
||||||
isBullish &&
|
isBullish &&
|
||||||
isPointBreak &&
|
isPointBreaked &&
|
||||||
isSlopesBullish &&
|
isSlopesBullish &&
|
||||||
cBar.IsBullish()
|
cBar.IsBullish()
|
||||||
//
|
//
|
||||||
@@ -993,7 +1365,7 @@ bool DetectX121SMCXSTRPVSiganlTrigger(
|
|||||||
isBearish =
|
isBearish =
|
||||||
//
|
//
|
||||||
isBearish &&
|
isBearish &&
|
||||||
isPointBreak &&
|
isPointBreaked &&
|
||||||
isSlopesBearish &&
|
isSlopesBearish &&
|
||||||
cBar.IsBearish()
|
cBar.IsBearish()
|
||||||
//
|
//
|
||||||
@@ -1392,3 +1764,48 @@ int AddX121SMCXSTRPVConditionsIfNotExists(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
int DrawX121SMCXSTRPVConditions(
|
||||||
|
X121SMCStrategyXSTRPVSignalConditions &conditions,
|
||||||
|
XCBaseObject *&drawnObjects[],
|
||||||
|
XCPOIDrawer *drawer //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(drawnObjects);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (drawer == NULL)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSetuped = conditions.IsSetuped();
|
||||||
|
if (!isSetuped)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasPriceZone = conditions.priceZone.IsValid();
|
||||||
|
if (!hasPriceZone)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int zonesObjCount = drawer.DrawPriceZone(
|
||||||
|
conditions.priceZone,
|
||||||
|
drawnObjects,
|
||||||
|
conditions.dir //
|
||||||
|
);
|
||||||
|
result = zonesObjCount;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|||||||
@@ -1184,6 +1184,14 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
1 //
|
1 //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBaseObject *objects[];
|
||||||
|
DrawX121SMCXSTRPVConditions(
|
||||||
|
mConditions,
|
||||||
|
objects,
|
||||||
|
mPOIDrawer //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Signal Direction ...
|
// Check Signal Direction ...
|
||||||
isBullish = IsBullish(mConditions.dir);
|
isBullish = IsBullish(mConditions.dir);
|
||||||
@@ -1261,7 +1269,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
bool showAll = false;
|
bool showAll = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
x121Inputs.showRSI = true;
|
x121Inputs.showRSI = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isInited = false;
|
bool isInited = false;
|
||||||
@@ -1297,10 +1305,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// XCHE ...
|
// XCHE ...
|
||||||
x121Inputs.xcheInputs.showLE1 = showAll || true;
|
x121Inputs.xcheInputs.showLE1 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showLE2 = showAll || true;
|
x121Inputs.xcheInputs.showLE2 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showSE1 = showAll || true;
|
x121Inputs.xcheInputs.showSE1 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showSE2 = showAll || true;
|
x121Inputs.xcheInputs.showSE2 = showAll || false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XDON ...
|
// XDON ...
|
||||||
|
|||||||
Reference in New Issue
Block a user