last ...
This commit is contained in:
@@ -1693,12 +1693,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validation Flags ...
|
||||
bool validateBarInsideZone = true;
|
||||
bool validateByBarPatterns = true;
|
||||
bool validateByBarInsideATRBand = true;
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
XOHCL p3Bar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
@@ -1707,11 +1714,14 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
result = result &&
|
||||
pBar.GetPreviousBar(p2Bar);
|
||||
result = result &&
|
||||
p2Bar.GetPreviousBar(p3Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -1720,11 +1730,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
//
|
||||
// Do ...
|
||||
|
||||
//
|
||||
// Retrieve pBar Patterns ...
|
||||
XPatternAnalysis pBarPatterns;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarPatterns,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Detecting OrderFlow ...
|
||||
XBoxZone orderFlow[];
|
||||
bool hasOrderFlow = poiDetector.HasOrderFlow(
|
||||
pBar,
|
||||
p3Bar,
|
||||
dir,
|
||||
orderFlow,
|
||||
structureConfig.orderFlowValidation,
|
||||
@@ -1736,6 +1755,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
structureConfig.loopback //
|
||||
);
|
||||
|
||||
//
|
||||
double atrBandMiddle = EMPTY_VALUE;
|
||||
|
||||
//
|
||||
isBullish = hasOrderFlow &&
|
||||
IsXBullish(dir);
|
||||
@@ -1745,11 +1767,157 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
IsXBearish(dir);
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result) {
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
|
||||
//
|
||||
// Force Price of p2Bar is Inside Order Flow ...
|
||||
if (result && validateBarInsideZone)
|
||||
{
|
||||
//
|
||||
double orderFlowUpper = 0;
|
||||
double orderFlowLower = 0;
|
||||
|
||||
//
|
||||
int idx = GetHighest(orderFlow);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
orderFlowUpper = orderFlow[idx].upper;
|
||||
}
|
||||
idx = GetLowest(orderFlow);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
orderFlowLower = orderFlow[idx].lower;
|
||||
}
|
||||
|
||||
//
|
||||
result = NotEmptyZero(orderFlowUpper) &&
|
||||
NotEmptyZero(orderFlowLower) &&
|
||||
orderFlowUpper > orderFlowLower &&
|
||||
(isBullish
|
||||
? p2Bar.low < orderFlowUpper
|
||||
: p2Bar.high > orderFlowLower);
|
||||
}
|
||||
|
||||
//
|
||||
// Force PBar Has Pattern ...
|
||||
if (result && validateByBarPatterns)
|
||||
{
|
||||
//
|
||||
// Analyse Bar Patterns ...
|
||||
result = pBarPatterns.IsValid();
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
// (bar.close > pBar.low ||
|
||||
// bar.open > pBar.low) &&
|
||||
(
|
||||
//
|
||||
pBarPatterns.IsPinned(X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.IsSignalKey(X_DIRECTION_BULLISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
bool isPBarHasBearishPatterns =
|
||||
// (bar.close < pBar.high ||
|
||||
// bar.open < pBar.high) &&
|
||||
(
|
||||
//
|
||||
pBarPatterns.IsPinned(X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.IsSignalKey(X_DIRECTION_BEARISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isPBarHasBullishPatterns &&
|
||||
!isPBarHasBearishPatterns;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isPBarHasBearishPatterns &&
|
||||
!isPBarHasBullishPatterns;
|
||||
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Force P2Bar Place Checking based on ATR Band ...
|
||||
if (result && validateByBarInsideATRBand)
|
||||
{
|
||||
//
|
||||
double atrBandUpper = fimaHelper.GetATRBandUpper(p2Bar.Index());
|
||||
double atrBandLower = fimaHelper.GetATRBandLower(p2Bar.Index());
|
||||
|
||||
//
|
||||
atrBandMiddle = atrBandLower + ((atrBandUpper - atrBandLower) / 2);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
NotEmptyZero(atrBandMiddle) &&
|
||||
p2Bar.low < atrBandMiddle;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
NotEmptyZero(atrBandMiddle) &&
|
||||
p2Bar.high > atrBandMiddle;
|
||||
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
UpdateToTime(orderFlow, bar.time);
|
||||
poiDrawer.DrawZones(orderFlow, structureDrawConfig.drawConfig);
|
||||
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
|
||||
|
||||
//
|
||||
// Draw ATR Band Middle ...
|
||||
if (NotEmptyZero(atrBandMiddle))
|
||||
{
|
||||
//
|
||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||
iConfig.trendRayLeft = false;
|
||||
iConfig.trendRayRight = false;
|
||||
|
||||
//
|
||||
datetime to = bar.time;
|
||||
datetime from = p2Bar.BeforeOn();
|
||||
string trendName = "ATRBandMiddle_" + ToXString(TimeToSeconds(p2Bar.time));
|
||||
poiDrawer.DrawTrendLine(
|
||||
trendName,
|
||||
atrBandMiddle,
|
||||
from,
|
||||
atrBandMiddle,
|
||||
to,
|
||||
iConfig,
|
||||
clrYellow //
|
||||
);
|
||||
|
||||
//
|
||||
iConfig.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
Print("OrderFlow ...");
|
||||
}
|
||||
|
||||
@@ -1823,6 +1991,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
}
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
XClean(orderFlow);
|
||||
pBarPatterns.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user