add support for Cycle Provider ...
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user