This commit is contained in:
2025-02-17 04:59:30 +03:30
parent 62aead0094
commit a6b05d349e
5 changed files with 7695 additions and 1049 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+13 -2
View File
@@ -5943,7 +5943,7 @@ struct XConsolidationZone
//
string result =
//
GetTypeName(this) + "_" +
"ConsolidationZone" + "_" +
symbol + "_" +
ToString(period) + "_" +
ToString(upper) + "_" +
@@ -7357,13 +7357,15 @@ bool IsBoxAbove(
* @param source: XBoxZone instance Reference ...
* @param dest: XBoxZone instance Reference ...
* @param forceSideOut: bool, force check Box has One Side Out ...
* @param ignoreSideOut: bool, Accept if source Box one Side is out of Dest Box ...
*
* @return ( bool )
*/
bool IsBoxInside(
XBoxZone &source,
XBoxZone &dest,
bool forceSideOut = false //
bool forceSideOut = false, //
bool ignoreSideOut = true //
)
{
//
@@ -7383,12 +7385,21 @@ bool IsBoxInside(
//
if (!forceSideOut)
{
//
if (ignoreSideOut)
{
//
result = source.lower >= dest.lower &&
source.upper <= dest.upper;
}
else
{
result = source.lower >= dest.lower ||
source.upper <= dest.upper;
}
}
else
{
//
bool hasSideIn =
+333 -169
View File
@@ -527,15 +527,26 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Detect Start Zones ...
bool hasStartZone = mConditions.HasStartZone();
bool hasStartZone = mConditions.HasStartZones();
if (!hasStartZone)
{
//
hasStartZone = mConditions.DetectStartZone(
hasStartZone = mConditions.DetectStartZones(
trend,
analyseState,
decisionCycleHelper //
);
//
if (hasStartZone)
{
//
mConditions.UpdateTo(cTime);
DrawConditions(
mConditions,
visionCycleHelper.mPOIDrawer //
);
}
}
//
@@ -563,56 +574,105 @@ class XCX121SMCXWZSignalDetector : public XCBase
: false;
//
bool hasCondition = false;
ENUM_X_DIRECTION conditionsDir = X_DIRECTION_NONE;
DrawWorkingZone(
mConditions,
visionCycleHelper.mPOIDrawer //
);
//
// Detect Start Zone Based Conditions ...
if (hasStartZone)
{
// Here we are Make sure we have Correct:
// - WorkSpace ...
// - Trend ...
// - What we looking for: Long or Short ...
// - Priority ...
//
DrawConditions(
mConditions,
visionCycleHelper.mPOIDrawer //
);
//
double pivot = 0;
double point = 0;
bool hasCondition = false;
ENUM_X_DIRECTION conditionsDir = X_DIRECTION_NONE;
//
// Detect Start Zone Conditions ...
hasCondition = mConditions
.startZone
.HasCondition(
.HasConditions(
conditionsDir,
decisionState,
zIndex,
NULL // period //
decisionState.period //
);
conditionsDir = mConditions
.startZone
.GetDirection();
}
//
RemoveWorkingZoneDraws();
DrawWorkingZone(mConditions, visionCycleHelper.mPOIDrawer);
//
// Detect Supply and Deman Zone Based Conditions ...
if (!hasCondition)
if (hasCondition)
{
//
bool isPriceInsideSupplyZone =
bearishPriority == X121SMC_XWZ_PRIORITY_STRONG_HIGH;
// //
// XBoxZone startZoneBox;
// bool hasBox = mConditions.startZone.AsBox(startZoneBox);
// if (hasBox)
// {
// //
// bool isBullish = IsBullish(conditionsDir);
//
bool isPriceInsideDemandZone =
bullishPriority == X121SMC_XWZ_PRIORITY_STRONG_HIGH;
// //
// pivot =
// isBullish
// ? startZoneBox.lower
// : startZoneBox.upper;
//
bool isPriceInsideSupDem = isPriceInsideSupplyZone ||
isPriceInsideDemandZone;
if (isPriceInsideSupDem)
{
//
hasCondition = mConditions.HasWorkingZoneConditions(
conditionsDir,
decisionState //
);
}
// //
// point =
// isBullish
// ? startZoneBox.upper
// : startZoneBox.lower;
// }
}
// //
// // Detect Supply and Deman Zone Based Conditions ...
// if (!hasCondition)
// {
// //
// bool isPriceInsideSupplyZone =
// bearishPriority == X121SMC_XWZ_PRIORITY_STRONG_HIGH;
// //
// bool isPriceInsideDemandZone =
// bullishPriority == X121SMC_XWZ_PRIORITY_STRONG_HIGH;
// //
// bool isPriceInsideSupDem = isPriceInsideSupplyZone ||
// isPriceInsideDemandZone;
// if (isPriceInsideSupDem)
// {
// //
// hasCondition = mConditions.HasWorkingZoneConditions(
// conditionsDir,
// decisionState //
// );
// //
// if (hasCondition)
// {
// //
// if (IsBullish(conditionsDir))
// {
// //
// pivot = mConditions.demandZone.Lower();
// point = mConditions.demandZone.Upper();
// }
// else if (IsBearish(conditionsDir))
// {
// //
// pivot = mConditions.supplyZone.Upper();
// point = mConditions.supplyZone.Lower();
// }
// }
// }
// }
//
isBullish = IsBullish(conditionsDir);
isBearish = IsBearish(conditionsDir);
@@ -630,11 +690,152 @@ class XCX121SMCXWZSignalDetector : public XCBase
amountPercent //
);
//
bool hasLastBullishConsolidationZone = false;
bool hasLastBearishConsolidationZone = false;
bool hasPrevBullishConsolidationZone = false;
bool hasPrevBearishConsolidationZone = false;
XConsolidationZone lastBullishConsolidationZone;
XConsolidationZone lastBearishConsolidationZone;
XConsolidationZone prevBullishConsolidationZone;
XConsolidationZone prevBearishConsolidationZone;
bool hasConsolidationZones = decisionCycleHelper.HasConsolidationZones();
if (hasConsolidationZones)
{
//
int cZCount = 0;
XConsolidationZone tmp[];
//
cZCount = decisionCycleHelper
.FillConsolidationZones(
X_DIRECTION_BULLISH,
tmp //
);
if (IsValidSize(cZCount))
{
//
lastBullishConsolidationZone = tmp[cZCount - 1];
if (cZCount >= 2)
{
prevBullishConsolidationZone = tmp[cZCount - 2];
}
}
//
Clean(tmp);
cZCount = decisionCycleHelper
.FillConsolidationZones(
X_DIRECTION_BEARISH,
tmp //
);
if (IsValidSize(cZCount))
{
//
lastBearishConsolidationZone = tmp[cZCount - 1];
if (cZCount >= 2)
{
prevBearishConsolidationZone = tmp[cZCount - 2];
}
}
//
Clean(tmp);
//
hasLastBullishConsolidationZone = lastBullishConsolidationZone.IsValid();
hasLastBearishConsolidationZone = lastBearishConsolidationZone.IsValid();
hasPrevBullishConsolidationZone = prevBullishConsolidationZone.IsValid();
hasPrevBearishConsolidationZone = prevBearishConsolidationZone.IsValid();
}
//
RemoveDraws();
//
if (hasLastBullishConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
bool isCreated = visionCycleHelper
.mPOIDrawer
.CreateConsolidationZone(
lastBullishConsolidationZone,
iObj //
);
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
if (hasLastBearishConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
bool isCreated = visionCycleHelper
.mPOIDrawer
.CreateConsolidationZone(
lastBearishConsolidationZone,
iObj //
);
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
if (hasPrevBullishConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
bool isCreated = visionCycleHelper
.mPOIDrawer
.CreateConsolidationZone(
prevBullishConsolidationZone,
iObj //
);
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
if (hasPrevBearishConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
bool isCreated = visionCycleHelper
.mPOIDrawer
.CreateConsolidationZone(
prevBearishConsolidationZone,
iObj //
);
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
bool isConsolidationZonePassed =
isBullish
? (point > 0 &&
hasPrevBullishConsolidationZone &&
point >= prevBullishConsolidationZone.upper)
: (point > 0 &&
hasPrevBearishConsolidationZone &&
point <= prevBearishConsolidationZone.lower);
//
result = hasCondition &&
hasRewardAmount &&
isPriorityPassed &&
trend == conditionsDir;
trend == conditionsDir &&
isConsolidationZonePassed;
if (!result)
{
//
@@ -664,6 +865,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
consolidationConditions.Clean();
consolidationXConditions.Clean();
//
lastBullishConsolidationZone.Clean();
lastBearishConsolidationZone.Clean();
prevBullishConsolidationZone.Clean();
prevBearishConsolidationZone.Clean();
//
mConditions.Clean();
@@ -718,18 +925,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
mConditions.pivot = pivot;
mConditions.point = point;
mConditions.reward = reward;
mConditions.target = target;
mConditions.setupTime = cTime;
mConditions.priority = priority;
mConditions.dir = conditionsDir;
mConditions.amountPercent = amountPercent;
mConditions.pivot = mConditions.GetExit();
mConditions.point = mConditions.GetPoint();
//
mConditions.UpdateTo(cTime);
//
DrawConditions(
mConditions,
visionCycleHelper.mPOIDrawer //
);
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
@@ -757,6 +970,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
consolidationConditions.Clean();
consolidationXConditions.Clean();
//
lastBullishConsolidationZone.Clean();
lastBearishConsolidationZone.Clean();
prevBullishConsolidationZone.Clean();
prevBearishConsolidationZone.Clean();
//
return result;
}
@@ -929,16 +1148,18 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
isBullish =
//
isBullish &&
isPointBreaked
isBullish
// &&
// isPointBreaked
//
;
//
isBearish =
//
isBearish &&
isPointBreaked
isBearish
// &&
// isPointBreaked
//
;
@@ -2293,57 +2514,73 @@ class XCX121SMCXWZSignalDetector : public XCBase
color bearishColor = drawer.BarBearishColor();
//
// Start Zone ...
bool hasStartZone = conditions.HasStartZone();
if (hasStartZone)
// Start Zones ...
bool hasStartZones = conditions.HasStartZones();
if (hasStartZones)
{
//
bool isBullish = conditions.startZone.IsBullish();
int count = conditions.CountStartZones();
for (int i = 0; i < count; i++)
{
//
bool isBullish = conditions.startZones[i].IsBullish();
//
bool hasOB = conditions.startZone.HasOB();
bool hasOB = conditions.startZones[i].HasOB();
if (hasOB)
{
// //
// XCBaseObject *iObj;
// isCreated = drawer.CreateOrderBlock(
// conditions.startZones[i].ob,
// iObj //
// );
// //
// if (isCreated)
// {
// mObjects.Add(iObj);
// }
//
XCBaseObject *iObj;
isCreated = drawer.CreateOrderBlock(
conditions.startZone.ob,
iObj //
DrawOrderBlock(
conditions.startZones[i].ob,
drawer //
);
//
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
bool hasFVG = conditions.startZone.HasFVG();
bool hasFVG = conditions.startZones[i].HasFVG();
if (hasFVG)
{
// //
// XCBaseObject *iObj;
// isCreated = drawer.CreateFairValueGap(
// conditions.startZones[i].fvg,
// iObj //
// );
// //
// if (isCreated)
// {
// mObjects.Add(iObj);
// }
//
XCBaseObject *iObj;
isCreated = drawer.CreateFairValueGap(
conditions.startZone.fvg,
iObj //
DrawFairValueGap(
conditions.startZones[i].fvg,
drawer //
);
//
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
bool hasSupply = conditions.startZone.HasSupply();
bool hasSupply = conditions.startZones[i].HasSupply();
if (hasSupply)
{
//
XCSupplyZoneObject *iObj;
isCreated = drawer.CreateSupplyZone(
conditions.startZone.supply,
conditions.startZones[i].supply,
iObj //
);
@@ -2355,13 +2592,13 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasDemand = conditions.startZone.HasDemand();
bool hasDemand = conditions.startZones[i].HasDemand();
if (hasDemand)
{
//
XCDemandZoneObject *iObj;
isCreated = drawer.CreateDemandZone(
conditions.startZone.demand,
conditions.startZones[i].demand,
iObj //
);
@@ -2373,13 +2610,13 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasSupport = conditions.startZone.HasSupport();
bool hasSupport = conditions.startZones[i].HasSupport();
if (hasSupport)
{
//
XCSupportZoneObject *iObj;
isCreated = drawer.CreateSupportZone(
conditions.startZone.support,
conditions.startZones[i].support,
iObj //
);
@@ -2391,49 +2628,13 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasResistance = conditions.startZone.HasResistance();
bool hasResistance = conditions.startZones[i].HasResistance();
if (hasResistance)
{
//
XCResistanceZoneObject *iObj;
isCreated = drawer.CreateResistanceZone(
conditions.startZone.resistance,
iObj //
);
//
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
bool hasBullishCZone = conditions.startZone.HasBullishConsolidationZone();
if (hasBullishCZone)
{
//
XCConsolidationZoneObject *iObj;
isCreated = drawer.CreateConsolidationZone(
conditions.startZone.bullishConsolidationZone,
iObj //
);
//
if (isCreated)
{
mObjects.Add(iObj);
}
}
//
bool hasBearishCZone = conditions.startZone.HasBearishConsolidationZone();
if (hasBearishCZone)
{
//
XCConsolidationZoneObject *iObj;
isCreated = drawer.CreateConsolidationZone(
conditions.startZone.bearishConsolidationZone,
conditions.startZones[i].resistance,
iObj //
);
@@ -2456,11 +2657,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
ENUM_X_PRICE bPrice = X_PRICE_CLOSE;
//
bool hasSwingBar = conditions.startZone.swingBar.IsValid();
bool hasSwingBar = conditions.startZones[i].swingBar.IsValid();
if (hasSwingBar)
{
//
bSuffix = ToMD5(conditions.startZone.swingBar.GetTag());
bSuffix = ToMD5(conditions.startZones[i].swingBar.GetTag());
bName =
(isBullish
? "SWING_LOW"
@@ -2484,7 +2685,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bName,
subWindow,
arrowCode,
conditions.startZone.swingBar,
conditions.startZones[i].swingBar,
bPrice //
);
if (isCreated)
@@ -2498,11 +2699,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasBreakerBar = conditions.startZone.breakerBar.IsValid();
bool hasBreakerBar = conditions.startZones[i].breakerBar.IsValid();
if (hasBreakerBar)
{
//
bSuffix = ToMD5(conditions.startZone.breakerBar.GetTag());
bSuffix = ToMD5(conditions.startZones[i].breakerBar.GetTag());
bName =
(isBullish
? "BULL_BREAKER"
@@ -2529,7 +2730,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bName,
subWindow,
arrowCode,
conditions.startZone.breakerBar,
conditions.startZones[i].breakerBar,
bPrice //
);
if (isCreated)
@@ -2543,11 +2744,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasMomentumBar = conditions.startZone.momentumBar.IsValid();
bool hasMomentumBar = conditions.startZones[i].momentumBar.IsValid();
if (hasMomentumBar)
{
//
bSuffix = ToMD5(conditions.startZone.momentumBar.GetTag());
bSuffix = ToMD5(conditions.startZones[i].momentumBar.GetTag());
bName =
(isBullish
? "BULL_MOMENTUM"
@@ -2574,7 +2775,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bName,
subWindow,
arrowCode,
conditions.startZone.momentumBar,
conditions.startZones[i].momentumBar,
bPrice //
);
if (isCreated)
@@ -2588,11 +2789,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasRejectionBar = conditions.startZone.rejectionBar.IsValid();
bool hasRejectionBar = conditions.startZones[i].rejectionBar.IsValid();
if (hasRejectionBar)
{
//
bSuffix = ToMD5(conditions.startZone.rejectionBar.GetTag());
bSuffix = ToMD5(conditions.startZones[i].rejectionBar.GetTag());
bName =
(isBullish
? "BULL_REJECTION"
@@ -2619,7 +2820,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bName,
subWindow,
arrowCode,
conditions.startZone.rejectionBar,
conditions.startZones[i].rejectionBar,
bPrice //
);
if (isCreated)
@@ -2633,19 +2834,19 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
bool hasAppliedBox = conditions.startZone.appliedBox.IsValid();
bool hasAppliedBox = conditions.startZones[i].appliedBox.IsValid();
if (hasAppliedBox)
{
//
arrowColor =
IsBullish(conditions.startZone.appliedBox.dir)
IsBullish(conditions.startZones[i].appliedBox.dir)
? bullishColor
: bearishColor;
//
XCBoxObject *iObj;
isCreated = drawer.CreateBox(
conditions.startZone.appliedBox,
conditions.startZones[i].appliedBox,
iObj //
);
@@ -2662,6 +2863,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
}
}
}
//
protected:
@@ -2696,44 +2898,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Helpers ...
//
bool CheckPriceInside(
XOHCL &zBar,
XOHCL &cBar,
double upper,
double lower //
)
{
//
bool result = false;
//
result = zBar.IsValid() &&
cBar.IsValid() &&
upper > 0 &&
lower > 0 &&
upper > lower &&
zBar.time > cBar.time;
if (!result)
{
return result;
}
//
result =
//
zBar.high < upper &&
cBar.high < upper &&
//
zBar.low > lower &&
cBar.low > lower
//
;
//
return result;
}
//
bool CalculateRiskReward(
ENUM_X121SMC_XWZ_PRIORITY priority,
File diff suppressed because it is too large Load Diff