last ...
This commit is contained in:
@@ -2043,9 +2043,17 @@ class XCBarAnalyser : public XCBase
|
||||
bool IsTrigger(
|
||||
XOHCL &bar,
|
||||
XBoxZone &box,
|
||||
XBoxZone &ob,
|
||||
XBoxZone &fvg,
|
||||
XBoxZone &liquidity,
|
||||
XOHCL &swingBar,
|
||||
int loopback = 10,
|
||||
bool forceLiquidity = true,
|
||||
bool forceLiquidityUsed = true,
|
||||
bool forceEntryBar = true,
|
||||
bool forceEntryBarPower = true,
|
||||
bool forceFVGBarType = false,
|
||||
bool forceOBTwoBar = false, //
|
||||
int loopback = 5 //
|
||||
bool forceOBTwoBar = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -2053,7 +2061,11 @@ class XCBarAnalyser : public XCBase
|
||||
|
||||
//
|
||||
// Normalize Args ...
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
loopback = NormalizeInt(loopback, 5);
|
||||
|
||||
//
|
||||
@@ -2070,16 +2082,21 @@ class XCBarAnalyser : public XCBase
|
||||
XOHCL iPBar;
|
||||
int barIndex;
|
||||
int pBarIndex;
|
||||
ENUM_X_DIRECTION iDir;
|
||||
|
||||
//
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -2109,13 +2126,47 @@ class XCBarAnalyser : public XCBase
|
||||
// Detect Block ...
|
||||
result = IsOB(
|
||||
iBar,
|
||||
box,
|
||||
ob,
|
||||
forceFVGBarType,
|
||||
forceOBTwoBar //
|
||||
);
|
||||
if (result)
|
||||
{
|
||||
break;
|
||||
//
|
||||
// Validate Block Last Bars ...
|
||||
XOHCL fromBar;
|
||||
XOHCL fromBarPrev;
|
||||
result = ob.FromBar(fromBar);
|
||||
result =
|
||||
result &&
|
||||
fromBar.GetPreviousBar(fromBarPrev);
|
||||
result =
|
||||
result &&
|
||||
(ob.IsBullish()
|
||||
? fromBarPrev.IsBearish()
|
||||
: fromBarPrev.IsBullish());
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Detect FVG ...
|
||||
result = IsFVG(
|
||||
iBar,
|
||||
fvg,
|
||||
forceFVGBarType //
|
||||
);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
box.Clone(ob);
|
||||
box.type = "XTRG";
|
||||
box.from = fromBarPrev.time;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
fromBar.Clean();
|
||||
fromBarPrev.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2129,10 +2180,14 @@ class XCBarAnalyser : public XCBase
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -2146,29 +2201,32 @@ class XCBarAnalyser : public XCBase
|
||||
|
||||
//
|
||||
// Detect Swing Bar ...
|
||||
XOHCL swingBar;
|
||||
int swingBarIDX = -1;
|
||||
int swingLoopback = fromIDX - barIndex;
|
||||
int swingLoopback = fromIDX - pBarIndex;
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
// Looking for Swing Low ...
|
||||
swingBarIDX = bar.FindLowestIndex(swingLoopback, MODE_LOW);
|
||||
swingBarIDX = pBar.FindLowestIndex(swingLoopback, MODE_LOW);
|
||||
}
|
||||
else if (isBearish)
|
||||
{
|
||||
//
|
||||
// Looking for Swing High ...
|
||||
swingBarIDX = bar.FindLowestIndex(swingLoopback, MODE_LOW);
|
||||
swingBarIDX = pBar.FindHighestIndex(swingLoopback, MODE_LOW);
|
||||
}
|
||||
result = IsValidIndex(swingBarIDX);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -2184,15 +2242,30 @@ class XCBarAnalyser : public XCBase
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Update Trigger Box ...
|
||||
if (isBullish)
|
||||
{
|
||||
box.lower = MathMin(box.lower, swingBar.GetDown());
|
||||
}
|
||||
else if (isBearish)
|
||||
{
|
||||
box.upper = MathMin(box.upper, swingBar.GetUp());
|
||||
}
|
||||
|
||||
//
|
||||
// Now we Have to Check Spike from Swing Bar Next till Current Bar ...
|
||||
// To Validate Highs and Lows ...
|
||||
@@ -2236,32 +2309,338 @@ class XCBarAnalyser : public XCBase
|
||||
}
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
|
||||
//
|
||||
// Ensure Spike Happens ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// We Have to Make sure Bars until Spikes Closed ...
|
||||
// for Bullish: bars must Close Above box.upper ...
|
||||
// for Bearish: bars must Close Below box.lower ...
|
||||
for (int i = pBarIndex; i < toIDX; i++)
|
||||
{
|
||||
//
|
||||
// Initialize iBar ...
|
||||
result = iBar.Init(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
i //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
(isBullish
|
||||
? iBar.close > box.upper
|
||||
: iBar.close < box.lower);
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
iBar.Clean();
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Now we Have to Detect Spike Breake Ruls ...
|
||||
// for Bullish: bar.low goes Below of pBar.low ...
|
||||
// for Bearish: bar.high goes Above of pBar.high ...
|
||||
if (isBullish)
|
||||
{
|
||||
result = bar.low < pBar.low;
|
||||
}
|
||||
else if (isBearish)
|
||||
{
|
||||
result = bar.high > pBar.high;
|
||||
}
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Update Box ...
|
||||
if (isBullish)
|
||||
{
|
||||
box.upper = MathMax(box.upper, bar.GetDown());
|
||||
}
|
||||
else if (isBearish)
|
||||
{
|
||||
box.lower = MathMin(box.lower, bar.GetUp());
|
||||
}
|
||||
box.to = bar.time;
|
||||
|
||||
//
|
||||
toIDX = box.ToIndex();
|
||||
fromIDX = box.FromIndex();
|
||||
|
||||
//
|
||||
// Liquidity ...
|
||||
if (forceLiquidity)
|
||||
{
|
||||
//
|
||||
// Now we Have to Detect Liquidity Zone ...
|
||||
for (int i = fromIDX; i < fromIDX + loopback; i++)
|
||||
{
|
||||
//
|
||||
// Initialize iBar
|
||||
result = iBar.Init(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
i //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
IsRejected(
|
||||
iBar,
|
||||
iDir,
|
||||
false, // Force Bar Type ...
|
||||
true // Force Fibo Pressure ...
|
||||
) &&
|
||||
iDir == box.dir &&
|
||||
(isBullish
|
||||
? iBar.low < box.lower
|
||||
: iBar.high > box.upper);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Filling Liquidity ...
|
||||
liquidity.dir = iDir;
|
||||
liquidity.to = box.to;
|
||||
liquidity.type = "XLQ";
|
||||
liquidity.from = iBar.time;
|
||||
liquidity.symbol = iBar.symbol;
|
||||
liquidity.period = iBar.period;
|
||||
liquidity.upper = isBullish
|
||||
? iBar.GetDown()
|
||||
: iBar.high;
|
||||
liquidity.lower = isBullish
|
||||
? iBar.low
|
||||
: iBar.GetUp();
|
||||
|
||||
//
|
||||
result = liquidity.IsValid();
|
||||
if (result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
iBar.Clean();
|
||||
result = liquidity.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Liquidity Usage ...
|
||||
if (forceLiquidityUsed)
|
||||
{
|
||||
//
|
||||
// now We have to Ensure Detected Liqudity is Used ...
|
||||
toIDX = box.ToIndex();
|
||||
fromIDX = liquidity.FromIndex();
|
||||
for (int i = fromIDX - 1; i >= toIDX; i--)
|
||||
{
|
||||
//
|
||||
// Initialize iBar ...
|
||||
result = iBar.Init(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
i //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
(isBullish
|
||||
? iBar.low < liquidity.upper
|
||||
: iBar.high > liquidity.lower);
|
||||
if (result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Entry Bar ...
|
||||
if (forceEntryBar)
|
||||
{
|
||||
//
|
||||
// Validate Bar is Not Opposit Powered Bar ...
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
bool isMomentum = IsMomentum(
|
||||
bar,
|
||||
iDir,
|
||||
1 //
|
||||
);
|
||||
bool isBullishMomentum =
|
||||
isMomentum &&
|
||||
IsBullish(iDir);
|
||||
bool isBearishMomentum =
|
||||
isMomentum &&
|
||||
IsBearish(iDir);
|
||||
|
||||
//
|
||||
// Engulfed ...
|
||||
bool isEngulfed = IsEngulfed(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
bool isBullishEngulfed =
|
||||
isEngulfed &&
|
||||
IsBullish(iDir);
|
||||
bool isBearishEngulfed =
|
||||
isEngulfed &&
|
||||
IsBearish(iDir);
|
||||
|
||||
//
|
||||
// Rejected ...
|
||||
bool isRejected = IsRejected(
|
||||
bar,
|
||||
iDir,
|
||||
false,
|
||||
true //
|
||||
);
|
||||
bool isBullishRejected =
|
||||
isRejected &&
|
||||
IsBullish(iDir);
|
||||
bool isBearishRejected =
|
||||
isRejected &&
|
||||
IsBearish(iDir);
|
||||
|
||||
//
|
||||
bool isBullishPowered =
|
||||
isBullishMomentum ||
|
||||
isBullishEngulfed ||
|
||||
isBullishRejected;
|
||||
|
||||
//
|
||||
bool isBearishPowered =
|
||||
isBearishMomentum ||
|
||||
isBearishEngulfed ||
|
||||
isBearishRejected;
|
||||
|
||||
//
|
||||
// Make Sure Entry Bar is a Valid Bar ...
|
||||
result =
|
||||
isBullish
|
||||
? !isBearishPowered && (!forceEntryBarPower
|
||||
? true
|
||||
: isBullishPowered)
|
||||
: !isBullishPowered && (!forceEntryBarPower
|
||||
? true
|
||||
: isBearishPowered);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
pBar.Clean();
|
||||
iBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
pBar.Clean();
|
||||
iPBar.Clean();
|
||||
swingBar.Clean();
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ob.Clean();
|
||||
fvg.Clean();
|
||||
box.Clean();
|
||||
swingBar.Clean();
|
||||
liquidity.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
+210
-766
File diff suppressed because it is too large
Load Diff
@@ -163,6 +163,16 @@ struct X121X3MAInputs
|
||||
showMedium = true;
|
||||
}
|
||||
|
||||
//
|
||||
// Hide all Visible Buffers ...
|
||||
void Hide()
|
||||
{
|
||||
//
|
||||
showFast = false;
|
||||
showSlow = false;
|
||||
showMedium = false;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool IsValid()
|
||||
|
||||
@@ -403,6 +403,36 @@ struct X121XCAInputs
|
||||
swingHighArrowCode = 226; // Swing High Arrow Code
|
||||
}
|
||||
|
||||
//
|
||||
// Hide all Visible Buffers ...
|
||||
void Hide()
|
||||
{
|
||||
//
|
||||
showSar = false; // Show Sar
|
||||
showKI = false; // Show KI
|
||||
showTKI = false; // Show TKI
|
||||
showMAH = false; // Show MAH
|
||||
showMAL = false; // Show MAL
|
||||
showMAC = false; // Show MAC
|
||||
showVidya = false; // Show Vidya
|
||||
showTrend = false; // Show Trend
|
||||
showSwings = false; // Show Swings
|
||||
showFiboLevel1 = false; // Show Fibo Level 1
|
||||
showFiboLevel2 = false; // Show Fibo Level 2
|
||||
showFiboLevel3 = false; // Show Fibo Level 3
|
||||
showFiboLevel4 = false; // Show Fibo Level 4
|
||||
showFiboLevel5 = false; // Show Fibo Level 5
|
||||
showPeaksAndVales = false; // Show Peaks And Vales
|
||||
showPeakAndValeGolden = false; // Show Peak and Vale Golden
|
||||
showSupportAndResistance = false; // Show Support and Resistance
|
||||
|
||||
//
|
||||
showShortCycle = false; // Show Short Cycle
|
||||
showMediumCycle = false; // Show Medium Cycle
|
||||
showLongCycle = false; // Show Long Cycle
|
||||
showHindCycle = false; // Show Hind Cycle
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool IsValid()
|
||||
|
||||
@@ -99,6 +99,13 @@ struct X121XCCInputs
|
||||
showCandles = true;
|
||||
}
|
||||
|
||||
//
|
||||
// Hide all Visible Buffers ...
|
||||
void Hide()
|
||||
{
|
||||
showCandles = false;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool IsValid()
|
||||
@@ -161,7 +168,7 @@ class XCX121XCCHelper : public XCBaseHelper
|
||||
bool Init(
|
||||
string symbol, // Trading Symbol
|
||||
ENUM_TIMEFRAMES period, // Trading Period
|
||||
X121XCCInputs &inputs // Inputs
|
||||
X121XCCInputs &inputs // Inputs
|
||||
)
|
||||
{
|
||||
//
|
||||
|
||||
@@ -87,6 +87,13 @@ struct X121XCTInputs
|
||||
showCandleTime = true;
|
||||
}
|
||||
|
||||
//
|
||||
// Hide all Visible Buffers ...
|
||||
void Hide()
|
||||
{
|
||||
showCandleTime = false;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool IsValid()
|
||||
@@ -149,7 +156,7 @@ class XCX121XCTHelper : public XCBaseHelper
|
||||
bool Init(
|
||||
string symbol, // Trading Symbol
|
||||
ENUM_TIMEFRAMES period, // Trading Period
|
||||
X121XCTInputs &inputs // Inputs
|
||||
X121XCTInputs &inputs // Inputs
|
||||
)
|
||||
{
|
||||
//
|
||||
|
||||
@@ -5511,6 +5511,46 @@ struct XBoxZone
|
||||
IsBearish(dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone Box by Provided Source ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Clone(XBoxZone &source)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
Clean();
|
||||
result = source.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Filling Props ...
|
||||
to = source.to;
|
||||
dir = source.dir;
|
||||
from = source.from;
|
||||
type = source.type;
|
||||
upper = source.upper;
|
||||
lower = source.lower;
|
||||
symbol = source.symbol;
|
||||
period = source.period;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
if (!result)
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Box is Same as Other ...
|
||||
*
|
||||
|
||||
@@ -107,6 +107,17 @@ struct XCAEAInputs
|
||||
oscsInputs.Default();
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide all Visibles ...
|
||||
*/
|
||||
void Hide()
|
||||
{
|
||||
//
|
||||
ctInputs.Hide();
|
||||
caInputs.Hide();
|
||||
x3maInputs.Hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ...
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user