This commit is contained in:
2025-02-20 19:08:50 +03:30
parent 195276c221
commit 627e9c4706
4 changed files with 733 additions and 57 deletions
+453 -50
View File
@@ -169,8 +169,16 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
@@ -190,8 +198,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
@@ -211,8 +232,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
@@ -232,8 +269,27 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
if (!result)
{
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
@@ -257,6 +313,195 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Setup Conditions ...
//
// Choch Trading Senario ...
bool hasChochBullishConditions = false;
bool hasChochBearishConditions = false;
//
// Order Flow Side Trading Senario ...
bool hasOrderFlowhBullishConditions = false;
bool hasOrderFlowhBearishConditions = false;
//
// Trend Line Trading Senario ...
bool hasTrendLineBullishConditions = false;
bool hasTrendLineBearishConditions = false;
//
// Quarter Line Trading Senario ...
bool hasBQuarterLineBullishConditions = false;
bool hasBQuarterLineBearishConditions = false;
//
// Supply and Demand Trading Senario ...
bool hasSupDemBullishConditions = false;
bool hasSupDemBearishConditions = false;
//
// Support and Resistance Trading Senario ...
bool hasSupResBullishConditions = false;
bool hasSupResBearishConditions = false;
//
// Detect Working Zone ...
bool hasWorkingZone = workingZone.IsValid();
if (!hasWorkingZone)
{
hasWorkingZone = DetectWorkingZone(visionState);
}
result = hasWorkingZone;
if (!result)
{
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// TODO: Remove this ...
UpdateTo(cTime);
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
//
// Detect Working Zone Destroy ...
bool isWorkingZoneDetroyed = workingZone.IsDestroyed();
result = !isWorkingZoneDetroyed;
if (!result)
{
//
workingZone.Clean();
mWorkingZoneObjects.Clear();
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Checking Target Zone Breaked ...
bool hasTargetZone = targetZone.IsValid();
if (hasTargetZone)
{
//
XOHCL bar;
bool isInited = bar.Init(
symbol,
period,
zIndex //
);
XOHCL cBar;
isInited =
isInited &&
bar.GetPreviousBar(cBar);
//
bool isBullish = targetZone.IsBullish();
//
bool isLowerBreaked =
//
bar.high < targetZone.ob.Lower() &&
cBar.high < targetZone.ob.Lower()
//
;
//
bool isUpperBreaked =
//
bar.low > targetZone.ob.Upper() &&
cBar.low > targetZone.ob.Upper()
//
;
//
bool isBreaked = isBullish
? isLowerBreaked
: isUpperBreaked;
if (isBreaked)
{
//
mWorkingZoneObjects.Clear();
targetZone.Clean();
//
// TODO: Remove this ...
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
}
}
//
// Detect Order Flow ...
ENUM_X_DIRECTION trend = X_DIRECTION_NONE;
bool hasOrderFlow = workingZone.HasOrderFlow(trend);
if (!hasOrderFlow)
@@ -273,18 +518,55 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
hasOrderFlow = IsValidSize(orderFlowCount);
}
//
result = hasOrderFlow;
if (!result)
{
//
// TODO: Implement Clean ...
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// TODO: Remove this ...
UpdateTo(cTime);
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
//
isBullish = IsBullish(trend);
isBearish = IsBearish(trend);
@@ -305,24 +587,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
amountPercent //
);
//
// Has Order Flow ...
UpdateTo(cTime);
//
// TODO: Remove this ...
//
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
//
DrawConditions(
mConditions,
visionCycleHelper.mPOIDrawer //
);
//
// Checking Order Flow Break ...
int breakedIDX = -1;
@@ -364,7 +628,38 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (!result)
{
//
// TODO: Implement Clean ...
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
@@ -438,6 +733,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
{
//
// TODO: Implement Order Flow Side Trading Senario ...
youngestOrderFlow
.UpdateZones(decisionState);
}
//
@@ -809,13 +1107,31 @@ class XCX121SMCXWZSignalDetector : public XCBase
// TODO: Implement Support and Resistance Trading Senario ...
//
// TODO: these are Trends ...
isBullish = false;
isBearish = false;
// Summarize ...
//
bool hasBullishConditions = false;
bool hasBearishConditions = false;
bool hasBullishConditions =
//
hasChochBullishConditions ||
hasSupDemBullishConditions ||
hasSupResBullishConditions ||
hasTrendLineBullishConditions ||
hasOrderFlowhBullishConditions ||
hasBQuarterLineBullishConditions
//
;
//
bool hasBearishConditions =
//
hasChochBearishConditions ||
hasSupDemBearishConditions ||
hasSupResBearishConditions ||
hasTrendLineBearishConditions ||
hasOrderFlowhBearishConditions ||
hasBQuarterLineBearishConditions
//
;
//
result =
@@ -823,52 +1139,56 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasBearishConditions;
//
// TODO: Implement All Cleanups ...
if (result)
{
//
mConditions.dir = trend;
mConditions.pivot = pivot;
mConditions.point = point;
mConditions.reward = reward;
mConditions.target = target;
mConditions.setupTime = cTime;
mConditions.priority = priority;
mConditions.amountPercent = amountPercent;
}
//
return result;
//
// Summarise Conditions ...
//
//
mConditions.dir = trend;
mConditions.pivot = pivot;
mConditions.point = point;
mConditions.reward = reward;
mConditions.target = target;
mConditions.setupTime = cTime;
mConditions.priority = priority;
mConditions.amountPercent = amountPercent;
//
mConditions.UpdateTo(cTime);
// Cleanups ...
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
visionXConditions.Clean();
consolidationState.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationConditions.Clean();
consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
@@ -1891,6 +2211,89 @@ class XCX121SMCXWZSignalDetector : public XCBase
return result;
}
//
bool DetectWorkingZone(
XPOIState &ltfState //
)
{
//
bool result = false;
//
result = IsValid(symbol) &&
IsValid(period);
if (!result)
{
return result;
}
//
result = !workingZone.IsValid();
if (!result)
{
return result;
}
//
workingZone.symbol = symbol;
workingZone.period = period;
//
int idx = -1;
bool has = false;
//
has = ltfState.HasSupplyZones();
if (has)
{
//
idx = GetHighest(ltfState.supplyZones);
if (IsValidIndex(idx))
{
workingZone.supplyZone = ltfState.supplyZones[idx];
}
}
//
has = ltfState.HasDemandZones();
if (has)
{
//
idx = GetLowest(ltfState.demandZones);
if (IsValidIndex(idx))
{
workingZone.demandZone = ltfState.demandZones[idx];
}
}
//
bool hasWorkingZone = workingZone.HasSupplyZone() &&
workingZone.HasDemandZone();
if (hasWorkingZone)
{
//
double upper = workingZone.supplyZone.Lower();
double lower = workingZone.demandZone.Upper();
//
double delta = ((upper - lower) / 100) * 25;
//
workingZone.quarter1 = upper - (1 * delta);
workingZone.quarter2 = upper - (2 * delta);
workingZone.quarter3 = upper - (3 * delta);
//
hasWorkingZone = workingZone.IsValid();
}
//
result = hasWorkingZone;
//
return result;
}
//
// Draw Functions ...
//
@@ -725,6 +725,89 @@ struct X121SMCStrategyXWZWorkingZone
);
}
//
bool IsDestroyed(
int barIndex = 0,
ENUM_TIMEFRAMES forPeriod = NULL //
)
{
//
bool result = false;
//
if (barIndex < 0)
{
barIndex = 0;
}
//
if (!IsValid(forPeriod))
{
forPeriod = period;
}
//
result = IsValid();
if (!result)
{
return result;
}
//
XOHCL bar;
result = bar.Init(
symbol,
period,
barIndex //
);
if (!result)
{
//
bar.Clean();
return result;
}
//
XOHCL cBar;
result = bar.GetPreviousBar(cBar);
if (!result)
{
//
bar.Clean();
cBar.Clean();
//
return result;
}
//
bool isSupplyZoneBreaked =
//
bar.low > supplyZone.Upper() &&
cBar.low > supplyZone.Upper()
//
;
//
bool isDemandZoneBreaked =
//
bar.high < demandZone.Lower() &&
cBar.high < demandZone.Lower()
//
;
//
bar.Clean();
cBar.Clean();
//
result = isSupplyZoneBreaked ||
isDemandZoneBreaked;
//
return result;
}
//
bool IsOrderFlowBreaked(
int &breakedIndex,