last ...
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
// Imports ...
|
||||
#include "../Classes/x-saherelm.base.class.mq5"
|
||||
#include "../Classes/x-saherelm.x-bar.analyser.class.mq5"
|
||||
#include "../Libraries/x-saherelm.x-poi.extensions.lib.mq5"
|
||||
#include "../Libraries/x-saherelm.x-pivot.analysis.lib.mq5"
|
||||
#include "../Libraries/x-saherelm.x-poi.extensions.lib.mq5"
|
||||
#include "../Libraries/x-saherelm.x-poi.lib.mq5"
|
||||
|
||||
//
|
||||
@@ -1995,36 +1995,37 @@ class XCMarketPatternDetector : public XCBase
|
||||
bool AnalyseBarPatterns(
|
||||
XOHCL &bar,
|
||||
XPatternAnalysis &analysis,
|
||||
//
|
||||
// PV ...
|
||||
int pvValidationLength = 7,
|
||||
ENUM_X_PRICE peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE valePriceType = X_PRICE_LOW,
|
||||
//
|
||||
// Momentum ...
|
||||
int momentumBarValidationLength = 3,
|
||||
double momentumBarApprovedMultiplier = 3,
|
||||
//
|
||||
// TrueGap ...
|
||||
double trueGapApprovedStrength = 1,
|
||||
//
|
||||
// Pin ...
|
||||
double pinBarShadowApprovedMultiplier = 3,
|
||||
double pinBarRangeMultiplier = 4,
|
||||
bool pinBarForceDirection = false,
|
||||
//
|
||||
// Flag ...
|
||||
int flagPatternPullbackLength = 3,
|
||||
//
|
||||
// FVG ...
|
||||
bool fvgForceType = false,
|
||||
//
|
||||
// OB ...
|
||||
bool obForceTwoBar = false,
|
||||
//
|
||||
// Support and Resistance ...
|
||||
int supportAndResistanceValidationLength = 21,
|
||||
int supportAndResistanceLoopbackLength = 50 //
|
||||
XPatternAnalysisConfig &config //
|
||||
// //
|
||||
// // PV ...
|
||||
// int pvValidationLength = 7,
|
||||
// ENUM_X_PRICE peakPriceType = X_PRICE_HIGH,
|
||||
// ENUM_X_PRICE valePriceType = X_PRICE_LOW,
|
||||
// //
|
||||
// // Momentum ...
|
||||
// int momentumBarValidationLength = 3,
|
||||
// double momentumBarApprovedMultiplier = 3,
|
||||
// //
|
||||
// // TrueGap ...
|
||||
// double trueGapApprovedStrength = 1,
|
||||
// //
|
||||
// // Pin ...
|
||||
// double pinBarShadowApprovedMultiplier = 3,
|
||||
// double pinBarRangeMultiplier = 4,
|
||||
// bool pinBarForceDirection = false,
|
||||
// //
|
||||
// // Flag ...
|
||||
// int flagPatternPullbackLength = 3,
|
||||
// //
|
||||
// // FVG ...
|
||||
// bool fvgForceType = false,
|
||||
// //
|
||||
// // OB ...
|
||||
// bool obForceTwoBar = false,
|
||||
// //
|
||||
// // Support and Resistance ...
|
||||
// int supportAndResistanceValidationLength = 21,
|
||||
// int supportAndResistanceLoopbackLength = 50 //
|
||||
//
|
||||
)
|
||||
{
|
||||
@@ -2035,28 +2036,28 @@ class XCMarketPatternDetector : public XCBase
|
||||
// Prepare ...
|
||||
analysis.Clean();
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
//
|
||||
pvValidationLength = NormalizeInt(pvValidationLength, 2);
|
||||
// //
|
||||
// // Normalize ...
|
||||
// //
|
||||
// config.pvValidationLength = NormalizeInt(config.pvValidationLength, 2);
|
||||
|
||||
//
|
||||
momentumBarValidationLength = NormalizeInt(momentumBarValidationLength, 2);
|
||||
momentumBarApprovedMultiplier = NormalizeDouble(momentumBarApprovedMultiplier, 1);
|
||||
// //
|
||||
// config.momentumBarValidationLength = NormalizeInt(config.momentumBarValidationLength, 2);
|
||||
// momentumBarApprovedMultiplier = NormalizeDouble(momentumBarApprovedMultiplier, 1);
|
||||
|
||||
//
|
||||
trueGapApprovedStrength = NormalizeDouble(trueGapApprovedStrength, 1);
|
||||
// //
|
||||
// trueGapApprovedStrength = NormalizeDouble(trueGapApprovedStrength, 1);
|
||||
|
||||
//
|
||||
pinBarRangeMultiplier = NormalizeDouble(pinBarRangeMultiplier, 4);
|
||||
pinBarShadowApprovedMultiplier = NormalizeDouble(pinBarShadowApprovedMultiplier, 3);
|
||||
// //
|
||||
// pinBarRangeMultiplier = NormalizeDouble(pinBarRangeMultiplier, 4);
|
||||
// pinBarShadowApprovedMultiplier = NormalizeDouble(pinBarShadowApprovedMultiplier, 3);
|
||||
|
||||
//
|
||||
flagPatternPullbackLength = NormalizeInt(flagPatternPullbackLength, 3);
|
||||
// //
|
||||
// flagPatternPullbackLength = NormalizeInt(flagPatternPullbackLength, 3);
|
||||
|
||||
//
|
||||
supportAndResistanceLoopbackLength = NormalizeInt(supportAndResistanceLoopbackLength, 10);
|
||||
supportAndResistanceValidationLength = NormalizeInt(supportAndResistanceValidationLength, 10);
|
||||
// //
|
||||
// supportAndResistanceLoopbackLength = NormalizeInt(supportAndResistanceLoopbackLength, 10);
|
||||
// supportAndResistanceValidationLength = NormalizeInt(supportAndResistanceValidationLength, 10);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
@@ -2076,129 +2077,245 @@ class XCMarketPatternDetector : public XCBase
|
||||
ENUM_X_DIRECTION iDir;
|
||||
ENUM_X_BAR_PATTERN iPattern;
|
||||
|
||||
//
|
||||
bool has;
|
||||
bool isBullish;
|
||||
bool isBearish;
|
||||
|
||||
//
|
||||
bool canDetect;
|
||||
bool canDetectBullish;
|
||||
bool canDetectBearish;
|
||||
|
||||
//
|
||||
// Bars Detectors ...
|
||||
|
||||
//
|
||||
// XPV High Low Detection ...
|
||||
bool isPV = IsPV(
|
||||
bar,
|
||||
iDir,
|
||||
pvValidationLength,
|
||||
peakPriceType,
|
||||
valePriceType //
|
||||
);
|
||||
bool isHigh = isPV &&
|
||||
IsXBearish(iDir);
|
||||
bool isLow = isPV &&
|
||||
IsXBullish(iDir);
|
||||
if (isPV)
|
||||
canDetect = config.CanDetect(X_BAR_PATTERN_HIGH) ||
|
||||
config.CanDetect(X_BAR_PATTERN_LOW);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern =
|
||||
isHigh
|
||||
? X_BAR_PATTERN_HIGH
|
||||
: X_BAR_PATTERN_LOW;
|
||||
has = IsPV(
|
||||
bar,
|
||||
iDir,
|
||||
config.pvValidationLength,
|
||||
config.peakPriceType,
|
||||
config.valePriceType //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
canDetectBullish = config.CanDetect(X_BAR_PATTERN_LOW);
|
||||
canDetectBearish = config.CanDetect(X_BAR_PATTERN_HIGH);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern =
|
||||
isBearish
|
||||
? X_BAR_PATTERN_HIGH
|
||||
: X_BAR_PATTERN_LOW;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
bool isMomentum = IsMomentumBar(
|
||||
bar,
|
||||
iDir,
|
||||
momentumBarValidationLength,
|
||||
momentumBarApprovedMultiplier //
|
||||
);
|
||||
bool isBullishMomentum = isMomentum &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishMomentum = isMomentum &&
|
||||
IsXBearish(iDir);
|
||||
if (isMomentum)
|
||||
iPattern = X_BAR_PATTERN_MOMENTUM;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_MOMENTUM;
|
||||
has = IsMomentumBar(
|
||||
bar,
|
||||
iDir,
|
||||
config.momentumBarValidationLength,
|
||||
config.momentumBarApprovedMultiplier //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
iDir //
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Engulfed ...
|
||||
bool isEngulfed = IsEngulfedBar(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
bool isBullishEngulfed = isEngulfed &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishEngulfed = isEngulfed &&
|
||||
IsXBearish(iDir);
|
||||
if (isEngulfed)
|
||||
iPattern = X_BAR_PATTERN_ENGULFED;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_ENGULFED;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
has = IsEngulfedBar(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// TrueGap ...
|
||||
bool isTrueGaped = IsTrueGapedBar(
|
||||
bar,
|
||||
iDir,
|
||||
trueGapApprovedStrength //
|
||||
);
|
||||
bool isBullishTrueGaped = isTrueGaped &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishTrueGaped = isTrueGaped &&
|
||||
IsXBearish(iDir);
|
||||
if (isTrueGaped)
|
||||
iPattern = X_BAR_PATTERN_TRUE_GAPED;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_TRUE_GAPED;
|
||||
has = IsTrueGapedBar(
|
||||
bar,
|
||||
iDir,
|
||||
config.trueGapApprovedStrength //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
iDir //
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Pinned ...
|
||||
bool isPinned = IsPinnedBar(
|
||||
bar,
|
||||
iDir,
|
||||
pinBarShadowApprovedMultiplier,
|
||||
pinBarRangeMultiplier,
|
||||
pinBarForceDirection //
|
||||
);
|
||||
bool isBullishPinned = isPinned &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishPinned = isPinned &&
|
||||
IsXBearish(iDir);
|
||||
if (isPinned)
|
||||
iPattern = X_BAR_PATTERN_PINNED;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_PINNED;
|
||||
has = IsPinnedBar(
|
||||
bar,
|
||||
iDir,
|
||||
config.pinBarShadowApprovedMultiplier,
|
||||
config.pinBarRangeMultiplier,
|
||||
config.pinBarForceDirection //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
iDir //
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2206,120 +2323,225 @@ class XCMarketPatternDetector : public XCBase
|
||||
|
||||
//
|
||||
// Star ...
|
||||
bool isStar = IsStarPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
bool isBullishStar = isStar &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishStar = isStar &&
|
||||
IsXBearish(iDir);
|
||||
if (isStar)
|
||||
iPattern = X_BAR_PATTERN_STAR;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_STAR;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
has = IsStarPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Piercing ...
|
||||
bool isPiercing = IsPiercingPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
bool isBullishPiercing = isPiercing &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishPiercing = isPiercing &&
|
||||
IsXBearish(iDir);
|
||||
if (isPiercing)
|
||||
iPattern = X_BAR_PATTERN_PIERCING;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_PIERCING;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
has = IsPiercingPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Rising ...
|
||||
bool isRising = IsRisingPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
bool isBullishRising = isRising &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishRising = isRising &&
|
||||
IsXBearish(iDir);
|
||||
if (isRising)
|
||||
iPattern = X_BAR_PATTERN_RISING;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_RISING;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
has = IsRisingPattern(
|
||||
bar,
|
||||
iDir //
|
||||
);
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Flag ...
|
||||
bool isFlag = IsFlagPattern(
|
||||
bar,
|
||||
iDir,
|
||||
iSwing,
|
||||
flagPatternPullbackLength //
|
||||
);
|
||||
bool isBullishFlag = isFlag &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishFlag = isFlag &&
|
||||
IsXBearish(iDir);
|
||||
if (isFlag)
|
||||
iPattern = X_BAR_PATTERN_FLAG;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_FLAG;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
has = IsFlagPattern(
|
||||
bar,
|
||||
iDir,
|
||||
iSwing,
|
||||
config.flagPatternPullbackLength //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.flagSwing = iSwing;
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.flagSwing = iSwing;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// SignalKey ...
|
||||
bool isSignalKey = IsSignalKeyBarPattern(
|
||||
bar,
|
||||
iDir,
|
||||
pinBarShadowApprovedMultiplier,
|
||||
pinBarRangeMultiplier,
|
||||
pinBarForceDirection //
|
||||
);
|
||||
bool isBullishSignalKey = isSignalKey &&
|
||||
IsXBullish(iDir);
|
||||
bool isBearishSignalKey = isSignalKey &&
|
||||
IsXBearish(iDir);
|
||||
if (isSignalKey)
|
||||
iPattern = X_BAR_PATTERN_SIGNALKEY;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_SIGNALKEY;
|
||||
has = IsSignalKeyBarPattern(
|
||||
bar,
|
||||
iDir,
|
||||
config.pinBarShadowApprovedMultiplier,
|
||||
config.pinBarRangeMultiplier,
|
||||
config.pinBarForceDirection //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
iDir //
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
IsXBullish(iDir) &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
IsXBearish(iDir) &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iDir //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2327,78 +2549,40 @@ class XCMarketPatternDetector : public XCBase
|
||||
|
||||
//
|
||||
// OB ...
|
||||
bool isOB = barAnalyser.IsOB(
|
||||
bar,
|
||||
iZone,
|
||||
fvgForceType,
|
||||
obForceTwoBar //
|
||||
);
|
||||
bool isBullishOB = isOB &&
|
||||
iZone.IsBullish();
|
||||
bool isBearishOB = isOB &&
|
||||
iZone.IsBearish();
|
||||
if (isOB)
|
||||
iPattern = X_BAR_PATTERN_OB;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_OB;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.ob = iZone;
|
||||
}
|
||||
|
||||
//
|
||||
// FVG ...
|
||||
bool isFVG = barAnalyser.IsFVG(
|
||||
bar,
|
||||
iZone,
|
||||
fvgForceType //
|
||||
);
|
||||
bool isBullishFVG = isFVG &&
|
||||
iZone.IsBullish();
|
||||
bool isBearishFVG = isFVG &&
|
||||
iZone.IsBearish();
|
||||
if (isFVG)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_FVG;
|
||||
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.fvg = iZone;
|
||||
}
|
||||
|
||||
//
|
||||
// Support ...
|
||||
bool isSupport = HasSupport(
|
||||
bar,
|
||||
iSwing,
|
||||
supportAndResistanceValidationLength,
|
||||
supportAndResistanceLoopbackLength //
|
||||
);
|
||||
if (isSupport)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_SUPPORT;
|
||||
|
||||
//
|
||||
bool has = ToSupportBox(
|
||||
iSwing,
|
||||
has = barAnalyser.IsOB(
|
||||
bar,
|
||||
iZone,
|
||||
bar.time,
|
||||
supportAndResistanceValidationLength //
|
||||
config.fvgForceType,
|
||||
config.obForceTwoBar //
|
||||
);
|
||||
if (has)
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
iZone.IsBullish() &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
iZone.IsBearish() &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
@@ -2407,40 +2591,126 @@ class XCMarketPatternDetector : public XCBase
|
||||
);
|
||||
|
||||
//
|
||||
analysis.support = iZone;
|
||||
analysis.ob = iZone;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// FVG ...
|
||||
iPattern = X_BAR_PATTERN_FVG;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
has = barAnalyser.IsFVG(
|
||||
bar,
|
||||
iZone,
|
||||
config.fvgForceType //
|
||||
);
|
||||
|
||||
//
|
||||
canDetectBullish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
canDetectBearish = config.CanDetect(
|
||||
iPattern,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = has &&
|
||||
iZone.IsBullish() &&
|
||||
canDetectBullish;
|
||||
isBearish = has &&
|
||||
iZone.IsBearish() &&
|
||||
canDetectBearish;
|
||||
|
||||
//
|
||||
canDetect = isBullish ||
|
||||
isBearish;
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.fvg = iZone;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Support ...
|
||||
iPattern = X_BAR_PATTERN_SUPPORT;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
has = HasSupport(
|
||||
bar,
|
||||
iSwing,
|
||||
config.supportAndResistanceValidationLength,
|
||||
config.supportAndResistanceLoopbackLength //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
has = ToSupportBox(
|
||||
iSwing,
|
||||
iZone,
|
||||
bar.time,
|
||||
config.supportAndResistanceValidationLength //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.support = iZone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Resistance ...
|
||||
bool isResistance = HasResistance(
|
||||
bar,
|
||||
iSwing,
|
||||
supportAndResistanceValidationLength,
|
||||
supportAndResistanceLoopbackLength //
|
||||
);
|
||||
if (isResistance)
|
||||
iPattern = X_BAR_PATTERN_RESISTANCE;
|
||||
canDetect = config.CanDetect(iPattern);
|
||||
if (canDetect)
|
||||
{
|
||||
//
|
||||
iPattern = X_BAR_PATTERN_RESISTANCE;
|
||||
|
||||
//
|
||||
bool has = ToResistanceBox(
|
||||
has = HasResistance(
|
||||
bar,
|
||||
iSwing,
|
||||
iZone,
|
||||
bar.time,
|
||||
supportAndResistanceValidationLength //
|
||||
config.supportAndResistanceValidationLength,
|
||||
config.supportAndResistanceLoopbackLength //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
has = ToResistanceBox(
|
||||
iSwing,
|
||||
iZone,
|
||||
bar.time,
|
||||
config.supportAndResistanceValidationLength //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
analysis.AddPattern(
|
||||
iPattern,
|
||||
iZone.dir //
|
||||
);
|
||||
|
||||
//
|
||||
analysis.resistance = iZone;
|
||||
//
|
||||
analysis.resistance = iZone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user