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
@@ -1908,7 +1908,7 @@ void SortZones(
if (!hasLast) if (!hasLast)
{ {
// //
idx = GetYoungest(source); idx = GetOldest(source);
hasLast = IsValidIndex(idx); hasLast = IsValidIndex(idx);
if (hasLast) if (hasLast)
{ {
@@ -1923,7 +1923,7 @@ void SortZones(
// //
Add( Add(
last, last,
source // tmpItems //
); );
} }
@@ -1946,7 +1946,7 @@ void SortZones(
// //
T *item = NULL; T *item = NULL;
idx = GetYoungest(source); idx = GetOldest(source);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (!has) if (!has)
{ {
@@ -3548,7 +3548,7 @@ void Sort(
if (!hasLast) if (!hasLast)
{ {
// //
idx = GetYoungest(source); idx = GetOldest(source);
hasLast = IsValidIndex(idx); hasLast = IsValidIndex(idx);
if (hasLast) if (hasLast)
{ {
@@ -3563,7 +3563,7 @@ void Sort(
// //
AddRef( AddRef(
last, last,
source // tmpItems //
); );
} }
@@ -3580,13 +3580,13 @@ void Sort(
if (!hasLast) if (!hasLast)
{ {
// //
ZeroMemory(last); last.Clean();
break; break;
} }
// //
XOBFVG item; XOBFVG item;
idx = GetYoungest(source); idx = GetOldest(source);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (!has) if (!has)
{ {
+190
View File
@@ -6639,6 +6639,196 @@ struct XOBFVG
return result; return result;
} }
//
void UpdateZones(
XPOIState &state //
)
{
//
Clean(supplyZones);
Clean(demandZones);
Clean(supportZones);
Clean(resistanceZones);
//
bool isValid =
IsValid() &&
state.HasChild();
if (!isValid)
{
return;
}
//
int count = 0;
bool has = false;
bool isPassed = false;
//
// Supply Zones ...
has = state.HasSupplyZones();
if (has)
{
//
count = state.CountSupplyZones();
for (int i = 0; i < count; i++)
{
//
XCSupplyZone *iZone = state.supplyZones[i];
//
isPassed = iZone.From() > ob.From();
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
isPassed = IsInsideDiff(
iZone,
ob //
);
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
Add(
iZone,
supplyZones //
);
}
}
//
// Demand Zones ...
has = state.HasDemandZones();
if (has)
{
//
count = state.CountDemandZones();
for (int i = 0; i < count; i++)
{
//
XCDemandZone *iZone = state.demandZones[i];
//
isPassed = iZone.From() > ob.From();
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
isPassed = IsInsideDiff(
iZone,
ob //
);
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
Add(
iZone,
demandZones //
);
}
}
//
// Support Zones ...
has = state.HasSupportZones();
if (has)
{
//
count = state.CountSupportZones();
for (int i = 0; i < count; i++)
{
//
XCSupportZone *iZone = state.supportZones[i];
//
isPassed = iZone.From() > ob.From();
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
isPassed = IsInsideDiff(
iZone,
ob //
);
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
Add(
iZone,
supportZones //
);
}
}
//
// Resistance Zones ...
has = state.HasResistanceZones();
if (has)
{
//
count = state.CountResistanceZones();
for (int i = 0; i < count; i++)
{
//
XCResistanceZone *iZone = state.resistanceZones[i];
//
isPassed = iZone.From() > ob.From();
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
isPassed = IsInsideDiff(
iZone,
ob //
);
if (!isPassed)
{
//
ZeroMemory(iZone);
continue;
}
//
Add(
iZone,
resistanceZones //
);
}
}
}
// //
void UpdateTo(datetime value = NULL) void UpdateTo(datetime value = NULL)
{ {
+444 -41
View File
@@ -169,8 +169,16 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
if (!result) if (!result)
{ {
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
// //
mConditions.Clean(); mConditions.Clean();
consolidationZBar.Clean();
// //
return result; return result;
@@ -190,8 +198,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
if (!result) if (!result)
{ {
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
// //
mConditions.Clean(); mConditions.Clean();
consolidationZBar.Clean();
// //
return result; return result;
@@ -211,8 +232,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
if (!result) if (!result)
{ {
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
// //
mConditions.Clean(); mConditions.Clean();
consolidationZBar.Clean();
// //
return result; return result;
@@ -232,8 +269,27 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
if (!result) 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(); mConditions.Clean();
consolidationZBar.Clean();
// //
return result; return result;
@@ -257,6 +313,195 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Setup Conditions ... // 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; ENUM_X_DIRECTION trend = X_DIRECTION_NONE;
bool hasOrderFlow = workingZone.HasOrderFlow(trend); bool hasOrderFlow = workingZone.HasOrderFlow(trend);
if (!hasOrderFlow) if (!hasOrderFlow)
@@ -273,18 +518,55 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
hasOrderFlow = IsValidSize(orderFlowCount); hasOrderFlow = IsValidSize(orderFlowCount);
} }
//
result = hasOrderFlow; result = hasOrderFlow;
if (!result) 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; return result;
} }
//
// TODO: Remove this ...
UpdateTo(cTime);
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
// //
isBullish = IsBullish(trend); isBullish = IsBullish(trend);
isBearish = IsBearish(trend); isBearish = IsBearish(trend);
@@ -305,24 +587,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
amountPercent // amountPercent //
); );
//
// Has Order Flow ...
UpdateTo(cTime);
//
// TODO: Remove this ...
//
DrawWorkingZone(
visionCycleHelper.mPOIDrawer //
);
//
DrawConditions(
mConditions,
visionCycleHelper.mPOIDrawer //
);
// //
// Checking Order Flow Break ... // Checking Order Flow Break ...
int breakedIDX = -1; int breakedIDX = -1;
@@ -364,7 +628,38 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (!result) 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; return result;
@@ -438,6 +733,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
{ {
// //
// TODO: Implement Order Flow Side Trading Senario ... // 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: Implement Support and Resistance Trading Senario ...
// //
// TODO: these are Trends ... // Summarize ...
isBullish = false;
isBearish = false;
// //
bool hasBullishConditions = false; bool hasBullishConditions =
bool hasBearishConditions = false; //
hasChochBullishConditions ||
hasSupDemBullishConditions ||
hasSupResBullishConditions ||
hasTrendLineBullishConditions ||
hasOrderFlowhBullishConditions ||
hasBQuarterLineBullishConditions
//
;
//
bool hasBearishConditions =
//
hasChochBearishConditions ||
hasSupDemBearishConditions ||
hasSupResBearishConditions ||
hasTrendLineBearishConditions ||
hasOrderFlowhBearishConditions ||
hasBQuarterLineBearishConditions
//
;
// //
result = result =
@@ -823,15 +1139,8 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasBearishConditions; hasBearishConditions;
// //
// TODO: Implement All Cleanups ... if (result)
{
//
return result;
//
// Summarise Conditions ...
//
// //
mConditions.dir = trend; mConditions.dir = trend;
mConditions.pivot = pivot; mConditions.pivot = pivot;
@@ -841,34 +1150,45 @@ class XCX121SMCXWZSignalDetector : public XCBase
mConditions.setupTime = cTime; mConditions.setupTime = cTime;
mConditions.priority = priority; mConditions.priority = priority;
mConditions.amountPercent = amountPercent; mConditions.amountPercent = amountPercent;
}
// //
mConditions.UpdateTo(cTime); // Cleanups ...
// //
Clean(visionPoiEvents); Clean(visionPoiEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents); Clean(visionCycleEvents);
Clean(analyseCycleEvents); Clean(analyseCycleEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents); Clean(consolidationCycleEvents);
// //
visionState.Clean(); visionState.Clean();
analyseState.Clean(); analyseState.Clean();
decisionState.Clean(); decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean(); visionConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
visionXConditions.Clean();
consolidationState.Clean();
decisionConditions.Clean(); decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
decisionXConditions.Clean(); decisionXConditions.Clean();
consolidationConditions.Clean();
consolidationXConditions.Clean(); consolidationXConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
// //
return result; return result;
} }
@@ -1891,6 +2211,89 @@ class XCX121SMCXWZSignalDetector : public XCBase
return result; 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 ... // 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( bool IsOrderFlowBreaked(
int &breakedIndex, int &breakedIndex,