Files
MQL5Data/Documents/BKP/1.mq5
T
2025-02-28 00:45:08 +03:30

1430 lines
29 KiB
Plaintext

//
// Fix Signal TP Based On Working Zone ...
// double maxAllowedTP =
// hasLong
// ? mXWZConditions.workingZone.upper
// : mXWZConditions.workingZone.lower;
// bool canApplyMaxAlowedTP = (hasLong &&
// signal.tp > maxAllowedTP) ||
// (!hasLong && signal.tp < maxAllowedTP);
// if (canApplyMaxAlowedTP)
// {
// signal.tp = maxAllowedTP;
// }
//
// Configuring Global Protector ...
// signal.trailSL = true;
// signal.trailSLStartOnReachTPLevel = 3;
// signal.fullTPLevel = signal.GetRiskRewardRatio();
// //
// mXSupDemOBSSignalDetector.RemoveDraws();
// mXSupDemOBSSignalDetector.DrawConditions(
// mXSupDemOBSConditions,
// mVisionCycleHelper.mPOIDrawer //
// );
// //
// mXSupDemOBSSignalDetector.RemoveWorkingZoneDraws();
// mXSupDemOBSSignalDetector.DrawWorkingZone(
// mXSupDemOBSConditions,
// mVisionCycleHelper.mPOIDrawer //
// );
//
// bool canReplaceTarget =
// signal.target > 0 &&
// (hasLong
// ? signal.target > signal.tp
// : signal.target < signal.tp);
// if (canReplaceTarget)
// {
// //
// signal.tp = conditions.target;
// signal.target = tp;
// }
//
// consolidationState.UpdateTo(cTime);
// XPOIState filtered;
// consolidationState.Filter(
// filtered,
// NULL,
// XZONE_STATE_PASSED,
// false,
// XZONE_STATE_FAILED,
// false,
// XZONE_STATE_FAILED,
// false,
// XZONE_STATE_IGNORED,
// false //
// );
// XCBaseObject *objects[];
// int objectsCount = drawer.DrawState(
// filtered,
// objects //
// );
// if (IsValidSize(objectsCount))
// {
// //
// Print("");
// }
// //
// XOBFVG activeObfvgs[];
// int activeObfvgsCount = ExtractOBFVGs(
// activeObfvgs,
// consolidationState,
// analyseState //
// );
// bool hasActiveOBFVGs = IsValidSize(activeObfvgsCount);
// if (hasActiveOBFVGs)
// {
// //
// SpecifiedUpdateTo(activeObfvgs);
// for (int i = 0; i < activeObfvgsCount; i++)
// {
// //
// XCBaseObject *objects[];
// int objectsCount = drawer.DrawOBFVG(
// activeObfvgs[i],
// objects //
// );
// }
// }
// //
// // Swings ...
// bool lookupSwings = ArraySize(mSwingLows) < mMaxRequiredPOIs ||
// ArraySize(mSwingHighs) < mMaxRequiredPOIs;
// lookupSwings =
// ignoreMaxAllowed
// ? true
// : lookupSwings;
// if (has &&
// lookupSwings)
// {
// }
// //
// // Momentum Bar ...
// bool lookupMomentums = ArraySize(mBullishMomentumBars) < mMaxRequiredPOIs ||
// ArraySize(mBearishMomentumBars) < mMaxRequiredPOIs;
// lookupMomentums =
// ignoreMaxAllowed
// ? true
// : lookupMomentums;
// if (has &&
// lookupMomentums)
// {
// }
// //
// // Rejection Bar ...
// bool lookupRejections = ArraySize(mBullishRejectionBars) < mMaxRequiredPOIs ||
// ArraySize(mBearishRejectionBars) < mMaxRequiredPOIs;
// lookupRejections =
// ignoreMaxAllowed
// ? true
// : lookupRejections;
// if (has &&
// lookupRejections)
// {
// }
// //
// // Support ...
// bool lookupSupports = ArraySize(mSupportZones) < mMaxRequiredPOIs;
// lookupSupports =
// ignoreMaxAllowed
// ? true
// : lookupSupports;
// if (has &&
// lookupSupports)
// {
// }
// //
// // Demand ...
// bool lookupDemands = ArraySize(mDemandZones) < mMaxRequiredPOIs;
// lookupDemands =
// ignoreMaxAllowed
// ? true
// : lookupDemands;
// if (has &&
// lookupDemands)
// {
// }
// //
// // Resistance ...
// bool lookupResistance = ArraySize(mResistanceZones) < mMaxRequiredPOIs;
// lookupResistance =
// ignoreMaxAllowed
// ? true
// : lookupResistance;
// if (has &&
// lookupResistance)
// {
// }
// //
// // Supply ...
// bool lookupSupplies = ArraySize(mSupplyZones) < mMaxRequiredPOIs;
// lookupSupplies =
// ignoreMaxAllowed
// ? true
// : lookupSupplies;
// if (has &&
// lookupSupplies)
// {
// }
// //
// // OrderBlock ...
// bool lookupOrderBlocks = ArraySize(mBullishOrderBlocks) < mMaxRequiredPOIs ||
// ArraySize(mBearishOrderBlocks) < mMaxRequiredPOIs;
// lookupOrderBlocks =
// ignoreMaxAllowed
// ? true
// : lookupOrderBlocks;
// if (has &&
// lookupOrderBlocks)
// {
// }
// //
// // FairValueGap ...
// bool lookupFairValeGaps = ArraySize(mBullishFairValueGaps) < mMaxRequiredPOIs ||
// ArraySize(mBearishFairValueGaps) < mMaxRequiredPOIs;
// lookupFairValeGaps =
// ignoreMaxAllowed
// ? true
// : lookupFairValeGaps;
// if (has &&
// (lookupFairValeGaps))
// {
// }
//
XCBaseObject *stateObjects[];
int stateObjectsCount = drawer.DrawState(
decisionState,
stateObjects,
false, //
true, // ignoreSwingHighs
true, // ignoreSwingLows
true, // ignoreSupportZones
true, // ignoreResistanceZones
true, // ignoreSupplyZones
true, // ignoreDemandZones
true, // ignoreBullishOrderBlocks
true, // ignoreBearishOrderBlocks
true, // ignoreBullishFairValueGaps
true, // ignoreBearishFairValueGaps
true, // ignoreBullishRejectionBars
true, // ignoreBearishRejectionBars
true, // ignoreBullishMomentumBars
true, // ignoreBearishMomentumBars
false, // ignoreBullishConsolidationZones
false // ignoreBearishConsolidationZones
);
//
// Draw ...
if (hasSelectedConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
selectedConsolidationZone.to = cTime;
bool isCreated = drawer.CreateConsolidationZone(
selectedConsolidationZone,
iObj //
);
}
/////////////////////////////////////////////////////////////////////////////////////
// //
// // Based On Waiting Zones ...
// has = isBarInited &&
// hasWorkingZone;
// if (has)
// {
// //
// XOBFVG tmpZones[];
// Copy(
// workingZone.waitingZones,
// tmpZones //
// );
// //
// while (HasChild(tmpZones))
// {
// //
// XOBFVG iOBFVG;
// //
// idx = GetYoungest(tmpZones);
// if (!IsValidIndex(idx))
// {
// //
// iOBFVG.Clean();
// break;
// }
// //
// iOBFVG = tmpZones[idx];
// ArrayRemove(
// tmpZones,
// idx,
// 1 //
// );
// //
// double iTarget =
// isSelectedZonDirBullish
// ? iOBFVG.ob.Lower()
// : iOBFVG.ob.Upper();
// //
// has =
// isSelectedZonDirBullish
// ? cBar.high < iTarget
// : cBar.low > iTarget;
// //
// if (has)
// {
// //
// Add(
// iTarget,
// targets //
// );
// }
// //
// iOBFVG.Clean();
// }
// //
// Clean(tmpZones);
// }
// //
// // Based On Breaked Zones ...
// has = isBarInited &&
// hasBreakedZones;
// if (has)
// {
// //
// XOBFVG tmpZones[];
// Copy(
// workingZone.breakedZones,
// tmpZones //
// );
// //
// while (HasChild(tmpZones))
// {
// //
// XOBFVG iOBFVG;
// //
// idx = GetYoungest(tmpZones);
// if (!IsValidIndex(idx))
// {
// //
// iOBFVG.Clean();
// break;
// }
// //
// iOBFVG = tmpZones[idx];
// ArrayRemove(
// tmpZones,
// idx,
// 1 //
// );
// //
// double iTarget =
// isSelectedZonDirBullish
// ? iOBFVG.ob.Lower()
// : iOBFVG.ob.Upper();
// //
// has =
// isSelectedZonDirBullish
// ? cBar.high < iTarget
// : cBar.low > iTarget;
// //
// if (has)
// {
// //
// Add(
// iTarget,
// targets //
// );
// }
// //
// iOBFVG.Clean();
// }
// //
// Clean(tmpZones);
// }
// //
// // Based On Priority ...
// if (hasPriority)
// {
// //
// switch (priority)
// {
// //
// case X121SMC_XWZ_PRIORITY_WEAK:
// //
// if (isSelectedZonDirBullish)
// {
// //
// // Weak ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// }
// else
// {
// //
// // Weak ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// }
// break;
// //
// case X121SMC_XWZ_PRIORITY_LOW:
// //
// if (isSelectedZonDirBullish)
// {
// //
// // Weak ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter1,
// targets //
// );
// }
// else
// {
// //
// // Weak ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter3,
// targets //
// );
// }
// break;
// //
// case X121SMC_XWZ_PRIORITY_REGULAR:
// //
// if (isSelectedZonDirBullish)
// {
// //
// // Weak ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter1,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// }
// else
// {
// //
// // Weak ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter3,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// }
// break;
// //
// case X121SMC_XWZ_PRIORITY_HIGH:
// //
// if (isSelectedZonDirBullish)
// {
// //
// // Weak ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter1,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// //
// // High ...
// Add(
// workingZone.quarter3,
// targets //
// );
// }
// else
// {
// //
// // Weak ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter3,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// //
// // High ...
// Add(
// workingZone.quarter1,
// targets //
// );
// }
// break;
// //
// case X121SMC_XWZ_PRIORITY_STRONG_HIGH:
// //
// if (isSelectedZonDirBullish)
// {
// //
// // Weak ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter1,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// //
// // High ...
// Add(
// workingZone.quarter3,
// targets //
// );
// //
// // Strong High ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// }
// else
// {
// //
// // Weak ...
// Add(
// workingZone.demandZone.Upper(),
// targets //
// );
// //
// // Low ...
// Add(
// workingZone.quarter3,
// targets //
// );
// //
// // Regular ...
// Add(
// workingZone.quarter2,
// targets //
// );
// //
// // High ...
// Add(
// workingZone.quarter1,
// targets //
// );
// //
// // Strong High ...
// Add(
// workingZone.supplyZone.Lower(),
// targets //
// );
// }
// break;
// }
// }
////////////////////////////////////////////////////////////////////
//
// Based On Consolidation Zones ...
has = isBarInited &&
decisionState.HasConsolidationZones();
if (has)
{
//
XConsolidationZone tmpZones[];
if (isSelectedZonDirBullish)
{
//
Copy(
decisionState.bullishConsolidationZones,
tmpZones //
);
}
else
{
//
Copy(
decisionState.bearishConsolidationZones,
tmpZones //
);
}
//
while (HasChild(tmpZones))
{
//
idx = GetYoungest(tmpZones);
if (!IsValidIndex(idx))
{
break;
}
//
XConsolidationZone iZone = tmpZones[idx];
//
ArrayRemove(
tmpZones,
idx,
1 //
);
//
hasSelectedConsolidationZone =
isSelectedZonDirBullish
? cBar.low < iZone.upper
: cBar.high < iZone.lower;
if (hasSelectedConsolidationZone)
{
//
selectedConsolidationZone = iZone;
iZone.Clean();
break;
}
//
iZone.Clean();
}
//
Clean(tmpZones);
//
if (hasSelectedConsolidationZone)
{
//
XCConsolidationZoneObject *iObj;
selectedConsolidationZone.to = cTime;
bool isCreated = drawer.CreateConsolidationZone(
selectedConsolidationZone,
iObj //
);
//
double iSL =
isSelectedZonDirBullish
? selectedConsolidationZone.lower
: selectedConsolidationZone.upper;
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
}
//
// Based On Supply and Demand Zones ...
//
// Demand Zones ...
has = hasWorkingZone &&
workingZone.HasDemandZones();
if (has)
{
//
XCDemandZone *tmpZones[];
Copy(
workingZone.demandZones,
tmpZones //
);
XCDemandZone *selectedDemand = NULL;
//
while (HasChild(tmpZones))
{
//
idx = GetLowest(tmpZones);
has = IsValidIndex(idx);
if (!has)
{
break;
}
//
XCDemandZone *iZone = tmpZones[idx];
ArrayRemove(
tmpZones,
idx,
1 //
);
//
// Validate Zone ...
has =
isSelectedZonDirBullish
? IsBelowDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
)
: IsAboveDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
);
if (!has)
{
continue;
}
//
has =
selectedDemand == NULL
? true
: isSelectedZonDirBullish
? selectedDemand.Lower() < iZone.Lower()
: selectedDemand.Upper() > iZone.Upper();
if (!has)
{
continue;
}
//
selectedDemand = iZone;
//
}
//
has = selectedDemand != NULL;
if (has)
{
//
XCDemandZoneObject *iObj;
bool isCreated = drawer.CreateDemandZone(
selectedDemand,
iObj //
);
//
double iSL =
isSelectedZonDirBullish
? selectedDemand.Lower()
: selectedDemand.Upper();
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
Clean(tmpZones);
ZeroMemory(selectedDemand);
}
//
// Support Zones ...
has = hasWorkingZone &&
workingZone.HasSupportZones();
if (has)
{
//
XCSupportZone *tmpZones[];
Copy(
workingZone.supportZones,
tmpZones //
);
XCSupportZone *selectedSupport = NULL;
//
while (HasChild(tmpZones))
{
//
idx = GetLowest(tmpZones);
has = IsValidIndex(idx);
if (!has)
{
break;
}
//
XCSupportZone *iZone = tmpZones[idx];
ArrayRemove(
tmpZones,
idx,
1 //
);
//
// Validate Zone ...
has =
isSelectedZonDirBullish
? IsBelowDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
)
: IsAboveDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
);
if (!has)
{
continue;
}
//
has =
selectedSupport == NULL
? true
: isSelectedZonDirBullish
? selectedSupport.Lower() < iZone.Lower()
: selectedSupport.Upper() > iZone.Upper();
if (!has)
{
continue;
}
//
selectedSupport = iZone;
//
}
//
has = selectedSupport != NULL;
if (has)
{
//
XCSupportZoneObject *iObj;
bool isCreated = drawer.CreateSupportZone(
selectedSupport,
iObj //
);
//
double iSL = isSelectedZonDirBullish
? selectedSupport.Lower()
: selectedSupport.Upper();
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
Clean(tmpZones);
ZeroMemory(selectedSupport);
}
//
// Supply Zones ...
has = hasWorkingZone &&
workingZone.HasSupplyZones();
if (has)
{
//
XCSupplyZone *tmpZones[];
Copy(
workingZone.supplyZones,
tmpZones //
);
XCSupplyZone *selectedSupply = NULL;
//
while (HasChild(tmpZones))
{
//
idx = GetHighest(tmpZones);
has = IsValidIndex(idx);
if (!has)
{
break;
}
//
XCSupplyZone *iZone = tmpZones[idx];
ArrayRemove(
tmpZones,
idx,
1 //
);
//
// Validate Zone ...
has =
!isSelectedZonDirBullish
? IsAboveDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
)
: IsBelowDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
);
if (!has)
{
continue;
}
//
has =
selectedSupply == NULL
? true
: !isSelectedZonDirBullish
? selectedSupply.Upper() > iZone.Upper()
: selectedSupply.Lower() < iZone.Lower();
if (!has)
{
continue;
}
//
selectedSupply = iZone;
//
}
//
has = selectedSupply != NULL;
if (has)
{
//
XCSupplyZoneObject *iObj;
bool isCreated = drawer.CreateSupplyZone(
selectedSupply,
iObj //
);
//
double iSL =
!isSelectedZonDirBullish
? selectedSupply.Upper()
: selectedSupply.Lower();
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
Clean(tmpZones);
ZeroMemory(selectedSupply);
}
//
// Resistance Zones ...
has = hasWorkingZone &&
workingZone.HasDemandZones();
if (has)
{
//
XCResistanceZone *tmpZones[];
Copy(
workingZone.resistanceZones,
tmpZones //
);
XCResistanceZone *selectedResistance = NULL;
//
while (HasChild(tmpZones))
{
//
idx = GetHighest(tmpZones);
has = IsValidIndex(idx);
if (!has)
{
break;
}
//
XCResistanceZone *iZone = tmpZones[idx];
ArrayRemove(
tmpZones,
idx,
1 //
);
//
// Validate Zone ...
has =
!isSelectedZonDirBullish
? IsAboveDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
)
: IsBelowDiff(
iZone,
selectedZone.ob,
true // Ignore Inside ...
);
if (!has)
{
continue;
}
//
has =
selectedResistance == NULL
? true
: !isSelectedZonDirBullish
? selectedResistance.Upper() < iZone.Upper()
: selectedResistance.Lower() > iZone.Lower();
if (!has)
{
continue;
}
//
selectedResistance = iZone;
//
}
//
has = selectedResistance != NULL;
if (has)
{
//
XCResistanceZoneObject *iObj;
bool isCreated = drawer.CreateResistanceZone(
selectedResistance,
iObj //
);
//
double iSL =
!isSelectedZonDirBullish
? selectedResistance.Upper()
: selectedResistance.Lower();
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
Clean(tmpZones);
ZeroMemory(selectedResistance);
}
//
// Based On Passed Bars ...
XOHCL passedBar;
bool isPassed = false;
bool isBodyState = false;
ENUM_X_DIRECTION passedDir = selectedZone.GetDirection();
//
// Started Bar ...
isPassed = selectedZone.ob.IsStarted(
passedDir,
passedBar,
isBodyState //
);
if (isPassed)
{
//
double iSL =
isSelectedZonDirBullish
? passedBar.low
: passedBar.high;
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
// Activation Bar ...
passedBar.Clean();
isPassed = selectedZone.ob.IsActivated(
passedDir,
passedBar,
isBodyState //
);
if (isPassed)
{
//
double iSL =
isSelectedZonDirBullish
? passedBar.low
: passedBar.high;
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
// Worked Bar ...
passedBar.Clean();
isPassed = selectedZone.ob.IsActivated(
passedDir,
passedBar,
isBodyState //
);
if (isPassed)
{
//
double iSL =
isSelectedZonDirBullish
? passedBar.low
: passedBar.high;
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
//
// Breaked Bar ...
passedBar.Clean();
isPassed = selectedZone.ob.IsActivated(
passedDir,
passedBar,
isBodyState //
);
if (isPassed)
{
//
double iSL =
isSelectedZonDirBullish
? passedBar.low
: passedBar.high;
double iSLDiff = MathAbs(iSL - pivot);
has =
iSLDiff > 0 &&
iSLDiff <= maxAllowedSLDistanceInPoint * points;
if (has)
{
//
Add(
iSL,
sls //
);
}
}
////////////////////////////////////////////////////////////////////
// //
// // Trail Stops Using Swings ...
// //
// 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 canTrailUsingSwings =
// canTrailLongUsingSwings ||
// canTraiShortlUsingSwings;
// //
// //
// //
////////////////////////////////////////////////////////////////////////////
// //
// 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;
// }
//
// zBar.Clean();
// cBar.Clean();
// pBar.Clean();
// ppBar.Clean();
//
// 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;