add support for Cycle Provider ...

This commit is contained in:
2025-03-06 23:35:44 +03:30
parent 7e976bc157
commit 6157bbe125
6 changed files with 1488 additions and 1785 deletions
+73 -34
View File
@@ -4695,49 +4695,88 @@ class XCPOIDrawer : public XCBase
// //
// Fair Value Gap ... // Fair Value Gap ...
has = item.HasFVGs(); XCFVG *fvg;
if (has && has = item.GetMainFVG(fvg);
drawFairValueGaps) if (has)
{ {
// //
count = item.CountFVGs(); Clean(tmpObjects);
for (int i = 0; i < count; i++) int fvgsCount = DrawFairValueGap(
fvg,
tmpObjects,
drawFVGStartedBar,
drawFVGActivatedBar,
drawFVGBreakedBar,
drawFVGWorkedBar,
widthFVGStartedBar,
clrFVGStartedBar,
styleFVGStartedBar,
widthFVGActivatedBar,
clrFVGActivatedBar,
styleFVGActivatedBar,
widthFVGBreakedBar,
clrFVGBreakedBar,
styleFVGBreakedBar,
widthFVGWorkedBar,
clrFVGWorkedBar,
styleFVGWorkedBar //
);
has = IsValidSize(fvgsCount);
if (has)
{ {
// //
Clean(tmpObjects); Copy(
int fvgsCount = DrawFairValueGap(
item.fvgs[i],
tmpObjects, tmpObjects,
drawFVGStartedBar, objects,
drawFVGActivatedBar, false //
drawFVGBreakedBar,
drawFVGWorkedBar,
widthFVGStartedBar,
clrFVGStartedBar,
styleFVGStartedBar,
widthFVGActivatedBar,
clrFVGActivatedBar,
styleFVGActivatedBar,
widthFVGBreakedBar,
clrFVGBreakedBar,
styleFVGBreakedBar,
widthFVGWorkedBar,
clrFVGWorkedBar,
styleFVGWorkedBar //
); );
has = IsValidSize(fvgsCount);
if (has)
{
//
Copy(
tmpObjects,
objects,
false //
);
}
} }
} }
// //
// has = item.HasFVGs();
// if (has &&
// drawFairValueGaps)
// {
// //
// count = item.CountFVGs();
// for (int i = 0; i < count; i++)
// {
// //
// Clean(tmpObjects);
// int fvgsCount = DrawFairValueGap(
// item.fvgs[i],
// tmpObjects,
// drawFVGStartedBar,
// drawFVGActivatedBar,
// drawFVGBreakedBar,
// drawFVGWorkedBar,
// widthFVGStartedBar,
// clrFVGStartedBar,
// styleFVGStartedBar,
// widthFVGActivatedBar,
// clrFVGActivatedBar,
// styleFVGActivatedBar,
// widthFVGBreakedBar,
// clrFVGBreakedBar,
// styleFVGBreakedBar,
// widthFVGWorkedBar,
// clrFVGWorkedBar,
// styleFVGWorkedBar //
// );
// has = IsValidSize(fvgsCount);
// if (has)
// {
// //
// Copy(
// tmpObjects,
// objects,
// false //
// );
// }
// }
// }
// //
Clean(tmpObjects); Clean(tmpObjects);
@@ -69,6 +69,7 @@ enum ENUM_X_CYCLE_EVENTS
VALE_PIVOT_ENDED, VALE_PIVOT_ENDED,
}; };
//
class XC121SMCCycleHelper : public XCBase class XC121SMCCycleHelper : public XCBase
{ {
// //
@@ -676,3 +677,403 @@ class XC121SMCCycleHelper : public XCBase
// //
}; };
//
struct X121SMCStrategySignalProviderData
{
//
// Props ...
//
// Decision ...
XPOIState decisionState;
double decisionBullishScore;
double decisionBearishScore;
X121Conditions decisionXConditions;
ENUM_XPOI_EVENTS decisionPoiEvents[];
XC121SMCCycleHelper *decisionCycleHelper;
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
//
// Analyse ...
XPOIState analyseState;
double analyseBullishScore;
double analyseBearishScore;
X121Conditions analyseXConditions;
ENUM_XPOI_EVENTS analysePoiEvents[];
XC121SMCCycleHelper *analyseCycleHelper;
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
//
// Consolidation ...
XPOIState consolidationState;
double consolidationBullishScore;
double consolidationBearishScore;
X121Conditions consolidationXConditions;
ENUM_XPOI_EVENTS consolidationPoiEvents[];
XC121SMCCycleHelper *consolidationCycleHelper;
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
//
// Vision ...
XPOIState visionState;
double visionBullishScore;
double visionBearishScore;
X121Conditions visionXConditions;
ENUM_XPOI_EVENTS visionPoiEvents[];
XC121SMCCycleHelper *visionCycleHelper;
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
//
// Constructor ...
X121SMCStrategySignalProviderData()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
// Decision ...
decisionState.Clean();
decisionBullishScore = 0;
decisionBearishScore = 0;
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
decisionConditions.Clean();
decisionXConditions.Clean();
//
// Analyse ...
analyseState.Clean();
analyseBullishScore = 0;
analyseBearishScore = 0;
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
analyseConditions.Clean();
analyseXConditions.Clean();
//
// Consolidation ...
consolidationState.Clean();
consolidationBullishScore = 0;
consolidationBearishScore = 0;
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
consolidationConditions.Clean();
consolidationXConditions.Clean();
//
// Vision ...
visionState.Clean();
visionBullishScore = 0;
visionBearishScore = 0;
Clean(visionPoiEvents);
Clean(visionCycleEvents);
visionConditions.Clean();
visionXConditions.Clean();
}
//
void Destroy()
{
//
Clean();
//
ZeroMemory(decisionCycleHelper);
ZeroMemory(analyseCycleHelper);
ZeroMemory(consolidationCycleHelper);
ZeroMemory(visionCycleHelper);
//
ZeroMemory(this);
}
//
bool IsValid()
{
//
bool result = false;
//
result =
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL;
//
return result;
}
//
// Initialize ...
bool Init(
XC121SMCCycleHelper *_decisionCycleHelper,
XC121SMCCycleHelper *_analyseCycleHelper,
XC121SMCCycleHelper *_consolidationCycleHelper,
XC121SMCCycleHelper *_visionCycleHelper //
)
{
//
bool result = false;
//
// Validate Cycle Helpers ...
result =
//
_visionCycleHelper != NULL &&
_analyseCycleHelper != NULL &&
_decisionCycleHelper != NULL &&
_consolidationCycleHelper != NULL
//
;
if (!result)
{
return result;
}
//
visionCycleHelper = _visionCycleHelper;
analyseCycleHelper = _analyseCycleHelper;
decisionCycleHelper = _decisionCycleHelper;
consolidationCycleHelper = _consolidationCycleHelper;
//
result = IsValid();
//
return result;
}
//
// Prepare all ...
bool Prepare(
int barIndex = 0,
int loopback = 10 //
)
{
//
bool result = false;
//
if (barIndex < 0)
{
barIndex = 0;
}
//
if (loopback < 7)
{
loopback = 7;
}
//
result = IsValid();
if (!result)
{
return result;
}
//
// Decision ...
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
barIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
return result;
}
//
// Analyse ...
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
barIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
return result;
}
//
// Consolidation ...
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
barIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
return result;
}
//
// Vision ...
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
barIndex,
loopback //
);
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();
//
return result;
}
//
// Cycles POI States ...
decisionState = decisionConditions.state;
analyseState = analyseConditions.state;
consolidationState = consolidationConditions.state;
visionState = visionConditions.state;
//
// Cycle X121Conditions ...
decisionXConditions = decisionConditions.x121Conditions;
analyseXConditions = analyseConditions.x121Conditions;
consolidationXConditions = consolidationConditions.x121Conditions;
visionXConditions = visionConditions.x121Conditions;
//
// Decision ...
decisionXConditions.GenerateScore(
decisionBullishScore,
decisionBearishScore //
);
//
// Analyse ...
analyseXConditions.GenerateScore(
analyseBullishScore,
analyseBearishScore //
);
//
// Consolidation ...
consolidationXConditions.GenerateScore(
consolidationBullishScore,
consolidationBearishScore //
);
//
// Vision ...
visionXConditions.GenerateScore(
visionBullishScore,
visionBearishScore //
);
//
return result;
}
//
void MaxRequiredPOIs(int value)
{
//
if (!IsValid())
{
return;
}
//
visionCycleHelper.mPOIDetector.MaxRequiredPOIs(value);
analyseCycleHelper.mPOIDetector.MaxRequiredPOIs(value);
decisionCycleHelper.mPOIDetector.MaxRequiredPOIs(value);
consolidationCycleHelper.mPOIDetector.MaxRequiredPOIs(value);
}
//
void MaxAllowedLoopbackForInit(int value)
{
//
if (!IsValid())
{
return;
}
//
visionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(value);
analyseCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(value);
decisionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(value);
consolidationCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(value);
}
//
};
File diff suppressed because it is too large Load Diff
+68 -601
View File
@@ -66,10 +66,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Detect Setup Conditions ... // Detect Setup Conditions ...
bool DetectSignalSetup( bool DetectSignalSetup(
// //
XC121SMCCycleHelper *decisionCycleHelper, X121SMCStrategySignalProviderData &provider,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
// //
double maxAllowedSLDistanceInPoint = 300 double maxAllowedSLDistanceInPoint = 300
// //
@@ -80,14 +77,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Validate Cycle Helpers ... // Validate Cycle Helpers ...
result = result = provider.IsValid();
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
//
;
if (!result) if (!result)
{ {
// //
@@ -122,10 +112,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Cycles Conditions ... // Cycles Conditions ...
result = provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
//
mConditions.Clean();
return result;
}
//
// Select Drawer Class ...
XCPOIDrawer *drawer = provider.visionCycleHelper.mPOIDrawer;
// //
XOHCL consolidationZBar; XOHCL consolidationZBar;
result = consolidationCycleHelper.GetBar( result = provider.consolidationCycleHelper.GetBar(
consolidationZBar, consolidationZBar,
zIndex // zIndex //
); );
@@ -143,189 +147,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
DrawBar( DrawBar(
consolidationZBar, consolidationZBar,
decisionCycleHelper.mPOIDrawer // drawer //
); );
} }
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
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;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
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;
}
//
// Cycles POI States ...
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
// Cycle X121Conditions ...
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
X121Conditions visionXConditions = visionConditions.x121Conditions;
//
// Select Drawer Class ...
XCPOIDrawer *drawer = visionCycleHelper.mPOIDrawer;
//
// Scores ...
//
// Decision ...
double decisionBullishScore = 0;
double decisionBearishScore = 0;
decisionXConditions.GenerateScore(
decisionBullishScore,
decisionBearishScore //
);
//
// Analyse ...
double analyseBullishScore = 0;
double analyseBearishScore = 0;
analyseXConditions.GenerateScore(
analyseBullishScore,
analyseBearishScore //
);
// //
// //
// //
@@ -350,7 +175,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
ENUM_X_DIRECTION wzOveralDir = X_DIRECTION_NONE; ENUM_X_DIRECTION wzOveralDir = X_DIRECTION_NONE;
ENUM_X_DIRECTION signalBoxDir = X_DIRECTION_NONE; ENUM_X_DIRECTION signalBoxDir = X_DIRECTION_NONE;
ENUM_X121SMC_XWZ_PRIORITY priority = X121SMC_XWZ_PRIORITY_NONE; ENUM_X121SMC_XWZ_PRIORITY priority = X121SMC_XWZ_PRIORITY_NONE;
ENUM_X121SMC_XWZ_PROVIDERS provider = X121SMC_XWZ_PROVIDER_NONE; ENUM_X121SMC_XWZ_PROVIDERS signalProvider = X121SMC_XWZ_PROVIDER_NONE;
// //
// //
@@ -366,10 +191,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
symbol, symbol,
period, period,
zIndex, zIndex,
visionState, provider //
consolidationState,
analyseState,
decisionState //
); );
} }
@@ -379,17 +201,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
{ {
// //
// Reset POI Detector Required POI(s) ... // Reset POI Detector Required POI(s) ...
visionCycleHelper.mPOIDetector.MaxRequiredPOIs(50); provider.MaxRequiredPOIs(50);
analyseCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
decisionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
consolidationCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
// //
// Reset POI Detector Allowed Loopback ... // Reset POI Detector Allowed Loopback ...
visionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578); provider.MaxAllowedLoopbackForInit(578);
analyseCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
decisionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
consolidationCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
// //
// Check Working Zone Overal Direction ... // Check Working Zone Overal Direction ...
@@ -399,14 +215,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
hasWaitingZones = workingZone.DetectZone( hasWaitingZones = workingZone.DetectZone(
drawer, drawer,
// provider //
consolidationPoiEvents,
analysePoiEvents,
consolidationPoiEvents,
//
consolidationState,
analyseState,
consolidationState //
); );
if (hasWaitingZones) if (hasWaitingZones)
{ {
@@ -435,34 +244,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Cleanup Resources ... // Cleanup Resources ...
Clean(visionPoiEvents); provider.Clean();
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(); mConditions.Clean();
@@ -478,9 +260,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasSignalBox = hasSignalBox =
hasWorkingZone && hasWorkingZone &&
hasWaitingZones && hasWaitingZones &&
workingZone.IsZoneValidForSignal( workingZone.IsZoneActivated(
activatedZone, activatedZone,
decisionXConditions, provider,
zIndex // zIndex //
); );
if (hasSignalBox) if (hasSignalBox)
@@ -493,7 +275,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
signalBox.to = cTime; signalBox.to = cTime;
signalBoxDir = signalBox.dir; signalBoxDir = signalBox.dir;
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE; signalProvider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
// //
int idx = FindIndex( int idx = FindIndex(
@@ -950,7 +732,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
mConditions.setupTime = cTime; mConditions.setupTime = cTime;
mConditions.dir = signalBoxDir; mConditions.dir = signalBoxDir;
mConditions.priority = priority; mConditions.priority = priority;
mConditions.provider = provider; mConditions.provider = signalProvider;
mConditions.signalBox = signalBox; mConditions.signalBox = signalBox;
mConditions.amountPercent = amountPercent; mConditions.amountPercent = amountPercent;
} }
@@ -993,34 +775,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
Clean(targets); Clean(targets);
// //
Clean(visionPoiEvents); provider.Clean();
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();
// //
signalBox.Clean(); signalBox.Clean();
@@ -1037,10 +792,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
X121SMCStrategyXWZSignalConditions &conditions, X121SMCStrategyXWZSignalConditions &conditions,
// //
XC121SMCCycleHelper *decisionCycleHelper, X121SMCStrategySignalProviderData &provider,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
// //
int maxAllowedSetupAge = 60 int maxAllowedSetupAge = 60
// //
@@ -1052,10 +804,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
result = result =
// //
visionCycleHelper != NULL && provider.IsValid()
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
// //
; ;
if (!result) if (!result)
@@ -1095,77 +844,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
// Cycles Conditions ... // Cycles Conditions ...
result = provider.Prepare(
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex, zIndex,
loopback // loopback //
); );
if (!result) if (!result)
{ {
//
// Cleanup ...
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
return result; return result;
} }
// //
// Analyse ... double iAtr = provider.decisionXConditions.atrBuffer[1];
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
return result;
}
//
// Cycles POI States ...
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
//
// Cycle X121Conditions ...
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
//
double iAtr = decisionXConditions.atrBuffer[1];
iAtr *= 1.5; iAtr *= 1.5;
// //
@@ -1193,22 +882,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup ... // Cleanup ...
// //
Clean(decisionPoiEvents); provider.Clean();
Clean(decisionCycleEvents);
//
decisionState.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseState.Clean();
analyseConditions.Clean();
analyseXConditions.Clean();
// //
return result; return result;
@@ -1221,10 +895,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
X121SMCGuard &guards[], X121SMCGuard &guards[],
const XPosition &positions[], const XPosition &positions[],
// //
XC121SMCCycleHelper *decisionCycleHelper, X121SMCStrategySignalProviderData &provider
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
// //
) )
{ {
@@ -1238,20 +909,36 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
bool isCycleHelpersValid = bool isCycleHelpersValid =
// //
visionCycleHelper != NULL && provider.IsValid()
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
// //
; ;
// //
// Set Provider for Common Guards ... // Set Provider for Common Guards ...
string provider = ToString(X_121_SMC_PROVIDER_XWZ); string signalProvider = ToString(X_121_SMC_PROVIDER_XWZ);
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
double points = GetPoints(symbol);
// //
// Check Cycle Helpers Validation ... // Check Cycle Helpers Validation ...
result = isCycleHelpersValid; result = isCycleHelpersValid &&
provider.Prepare(
zIndex,
loopback //
);
if (!result) if (!result)
{ {
return result; return result;
@@ -1277,7 +964,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bool isOwn = iPosition bool isOwn = iPosition
.IsFiltersPassed( .IsFiltersPassed(
symbol, symbol,
provider, signalProvider,
NULL, NULL,
X_POSITION_TYPE_ALL, X_POSITION_TYPE_ALL,
iPosition.magic // iPosition.magic //
@@ -1351,13 +1038,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
X_121_SMC_GUARD_ACTION_TRAIL_STOP // X_121_SMC_GUARD_ACTION_TRAIL_STOP //
}; };
result = DetectX121SMCGuards( result = DetectX121SMCGuards(
provider, signalProvider,
guards, guards,
positions, positions,
decisionCycleHelper, provider,
analyseCycleHelper,
consolidationCycleHelper,
visionCycleHelper,
// //
ignoreGuards ignoreGuards
// //
@@ -1374,191 +1058,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Here we Are Sure there is Positions to Guard ... // Here we Are Sure there is Positions to Guard ...
// based on Current Provider ... // based on Current Provider ...
//
// Detect Required Data for Analyse Market to Guard Positions ...
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
double points = GetPoints(symbol);
//
// Cycles Conditions ...
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.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)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.Clean();
//
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
//
consolidationConditions.Clean();
//
result = HasChild(guards);
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 ...
XPOIState visionState = visionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState consolidationState = consolidationConditions.state;
//
// Cycle X121Conditions ...
X121Conditions visionXConditions = visionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
//
//
//
// //
// Selected Consolidation Zones ... // Selected Consolidation Zones ...
@@ -1569,30 +1068,30 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
bool hasBullishConsolidationZone = false; bool hasBullishConsolidationZone = false;
XConsolidationZone bullishConsolidationZone; XConsolidationZone bullishConsolidationZone;
has = decisionState.HasBullishConsolidationZones(); has = provider.decisionState.HasBullishConsolidationZones();
if (has) if (has)
{ {
// //
idx = GetYoungest(decisionState.bullishConsolidationZones); idx = GetYoungest(provider.decisionState.bullishConsolidationZones);
hasBullishConsolidationZone = IsValidIndex(idx); hasBullishConsolidationZone = IsValidIndex(idx);
if (hasBullishConsolidationZone) if (hasBullishConsolidationZone)
{ {
bullishConsolidationZone = decisionState.bullishConsolidationZones[idx]; bullishConsolidationZone = provider.decisionState.bullishConsolidationZones[idx];
} }
} }
// //
bool hasBearishConsolidationZone = false; bool hasBearishConsolidationZone = false;
XConsolidationZone bearishConsolidationZone; XConsolidationZone bearishConsolidationZone;
has = decisionState.HasBearishConsolidationZones(); has = provider.decisionState.HasBearishConsolidationZones();
if (has) if (has)
{ {
// //
idx = GetYoungest(decisionState.bearishConsolidationZones); idx = GetYoungest(provider.decisionState.bearishConsolidationZones);
hasBearishConsolidationZone = IsValidIndex(idx); hasBearishConsolidationZone = IsValidIndex(idx);
if (hasBearishConsolidationZone) if (hasBearishConsolidationZone)
{ {
bearishConsolidationZone = decisionState.bearishConsolidationZones[idx]; bearishConsolidationZone = provider.decisionState.bearishConsolidationZones[idx];
} }
} }
@@ -1709,7 +1208,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// //
iGuard.time = cTime; iGuard.time = cTime;
iGuard.symbol = symbol; iGuard.symbol = symbol;
iGuard.provider = provider; iGuard.provider = signalProvider;
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP; iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
// //
@@ -1738,39 +1237,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup Collections ... // Cleanup Collections ...
// //
Clean(ownPositions); provider.Clean();
Clean(ownLongPositions);
Clean(ownShortPositions);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
// //
count = ArraySize(guards); count = ArraySize(guards);
+61 -265
View File
@@ -139,10 +139,7 @@ struct X121SMCStrategyXWZWorkingZone
string _symbol, string _symbol,
ENUM_TIMEFRAMES _period, ENUM_TIMEFRAMES _period,
int barIndex, int barIndex,
XPOIState &htfState, X121SMCStrategySignalProviderData &provider //
XPOIState &mtfState,
XPOIState &stfState, //
XPOIState &ttfState //
) )
{ {
// //
@@ -160,15 +157,7 @@ struct X121SMCStrategyXWZWorkingZone
IsValid(_symbol) && IsValid(_symbol) &&
IsValid(_period) && IsValid(_period) &&
// //
htfState.IsValid() && provider.IsValid()
mtfState.IsValid() &&
stfState.IsValid() &&
ttfState.IsValid() &&
//
htfState.HasChild() &&
mtfState.HasChild() &&
stfState.HasChild() &&
ttfState.HasChild()
// //
; ;
if (!result) if (!result)
@@ -208,12 +197,17 @@ struct X121SMCStrategyXWZWorkingZone
if (!has) if (!has)
{ {
// //
idx = GetHighest(mtfState.supplyZones); idx = GetHighest(provider
.consolidationState
.supplyZones //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
supplyZone = mtfState.supplyZones[idx]; supplyZone = provider
.consolidationState
.supplyZones[idx];
has = hh5 < supplyZone.Lower(); has = hh5 < supplyZone.Lower();
if (!has) if (!has)
{ {
@@ -228,12 +222,17 @@ struct X121SMCStrategyXWZWorkingZone
if (!has) if (!has)
{ {
// //
idx = GetLowest(mtfState.demandZones); idx = GetLowest(provider
.consolidationState
.demandZones //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
demandZone = mtfState.demandZones[idx]; demandZone = provider
.consolidationState
.demandZones[idx];
has = ll5 > demandZone.Upper(); has = ll5 > demandZone.Upper();
if (!has) if (!has)
{ {
@@ -275,12 +274,7 @@ struct X121SMCStrategyXWZWorkingZone
// //
bool DetectZone( bool DetectZone(
XCPOIDrawer *drawer, XCPOIDrawer *drawer,
ENUM_XPOI_EVENTS &obPOIEvents[], X121SMCStrategySignalProviderData &provider //
ENUM_XPOI_EVENTS &fvgPOIEvents[],
ENUM_XPOI_EVENTS &supDemPOIEvents[],
XPOIState &obState,
XPOIState &fvgState,
XPOIState &supDemState //
) )
{ {
// //
@@ -288,13 +282,7 @@ struct X121SMCStrategyXWZWorkingZone
// //
result = IsValid() && result = IsValid() &&
obState.IsValid() && provider.IsValid();
fvgState.IsValid() &&
supDemState.IsValid() &&
obState.HasOrderBlocks() &&
fvgState.HasFairValueGaps() &&
supDemState.HasSupplyZones() &&
supDemState.HasDemandZones();
if (!result) if (!result)
{ {
return result; return result;
@@ -323,17 +311,22 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewSupply = bool hasNewSupply =
Contains( Contains(
X_SUPPLY_ZONE_DETECTED, X_SUPPLY_ZONE_DETECTED,
supDemPOIEvents // provider.consolidationPoiEvents //
); );
if (hasNewSupply) if (hasNewSupply)
{ {
// //
idx = GetYoungest(supDemState.supplyZones); idx = GetYoungest(provider
.consolidationState
.supplyZones //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
supply = supDemState.supplyZones[idx]; supply = provider
.consolidationState
.supplyZones[idx];
has = ToBox( has = ToBox(
supplyBox, supplyBox,
supply // supply //
@@ -353,17 +346,23 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewDemand = bool hasNewDemand =
Contains( Contains(
X_DEMAND_ZONE_DETECTED, X_DEMAND_ZONE_DETECTED,
supDemPOIEvents // provider
.consolidationPoiEvents //
); );
if (hasNewDemand) if (hasNewDemand)
{ {
// //
idx = GetYoungest(supDemState.demandZones); idx = GetYoungest(provider
.consolidationState
.demandZones //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
demand = supDemState.demandZones[idx]; demand = provider
.consolidationState
.demandZones[idx];
has = ToBox( has = ToBox(
demandBox, demandBox,
demand // demand //
@@ -383,21 +382,28 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewFairValueGap = bool hasNewFairValueGap =
Contains( Contains(
X_BULLISH_FVG_DETECTED, X_BULLISH_FVG_DETECTED,
fvgPOIEvents // provider
.analysePoiEvents //
) || ) ||
Contains( Contains(
X_BEARISH_FVG_DETECTED, X_BEARISH_FVG_DETECTED,
fvgPOIEvents // provider
.analysePoiEvents //
); );
if (hasNewFairValueGap) if (hasNewFairValueGap)
{ {
// //
idx = GetYoungest(fvgState.fairValueGaps); idx = GetYoungest(provider
.analyseState
.fairValueGaps //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
fvg = fvgState.fairValueGaps[idx]; fvg = provider
.analyseState
.fairValueGaps[idx];
has = ToBox( has = ToBox(
fvgBox, fvgBox,
fvg // fvg //
@@ -417,21 +423,28 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewOrderBlock = bool hasNewOrderBlock =
Contains( Contains(
X_BULLISH_ORDERBLOCK_DETECTED, X_BULLISH_ORDERBLOCK_DETECTED,
obPOIEvents // provider
.consolidationPoiEvents //
) || ) ||
Contains( Contains(
X_BEARISH_ORDERBLOCK_DETECTED, X_BEARISH_ORDERBLOCK_DETECTED,
obPOIEvents // provider
.consolidationPoiEvents //
); );
if (hasNewOrderBlock) if (hasNewOrderBlock)
{ {
// //
idx = GetYoungest(obState.orderBlocks); idx = GetYoungest(provider
.consolidationState
.orderBlocks //
);
has = IsValidIndex(idx); has = IsValidIndex(idx);
if (has) if (has)
{ {
// //
ob = obState.orderBlocks[idx]; ob = provider
.consolidationState
.orderBlocks[idx];
has = ToBox( has = ToBox(
obBox, obBox,
ob // ob //
@@ -683,226 +696,9 @@ struct X121SMCStrategyXWZWorkingZone
} }
// //
bool IsZoneRejected( bool IsZoneActivated(
XOBFVG &zone, XOBFVG &zone,
int barIndex = 0 // X121SMCStrategySignalProviderData &provider,
)
{
//
bool result = false;
//
// Cleanup Result ...
zone.Clean();
//
// Normalize Bar Index ...
if (barIndex < 0)
{
barIndex = 0;
}
//
// Validate ...
result = IsValid() &&
HasWaitingZones();
if (!result)
{
return result;
}
//
// Detecting Rejected Waiting Zone ...
int count = CountWaitingZones();
for (int i = 0; i < count; i++)
{
//
// Detecting XBoxZone Area of Waiting Zone ...
XBoxZone iBox;
bool hasBox = waitingZones[i]
.ToZone(iBox);
if (hasBox)
{
//
// Check Zone Rejection ...
int fromIDX = iBarShift(
iBox.symbol,
period,
iBox.from //
);
bool has = IsValidIndex(fromIDX);
if (has)
{
//
// Looking for Rejection ...
bool isBullish = iBox.IsBullish();
for (int j = barIndex; j < fromIDX; j++)
{
//
XOHCL iBar;
has = iBar.Init(
iBox.symbol,
period,
j //
);
if (has)
{
//
// Checking Box Rejected ...
//
bool isLowerReject =
//
isBullish &&
(iBar.low < iBox.upper &&
iBar.GetDown() > iBox.upper)
//
;
//
bool isUpperReject =
//
!isBullish &&
(iBar.high > iBox.lower &&
iBar.GetUp() < iBox.lower)
//
;
//
bool isRejected =
isLowerReject ||
isUpperReject;
result = isRejected;
if (result)
{
//
iBar.Clean();
break;
}
}
//
iBar.Clean();
}
}
}
//
// Validate Result ...
if (result)
{
//
iBox.Clean();
zone = waitingZones[i];
break;
}
//
iBox.Clean();
}
//
return result;
}
//
// TODO: Remove this ...
bool IsZoneOBRejected(
XOBFVG &zone,
X121Conditions &conditions,
int barIndex = 0 //
)
{
//
bool result = false;
//
// Cleanup Result ...
zone.Clean();
//
// Normalize Bar Index ...
if (barIndex < 0)
{
barIndex = 0;
}
//
if (barIndex == 0)
{
barIndex = 1;
}
//
XOHCL bar;
bool isInited = bar.Init(
symbol,
period,
barIndex //
);
//
// Validate ...
result = isInited &&
IsValid() &&
HasWaitingZones();
if (!result)
{
return result;
}
//
double points = GetPoints(bar.symbol);
//
// Detecting Rejected Waiting Zone ...
int count = CountWaitingZones();
for (int i = 0; i < count; i++)
{
//
// Detecting XBoxZone Area of Waiting Zone ...
XBoxZone iBox;
bool hasBox = waitingZones[i]
.ToZone(iBox);
if (hasBox)
{
//
double peak = conditions.peaksBuffer[1];
double lower = waitingZones[i].ob.Lower();
//
double delta = MathAbs(lower - peak);
//
result = delta == 0 ||
delta < points * 2;
}
//
// Validate Result ...
if (result)
{
//
iBox.Clean();
zone = waitingZones[i];
break;
}
//
iBox.Clean();
}
//
bar.Clean();
//
return result;
}
//
bool IsZoneValidForSignal(
XOBFVG &zone,
X121Conditions &conditions,
int barIndex = 0 // int barIndex = 0 //
) )
{ {
@@ -953,8 +749,8 @@ struct X121SMCStrategyXWZWorkingZone
} }
// //
double peak = conditions.peaksBuffer[1]; double peak = provider.decisionXConditions.peaksBuffer[1];
double vale = conditions.valesBuffer[1]; double vale = provider.decisionXConditions.valesBuffer[1];
// //
int count = CountWaitingZones(); int count = CountWaitingZones();
+16 -12
View File
@@ -43,6 +43,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// Props ... // Props ...
bool useXWZSignal; bool useXWZSignal;
XCX121SMCXWZSignalDetector *mXWZSignalDetector; XCX121SMCXWZSignalDetector *mXWZSignalDetector;
X121SMCStrategySignalProviderData cycleProvider;
// //
// Constructor(s) ... // Constructor(s) ...
@@ -117,6 +118,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
ZeroMemory(mXWZSignalDetector); ZeroMemory(mXWZSignalDetector);
//
cycleProvider.Destroy();
} }
/** /**
@@ -417,10 +421,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasGuard = mXWZSignalDetector.DetectGuards( bool hasGuard = mXWZSignalDetector.DetectGuards(
xwzGuards, xwzGuards,
positions, positions,
mDecisionCycleHelper, cycleProvider //
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
); );
// //
@@ -540,10 +541,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// //
// Detect Signal Setup ... // Detect Signal Setup ...
isSetuped = mXWZSignalDetector.DetectSignalSetup( isSetuped = mXWZSignalDetector.DetectSignalSetup(
mDecisionCycleHelper, cycleProvider //
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
); );
// //
@@ -592,10 +590,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
canTrigger = mXWZSignalDetector canTrigger = mXWZSignalDetector
.DetectSignalTrigger( .DetectSignalTrigger(
mTmpConditions[i], mTmpConditions[i],
mDecisionCycleHelper, cycleProvider //
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
); );
// //
@@ -1051,6 +1046,15 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mVisionCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor); mVisionCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mVisionCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor); mVisionCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
} }
//
// Initial Cycle Provider ...
cycleProvider.Init(
mDecisionCycleHelper,
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
} }
// //