This commit is contained in:
2025-03-04 16:18:51 +03:30
parent ec006cd6b7
commit 52856ff815
4 changed files with 753 additions and 881 deletions
+168 -47
View File
@@ -329,6 +329,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Setup Conditions ...
double sls[];
double sl = 0;
double pivot = 0;
double point = 0;
double targets[];
@@ -339,10 +340,16 @@ class XCX121SMCXWZSignalDetector : public XCBase
bool hasSignalBox = false;
bool hasRewardAmount = false;
bool isSignalBoxReversal = false;
bool hasWorkingZoneOveralDirection = false;
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;
//
//
//
//
// First We Have to Has Working Zone ...
bool hasWorkingZone = workingZone.IsValid();
@@ -361,21 +368,25 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
// Update Working Zone ...
if (hasWorkingZone)
{
//
// Reset POI Detector Required POI(s) ...
visionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
analyseCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
decisionCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
consolidationCycleHelper.mPOIDetector.MaxRequiredPOIs(50);
//
// Reset POI Detector Allowed Loopback ...
visionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
analyseCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
decisionCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
consolidationCycleHelper.mPOIDetector.MaxAllowedLoopbackForInit(578);
//
// Update Working Zone ...
workingZone.Update(
zIndex,
visionState,
@@ -385,16 +396,63 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
//
bool isDestroyed = workingZone.IsDestroyed(
// Check Working Zone Overal Direction ...
hasWorkingZoneOveralDirection = workingZone
.DetectOveralDirection(wzOveralDir);
//
// Checking Working Zone Destory or not ...
bool isWorkingZoneDestroyed = workingZone.IsDestroyed(
zIndex,
period //
);
if (isDestroyed)
//
// Cleanup WorkingZone and ignore all conditions ...
if (isWorkingZoneDestroyed)
{
//
result = false;
workingZone.Clean();
hasWorkingZone = false;
//
// 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();
//
mConditions.Clean();
consolidationZBar.Clean();
//
return result;
}
}
@@ -513,17 +571,24 @@ class XCX121SMCXWZSignalDetector : public XCBase
//
// Remove Signal Box from Waiting Boxes of
// Working Zone ...
if (hasSignalBox &&
IsValidIndex(idx))
if (hasSignalBox)
{
//
ArrayRemove(
workingZone.waitingBoxes,
idx,
1 //
);
if (IsValidIndex(idx))
{
//
ArrayRemove(
workingZone.waitingBoxes,
idx,
1 //
);
}
}
//
// Ignore Zone's Signals ...
hasSignalBox = false;
//
// Cleanup Resources ...
@@ -555,8 +620,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
{
//
// Senari A ...
//
hasSignalBox = hasWorkingZone &&
workingZone.DetectSenarioASignalBox(
signalBox,
@@ -574,6 +637,55 @@ class XCX121SMCXWZSignalDetector : public XCBase
isSignalBoxReversal = false;
provider = X121SMC_XWZ_PROVIDER_PV_ZONE;
}
//
// Validating Signal Box if Exists ...
if (hasSignalBox)
{
//
// Validate Signal Boxes using Inside Box ...
if (hasInsideBoxes)
{
//
int idx = -1;
bool has = false;
//
idx =
IsBullish(signalBoxDir)
? GetLowest(workingZone.insideBoxes)
: GetHighest(workingZone.insideBoxes);
has = IsValidIndex(idx);
if (has)
{
//
hasSignalBox =
signalBoxDir == workingZone.insideBoxes[idx].dir;
}
}
//
// Validate Signal Box Using Overal Trend ...
if (hasWorkingZoneOveralDirection)
{
//
hasSignalBox =
signalBoxDir == wzOveralDir;
}
}
}
//
//
//
//
// Cleanup Signal if UnApproved ...
if (!hasSignalBox)
{
//
signalBox.Clean();
signalBoxDir = X_DIRECTION_NONE;
}
//
@@ -646,15 +758,54 @@ class XCX121SMCXWZSignalDetector : public XCBase
iSL = signalBox.lower + (signalBox.upper - signalBox.lower) / 2;
}
//
if (provider == X121SMC_XWZ_PROVIDER_PV_ZONE)
{
}
//
Add(
iSL,
sls //
);
//
// Select Condition SL ...
//
double entry = GetEntry(
signalBox.symbol,
signalBoxDir //
);
//
double slsMin = GetMin(sls);
double slsMax = GetMax(sls);
//
double longSL = slsMin;
double shortSL = slsMax;
//
sl = isBullish
? longSL
: shortSL;
//
// Targets ...
//
// Force Add TP 2 as Target ...
double risk = MathAbs(entry - sl);
double reward2 = 2 * risk;
double iTP2 = isBullish
? entry + reward2
: entry - reward2;
Add(
iTP2,
targets //
);
//
// Based On Priority ...
has = priority != X121SMC_XWZ_PRIORITY_NONE;
@@ -979,6 +1130,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
}
//
// Summarize Results ...
result = hasPriority &&
hasSignalBox &&
hasRewardAmount;
@@ -997,6 +1149,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
//
mConditions.sl = sl;
mConditions.pivot = pivot;
mConditions.point = point;
mConditions.reward = reward;
@@ -1032,6 +1185,10 @@ class XCX121SMCXWZSignalDetector : public XCBase
);
}
//
//
//
//
// Cleanup Resources ...
@@ -1222,42 +1379,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
if (result)
{
//
// Retrieve Entry Price ...
double entry = GetEntry(
conditions.symbol,
setupDir //
);
//
// Select and Apply SL ...
//
double slsMin = GetMin(conditions.sls);
double slsMax = GetMax(conditions.sls);
//
double longSL = slsMin;
double shortSL = slsMax;
//
double sl = isBullish
? longSL
: shortSL;
//
// Add TP 2 as Target ...
double risk = MathAbs(entry - sl);
double reward2 = 2 * risk;
double iTP2 = isBullish
? entry + reward2
: entry - reward2;
Add(
iTP2,
conditions.targets //
);
//
conditions.sl = sl;
conditions.triggerTime = cTime;
conditions.type = isBullish
? X_POSITION_TYPE_LONG