add support of Consolidation Zone ibside XPOIDetector and XPOIState ...

This commit is contained in:
2025-02-26 22:34:40 +03:30
parent 476bcaece8
commit af9c398338
14 changed files with 1993 additions and 1986 deletions
@@ -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();
}
/**
+223 -223
View File
@@ -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);
+114 -114
View File
@@ -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 ...