add support for Cycle Provider ...
This commit is contained in:
@@ -4695,18 +4695,14 @@ class XCPOIDrawer : public XCBase
|
||||
|
||||
//
|
||||
// Fair Value Gap ...
|
||||
has = item.HasFVGs();
|
||||
if (has &&
|
||||
drawFairValueGaps)
|
||||
{
|
||||
//
|
||||
count = item.CountFVGs();
|
||||
for (int i = 0; i < count; i++)
|
||||
XCFVG *fvg;
|
||||
has = item.GetMainFVG(fvg);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
int fvgsCount = DrawFairValueGap(
|
||||
item.fvgs[i],
|
||||
fvg,
|
||||
tmpObjects,
|
||||
drawFVGStartedBar,
|
||||
drawFVGActivatedBar,
|
||||
@@ -4736,7 +4732,50 @@ class XCPOIDrawer : public XCBase
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// //
|
||||
// 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
@@ -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();
|
||||
|
||||
@@ -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 //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user