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