last ...
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user