286 lines
7.8 KiB
Plaintext
286 lines
7.8 KiB
Plaintext
|
|
//
|
|
// Reading Previous Conditions ...
|
|
ENUM_XPOI_EVENTS consolidationPoiEventsPrev[];
|
|
ENUM_X_CYCLE_EVENTS consolidationCycleEventsPrev[];
|
|
X121SMCCycleConditions consolidationConditionsPrev;
|
|
result = consolidationCycleHelper.GetConditions(
|
|
consolidationCycleEventsPrev,
|
|
consolidationPoiEventsPrev,
|
|
consolidationConditionsPrev,
|
|
cIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
X121SMCCycleConditions conditionState = consolidationConditions;
|
|
X121SMCCycleConditions conditionStatePrev = consolidationConditionsPrev;
|
|
|
|
//
|
|
XOHCL cCBar;
|
|
result = cCBar.Init(
|
|
conditionState.symbol,
|
|
conditionState.period,
|
|
cIndex //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
XOHCL cPBar;
|
|
result = cCBar.GetPreviousBar(cPBar);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Engulf ...
|
|
ENUM_X_DIRECTION cCBarEngulfDir;
|
|
bool isCCBarEngulfed = consolidationCycleHelper
|
|
.mBarAnalyser
|
|
.IsEngulfBar(
|
|
cCBar,
|
|
cCBarEngulfDir,
|
|
0 // Extended ...
|
|
);
|
|
bool isCCBarBullishEngulfed =
|
|
isCCBarEngulfed &&
|
|
IsBullish(cCBarEngulfDir);
|
|
bool isCCBarBearishEngulfed =
|
|
isCCBarEngulfed &&
|
|
IsBearish(cCBarEngulfDir);
|
|
|
|
//
|
|
// Momentum ...
|
|
ENUM_X_DIRECTION cCBarMomentumDir;
|
|
bool isCCBarMomentum = consolidationCycleHelper
|
|
.mBarAnalyser
|
|
.IsMomentumBar(
|
|
cCBar,
|
|
cCBarMomentumDir,
|
|
1 // Extended ...
|
|
);
|
|
bool isCCBarBullishMomentum =
|
|
isCCBarMomentum &&
|
|
IsBullish(cCBarMomentumDir);
|
|
bool isCCBarBearishMomentum =
|
|
isCCBarMomentum &&
|
|
IsBearish(cCBarMomentumDir);
|
|
|
|
//
|
|
// Reject ...
|
|
ENUM_X_DIRECTION cCBarRejectDir;
|
|
bool isCCBarRejected = consolidationCycleHelper
|
|
.mBarAnalyser
|
|
.IsRejectionBar(
|
|
cCBar,
|
|
cCBarRejectDir,
|
|
1 // Extended ...
|
|
);
|
|
bool isCCBarBullishRejected =
|
|
isCCBarRejected &&
|
|
IsBullish(cCBarRejectDir);
|
|
bool isCCBarBearishRejected =
|
|
isCCBarRejected &&
|
|
IsBearish(cCBarRejectDir);
|
|
|
|
//
|
|
// Bar Checking Summary ...
|
|
|
|
//
|
|
// Bullish ...
|
|
bool isCCBarPassedBullish =
|
|
//
|
|
isCCBarBullishEngulfed ||
|
|
isCCBarBullishMomentum ||
|
|
isCCBarBullishRejected
|
|
//
|
|
;
|
|
|
|
//
|
|
// Bearish ...
|
|
bool isCCBarPassedBearish =
|
|
//
|
|
isCCBarBearishEngulfed ||
|
|
isCCBarBearishMomentum ||
|
|
isCCBarBearishRejected
|
|
//
|
|
;
|
|
|
|
//
|
|
double cPeakPrev = conditionStatePrev.x121Conditions.peaksBuffer[0];
|
|
double cValePrev = conditionStatePrev.x121Conditions.valesBuffer[0];
|
|
|
|
//
|
|
double cPeak = conditionState.x121Conditions.peaksBuffer[1];
|
|
double cVale = conditionState.x121Conditions.valesBuffer[1];
|
|
|
|
//
|
|
bool isCPeakSame = cPeak == cPeakPrev;
|
|
bool isCValeSame = cVale == cValePrev;
|
|
|
|
//
|
|
bool isCNewPeakPrev = conditionStatePrev.x121Conditions.isNewPeak;
|
|
bool isCNewPeakOverLastPrev = conditionStatePrev.x121Conditions.isNewPeakOverLast;
|
|
bool isCNewPeakUnderLastPrev = conditionStatePrev.x121Conditions.isNewPeakUnderLast;
|
|
|
|
//
|
|
bool isCNewValePrev = conditionStatePrev.x121Conditions.isNewVale;
|
|
bool isCNewValeOverLastPrev = conditionStatePrev.x121Conditions.isNewValeOverLast;
|
|
bool isCNewValeUnderLastPrev = conditionStatePrev.x121Conditions.isNewValeUnderLast;
|
|
|
|
//
|
|
bool isCRSIOverSold = conditionState.x121Conditions.isRSIOverSold;
|
|
bool isCRSICrossedOverOverSold = conditionState.x121Conditions.isRSICrossedOverOverSold;
|
|
bool isCRSICrossedUnderOverSold = conditionState.x121Conditions.isRSICrossedUnderOverSold;
|
|
|
|
//
|
|
bool isCRSIOverBought = conditionState.x121Conditions.isRSIOverBought;
|
|
bool isCRSICrossedOverOverBought = conditionState.x121Conditions.isRSICrossedOverOverBought;
|
|
bool isCRSICrossedUnderOverBought = conditionState.x121Conditions.isRSICrossedUnderOverBought;
|
|
|
|
//
|
|
bool isCRSIOverSoldPrev = conditionStatePrev.x121Conditions.isRSIOverSold;
|
|
bool isCRSICrossedOverOverSoldPrev = conditionStatePrev.x121Conditions.isRSICrossedOverOverSold;
|
|
bool isCRSICrossedUnderOverSoldPrev = conditionStatePrev.x121Conditions.isRSICrossedUnderOverSold;
|
|
|
|
//
|
|
bool isCRSIOverBoughtPrev = conditionStatePrev.x121Conditions.isRSIOverBought;
|
|
bool isCRSICrossedOverOverBoughtPrev = conditionStatePrev.x121Conditions.isRSICrossedOverOverBought;
|
|
bool isCRSICrossedUnderOverBoughtPrev = conditionStatePrev.x121Conditions.isRSICrossedUnderOverBought;
|
|
|
|
//
|
|
isBullish =
|
|
//
|
|
isCNewValePrev &&
|
|
isCCBarPassedBullish
|
|
//
|
|
;
|
|
|
|
//
|
|
isBearish =
|
|
//
|
|
isCNewPeakPrev &&
|
|
isCCBarPassedBearish
|
|
//
|
|
;
|
|
|
|
//
|
|
result = isBullish ||
|
|
isBearish;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
conditions.pivot =
|
|
isBullish
|
|
? conditionState.x121Conditions.valesBuffer[1]
|
|
: conditionState.x121Conditions.peaksBuffer[1];
|
|
|
|
//
|
|
double peak = analyseConditions.x121Conditions.peaksBuffer[1];
|
|
double vale = analyseConditions.x121Conditions.valesBuffer[1];
|
|
|
|
//
|
|
double strUpper = analyseConditions.x121Conditions.strUpBuffer[1];
|
|
double strLower = analyseConditions.x121Conditions.strDownBuffer[1];
|
|
|
|
//
|
|
bool isStrSwitchedToBullish = analyseConditions.x121Conditions.isStrSwitchedToBullish;
|
|
bool isStrSwitchedToBearish = analyseConditions.x121Conditions.isStrSwitchedToBearish;
|
|
|
|
//
|
|
isBullish = isStrSwitchedToBullish;
|
|
isBearish = isStrSwitchedToBearish;
|
|
|
|
//
|
|
result = isBullish ||
|
|
isBearish;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
conditions.pivot =
|
|
isBullish
|
|
? peak
|
|
: vale;
|
|
|
|
|
|
|
|
//
|
|
// Looking For Sar Change ...
|
|
|
|
//
|
|
double sar = analyseConditions.x121Conditions.sarBuffer[1];
|
|
|
|
//
|
|
double peak = analyseConditions.x121Conditions.peaksBuffer[1];
|
|
double vale = analyseConditions.x121Conditions.valesBuffer[1];
|
|
|
|
//
|
|
bool isSarEqualsToPeak = analyseConditions.x121Conditions.isSarEqualsToPeak;
|
|
bool isSarEqualsToVale = analyseConditions.x121Conditions.isSarEqualsToVale;
|
|
|
|
//
|
|
bool isSarSwitchedToBullish = analyseConditions.x121Conditions.isSarSwitchedToBullish;
|
|
bool isSarSwitchedToBearish = analyseConditions.x121Conditions.isSarSwitchedToBearish;
|
|
|
|
//
|
|
isBullish =
|
|
isBullish &&
|
|
isSarEqualsToPeak &&
|
|
isSarSwitchedToBullish;
|
|
|
|
//
|
|
isBearish =
|
|
isBearish &&
|
|
isSarEqualsToVale &&
|
|
isSarSwitchedToBearish;
|
|
|
|
//
|
|
result = isBullish ||
|
|
isBearish;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
Print("Sar Switched ...");
|
|
|
|
|
|
|
|
//
|
|
// Detect a Zone Arround Price Zone ...
|
|
int supplyZonesCount = consolidationState.CountSupplyZones();
|
|
if (IsValidSize(supplyZonesCount)) {
|
|
//
|
|
for (int i = 0; i < supplyZonesCount; i++) {
|
|
//
|
|
XCSupplyZone *iZone = consolidationState.supplyZones[i];
|
|
|
|
//
|
|
bool isOver = iZone.Lower() > pzUpper;
|
|
bool isUnder = iZone.Upper() < pzLower;
|
|
|
|
//
|
|
bool isValid =
|
|
isOver ||
|
|
isUnder;
|
|
if (isValid) {
|
|
|
|
}
|
|
}
|
|
}
|