last ...
This commit is contained in:
@@ -2607,7 +2607,14 @@ struct X121SMCStrategyConditionParser
|
||||
//
|
||||
// Validate CBar ...
|
||||
cBar.IsBullish() &&
|
||||
cBar.open >= cSMHKBar.open &&
|
||||
//
|
||||
(cBar.low >= cXConditions.valesGoldenBuffer[cIDX] ||
|
||||
(cBar.low < cXConditions.valesGoldenBuffer[cIDX] &&
|
||||
cXConditions.isSarSwitchedToBullish)) &&
|
||||
//
|
||||
(cBar.open == cXConditions.xhkSMOpenBuffer[cIDX] ||
|
||||
(cBar.low < cXConditions.xhkSMLowBuffer[cIDX] &&
|
||||
cBar.GetDown() > cXConditions.xhkSMHighBuffer[cIDX])) &&
|
||||
//
|
||||
cXConditions.isSarBullish
|
||||
//
|
||||
@@ -2625,7 +2632,14 @@ struct X121SMCStrategyConditionParser
|
||||
//
|
||||
// Validate CBar ...
|
||||
cBar.IsBearish() &&
|
||||
cBar.open <= cSMHKBar.open &&
|
||||
//
|
||||
(cBar.high <= cXConditions.peaksGoldenBuffer[cIDX] ||
|
||||
(cBar.high > cXConditions.peaksGoldenBuffer[cIDX] &&
|
||||
cXConditions.isSarSwitchedToBearish)) &&
|
||||
//
|
||||
(cBar.open == cXConditions.xhkSMOpenBuffer[cIDX] ||
|
||||
(cBar.high > cXConditions.xhkSMHighBuffer[cIDX] &&
|
||||
cBar.GetUp() < cXConditions.xhkSMLowBuffer[cIDX])) &&
|
||||
//
|
||||
cXConditions.isSarBearish
|
||||
//
|
||||
@@ -2920,88 +2934,91 @@ struct X121SMCStrategyConditionParser
|
||||
double points = GetPoints(box.symbol);
|
||||
double minPointsDiff = points * 20;
|
||||
|
||||
// //
|
||||
// double prefferSL = 0;
|
||||
//
|
||||
double prefferSL = 0;
|
||||
|
||||
// //
|
||||
// // First Check Based on Prev Bar ...
|
||||
// // double prevDiff =
|
||||
// // isBullish
|
||||
// // ? cBar.low < zBar.open
|
||||
// // ? zBar.open - cBar.low
|
||||
// // : 0
|
||||
// // : isBearish
|
||||
// // ? cBar.high > zBar.open
|
||||
// // ? cBar.high - zBar.open
|
||||
// // : 0
|
||||
// // : 0;
|
||||
// // if (prevDiff >= minPointsDiff)
|
||||
// // {
|
||||
// // //
|
||||
// // prefferSL =
|
||||
// // isBullish
|
||||
// // ? cBar.low
|
||||
// // : cBar.high;
|
||||
// // }
|
||||
//
|
||||
// Other SL Conditions ...
|
||||
if (prefferSL <= 0)
|
||||
{
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
if (zBar.open < cXConditions.valesGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.valesBuffer[cIDX];
|
||||
}
|
||||
else if (zBar.open > cXConditions.valesGoldenBuffer[cIDX] &&
|
||||
zBar.open < cXConditions.peaksGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.valesGoldenBuffer[cIDX];
|
||||
}
|
||||
else if (zBar.open > cXConditions.peaksGoldenBuffer[cIDX])
|
||||
{
|
||||
//
|
||||
if (cXConditions.sarBuffer[cIDX] > cXConditions.peaksGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.sarBuffer[cIDX];
|
||||
}
|
||||
else
|
||||
{
|
||||
prefferSL = zBar.open > cXConditions.peaksGoldenBuffer[cIDX];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
if (zBar.open > cXConditions.peaksGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.peaksBuffer[cIDX];
|
||||
}
|
||||
else if (zBar.open < cXConditions.peaksGoldenBuffer[cIDX] &&
|
||||
zBar.open > cXConditions.valesGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.peaksGoldenBuffer[cIDX];
|
||||
}
|
||||
else if (zBar.open < cXConditions.valesGoldenBuffer[cIDX])
|
||||
{
|
||||
//
|
||||
if (cXConditions.sarBuffer[cIDX] < cXConditions.valesGoldenBuffer[cIDX])
|
||||
{
|
||||
prefferSL = cXConditions.sarBuffer[cIDX];
|
||||
}
|
||||
else
|
||||
{
|
||||
prefferSL = cXConditions.valesGoldenBuffer[cIDX];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// //
|
||||
// // Other SL Conditions ...
|
||||
// if (prefferSL <= 0)
|
||||
// {
|
||||
// //
|
||||
// if (isBullish)
|
||||
// {
|
||||
// //
|
||||
// if (zBar.open < cXConditions.valesGoldenBuffer[cIDX])
|
||||
// {
|
||||
// prefferSL = cXConditions.valesBuffer[cIDX];
|
||||
// }
|
||||
// else if (zBar.open > cXConditions.valesGoldenBuffer[cIDX])
|
||||
// {
|
||||
// prefferSL = cXConditions.valesGoldenBuffer[cIDX];
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //
|
||||
// if (zBar.open > cXConditions.peaksGoldenBuffer[cIDX])
|
||||
// {
|
||||
// prefferSL = cXConditions.peaksBuffer[cIDX];
|
||||
// }
|
||||
// else if (zBar.open < cXConditions.peaksGoldenBuffer[cIDX])
|
||||
// {
|
||||
// prefferSL = cXConditions.peaksGoldenBuffer[cIDX];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
if (prefferSL > 0)
|
||||
{
|
||||
//
|
||||
box.upper =
|
||||
isBullish
|
||||
? zBar.open
|
||||
: prefferSL;
|
||||
|
||||
// //
|
||||
// if (prefferSL > 0)
|
||||
// {
|
||||
// //
|
||||
// prefferSL =
|
||||
// prefferSL <= minPointsDiff
|
||||
// ? minPointsDiff
|
||||
// : prefferSL;
|
||||
|
||||
// //
|
||||
// box.upper =
|
||||
// isBullish
|
||||
// ? zBar.open
|
||||
// : prefferSL;
|
||||
|
||||
// //
|
||||
// box.lower =
|
||||
// isBullish
|
||||
// ? prefferSL
|
||||
// : zBar.open;
|
||||
// }
|
||||
//
|
||||
box.lower =
|
||||
isBullish
|
||||
? prefferSL
|
||||
: zBar.open;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Conditions to Force Has Holder Box ...
|
||||
|
||||
result =
|
||||
result &&
|
||||
holderBox.IsValid();
|
||||
holderBox.IsValid() &&
|
||||
dir == holderBox.dir;
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
@@ -3036,6 +3053,368 @@ struct X121SMCStrategyConditionParser
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSenario2Conditions(
|
||||
ENUM_X_CYCLES ttfCycle,
|
||||
XBoxZone &breakedBoxes[],
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
X121SMCStrategySignalProviderData &provider,
|
||||
int barIndex = 0,
|
||||
bool forceBarType = false,
|
||||
bool forceFiboPressure = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Validate Args ...
|
||||
result =
|
||||
IsValid(ttfCycle) &&
|
||||
HasChild(breakedBoxes);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// TODO: Add support for Extracting Trend ...
|
||||
ENUM_X_DIRECTION trend = X_DIRECTION_NONE;
|
||||
bool hasBullishTrend = IsBullish(trend);
|
||||
bool hasBearishTrend = IsBearish(trend);
|
||||
|
||||
//
|
||||
// TTF Cycle Extract ...
|
||||
XPOIState ttfState;
|
||||
X121Conditions ttfXConditions;
|
||||
XC121SMCCycleHelper *ttfHelper;
|
||||
X121SMCCycleConditions ttfConditions;
|
||||
result = provider.SelectCycle(
|
||||
ttfCycle,
|
||||
ttfState,
|
||||
ttfXConditions,
|
||||
ttfHelper,
|
||||
ttfConditions //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ttfState.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Parse(ttfXConditions);
|
||||
|
||||
//
|
||||
// Normalize Args ...
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Define Resources ...
|
||||
|
||||
//
|
||||
int idx = -1;
|
||||
int count = 0;
|
||||
bool has = false;
|
||||
|
||||
//
|
||||
int zIDX = barIndex;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
|
||||
//
|
||||
double ask = GetAsk(ttfState.symbol);
|
||||
double bid = GetBid(ttfState.symbol);
|
||||
|
||||
//
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
|
||||
//
|
||||
// Initial Bars ...
|
||||
result = zBar.Init(
|
||||
ttfState.symbol,
|
||||
ttfState.period,
|
||||
barIndex //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ttfState.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
// First we Have to Detect Inside Box ...
|
||||
XBoxZone insideBox;
|
||||
count = ArraySize(breakedBoxes);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = breakedBoxes[i];
|
||||
|
||||
//
|
||||
bool isInside =
|
||||
IsInsideBox(
|
||||
zBar,
|
||||
iBox //
|
||||
);
|
||||
if (isInside)
|
||||
{
|
||||
//
|
||||
// Since we have to Follow Trend based on Breaked Boxes ...
|
||||
// we have to use:
|
||||
// - Breaked Bullish Boxes on Bearish Trend ...
|
||||
// - Breaked Bearish Boxes on Bullish Trend ...
|
||||
isInside =
|
||||
hasBullishTrend
|
||||
? iBox.IsBearish()
|
||||
: hasBearishTrend
|
||||
? iBox.IsBullish()
|
||||
: false;
|
||||
|
||||
//
|
||||
// Check Inside ...
|
||||
if (isInside)
|
||||
{
|
||||
//
|
||||
insideBox = iBox;
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Inside Box is Valid or not ...
|
||||
result = insideBox.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ttfState.Clean();
|
||||
insideBox.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Update Inside Box From and To ...
|
||||
// Based on Breaked ...
|
||||
insideBox.from = insideBox.to;
|
||||
insideBox.to = TimeCurrent();
|
||||
|
||||
//
|
||||
// Detect Breaked Box Direction ...
|
||||
bool isInsideBoxBullish = insideBox.IsBullish();
|
||||
bool isInsideBoxBearish = insideBox.IsBearish();
|
||||
|
||||
//
|
||||
// Detect Inside Box Rejection ...
|
||||
|
||||
//
|
||||
bool isUpperBearishReject =
|
||||
cBar.high >= insideBox.upper &&
|
||||
cBar.GetUp() < insideBox.upper;
|
||||
|
||||
//
|
||||
bool isUpperBullishReject =
|
||||
cBar.low <= insideBox.upper &&
|
||||
cBar.GetDown() > insideBox.upper;
|
||||
|
||||
//
|
||||
bool isLowerBearishReject =
|
||||
cBar.high >= insideBox.lower &&
|
||||
cBar.GetUp() < insideBox.lower;
|
||||
|
||||
//
|
||||
bool isLowerBullishReject =
|
||||
cBar.low <= insideBox.lower &&
|
||||
cBar.GetDown() > insideBox.lower;
|
||||
|
||||
//
|
||||
// Apply Force Bar Type ...
|
||||
if (forceBarType)
|
||||
{
|
||||
//
|
||||
isUpperBearishReject =
|
||||
isUpperBearishReject &&
|
||||
cBar.IsBearish();
|
||||
|
||||
//
|
||||
isUpperBullishReject =
|
||||
isUpperBullishReject &&
|
||||
cBar.IsBullish();
|
||||
|
||||
//
|
||||
isLowerBearishReject =
|
||||
isLowerBearishReject &&
|
||||
cBar.IsBearish();
|
||||
|
||||
//
|
||||
isLowerBullishReject =
|
||||
isLowerBullishReject &&
|
||||
cBar.IsBullish();
|
||||
}
|
||||
|
||||
//
|
||||
// Apply Force Fibo Pressure ...
|
||||
if (forceBarType)
|
||||
{
|
||||
//
|
||||
isUpperBearishReject =
|
||||
isUpperBearishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BEARISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isUpperBullishReject =
|
||||
isUpperBullishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BULLISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isLowerBearishReject =
|
||||
isLowerBearishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BEARISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isLowerBullishReject =
|
||||
isLowerBullishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BULLISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Conditions ...
|
||||
isBullish = (
|
||||
//
|
||||
hasBullishTrend &&
|
||||
isInsideBoxBearish &&
|
||||
isLowerBullishReject
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Bearish Conditions ...
|
||||
isBearish = (
|
||||
//
|
||||
hasBearishTrend &&
|
||||
isInsideBoxBullish &&
|
||||
isUpperBearishReject
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Filling Requirements ...
|
||||
result =
|
||||
isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
box = insideBox;
|
||||
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
}
|
||||
|
||||
//
|
||||
// Check All Conditions ...
|
||||
result =
|
||||
box.IsValid() &&
|
||||
HasDirection(dir) &&
|
||||
(isBullish ||
|
||||
isBearish //
|
||||
);
|
||||
|
||||
//
|
||||
// Cleanup Resource ...
|
||||
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
|
||||
//
|
||||
ttfState.Clean();
|
||||
insideBox.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSenario4Conditions(
|
||||
ENUM_X_CYCLES cycle,
|
||||
@@ -3639,367 +4018,5 @@ struct X121SMCStrategyConditionParser
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSenario2Conditions(
|
||||
ENUM_X_CYCLES ttfCycle,
|
||||
ENUM_X_DIRECTION trend,
|
||||
XBoxZone &unavailableBoxes[],
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
X121SMCStrategySignalProviderData &provider,
|
||||
int barIndex = 0,
|
||||
bool forceBarType = false,
|
||||
bool forceFiboPressure = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Validate Args ...
|
||||
result =
|
||||
IsValid(ttfCycle) &&
|
||||
HasDirection(trend) &&
|
||||
HasChild(unavailableBoxes);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool hasBullishTrend = IsBullish(trend);
|
||||
bool hasBearishTrend = IsBearish(trend);
|
||||
|
||||
//
|
||||
// TTF Cycle Extract ...
|
||||
XPOIState ttfState;
|
||||
X121Conditions ttfXConditions;
|
||||
XC121SMCCycleHelper *ttfHelper;
|
||||
X121SMCCycleConditions ttfConditions;
|
||||
result = provider.SelectCycle(
|
||||
ttfCycle,
|
||||
ttfState,
|
||||
ttfXConditions,
|
||||
ttfHelper,
|
||||
ttfConditions //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ttfState.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Parse(ttfXConditions);
|
||||
|
||||
//
|
||||
// Normalize Args ...
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Define Resources ...
|
||||
|
||||
//
|
||||
int idx = -1;
|
||||
int count = 0;
|
||||
bool has = false;
|
||||
|
||||
//
|
||||
int zIDX = barIndex;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
|
||||
//
|
||||
double ask = GetAsk(ttfState.symbol);
|
||||
double bid = GetBid(ttfState.symbol);
|
||||
|
||||
//
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
|
||||
//
|
||||
// Initial Bars ...
|
||||
result = zBar.Init(
|
||||
ttfState.symbol,
|
||||
ttfState.period,
|
||||
barIndex //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ttfState.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
// First we Have to Detect Inside Box ...
|
||||
XBoxZone insideBox;
|
||||
count = ArraySize(unavailableBoxes);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = unavailableBoxes[i];
|
||||
|
||||
//
|
||||
bool isInside =
|
||||
IsInsideBox(
|
||||
zBar,
|
||||
iBox //
|
||||
);
|
||||
if (isInside)
|
||||
{
|
||||
//
|
||||
// Since we have to Follow Trend based on Breaked Boxes ...
|
||||
// we have to use:
|
||||
// - Breaked Bullish Boxes on Bearish Trend ...
|
||||
// - Breaked Bearish Boxes on Bullish Trend ...
|
||||
isInside =
|
||||
hasBullishTrend
|
||||
? iBox.IsBearish()
|
||||
: hasBearishTrend
|
||||
? iBox.IsBullish()
|
||||
: false;
|
||||
|
||||
//
|
||||
// Check Inside ...
|
||||
if (isInside)
|
||||
{
|
||||
//
|
||||
insideBox = iBox;
|
||||
iBox.Clean();
|
||||
|
||||
//
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Inside Box is Valid or not ...
|
||||
result = insideBox.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ttfState.Clean();
|
||||
insideBox.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Update Inside Box From and To ...
|
||||
// Based on Breaked ...
|
||||
insideBox.from = insideBox.to;
|
||||
insideBox.to = TimeCurrent();
|
||||
|
||||
//
|
||||
// Detect Breaked Box Direction ...
|
||||
bool isInsideBoxBullish = insideBox.IsBullish();
|
||||
bool isInsideBoxBearish = insideBox.IsBearish();
|
||||
|
||||
//
|
||||
// Detect Inside Box Rejection ...
|
||||
|
||||
//
|
||||
bool isUpperBearishReject =
|
||||
cBar.high >= insideBox.upper &&
|
||||
cBar.GetUp() < insideBox.upper;
|
||||
|
||||
//
|
||||
bool isUpperBullishReject =
|
||||
cBar.low <= insideBox.upper &&
|
||||
cBar.GetDown() > insideBox.upper;
|
||||
|
||||
//
|
||||
bool isLowerBearishReject =
|
||||
cBar.high >= insideBox.lower &&
|
||||
cBar.GetUp() < insideBox.lower;
|
||||
|
||||
//
|
||||
bool isLowerBullishReject =
|
||||
cBar.low <= insideBox.lower &&
|
||||
cBar.GetDown() > insideBox.lower;
|
||||
|
||||
//
|
||||
// Apply Force Bar Type ...
|
||||
if (forceBarType)
|
||||
{
|
||||
//
|
||||
isUpperBearishReject =
|
||||
isUpperBearishReject &&
|
||||
cBar.IsBearish();
|
||||
|
||||
//
|
||||
isUpperBullishReject =
|
||||
isUpperBullishReject &&
|
||||
cBar.IsBullish();
|
||||
|
||||
//
|
||||
isLowerBearishReject =
|
||||
isLowerBearishReject &&
|
||||
cBar.IsBearish();
|
||||
|
||||
//
|
||||
isLowerBullishReject =
|
||||
isLowerBullishReject &&
|
||||
cBar.IsBullish();
|
||||
}
|
||||
|
||||
//
|
||||
// Apply Force Fibo Pressure ...
|
||||
if (forceBarType)
|
||||
{
|
||||
//
|
||||
isUpperBearishReject =
|
||||
isUpperBearishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BEARISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isUpperBullishReject =
|
||||
isUpperBullishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BULLISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isLowerBearishReject =
|
||||
isLowerBearishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BEARISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
|
||||
//
|
||||
isLowerBullishReject =
|
||||
isLowerBullishReject &&
|
||||
ttfHelper
|
||||
.mBarAnalyser
|
||||
.HasFiboPressure(
|
||||
cBar,
|
||||
X_DIRECTION_BULLISH,
|
||||
X_FIBO_LEVEL_382 //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Conditions ...
|
||||
isBullish = (
|
||||
//
|
||||
hasBullishTrend &&
|
||||
isInsideBoxBearish &&
|
||||
isLowerBullishReject
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Bearish Conditions ...
|
||||
isBearish = (
|
||||
//
|
||||
hasBearishTrend &&
|
||||
isInsideBoxBullish &&
|
||||
isUpperBearishReject
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Filling Requirements ...
|
||||
result =
|
||||
isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
box = insideBox;
|
||||
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
}
|
||||
|
||||
//
|
||||
// Check All Conditions ...
|
||||
result =
|
||||
box.IsValid() &&
|
||||
HasDirection(dir) &&
|
||||
(isBullish ||
|
||||
isBearish //
|
||||
);
|
||||
|
||||
//
|
||||
// Cleanup Resource ...
|
||||
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
|
||||
//
|
||||
ttfState.Clean();
|
||||
insideBox.Clean();
|
||||
ZeroMemory(ttfHelper);
|
||||
ttfConditions.Clean();
|
||||
ttfXConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user