add support of Consolidation Zone ibside XPOIDetector and XPOIState ...
This commit is contained in:
@@ -106,183 +106,6 @@ class XC121SMCCycleHelper : public XCBase
|
||||
//
|
||||
// Getter/Setter(s) ...
|
||||
|
||||
//
|
||||
int CountConsolidationZones()
|
||||
{
|
||||
return ArraySize(mConsolidationZones);
|
||||
}
|
||||
|
||||
//
|
||||
bool HasConsolidationZones()
|
||||
{
|
||||
return HasChild(mConsolidationZones);
|
||||
}
|
||||
|
||||
//
|
||||
bool GetConsolidationZone(
|
||||
int idx,
|
||||
XConsolidationZone &zone //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
zone.Clean();
|
||||
|
||||
//
|
||||
result = HasConsolidationZones();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int count = CountConsolidationZones();
|
||||
result = idx >= 0 &&
|
||||
idx < count;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
zone = mConsolidationZones[idx];
|
||||
result = zone.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool GetLastDirectionalConsolidationZone(
|
||||
ENUM_X_DIRECTION forDir,
|
||||
XConsolidationZone &zone //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
zone.Clean();
|
||||
|
||||
//
|
||||
result = HasDirection(forDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool hasZones = HasConsolidationZones();
|
||||
int zonesCount = CountConsolidationZones();
|
||||
result = hasZones;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = zonesCount - 1; i >= 0; i--)
|
||||
{
|
||||
//
|
||||
XConsolidationZone iZone = mConsolidationZones[i];
|
||||
|
||||
//
|
||||
if (!iZone.IsBreaked())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
if (!HasDirection(iZone.breakDir))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
if (iZone.breakDir != forDir)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
zone = iZone;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
result = zone.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool GetActiveConsolidationZone(
|
||||
XConsolidationZone &zone //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
zone = mActiveConsolidationZone;
|
||||
result = zone.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int FillConsolidationZones(
|
||||
ENUM_X_DIRECTION forDir,
|
||||
XConsolidationZone &zones[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
Clean(zones);
|
||||
|
||||
//
|
||||
bool hasZones = HasConsolidationZones();
|
||||
if (!hasZones)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int count = CountConsolidationZones();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XConsolidationZone iZone = mConsolidationZones[i];
|
||||
|
||||
//
|
||||
bool isDirPassed =
|
||||
(forDir == X_DIRECTION_ALL ||
|
||||
forDir == X_DIRECTION_NONE)
|
||||
? true
|
||||
: forDir == iZone.breakDir;
|
||||
if (isDirPassed)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iZone,
|
||||
zones //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(zones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Actions ...
|
||||
|
||||
@@ -618,7 +441,7 @@ class XC121SMCCycleHelper : public XCBase
|
||||
conditions.time = TimeCurrent();
|
||||
|
||||
//
|
||||
Update();
|
||||
// Update();
|
||||
|
||||
//
|
||||
result = conditions.IsValid();
|
||||
@@ -627,87 +450,6 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
void Update()
|
||||
{
|
||||
//
|
||||
int czRange = 50; // Consolidation min Range Points ...
|
||||
int czLoopback = 5;
|
||||
int maxAllowed = 20;
|
||||
bool isActiveConsolidationZoneBreaked = false;
|
||||
bool hasActiveConsolidationZone = mActiveConsolidationZone.IsValid();
|
||||
|
||||
//
|
||||
if (hasActiveConsolidationZone)
|
||||
{
|
||||
//
|
||||
isActiveConsolidationZoneBreaked = mActiveConsolidationZone.IsBreaked();
|
||||
|
||||
//
|
||||
if (isActiveConsolidationZoneBreaked)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
mActiveConsolidationZone,
|
||||
mConsolidationZones //
|
||||
);
|
||||
|
||||
//
|
||||
CleanupArray(
|
||||
mConsolidationZones,
|
||||
maxAllowed //
|
||||
);
|
||||
|
||||
//
|
||||
mActiveConsolidationZone.Clean();
|
||||
}
|
||||
else
|
||||
{
|
||||
mActiveConsolidationZone.Update();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
XOHCL mBar;
|
||||
bool hasBar = GetBar(
|
||||
mBar,
|
||||
0 //
|
||||
);
|
||||
if (hasBar)
|
||||
{
|
||||
//
|
||||
double upper = 0;
|
||||
double lower = 0;
|
||||
bool hasConsolidationZone =
|
||||
mBarAnalyser.IsConsolidate(
|
||||
mBar,
|
||||
upper,
|
||||
lower,
|
||||
czLoopback,
|
||||
czRange //
|
||||
);
|
||||
|
||||
//
|
||||
if (hasConsolidationZone)
|
||||
{
|
||||
//
|
||||
mActiveConsolidationZone.Init(
|
||||
GetSymbol(),
|
||||
GetPeriod(),
|
||||
upper,
|
||||
lower,
|
||||
czLoopback //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
mBar.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Virtuals ...
|
||||
|
||||
@@ -729,11 +471,6 @@ class XC121SMCCycleHelper : public XCBase
|
||||
string mSymbol;
|
||||
ENUM_TIMEFRAMES mPeriod;
|
||||
|
||||
//
|
||||
// CArrayObj mConsolidationObjects;
|
||||
XConsolidationZone mActiveConsolidationZone;
|
||||
XConsolidationZone mConsolidationZones[];
|
||||
|
||||
//
|
||||
// Actions ...
|
||||
|
||||
@@ -751,10 +488,6 @@ class XC121SMCCycleHelper : public XCBase
|
||||
delete mX121Helper;
|
||||
delete mPOIDetector;
|
||||
delete mBarAnalyser;
|
||||
|
||||
//
|
||||
Clean(mConsolidationZones);
|
||||
mActiveConsolidationZone.Clean();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -489,172 +489,172 @@ bool DetectX121SMCGuards(
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Detect Consolidation Zone ...
|
||||
// //
|
||||
// // Detect Consolidation Zone ...
|
||||
|
||||
//
|
||||
// Detect Consolidation Zones ...
|
||||
// //
|
||||
// // Detect Consolidation Zones ...
|
||||
|
||||
//
|
||||
XBoxZone lastBullishBox;
|
||||
XBoxZone prevLastBullishBox;
|
||||
bool hasLastBullishBox = false;
|
||||
bool hasPrevLastBullishBox = false;
|
||||
XConsolidationZone lastBullishZone;
|
||||
bool isLastBullishAbovePrev = false;
|
||||
bool isLastBullishBelowPrev = false;
|
||||
XConsolidationZone prevLastBullishZone;
|
||||
// //
|
||||
// XBoxZone lastBullishBox;
|
||||
// XBoxZone prevLastBullishBox;
|
||||
// bool hasLastBullishBox = false;
|
||||
// bool hasPrevLastBullishBox = false;
|
||||
// XConsolidationZone lastBullishZone;
|
||||
// bool isLastBullishAbovePrev = false;
|
||||
// bool isLastBullishBelowPrev = false;
|
||||
// XConsolidationZone prevLastBullishZone;
|
||||
|
||||
//
|
||||
XBoxZone lastBearishBox;
|
||||
XBoxZone prevLastBearishBox;
|
||||
bool hasLastBearishBox = false;
|
||||
bool hasPrevLastBearishBox = false;
|
||||
XConsolidationZone lastBearishZone;
|
||||
bool isLastBearishAbovePrev = false;
|
||||
bool isLastBearishBelowPrev = false;
|
||||
XConsolidationZone prevLastBearishZone;
|
||||
// //
|
||||
// XBoxZone lastBearishBox;
|
||||
// XBoxZone prevLastBearishBox;
|
||||
// bool hasLastBearishBox = false;
|
||||
// bool hasPrevLastBearishBox = false;
|
||||
// XConsolidationZone lastBearishZone;
|
||||
// bool isLastBearishAbovePrev = false;
|
||||
// bool isLastBearishBelowPrev = false;
|
||||
// XConsolidationZone prevLastBearishZone;
|
||||
|
||||
//
|
||||
int bullishConsolidationZonesCount = 0;
|
||||
int bearishConsolidationZonesCount = 0;
|
||||
bool hasBullishConsolidationZones = false;
|
||||
bool hasBearishConsolidationZones = false;
|
||||
XConsolidationZone bullishConsolidationZones[];
|
||||
XConsolidationZone bearishConsolidationZones[];
|
||||
bool hasConsolidationZones = decisionCycleHelper.HasConsolidationZones();
|
||||
int consolidationZonesCount = decisionCycleHelper.CountConsolidationZones();
|
||||
if (hasConsolidationZones)
|
||||
{
|
||||
//
|
||||
bullishConsolidationZonesCount = decisionCycleHelper
|
||||
.FillConsolidationZones(
|
||||
X_DIRECTION_BULLISH,
|
||||
bullishConsolidationZones //
|
||||
);
|
||||
hasBullishConsolidationZones = IsValidSize(bullishConsolidationZonesCount);
|
||||
// //
|
||||
// int bullishConsolidationZonesCount = 0;
|
||||
// int bearishConsolidationZonesCount = 0;
|
||||
// bool hasBullishConsolidationZones = false;
|
||||
// bool hasBearishConsolidationZones = false;
|
||||
// XConsolidationZone bullishConsolidationZones[];
|
||||
// XConsolidationZone bearishConsolidationZones[];
|
||||
// bool hasConsolidationZones = decisionCycleHelper.HasConsolidationZones();
|
||||
// int consolidationZonesCount = decisionCycleHelper.CountConsolidationZones();
|
||||
// if (hasConsolidationZones)
|
||||
// {
|
||||
// //
|
||||
// bullishConsolidationZonesCount = decisionCycleHelper
|
||||
// .FillConsolidationZones(
|
||||
// X_DIRECTION_BULLISH,
|
||||
// bullishConsolidationZones //
|
||||
// );
|
||||
// hasBullishConsolidationZones = IsValidSize(bullishConsolidationZonesCount);
|
||||
|
||||
//
|
||||
bearishConsolidationZonesCount = decisionCycleHelper
|
||||
.FillConsolidationZones(
|
||||
X_DIRECTION_BEARISH,
|
||||
bearishConsolidationZones //
|
||||
);
|
||||
hasBearishConsolidationZones = IsValidSize(bearishConsolidationZonesCount);
|
||||
// //
|
||||
// bearishConsolidationZonesCount = decisionCycleHelper
|
||||
// .FillConsolidationZones(
|
||||
// X_DIRECTION_BEARISH,
|
||||
// bearishConsolidationZones //
|
||||
// );
|
||||
// hasBearishConsolidationZones = IsValidSize(bearishConsolidationZonesCount);
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
// //
|
||||
// //
|
||||
// //
|
||||
|
||||
//
|
||||
if (hasBullishConsolidationZones &&
|
||||
bullishConsolidationZonesCount >= 2)
|
||||
{
|
||||
//
|
||||
lastBullishZone = bullishConsolidationZones[bullishConsolidationZonesCount - 1];
|
||||
prevLastBullishZone = bullishConsolidationZones[bullishConsolidationZonesCount - 2];
|
||||
// //
|
||||
// if (hasBullishConsolidationZones &&
|
||||
// bullishConsolidationZonesCount >= 2)
|
||||
// {
|
||||
// //
|
||||
// lastBullishZone = bullishConsolidationZones[bullishConsolidationZonesCount - 1];
|
||||
// prevLastBullishZone = bullishConsolidationZones[bullishConsolidationZonesCount - 2];
|
||||
|
||||
//
|
||||
hasLastBullishBox = ToBox(
|
||||
lastBullishBox,
|
||||
lastBullishZone //
|
||||
);
|
||||
hasPrevLastBullishBox = ToBox(
|
||||
prevLastBullishBox,
|
||||
prevLastBullishZone //
|
||||
);
|
||||
// //
|
||||
// hasLastBullishBox = ToBox(
|
||||
// lastBullishBox,
|
||||
// lastBullishZone //
|
||||
// );
|
||||
// hasPrevLastBullishBox = ToBox(
|
||||
// prevLastBullishBox,
|
||||
// prevLastBullishZone //
|
||||
// );
|
||||
|
||||
//
|
||||
isLastBullishAbovePrev = hasLastBullishBox &&
|
||||
hasPrevLastBullishBox &&
|
||||
IsBoxAbove(
|
||||
lastBullishBox,
|
||||
prevLastBullishBox //
|
||||
);
|
||||
// //
|
||||
// isLastBullishAbovePrev = hasLastBullishBox &&
|
||||
// hasPrevLastBullishBox &&
|
||||
// IsBoxAbove(
|
||||
// lastBullishBox,
|
||||
// prevLastBullishBox //
|
||||
// );
|
||||
|
||||
//
|
||||
isLastBullishBelowPrev = hasLastBullishBox &&
|
||||
hasPrevLastBullishBox &&
|
||||
IsBoxBelow(
|
||||
lastBullishBox,
|
||||
prevLastBullishBox //
|
||||
);
|
||||
}
|
||||
// //
|
||||
// isLastBullishBelowPrev = hasLastBullishBox &&
|
||||
// hasPrevLastBullishBox &&
|
||||
// IsBoxBelow(
|
||||
// lastBullishBox,
|
||||
// prevLastBullishBox //
|
||||
// );
|
||||
// }
|
||||
|
||||
//
|
||||
if (hasBearishConsolidationZones &&
|
||||
bearishConsolidationZonesCount >= 2)
|
||||
{
|
||||
//
|
||||
lastBearishZone = bearishConsolidationZones[bearishConsolidationZonesCount - 1];
|
||||
prevLastBearishZone = bearishConsolidationZones[bearishConsolidationZonesCount - 2];
|
||||
// //
|
||||
// if (hasBearishConsolidationZones &&
|
||||
// bearishConsolidationZonesCount >= 2)
|
||||
// {
|
||||
// //
|
||||
// lastBearishZone = bearishConsolidationZones[bearishConsolidationZonesCount - 1];
|
||||
// prevLastBearishZone = bearishConsolidationZones[bearishConsolidationZonesCount - 2];
|
||||
|
||||
//
|
||||
hasLastBearishBox = ToBox(
|
||||
lastBearishBox,
|
||||
lastBearishZone //
|
||||
);
|
||||
hasPrevLastBearishBox = ToBox(
|
||||
prevLastBearishBox,
|
||||
prevLastBearishZone //
|
||||
);
|
||||
// //
|
||||
// hasLastBearishBox = ToBox(
|
||||
// lastBearishBox,
|
||||
// lastBearishZone //
|
||||
// );
|
||||
// hasPrevLastBearishBox = ToBox(
|
||||
// prevLastBearishBox,
|
||||
// prevLastBearishZone //
|
||||
// );
|
||||
|
||||
//
|
||||
isLastBearishAbovePrev = hasLastBearishBox &&
|
||||
hasPrevLastBearishBox &&
|
||||
IsBoxAbove(
|
||||
lastBearishBox,
|
||||
prevLastBearishBox //
|
||||
);
|
||||
// //
|
||||
// isLastBearishAbovePrev = hasLastBearishBox &&
|
||||
// hasPrevLastBearishBox &&
|
||||
// IsBoxAbove(
|
||||
// lastBearishBox,
|
||||
// prevLastBearishBox //
|
||||
// );
|
||||
|
||||
//
|
||||
isLastBearishBelowPrev = hasLastBearishBox &&
|
||||
hasPrevLastBearishBox &&
|
||||
IsBoxBelow(
|
||||
lastBearishBox,
|
||||
prevLastBearishBox //
|
||||
);
|
||||
}
|
||||
// //
|
||||
// isLastBearishBelowPrev = hasLastBearishBox &&
|
||||
// hasPrevLastBearishBox &&
|
||||
// IsBoxBelow(
|
||||
// lastBearishBox,
|
||||
// prevLastBearishBox //
|
||||
// );
|
||||
// }
|
||||
|
||||
//
|
||||
}
|
||||
// //
|
||||
// }
|
||||
|
||||
//
|
||||
// Detect High Probability Swings ...
|
||||
bool isSwingLow =
|
||||
//
|
||||
cBar.low > pBar.low &&
|
||||
ppBar.low > pBar.low &&
|
||||
//
|
||||
zBar.low > pBar.low
|
||||
//
|
||||
;
|
||||
bool isSwingHigh =
|
||||
//
|
||||
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;
|
||||
// bool isSwingLow =
|
||||
// //
|
||||
// cBar.low > pBar.low &&
|
||||
// ppBar.low > pBar.low &&
|
||||
// //
|
||||
// zBar.low > pBar.low
|
||||
// //
|
||||
// ;
|
||||
// bool isSwingHigh =
|
||||
// //
|
||||
// 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;
|
||||
|
||||
//
|
||||
bool isStrongSwingLowAboveLastBullishBox =
|
||||
isStrongSwingLow &&
|
||||
hasLastBullishBox &&
|
||||
pBar.low > lastBullishBox.upper;
|
||||
// //
|
||||
// bool isStrongSwingLowAboveLastBullishBox =
|
||||
// isStrongSwingLow &&
|
||||
// hasLastBullishBox &&
|
||||
// pBar.low > lastBullishBox.upper;
|
||||
|
||||
//
|
||||
bool isStrongSwingHighBelowLastBearishBox =
|
||||
isStrongSwingHigh &&
|
||||
hasLastBearishBox &&
|
||||
pBar.high < lastBearishBox.lower;
|
||||
// //
|
||||
// bool isStrongSwingHighBelowLastBearishBox =
|
||||
// isStrongSwingHigh &&
|
||||
// hasLastBearishBox &&
|
||||
// pBar.high < lastBearishBox.lower;
|
||||
|
||||
//
|
||||
// Here We Have all Requirements for Guarding Positions ...
|
||||
@@ -822,82 +822,82 @@ bool DetectX121SMCGuards(
|
||||
// - occures two same type consolidation zones in order of positions type;
|
||||
// - occures a swing in order of consolidation zones ...
|
||||
|
||||
//
|
||||
bool canTrailBasedOnTwoZone =
|
||||
isLong
|
||||
? isLastBullishAbovePrev
|
||||
: isLastBearishBelowPrev;
|
||||
if (canTrailBasedOnTwoZone)
|
||||
{
|
||||
//
|
||||
trailedStop =
|
||||
isLong
|
||||
? prevLastBullishBox.lower
|
||||
: prevLastBearishBox.upper;
|
||||
}
|
||||
// //
|
||||
// bool canTrailBasedOnTwoZone =
|
||||
// isLong
|
||||
// ? isLastBullishAbovePrev
|
||||
// : isLastBearishBelowPrev;
|
||||
// if (canTrailBasedOnTwoZone)
|
||||
// {
|
||||
// //
|
||||
// trailedStop =
|
||||
// isLong
|
||||
// ? prevLastBullishBox.lower
|
||||
// : prevLastBearishBox.upper;
|
||||
// }
|
||||
|
||||
//
|
||||
bool canTrailBasedOnZoneSwing =
|
||||
trailedStop <= 0 &&
|
||||
(isLong
|
||||
? isStrongSwingLowAboveLastBullishBox
|
||||
: isStrongSwingHighBelowLastBearishBox);
|
||||
if (canTrailBasedOnZoneSwing)
|
||||
{
|
||||
//
|
||||
trailedStop =
|
||||
isLong
|
||||
? pBar.low
|
||||
: pBar.high;
|
||||
}
|
||||
// //
|
||||
// bool canTrailBasedOnZoneSwing =
|
||||
// trailedStop <= 0 &&
|
||||
// (isLong
|
||||
// ? isStrongSwingLowAboveLastBullishBox
|
||||
// : isStrongSwingHighBelowLastBearishBox);
|
||||
// if (canTrailBasedOnZoneSwing)
|
||||
// {
|
||||
// //
|
||||
// trailedStop =
|
||||
// isLong
|
||||
// ? pBar.low
|
||||
// : pBar.high;
|
||||
// }
|
||||
|
||||
//
|
||||
bool canDoTrailStop =
|
||||
trailedStop > 0 &&
|
||||
(
|
||||
//
|
||||
iPosition.sl == 0
|
||||
? (isLong
|
||||
? trailedStop > iPosition.entry &&
|
||||
trailedStop < iPosition.price
|
||||
: trailedStop < iPosition.entry &&
|
||||
trailedStop > iPosition.price)
|
||||
: (isLong
|
||||
? trailedStop > iPosition.sl &&
|
||||
trailedStop > iPosition.entry &&
|
||||
trailedStop < iPosition.price
|
||||
: trailedStop < iPosition.sl &&
|
||||
trailedStop < iPosition.entry &&
|
||||
trailedStop > iPosition.price)
|
||||
//
|
||||
)
|
||||
//
|
||||
;
|
||||
// //
|
||||
// bool canDoTrailStop =
|
||||
// trailedStop > 0 &&
|
||||
// (
|
||||
// //
|
||||
// iPosition.sl == 0
|
||||
// ? (isLong
|
||||
// ? trailedStop > iPosition.entry &&
|
||||
// trailedStop < iPosition.price
|
||||
// : trailedStop < iPosition.entry &&
|
||||
// trailedStop > iPosition.price)
|
||||
// : (isLong
|
||||
// ? trailedStop > iPosition.sl &&
|
||||
// trailedStop > iPosition.entry &&
|
||||
// trailedStop < iPosition.price
|
||||
// : trailedStop < iPosition.sl &&
|
||||
// trailedStop < iPosition.entry &&
|
||||
// trailedStop > iPosition.price)
|
||||
// //
|
||||
// )
|
||||
// //
|
||||
// ;
|
||||
|
||||
//
|
||||
if (canDoTrailStop)
|
||||
{
|
||||
//
|
||||
X121SMCGuard iGuard;
|
||||
// //
|
||||
// if (canDoTrailStop)
|
||||
// {
|
||||
// //
|
||||
// X121SMCGuard iGuard;
|
||||
|
||||
//
|
||||
iGuard.time = cTime;
|
||||
iGuard.symbol = symbol;
|
||||
iGuard.provider = provider;
|
||||
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
||||
// //
|
||||
// iGuard.time = cTime;
|
||||
// iGuard.symbol = symbol;
|
||||
// iGuard.provider = provider;
|
||||
// iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
||||
|
||||
//
|
||||
iGuard.ticket = iPosition.ticket;
|
||||
// //
|
||||
// iGuard.ticket = iPosition.ticket;
|
||||
|
||||
//
|
||||
iGuard.sl = trailedStop;
|
||||
// //
|
||||
// iGuard.sl = trailedStop;
|
||||
|
||||
//
|
||||
AddGuard(
|
||||
iGuard,
|
||||
guards //
|
||||
);
|
||||
}
|
||||
// //
|
||||
// AddGuard(
|
||||
// iGuard,
|
||||
// guards //
|
||||
// );
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -956,14 +956,14 @@ bool DetectX121SMCGuards(
|
||||
consolidationXConditions.Clean();
|
||||
|
||||
//
|
||||
lastBullishBox.Clean();
|
||||
lastBearishBox.Clean();
|
||||
lastBullishZone.Clean();
|
||||
lastBearishZone.Clean();
|
||||
prevLastBullishBox.Clean();
|
||||
prevLastBearishBox.Clean();
|
||||
prevLastBullishZone.Clean();
|
||||
prevLastBearishZone.Clean();
|
||||
// lastBullishBox.Clean();
|
||||
// lastBearishBox.Clean();
|
||||
// lastBullishZone.Clean();
|
||||
// lastBearishZone.Clean();
|
||||
// prevLastBullishBox.Clean();
|
||||
// prevLastBearishBox.Clean();
|
||||
// prevLastBullishZone.Clean();
|
||||
// prevLastBearishZone.Clean();
|
||||
|
||||
//
|
||||
count = ArraySize(guards);
|
||||
|
||||
@@ -1082,26 +1082,26 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// Detect Consolidation Zone ...
|
||||
// //
|
||||
// // Detect Consolidation Zone ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
XConsolidationZone bullishConsolidationZone;
|
||||
bool hasBullishConsolidationZone = decisionCycleHelper
|
||||
.GetLastDirectionalConsolidationZone(
|
||||
X_DIRECTION_BULLISH,
|
||||
bullishConsolidationZone //
|
||||
);
|
||||
// //
|
||||
// // Bullish ...
|
||||
// XConsolidationZone bullishConsolidationZone;
|
||||
// bool hasBullishConsolidationZone = decisionCycleHelper
|
||||
// .GetLastDirectionalConsolidationZone(
|
||||
// X_DIRECTION_BULLISH,
|
||||
// bullishConsolidationZone //
|
||||
// );
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
XConsolidationZone bearishConsolidationZone;
|
||||
bool hasBearishConsolidationZone = decisionCycleHelper
|
||||
.GetLastDirectionalConsolidationZone(
|
||||
X_DIRECTION_BEARISH,
|
||||
bearishConsolidationZone //
|
||||
);
|
||||
// //
|
||||
// // Bearish ...
|
||||
// XConsolidationZone bearishConsolidationZone;
|
||||
// bool hasBearishConsolidationZone = decisionCycleHelper
|
||||
// .GetLastDirectionalConsolidationZone(
|
||||
// X_DIRECTION_BEARISH,
|
||||
// bearishConsolidationZone //
|
||||
// );
|
||||
|
||||
//
|
||||
// Detect High Probability Swings ...
|
||||
@@ -1179,114 +1179,114 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
||||
double sl = iPosition.sl;
|
||||
double tp = iPosition.tp;
|
||||
|
||||
//
|
||||
// Trail Stops Using Consolidation Zones ...
|
||||
bool canTraiLonglUsingCZone =
|
||||
//
|
||||
(isLong &&
|
||||
isInProfit &&
|
||||
hasBullishConsolidationZone &&
|
||||
bullishConsolidationZone.lower > iPosition.sl &&
|
||||
bullishConsolidationZone.lower > iPosition.entry)
|
||||
//
|
||||
;
|
||||
if (canTraiLonglUsingCZone)
|
||||
{
|
||||
sl = bullishConsolidationZone.lower;
|
||||
}
|
||||
// //
|
||||
// // 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 =
|
||||
//
|
||||
(!isLong &&
|
||||
isInProfit &&
|
||||
hasBearishConsolidationZone &&
|
||||
bearishConsolidationZone.upper < iPosition.sl &&
|
||||
bearishConsolidationZone.upper < iPosition.entry)
|
||||
//
|
||||
;
|
||||
if (canTraiShortlUsingCZone)
|
||||
{
|
||||
sl = bearishConsolidationZone.upper;
|
||||
}
|
||||
// //
|
||||
// bool canTraiShortlUsingCZone =
|
||||
// //
|
||||
// (!isLong &&
|
||||
// isInProfit &&
|
||||
// hasBearishConsolidationZone &&
|
||||
// bearishConsolidationZone.upper < iPosition.sl &&
|
||||
// bearishConsolidationZone.upper < iPosition.entry)
|
||||
// //
|
||||
// ;
|
||||
// if (canTraiShortlUsingCZone)
|
||||
// {
|
||||
// sl = bearishConsolidationZone.upper;
|
||||
// }
|
||||
|
||||
//
|
||||
bool canTrailUsingCZone =
|
||||
canTraiLonglUsingCZone ||
|
||||
canTraiShortlUsingCZone;
|
||||
// //
|
||||
// bool canTrailUsingCZone =
|
||||
// canTraiLonglUsingCZone ||
|
||||
// canTraiShortlUsingCZone;
|
||||
|
||||
//
|
||||
// Trail Stops Using Swings ...
|
||||
// //
|
||||
// // Trail Stops Using Swings ...
|
||||
|
||||
//
|
||||
bool canTrailLongUsingSwings =
|
||||
//
|
||||
isLong &&
|
||||
isInProfit &&
|
||||
(isSwingLow ||
|
||||
isStrongSwingLow) &&
|
||||
pBar.low > iPosition.sl &&
|
||||
pBar.low > iPosition.entry
|
||||
//
|
||||
;
|
||||
if (canTrailLongUsingSwings)
|
||||
{
|
||||
sl = pBar.low;
|
||||
}
|
||||
// //
|
||||
// bool canTrailLongUsingSwings =
|
||||
// //
|
||||
// isLong &&
|
||||
// isInProfit &&
|
||||
// (isSwingLow ||
|
||||
// isStrongSwingLow) &&
|
||||
// pBar.low > iPosition.sl &&
|
||||
// pBar.low > iPosition.entry
|
||||
// //
|
||||
// ;
|
||||
// if (canTrailLongUsingSwings)
|
||||
// {
|
||||
// sl = pBar.low;
|
||||
// }
|
||||
|
||||
//
|
||||
bool canTraiShortlUsingSwings =
|
||||
//
|
||||
!isLong &&
|
||||
isInProfit &&
|
||||
(isSwingHigh ||
|
||||
isStrongSwingHigh) &&
|
||||
pBar.high < iPosition.sl &&
|
||||
pBar.high < iPosition.entry
|
||||
//
|
||||
;
|
||||
if (canTraiShortlUsingSwings)
|
||||
{
|
||||
sl = pBar.high;
|
||||
}
|
||||
// //
|
||||
// bool canTraiShortlUsingSwings =
|
||||
// //
|
||||
// !isLong &&
|
||||
// isInProfit &&
|
||||
// (isSwingHigh ||
|
||||
// isStrongSwingHigh) &&
|
||||
// pBar.high < iPosition.sl &&
|
||||
// pBar.high < iPosition.entry
|
||||
// //
|
||||
// ;
|
||||
// if (canTraiShortlUsingSwings)
|
||||
// {
|
||||
// sl = pBar.high;
|
||||
// }
|
||||
|
||||
//
|
||||
bool canTrailUsingSwings =
|
||||
canTrailLongUsingSwings ||
|
||||
canTraiShortlUsingSwings;
|
||||
// //
|
||||
// bool canTrailUsingSwings =
|
||||
// canTrailLongUsingSwings ||
|
||||
// canTraiShortlUsingSwings;
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
// //
|
||||
// //
|
||||
// //
|
||||
|
||||
//
|
||||
bool canTrail =
|
||||
sl != iPosition.sl &&
|
||||
(canTrailUsingCZone ||
|
||||
canTrailUsingSwings);
|
||||
if (canTrail)
|
||||
{
|
||||
//
|
||||
X121SMCGuard iGuard;
|
||||
// //
|
||||
// bool canTrail =
|
||||
// sl != iPosition.sl &&
|
||||
// (canTrailUsingCZone ||
|
||||
// canTrailUsingSwings);
|
||||
// if (canTrail)
|
||||
// {
|
||||
// //
|
||||
// X121SMCGuard iGuard;
|
||||
|
||||
//
|
||||
iGuard.time = cTime;
|
||||
iGuard.symbol = symbol;
|
||||
iGuard.provider = provider;
|
||||
iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
||||
// //
|
||||
// iGuard.time = cTime;
|
||||
// iGuard.symbol = symbol;
|
||||
// iGuard.provider = provider;
|
||||
// iGuard.action = X_121_SMC_GUARD_ACTION_TRAIL_STOP;
|
||||
|
||||
//
|
||||
iGuard.ticket = iPosition.ticket;
|
||||
// //
|
||||
// iGuard.ticket = iPosition.ticket;
|
||||
|
||||
//
|
||||
iGuard.sl = sl;
|
||||
// //
|
||||
// iGuard.sl = sl;
|
||||
|
||||
//
|
||||
AddGuard(
|
||||
iGuard,
|
||||
guards //
|
||||
);
|
||||
}
|
||||
// //
|
||||
// AddGuard(
|
||||
// iGuard,
|
||||
// guards //
|
||||
// );
|
||||
// }
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -451,9 +451,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
*/
|
||||
void DoUnwaitedTicksWork() override
|
||||
{
|
||||
//
|
||||
// Decision ...
|
||||
mDecisionCycleHelper.Update();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -814,6 +811,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
x121Inputs.xvwapInputs.showVWapMedium = showAll || true;
|
||||
x121Inputs.xvwapInputs.showVWapSlow = showAll || true;
|
||||
|
||||
//
|
||||
// X3MA ...
|
||||
x121Inputs.x3maInputs.showX3MaFast = showAll || true;
|
||||
x121Inputs.x3maInputs.showX3MaMid = showAll || true;
|
||||
x121Inputs.x3maInputs.showX3MaSlow = showAll || true;
|
||||
|
||||
//
|
||||
// Initialize Cycle Helpers ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user