last ...
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "../../Libraries/x-saherelm.common.lib.mq5"
|
||||
#include "../../Libraries/x-saherelm.x-poi.lib.mq5"
|
||||
#include "../../Libraries/x-saherelm.x-trade.lib.mq5"
|
||||
#include "../Helpers/xstrcci.helper.mq5"
|
||||
|
||||
//
|
||||
// Enumeration ...
|
||||
@@ -418,4 +419,370 @@ int AddGuard(
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool DetectXSTRCCIConditions(
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
XCXSTRCCIHelper *helper,
|
||||
int barIndex = 0,
|
||||
int loopback = 10 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
loopback = NormalizeInt(loopback, 5);
|
||||
|
||||
//
|
||||
string symbol = helper.GetSymbol();
|
||||
ENUM_TIMEFRAMES period = helper.GetPeriod();
|
||||
|
||||
//
|
||||
XSTRCCIConditions conditions;
|
||||
result = helper.GetConditions(
|
||||
conditions,
|
||||
barIndex,
|
||||
loopback //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
conditions.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int zIDX = barIndex;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
int ppIDX = pIDX + 1;
|
||||
int p3IDX = ppIDX + 1;
|
||||
int p4IDX = p3IDX + 1;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
XOHCL ppBar;
|
||||
XOHCL p3Bar;
|
||||
XOHCL p4Bar;
|
||||
result = zBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
zIDX //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
result =
|
||||
result &&
|
||||
pBar.GetPreviousBar(ppBar);
|
||||
result =
|
||||
result &&
|
||||
ppBar.GetPreviousBar(p3Bar);
|
||||
result =
|
||||
result &&
|
||||
p3Bar.GetPreviousBar(p4Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
p3Bar.Clean();
|
||||
p4Bar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Bars Conditions ...
|
||||
|
||||
//
|
||||
ENUM_X_DIRECTION cBarDir;
|
||||
|
||||
//
|
||||
// Hammer ...
|
||||
bool isCBarHammer = helper
|
||||
.barAnalyser
|
||||
.IsHammer(
|
||||
cBar,
|
||||
cBarDir //
|
||||
);
|
||||
bool isCBarBullishHammer =
|
||||
isCBarHammer &&
|
||||
IsBullish(cBarDir);
|
||||
bool isCBarBearishHammer =
|
||||
isCBarHammer &&
|
||||
IsBearish(cBarDir);
|
||||
|
||||
//
|
||||
// Rejected ...
|
||||
bool isCBarRejected = helper
|
||||
.barAnalyser
|
||||
.IsRejected(
|
||||
cBar,
|
||||
cBarDir,
|
||||
false, // Force Type ...
|
||||
true // Force Fibo Pressure ...
|
||||
);
|
||||
bool isCBarBullishRejected =
|
||||
isCBarRejected &&
|
||||
IsBullish(cBarDir);
|
||||
bool isCBarBearishRejected =
|
||||
isCBarRejected &&
|
||||
IsBearish(cBarDir);
|
||||
|
||||
//
|
||||
// Engulfed ...
|
||||
bool isCBarEngulfed = helper
|
||||
.barAnalyser
|
||||
.IsEngulfed(
|
||||
cBar,
|
||||
cBarDir //
|
||||
);
|
||||
bool isCBarBullishEngulfed =
|
||||
isCBarEngulfed &&
|
||||
IsBullish(cBarDir);
|
||||
bool isCBarBearishEngulfed =
|
||||
isCBarEngulfed &&
|
||||
IsBearish(cBarDir);
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
bool isCBarMomentum = helper
|
||||
.barAnalyser
|
||||
.IsMomentum(
|
||||
cBar,
|
||||
cBarDir,
|
||||
1 //
|
||||
);
|
||||
bool isCBarBullishMomentum =
|
||||
isCBarMomentum &&
|
||||
IsBullish(cBarDir);
|
||||
bool isCBarBearishMomentum =
|
||||
isCBarMomentum &&
|
||||
IsBearish(cBarDir);
|
||||
|
||||
//
|
||||
// Bar Sumarise ...
|
||||
|
||||
//
|
||||
bool isCBarValidForBullish =
|
||||
(isCBarBullishHammer ||
|
||||
isCBarBullishRejected ||
|
||||
isCBarBullishMomentum ||
|
||||
isCBarBullishEngulfed);
|
||||
|
||||
//
|
||||
bool isCBarValidForBearish =
|
||||
(isCBarBearishHammer ||
|
||||
isCBarBearishRejected ||
|
||||
isCBarBearishMomentum ||
|
||||
isCBarBearishEngulfed);
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
bool isLowsUnderValesGolden =
|
||||
//
|
||||
pBar.low < conditions.valesGoldenBuffer[pIDX] &&
|
||||
ppBar.low < conditions.valesGoldenBuffer[ppIDX] &&
|
||||
p3Bar.low < conditions.valesGoldenBuffer[p3IDX] &&
|
||||
p4Bar.low < conditions.valesGoldenBuffer[p4IDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isHighsOverPeaksGolden =
|
||||
//
|
||||
pBar.high > conditions.peaksGoldenBuffer[pIDX] &&
|
||||
ppBar.high > conditions.peaksGoldenBuffer[ppIDX] &&
|
||||
p3Bar.high > conditions.peaksGoldenBuffer[p3IDX] &&
|
||||
p4Bar.high > conditions.peaksGoldenBuffer[p4IDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isSwingLowSameAsVale =
|
||||
conditions.swingLowsBuffer[p4IDX] == conditions.valesBuffer[p4IDX];
|
||||
|
||||
//
|
||||
bool isSwingHighSameAsPeak =
|
||||
conditions.swingHighsBuffer[p4IDX] == conditions.peaksBuffer[p4IDX];
|
||||
|
||||
//
|
||||
bool isStrSame = conditions.strBuffer[cIDX] == conditions.strBuffer[pIDX] &&
|
||||
conditions.strBuffer[pIDX] == conditions.strBuffer[ppIDX];
|
||||
|
||||
//
|
||||
bool isSameStrBreakedUp =
|
||||
isStrSame &&
|
||||
conditions.strBuffer[zIDX] > conditions.strBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isSameStrBreakedDown =
|
||||
isStrSame &&
|
||||
conditions.strBuffer[zIDX] < conditions.strBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isStrBullishVPattern =
|
||||
//
|
||||
conditions.strStateBuffer[zIDX] > 0 &&
|
||||
conditions.strStateBuffer[cIDX] > 0 &&
|
||||
conditions.strStateBuffer[pIDX] > 0 &&
|
||||
conditions.strBuffer[pIDX] < conditions.strBuffer[ppIDX] &&
|
||||
conditions.strBuffer[pIDX] < conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[pIDX] < conditions.strBuffer[zIDX] &&
|
||||
conditions.strBuffer[zIDX] > conditions.strBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isStrBearishVPattern =
|
||||
//
|
||||
conditions.strStateBuffer[zIDX] < 0 &&
|
||||
conditions.strStateBuffer[cIDX] < 0 &&
|
||||
conditions.strStateBuffer[pIDX] < 0 &&
|
||||
conditions.strBuffer[pIDX] > conditions.strBuffer[ppIDX] &&
|
||||
conditions.strBuffer[pIDX] > conditions.strBuffer[cIDX] &&
|
||||
conditions.strBuffer[pIDX] > conditions.strBuffer[zIDX] &&
|
||||
conditions.strBuffer[zIDX] < conditions.strBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isCBarLowInTKZone =
|
||||
//
|
||||
cBar.low < conditions.tenkanSenBuffer[cIDX] &&
|
||||
cBar.low > conditions.kijunSenBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isCBarHighInTKZone =
|
||||
//
|
||||
cBar.high > conditions.tenkanSenBuffer[cIDX] &&
|
||||
cBar.high < conditions.kijunSenBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
// Summarise Conditions ...
|
||||
|
||||
//
|
||||
bool isBullish =
|
||||
//
|
||||
isCBarLowInTKZone &&
|
||||
isCBarBullishRejected &&
|
||||
isCBarValidForBullish &&
|
||||
conditions.isX3MaSlowBullish &&
|
||||
conditions.isTenkanSenOverKijunSen &&
|
||||
conditions.kijunSenBuffer[cIDX] > conditions.x3maSlowBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBearish =
|
||||
//
|
||||
isCBarHighInTKZone &&
|
||||
isCBarBearishRejected &&
|
||||
isCBarValidForBearish &&
|
||||
conditions.isX3MaSlowBearish &&
|
||||
conditions.isTenkanSenUnderKijunSen &&
|
||||
conditions.kijunSenBuffer[cIDX] < conditions.x3maSlowBuffer[cIDX]
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
double entry = GetEntry(
|
||||
conditions.symbol,
|
||||
dir //
|
||||
);
|
||||
double sl = conditions.kijunSenBuffer[cIDX];
|
||||
|
||||
//
|
||||
box.dir = dir;
|
||||
box.symbol = conditions.symbol;
|
||||
box.period = conditions.period;
|
||||
|
||||
//
|
||||
box.upper =
|
||||
isBullish
|
||||
? entry
|
||||
: sl;
|
||||
|
||||
//
|
||||
box.lower =
|
||||
isBullish
|
||||
? sl
|
||||
: entry;
|
||||
|
||||
//
|
||||
box.to = zBar.time;
|
||||
box.from = p4Bar.time;
|
||||
|
||||
//
|
||||
box.type = ToString(dir) + "_Signal_" + conditions.symbol + "_" + ToString(conditions.period);
|
||||
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
bool isCreated = helper.poiDrawer.DrawBox(
|
||||
box,
|
||||
iObj //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
Print("Signal Box ...");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = box.IsValid() &&
|
||||
HasDirection(dir);
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
ppBar.Clean();
|
||||
p3Bar.Clean();
|
||||
p4Bar.Clean();
|
||||
|
||||
//
|
||||
conditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
Reference in New Issue
Block a user