This commit is contained in:
2025-03-11 11:09:30 +03:30
parent 86a4ae2be0
commit 9ce0ae0a37
5 changed files with 1211 additions and 829 deletions
+686
View File
@@ -1699,6 +1699,692 @@ if (useSenario1)
Print("Has Inside Box ..."); Print("Has Inside Box ...");
} }
////////////////////////////////////////////////////////////////////////
//
XOBFVG waitingZones[];
XOBFVG unavailableZones[];
////////////////////////////////////////////////////////////////////////
//
bool DetectZone(
X121SMCStrategySignalProviderData & provider //
)
{
//
bool result = false;
//
result = IsValid() &&
provider.IsValid();
if (!result)
{
return result;
}
//
int idx = -1;
int count = 0;
bool has = false;
datetime cTime = TimeCurrent();
//
XOBFVG obFVG;
XBoxZone obBox;
XBoxZone fvgBox;
XBoxZone supplyBox;
XBoxZone demandBox;
//
XCFVG *fvg = NULL;
XCOrderBlock *ob = NULL;
XCSupplyZone *supply = NULL;
XCDemandZone *demand = NULL;
//
// Check New Supply Zone Detection ...
bool hasNewSupply =
Contains(
X_SUPPLY_ZONE_DETECTED,
provider.consolidationPoiEvents //
);
if (hasNewSupply)
{
//
idx = GetYoungest(provider
.consolidationState
.supplyZones //
);
has = IsValidIndex(idx);
if (has)
{
//
supply = provider
.consolidationState
.supplyZones[idx];
has = ToBox(
supplyBox,
supply //
);
if (has)
{
//
supply.To(cTime);
supplyBox.to = cTime;
hasNewSupply = supplyBox.IsValid();
}
}
}
//
// Check New Demand Zone Detection ...
bool hasNewDemand =
Contains(
X_DEMAND_ZONE_DETECTED,
provider
.consolidationPoiEvents //
);
if (hasNewDemand)
{
//
idx = GetYoungest(provider
.consolidationState
.demandZones //
);
has = IsValidIndex(idx);
if (has)
{
//
demand = provider
.consolidationState
.demandZones[idx];
has = ToBox(
demandBox,
demand //
);
if (has)
{
//
demand.To(cTime);
demandBox.to = cTime;
hasNewDemand = demandBox.IsValid();
}
}
}
//
// Check New Fair Value Gap Detection ...
bool hasNewFairValueGap =
Contains(
X_BULLISH_FVG_DETECTED,
provider
.analysePoiEvents //
) ||
Contains(
X_BEARISH_FVG_DETECTED,
provider
.analysePoiEvents //
);
if (hasNewFairValueGap)
{
//
idx = GetYoungest(provider
.analyseState
.fairValueGaps //
);
has = IsValidIndex(idx);
if (has)
{
//
fvg = provider
.analyseState
.fairValueGaps[idx];
has = ToBox(
fvgBox,
fvg //
);
if (has)
{
//
fvg.To(cTime);
fvgBox.to = cTime;
hasNewFairValueGap = fvgBox.IsValid();
}
}
}
//
// Check New Order Block Detection ...
bool hasNewOrderBlock =
Contains(
X_BULLISH_ORDERBLOCK_DETECTED,
provider
.consolidationPoiEvents //
) ||
Contains(
X_BEARISH_ORDERBLOCK_DETECTED,
provider
.consolidationPoiEvents //
);
if (hasNewOrderBlock)
{
//
idx = GetYoungest(provider
.consolidationState
.orderBlocks //
);
has = IsValidIndex(idx);
if (has)
{
//
ob = provider
.consolidationState
.orderBlocks[idx];
has = ToBox(
obBox,
ob //
);
if (has)
{
//
ob.To(cTime);
obBox.to = cTime;
hasNewOrderBlock = obBox.IsValid();
}
}
}
//
// Detect OB FVG ...
if (hasNewOrderBlock)
{
//
XOHCL obStartedBar;
bool isOBStartedBodyOut = false;
bool isOBStarted = ob.IsStarted(
ob.GetDirection(),
obStartedBar,
isOBStartedBodyOut //
);
//
has = isOBStarted;
if (has)
{
//
obFVG.ob = ob;
//
// Select FVGs ...
count = provider
.analyseState
.CountFairValueGaps();
has = IsValidSize(count);
if (!has)
{
obFVG.Clean();
}
else
{
//
// Select FVG ...
for (int i = 0; i < count; i++)
{
//
XCFVG *iFVG = provider
.analyseState
.fairValueGaps[i];
bool isBullish = iFVG.IsBullish();
//
XOHCL iStartedBar;
bool isBodyOut = false;
bool isStarted = iFVG.IsStarted(
iFVG.GetDirection(),
iStartedBar,
isBodyOut //
);
iStartedBar.Clean();
//
bool isKindPassed = isStarted &&
isBodyOut;
bool isSameDir = iFVG.GetDirection() == ob.GetDirection();
bool isFromPassed = iFVG.From() >= obStartedBar.time;
bool isPlacePassed =
//
IsInsideOrDiff(
iFVG,
ob //
)
//
// ||
// //
// (isBullish
// ? IsAboveDiff(
// iFVG,
// ob,
// true // Ignore Inside ...
// )
// : IsBelowDiff(
// iFVG,
// ob,
// true // Ignore Inside ...
// )
// //
// )
//
;
//
has = isSameDir &&
isKindPassed &&
isFromPassed &&
isPlacePassed;
if (has)
{
obFVG.AddFVG(iFVG);
}
//
ZeroMemory(iFVG);
}
}
}
//
has = obFVG.IsValid();
if (has)
{
//
has = IsExists(obFVG);
if (!has)
{
//
// New Waiting Zone ...
AddRef(
obFVG,
waitingZones //
);
}
else
{
//
// Check Item Is not Exists ...
idx = FindIndex(
obFVG,
waitingZones //
);
has = !IsValidIndex(idx);
if (!has)
{
//
// Update Exists Waiting Zone ...
waitingZones[idx].AddFVG(fvg);
}
}
}
//
obFVG.Clean();
obStartedBar.Clean();
}
//
//
//
//
bool lookingOthers = false;
if (lookingOthers)
{
//
// Check New Order Block Detection Analyse ...
XBoxZone analyseOBBox;
XCOrderBlock *analyseOB = NULL;
bool hasNewAnalyseOrderBlock =
Contains(
X_BULLISH_ORDERBLOCK_DETECTED,
provider
.analysePoiEvents //
) ||
Contains(
X_BEARISH_ORDERBLOCK_DETECTED,
provider
.analysePoiEvents //
);
if (hasNewAnalyseOrderBlock)
{
//
idx = GetYoungest(provider
.analyseState
.orderBlocks //
);
has = IsValidIndex(idx);
if (has)
{
//
analyseOB = provider
.analyseState
.orderBlocks[idx];
has = ToBox(
analyseOBBox,
analyseOB //
);
if (has)
{
//
analyseOB.To(cTime);
analyseOBBox.to = cTime;
hasNewAnalyseOrderBlock = analyseOBBox.IsValid();
}
}
}
//
// Checking Analyse Order Block ...
if (hasNewAnalyseOrderBlock)
{
//
XOHCL obStartedBar;
bool isOBStartedBodyOut = false;
bool isOBStarted = analyseOB.IsStarted(
analyseOB.GetDirection(),
obStartedBar,
isOBStartedBodyOut //
);
//
has = isOBStarted &&
isOBStartedBodyOut;
if (has)
{
//
analyseOBBox.from =
obStartedBar.NextAt();
//
has = IsExists(analyseOBBox);
if (!has)
{
//
AddRef(
analyseOBBox,
waitingBoxes //
);
}
}
}
//
analyseOBBox.Clean();
ZeroMemory(analyseOB);
}
//
//
//
//
result = HasWaitingZones();
//
// Cleanup Resources ...
//
obFVG.Clean();
obBox.Clean();
fvgBox.Clean();
supplyBox.Clean();
demandBox.Clean();
//
ZeroMemory(ob);
ZeroMemory(fvg);
ZeroMemory(supply);
ZeroMemory(demand);
//
return result;
}
////////////////////////////////////////////////////////////////////////
//
int ValidateWaitingZones(
int barIndex = 0 //
)
{
//
int result = 0;
//
bool has = false;
//
if (barIndex < 0)
{
barIndex = 0;
}
//
if (barIndex == 0)
{
barIndex = 1;
}
//
has = IsValid() &&
HasWaitingZones();
if (!has)
{
return result;
}
//
int removeIDX[];
result = CountWaitingZones();
for (int i = 0; i < result; i++)
{
//
has = waitingZones[i].IsValidZone(
barIndex //
);
if (!has)
{
//
Add(
i,
removeIDX //
);
//
AddRef(
waitingZones[i],
unavailableZones //
);
}
}
//
has = HasChild(removeIDX);
if (has)
{
//
CleanupArray(
removeIDX,
waitingZones //
);
}
Clean(removeIDX);
//
result = CountWaitingZones();
//
return result;
}
////////////////////////////////////////////////////////////////////////
//
bool IsExists(XOBFVG & zone)
{
//
bool result = false;
//
// Check Validation ...
result = zone.IsValid() &&
(HasWaitingZones() ||
HasUnavailableZones());
if (!result)
{
return result;
}
//
int idx = -1;
//
// Check Index in Waiting Zones ...
idx = FindIndex(
zone,
waitingZones //
);
result = IsValidIndex(idx);
if (result)
{
return result;
}
//
// Check Index in Unavailable Zones ...
idx = FindIndex(
zone,
unavailableZones //
);
result = IsValidIndex(idx);
if (result)
{
return result;
}
//
return result;
}
////////////////////////////////////////////////////////////////////////
//
Clean(waitingZones);
Clean(unavailableZones);
//
bool HasWaitingZones()
{
return HasChild(waitingZones);
}
//
int CountWaitingZones()
{
return ArraySize(waitingZones);
}
//
bool HasUnavailableZones()
{
return HasChild(unavailableZones);
}
////////////////////////////////////////////////////////////////////////
//
has = HasWaitingZones();
if (has)
{
//
count = CountWaitingZones();
for (int i = 0; i < count; i++)
{
waitingZones[i].UpdateTo(value);
}
}
////////////////////////////////////////////////////////////////////////
//
has = HasWaitingZones();
if (has)
{
//
count = CountWaitingZones();
for (int i = 0; i < count; i++)
{
//
XCBaseObject *iObjects[];
int iObjectsCount = drawer.DrawOBFVG(
waitingZones[i],
iObjects,
true, // Draw Order Block ...
true, // Draw Fair Value Gaps ...
true, // Draw All Fair Value Gaps ...
//
true, // Draw OB StartedBar ...
true, // Draw OB ActivatedBar ...
true, // Draw OB BreakedBar ...
true, // Draw OB WorkedBar ...
//
true, // Draw FVG StartedBar ...
true, // Draw FVG ActivatedBar ...
true, // Draw FVG BreakedBar ...
true // Draw FVG WorkedBar ...
//
);
has = IsValidSize(iObjectsCount);
if (has)
{
//
for (int j = 0; j < iObjectsCount; j++)
{
mDrawnObjects.Add(iObjects[j]);
}
}
//
// if (drawWaitingZonesBoxArea)
// {
// //
// XBoxZone iBox;
// has = waitingZones[i].ToZone(
// iBox //
// );
// if (has)
// {
// //
// XCBoxObject *iBoxObj;
// has = drawer.DrawBox(
// iBox,
// iBoxObj //
// );
// if (has)
// {
// mDrawnObjects.Add(iBoxObj);
// }
// }
// //
// iBox.Clean();
// }
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@@ -61,9 +61,7 @@ bool IsValid(ENUM_X_CYCLES value)
// //
result = result =
value != X_CYCLE_NONE || value != X_CYCLE_NONE;
value != X_CYCLE_TRIGGER ||
value != X_CYCLE_VERIFICATION;
// //
return result; return result;
@@ -923,6 +921,17 @@ struct X121SMCStrategySignalProviderData
// //
// Props ... // Props ...
//
// Trigger ...
XPOIState triggerState;
double triggerBullishScore;
double triggerBearishScore;
X121Conditions triggerXConditions;
ENUM_XPOI_EVENTS triggerPoiEvents[];
XC121SMCCycleHelper *triggerCycleHelper;
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
// //
// Decision ... // Decision ...
XPOIState decisionState; XPOIState decisionState;
@@ -945,6 +954,17 @@ struct X121SMCStrategySignalProviderData
ENUM_X_CYCLE_EVENTS analyseCycleEvents[]; ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions; X121SMCCycleConditions analyseConditions;
//
// Verification ...
XPOIState verificationState;
double verificationBullishScore;
double verificationBearishScore;
X121Conditions verificationXConditions;
ENUM_XPOI_EVENTS verificationPoiEvents[];
XC121SMCCycleHelper *verificationCycleHelper;
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
X121SMCCycleConditions verificationConditions;
// //
// Consolidation ... // Consolidation ...
XPOIState consolidationState; XPOIState consolidationState;
@@ -981,6 +1001,16 @@ struct X121SMCStrategySignalProviderData
// Cleanup ... // Cleanup ...
void Clean() void Clean()
{ {
//
// Trigger ...
triggerState.Clean();
triggerBullishScore = 0;
triggerBearishScore = 0;
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
triggerConditions.Clean();
triggerXConditions.Clean();
// //
// Decision ... // Decision ...
decisionState.Clean(); decisionState.Clean();
@@ -1001,6 +1031,16 @@ struct X121SMCStrategySignalProviderData
analyseConditions.Clean(); analyseConditions.Clean();
analyseXConditions.Clean(); analyseXConditions.Clean();
//
// Verification ...
verificationState.Clean();
verificationBullishScore = 0;
verificationBearishScore = 0;
Clean(verificationPoiEvents);
Clean(verificationCycleEvents);
verificationConditions.Clean();
verificationXConditions.Clean();
// //
// Consolidation ... // Consolidation ...
consolidationState.Clean(); consolidationState.Clean();
@@ -1029,10 +1069,12 @@ struct X121SMCStrategySignalProviderData
Clean(); Clean();
// //
ZeroMemory(decisionCycleHelper);
ZeroMemory(analyseCycleHelper);
ZeroMemory(consolidationCycleHelper);
ZeroMemory(visionCycleHelper); ZeroMemory(visionCycleHelper);
ZeroMemory(triggerCycleHelper);
ZeroMemory(analyseCycleHelper);
ZeroMemory(decisionCycleHelper);
ZeroMemory(verificationCycleHelper);
ZeroMemory(consolidationCycleHelper);
// //
ZeroMemory(this); ZeroMemory(this);
@@ -1047,8 +1089,10 @@ struct X121SMCStrategySignalProviderData
// //
result = result =
visionCycleHelper != NULL && visionCycleHelper != NULL &&
triggerCycleHelper != NULL &&
analyseCycleHelper != NULL && analyseCycleHelper != NULL &&
decisionCycleHelper != NULL && decisionCycleHelper != NULL &&
verificationCycleHelper != NULL &&
consolidationCycleHelper != NULL; consolidationCycleHelper != NULL;
// //
@@ -1058,8 +1102,10 @@ struct X121SMCStrategySignalProviderData
// //
// Initialize ... // Initialize ...
bool Init( bool Init(
XC121SMCCycleHelper *_triggerCycleHelper,
XC121SMCCycleHelper *_decisionCycleHelper, XC121SMCCycleHelper *_decisionCycleHelper,
XC121SMCCycleHelper *_analyseCycleHelper, XC121SMCCycleHelper *_analyseCycleHelper,
XC121SMCCycleHelper *_verificationCycleHelper,
XC121SMCCycleHelper *_consolidationCycleHelper, XC121SMCCycleHelper *_consolidationCycleHelper,
XC121SMCCycleHelper *_visionCycleHelper // XC121SMCCycleHelper *_visionCycleHelper //
) )
@@ -1072,8 +1118,10 @@ struct X121SMCStrategySignalProviderData
result = result =
// //
_visionCycleHelper != NULL && _visionCycleHelper != NULL &&
_triggerCycleHelper != NULL &&
_analyseCycleHelper != NULL && _analyseCycleHelper != NULL &&
_decisionCycleHelper != NULL && _decisionCycleHelper != NULL &&
_verificationCycleHelper != NULL &&
_consolidationCycleHelper != NULL _consolidationCycleHelper != NULL
// //
; ;
@@ -1084,8 +1132,10 @@ struct X121SMCStrategySignalProviderData
// //
visionCycleHelper = _visionCycleHelper; visionCycleHelper = _visionCycleHelper;
triggerCycleHelper = _triggerCycleHelper;
analyseCycleHelper = _analyseCycleHelper; analyseCycleHelper = _analyseCycleHelper;
decisionCycleHelper = _decisionCycleHelper; decisionCycleHelper = _decisionCycleHelper;
verificationCycleHelper = _verificationCycleHelper;
consolidationCycleHelper = _consolidationCycleHelper; consolidationCycleHelper = _consolidationCycleHelper;
// //
@@ -1124,6 +1174,28 @@ struct X121SMCStrategySignalProviderData
return result; return result;
} }
//
// Trigger ...
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
barIndex,
loopback //
);
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(triggerCycleEvents);
//
triggerConditions.Clean();
//
return result;
}
// //
// Decision ... // Decision ...
result = decisionCycleHelper.GetConditions( result = decisionCycleHelper.GetConditions(
@@ -1136,10 +1208,11 @@ struct X121SMCStrategySignalProviderData
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(triggerCycleEvents);
triggerConditions.Clean();
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
//
decisionConditions.Clean(); decisionConditions.Clean();
// //
@@ -1158,16 +1231,44 @@ struct X121SMCStrategySignalProviderData
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(triggerCycleEvents);
//
Clean(analyseCycleEvents); Clean(analyseCycleEvents);
triggerConditions.Clean();
analyseConditions.Clean();
Clean(decisionCycleEvents); Clean(decisionCycleEvents);
decisionConditions.Clean();
// //
return result;
}
//
// Verification ...
result = verificationCycleHelper.GetConditions(
verificationCycleEvents,
verificationPoiEvents,
verificationConditions,
barIndex,
loopback //
);
if (!result)
{
//
Clean(triggerPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(triggerCycleEvents);
Clean(analyseCycleEvents);
triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
Clean(decisionCycleEvents);
decisionConditions.Clean(); decisionConditions.Clean();
Clean(verificationPoiEvents);
Clean(verificationCycleEvents);
verificationConditions.Clean();
// //
return result; return result;
@@ -1185,18 +1286,20 @@ struct X121SMCStrategySignalProviderData
if (!result) if (!result)
{ {
// //
Clean(triggerPoiEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
Clean(decisionPoiEvents); Clean(decisionPoiEvents);
Clean(consolidationPoiEvents); Clean(triggerCycleEvents);
//
Clean(analyseCycleEvents); Clean(analyseCycleEvents);
Clean(decisionCycleEvents); triggerConditions.Clean();
Clean(consolidationCycleEvents);
//
analyseConditions.Clean(); analyseConditions.Clean();
Clean(decisionCycleEvents);
decisionConditions.Clean(); decisionConditions.Clean();
Clean(verificationPoiEvents);
Clean(consolidationPoiEvents);
Clean(verificationCycleEvents);
verificationConditions.Clean();
Clean(consolidationCycleEvents);
consolidationConditions.Clean(); consolidationConditions.Clean();
// //
@@ -1216,20 +1319,22 @@ struct X121SMCStrategySignalProviderData
{ {
// //
Clean(visionPoiEvents); Clean(visionPoiEvents);
Clean(triggerPoiEvents);
Clean(analysePoiEvents); Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents); Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionConditions.Clean(); visionConditions.Clean();
Clean(decisionPoiEvents);
Clean(triggerCycleEvents);
Clean(analyseCycleEvents);
triggerConditions.Clean();
analyseConditions.Clean(); analyseConditions.Clean();
Clean(decisionCycleEvents);
decisionConditions.Clean(); decisionConditions.Clean();
Clean(verificationPoiEvents);
Clean(consolidationPoiEvents);
Clean(verificationCycleEvents);
verificationConditions.Clean();
Clean(consolidationCycleEvents);
consolidationConditions.Clean(); consolidationConditions.Clean();
// //
@@ -1238,17 +1343,28 @@ struct X121SMCStrategySignalProviderData
// //
// Cycles POI States ... // Cycles POI States ...
decisionState = decisionConditions.state;
analyseState = analyseConditions.state;
consolidationState = consolidationConditions.state;
visionState = visionConditions.state; visionState = visionConditions.state;
triggerState = triggerConditions.state;
analyseState = analyseConditions.state;
decisionState = decisionConditions.state;
verificationState = verificationConditions.state;
consolidationState = consolidationConditions.state;
// //
// Cycle X121Conditions ... // Cycle X121Conditions ...
decisionXConditions = decisionConditions.x121Conditions;
analyseXConditions = analyseConditions.x121Conditions;
consolidationXConditions = consolidationConditions.x121Conditions;
visionXConditions = visionConditions.x121Conditions; visionXConditions = visionConditions.x121Conditions;
triggerXConditions = triggerConditions.x121Conditions;
analyseXConditions = analyseConditions.x121Conditions;
decisionXConditions = decisionConditions.x121Conditions;
verificationXConditions = verificationConditions.x121Conditions;
consolidationXConditions = consolidationConditions.x121Conditions;
//
// Trigger ...
triggerXConditions.GenerateScore(
triggerBullishScore,
triggerBearishScore //
);
// //
// Decision ... // Decision ...
@@ -1264,6 +1380,13 @@ struct X121SMCStrategySignalProviderData
analyseBearishScore // analyseBearishScore //
); );
//
// Verification ...
verificationXConditions.GenerateScore(
verificationBullishScore,
verificationBearishScore //
);
// //
// Consolidation ... // Consolidation ...
consolidationXConditions.GenerateScore( consolidationXConditions.GenerateScore(
@@ -2919,7 +3042,7 @@ struct X121SMCStrategyConditionParser
X121SMCStrategySignalProviderData &provider, X121SMCStrategySignalProviderData &provider,
int barIndex = 0, int barIndex = 0,
bool forceBarType = false, bool forceBarType = false,
bool forceFiboPressure = false, // bool forceFiboPressure = false //
) )
{ {
// //
@@ -3102,7 +3225,7 @@ struct X121SMCStrategyConditionParser
// Update Inside Box From and To ... // Update Inside Box From and To ...
// Based on Breaked ... // Based on Breaked ...
insideBox.from = insideBox.to; insideBox.from = insideBox.to;
insideBox.to = cTime; insideBox.to = TimeCurrent();
// //
// Detect Breaked Box Direction ... // Detect Breaked Box Direction ...
@@ -225,8 +225,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (hasWaitingBoxes) if (hasWaitingBoxes)
{ {
// //
workingZone // Validate Working Zone Waiting Boxes ...
.ValidateWaitingBoxes(zIndex); workingZone.ValidateWaitingBoxes(zIndex);
//
// Double Check Has Waiting Boxes or not ...
hasWaitingBoxes = workingZone.HasWaitingBoxes(); hasWaitingBoxes = workingZone.HasWaitingBoxes();
} }
@@ -260,10 +263,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
} }
// //
// Start Draw ... // Update Models To Time ...
//
//
UpdateTo(cTime); UpdateTo(cTime);
// //
@@ -281,10 +281,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
); );
} }
//
// End Draw ...
//
// //
// Detect Signal Box ... // Detect Signal Box ...
hasSignalBox = hasSignalBox =
@@ -304,21 +300,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Remove Signal Box from UnAvailable Box ... // Remove Signal Box from UnAvailable Box ...
// if Exists ... // if Exists ...
bool hasUnAvailableBoxes = workingZone bool hasBreakedBoxes = workingZone
.HasUnavailableBoxes(); .HasBreakedBoxes();
if (hasUnAvailableBoxes) if (hasBreakedBoxes)
{ {
// //
int idx = FindIndex( int idx = FindIndex(
signalBox, signalBox,
workingZone.unavailableBoxes // workingZone.breakedBoxes //
); );
bool has = IsValidIndex(idx); bool has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
ArrayRemove( ArrayRemove(
workingZone.unavailableBoxes, workingZone.breakedBoxes,
idx, idx,
1 // 1 //
); );
@@ -352,20 +348,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// //
//
// Remove InValidate Boxes ...
if (hasWaitingBoxes)
{
//
// Validate Waiting Boxes ...
workingZone.ValidateWaitingBoxes(zIndex);
hasWaitingBoxes = workingZone.HasWaitingBoxes();
}
//
//
//
// //
// Cleanup Signal if UnApproved ... // Cleanup Signal if UnApproved ...
if (!hasSignalBox) if (!hasSignalBox)
File diff suppressed because it is too large Load Diff
+120 -16
View File
@@ -112,8 +112,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
void Destroy() override void Destroy() override
{ {
// //
ZeroMemory(mTriggerCycleHelper);
ZeroMemory(mDecisionCycleHelper); ZeroMemory(mDecisionCycleHelper);
ZeroMemory(mAnalyseCycleHelper); ZeroMemory(mAnalyseCycleHelper);
ZeroMemory(mVerificationCycleHelper);
ZeroMemory(mConsolidationCycleHelper); ZeroMemory(mConsolidationCycleHelper);
ZeroMemory(mVisionCycleHelper); ZeroMemory(mVisionCycleHelper);
@@ -487,6 +489,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// XC121SMCCycleHelper *mTriggerCycleHelper; // XC121SMCCycleHelper *mTriggerCycleHelper;
XC121SMCCycleHelper *mTriggerCycleHelper;
XC121SMCCycleHelper *mDecisionCycleHelper; XC121SMCCycleHelper *mDecisionCycleHelper;
XC121SMCCycleHelper *mAnalyseCycleHelper; XC121SMCCycleHelper *mAnalyseCycleHelper;
XC121SMCCycleHelper *mVerificationCycleHelper; XC121SMCCycleHelper *mVerificationCycleHelper;
@@ -509,21 +512,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
bool result = false; bool result = false;
//
// Validate Cycle Helpers ...
result =
//
mVisionCycleHelper != NULL &&
mAnalyseCycleHelper != NULL &&
mDecisionCycleHelper != NULL &&
mConsolidationCycleHelper != NULL
//
;
if (!result)
{
return result;
}
// //
bool isBullish = false; bool isBullish = false;
bool isBearish = false; bool isBearish = false;
@@ -867,7 +855,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mDecisionCycleHelper = new XC121SMCCycleHelper(); mDecisionCycleHelper = new XC121SMCCycleHelper();
isInited = mDecisionCycleHelper.Init( isInited = mDecisionCycleHelper.Init(
symbol, symbol,
PERIOD_M5, PERIOD_M1,
x121Inputs, x121Inputs,
requiredPOIS // requiredPOIS //
); );
@@ -919,6 +907,63 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mDecisionCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); mDecisionCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
} }
//
// Trigger Cycle ...
mTriggerCycleHelper = new XC121SMCCycleHelper();
isInited = mTriggerCycleHelper.Init(
symbol,
PERIOD_M5,
x121Inputs,
requiredPOIS //
);
if (isInited)
{
//
// Configure POI Drawer ...
color bullishColor = clrDodgerBlue;
color bearishColor = clrSienna;
//
// Bars ...
mTriggerCycleHelper.mPOIDrawer.BarBullishColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BarBearishColor(bearishColor);
//
// Swings ...
mTriggerCycleHelper.mPOIDrawer.SwingLowColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SwingHighColor(bearishColor);
//
// Momentum ...
mTriggerCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor);
//
// Rejection ...
mTriggerCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor);
//
// Support and Resistance ...
mTriggerCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor);
//
// Demand and Supply ...
mTriggerCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor);
//
// Order Blocks ...
mTriggerCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor);
//
// Fair Value Gaps ...
mTriggerCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mTriggerCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
}
// //
// Analyse Cycle ... // Analyse Cycle ...
mAnalyseCycleHelper = new XC121SMCCycleHelper(); mAnalyseCycleHelper = new XC121SMCCycleHelper();
@@ -976,6 +1021,63 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mAnalyseCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); mAnalyseCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
} }
//
// Verification Cycle ...
mVerificationCycleHelper = new XC121SMCCycleHelper();
isInited = mVerificationCycleHelper.Init(
symbol,
PERIOD_M30,
x121Inputs,
requiredPOIS //
);
if (isInited)
{
//
// Configure POI Drawer ...
color bullishColor = clrDodgerBlue;
color bearishColor = clrSienna;
//
// Bars ...
mVerificationCycleHelper.mPOIDrawer.BarBullishColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.BarBearishColor(bearishColor);
//
// Swings ...
mVerificationCycleHelper.mPOIDrawer.SwingLowColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.SwingHighColor(bearishColor);
//
// Momentum ...
mVerificationCycleHelper.mPOIDrawer.BullishMomentumBarColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.BearishMomentumBarColor(bearishColor);
//
// Rejection ...
mVerificationCycleHelper.mPOIDrawer.BullishRejectionBarColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.BearishRejectionBarColor(bearishColor);
//
// Support and Resistance ...
mVerificationCycleHelper.mPOIDrawer.SupportZoneColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.ResistanceZoneColor(bearishColor);
//
// Demand and Supply ...
mVerificationCycleHelper.mPOIDrawer.DemandZoneColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.SupplyZoneColor(bearishColor);
//
// Order Blocks ...
mVerificationCycleHelper.mPOIDrawer.BullishOrderBlockColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.BearishOrderBlockColor(bearishColor);
//
// Fair Value Gaps ...
mVerificationCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mVerificationCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
}
// //
// Consolidation Cycle ... // Consolidation Cycle ...
mConsolidationCycleHelper = new XC121SMCCycleHelper(); mConsolidationCycleHelper = new XC121SMCCycleHelper();
@@ -1093,8 +1195,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Initial Cycle Provider ... // Initial Cycle Provider ...
cycleProvider.Init( cycleProvider.Init(
mTriggerCycleHelper,
mDecisionCycleHelper, mDecisionCycleHelper,
mAnalyseCycleHelper, mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper, mConsolidationCycleHelper,
mVisionCycleHelper // mVisionCycleHelper //
); );