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 ...
has = item.HasFVGs();
if (has &&
drawFairValueGaps)
XCFVG *fvg;
has = item.GetMainFVG(fvg);
if (has)
{
//
count = item.CountFVGs();
for (int i = 0; i < count; i++)
Clean(tmpObjects);
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);
int fvgsCount = DrawFairValueGap(
item.fvgs[i],
Copy(
tmpObjects,
drawFVGStartedBar,
drawFVGActivatedBar,
drawFVGBreakedBar,
drawFVGWorkedBar,
widthFVGStartedBar,
clrFVGStartedBar,
styleFVGStartedBar,
widthFVGActivatedBar,
clrFVGActivatedBar,
styleFVGActivatedBar,
widthFVGBreakedBar,
clrFVGBreakedBar,
styleFVGBreakedBar,
widthFVGWorkedBar,
clrFVGWorkedBar,
styleFVGWorkedBar //
objects,
false //
);
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);
@@ -69,6 +69,7 @@ enum ENUM_X_CYCLE_EVENTS
VALE_PIVOT_ENDED,
};
//
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 ...
bool DetectSignalSetup(
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
X121SMCStrategySignalProviderData &provider,
//
double maxAllowedSLDistanceInPoint = 300
//
@@ -80,14 +77,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Validate Cycle Helpers ...
result =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
//
;
result = provider.IsValid();
if (!result)
{
//
@@ -122,10 +112,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cycles Conditions ...
result = provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
//
mConditions.Clean();
return result;
}
//
// Select Drawer Class ...
XCPOIDrawer *drawer = provider.visionCycleHelper.mPOIDrawer;
//
XOHCL consolidationZBar;
result = consolidationCycleHelper.GetBar(
result = provider.consolidationCycleHelper.GetBar(
consolidationZBar,
zIndex //
);
@@ -143,189 +147,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
DrawBar(
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 signalBoxDir = X_DIRECTION_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,
period,
zIndex,
visionState,
consolidationState,
analyseState,
decisionState //
provider //
);
}
@@ -379,17 +201,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
{
//
// Reset POI Detector Required POI(s) ...
visionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
analyseCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
decisionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
consolidationCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
provider.MaxRequiredPOIs(50);
//
// Reset POI Detector Allowed Loopback ...
visionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
analyseCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
decisionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
consolidationCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
provider.MaxAllowedLoopbackForInit(578);
//
// Check Working Zone Overal Direction ...
@@ -399,14 +215,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
hasWaitingZones = workingZone.DetectZone(
drawer,
//
consolidationPoiEvents,
analysePoiEvents,
consolidationPoiEvents,
//
consolidationState,
analyseState,
consolidationState //
provider //
);
if (hasWaitingZones)
{
@@ -435,34 +244,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cleanup Resources ...
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
provider.Clean();
//
mConditions.Clean();
@@ -478,9 +260,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasSignalBox =
hasWorkingZone &&
hasWaitingZones &&
workingZone.IsZoneValidForSignal(
workingZone.IsZoneActivated(
activatedZone,
decisionXConditions,
provider,
zIndex //
);
if (hasSignalBox)
@@ -493,7 +275,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
signalBox.to = cTime;
signalBoxDir = signalBox.dir;
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
signalProvider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
//
int idx = FindIndex(
@@ -950,7 +732,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
mConditions.setupTime = cTime;
mConditions.dir = signalBoxDir;
mConditions.priority = priority;
mConditions.provider = provider;
mConditions.provider = signalProvider;
mConditions.signalBox = signalBox;
mConditions.amountPercent = amountPercent;
}
@@ -993,34 +775,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
Clean(targets);
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
provider.Clean();
//
signalBox.Clean();
@@ -1037,10 +792,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
X121SMCStrategyXWZSignalConditions &conditions,
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
X121SMCStrategySignalProviderData &provider,
//
int maxAllowedSetupAge = 60
//
@@ -1052,10 +804,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
result =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
provider.IsValid()
//
;
if (!result)
@@ -1095,77 +844,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cycles Conditions ...
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
result = provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
//
// Cleanup ...
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.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();
//
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];
double iAtr = provider.decisionXConditions.atrBuffer[1];
iAtr *= 1.5;
//
@@ -1193,22 +882,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup ...
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionState.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseState.Clean();
analyseConditions.Clean();
analyseXConditions.Clean();
provider.Clean();
//
return result;
@@ -1221,10 +895,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
X121SMCGuard &guards[],
const XPosition &positions[],
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
X121SMCStrategySignalProviderData &provider
//
)
{
@@ -1238,20 +909,36 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
bool isCycleHelpersValid =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
provider.IsValid()
//
;
//
// 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 ...
result = isCycleHelpersValid;
result = isCycleHelpersValid &&
provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
return result;
@@ -1277,7 +964,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bool isOwn = iPosition
.IsFiltersPassed(
symbol,
provider,
signalProvider,
NULL,
X_POSITION_TYPE_ALL,
iPosition.magic //
@@ -1351,13 +1038,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
X_121_SMC_GUARD_ACTION_TRAIL_STOP //
};
result = DetectX121SMCGuards(
provider,
signalProvider,
guards,
positions,
decisionCycleHelper,
analyseCycleHelper,
consolidationCycleHelper,
visionCycleHelper,
provider,
//
ignoreGuards
//
@@ -1374,191 +1058,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Here we Are Sure there is Positions to Guard ...
// 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 ...
@@ -1569,30 +1068,30 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
bool hasBullishConsolidationZone = false;
XConsolidationZone bullishConsolidationZone;
has = decisionState.HasBullishConsolidationZones();
has = provider.decisionState.HasBullishConsolidationZones();
if (has)
{
//
idx = GetYoungest(decisionState.bullishConsolidationZones);
idx = GetYoungest(provider.decisionState.bullishConsolidationZones);
hasBullishConsolidationZone = IsValidIndex(idx);
if (hasBullishConsolidationZone)
{
bullishConsolidationZone = decisionState.bullishConsolidationZones[idx];
bullishConsolidationZone = provider.decisionState.bullishConsolidationZones[idx];
}
}
//
bool hasBearishConsolidationZone = false;
XConsolidationZone bearishConsolidationZone;
has = decisionState.HasBearishConsolidationZones();
has = provider.decisionState.HasBearishConsolidationZones();
if (has)
{
//
idx = GetYoungest(decisionState.bearishConsolidationZones);
idx = GetYoungest(provider.decisionState.bearishConsolidationZones);
hasBearishConsolidationZone = IsValidIndex(idx);
if (hasBearishConsolidationZone)
{
bearishConsolidationZone = decisionState.bearishConsolidationZones[idx];
bearishConsolidationZone = provider.decisionState.bearishConsolidationZones[idx];
}
}
@@ -1709,7 +1208,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
iGuard.time = cTime;
iGuard.symbol = symbol;
iGuard.provider = provider;
iGuard.provider = signalProvider;
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
//
@@ -1738,39 +1237,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup Collections ...
//
Clean(ownPositions);
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);
provider.Clean();
//
count = ArraySize(guards);
+61 -265
View File
@@ -139,10 +139,7 @@ struct X121SMCStrategyXWZWorkingZone
string _symbol,
ENUM_TIMEFRAMES _period,
int barIndex,
XPOIState &htfState,
XPOIState &mtfState,
XPOIState &stfState, //
XPOIState &ttfState //
X121SMCStrategySignalProviderData &provider //
)
{
//
@@ -160,15 +157,7 @@ struct X121SMCStrategyXWZWorkingZone
IsValid(_symbol) &&
IsValid(_period) &&
//
htfState.IsValid() &&
mtfState.IsValid() &&
stfState.IsValid() &&
ttfState.IsValid() &&
//
htfState.HasChild() &&
mtfState.HasChild() &&
stfState.HasChild() &&
ttfState.HasChild()
provider.IsValid()
//
;
if (!result)
@@ -208,12 +197,17 @@ struct X121SMCStrategyXWZWorkingZone
if (!has)
{
//
idx = GetHighest(mtfState.supplyZones);
idx = GetHighest(provider
.consolidationState
.supplyZones //
);
has = IsValidIndex(idx);
if (has)
{
//
supplyZone = mtfState.supplyZones[idx];
supplyZone = provider
.consolidationState
.supplyZones[idx];
has = hh5 < supplyZone.Lower();
if (!has)
{
@@ -228,12 +222,17 @@ struct X121SMCStrategyXWZWorkingZone
if (!has)
{
//
idx = GetLowest(mtfState.demandZones);
idx = GetLowest(provider
.consolidationState
.demandZones //
);
has = IsValidIndex(idx);
if (has)
{
//
demandZone = mtfState.demandZones[idx];
demandZone = provider
.consolidationState
.demandZones[idx];
has = ll5 > demandZone.Upper();
if (!has)
{
@@ -275,12 +274,7 @@ struct X121SMCStrategyXWZWorkingZone
//
bool DetectZone(
XCPOIDrawer *drawer,
ENUM_XPOI_EVENTS &obPOIEvents[],
ENUM_XPOI_EVENTS &fvgPOIEvents[],
ENUM_XPOI_EVENTS &supDemPOIEvents[],
XPOIState &obState,
XPOIState &fvgState,
XPOIState &supDemState //
X121SMCStrategySignalProviderData &provider //
)
{
//
@@ -288,13 +282,7 @@ struct X121SMCStrategyXWZWorkingZone
//
result = IsValid() &&
obState.IsValid() &&
fvgState.IsValid() &&
supDemState.IsValid() &&
obState.HasOrderBlocks() &&
fvgState.HasFairValueGaps() &&
supDemState.HasSupplyZones() &&
supDemState.HasDemandZones();
provider.IsValid();
if (!result)
{
return result;
@@ -323,17 +311,22 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewSupply =
Contains(
X_SUPPLY_ZONE_DETECTED,
supDemPOIEvents //
provider.consolidationPoiEvents //
);
if (hasNewSupply)
{
//
idx = GetYoungest(supDemState.supplyZones);
idx = GetYoungest(provider
.consolidationState
.supplyZones //
);
has = IsValidIndex(idx);
if (has)
{
//
supply = supDemState.supplyZones[idx];
supply = provider
.consolidationState
.supplyZones[idx];
has = ToBox(
supplyBox,
supply //
@@ -353,17 +346,23 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewDemand =
Contains(
X_DEMAND_ZONE_DETECTED,
supDemPOIEvents //
provider
.consolidationPoiEvents //
);
if (hasNewDemand)
{
//
idx = GetYoungest(supDemState.demandZones);
idx = GetYoungest(provider
.consolidationState
.demandZones //
);
has = IsValidIndex(idx);
if (has)
{
//
demand = supDemState.demandZones[idx];
demand = provider
.consolidationState
.demandZones[idx];
has = ToBox(
demandBox,
demand //
@@ -383,21 +382,28 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewFairValueGap =
Contains(
X_BULLISH_FVG_DETECTED,
fvgPOIEvents //
provider
.analysePoiEvents //
) ||
Contains(
X_BEARISH_FVG_DETECTED,
fvgPOIEvents //
provider
.analysePoiEvents //
);
if (hasNewFairValueGap)
{
//
idx = GetYoungest(fvgState.fairValueGaps);
idx = GetYoungest(provider
.analyseState
.fairValueGaps //
);
has = IsValidIndex(idx);
if (has)
{
//
fvg = fvgState.fairValueGaps[idx];
fvg = provider
.analyseState
.fairValueGaps[idx];
has = ToBox(
fvgBox,
fvg //
@@ -417,21 +423,28 @@ struct X121SMCStrategyXWZWorkingZone
bool hasNewOrderBlock =
Contains(
X_BULLISH_ORDERBLOCK_DETECTED,
obPOIEvents //
provider
.consolidationPoiEvents //
) ||
Contains(
X_BEARISH_ORDERBLOCK_DETECTED,
obPOIEvents //
provider
.consolidationPoiEvents //
);
if (hasNewOrderBlock)
{
//
idx = GetYoungest(obState.orderBlocks);
idx = GetYoungest(provider
.consolidationState
.orderBlocks //
);
has = IsValidIndex(idx);
if (has)
{
//
ob = obState.orderBlocks[idx];
ob = provider
.consolidationState
.orderBlocks[idx];
has = ToBox(
obBox,
ob //
@@ -683,226 +696,9 @@ struct X121SMCStrategyXWZWorkingZone
}
//
bool IsZoneRejected(
bool IsZoneActivated(
XOBFVG &zone,
int barIndex = 0 //
)
{
//
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,
X121SMCStrategySignalProviderData &provider,
int barIndex = 0 //
)
{
@@ -953,8 +749,8 @@ struct X121SMCStrategyXWZWorkingZone
}
//
double peak = conditions.peaksBuffer[1];
double vale = conditions.valesBuffer[1];
double peak = provider.decisionXConditions.peaksBuffer[1];
double vale = provider.decisionXConditions.valesBuffer[1];
//
int count = CountWaitingZones();
+16 -12
View File
@@ -43,6 +43,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// Props ...
bool useXWZSignal;
XCX121SMCXWZSignalDetector *mXWZSignalDetector;
X121SMCStrategySignalProviderData cycleProvider;
//
// Constructor(s) ...
@@ -117,6 +118,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
ZeroMemory(mXWZSignalDetector);
//
cycleProvider.Destroy();
}
/**
@@ -417,10 +421,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
bool hasGuard = mXWZSignalDetector.DetectGuards(
xwzGuards,
positions,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
cycleProvider //
);
//
@@ -540,10 +541,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Detect Signal Setup ...
isSetuped = mXWZSignalDetector.DetectSignalSetup(
mDecisionCycleHelper,
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
cycleProvider //
);
//
@@ -592,10 +590,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
canTrigger = mXWZSignalDetector
.DetectSignalTrigger(
mTmpConditions[i],
mDecisionCycleHelper,
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
cycleProvider //
);
//
@@ -1051,6 +1046,15 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
mVisionCycleHelper.mPOIDrawer.BullishFVGColor(bullishColor);
mVisionCycleHelper.mPOIDrawer.BearishFVGColor(bearishColor);
}
//
// Initial Cycle Provider ...
cycleProvider.Init(
mDecisionCycleHelper,
mAnalyseCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
}
//