last ...
This commit is contained in:
@@ -0,0 +1,496 @@
|
||||
|
||||
/**
|
||||
* Check Bar Has Signal Based on Strategy 3 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Bar ...
|
||||
* @param zone: XBoxZone, reference to holds affected zone ...
|
||||
* @param targets: XTarget, reference to detected Signal's Targets collections ...
|
||||
* @param dir: ENUM_X_DIRECTION, detected Signal's direction ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy1HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &zone,
|
||||
XTarget &targets[],
|
||||
ENUM_X_DIRECTION &dir //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validator Flags ...
|
||||
bool validateByZones = true;
|
||||
bool validateByPinBar = true;
|
||||
bool validateByBarPatterns = true;
|
||||
bool validateByCyclesTrend = true;
|
||||
bool validateByMaFastSlowGrows = true;
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
XOHCL p3Bar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
XPatternAnalysis pBarPatterns;
|
||||
XPatternAnalysis p2BarPatterns;
|
||||
XPatternAnalysis p3BarPatterns;
|
||||
XPatternAnalysisConfig iPatternsConfig;
|
||||
|
||||
//
|
||||
// Reading Bars ...
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
result = result &&
|
||||
pBar.GetPreviousBar(p2Bar);
|
||||
result = result &&
|
||||
p2Bar.GetPreviousBar(p3Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Reading Bar Patterns ...
|
||||
iPatternsConfig.Default();
|
||||
iPatternsConfig.FullPattern();
|
||||
result =
|
||||
result &&
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarPatterns,
|
||||
iPatternsConfig //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
p2Bar,
|
||||
p2BarPatterns,
|
||||
iPatternsConfig //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
p3Bar,
|
||||
p3BarPatterns,
|
||||
iPatternsConfig //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
pBarPatterns.Clean();
|
||||
p2BarPatterns.Clean();
|
||||
p3BarPatterns.Clean();
|
||||
iPatternsConfig.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Detect a Cross of MAs ...
|
||||
bool isFastCrossedOverSlow = fimaParser.IsMAFastCrossedOverSlow(p2Bar.Index());
|
||||
bool isFastCrossedUnderSlow = fimaParser.IsMAFastCrossedUnderSlow(p2Bar.Index());
|
||||
|
||||
//
|
||||
isBullish = isFastCrossedOverSlow;
|
||||
isBearish = isFastCrossedUnderSlow;
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
|
||||
//
|
||||
// Validate Cross By Over/Under Last ...
|
||||
if (result && validateByMaFastSlowGrows)
|
||||
{
|
||||
//
|
||||
// Bullish ...
|
||||
bool isFastOverLast = fimaParser.IsMAFastOverLast(pBar.Index());
|
||||
bool isSlowOverLast = fimaParser.IsMASlowOverLast(pBar.Index());
|
||||
bool isOverLast = isFastOverLast && isSlowOverLast;
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
bool isFastUnderLast = fimaParser.IsMAFastUnderLast(pBar.Index());
|
||||
bool isSlowUnderLast = fimaParser.IsMASlowUnderLast(pBar.Index());
|
||||
bool isUnderLast = isFastUnderLast && isSlowUnderLast;
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isOverLast;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isUnderLast;
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate By Cycles Trend ...
|
||||
if (result && validateByCyclesTrend)
|
||||
{
|
||||
//
|
||||
// Reading Cycles Trend ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
|
||||
//
|
||||
bool isLCMABullish = fimaParser.IsLCMABullish(pBar.Index());
|
||||
bool isHCMABullish = fimaParser.IsHCMABullish(pBar.Index());
|
||||
|
||||
//
|
||||
bool isLCMAOverLast = fimaParser.IsLCMAOverLast(pBar.Index());
|
||||
bool isHCMAOverLast = fimaParser.IsHCMAOverLast(pBar.Index());
|
||||
|
||||
//
|
||||
bool isCyclesMABullish = isLCMABullish && isHCMABullish && isLCMAOverLast && isHCMAOverLast;
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
|
||||
//
|
||||
bool isLCMABearish = fimaParser.IsLCMABearish(pBar.Index());
|
||||
bool isHCMABearish = fimaParser.IsHCMABearish(pBar.Index());
|
||||
|
||||
//
|
||||
bool isLCMAUnderLast = fimaParser.IsLCMAUnderLast(pBar.Index());
|
||||
bool isHCMAUnderLast = fimaParser.IsHCMAUnderLast(pBar.Index());
|
||||
|
||||
//
|
||||
bool isCyclesMABearish = isLCMABearish && isHCMABearish && isLCMAUnderLast && isHCMAUnderLast;
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isCyclesMABullish;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isCyclesMABearish;
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Has a PinBar ...
|
||||
if (result && validateByPinBar)
|
||||
{
|
||||
//
|
||||
bool isPBarIsPinBar = poiDetector.IsPinnedBar(pBar, dir);
|
||||
bool isPBarIsPinBarBullish = isPBarIsPinBar && IsXBullish(dir);
|
||||
bool isPBarIsPinBarBearish = isPBarIsPinBar && IsXBearish(dir);
|
||||
|
||||
//
|
||||
bool isP2BarIsPinBar = poiDetector.IsPinnedBar(p2Bar, dir);
|
||||
bool isP2BarIsPinBarBullish = isP2BarIsPinBar && IsXBullish(dir);
|
||||
bool isP2BarIsPinBarBearish = isP2BarIsPinBar && IsXBearish(dir);
|
||||
|
||||
//
|
||||
bool isBullishPin = isPBarIsPinBarBullish || isP2BarIsPinBarBullish;
|
||||
bool isBearishPin = isPBarIsPinBarBearish || isP2BarIsPinBarBearish;
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isBullishPin;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isBearishPin;
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate By Bar Patterns ...
|
||||
if (result && validateByBarPatterns)
|
||||
{
|
||||
//
|
||||
int count = 0;
|
||||
int bullishCount = 0;
|
||||
int bearishCount = 0;
|
||||
|
||||
//
|
||||
count = pBarPatterns.Count(X_DIRECTION_BULLISH);
|
||||
bullishCount += count;
|
||||
|
||||
//
|
||||
count = p2BarPatterns.Count(X_DIRECTION_BULLISH);
|
||||
bullishCount += count;
|
||||
|
||||
//
|
||||
count = pBarPatterns.Count(X_DIRECTION_BEARISH);
|
||||
bearishCount += count;
|
||||
|
||||
//
|
||||
count = p2BarPatterns.Count(X_DIRECTION_BEARISH);
|
||||
bearishCount += count;
|
||||
|
||||
//
|
||||
bool hasBullishScore = IsValidSize(bullishCount) &&
|
||||
bullishCount > bearishCount;
|
||||
|
||||
//
|
||||
bool hasBearishScore = IsValidSize(bearishCount) &&
|
||||
bearishCount > bullishCount;
|
||||
|
||||
//
|
||||
// Reading Bar Patterns ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
(pBarPatterns.HasPattern(X_BAR_PATTERN_FLAG, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_STAR, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_PINNED, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_RISING, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_ENGULFED, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_MOMENTUM, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_PIERCING, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_SIGNALKEY, X_DIRECTION_BULLISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_TRUE_GAPED, X_DIRECTION_BULLISH));
|
||||
bool isP2BarHasBullishPatterns =
|
||||
(p2BarPatterns.HasPattern(X_BAR_PATTERN_FLAG, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_STAR, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_PINNED, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_RISING, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_ENGULFED, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_MOMENTUM, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_PIERCING, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_SIGNALKEY, X_DIRECTION_BULLISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_TRUE_GAPED, X_DIRECTION_BULLISH));
|
||||
bool hasBullishPatterns = isPBarHasBullishPatterns || isP2BarHasBullishPatterns;
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
bool isPBarHasBearishPatterns =
|
||||
(pBarPatterns.HasPattern(X_BAR_PATTERN_FLAG, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_STAR, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_PINNED, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_RISING, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_ENGULFED, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_MOMENTUM, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_PIERCING, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_SIGNALKEY, X_DIRECTION_BEARISH) ||
|
||||
pBarPatterns.HasPattern(X_BAR_PATTERN_TRUE_GAPED, X_DIRECTION_BEARISH));
|
||||
bool isP2BarHasBearishPatterns =
|
||||
(p2BarPatterns.HasPattern(X_BAR_PATTERN_FLAG, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_STAR, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_PINNED, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_RISING, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_ENGULFED, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_MOMENTUM, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_PIERCING, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_SIGNALKEY, X_DIRECTION_BEARISH) ||
|
||||
p2BarPatterns.HasPattern(X_BAR_PATTERN_TRUE_GAPED, X_DIRECTION_BEARISH));
|
||||
bool hasBearishPatterns = isPBarHasBearishPatterns || isP2BarHasBearishPatterns;
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
hasBullishScore &&
|
||||
hasBullishPatterns;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
hasBearishScore &&
|
||||
hasBearishPatterns;
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate By Zones ...
|
||||
if (result && validateByZones)
|
||||
{
|
||||
//
|
||||
XBoxZone zones[];
|
||||
int count = poiDetector.DetectZones(
|
||||
pBar,
|
||||
zones,
|
||||
true, // Validate Zones ...
|
||||
false, // OB ...
|
||||
true, // FVG ...
|
||||
true, // Supports ...
|
||||
true, // Resistances ...
|
||||
X_DIRECTION_NONE, // All Directions ...
|
||||
X_SORT_BY_DATE, // Sort By ...
|
||||
X_DIRECTION_BEARISH, // Sort Direction ...
|
||||
5, // Zones Loopback ...
|
||||
5, // Zones Validation ...
|
||||
100 // Loopback ...
|
||||
);
|
||||
|
||||
//
|
||||
bool has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
poiDrawer.DrawZones(zones, structureDrawConfig.drawConfig);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
DebugBreak();
|
||||
|
||||
//
|
||||
result = false;
|
||||
isBullish = false;
|
||||
isBearish = false;
|
||||
}
|
||||
|
||||
//
|
||||
// Detecting Direction ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
result = HasDirection(dir);
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Zone ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Since Zone Prepared in Above Steps ...
|
||||
// here we only Validate it ...
|
||||
result = zone.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
// Draws ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||
XPatternAnalysisDrawConfig iPatternsConfig = structureDrawConfig.barAnalysisDrawConfig;
|
||||
iConfig.trendRayLeft = false;
|
||||
iConfig.trendRayRight = false;
|
||||
|
||||
//
|
||||
// Draw Zone ...
|
||||
if (zone.IsValid())
|
||||
{
|
||||
//
|
||||
iConfig.zonesStyle = STYLE_DASHDOT;
|
||||
iConfig.bullishColor = clrYellow;
|
||||
iConfig.bearishColor = clrDarkOrange;
|
||||
|
||||
//
|
||||
poiDrawer.DrawZone(zone, iConfig);
|
||||
}
|
||||
|
||||
//
|
||||
// poiDrawer.DrawZone(mcPVZone, iConfig);
|
||||
// poiDrawer.DrawZone(lcPVZone, iConfig);
|
||||
// poiDrawer.DrawZone(hcPVZone, iConfig);
|
||||
|
||||
//
|
||||
// poiDrawer.DrawZone(pinBarZone, iConfig);
|
||||
// poiDrawer.DrawZone(pullbackZone, iConfig);
|
||||
// poiDrawer.DrawTrendLine(pinBarZoneTrend, iConfig);
|
||||
|
||||
//
|
||||
poiDrawer.DrawPatternAnalysis(pBarPatterns, iPatternsConfig);
|
||||
poiDrawer.DrawPatternAnalysis(p2BarPatterns, iPatternsConfig);
|
||||
poiDrawer.DrawPatternAnalysis(p3BarPatterns, iPatternsConfig);
|
||||
|
||||
//
|
||||
// if (hasATRBox)
|
||||
// {
|
||||
// poiDrawer.DrawZone(atrBox, iConfig);
|
||||
// }
|
||||
|
||||
//
|
||||
// if (hasDoublePatterns)
|
||||
// {
|
||||
// //
|
||||
// poiDrawer.DrawPatternAnalysis(iPatterns, iPatternsConfig);
|
||||
// poiDrawer.DrawPatternAnalysis(iPPatterns, iPatternsConfig);
|
||||
// }
|
||||
|
||||
//
|
||||
iConfig.Clean();
|
||||
iPatternsConfig.Clean();
|
||||
|
||||
//
|
||||
DebugBreak();
|
||||
|
||||
// //
|
||||
// result = false;
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// zone.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Targets ...
|
||||
if (result)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
}
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
pBarPatterns.Clean();
|
||||
p2BarPatterns.Clean();
|
||||
p3BarPatterns.Clean();
|
||||
iPatternsConfig.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user