last ...
This commit is contained in:
+1117
-979
File diff suppressed because it is too large
Load Diff
@@ -381,7 +381,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool has = CheckOBFVGXWZConditions(
|
bool has = DetectSelectedZoneConditions(
|
||||||
isSelectedZoneReversal,
|
isSelectedZoneReversal,
|
||||||
workingZone.insideZones[i],
|
workingZone.insideZones[i],
|
||||||
decisionState,
|
decisionState,
|
||||||
@@ -431,7 +431,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool has = CheckOBFVGXWZConditions(
|
bool has = DetectSelectedZoneConditions(
|
||||||
isSelectedZoneReversal,
|
isSelectedZoneReversal,
|
||||||
workingZone.breakedZones[i],
|
workingZone.breakedZones[i],
|
||||||
decisionState,
|
decisionState,
|
||||||
@@ -467,6 +467,29 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Checking Other Senario for Signals ...
|
||||||
|
// if (!hasWaitingZones &&
|
||||||
|
// !hasSelectedZone)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// bool has = false;
|
||||||
|
// ENUM_X_DIRECTION dir;
|
||||||
|
|
||||||
|
// //
|
||||||
|
// has = DetectX121Conditions(
|
||||||
|
// pivot,
|
||||||
|
// point,
|
||||||
|
// sls,
|
||||||
|
// targets,
|
||||||
|
// dir,
|
||||||
|
// analyseState,
|
||||||
|
// decisionState,
|
||||||
|
// decisionXConditions,
|
||||||
|
// drawer //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Double Check and Prepare Signal Conditions ...
|
// Double Check and Prepare Signal Conditions ...
|
||||||
// including Targets and SLs ...
|
// including Targets and SLs ...
|
||||||
@@ -628,12 +651,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
true, // Draw Waiting Zones ..
|
true, // Draw Waiting Zones ..
|
||||||
true, // Draw Inside Zones ..
|
true, // Draw Inside Zones ..
|
||||||
true, // Draw Breaked Zones ..
|
true, // Draw Breaked Zones ..
|
||||||
false, // Draw Supply Zone ..
|
true, // Draw Supply Zone ..
|
||||||
false, // Draw Demand Zone ..
|
true, // Draw Demand Zone ..
|
||||||
false, // Draw Supply Zones ..
|
true, // Draw Supply Zones ..
|
||||||
false, // Draw Demand Zones ..
|
true, // Draw Demand Zones ..
|
||||||
false, // Draw Support Zones ..
|
true, // Draw Support Zones ..
|
||||||
false // Draw Resistance Zones ..
|
true // Draw Resistance Zones ..
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,9 +938,11 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
return false;
|
// Set Provider for Common Guards ...
|
||||||
|
string provider = ToString(X_121_SMC_PROVIDER_XWZ);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Check Cycle Helpers Validation ...
|
||||||
result = isCycleHelpersValid;
|
result = isCycleHelpersValid;
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@@ -925,6 +950,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Select Own Positions ...
|
||||||
int count = ArraySize(positions);
|
int count = ArraySize(positions);
|
||||||
result = IsValidSize(count);
|
result = IsValidSize(count);
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -932,9 +958,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
string provider = ToString(X_121_SMC_PROVIDER_XWZ);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
XPosition ownPositions[];
|
XPosition ownPositions[];
|
||||||
XPosition ownLongPositions[];
|
XPosition ownLongPositions[];
|
||||||
@@ -980,6 +1003,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Extracted Positions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
count = ArraySize(ownPositions);
|
count = ArraySize(ownPositions);
|
||||||
|
|
||||||
@@ -992,6 +1018,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
bool hasShorts = IsValidSize(shortsCount);
|
bool hasShorts = IsValidSize(shortsCount);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Validate Own Positions ...
|
||||||
result = IsValidSize(count);
|
result = IsValidSize(count);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@@ -1033,7 +1060,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get Custom Implemented Guards ...
|
// Implement Custom Implemented Guards ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Here we Are Sure there is Positions to Guard ...
|
// Here we Are Sure there is Positions to Guard ...
|
||||||
@@ -1051,76 +1078,12 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
int loopback = 10;
|
int loopback = 10;
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL zBar;
|
|
||||||
result = zBar.Init(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
zIndex //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
result = HasChild(guards);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL cBar;
|
|
||||||
result = cBar.Init(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
cIndex //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
result = HasChild(guards);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL pBar;
|
|
||||||
result = pBar.Init(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
pIndex //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
cBar.Clean();
|
|
||||||
result = HasChild(guards);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL ppBar;
|
|
||||||
result = ppBar.Init(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
ppIndex //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
cBar.Clean();
|
|
||||||
pBar.Clean();
|
|
||||||
result = HasChild(guards);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
double ask = GetAsk(symbol);
|
double ask = GetAsk(symbol);
|
||||||
double bid = GetBid(symbol);
|
double bid = GetBid(symbol);
|
||||||
datetime cTime = TimeCurrent();
|
datetime cTime = TimeCurrent();
|
||||||
double points = GetPoints(symbol);
|
double points = GetPoints(symbol);
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cycles Conditions ...
|
// Cycles Conditions ...
|
||||||
|
|
||||||
@@ -1139,10 +1102,13 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
zBar.Clean();
|
Clean(decisionPoiEvents);
|
||||||
cBar.Clean();
|
Clean(decisionCycleEvents);
|
||||||
pBar.Clean();
|
|
||||||
ppBar.Clean();
|
//
|
||||||
|
decisionConditions.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
result = HasChild(guards);
|
result = HasChild(guards);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1161,44 +1127,6 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
);
|
);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
cBar.Clean();
|
|
||||||
pBar.Clean();
|
|
||||||
ppBar.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
Clean(decisionPoiEvents);
|
|
||||||
Clean(decisionCycleEvents);
|
|
||||||
|
|
||||||
//
|
|
||||||
decisionConditions.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)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
cBar.Clean();
|
|
||||||
pBar.Clean();
|
|
||||||
ppBar.Clean();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
Clean(decisionPoiEvents);
|
Clean(decisionPoiEvents);
|
||||||
Clean(decisionCycleEvents);
|
Clean(decisionCycleEvents);
|
||||||
@@ -1219,25 +1147,19 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Vision ...
|
// Consolidation ...
|
||||||
ENUM_XPOI_EVENTS visionPoiEvents[];
|
ENUM_XPOI_EVENTS consolidationPoiEvents[];
|
||||||
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
|
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
|
||||||
X121SMCCycleConditions visionConditions;
|
X121SMCCycleConditions consolidationConditions;
|
||||||
result = visionCycleHelper.GetConditions(
|
result = consolidationCycleHelper.GetConditions(
|
||||||
visionCycleEvents,
|
consolidationCycleEvents,
|
||||||
visionPoiEvents,
|
consolidationPoiEvents,
|
||||||
visionConditions,
|
consolidationConditions,
|
||||||
zIndex,
|
zIndex,
|
||||||
loopback //
|
loopback //
|
||||||
);
|
);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
|
||||||
zBar.Clean();
|
|
||||||
cBar.Clean();
|
|
||||||
pBar.Clean();
|
|
||||||
ppBar.Clean();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
Clean(decisionPoiEvents);
|
Clean(decisionPoiEvents);
|
||||||
Clean(decisionCycleEvents);
|
Clean(decisionCycleEvents);
|
||||||
@@ -1264,69 +1186,107 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
return result;
|
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 ...
|
// Cycles POI States ...
|
||||||
XPOIState decisionState = decisionConditions.state;
|
|
||||||
XPOIState analyseState = analyseConditions.state;
|
|
||||||
XPOIState consolidationState = consolidationConditions.state;
|
|
||||||
XPOIState visionState = visionConditions.state;
|
XPOIState visionState = visionConditions.state;
|
||||||
|
XPOIState analyseState = analyseConditions.state;
|
||||||
|
XPOIState decisionState = decisionConditions.state;
|
||||||
|
XPOIState consolidationState = consolidationConditions.state;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cycle X121Conditions ...
|
// Cycle X121Conditions ...
|
||||||
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
|
|
||||||
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
|
|
||||||
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
|
|
||||||
X121Conditions visionXConditions = visionConditions.x121Conditions;
|
X121Conditions visionXConditions = visionConditions.x121Conditions;
|
||||||
|
X121Conditions analyseXConditions = analyseConditions.x121Conditions;
|
||||||
|
X121Conditions decisionXConditions = decisionConditions.x121Conditions;
|
||||||
|
X121Conditions consolidationXConditions = consolidationConditions.x121Conditions;
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
// //
|
//
|
||||||
// // Detect Consolidation Zone ...
|
// Selected Consolidation Zones ...
|
||||||
|
|
||||||
// //
|
|
||||||
// // Bullish ...
|
|
||||||
// XConsolidationZone bullishConsolidationZone;
|
|
||||||
// bool hasBullishConsolidationZone = decisionCycleHelper
|
|
||||||
// .GetLastDirectionalConsolidationZone(
|
|
||||||
// X_DIRECTION_BULLISH,
|
|
||||||
// bullishConsolidationZone //
|
|
||||||
// );
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Bearish ...
|
|
||||||
// XConsolidationZone bearishConsolidationZone;
|
|
||||||
// bool hasBearishConsolidationZone = decisionCycleHelper
|
|
||||||
// .GetLastDirectionalConsolidationZone(
|
|
||||||
// X_DIRECTION_BEARISH,
|
|
||||||
// bearishConsolidationZone //
|
|
||||||
// );
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Detect High Probability Swings ...
|
int idx = -1;
|
||||||
bool isSwingLow =
|
bool has = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasBullishConsolidationZone = false;
|
||||||
|
XConsolidationZone bullishConsolidationZone;
|
||||||
|
has = decisionState.HasBullishConsolidationZones();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
cBar.low > pBar.low &&
|
idx = GetYoungest(decisionState.bullishConsolidationZones);
|
||||||
ppBar.low > pBar.low &&
|
hasBullishConsolidationZone = IsValidIndex(idx);
|
||||||
|
if (hasBullishConsolidationZone)
|
||||||
|
{
|
||||||
|
bullishConsolidationZone = decisionState.bullishConsolidationZones[idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasBearishConsolidationZone = false;
|
||||||
|
XConsolidationZone bearishConsolidationZone;
|
||||||
|
has = decisionState.HasBearishConsolidationZones();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
zBar.low > pBar.low
|
idx = GetYoungest(decisionState.bearishConsolidationZones);
|
||||||
//
|
hasBearishConsolidationZone = IsValidIndex(idx);
|
||||||
;
|
if (hasBearishConsolidationZone)
|
||||||
bool isSwingHigh =
|
{
|
||||||
//
|
bearishConsolidationZone = decisionState.bearishConsolidationZones[idx];
|
||||||
cBar.high < pBar.high &&
|
}
|
||||||
ppBar.high < pBar.high &&
|
}
|
||||||
//
|
|
||||||
zBar.high < pBar.high
|
|
||||||
//
|
|
||||||
;
|
|
||||||
bool isStrongSwingLow =
|
|
||||||
pBar.IsBullish() &&
|
|
||||||
pBar.GetLowShadow() >= pBar.GetBody() * 2;
|
|
||||||
bool isStrongSwingHigh =
|
|
||||||
pBar.IsBearish() &&
|
|
||||||
pBar.GetHighShadow() >= pBar.GetBody() * 2;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Here We Have all Requirements for Guarding Positions ...
|
// Here We Have all Requirements for Guarding Positions ...
|
||||||
@@ -1366,6 +1326,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
// X_121_SMC_GUARD_ACTION_TRAIL_STOP:
|
// X_121_SMC_GUARD_ACTION_TRAIL_STOP:
|
||||||
// Trail Stop Specified Position on Specified Conditions ...
|
// Trail Stop Specified Position on Specified Conditions ...
|
||||||
|
bool handleStoptrailingBasedOnConsolidationZones = true;
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1379,114 +1340,82 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
double sl = iPosition.sl;
|
double sl = iPosition.sl;
|
||||||
double tp = iPosition.tp;
|
double tp = iPosition.tp;
|
||||||
|
|
||||||
// //
|
//
|
||||||
// // Trail Stops Using Consolidation Zones ...
|
// Trail Stops Using Consolidation Zones ...
|
||||||
// bool canTraiLonglUsingCZone =
|
|
||||||
// //
|
|
||||||
// (isLong &&
|
|
||||||
// isInProfit &&
|
|
||||||
// hasBullishConsolidationZone &&
|
|
||||||
// bullishConsolidationZone.lower > iPosition.sl &&
|
|
||||||
// bullishConsolidationZone.lower > iPosition.entry)
|
|
||||||
// //
|
|
||||||
// ;
|
|
||||||
// if (canTraiLonglUsingCZone)
|
|
||||||
// {
|
|
||||||
// sl = bullishConsolidationZone.lower;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTraiShortlUsingCZone =
|
bool canTraiLonglUsingCZone =
|
||||||
// //
|
//
|
||||||
// (!isLong &&
|
handleStoptrailingBasedOnConsolidationZones &&
|
||||||
// isInProfit &&
|
//
|
||||||
// hasBearishConsolidationZone &&
|
(isLong &&
|
||||||
// bearishConsolidationZone.upper < iPosition.sl &&
|
isInProfit &&
|
||||||
// bearishConsolidationZone.upper < iPosition.entry)
|
hasBullishConsolidationZone &&
|
||||||
// //
|
bullishConsolidationZone.lower > iPosition.sl &&
|
||||||
// ;
|
bullishConsolidationZone.lower > iPosition.entry)
|
||||||
// if (canTraiShortlUsingCZone)
|
//
|
||||||
// {
|
;
|
||||||
// sl = bearishConsolidationZone.upper;
|
if (canTraiLonglUsingCZone)
|
||||||
// }
|
{
|
||||||
|
sl = bullishConsolidationZone.lower;
|
||||||
|
}
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTrailUsingCZone =
|
bool canTraiShortlUsingCZone =
|
||||||
// canTraiLonglUsingCZone ||
|
//
|
||||||
// canTraiShortlUsingCZone;
|
handleStoptrailingBasedOnConsolidationZones &&
|
||||||
|
//
|
||||||
|
(!isLong &&
|
||||||
|
isInProfit &&
|
||||||
|
hasBearishConsolidationZone &&
|
||||||
|
bearishConsolidationZone.upper < iPosition.sl &&
|
||||||
|
bearishConsolidationZone.upper < iPosition.entry)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (canTraiShortlUsingCZone)
|
||||||
|
{
|
||||||
|
sl = bearishConsolidationZone.upper;
|
||||||
|
}
|
||||||
|
|
||||||
// //
|
//
|
||||||
// // Trail Stops Using Swings ...
|
bool canTrailUsingCZone =
|
||||||
|
canTraiLonglUsingCZone ||
|
||||||
|
canTraiShortlUsingCZone;
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTrailLongUsingSwings =
|
bool isSLPassed =
|
||||||
// //
|
sl > 0 &&
|
||||||
// isLong &&
|
(isLong
|
||||||
// isInProfit &&
|
? iPosition.price - sl >= points * 15
|
||||||
// (isSwingLow ||
|
: sl - iPosition.price >= points * 15);
|
||||||
// isStrongSwingLow) &&
|
|
||||||
// pBar.low > iPosition.sl &&
|
|
||||||
// pBar.low > iPosition.entry
|
|
||||||
// //
|
|
||||||
// ;
|
|
||||||
// if (canTrailLongUsingSwings)
|
|
||||||
// {
|
|
||||||
// sl = pBar.low;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTraiShortlUsingSwings =
|
bool canTrail =
|
||||||
// //
|
isSLPassed &&
|
||||||
// !isLong &&
|
canTrailUsingCZone;
|
||||||
// isInProfit &&
|
if (canTrail)
|
||||||
// (isSwingHigh ||
|
{
|
||||||
// isStrongSwingHigh) &&
|
//
|
||||||
// pBar.high < iPosition.sl &&
|
X121SMCGuard iGuard;
|
||||||
// pBar.high < iPosition.entry
|
|
||||||
// //
|
|
||||||
// ;
|
|
||||||
// if (canTraiShortlUsingSwings)
|
|
||||||
// {
|
|
||||||
// sl = pBar.high;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTrailUsingSwings =
|
iGuard.time = cTime;
|
||||||
// canTrailLongUsingSwings ||
|
iGuard.symbol = symbol;
|
||||||
// canTraiShortlUsingSwings;
|
iGuard.provider = provider;
|
||||||
|
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
||||||
|
|
||||||
// //
|
//
|
||||||
// //
|
iGuard.ticket = iPosition.ticket;
|
||||||
// //
|
|
||||||
|
|
||||||
// //
|
//
|
||||||
// bool canTrail =
|
iGuard.sl = sl;
|
||||||
// sl != iPosition.sl &&
|
|
||||||
// (canTrailUsingCZone ||
|
|
||||||
// canTrailUsingSwings);
|
|
||||||
// if (canTrail)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// X121SMCGuard iGuard;
|
|
||||||
|
|
||||||
// //
|
//
|
||||||
// iGuard.time = cTime;
|
AddGuard(
|
||||||
// iGuard.symbol = symbol;
|
iGuard,
|
||||||
// iGuard.provider = provider;
|
guards //
|
||||||
// iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
);
|
||||||
|
}
|
||||||
// //
|
|
||||||
// iGuard.ticket = iPosition.ticket;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// iGuard.sl = sl;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// AddGuard(
|
|
||||||
// iGuard,
|
|
||||||
// guards //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1506,34 +1435,34 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
Clean(ownShortPositions);
|
Clean(ownShortPositions);
|
||||||
|
|
||||||
//
|
//
|
||||||
zBar.Clean();
|
visionState.Clean();
|
||||||
cBar.Clean();
|
analyseState.Clean();
|
||||||
pBar.Clean();
|
decisionState.Clean();
|
||||||
ppBar.Clean();
|
consolidationState.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
visionConditions.Clean();
|
||||||
|
analyseConditions.Clean();
|
||||||
|
decisionConditions.Clean();
|
||||||
|
consolidationConditions.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
visionXConditions.Clean();
|
||||||
|
analyseXConditions.Clean();
|
||||||
|
decisionXConditions.Clean();
|
||||||
|
consolidationXConditions.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
Clean(visionPoiEvents);
|
Clean(visionPoiEvents);
|
||||||
Clean(analysePoiEvents);
|
Clean(analysePoiEvents);
|
||||||
Clean(visionCycleEvents);
|
|
||||||
Clean(decisionPoiEvents);
|
Clean(decisionPoiEvents);
|
||||||
Clean(analyseCycleEvents);
|
|
||||||
Clean(decisionCycleEvents);
|
|
||||||
Clean(consolidationPoiEvents);
|
Clean(consolidationPoiEvents);
|
||||||
Clean(consolidationCycleEvents);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
visionState.Clean();
|
Clean(visionCycleEvents);
|
||||||
analyseState.Clean();
|
Clean(analyseCycleEvents);
|
||||||
decisionState.Clean();
|
Clean(decisionCycleEvents);
|
||||||
visionConditions.Clean();
|
Clean(consolidationCycleEvents);
|
||||||
analyseConditions.Clean();
|
|
||||||
visionXConditions.Clean();
|
|
||||||
decisionConditions.Clean();
|
|
||||||
consolidationState.Clean();
|
|
||||||
analyseXConditions.Clean();
|
|
||||||
decisionXConditions.Clean();
|
|
||||||
consolidationConditions.Clean();
|
|
||||||
consolidationXConditions.Clean();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
count = ArraySize(guards);
|
count = ArraySize(guards);
|
||||||
|
|||||||
@@ -386,6 +386,47 @@ struct X121SMCStrategyXWZWorkingZone
|
|||||||
stfState //
|
stfState //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Waiting Zones based on STF and TTF ...
|
||||||
|
XOBFVG tmpWaitingZones[];
|
||||||
|
count = ExtractOBFVGs(
|
||||||
|
tmpWaitingZones,
|
||||||
|
stfState,
|
||||||
|
ttfState //
|
||||||
|
);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOBFVG iOBFVG = tmpWaitingZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
idx = FindIndex(
|
||||||
|
iOBFVG,
|
||||||
|
waitingZones //
|
||||||
|
);
|
||||||
|
has = IsValidIndex(idx);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iOBFVG.Clean();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iOBFVG,
|
||||||
|
waitingZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iOBFVG.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
result = IsValid();
|
result = IsValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -767,6 +808,47 @@ struct X121SMCStrategyXWZWorkingZone
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Waiting Zones based on STF and TTF ...
|
||||||
|
Clean(tmpWaitingZones);
|
||||||
|
count = ExtractOBFVGs(
|
||||||
|
tmpWaitingZones,
|
||||||
|
stfState,
|
||||||
|
ttfState //
|
||||||
|
);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOBFVG iOBFVG = tmpWaitingZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
idx = FindIndex(
|
||||||
|
iOBFVG,
|
||||||
|
waitingZones //
|
||||||
|
);
|
||||||
|
has = IsValidIndex(idx);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
iOBFVG.Clean();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iOBFVG,
|
||||||
|
waitingZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iOBFVG.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
zBar.Clean();
|
zBar.Clean();
|
||||||
cBar.Clean();
|
cBar.Clean();
|
||||||
@@ -1846,7 +1928,7 @@ struct X121SMCStrategyXWZSignalConditions
|
|||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
bool CheckOBFVGXWZConditions(
|
bool DetectSelectedZoneConditions(
|
||||||
bool &isReversal,
|
bool &isReversal,
|
||||||
XOBFVG &zone,
|
XOBFVG &zone,
|
||||||
XPOIState &state,
|
XPOIState &state,
|
||||||
@@ -1882,6 +1964,7 @@ bool CheckOBFVGXWZConditions(
|
|||||||
//
|
//
|
||||||
double bullishScore = 0;
|
double bullishScore = 0;
|
||||||
double bearishScore = 0;
|
double bearishScore = 0;
|
||||||
|
double scoreMultiplier = 1.5;
|
||||||
conditions.GenerateScore(
|
conditions.GenerateScore(
|
||||||
bullishScore,
|
bullishScore,
|
||||||
bearishScore //
|
bearishScore //
|
||||||
@@ -1890,12 +1973,12 @@ bool CheckOBFVGXWZConditions(
|
|||||||
//
|
//
|
||||||
bool isBullishScorePassed = bullishScore > 0 &&
|
bool isBullishScorePassed = bullishScore > 0 &&
|
||||||
bearishScore >= 0 &&
|
bearishScore >= 0 &&
|
||||||
bullishScore > bearishScore;
|
bullishScore > bearishScore * scoreMultiplier;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isBearishScorePassed = bearishScore > 0 &&
|
bool isBearishScorePassed = bearishScore > 0 &&
|
||||||
bullishScore >= 0 &&
|
bullishScore >= 0 &&
|
||||||
bearishScore > bullishScore;
|
bearishScore > bullishScore * scoreMultiplier;
|
||||||
|
|
||||||
//
|
//
|
||||||
// VWap ...
|
// VWap ...
|
||||||
@@ -3242,3 +3325,89 @@ bool DetectSelectedZoneSLCandidates(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
bool DetectX121Conditions(
|
||||||
|
double &pivot,
|
||||||
|
double &point,
|
||||||
|
double &sls[],
|
||||||
|
double &targets[],
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
XPOIState &stfState,
|
||||||
|
XPOIState &ttfState,
|
||||||
|
X121Conditions &conditions,
|
||||||
|
XCPOIDrawer *drawer = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canDraw = drawer != NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot = 0;
|
||||||
|
point = 0;
|
||||||
|
Clean(sls);
|
||||||
|
Clean(targets);
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
stfState.IsValid() &&
|
||||||
|
ttfState.IsValid() &&
|
||||||
|
stfState.HasChild() &&
|
||||||
|
ttfState.HasChild();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int idx = -1;
|
||||||
|
int count = 0;
|
||||||
|
bool has = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Inside STF Order Blocks Zones ...
|
||||||
|
|
||||||
|
//
|
||||||
|
XOBFVG tmpWaitingZones[];
|
||||||
|
count = ExtractOBFVGs(
|
||||||
|
tmpWaitingZones,
|
||||||
|
stfState,
|
||||||
|
ttfState //
|
||||||
|
);
|
||||||
|
has = IsValidSize(count);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (canDraw)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOBFVG iOBFVG = tmpWaitingZones[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
iOBFVG.UpdateTo();
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBaseObject *iOBFVGObjects[];
|
||||||
|
int iOBFVGObjectsCount = drawer.DrawOBFVG(
|
||||||
|
iOBFVG,
|
||||||
|
iOBFVGObjects //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
Reference in New Issue
Block a user