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