last works on Strategy 3 ...
This commit is contained in:
@@ -446,6 +446,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
|
||||
//
|
||||
XClean(guards);
|
||||
return result;
|
||||
|
||||
//
|
||||
int positionsCount = ArraySize(positions);
|
||||
@@ -1393,8 +1394,8 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
// Signaller Flags ...
|
||||
bool useSignaller1 = false;
|
||||
bool useSignaller2 = false;
|
||||
bool useSignaller3 = false;
|
||||
bool useSignaller4 = true;
|
||||
bool useSignaller3 = true;
|
||||
bool useSignaller4 = false;
|
||||
|
||||
//
|
||||
// Validator Flags ...
|
||||
@@ -1412,20 +1413,20 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
// Draw Flags ...
|
||||
bool draw = true;
|
||||
bool drawZone = true;
|
||||
bool drawMarketStructurePivots = true;
|
||||
bool drawMarketStructureAnalysis = true;
|
||||
bool drawMarketStructureOrderFlow = true;
|
||||
bool drawMarketStructurePivots = false;
|
||||
bool drawMarketStructureAnalysis = false;
|
||||
bool drawMarketStructureOrderFlow = false;
|
||||
XPOIDrawConfig iDrawConfig;
|
||||
|
||||
//
|
||||
drawLeg = false;
|
||||
drawZones = true;
|
||||
drawIZones = true;
|
||||
drawSupport = true;
|
||||
drawISupport = true;
|
||||
drawZones = false;
|
||||
drawIZones = false;
|
||||
drawSupport = false;
|
||||
drawISupport = false;
|
||||
drawOrderFlow = false;
|
||||
drawResistance = true;
|
||||
drawIResistance = true;
|
||||
drawResistance = false;
|
||||
drawIResistance = false;
|
||||
|
||||
//
|
||||
// Signal Checking ...
|
||||
@@ -2345,191 +2346,269 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
}
|
||||
|
||||
//
|
||||
// Configurations ...
|
||||
// int patternsFillValidation = 3;
|
||||
// Validation Flags ...
|
||||
|
||||
// //
|
||||
// // Validation Flags ...
|
||||
// bool validateByBarPatterns = true;
|
||||
//
|
||||
bool validateByPVChanges = true;
|
||||
bool validateByGapExists = true;
|
||||
bool validateByBarShadows = true;
|
||||
bool validateHasDirectionalZone = true;
|
||||
|
||||
// //
|
||||
// // Define Requirements ...
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
// //
|
||||
// XOHCL pBar;
|
||||
// XOHCL p2Bar;
|
||||
// XOHCL p3Bar;
|
||||
// bool isBullish = false;
|
||||
// bool isBearish = false;
|
||||
//
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
XOHCL p3Bar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
// //
|
||||
// // Read PBar ...
|
||||
// result = bar.GetPreviousBar(pBar);
|
||||
// result = result &&
|
||||
// pBar.GetPreviousBar(p2Bar);
|
||||
// result = result &&
|
||||
// p2Bar.GetPreviousBar(p3Bar);
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// pBar.Clean();
|
||||
// p2Bar.Clean();
|
||||
// p3Bar.Clean();
|
||||
//
|
||||
// Read PBar ...
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
result = result &&
|
||||
pBar.GetPreviousBar(p2Bar);
|
||||
result = result &&
|
||||
p2Bar.GetPreviousBar(p3Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
|
||||
// //
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
// //
|
||||
// // Do ...
|
||||
//
|
||||
// Do ...
|
||||
|
||||
// //
|
||||
// // Retrieve pBar Patterns ...
|
||||
// XPatternAnalysis pBarPatterns;
|
||||
// XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig;
|
||||
// poiDetector.AnalyseBarPatterns(
|
||||
// pBar,
|
||||
// pBarPatterns,
|
||||
// patternConfig //
|
||||
// );
|
||||
//
|
||||
// Retrieve pBar Patterns ...
|
||||
XBoxZone _fvg;
|
||||
XBoxZone _support;
|
||||
XBoxZone _resistance;
|
||||
XPatternAnalysis pBarPatterns;
|
||||
XPatternAnalysis p2BarPatterns;
|
||||
XPatternAnalysisConfig patternConfig = structureConfig.barsAnalysisConfig;
|
||||
|
||||
// //
|
||||
// int pBarBullishPatternsCount =
|
||||
// !pBarPatterns.IsValid()
|
||||
// ? 0
|
||||
// : pBarPatterns.Count(X_DIRECTION_BULLISH);
|
||||
// bool isPBarFillBullishPatterns =
|
||||
// IsValidSize(pBarBullishPatternsCount) &&
|
||||
// pBarBullishPatternsCount >= patternsFillValidation;
|
||||
// bool isPBarHasBullishPatterns =
|
||||
// pBarPatterns.IsValid() &&
|
||||
// (
|
||||
// //
|
||||
// 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)
|
||||
// //
|
||||
// );
|
||||
//
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarPatterns,
|
||||
patternConfig //
|
||||
);
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
p2Bar,
|
||||
p2BarPatterns,
|
||||
patternConfig //
|
||||
);
|
||||
|
||||
// //
|
||||
// int pBarBearishPatternsCount =
|
||||
// !pBarPatterns.IsValid()
|
||||
// ? 0
|
||||
// : pBarPatterns.Count(X_DIRECTION_BEARISH);
|
||||
// bool isPBarFillBearishPatterns =
|
||||
// IsValidSize(pBarBearishPatternsCount) &&
|
||||
// pBarBearishPatternsCount >= patternsFillValidation;
|
||||
// bool isPBarHasBearishPatterns =
|
||||
// pBarPatterns.IsValid() &&
|
||||
// (
|
||||
// //
|
||||
// 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)
|
||||
// //
|
||||
// );
|
||||
//
|
||||
// Price Must Break Support or Resistance ...
|
||||
|
||||
// //
|
||||
// bool hasSupport = HasSupport();
|
||||
// bool hasResistance = HasResistance();
|
||||
//
|
||||
// Extract Support and Resistance ...
|
||||
bool hasSupport = p2BarPatterns.IsSupport();
|
||||
bool hasResistance = p2BarPatterns.IsResistance();
|
||||
if (hasSupport)
|
||||
{
|
||||
//
|
||||
XOHCL tmpBar;
|
||||
XPivot tmpPivot;
|
||||
hasSupport = p2BarPatterns.GetSupport(tmpBar, tmpPivot, _support);
|
||||
tmpBar.Clean();
|
||||
tmpPivot.Clean();
|
||||
}
|
||||
if (hasResistance)
|
||||
{
|
||||
//
|
||||
XOHCL tmpBar;
|
||||
XPivot tmpPivot;
|
||||
hasResistance = p2BarPatterns.GetResistance(tmpBar, tmpPivot, _resistance);
|
||||
tmpBar.Clean();
|
||||
tmpPivot.Clean();
|
||||
}
|
||||
|
||||
// //
|
||||
// bool isP2BarInSupport = hasSupport &&
|
||||
// pBar.low > support.lower &&
|
||||
// p2Bar.low < support.upper &&
|
||||
// p2Bar.low > support.lower;
|
||||
//
|
||||
bool hasBreakedSupport = hasSupport &&
|
||||
pBar.close < _support.lower &&
|
||||
p2Bar.close > _support.lower;
|
||||
bool hasBreakedResistance = hasResistance &&
|
||||
pBar.close > _resistance.upper &&
|
||||
p2Bar.close < _resistance.upper;
|
||||
|
||||
// //
|
||||
// bool isP2BarInResistance = hasResistance &&
|
||||
// pBar.high < resistance.upper &&
|
||||
// p2Bar.high > resistance.lower &&
|
||||
// p2Bar.high < resistance.upper;
|
||||
//
|
||||
isBullish = hasBreakedResistance;
|
||||
isBearish = hasBreakedSupport;
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// hasSupport &&
|
||||
// isP2BarInSupport;
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
|
||||
// //
|
||||
// isBearish =
|
||||
// hasResistance &&
|
||||
// isP2BarInResistance;
|
||||
//
|
||||
// Validate By PV Changed ...
|
||||
// Breaker Bar must Change Peak or Value ...
|
||||
if (result && validateByPVChanges)
|
||||
{
|
||||
//
|
||||
bool isPeakOverLast = fimaParser.IsPeakOverLast(pBar.Index());
|
||||
bool isValeUnderLast = fimaParser.IsValeUnderLast(pBar.Index());
|
||||
|
||||
// //
|
||||
// // Summarize Result ...
|
||||
// result = isBullish || isBearish;
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isPeakOverLast;
|
||||
|
||||
// //
|
||||
// // Validate Bar Patterns ...
|
||||
// if (result && validateByBarPatterns)
|
||||
// {
|
||||
// //
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// isPBarHasBullishPatterns &&
|
||||
// isPBarFillBullishPatterns;
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isValeUnderLast;
|
||||
|
||||
// //
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// isPBarHasBearishPatterns &&
|
||||
// isPBarFillBearishPatterns;
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
// //
|
||||
// // Summarize result ...
|
||||
// result = isBullish || isBearish;
|
||||
// }
|
||||
//
|
||||
// Validate by Bar Shadows ...
|
||||
// Breakre Bar Side Shadow must not Reached ...
|
||||
if (result && validateByBarShadows)
|
||||
{
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
pBar.low > p2Bar.low;
|
||||
|
||||
// //
|
||||
// if (result)
|
||||
// {
|
||||
// //
|
||||
// poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
|
||||
// // poiDrawer.DrawPatternAnalysis(p2BarPatterns, structureDrawConfig.barAnalysisDrawConfig);
|
||||
// DebugBreak();
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
pBar.high < p2Bar.high;
|
||||
|
||||
// //
|
||||
// result = false;
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// }
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
// //
|
||||
// // Validate ...
|
||||
// result = isBullish ||
|
||||
// isBearish;
|
||||
//
|
||||
// Validate Has Directional Zone ...
|
||||
if (result && validateHasDirectionalZone)
|
||||
{
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
hasSupport;
|
||||
|
||||
// //
|
||||
// // Prepare Zone ...
|
||||
// if (result)
|
||||
// {
|
||||
// }
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
hasResistance;
|
||||
|
||||
// //
|
||||
// // Prepare Targets ...
|
||||
// if (result)
|
||||
// {
|
||||
// }
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
// //
|
||||
// // Cleanup ...
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// zone.Clean();
|
||||
// XClean(targets);
|
||||
// dir = X_DIRECTION_NONE;
|
||||
// }
|
||||
// pBar.Clean();
|
||||
// p2Bar.Clean();
|
||||
// p3Bar.Clean();
|
||||
// // pBarPatterns.Clean();
|
||||
// // patternConfig.Clean();
|
||||
// // p2BarPatterns.Clean();
|
||||
//
|
||||
// Validate By Gap Exists ...
|
||||
if (result && validateByGapExists)
|
||||
{
|
||||
//
|
||||
ENUM_X_DIRECTION tmpDir;
|
||||
bool hasFVG = poiDetector.HasFVG(
|
||||
pBar,
|
||||
tmpDir,
|
||||
_fvg //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
hasFVG &&
|
||||
IsXBullish(tmpDir);
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
hasFVG &&
|
||||
IsXBearish(tmpDir);
|
||||
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish || isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Direction and Zone ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
zone = _resistance;
|
||||
zone.dir = Opposit(_resistance.dir);
|
||||
dir = zone.dir;
|
||||
zone.upper = MathMax(zone.upper, _fvg.upper);
|
||||
zone.lower = MathMin(zone.lower, _fvg.lower);
|
||||
}
|
||||
|
||||
//
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
zone = _support;
|
||||
zone.dir = Opposit(_support.dir);
|
||||
dir = zone.dir;
|
||||
zone.upper = MathMax(zone.upper, _fvg.upper);
|
||||
zone.lower = MathMin(zone.lower, _fvg.lower);
|
||||
}
|
||||
|
||||
//
|
||||
result = zone.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (_support.IsValid())
|
||||
{
|
||||
poiDrawer.DrawZone(_support, structureDrawConfig.drawConfig);
|
||||
}
|
||||
|
||||
//
|
||||
if (_resistance.IsValid())
|
||||
{
|
||||
poiDrawer.DrawZone(_resistance, structureDrawConfig.drawConfig);
|
||||
}
|
||||
|
||||
//
|
||||
if (pBarPatterns.IsValid())
|
||||
{
|
||||
poiDrawer.DrawPatternAnalysis(pBarPatterns, structureDrawConfig.barAnalysisDrawConfig);
|
||||
}
|
||||
|
||||
//
|
||||
// DebugBreak();
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
}
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
pBarPatterns.Clean();
|
||||
p2BarPatterns.Clean();
|
||||
patternConfig.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user