This commit is contained in:
2025-02-28 00:45:08 +03:30
parent 09069165f0
commit a266ed533b
3 changed files with 1518 additions and 1282 deletions
+1118 -980
View File
File diff suppressed because it is too large Load Diff
+228 -299
View File
@@ -381,7 +381,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
// //
bool has = CheckOBFVGXWZConditions( bool has = DetectSelectedZoneConditions(
isSelectedZoneReversal, isSelectedZoneReversal,
workingZone.insideZones[i], workingZone.insideZones[i],
decisionState, decisionState,
@@ -431,7 +431,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
// //
bool has = CheckOBFVGXWZConditions( bool has = DetectSelectedZoneConditions(
isSelectedZoneReversal, isSelectedZoneReversal,
workingZone.breakedZones[i], workingZone.breakedZones[i],
decisionState, decisionState,
@@ -467,6 +467,29 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
} }
//
// Checking Other Senario for Signals ...
// if (!hasWaitingZones &&
// !hasSelectedZone)
// {
// //
// bool has = false;
// ENUM_X_DIRECTION dir;
// //
// has = DetectX121Conditions(
// pivot,
// point,
// sls,
// targets,
// dir,
// analyseState,
// decisionState,
// decisionXConditions,
// drawer //
// );
// }
// //
// Double Check and Prepare Signal Conditions ... // Double Check and Prepare Signal Conditions ...
// including Targets and SLs ... // including Targets and SLs ...
@@ -628,12 +651,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
true, // Draw Waiting Zones .. true, // Draw Waiting Zones ..
true, // Draw Inside Zones .. true, // Draw Inside Zones ..
true, // Draw Breaked Zones .. true, // Draw Breaked Zones ..
false, // Draw Supply Zone .. true, // Draw Supply Zone ..
false, // Draw Demand Zone .. true, // Draw Demand Zone ..
false, // Draw Supply Zones .. true, // Draw Supply Zones ..
false, // Draw Demand Zones .. true, // Draw Demand Zones ..
false, // Draw Support Zones .. true, // Draw Support Zones ..
false // Draw Resistance Zones .. true // Draw Resistance Zones ..
); );
} }
@@ -915,9 +938,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
; ;
// //
return false; // Set Provider for Common Guards ...
string provider = ToString(X_121_SMC_PROVIDER_XWZ);
// //
// Check Cycle Helpers Validation ...
result = isCycleHelpersValid; result = isCycleHelpersValid;
if (!result) if (!result)
{ {
@@ -925,6 +950,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
// //
// Select Own Positions ...
int count = ArraySize(positions); int count = ArraySize(positions);
result = IsValidSize(count); result = IsValidSize(count);
if (!result) if (!result)
@@ -932,9 +958,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
return result; return result;
} }
//
string provider = ToString(X_121_SMC_PROVIDER_XWZ);
// //
XPosition ownPositions[]; XPosition ownPositions[];
XPosition ownLongPositions[]; XPosition ownLongPositions[];
@@ -980,6 +1003,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
} }
//
// Check Extracted Positions ...
// //
count = ArraySize(ownPositions); count = ArraySize(ownPositions);
@@ -992,6 +1018,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bool hasShorts = IsValidSize(shortsCount); bool hasShorts = IsValidSize(shortsCount);
// //
// Validate Own Positions ...
result = IsValidSize(count); result = IsValidSize(count);
if (!result) if (!result)
{ {
@@ -1033,7 +1060,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// //
// Get Custom Implemented Guards ... // Implement Custom Implemented Guards ...
// //
// Here we Are Sure there is Positions to Guard ... // Here we Are Sure there is Positions to Guard ...
@@ -1051,76 +1078,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
int loopback = 10; int loopback = 10;
//
XOHCL zBar;
result = zBar.Init(
symbol,
period,
zIndex //
);
if (!result)
{
//
result = HasChild(guards);
return result;
}
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
//
zBar.Clean();
result = HasChild(guards);
return result;
}
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
if (!result)
{
//
zBar.Clean();
cBar.Clean();
result = HasChild(guards);
return result;
}
//
XOHCL ppBar;
result = ppBar.Init(
symbol,
period,
ppIndex //
);
if (!result)
{
//
zBar.Clean();
cBar.Clean();
pBar.Clean();
result = HasChild(guards);
return result;
}
// //
double ask = GetAsk(symbol); double ask = GetAsk(symbol);
double bid = GetBid(symbol); double bid = GetBid(symbol);
datetime cTime = TimeCurrent(); datetime cTime = TimeCurrent();
double points = GetPoints(symbol); double points = GetPoints(symbol);
//
// //
// Cycles Conditions ... // Cycles Conditions ...
@@ -1139,10 +1102,13 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (!result) if (!result)
{ {
// //
zBar.Clean(); Clean(decisionPoiEvents);
cBar.Clean(); Clean(decisionCycleEvents);
pBar.Clean();
ppBar.Clean(); //
decisionConditions.Clean();
//
result = HasChild(guards); result = HasChild(guards);
return result; return result;
} }
@@ -1161,44 +1127,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
if (!result) if (!result)
{ {
//
zBar.Clean();
cBar.Clean();
pBar.Clean();
ppBar.Clean();
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
//
zBar.Clean();
cBar.Clean();
pBar.Clean();
ppBar.Clean();
// //
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
@@ -1219,25 +1147,19 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
// //
// Vision ... // Consolidation ...
ENUM_XPOI_EVENTS visionPoiEvents[]; ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[]; ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions visionConditions; X121SMCCycleConditions consolidationConditions;
result = visionCycleHelper.GetConditions( result = consolidationCycleHelper.GetConditions(
visionCycleEvents, consolidationCycleEvents,
visionPoiEvents, consolidationPoiEvents,
visionConditions, consolidationConditions,
zIndex, zIndex,
loopback // loopback //
); );
if (!result) if (!result)
{ {
//
zBar.Clean();
cBar.Clean();
pBar.Clean();
ppBar.Clean();
// //
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
@@ -1264,69 +1186,107 @@ class XCX121SMCXWZSignalDetector : public XCBase
return result; return result;
} }
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.Clean();
//
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
//
consolidationConditions.Clean();
//
Clean(visionPoiEvents);
Clean(visionCycleEvents);
//
visionConditions.Clean();
//
result = HasChild(guards);
return result;
}
// //
// Cycles POI States ... // Cycles POI States ...
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state; XPOIState visionState = visionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState consolidationState = consolidationConditions.state;
// //
// Cycle X121Conditions ... // Cycle X121Conditions ...
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
X121Conditions visionXConditions = visionConditions.x121Conditions; X121Conditions visionXConditions = visionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
// //
// //
// //
// // //
// // Detect Consolidation Zone ... // Selected Consolidation Zones ...
// //
// // Bullish ...
// XConsolidationZone bullishConsolidationZone;
// bool hasBullishConsolidationZone = decisionCycleHelper
// .GetLastDirectionalConsolidationZone(
// X_DIRECTION_BULLISH,
// bullishConsolidationZone //
// );
// //
// // Bearish ...
// XConsolidationZone bearishConsolidationZone;
// bool hasBearishConsolidationZone = decisionCycleHelper
// .GetLastDirectionalConsolidationZone(
// X_DIRECTION_BEARISH,
// bearishConsolidationZone //
// );
// //
// Detect High Probability Swings ... int idx = -1;
bool isSwingLow = bool has = false;
//
bool hasBullishConsolidationZone = false;
XConsolidationZone bullishConsolidationZone;
has = decisionState.HasBullishConsolidationZones();
if (has)
{
// //
cBar.low > pBar.low && idx = GetYoungest(decisionState.bullishConsolidationZones);
ppBar.low > pBar.low && hasBullishConsolidationZone = IsValidIndex(idx);
if (hasBullishConsolidationZone)
{
bullishConsolidationZone = decisionState.bullishConsolidationZones[idx];
}
}
//
bool hasBearishConsolidationZone = false;
XConsolidationZone bearishConsolidationZone;
has = decisionState.HasBearishConsolidationZones();
if (has)
{
// //
zBar.low > pBar.low idx = GetYoungest(decisionState.bearishConsolidationZones);
// hasBearishConsolidationZone = IsValidIndex(idx);
; if (hasBearishConsolidationZone)
bool isSwingHigh = {
// bearishConsolidationZone = decisionState.bearishConsolidationZones[idx];
cBar.high < pBar.high && }
ppBar.high < pBar.high && }
//
zBar.high < pBar.high
//
;
bool isStrongSwingLow =
pBar.IsBullish() &&
pBar.GetLowShadow() >= pBar.GetBody() * 2;
bool isStrongSwingHigh =
pBar.IsBearish() &&
pBar.GetHighShadow() >= pBar.GetBody() * 2;
// //
// Here We Have all Requirements for Guarding Positions ... // Here We Have all Requirements for Guarding Positions ...
@@ -1366,6 +1326,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// X_121_SMC_GUARD_ACTION_TRAIL_STOP: // X_121_SMC_GUARD_ACTION_TRAIL_STOP:
// Trail Stop Specified Position on Specified Conditions ... // Trail Stop Specified Position on Specified Conditions ...
bool handleStoptrailingBasedOnConsolidationZones = true;
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
// //
@@ -1379,114 +1340,82 @@ class XCX121SMCXWZSignalDetector : public XCBase
double sl = iPosition.sl; double sl = iPosition.sl;
double tp = iPosition.tp; double tp = iPosition.tp;
// // //
// // Trail Stops Using Consolidation Zones ... // Trail Stops Using Consolidation Zones ...
// bool canTraiLonglUsingCZone =
// //
// (isLong &&
// isInProfit &&
// hasBullishConsolidationZone &&
// bullishConsolidationZone.lower > iPosition.sl &&
// bullishConsolidationZone.lower > iPosition.entry)
// //
// ;
// if (canTraiLonglUsingCZone)
// {
// sl = bullishConsolidationZone.lower;
// }
// // //
// bool canTraiShortlUsingCZone = bool canTraiLonglUsingCZone =
// // //
// (!isLong && handleStoptrailingBasedOnConsolidationZones &&
// isInProfit && //
// hasBearishConsolidationZone && (isLong &&
// bearishConsolidationZone.upper < iPosition.sl && isInProfit &&
// bearishConsolidationZone.upper < iPosition.entry) hasBullishConsolidationZone &&
// // bullishConsolidationZone.lower > iPosition.sl &&
// ; bullishConsolidationZone.lower > iPosition.entry)
// if (canTraiShortlUsingCZone) //
// { ;
// sl = bearishConsolidationZone.upper; if (canTraiLonglUsingCZone)
// } {
sl = bullishConsolidationZone.lower;
}
// // //
// bool canTrailUsingCZone = bool canTraiShortlUsingCZone =
// canTraiLonglUsingCZone || //
// canTraiShortlUsingCZone; handleStoptrailingBasedOnConsolidationZones &&
//
(!isLong &&
isInProfit &&
hasBearishConsolidationZone &&
bearishConsolidationZone.upper < iPosition.sl &&
bearishConsolidationZone.upper < iPosition.entry)
//
;
if (canTraiShortlUsingCZone)
{
sl = bearishConsolidationZone.upper;
}
// // //
// // Trail Stops Using Swings ... bool canTrailUsingCZone =
canTraiLonglUsingCZone ||
canTraiShortlUsingCZone;
// // //
// bool canTrailLongUsingSwings = bool isSLPassed =
// // sl > 0 &&
// isLong && (isLong
// isInProfit && ? iPosition.price - sl >= points * 15
// (isSwingLow || : sl - iPosition.price >= points * 15);
// isStrongSwingLow) &&
// pBar.low > iPosition.sl &&
// pBar.low > iPosition.entry
// //
// ;
// if (canTrailLongUsingSwings)
// {
// sl = pBar.low;
// }
// // //
// bool canTraiShortlUsingSwings = bool canTrail =
// // isSLPassed &&
// !isLong && canTrailUsingCZone;
// isInProfit && if (canTrail)
// (isSwingHigh || {
// isStrongSwingHigh) && //
// pBar.high < iPosition.sl && X121SMCGuard iGuard;
// pBar.high < iPosition.entry
// //
// ;
// if (canTraiShortlUsingSwings)
// {
// sl = pBar.high;
// }
// // //
// bool canTrailUsingSwings = iGuard.time = cTime;
// canTrailLongUsingSwings || iGuard.symbol = symbol;
// canTraiShortlUsingSwings; iGuard.provider = provider;
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
// // //
// // iGuard.ticket = iPosition.ticket;
// //
// // //
// bool canTrail = iGuard.sl = sl;
// sl != iPosition.sl &&
// (canTrailUsingCZone ||
// canTrailUsingSwings);
// if (canTrail)
// {
// //
// X121SMCGuard iGuard;
// // //
// iGuard.time = cTime; AddGuard(
// iGuard.symbol = symbol; iGuard,
// iGuard.provider = provider; guards //
// iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP; );
}
// //
// iGuard.ticket = iPosition.ticket;
// //
// iGuard.sl = sl;
// //
// AddGuard(
// iGuard,
// guards //
// );
// }
} }
// //
@@ -1506,34 +1435,34 @@ class XCX121SMCXWZSignalDetector : public XCBase
Clean(ownShortPositions); Clean(ownShortPositions);
// //
zBar.Clean(); visionState.Clean();
cBar.Clean(); analyseState.Clean();
pBar.Clean(); decisionState.Clean();
ppBar.Clean(); consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
// //
Clean(visionPoiEvents); Clean(visionPoiEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
Clean(visionCycleEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationPoiEvents); Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
// //
visionState.Clean(); Clean(visionCycleEvents);
analyseState.Clean(); Clean(analyseCycleEvents);
decisionState.Clean(); Clean(decisionCycleEvents);
visionConditions.Clean(); Clean(consolidationCycleEvents);
analyseConditions.Clean();
visionXConditions.Clean();
decisionConditions.Clean();
consolidationState.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationConditions.Clean();
consolidationXConditions.Clean();
// //
count = ArraySize(guards); count = ArraySize(guards);
+172 -3
View File
@@ -386,6 +386,47 @@ struct X121SMCStrategyXWZWorkingZone
stfState // stfState //
); );
//
// Detect Waiting Zones based on STF and TTF ...
XOBFVG tmpWaitingZones[];
count = ExtractOBFVGs(
tmpWaitingZones,
stfState,
ttfState //
);
has = IsValidSize(count);
if (has)
{
//
for (int i = 0; i < count; i++)
{
//
XOBFVG iOBFVG = tmpWaitingZones[i];
//
idx = FindIndex(
iOBFVG,
waitingZones //
);
has = IsValidIndex(idx);
if (has)
{
//
iOBFVG.Clean();
continue;
}
//
AddRef(
iOBFVG,
waitingZones //
);
//
iOBFVG.Clean();
}
}
// //
result = IsValid(); result = IsValid();
if (!result) if (!result)
@@ -767,6 +808,47 @@ struct X121SMCStrategyXWZWorkingZone
} }
} }
//
// Detect Waiting Zones based on STF and TTF ...
Clean(tmpWaitingZones);
count = ExtractOBFVGs(
tmpWaitingZones,
stfState,
ttfState //
);
has = IsValidSize(count);
if (has)
{
//
for (int i = 0; i < count; i++)
{
//
XOBFVG iOBFVG = tmpWaitingZones[i];
//
idx = FindIndex(
iOBFVG,
waitingZones //
);
has = IsValidIndex(idx);
if (has)
{
//
iOBFVG.Clean();
continue;
}
//
AddRef(
iOBFVG,
waitingZones //
);
//
iOBFVG.Clean();
}
}
// //
zBar.Clean(); zBar.Clean();
cBar.Clean(); cBar.Clean();
@@ -1846,7 +1928,7 @@ struct X121SMCStrategyXWZSignalConditions
* *
* @return ( bool ) * @return ( bool )
*/ */
bool CheckOBFVGXWZConditions( bool DetectSelectedZoneConditions(
bool &isReversal, bool &isReversal,
XOBFVG &zone, XOBFVG &zone,
XPOIState &state, XPOIState &state,
@@ -1882,6 +1964,7 @@ bool CheckOBFVGXWZConditions(
// //
double bullishScore = 0; double bullishScore = 0;
double bearishScore = 0; double bearishScore = 0;
double scoreMultiplier = 1.5;
conditions.GenerateScore( conditions.GenerateScore(
bullishScore, bullishScore,
bearishScore // bearishScore //
@@ -1890,12 +1973,12 @@ bool CheckOBFVGXWZConditions(
// //
bool isBullishScorePassed = bullishScore > 0 && bool isBullishScorePassed = bullishScore > 0 &&
bearishScore >= 0 && bearishScore >= 0 &&
bullishScore > bearishScore; bullishScore > bearishScore * scoreMultiplier;
// //
bool isBearishScorePassed = bearishScore > 0 && bool isBearishScorePassed = bearishScore > 0 &&
bullishScore >= 0 && bullishScore >= 0 &&
bearishScore > bullishScore; bearishScore > bullishScore * scoreMultiplier;
// //
// VWap ... // VWap ...
@@ -3241,4 +3324,90 @@ bool DetectSelectedZoneSLCandidates(
return result; return result;
} }
//
//
//
bool DetectX121Conditions(
double &pivot,
double &point,
double &sls[],
double &targets[],
ENUM_X_DIRECTION &dir,
XPOIState &stfState,
XPOIState &ttfState,
X121Conditions &conditions,
XCPOIDrawer *drawer = NULL //
)
{
//
bool result = false;
//
bool canDraw = drawer != NULL;
//
pivot = 0;
point = 0;
Clean(sls);
Clean(targets);
dir = X_DIRECTION_NONE;
//
result =
stfState.IsValid() &&
ttfState.IsValid() &&
stfState.HasChild() &&
ttfState.HasChild();
if (!result)
{
return result;
}
//
int idx = -1;
int count = 0;
bool has = false;
//
// Detect Inside STF Order Blocks Zones ...
//
XOBFVG tmpWaitingZones[];
count = ExtractOBFVGs(
tmpWaitingZones,
stfState,
ttfState //
);
has = IsValidSize(count);
if (has)
{
//
if (canDraw)
{
//
for (int i = 0; i < count; i++)
{
//
XOBFVG iOBFVG = tmpWaitingZones[i];
//
iOBFVG.UpdateTo();
//
XCBaseObject *iOBFVGObjects[];
int iOBFVGObjectsCount = drawer.DrawOBFVG(
iOBFVG,
iOBFVGObjects //
);
}
}
}
//
//
return result;
}
// //