last ...
This commit is contained in:
@@ -0,0 +1,942 @@
|
||||
|
||||
//
|
||||
// Checking Conditions ...
|
||||
|
||||
//
|
||||
// Retrieve Some Values ...
|
||||
|
||||
//
|
||||
double peak = cXConditions.peaksBuffer[cIDX];
|
||||
double peakZ = cXConditions.peaksBuffer[zIDX];
|
||||
double peakP = cXConditions.peaksBuffer[pIDX];
|
||||
double peakPP = cXConditions.peaksBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double vale = cXConditions.valesBuffer[cIDX];
|
||||
double valeZ = cXConditions.valesBuffer[zIDX];
|
||||
double valeP = cXConditions.valesBuffer[pIDX];
|
||||
double valePP = cXConditions.valesBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double cSMHKOpen = cXConditions.xhkSMOpenBuffer[cIDX];
|
||||
double cSMHKHigh = cXConditions.xhkSMHighBuffer[cIDX];
|
||||
double cSMHKClose = cXConditions.xhkSMCloseBuffer[cIDX];
|
||||
double cSMHKLow = cXConditions.xhkSMLowBuffer[cIDX];
|
||||
double cSMHKMin = MathMin(cSMHKOpen, cSMHKClose);
|
||||
double cSMHKMax = MathMax(cSMHKOpen, cSMHKClose);
|
||||
|
||||
//
|
||||
double pSMHKOpen = cXConditions.xhkSMOpenBuffer[pIDX];
|
||||
double pSMHKHigh = cXConditions.xhkSMHighBuffer[pIDX];
|
||||
double pSMHKClose = cXConditions.xhkSMCloseBuffer[pIDX];
|
||||
double pSMHKLow = cXConditions.xhkSMLowBuffer[pIDX];
|
||||
double pSMHKMin = MathMin(pSMHKOpen, pSMHKClose);
|
||||
double pSMHKMax = MathMax(pSMHKOpen, pSMHKClose);
|
||||
|
||||
//
|
||||
double atrUpperSM = cXConditions.atrUpperSMBuffer[cIDX];
|
||||
double atrLowerSM = cXConditions.atrLowerSMBuffer[cIDX];
|
||||
|
||||
//
|
||||
double atrUpperSMZ = cXConditions.atrUpperSMBuffer[zIDX];
|
||||
double atrLowerSMZ = cXConditions.atrLowerSMBuffer[zIDX];
|
||||
|
||||
//
|
||||
double atrUpperSMP = cXConditions.atrUpperSMBuffer[pIDX];
|
||||
double atrLowerSMP = cXConditions.atrLowerSMBuffer[pIDX];
|
||||
|
||||
//
|
||||
double atrUpperSMPP = cXConditions.atrUpperSMBuffer[ppIDX];
|
||||
double atrLowerSMPP = cXConditions.atrLowerSMBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double rsiChange = cXConditions.rsiChangeBuffer[cIDX];
|
||||
double rsiChangeZ = cXConditions.rsiChangeBuffer[zIDX];
|
||||
double rsiChangeP = cXConditions.rsiChangeBuffer[pIDX];
|
||||
double rsiChangePP = cXConditions.rsiChangeBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double rsiChangeSM = cXConditions.rsiChangeSMBuffer[cIDX];
|
||||
double rsiChangeSMZ = cXConditions.rsiChangeSMBuffer[zIDX];
|
||||
double rsiChangeSMP = cXConditions.rsiChangeSMBuffer[pIDX];
|
||||
double rsiChangeSMPP = cXConditions.rsiChangeSMBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double peaksGolden = cXConditions.peaksGoldenBuffer[cIDX];
|
||||
double peaksGoldenZ = cXConditions.peaksGoldenBuffer[zIDX];
|
||||
double peaksGoldenP = cXConditions.peaksGoldenBuffer[pIDX];
|
||||
double peaksGoldenPP = cXConditions.peaksGoldenBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double valesGolden = cXConditions.valesGoldenBuffer[cIDX];
|
||||
double valesGoldenZ = cXConditions.valesGoldenBuffer[zIDX];
|
||||
double valesGoldenP = cXConditions.valesGoldenBuffer[pIDX];
|
||||
double valesGoldenPP = cXConditions.valesGoldenBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double priceChange = cXConditions.priceChangeBuffer[cIDX];
|
||||
double priceChangeZ = cXConditions.priceChangeBuffer[zIDX];
|
||||
double priceChangeP = cXConditions.priceChangeBuffer[pIDX];
|
||||
double priceChangePP = cXConditions.priceChangeBuffer[ppIDX];
|
||||
|
||||
//
|
||||
double priceChangeSM = cXConditions.priceChangeSMBuffer[cIDX];
|
||||
double priceChangeSMZ = cXConditions.priceChangeSMBuffer[zIDX];
|
||||
double priceChangeSMP = cXConditions.priceChangeSMBuffer[pIDX];
|
||||
double priceChangeSMPP = cXConditions.priceChangeSMBuffer[ppIDX];
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
// XHK ...
|
||||
|
||||
//
|
||||
bool isPBarClosedOverSMHK =
|
||||
//
|
||||
pBar.IsBullish() &&
|
||||
pBar.GetUp() > pSMHKMax &&
|
||||
pBar.GetDown() < pSMHKMin
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isPBarClosedUnderSMHK =
|
||||
//
|
||||
pBar.IsBearish() &&
|
||||
pBar.GetUp() > pSMHKMax &&
|
||||
pBar.GetDown() < pSMHKMin
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isPBarBullishPriceChangeVPattern =
|
||||
priceChangeP > priceChangePP &&
|
||||
priceChangeP > priceChange;
|
||||
|
||||
//
|
||||
bool isPBarBerishPriceChangeVPattern =
|
||||
priceChangeP < priceChangePP &&
|
||||
priceChangeP < priceChange;
|
||||
|
||||
//
|
||||
bool isPBarPriceChangeOverPeak =
|
||||
priceChangeP > peak &&
|
||||
priceChangeP > peakP &&
|
||||
priceChangeP > peakPP;
|
||||
|
||||
//
|
||||
bool isPBarPriceChangeUnderVale =
|
||||
priceChangeP < vale &&
|
||||
priceChangeP < valeP &&
|
||||
priceChangeP < valePP;
|
||||
|
||||
//
|
||||
bool isPBarCloseOverPeaksGoldenZone =
|
||||
pBar.close > peaksGoldenP;
|
||||
|
||||
//
|
||||
bool isPBarCloseUnderValesGoldenZone =
|
||||
pBar.close < valesGoldenP;
|
||||
|
||||
//
|
||||
bool isPBarPriceChangeOverAtrUpper =
|
||||
priceChangeP > atrUpperSMP;
|
||||
|
||||
//
|
||||
bool isPBarPriceChangeUnderAtrLower =
|
||||
priceChangeP < atrLowerSMP;
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
// false
|
||||
//
|
||||
hasSelectedBox &&
|
||||
selectedBox.IsBullish() &&
|
||||
cXConditions.isStrBullish
|
||||
//
|
||||
// cBar.IsBullish() &&
|
||||
// isPBarPriceChangeUnderVale &&
|
||||
// isPBarPriceChangeUnderAtrLower &&
|
||||
// isPBarBerishPriceChangeVPattern &&
|
||||
// isPBarCloseUnderValesGoldenZone
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
// false
|
||||
//
|
||||
hasSelectedBox &&
|
||||
selectedBox.IsBearish() &&
|
||||
cXConditions.isStrBearish
|
||||
//
|
||||
// cBar.IsBearish() &&
|
||||
// isPBarPriceChangeOverPeak &&
|
||||
// isPBarPriceChangeOverAtrUpper &&
|
||||
// isPBarCloseOverPeaksGoldenZone &&
|
||||
// isPBarBullishPriceChangeVPattern
|
||||
//
|
||||
;
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
double xhkSL;
|
||||
ENUM_X_DIRECTION xhkDir;
|
||||
bool isXHKPassed = IsHKConditionsPassed(
|
||||
xhkSL,
|
||||
xhkDir,
|
||||
cHelper,
|
||||
cXConditions,
|
||||
barIndex //
|
||||
);
|
||||
bool isXHKBullish =
|
||||
isXHKPassed &&
|
||||
IsBullish(xhkDir);
|
||||
bool isXHKBearish =
|
||||
isXHKPassed &&
|
||||
IsBearish(xhkDir);
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
bool IsRejectedBox(
|
||||
XOHCL &bar, // CBar ...
|
||||
XBoxZone &box,
|
||||
X121Conditions &conditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
bar.IsValid() &&
|
||||
box.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isBullish = box.IsBullish();
|
||||
|
||||
//
|
||||
bool isBullishRejected =
|
||||
isBullish &&
|
||||
bar.IsRejected(
|
||||
box.upper,
|
||||
box.dir,
|
||||
true, // Force Type ...
|
||||
true // Force Pressure ...
|
||||
);
|
||||
|
||||
//
|
||||
bool isBearishRejected =
|
||||
!isBullish &&
|
||||
bar.IsRejected(
|
||||
box.lower,
|
||||
box.dir,
|
||||
true, // Force Type ...
|
||||
true // Force Pressure ...
|
||||
);
|
||||
|
||||
//
|
||||
result = isBullishRejected ||
|
||||
isBearishRejected;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool IsPeaksOrValesPassedBox(
|
||||
XBoxZone &box,
|
||||
X121Conditions &conditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = box.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
double peakZ = conditions.peaksBuffer[0];
|
||||
double peakC = conditions.peaksBuffer[1];
|
||||
double peakP = conditions.peaksBuffer[2];
|
||||
double peakPP = conditions.peaksBuffer[3];
|
||||
|
||||
//
|
||||
double valeZ = conditions.valesBuffer[0];
|
||||
double valeC = conditions.valesBuffer[1];
|
||||
double valeP = conditions.valesBuffer[2];
|
||||
double valePP = conditions.valesBuffer[3];
|
||||
|
||||
//
|
||||
double boxQ = ((box.upper - box.lower) / 100) * 25;
|
||||
double upperQuarter = box.upper - boxQ;
|
||||
double lowerQuarter = box.lower + boxQ;
|
||||
|
||||
//
|
||||
bool isPPeakInsideUpperQ =
|
||||
peakP < box.upper &&
|
||||
peakP > upperQuarter;
|
||||
|
||||
//
|
||||
bool isPValeInsideLowerQ =
|
||||
valeP > box.lower &&
|
||||
valeP < lowerQuarter;
|
||||
|
||||
//
|
||||
bool isPPPeakInsideUpperQ =
|
||||
peakPP < box.upper &&
|
||||
peakPP > upperQuarter;
|
||||
|
||||
//
|
||||
bool isPPValeInsideLowerQ =
|
||||
valePP > box.lower &&
|
||||
valePP < lowerQuarter;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
(box.IsBullish() &&
|
||||
(isPValeInsideLowerQ ||
|
||||
isPPValeInsideLowerQ) &&
|
||||
(valeC == valeP ||
|
||||
valeP == valePP))
|
||||
//
|
||||
||
|
||||
//
|
||||
(box.IsBearish() &&
|
||||
(isPPeakInsideUpperQ ||
|
||||
isPPPeakInsideUpperQ) &&
|
||||
(peakC == peakP ||
|
||||
peakP == peakPP))
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool IsX3MaPassedBox(
|
||||
XOHCL &bar, // CBar ...
|
||||
XBoxZone &box,
|
||||
X121Conditions &conditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
bar.IsValid() &&
|
||||
box.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
double x3maFast = conditions.x3maFastBuffer[1];
|
||||
double x3maMid = conditions.x3maMidBuffer[1];
|
||||
double x3maSlow = conditions.x3maSlowBuffer[1];
|
||||
|
||||
//
|
||||
bool isx3MaInsideBox =
|
||||
//
|
||||
// Fast ...
|
||||
x3maFast < box.upper &&
|
||||
x3maFast > box.lower
|
||||
//
|
||||
&&
|
||||
//
|
||||
// Mid ...
|
||||
x3maMid < box.upper &&
|
||||
x3maMid > box.lower
|
||||
//
|
||||
&&
|
||||
//
|
||||
// Slow ...
|
||||
x3maSlow < box.upper &&
|
||||
x3maSlow > box.lower
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isX3maSwitchedToBullishOrdered =
|
||||
bar.IsBullish() &&
|
||||
box.IsBullish() &&
|
||||
isx3MaInsideBox &&
|
||||
bar.close > conditions.x3maFastBuffer[1] &&
|
||||
conditions.isX3MaSwitchedToBullishOrdered;
|
||||
|
||||
//
|
||||
bool isX3maSwitchedToBearishOrdered =
|
||||
bar.IsBearish() &&
|
||||
box.IsBearish() &&
|
||||
isx3MaInsideBox &&
|
||||
bar.close < conditions.x3maFastBuffer[1] &&
|
||||
conditions.isX3MaSwitchedToBearishOrdered;
|
||||
|
||||
//
|
||||
result = isX3maSwitchedToBullishOrdered ||
|
||||
isX3maSwitchedToBearishOrdered;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// TODO: Complete this ...
|
||||
bool IsActivatedBoxPassed(
|
||||
XBoxZone &box,
|
||||
X121Conditions &conditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = box.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
//
|
||||
bool IsHKConditionsPassed(
|
||||
double &sl,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
XC121SMCCycleHelper *helper,
|
||||
X121Conditions &conditions,
|
||||
int barIndex = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
sl = 0;
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
|
||||
//
|
||||
int zIDX = 0;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
int ppIDX = pIDX + 1;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
XOHCL ppBar;
|
||||
|
||||
//
|
||||
// Retrieve Bars ...
|
||||
result = zBar.Init(
|
||||
conditions.symbol,
|
||||
conditions.period,
|
||||
barIndex //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
result =
|
||||
result &&
|
||||
pBar.GetPreviousBar(ppBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check PBar Swing ...
|
||||
ENUM_X_DIRECTION pBarSwingDir;
|
||||
bool isPBarSwing = helper
|
||||
.mBarAnalyser
|
||||
.IsSwing(
|
||||
pBar,
|
||||
pBarSwingDir,
|
||||
3 //
|
||||
);
|
||||
|
||||
//
|
||||
bool isPBarSwingLow =
|
||||
isPBarSwing &&
|
||||
IsBullish(pBarSwingDir);
|
||||
|
||||
//
|
||||
bool isPBarSwingHigh =
|
||||
isPBarSwing &&
|
||||
IsBearish(pBarSwingDir);
|
||||
|
||||
//
|
||||
// Check PBar Rejection ...
|
||||
ENUM_X_DIRECTION pBarRejectionDir;
|
||||
bool isPBarRejected = helper
|
||||
.mBarAnalyser
|
||||
.IsRejected(
|
||||
pBar,
|
||||
pBarRejectionDir,
|
||||
false,
|
||||
true //
|
||||
);
|
||||
|
||||
//
|
||||
bool isPBarBullishRejected =
|
||||
isPBarRejected &&
|
||||
IsBullish(pBarRejectionDir);
|
||||
|
||||
//
|
||||
bool isPBarBearishRejected =
|
||||
isPBarRejected &&
|
||||
IsBearish(pBarRejectionDir);
|
||||
|
||||
//
|
||||
// Checking Str Incresing/Decreasing ...
|
||||
|
||||
//
|
||||
bool isStrIncresing =
|
||||
//
|
||||
(conditions.strBuffer[zIDX] > conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[zIDX] > conditions.strBuffer[pIDX] &&
|
||||
conditions.strBuffer[zIDX] > conditions.strBuffer[ppIDX])
|
||||
//
|
||||
&&
|
||||
//
|
||||
(
|
||||
//
|
||||
(conditions.strBuffer[zIDX] > conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[cIDX] > conditions.strBuffer[pIDX])
|
||||
//
|
||||
||
|
||||
//
|
||||
(conditions.strBuffer[cIDX] > conditions.strBuffer[pIDX] &&
|
||||
conditions.strBuffer[pIDX] > conditions.strBuffer[ppIDX])
|
||||
//
|
||||
)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isStrDecreasing =
|
||||
//
|
||||
(conditions.strBuffer[zIDX] < conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[zIDX] < conditions.strBuffer[pIDX] &&
|
||||
conditions.strBuffer[zIDX] < conditions.strBuffer[ppIDX])
|
||||
//
|
||||
&&
|
||||
//
|
||||
(
|
||||
//
|
||||
(conditions.strBuffer[zIDX] < conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[cIDX] < conditions.strBuffer[pIDX])
|
||||
//
|
||||
||
|
||||
//
|
||||
(conditions.strBuffer[cIDX] < conditions.strBuffer[pIDX] &&
|
||||
conditions.strBuffer[pIDX] < conditions.strBuffer[ppIDX])
|
||||
//
|
||||
)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBullish =
|
||||
//
|
||||
isPBarSwingLow &&
|
||||
isStrIncresing &&
|
||||
cBar.IsBullish() &&
|
||||
cBar.low > pBar.low &&
|
||||
cBar.open > pBar.low &&
|
||||
zBar.open > cBar.low &&
|
||||
// isPBarBullishRejected &&
|
||||
conditions.isSarBullish &&
|
||||
conditions.isStrBullish &&
|
||||
conditions.isSMHKBullish
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBearish =
|
||||
//
|
||||
isPBarSwingHigh &&
|
||||
isStrDecreasing &&
|
||||
cBar.IsBearish() &&
|
||||
cBar.high < pBar.high &&
|
||||
cBar.open < pBar.high &&
|
||||
zBar.open < cBar.high &&
|
||||
// isPBarBearishRejected &&
|
||||
conditions.isSarBearish &&
|
||||
conditions.isStrBearish &&
|
||||
conditions.isSMHKBearish
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir = isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
// Selecting SL ...
|
||||
sl =
|
||||
isBullish
|
||||
? cBar.low
|
||||
: cBar.high;
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool IsSARConditionsPassed(
|
||||
double &sl,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
XC121SMCCycleHelper *helper,
|
||||
X121Conditions &conditions,
|
||||
int barIndex = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
sl = 0;
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
|
||||
//
|
||||
int zIDX = 0;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
int ppIDX = pIDX + 1;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
XOHCL ppBar;
|
||||
|
||||
//
|
||||
// Retrieve Bars ...
|
||||
result = zBar.Init(
|
||||
conditions.symbol,
|
||||
conditions.period,
|
||||
barIndex //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
result =
|
||||
result &&
|
||||
pBar.GetPreviousBar(ppBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check PBar Swing ...
|
||||
ENUM_X_DIRECTION pBarSwingDir;
|
||||
bool isPBarSwing = helper
|
||||
.mBarAnalyser
|
||||
.IsSwing(
|
||||
pBar,
|
||||
pBarSwingDir,
|
||||
3 //
|
||||
);
|
||||
|
||||
//
|
||||
bool isPBarSwingLow =
|
||||
isPBarSwing &&
|
||||
IsBullish(pBarSwingDir);
|
||||
|
||||
//
|
||||
bool isPBarSwingHigh =
|
||||
isPBarSwing &&
|
||||
IsBearish(pBarSwingDir);
|
||||
|
||||
//
|
||||
bool isBullish =
|
||||
//
|
||||
isPBarSwingLow &&
|
||||
cBar.IsBullish() &&
|
||||
cBar.low > pBar.low &&
|
||||
cBar.open > pBar.low &&
|
||||
zBar.open > cBar.low &&
|
||||
conditions.isSarSwitchedToBullish
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBearish =
|
||||
//
|
||||
isPBarSwingHigh &&
|
||||
isStrDecreasing &&
|
||||
cBar.IsBearish() &&
|
||||
cBar.high < pBar.high &&
|
||||
cBar.open < pBar.high &&
|
||||
zBar.open < cBar.high &&
|
||||
conditions.isSarSwitchedToBearish
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir = isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
// Selecting SL ...
|
||||
sl =
|
||||
isBullish
|
||||
? cBar.low
|
||||
: cBar.high;
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
// //
|
||||
// bool isPVPassed = IsPeaksOrValesPassedBox(
|
||||
// iBox,
|
||||
// cXConditions //
|
||||
// );
|
||||
// if (isPVPassed)
|
||||
// {
|
||||
// //
|
||||
// selectedBox = iBox;
|
||||
// iBox.Clean();
|
||||
// break;
|
||||
// }
|
||||
|
||||
//
|
||||
// bool isx3MaPassed = IsX3MaPassedBox(
|
||||
// cBar,
|
||||
// iBox,
|
||||
// cXConditions //
|
||||
// );
|
||||
// if (isx3MaPassed)
|
||||
// {
|
||||
// //
|
||||
// selectedBox = iBox;
|
||||
// iBox.Clean();
|
||||
// break;
|
||||
// }
|
||||
|
||||
//
|
||||
// bool isRejected = IsRejectedBox(
|
||||
// cBar,
|
||||
// iBox,
|
||||
// cXConditions //
|
||||
// );
|
||||
// if (isRejected)
|
||||
// {
|
||||
// //
|
||||
// selectedBox = iBox;
|
||||
// iBox.Clean();
|
||||
// break;
|
||||
// }
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// Checking Bullish Fair Value Gaps ...
|
||||
has = cState.HasBullishFairValueGaps();
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
ToBox(
|
||||
cState.bullishFairValueGaps,
|
||||
tmpBoxes //
|
||||
);
|
||||
|
||||
//
|
||||
count = ArraySize(tmpBoxes);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = tmpBoxes[i];
|
||||
bool isValid = IsBoxValid(
|
||||
iBox,
|
||||
0,
|
||||
iBox.period //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
iBox.Clean();
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
has = IsBoxExists(iBox);
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iBox,
|
||||
mWaitingBoxes //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpBoxes);
|
||||
}
|
||||
|
||||
//
|
||||
// Checking Bearish Fair Value Gaps ...
|
||||
has = cState.HasBearishFairValueGaps();
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
XBoxZone tmpBoxes[];
|
||||
ToBox(
|
||||
cState.bearishFairValueGaps,
|
||||
tmpBoxes //
|
||||
);
|
||||
|
||||
//
|
||||
count = ArraySize(tmpBoxes);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = tmpBoxes[i];
|
||||
bool isValid = IsBoxValid(
|
||||
iBox,
|
||||
0,
|
||||
iBox.period //
|
||||
);
|
||||
if (!isValid)
|
||||
{
|
||||
//
|
||||
iBox.Clean();
|
||||
continue;
|
||||
;
|
||||
}
|
||||
|
||||
//
|
||||
has = IsBoxExists(iBox);
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iBox,
|
||||
mWaitingBoxes //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpBoxes);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user