This commit is contained in:
2025-05-19 19:19:33 +03:30
parent 8451bcdd6e
commit 587d208823
8 changed files with 707 additions and 779 deletions
+390 -11
View File
@@ -2043,9 +2043,17 @@ class XCBarAnalyser : public XCBase
bool IsTrigger( bool IsTrigger(
XOHCL &bar, XOHCL &bar,
XBoxZone &box, 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 forceFVGBarType = false,
bool forceOBTwoBar = false, // bool forceOBTwoBar = false //
int loopback = 5 //
) )
{ {
// //
@@ -2053,7 +2061,11 @@ class XCBarAnalyser : public XCBase
// //
// Normalize Args ... // Normalize Args ...
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
swingBar.Clean();
liquidity.Clean();
loopback = NormalizeInt(loopback, 5); loopback = NormalizeInt(loopback, 5);
// //
@@ -2070,16 +2082,21 @@ class XCBarAnalyser : public XCBase
XOHCL iPBar; XOHCL iPBar;
int barIndex; int barIndex;
int pBarIndex; int pBarIndex;
ENUM_X_DIRECTION iDir;
// //
result = bar.GetPreviousBar(pBar); result = bar.GetPreviousBar(pBar);
if (!result) if (!result)
{ {
// //
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
pBar.Clean(); pBar.Clean();
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
swingBar.Clean();
liquidity.Clean();
// //
return result; return result;
@@ -2109,13 +2126,47 @@ class XCBarAnalyser : public XCBase
// Detect Block ... // Detect Block ...
result = IsOB( result = IsOB(
iBar, iBar,
box, ob,
forceFVGBarType, forceFVGBarType,
forceOBTwoBar // forceOBTwoBar //
); );
if (result) 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) if (!result)
{ {
// //
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
pBar.Clean(); pBar.Clean();
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
swingBar.Clean();
liquidity.Clean();
// //
return result; return result;
@@ -2146,29 +2201,32 @@ class XCBarAnalyser : public XCBase
// //
// Detect Swing Bar ... // Detect Swing Bar ...
XOHCL swingBar;
int swingBarIDX = -1; int swingBarIDX = -1;
int swingLoopback = fromIDX - barIndex; int swingLoopback = fromIDX - pBarIndex;
if (isBullish) if (isBullish)
{ {
// //
// Looking for Swing Low ... // Looking for Swing Low ...
swingBarIDX = bar.FindLowestIndex(swingLoopback, MODE_LOW); swingBarIDX = pBar.FindLowestIndex(swingLoopback, MODE_LOW);
} }
else if (isBearish) else if (isBearish)
{ {
// //
// Looking for Swing High ... // Looking for Swing High ...
swingBarIDX = bar.FindLowestIndex(swingLoopback, MODE_LOW); swingBarIDX = pBar.FindHighestIndex(swingLoopback, MODE_LOW);
} }
result = IsValidIndex(swingBarIDX); result = IsValidIndex(swingBarIDX);
if (!result) if (!result)
{ {
// //
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
pBar.Clean();
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
swingBar.Clean(); swingBar.Clean();
liquidity.Clean();
// //
return result; return result;
@@ -2184,15 +2242,30 @@ class XCBarAnalyser : public XCBase
if (!result) if (!result)
{ {
// //
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
pBar.Clean();
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
swingBar.Clean(); swingBar.Clean();
liquidity.Clean();
// //
return result; 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 ... // Now we Have to Check Spike from Swing Bar Next till Current Bar ...
// To Validate Highs and Lows ... // To Validate Highs and Lows ...
@@ -2236,32 +2309,338 @@ class XCBarAnalyser : public XCBase
} }
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
//
// Ensure Spike Happens ...
if (!result) if (!result)
{ {
// //
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
pBar.Clean(); pBar.Clean();
iBar.Clean(); iBar.Clean();
iPBar.Clean(); iPBar.Clean();
swingBar.Clean();
liquidity.Clean();
// //
return result; 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 ... // Cleanup Resources ...
// //
iBar.Clean(); iBar.Clean();
pBar.Clean();
iPBar.Clean();
swingBar.Clean(); swingBar.Clean();
// //
if (!result) if (!result)
{ {
//
ob.Clean();
fvg.Clean();
box.Clean(); box.Clean();
swingBar.Clean();
liquidity.Clean();
} }
// //
+210 -766
View File
File diff suppressed because it is too large Load Diff
+10
View File
@@ -163,6 +163,16 @@ struct X121X3MAInputs
showMedium = true; showMedium = true;
} }
//
// Hide all Visible Buffers ...
void Hide()
{
//
showFast = false;
showSlow = false;
showMedium = false;
}
// //
// Validate ... // Validate ...
bool IsValid() bool IsValid()
+30
View File
@@ -403,6 +403,36 @@ struct X121XCAInputs
swingHighArrowCode = 226; // Swing High Arrow Code 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 ... // Validate ...
bool IsValid() bool IsValid()
+8 -1
View File
@@ -99,6 +99,13 @@ struct X121XCCInputs
showCandles = true; showCandles = true;
} }
//
// Hide all Visible Buffers ...
void Hide()
{
showCandles = false;
}
// //
// Validate ... // Validate ...
bool IsValid() bool IsValid()
@@ -161,7 +168,7 @@ class XCX121XCCHelper : public XCBaseHelper
bool Init( bool Init(
string symbol, // Trading Symbol string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period ENUM_TIMEFRAMES period, // Trading Period
X121XCCInputs &inputs // Inputs X121XCCInputs &inputs // Inputs
) )
{ {
// //
+8 -1
View File
@@ -87,6 +87,13 @@ struct X121XCTInputs
showCandleTime = true; showCandleTime = true;
} }
//
// Hide all Visible Buffers ...
void Hide()
{
showCandleTime = false;
}
// //
// Validate ... // Validate ...
bool IsValid() bool IsValid()
@@ -149,7 +156,7 @@ class XCX121XCTHelper : public XCBaseHelper
bool Init( bool Init(
string symbol, // Trading Symbol string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period ENUM_TIMEFRAMES period, // Trading Period
X121XCTInputs &inputs // Inputs X121XCTInputs &inputs // Inputs
) )
{ {
// //
+40
View File
@@ -5511,6 +5511,46 @@ struct XBoxZone
IsBearish(dir); 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 ... * Check Box is Same as Other ...
* *
+11
View File
@@ -107,6 +107,17 @@ struct XCAEAInputs
oscsInputs.Default(); oscsInputs.Default();
} }
/**
* Hide all Visibles ...
*/
void Hide()
{
//
ctInputs.Hide();
caInputs.Hide();
x3maInputs.Hide();
}
/** /**
* Validate ... * Validate ...
* *