add support for Cycle Provider ...

This commit is contained in:
2025-03-06 23:35:44 +03:30
parent 7e976bc157
commit 6157bbe125
6 changed files with 1488 additions and 1785 deletions
+68 -601
View File
@@ -66,10 +66,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Detect Setup Conditions ...
bool DetectSignalSetup(
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
X121SMCStrategySignalProviderData &provider,
//
double maxAllowedSLDistanceInPoint = 300
//
@@ -80,14 +77,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Validate Cycle Helpers ...
result =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
//
;
result = provider.IsValid();
if (!result)
{
//
@@ -122,10 +112,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cycles Conditions ...
result = provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
//
mConditions.Clean();
return result;
}
//
// Select Drawer Class ...
XCPOIDrawer *drawer = provider.visionCycleHelper.mPOIDrawer;
//
XOHCL consolidationZBar;
result = consolidationCycleHelper.GetBar(
result = provider.consolidationCycleHelper.GetBar(
consolidationZBar,
zIndex //
);
@@ -143,189 +147,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
DrawBar(
consolidationZBar,
decisionCycleHelper.mPOIDrawer //
drawer //
);
}
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
//
// Cycles POI States ...
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
// Cycle X121Conditions ...
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
X121Conditions visionXConditions = visionConditions.x121Conditions;
//
// Select Drawer Class ...
XCPOIDrawer *drawer = visionCycleHelper.mPOIDrawer;
//
// Scores ...
//
// Decision ...
double decisionBullishScore = 0;
double decisionBearishScore = 0;
decisionXConditions.GenerateScore(
decisionBullishScore,
decisionBearishScore //
);
//
// Analyse ...
double analyseBullishScore = 0;
double analyseBearishScore = 0;
analyseXConditions.GenerateScore(
analyseBullishScore,
analyseBearishScore //
);
//
//
//
@@ -350,7 +175,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
ENUM_X_DIRECTION wzOveralDir = X_DIRECTION_NONE;
ENUM_X_DIRECTION signalBoxDir = X_DIRECTION_NONE;
ENUM_X121SMC_XWZ_PRIORITY priority = X121SMC_XWZ_PRIORITY_NONE;
ENUM_X121SMC_XWZ_PROVIDERS provider = X121SMC_XWZ_PROVIDER_NONE;
ENUM_X121SMC_XWZ_PROVIDERS signalProvider = X121SMC_XWZ_PROVIDER_NONE;
//
//
@@ -366,10 +191,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
symbol,
period,
zIndex,
visionState,
consolidationState,
analyseState,
decisionState //
provider //
);
}
@@ -379,17 +201,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
{
//
// Reset POI Detector Required POI(s) ...
visionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
analyseCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
decisionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
consolidationCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
provider.MaxRequiredPOIs(50);
//
// Reset POI Detector Allowed Loopback ...
visionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
analyseCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
decisionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
consolidationCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
provider.MaxAllowedLoopbackForInit(578);
//
// Check Working Zone Overal Direction ...
@@ -399,14 +215,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
hasWaitingZones = workingZone.DetectZone(
drawer,
//
consolidationPoiEvents,
analysePoiEvents,
consolidationPoiEvents,
//
consolidationState,
analyseState,
consolidationState //
provider //
);
if (hasWaitingZones)
{
@@ -435,34 +244,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cleanup Resources ...
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
provider.Clean();
//
mConditions.Clean();
@@ -478,9 +260,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
hasSignalBox =
hasWorkingZone &&
hasWaitingZones &&
workingZone.IsZoneValidForSignal(
workingZone.IsZoneActivated(
activatedZone,
decisionXConditions,
provider,
zIndex //
);
if (hasSignalBox)
@@ -493,7 +275,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
signalBox.to = cTime;
signalBoxDir = signalBox.dir;
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
signalProvider = X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE;
//
int idx = FindIndex(
@@ -950,7 +732,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
mConditions.setupTime = cTime;
mConditions.dir = signalBoxDir;
mConditions.priority = priority;
mConditions.provider = provider;
mConditions.provider = signalProvider;
mConditions.signalBox = signalBox;
mConditions.amountPercent = amountPercent;
}
@@ -993,34 +775,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
Clean(targets);
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
provider.Clean();
//
signalBox.Clean();
@@ -1037,10 +792,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
X121SMCStrategyXWZSignalConditions &conditions,
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper,
X121SMCStrategySignalProviderData &provider,
//
int maxAllowedSetupAge = 60
//
@@ -1052,10 +804,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
result =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
provider.IsValid()
//
;
if (!result)
@@ -1095,77 +844,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Cycles Conditions ...
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
result = provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
//
// Cleanup ...
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
//
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
//
analyseConditions.Clean();
decisionConditions.Clean();
//
return result;
}
//
// Cycles POI States ...
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
//
// Cycle X121Conditions ...
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
//
double iAtr = decisionXConditions.atrBuffer[1];
double iAtr = provider.decisionXConditions.atrBuffer[1];
iAtr *= 1.5;
//
@@ -1193,22 +882,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup ...
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionState.Clean();
decisionConditions.Clean();
decisionXConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseState.Clean();
analyseConditions.Clean();
analyseXConditions.Clean();
provider.Clean();
//
return result;
@@ -1221,10 +895,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
X121SMCGuard &guards[],
const XPosition &positions[],
//
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
X121SMCStrategySignalProviderData &provider
//
)
{
@@ -1238,20 +909,36 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
bool isCycleHelpersValid =
//
visionCycleHelper != NULL &&
analyseCycleHelper != NULL &&
decisionCycleHelper != NULL &&
consolidationCycleHelper != NULL
provider.IsValid()
//
;
//
// Set Provider for Common Guards ...
string provider = ToString(X_121_SMC_PROVIDER_XWZ);
string signalProvider = ToString(X_121_SMC_PROVIDER_XWZ);
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
double points = GetPoints(symbol);
//
// Check Cycle Helpers Validation ...
result = isCycleHelpersValid;
result = isCycleHelpersValid &&
provider.Prepare(
zIndex,
loopback //
);
if (!result)
{
return result;
@@ -1277,7 +964,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
bool isOwn = iPosition
.IsFiltersPassed(
symbol,
provider,
signalProvider,
NULL,
X_POSITION_TYPE_ALL,
iPosition.magic //
@@ -1351,13 +1038,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
X_121_SMC_GUARD_ACTION_TRAIL_STOP //
};
result = DetectX121SMCGuards(
provider,
signalProvider,
guards,
positions,
decisionCycleHelper,
analyseCycleHelper,
consolidationCycleHelper,
visionCycleHelper,
provider,
//
ignoreGuards
//
@@ -1374,191 +1058,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Here we Are Sure there is Positions to Guard ...
// based on Current Provider ...
//
// Detect Required Data for Analyse Market to Guard Positions ...
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
double points = GetPoints(symbol);
//
// Cycles Conditions ...
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.Clean();
//
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
//
consolidationConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
//
Clean(decisionPoiEvents);
Clean(decisionCycleEvents);
//
decisionConditions.Clean();
//
Clean(analysePoiEvents);
Clean(analyseCycleEvents);
//
analyseConditions.Clean();
//
Clean(consolidationPoiEvents);
Clean(consolidationCycleEvents);
//
consolidationConditions.Clean();
//
Clean(visionPoiEvents);
Clean(visionCycleEvents);
//
visionConditions.Clean();
//
result = HasChild(guards);
return result;
}
//
// Cycles POI States ...
XPOIState visionState = visionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState consolidationState = consolidationConditions.state;
//
// Cycle X121Conditions ...
X121Conditions visionXConditions = visionConditions.x121Conditions;
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
//
//
//
//
// Selected Consolidation Zones ...
@@ -1569,30 +1068,30 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
bool hasBullishConsolidationZone = false;
XConsolidationZone bullishConsolidationZone;
has = decisionState.HasBullishConsolidationZones();
has = provider.decisionState.HasBullishConsolidationZones();
if (has)
{
//
idx = GetYoungest(decisionState.bullishConsolidationZones);
idx = GetYoungest(provider.decisionState.bullishConsolidationZones);
hasBullishConsolidationZone = IsValidIndex(idx);
if (hasBullishConsolidationZone)
{
bullishConsolidationZone = decisionState.bullishConsolidationZones[idx];
bullishConsolidationZone = provider.decisionState.bullishConsolidationZones[idx];
}
}
//
bool hasBearishConsolidationZone = false;
XConsolidationZone bearishConsolidationZone;
has = decisionState.HasBearishConsolidationZones();
has = provider.decisionState.HasBearishConsolidationZones();
if (has)
{
//
idx = GetYoungest(decisionState.bearishConsolidationZones);
idx = GetYoungest(provider.decisionState.bearishConsolidationZones);
hasBearishConsolidationZone = IsValidIndex(idx);
if (hasBearishConsolidationZone)
{
bearishConsolidationZone = decisionState.bearishConsolidationZones[idx];
bearishConsolidationZone = provider.decisionState.bearishConsolidationZones[idx];
}
}
@@ -1709,7 +1208,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
iGuard.time = cTime;
iGuard.symbol = symbol;
iGuard.provider = provider;
iGuard.provider = signalProvider;
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
//
@@ -1738,39 +1237,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
// Cleanup Collections ...
//
Clean(ownPositions);
Clean(ownLongPositions);
Clean(ownShortPositions);
//
visionState.Clean();
analyseState.Clean();
decisionState.Clean();
consolidationState.Clean();
//
visionConditions.Clean();
analyseConditions.Clean();
decisionConditions.Clean();
consolidationConditions.Clean();
//
visionXConditions.Clean();
analyseXConditions.Clean();
decisionXConditions.Clean();
consolidationXConditions.Clean();
//
Clean(visionPoiEvents);
Clean(analysePoiEvents);
Clean(decisionPoiEvents);
Clean(consolidationPoiEvents);
//
Clean(visionCycleEvents);
Clean(analyseCycleEvents);
Clean(decisionCycleEvents);
Clean(consolidationCycleEvents);
provider.Clean();
//
count = ArraySize(guards);