last ...
This commit is contained in:
@@ -23,8 +23,8 @@
|
|||||||
// Imports ...
|
// Imports ...
|
||||||
#include "../Classes/x-saherelm.base.class.mq5"
|
#include "../Classes/x-saherelm.base.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-bar.analyser.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-pivot.analysis.lib.mq5"
|
||||||
|
#include "../Libraries/x-saherelm.x-poi.extensions.lib.mq5"
|
||||||
#include "../Libraries/x-saherelm.x-poi.lib.mq5"
|
#include "../Libraries/x-saherelm.x-poi.lib.mq5"
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1995,36 +1995,37 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
bool AnalyseBarPatterns(
|
bool AnalyseBarPatterns(
|
||||||
XOHCL &bar,
|
XOHCL &bar,
|
||||||
XPatternAnalysis &analysis,
|
XPatternAnalysis &analysis,
|
||||||
//
|
XPatternAnalysisConfig &config //
|
||||||
// PV ...
|
// //
|
||||||
int pvValidationLength = 7,
|
// // PV ...
|
||||||
ENUM_X_PRICE peakPriceType = X_PRICE_HIGH,
|
// int pvValidationLength = 7,
|
||||||
ENUM_X_PRICE valePriceType = X_PRICE_LOW,
|
// ENUM_X_PRICE peakPriceType = X_PRICE_HIGH,
|
||||||
//
|
// ENUM_X_PRICE valePriceType = X_PRICE_LOW,
|
||||||
// Momentum ...
|
// //
|
||||||
int momentumBarValidationLength = 3,
|
// // Momentum ...
|
||||||
double momentumBarApprovedMultiplier = 3,
|
// int momentumBarValidationLength = 3,
|
||||||
//
|
// double momentumBarApprovedMultiplier = 3,
|
||||||
// TrueGap ...
|
// //
|
||||||
double trueGapApprovedStrength = 1,
|
// // TrueGap ...
|
||||||
//
|
// double trueGapApprovedStrength = 1,
|
||||||
// Pin ...
|
// //
|
||||||
double pinBarShadowApprovedMultiplier = 3,
|
// // Pin ...
|
||||||
double pinBarRangeMultiplier = 4,
|
// double pinBarShadowApprovedMultiplier = 3,
|
||||||
bool pinBarForceDirection = false,
|
// double pinBarRangeMultiplier = 4,
|
||||||
//
|
// bool pinBarForceDirection = false,
|
||||||
// Flag ...
|
// //
|
||||||
int flagPatternPullbackLength = 3,
|
// // Flag ...
|
||||||
//
|
// int flagPatternPullbackLength = 3,
|
||||||
// FVG ...
|
// //
|
||||||
bool fvgForceType = false,
|
// // FVG ...
|
||||||
//
|
// bool fvgForceType = false,
|
||||||
// OB ...
|
// //
|
||||||
bool obForceTwoBar = false,
|
// // OB ...
|
||||||
//
|
// bool obForceTwoBar = false,
|
||||||
// Support and Resistance ...
|
// //
|
||||||
int supportAndResistanceValidationLength = 21,
|
// // Support and Resistance ...
|
||||||
int supportAndResistanceLoopbackLength = 50 //
|
// int supportAndResistanceValidationLength = 21,
|
||||||
|
// int supportAndResistanceLoopbackLength = 50 //
|
||||||
//
|
//
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -2035,28 +2036,28 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
// Prepare ...
|
// Prepare ...
|
||||||
analysis.Clean();
|
analysis.Clean();
|
||||||
|
|
||||||
//
|
// //
|
||||||
// Normalize ...
|
// // Normalize ...
|
||||||
//
|
// //
|
||||||
pvValidationLength = NormalizeInt(pvValidationLength, 2);
|
// config.pvValidationLength = NormalizeInt(config.pvValidationLength, 2);
|
||||||
|
|
||||||
//
|
// //
|
||||||
momentumBarValidationLength = NormalizeInt(momentumBarValidationLength, 2);
|
// config.momentumBarValidationLength = NormalizeInt(config.momentumBarValidationLength, 2);
|
||||||
momentumBarApprovedMultiplier = NormalizeDouble(momentumBarApprovedMultiplier, 1);
|
// momentumBarApprovedMultiplier = NormalizeDouble(momentumBarApprovedMultiplier, 1);
|
||||||
|
|
||||||
//
|
// //
|
||||||
trueGapApprovedStrength = NormalizeDouble(trueGapApprovedStrength, 1);
|
// trueGapApprovedStrength = NormalizeDouble(trueGapApprovedStrength, 1);
|
||||||
|
|
||||||
//
|
// //
|
||||||
pinBarRangeMultiplier = NormalizeDouble(pinBarRangeMultiplier, 4);
|
// pinBarRangeMultiplier = NormalizeDouble(pinBarRangeMultiplier, 4);
|
||||||
pinBarShadowApprovedMultiplier = NormalizeDouble(pinBarShadowApprovedMultiplier, 3);
|
// pinBarShadowApprovedMultiplier = NormalizeDouble(pinBarShadowApprovedMultiplier, 3);
|
||||||
|
|
||||||
//
|
// //
|
||||||
flagPatternPullbackLength = NormalizeInt(flagPatternPullbackLength, 3);
|
// flagPatternPullbackLength = NormalizeInt(flagPatternPullbackLength, 3);
|
||||||
|
|
||||||
//
|
// //
|
||||||
supportAndResistanceLoopbackLength = NormalizeInt(supportAndResistanceLoopbackLength, 10);
|
// supportAndResistanceLoopbackLength = NormalizeInt(supportAndResistanceLoopbackLength, 10);
|
||||||
supportAndResistanceValidationLength = NormalizeInt(supportAndResistanceValidationLength, 10);
|
// supportAndResistanceValidationLength = NormalizeInt(supportAndResistanceValidationLength, 10);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate ...
|
// Validate ...
|
||||||
@@ -2076,27 +2077,58 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
ENUM_X_DIRECTION iDir;
|
ENUM_X_DIRECTION iDir;
|
||||||
ENUM_X_BAR_PATTERN iPattern;
|
ENUM_X_BAR_PATTERN iPattern;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool has;
|
||||||
|
bool isBullish;
|
||||||
|
bool isBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canDetect;
|
||||||
|
bool canDetectBullish;
|
||||||
|
bool canDetectBearish;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bars Detectors ...
|
// Bars Detectors ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// XPV High Low Detection ...
|
// XPV High Low Detection ...
|
||||||
bool isPV = IsPV(
|
canDetect = config.CanDetect(X_BAR_PATTERN_HIGH) ||
|
||||||
|
config.CanDetect(X_BAR_PATTERN_LOW);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsPV(
|
||||||
bar,
|
bar,
|
||||||
iDir,
|
iDir,
|
||||||
pvValidationLength,
|
config.pvValidationLength,
|
||||||
peakPriceType,
|
config.peakPriceType,
|
||||||
valePriceType //
|
config.valePriceType //
|
||||||
);
|
);
|
||||||
bool isHigh = isPV &&
|
|
||||||
IsXBearish(iDir);
|
//
|
||||||
bool isLow = isPV &&
|
canDetectBullish = config.CanDetect(X_BAR_PATTERN_LOW);
|
||||||
IsXBullish(iDir);
|
canDetectBearish = config.CanDetect(X_BAR_PATTERN_HIGH);
|
||||||
if (isPV)
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
has &&
|
||||||
|
IsXBullish(iDir) &&
|
||||||
|
canDetectBullish;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
has &&
|
||||||
|
IsXBearish(iDir) &&
|
||||||
|
canDetectBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
canDetect = isBullish ||
|
||||||
|
isBearish;
|
||||||
|
if (canDetect)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern =
|
iPattern =
|
||||||
isHigh
|
isBearish
|
||||||
? X_BAR_PATTERN_HIGH
|
? X_BAR_PATTERN_HIGH
|
||||||
: X_BAR_PATTERN_LOW;
|
: X_BAR_PATTERN_LOW;
|
||||||
|
|
||||||
@@ -2106,187 +2138,355 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Momentum ...
|
// Momentum ...
|
||||||
bool isMomentum = IsMomentumBar(
|
iPattern = X_BAR_PATTERN_MOMENTUM;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iDir,
|
if (canDetect)
|
||||||
momentumBarValidationLength,
|
|
||||||
momentumBarApprovedMultiplier //
|
|
||||||
);
|
|
||||||
bool isBullishMomentum = isMomentum &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishMomentum = isMomentum &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isMomentum)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_MOMENTUM;
|
has = IsMomentumBar(
|
||||||
|
bar,
|
||||||
|
iDir,
|
||||||
|
config.momentumBarValidationLength,
|
||||||
|
config.momentumBarApprovedMultiplier //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Engulfed ...
|
// Engulfed ...
|
||||||
bool isEngulfed = IsEngulfedBar(
|
iPattern = X_BAR_PATTERN_ENGULFED;
|
||||||
|
canDetect = config.CanDetect(iPattern);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsEngulfedBar(
|
||||||
bar,
|
bar,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
bool isBullishEngulfed = isEngulfed &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishEngulfed = isEngulfed &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isEngulfed)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iPattern = X_BAR_PATTERN_ENGULFED;
|
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// TrueGap ...
|
// TrueGap ...
|
||||||
bool isTrueGaped = IsTrueGapedBar(
|
iPattern = X_BAR_PATTERN_TRUE_GAPED;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iDir,
|
if (canDetect)
|
||||||
trueGapApprovedStrength //
|
|
||||||
);
|
|
||||||
bool isBullishTrueGaped = isTrueGaped &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishTrueGaped = isTrueGaped &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isTrueGaped)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_TRUE_GAPED;
|
has = IsTrueGapedBar(
|
||||||
|
bar,
|
||||||
|
iDir,
|
||||||
|
config.trueGapApprovedStrength //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Pinned ...
|
// Pinned ...
|
||||||
bool isPinned = IsPinnedBar(
|
iPattern = X_BAR_PATTERN_PINNED;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iDir,
|
if (canDetect)
|
||||||
pinBarShadowApprovedMultiplier,
|
|
||||||
pinBarRangeMultiplier,
|
|
||||||
pinBarForceDirection //
|
|
||||||
);
|
|
||||||
bool isBullishPinned = isPinned &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishPinned = isPinned &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isPinned)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_PINNED;
|
has = IsPinnedBar(
|
||||||
|
bar,
|
||||||
|
iDir,
|
||||||
|
config.pinBarShadowApprovedMultiplier,
|
||||||
|
config.pinBarRangeMultiplier,
|
||||||
|
config.pinBarForceDirection //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Pattern Detectors ...
|
// Pattern Detectors ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Star ...
|
// Star ...
|
||||||
bool isStar = IsStarPattern(
|
iPattern = X_BAR_PATTERN_STAR;
|
||||||
|
canDetect = config.CanDetect(iPattern);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsStarPattern(
|
||||||
bar,
|
bar,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
bool isBullishStar = isStar &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishStar = isStar &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isStar)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iPattern = X_BAR_PATTERN_STAR;
|
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Piercing ...
|
// Piercing ...
|
||||||
bool isPiercing = IsPiercingPattern(
|
iPattern = X_BAR_PATTERN_PIERCING;
|
||||||
|
canDetect = config.CanDetect(iPattern);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsPiercingPattern(
|
||||||
bar,
|
bar,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
bool isBullishPiercing = isPiercing &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishPiercing = isPiercing &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isPiercing)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iPattern = X_BAR_PATTERN_PIERCING;
|
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Rising ...
|
// Rising ...
|
||||||
bool isRising = IsRisingPattern(
|
iPattern = X_BAR_PATTERN_RISING;
|
||||||
|
canDetect = config.CanDetect(iPattern);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsRisingPattern(
|
||||||
bar,
|
bar,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
bool isBullishRising = isRising &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishRising = isRising &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isRising)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iPattern = X_BAR_PATTERN_RISING;
|
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Flag ...
|
// Flag ...
|
||||||
bool isFlag = IsFlagPattern(
|
iPattern = X_BAR_PATTERN_FLAG;
|
||||||
|
canDetect = config.CanDetect(iPattern);
|
||||||
|
if (canDetect)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
has = IsFlagPattern(
|
||||||
bar,
|
bar,
|
||||||
iDir,
|
iDir,
|
||||||
iSwing,
|
iSwing,
|
||||||
flagPatternPullbackLength //
|
config.flagPatternPullbackLength //
|
||||||
);
|
);
|
||||||
bool isBullishFlag = isFlag &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishFlag = isFlag &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isFlag)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
iPattern = X_BAR_PATTERN_FLAG;
|
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
@@ -2296,52 +2496,94 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
//
|
//
|
||||||
analysis.flagSwing = iSwing;
|
analysis.flagSwing = iSwing;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// SignalKey ...
|
// SignalKey ...
|
||||||
bool isSignalKey = IsSignalKeyBarPattern(
|
iPattern = X_BAR_PATTERN_SIGNALKEY;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iDir,
|
if (canDetect)
|
||||||
pinBarShadowApprovedMultiplier,
|
|
||||||
pinBarRangeMultiplier,
|
|
||||||
pinBarForceDirection //
|
|
||||||
);
|
|
||||||
bool isBullishSignalKey = isSignalKey &&
|
|
||||||
IsXBullish(iDir);
|
|
||||||
bool isBearishSignalKey = isSignalKey &&
|
|
||||||
IsXBearish(iDir);
|
|
||||||
if (isSignalKey)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_SIGNALKEY;
|
has = IsSignalKeyBarPattern(
|
||||||
|
bar,
|
||||||
|
iDir,
|
||||||
|
config.pinBarShadowApprovedMultiplier,
|
||||||
|
config.pinBarRangeMultiplier,
|
||||||
|
config.pinBarForceDirection //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
iDir //
|
iDir //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Zone Detectors ...
|
// Zone Detectors ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// OB ...
|
// OB ...
|
||||||
bool isOB = barAnalyser.IsOB(
|
iPattern = X_BAR_PATTERN_OB;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iZone,
|
if (canDetect)
|
||||||
fvgForceType,
|
|
||||||
obForceTwoBar //
|
|
||||||
);
|
|
||||||
bool isBullishOB = isOB &&
|
|
||||||
iZone.IsBullish();
|
|
||||||
bool isBearishOB = isOB &&
|
|
||||||
iZone.IsBearish();
|
|
||||||
if (isOB)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_OB;
|
has = barAnalyser.IsOB(
|
||||||
|
bar,
|
||||||
|
iZone,
|
||||||
|
config.fvgForceType,
|
||||||
|
config.obForceTwoBar //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
@@ -2351,23 +2593,44 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
//
|
//
|
||||||
analysis.ob = iZone;
|
analysis.ob = iZone;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG ...
|
// FVG ...
|
||||||
bool isFVG = barAnalyser.IsFVG(
|
iPattern = X_BAR_PATTERN_FVG;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iZone,
|
if (canDetect)
|
||||||
fvgForceType //
|
|
||||||
);
|
|
||||||
bool isBullishFVG = isFVG &&
|
|
||||||
iZone.IsBullish();
|
|
||||||
bool isBearishFVG = isFVG &&
|
|
||||||
iZone.IsBearish();
|
|
||||||
if (isFVG)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_FVG;
|
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(
|
analysis.AddPattern(
|
||||||
iPattern,
|
iPattern,
|
||||||
@@ -2377,26 +2640,29 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
//
|
//
|
||||||
analysis.fvg = iZone;
|
analysis.fvg = iZone;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Support ...
|
// Support ...
|
||||||
bool isSupport = HasSupport(
|
iPattern = X_BAR_PATTERN_SUPPORT;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iSwing,
|
if (canDetect)
|
||||||
supportAndResistanceValidationLength,
|
|
||||||
supportAndResistanceLoopbackLength //
|
|
||||||
);
|
|
||||||
if (isSupport)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_SUPPORT;
|
has = HasSupport(
|
||||||
|
bar,
|
||||||
|
iSwing,
|
||||||
|
config.supportAndResistanceValidationLength,
|
||||||
|
config.supportAndResistanceLoopbackLength //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
bool has = ToSupportBox(
|
has = ToSupportBox(
|
||||||
iSwing,
|
iSwing,
|
||||||
iZone,
|
iZone,
|
||||||
bar.time,
|
bar.time,
|
||||||
supportAndResistanceValidationLength //
|
config.supportAndResistanceValidationLength //
|
||||||
);
|
);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -2410,26 +2676,29 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
analysis.support = iZone;
|
analysis.support = iZone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Resistance ...
|
// Resistance ...
|
||||||
bool isResistance = HasResistance(
|
iPattern = X_BAR_PATTERN_RESISTANCE;
|
||||||
bar,
|
canDetect = config.CanDetect(iPattern);
|
||||||
iSwing,
|
if (canDetect)
|
||||||
supportAndResistanceValidationLength,
|
|
||||||
supportAndResistanceLoopbackLength //
|
|
||||||
);
|
|
||||||
if (isResistance)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_RESISTANCE;
|
has = HasResistance(
|
||||||
|
bar,
|
||||||
|
iSwing,
|
||||||
|
config.supportAndResistanceValidationLength,
|
||||||
|
config.supportAndResistanceLoopbackLength //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
bool has = ToResistanceBox(
|
has = ToResistanceBox(
|
||||||
iSwing,
|
iSwing,
|
||||||
iZone,
|
iZone,
|
||||||
bar.time,
|
bar.time,
|
||||||
supportAndResistanceValidationLength //
|
config.supportAndResistanceValidationLength //
|
||||||
);
|
);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -2443,6 +2712,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
analysis.resistance = iZone;
|
analysis.resistance = iZone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate Analysis ...
|
// Validate Analysis ...
|
||||||
|
|||||||
@@ -0,0 +1,694 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center MQL5 Library
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name: XCXFIMAEALib ...
|
||||||
|
// Description: XFIMAEA Library ...
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Maintainer:
|
||||||
|
// ------------
|
||||||
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Global Properties ...
|
||||||
|
#property library
|
||||||
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
||||||
|
#property link "https://saherelm.ir"
|
||||||
|
#property version "1.00"
|
||||||
|
#property description "SaherElm XFIMAEA Library"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
// Imports ...
|
||||||
|
#include "../../Classes/x-saherelm.x-cobject.class.mq5"
|
||||||
|
#include "../../Helpers/x-saherelm.xfima.helper.mq5"
|
||||||
|
#include "../../Libraries/x-saherelm.x-pivot.analysis.lib.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Definitions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure Market Structure Detection ...
|
||||||
|
**/
|
||||||
|
struct XFIMAPatternDetectorConfig
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool detectSwingTrend;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool detectStarPattern;
|
||||||
|
bool detectFlagPattern;
|
||||||
|
bool detectRisingPattern;
|
||||||
|
bool detectPiercingPattern;
|
||||||
|
bool detectSignalKeyBarPattern;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool detectPinned;
|
||||||
|
bool detectMomentum;
|
||||||
|
bool detectEngulfed;
|
||||||
|
bool detectTrueGaped;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool analyseFIMAPVPivots;
|
||||||
|
bool analyseFIMAZigZagPivots;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool detectMACrosses;
|
||||||
|
double validMACrossDiffMultiplier;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool detectHKSwitches;
|
||||||
|
bool detectSARSwitches;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configs ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trending ...
|
||||||
|
int trendingNumberOfSwings;
|
||||||
|
int trendingSwingShoulders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance ...
|
||||||
|
int zonesRequiredNumber;
|
||||||
|
int zonesValidationLength;
|
||||||
|
double zonesMinAlloweStrength;
|
||||||
|
int zonesBreakValidationLength;
|
||||||
|
double zonesBarShadowMultiplier;
|
||||||
|
int zonesMaxAllowedLoopbackLength;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TrueGap ...
|
||||||
|
double truwGapApprovedPointMultiplier;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Flag Pattern ...
|
||||||
|
int flagPatternMinimumPullbackBars;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum Bar ...
|
||||||
|
int momentumBarRangeLength;
|
||||||
|
double momentumBarApprovedMultiplier;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pinned Bar ...
|
||||||
|
double pinnedBaarShadowApprovedMultiplier;
|
||||||
|
double pinnedBarMinimumPinBarRangeMultiplier;
|
||||||
|
bool pinnedBarForceDirection;
|
||||||
|
|
||||||
|
//
|
||||||
|
// SignalKey Bar ...
|
||||||
|
double signalKeyBarShadowApprovedMultiplier;
|
||||||
|
double signalKeyBarMinimumPinBarRangeMultiplier;
|
||||||
|
bool signalKeyBarForceDirection;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analyser ...
|
||||||
|
int pvPivotsValidationLength;
|
||||||
|
int numberOfRequiredPivotsForAnalysis;
|
||||||
|
int maxAllowedLoopbackLengthForAnalysis;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
XFIMAPatternDetectorConfig()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup Model ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
detectPinned = false;
|
||||||
|
detectMomentum = false;
|
||||||
|
detectEngulfed = false;
|
||||||
|
detectTrueGaped = false;
|
||||||
|
detectSwingTrend = false;
|
||||||
|
detectStarPattern = false;
|
||||||
|
detectFlagPattern = false;
|
||||||
|
detectRisingPattern = false;
|
||||||
|
analyseFIMAPVPivots = false;
|
||||||
|
detectPiercingPattern = false;
|
||||||
|
analyseFIMAZigZagPivots = false;
|
||||||
|
detectSignalKeyBarPattern = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectMACrosses = false;
|
||||||
|
validMACrossDiffMultiplier = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectHKSwitches = false;
|
||||||
|
detectSARSwitches = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
zonesRequiredNumber = 0;
|
||||||
|
zonesValidationLength = 0;
|
||||||
|
zonesMinAlloweStrength = 0;
|
||||||
|
zonesBarShadowMultiplier = 0;
|
||||||
|
zonesBreakValidationLength = 0;
|
||||||
|
zonesMaxAllowedLoopbackLength = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
trendingNumberOfSwings = 0;
|
||||||
|
trendingSwingShoulders = 0;
|
||||||
|
momentumBarRangeLength = 0;
|
||||||
|
pvPivotsValidationLength = 0;
|
||||||
|
pinnedBarForceDirection = false;
|
||||||
|
momentumBarApprovedMultiplier = 0;
|
||||||
|
signalKeyBarForceDirection = false;
|
||||||
|
truwGapApprovedPointMultiplier = 0;
|
||||||
|
flagPatternMinimumPullbackBars = 0;
|
||||||
|
numberOfRequiredPivotsForAnalysis = 0;
|
||||||
|
pinnedBaarShadowApprovedMultiplier = 0;
|
||||||
|
maxAllowedLoopbackLengthForAnalysis = 0;
|
||||||
|
signalKeyBarShadowApprovedMultiplier = 0;
|
||||||
|
pinnedBarMinimumPinBarRangeMultiplier = 0;
|
||||||
|
signalKeyBarMinimumPinBarRangeMultiplier = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
void Default()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Patterns ...
|
||||||
|
detectStarPattern = false;
|
||||||
|
detectFlagPattern = false;
|
||||||
|
detectRisingPattern = false;
|
||||||
|
detectPiercingPattern = false;
|
||||||
|
detectSignalKeyBarPattern = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bars ...
|
||||||
|
detectPinned = false;
|
||||||
|
detectMomentum = false;
|
||||||
|
detectEngulfed = false;
|
||||||
|
detectTrueGaped = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analysers ...
|
||||||
|
analyseFIMAPVPivots = false;
|
||||||
|
analyseFIMAZigZagPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectMACrosses = true;
|
||||||
|
validMACrossDiffMultiplier = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectHKSwitches = true;
|
||||||
|
detectSARSwitches = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Trending ...
|
||||||
|
trendingNumberOfSwings = 3;
|
||||||
|
trendingSwingShoulders = 11;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance ...
|
||||||
|
zonesRequiredNumber = 25;
|
||||||
|
zonesValidationLength = 21;
|
||||||
|
zonesMinAlloweStrength = 2;
|
||||||
|
zonesBarShadowMultiplier = 4;
|
||||||
|
zonesBreakValidationLength = 3;
|
||||||
|
zonesMaxAllowedLoopbackLength = 200;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TrueGap ...
|
||||||
|
truwGapApprovedPointMultiplier = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Flag Pattern ...
|
||||||
|
flagPatternMinimumPullbackBars = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum Bar ...
|
||||||
|
momentumBarRangeLength = 3;
|
||||||
|
momentumBarApprovedMultiplier = 2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pinned Bar ...
|
||||||
|
pinnedBaarShadowApprovedMultiplier = 3;
|
||||||
|
pinnedBarMinimumPinBarRangeMultiplier = 4;
|
||||||
|
pinnedBarForceDirection = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// SignalKey Bar ...
|
||||||
|
signalKeyBarShadowApprovedMultiplier = 3;
|
||||||
|
signalKeyBarMinimumPinBarRangeMultiplier = 4;
|
||||||
|
signalKeyBarForceDirection = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Length ...
|
||||||
|
pvPivotsValidationLength = 10;
|
||||||
|
numberOfRequiredPivotsForAnalysis = 50;
|
||||||
|
maxAllowedLoopbackLengthForAnalysis = 1500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Full Detection Model ...
|
||||||
|
*/
|
||||||
|
void FullDetect()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Patterns ...
|
||||||
|
detectStarPattern = true;
|
||||||
|
detectFlagPattern = true;
|
||||||
|
detectRisingPattern = true;
|
||||||
|
detectPiercingPattern = true;
|
||||||
|
detectSignalKeyBarPattern = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bars ...
|
||||||
|
detectPinned = true;
|
||||||
|
detectMomentum = true;
|
||||||
|
detectEngulfed = true;
|
||||||
|
detectTrueGaped = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analysers ...
|
||||||
|
analyseFIMAPVPivots = true;
|
||||||
|
analyseFIMAZigZagPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectMACrosses = true;
|
||||||
|
detectHKSwitches = true;
|
||||||
|
detectSARSwitches = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Config, by turn off all detecting flags ...
|
||||||
|
*/
|
||||||
|
void OffDetectors()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Patterns ...
|
||||||
|
detectStarPattern = false;
|
||||||
|
detectFlagPattern = false;
|
||||||
|
detectRisingPattern = false;
|
||||||
|
detectPiercingPattern = false;
|
||||||
|
detectSignalKeyBarPattern = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bars ...
|
||||||
|
detectPinned = false;
|
||||||
|
detectMomentum = false;
|
||||||
|
detectEngulfed = false;
|
||||||
|
detectTrueGaped = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analysers ...
|
||||||
|
analyseFIMAPVPivots = false;
|
||||||
|
analyseFIMAZigZagPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
detectMACrosses = false;
|
||||||
|
detectHKSwitches = false;
|
||||||
|
detectSARSwitches = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XFIMA Base Market Structure ...
|
||||||
|
* AnalyseMarket result ...
|
||||||
|
**/
|
||||||
|
struct XFIMAMarketStructure
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone obs[];
|
||||||
|
XBoxZone fvgs[];
|
||||||
|
XBoxZone supports[];
|
||||||
|
XBoxZone resistances[];
|
||||||
|
|
||||||
|
//
|
||||||
|
XPivot pinBars[];
|
||||||
|
XPivot engulfBars[];
|
||||||
|
XPivot trueGapBars[];
|
||||||
|
XPivot momentumBars[];
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone flagPatterns[];
|
||||||
|
XBoxZone starPatterns[];
|
||||||
|
XBoxZone risingPatterns[];
|
||||||
|
XBoxZone piercingPatterns[];
|
||||||
|
XBoxZone signalKeyBarPatterns[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Analysis ...
|
||||||
|
XPivotAnalysis pvAnalysis;
|
||||||
|
XPivotAnalysis zigzagAnalysis;
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION pinnedDir;
|
||||||
|
ENUM_X_DIRECTION momentumDir;
|
||||||
|
ENUM_X_DIRECTION engulfedDir;
|
||||||
|
ENUM_X_DIRECTION trueGapedDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL flagSwing;
|
||||||
|
ENUM_X_DIRECTION flagPatternDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL trendSwings[];
|
||||||
|
ENUM_X_DIRECTION trendDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION starPatternDir;
|
||||||
|
ENUM_X_DIRECTION risingPatternDir;
|
||||||
|
ENUM_X_DIRECTION piercingPatternDir;
|
||||||
|
ENUM_X_DIRECTION signalKeyBarPatternDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION maCrossDir;
|
||||||
|
XPivot maCrosses[];
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION hkSwitchDir;
|
||||||
|
XPivot hkSwitches[];
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION sarSwitchDir;
|
||||||
|
XPivot sarSwitches[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
XFIMAMarketStructure()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup Model ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
flagSwing.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
pvAnalysis.Clean();
|
||||||
|
zigzagAnalysis.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
trendDir = X_DIRECTION_NONE;
|
||||||
|
pinnedDir = X_DIRECTION_NONE;
|
||||||
|
momentumDir = X_DIRECTION_NONE;
|
||||||
|
engulfedDir = X_DIRECTION_NONE;
|
||||||
|
trueGapedDir = X_DIRECTION_NONE;
|
||||||
|
flagPatternDir = X_DIRECTION_NONE;
|
||||||
|
starPatternDir = X_DIRECTION_NONE;
|
||||||
|
risingPatternDir = X_DIRECTION_NONE;
|
||||||
|
piercingPatternDir = X_DIRECTION_NONE;
|
||||||
|
signalKeyBarPatternDir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
maCrossDir = X_DIRECTION_NONE;
|
||||||
|
SpecifiedClean(maCrosses);
|
||||||
|
|
||||||
|
//
|
||||||
|
hkSwitchDir = X_DIRECTION_NONE;
|
||||||
|
SpecifiedClean(hkSwitches);
|
||||||
|
|
||||||
|
//
|
||||||
|
sarSwitchDir = X_DIRECTION_NONE;
|
||||||
|
SpecifiedClean(sarSwitches);
|
||||||
|
|
||||||
|
//
|
||||||
|
SpecifiedClean(obs);
|
||||||
|
SpecifiedClean(fvgs);
|
||||||
|
SpecifiedClean(pinBars);
|
||||||
|
SpecifiedClean(supports);
|
||||||
|
SpecifiedClean(engulfBars);
|
||||||
|
SpecifiedClean(resistances);
|
||||||
|
SpecifiedClean(trueGapBars);
|
||||||
|
SpecifiedClean(momentumBars);
|
||||||
|
SpecifiedClean(flagPatterns);
|
||||||
|
SpecifiedClean(starPatterns);
|
||||||
|
SpecifiedClean(risingPatterns);
|
||||||
|
SpecifiedClean(piercingPatterns);
|
||||||
|
SpecifiedClean(signalKeyBarPatterns);
|
||||||
|
|
||||||
|
//
|
||||||
|
SpecifiedClean(trendSwings);
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Checker Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure Market Structure Drawer ...
|
||||||
|
**/
|
||||||
|
struct XFIMAMarketStructureDrawerConfig
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool drawOB; // Current Order Block ...
|
||||||
|
bool drawFVG; // Current Fair Value Gap ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool drawSupport; // Detected Supports ...
|
||||||
|
bool drawResistance; // Detected Resistances ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool drawSwingTrend; // Swing Trend ...
|
||||||
|
bool swingTrendRayLeft; // Ray Left Swing Trend ...
|
||||||
|
bool swingTrendRayRight; // Ray Right Swing Trend ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw Current Detected Patterns ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool drawPinned;
|
||||||
|
bool drawMomentum;
|
||||||
|
bool drawEngulfed;
|
||||||
|
bool drawTrueGaped;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool drawStarPattern;
|
||||||
|
bool drawFlagPattern;
|
||||||
|
bool drawRisingPattern;
|
||||||
|
bool drawPiercingPattern;
|
||||||
|
bool drawSignalKeyBarPattern;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw Recently Zones ...
|
||||||
|
bool drawRecentPatterns;
|
||||||
|
bool drawFakeBreakedZone;
|
||||||
|
bool drawRecentlyTestedZones;
|
||||||
|
bool drawRecentlyBreakedZones;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw Analysis Pivots ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// XPV ...
|
||||||
|
bool drawFIMAPVPivotsAnalysis;
|
||||||
|
bool drawFIMAPVPivotsAnalysisZones;
|
||||||
|
bool drawFIMAPVPivotsAnalysisTrends;
|
||||||
|
bool drawFIMAPVPivotsAnalysisPivots;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XSAR ...
|
||||||
|
bool drawFIMASARPivotsAnalysis;
|
||||||
|
bool drawFIMASARPivotsAnalysisZones;
|
||||||
|
bool drawFIMASARPivotsAnalysisTrends;
|
||||||
|
bool drawFIMASARPivotsAnalysisPivots;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XZIGZAG ...
|
||||||
|
bool drawFIMAZigZagPivotsAnalysis;
|
||||||
|
bool drawFIMAZigZagPivotsAnalysisZones;
|
||||||
|
bool drawFIMAZigZagPivotsAnalysisTrends;
|
||||||
|
bool drawFIMAZigZagPivotsAnalysisPivots;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
XFIMAMarketStructureDrawerConfig()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup Model ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
drawOB = false;
|
||||||
|
drawFVG = false;
|
||||||
|
drawPinned = false;
|
||||||
|
drawMomentum = false;
|
||||||
|
drawSupport = false;
|
||||||
|
drawEngulfed = false;
|
||||||
|
drawTrueGaped = false;
|
||||||
|
drawResistance = false;
|
||||||
|
drawSwingTrend = false;
|
||||||
|
drawStarPattern = false;
|
||||||
|
drawFlagPattern = false;
|
||||||
|
swingTrendRayLeft = false;
|
||||||
|
drawRisingPattern = false;
|
||||||
|
swingTrendRayRight = false;
|
||||||
|
drawPiercingPattern = false;
|
||||||
|
drawSignalKeyBarPattern = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawRecentPatterns = false;
|
||||||
|
drawFakeBreakedZone = false;
|
||||||
|
drawRecentlyTestedZones = false;
|
||||||
|
drawRecentlyBreakedZones = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAPVPivotsAnalysis = false;
|
||||||
|
drawFIMAPVPivotsAnalysisZones = false;
|
||||||
|
drawFIMAPVPivotsAnalysisTrends = false;
|
||||||
|
drawFIMAPVPivotsAnalysisPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMASARPivotsAnalysis = false;
|
||||||
|
drawFIMASARPivotsAnalysisZones = false;
|
||||||
|
drawFIMASARPivotsAnalysisTrends = false;
|
||||||
|
drawFIMASARPivotsAnalysisPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAZigZagPivotsAnalysis = false;
|
||||||
|
drawFIMAZigZagPivotsAnalysisZones = false;
|
||||||
|
drawFIMAZigZagPivotsAnalysisTrends = false;
|
||||||
|
drawFIMAZigZagPivotsAnalysisPivots = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
void Default()
|
||||||
|
{
|
||||||
|
drawOB = true;
|
||||||
|
drawFVG = true;
|
||||||
|
drawPinned = true;
|
||||||
|
drawMomentum = true;
|
||||||
|
drawSupport = true;
|
||||||
|
drawEngulfed = true;
|
||||||
|
drawTrueGaped = true;
|
||||||
|
drawResistance = true;
|
||||||
|
drawSwingTrend = true;
|
||||||
|
drawStarPattern = true;
|
||||||
|
drawFlagPattern = true;
|
||||||
|
drawRisingPattern = true;
|
||||||
|
drawPiercingPattern = true;
|
||||||
|
swingTrendRayLeft = false;
|
||||||
|
swingTrendRayRight = true;
|
||||||
|
drawSignalKeyBarPattern = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawRecentPatterns = true;
|
||||||
|
drawFakeBreakedZone = true;
|
||||||
|
drawRecentlyTestedZones = true;
|
||||||
|
drawRecentlyBreakedZones = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAPVPivotsAnalysis = true;
|
||||||
|
drawFIMAPVPivotsAnalysisZones = true;
|
||||||
|
drawFIMAPVPivotsAnalysisTrends = true;
|
||||||
|
drawFIMAPVPivotsAnalysisPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMASARPivotsAnalysis = true;
|
||||||
|
drawFIMASARPivotsAnalysisZones = true;
|
||||||
|
drawFIMASARPivotsAnalysisTrends = true;
|
||||||
|
drawFIMASARPivotsAnalysisPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAZigZagPivotsAnalysis = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisZones = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisTrends = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisPivots = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure for Full Drawing ...
|
||||||
|
*/
|
||||||
|
void FullDraw()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Default();
|
||||||
|
|
||||||
|
//
|
||||||
|
drawOB = true;
|
||||||
|
drawFVG = true;
|
||||||
|
drawPinned = true;
|
||||||
|
drawMomentum = true;
|
||||||
|
drawSupport = true;
|
||||||
|
drawEngulfed = true;
|
||||||
|
drawTrueGaped = true;
|
||||||
|
drawResistance = true;
|
||||||
|
drawSwingTrend = true;
|
||||||
|
drawStarPattern = true;
|
||||||
|
drawFlagPattern = true;
|
||||||
|
drawRisingPattern = true;
|
||||||
|
swingTrendRayLeft = true;
|
||||||
|
swingTrendRayRight = true;
|
||||||
|
drawPiercingPattern = true;
|
||||||
|
drawSignalKeyBarPattern = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawRecentPatterns = true;
|
||||||
|
drawFakeBreakedZone = true;
|
||||||
|
drawRecentlyTestedZones = true;
|
||||||
|
drawRecentlyBreakedZones = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAPVPivotsAnalysis = true;
|
||||||
|
drawFIMAPVPivotsAnalysisZones = true;
|
||||||
|
drawFIMAPVPivotsAnalysisTrends = true;
|
||||||
|
drawFIMAPVPivotsAnalysisPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMASARPivotsAnalysis = true;
|
||||||
|
drawFIMASARPivotsAnalysisZones = true;
|
||||||
|
drawFIMASARPivotsAnalysisTrends = true;
|
||||||
|
drawFIMASARPivotsAnalysisPivots = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
drawFIMAZigZagPivotsAnalysis = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisZones = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisTrends = true;
|
||||||
|
drawFIMAZigZagPivotsAnalysisPivots = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -153,9 +153,9 @@ XCBackTesterEA *eaExpert; // EA Expert ...
|
|||||||
XCXFIMAStrategy1Signaller *fima1Signaller; // XFIMA1 Signaller ...
|
XCXFIMAStrategy1Signaller *fima1Signaller; // XFIMA1 Signaller ...
|
||||||
|
|
||||||
//
|
//
|
||||||
XFIMAMarketStructure marketStructure; // POI Analysis Result ...
|
// XFIMAMarketStructure marketStructure; // POI Analysis Result ...
|
||||||
XFIMAPatternDetectorConfig detectorConfig; // POI Detector Config ...
|
// XFIMAPatternDetectorConfig detectorConfig; // POI Detector Config ...
|
||||||
XFIMAMarketStructureDrawerConfig marketStructureDrawerConfig; // POI Drawer Config ...
|
// XFIMAMarketStructureDrawerConfig marketStructureDrawerConfig; // POI Drawer Config ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Drawer and eaDraws ...
|
// Drawer and eaDraws ...
|
||||||
@@ -426,9 +426,9 @@ int OnInit()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Configure XFIMA POI Detector / Drawer ...
|
// Configure XFIMA POI Detector / Drawer ...
|
||||||
detectorConfig.Default();
|
// detectorConfig.Default();
|
||||||
detectorConfig.FullDetect();
|
// detectorConfig.FullDetect();
|
||||||
marketStructureDrawerConfig.FullDraw();
|
// marketStructureDrawerConfig.FullDraw();
|
||||||
|
|
||||||
//
|
//
|
||||||
Print(ShortName, ": Initialized Successfully ...");
|
Print(ShortName, ": Initialized Successfully ...");
|
||||||
|
|||||||
@@ -908,6 +908,14 @@ class XCXFIMAHelper : public XCBaseHelper
|
|||||||
barIndex = NormalizeInt(barIndex, 0);
|
barIndex = NormalizeInt(barIndex, 0);
|
||||||
validCrossDiffMultiplier = NormalizeDouble(validCrossDiffMultiplier, 0);
|
validCrossDiffMultiplier = NormalizeDouble(validCrossDiffMultiplier, 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
double fast[];
|
double fast[];
|
||||||
int fastCount = CopyMAFast(barIndex, 2, fast);
|
int fastCount = CopyMAFast(barIndex, 2, fast);
|
||||||
@@ -1107,7 +1115,7 @@ class XCXFIMAHelper : public XCBaseHelper
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Validate ...
|
// Validate ...
|
||||||
result = mHandler != INVALID_HANDLE;
|
result = IsValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
@@ -1166,6 +1174,262 @@ class XCXFIMAHelper : public XCBaseHelper
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Bar's Price in Hot Place or Not ...
|
||||||
|
*
|
||||||
|
* @param dir: reference for holds cross Direction ...
|
||||||
|
* @param barIndex: int, Specified Bar Index ...
|
||||||
|
* @param overMaxPriceType: ENUM_X_PRICE, which price of Specified bar to Check ...
|
||||||
|
* @param underMinPriceType: ENUM_X_PRICE, which price of Specified bar to Check ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsInHotPlace(
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int barIndex = 0,
|
||||||
|
ENUM_X_PRICE overMaxPriceType = X_PRICE_NONE,
|
||||||
|
ENUM_X_PRICE underMinPriceType = X_PRICE_NONE //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
if (!IsXValid(overMaxPriceType))
|
||||||
|
{
|
||||||
|
overMaxPriceType = X_PRICE_LOW;
|
||||||
|
}
|
||||||
|
if (!IsXValid(underMinPriceType))
|
||||||
|
{
|
||||||
|
underMinPriceType = X_PRICE_HIGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialize Bar ...
|
||||||
|
XOHCL bar;
|
||||||
|
result = bar.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
barIndex);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double overMaxPrice = bar.GetPrice(overMaxPriceType);
|
||||||
|
double underMinPrice = bar.GetPrice(underMinPriceType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading Boundary Value ...
|
||||||
|
double min;
|
||||||
|
double max;
|
||||||
|
result = GetBoundaryValues(
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bar.Clean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish = underMinPrice < min;
|
||||||
|
bool isBearish = overMaxPrice > max;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = (isBullish && !isBearish) ||
|
||||||
|
(isBearish && !isBullish);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir =
|
||||||
|
isBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup Resources ...
|
||||||
|
bar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool (
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int barIndex = 0 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double fast = GetMAFast(barIndex);
|
||||||
|
double slow = GetMASlow(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
double maBondUpper = GetMABondUpper(barIndex);
|
||||||
|
double maBondLower = GetMABondLower(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
double pbBondUpper = GetPBBondUpper(barIndex);
|
||||||
|
double pbBondLower = GetPBBondLower(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
double hkBondUpper = GetHKBondUpper(barIndex);
|
||||||
|
double hkBondLower = GetHKBondLower(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
NotEmptyZero(fast) &&
|
||||||
|
NotEmptyZero(slow) &&
|
||||||
|
NotEmptyZero(maBondUpper) &&
|
||||||
|
NotEmptyZero(maBondLower) &&
|
||||||
|
NotEmptyZero(hkBondUpper) &&
|
||||||
|
NotEmptyZero(hkBondLower) &&
|
||||||
|
NotEmptyZero(pbBondUpper) &&
|
||||||
|
NotEmptyZero(pbBondLower);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isBullish =
|
||||||
|
fast > hkBondLower &&
|
||||||
|
slow > hkBondLower &&
|
||||||
|
maBondUpper > hkBondLower &&
|
||||||
|
maBondLower > hkBondLower &&
|
||||||
|
pbBondUpper > hkBondLower &&
|
||||||
|
pbBondLower > hkBondLower;
|
||||||
|
bool isBearish =
|
||||||
|
fast < hkBondUpper &&
|
||||||
|
slow < hkBondUpper &&
|
||||||
|
maBondUpper < hkBondUpper &&
|
||||||
|
maBondLower < hkBondUpper &&
|
||||||
|
pbBondUpper < hkBondUpper &&
|
||||||
|
pbBondLower < hkBondUpper;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = (isBullish && !isBearish) ||
|
||||||
|
(isBearish && !isBullish);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir =
|
||||||
|
isBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HasBoundarySwitch(
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int barIndex = 0 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
barIndex = NormalizeBarIndex(barIndex);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = HasBoundaryTrend(
|
||||||
|
dir,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
bool isBullish = IsXBullish(dir);
|
||||||
|
bool isBearish = IsXBearish(dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = HasBoundaryTrend(
|
||||||
|
dir,
|
||||||
|
barIndex + 1 //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
bool isPBullish = IsXBullish(dir);
|
||||||
|
bool isPBearish = IsXBearish(dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isSwitchedToBullish =
|
||||||
|
isBullish && !isPBullish;
|
||||||
|
bool isSwitchedToBearish =
|
||||||
|
isBearish && !isPBearish;
|
||||||
|
result = isSwitchedToBullish ||
|
||||||
|
isSwitchedToBearish;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir = isSwitchedToBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check Peak Happens over Last ...
|
* Check Peak Happens over Last ...
|
||||||
*
|
*
|
||||||
@@ -3101,6 +3365,9 @@ class XCXFIMAHelper : public XCBaseHelper
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detectors ...
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect Zones (Support / Resistance) based on XFIMA Validators ...
|
* Detect Zones (Support / Resistance) based on XFIMA Validators ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2303,10 +2303,286 @@ struct XPatternAnalysis
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct XPatternAnalysisConfig
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// PV ...
|
||||||
|
int pvValidationLength;
|
||||||
|
ENUM_X_PRICE peakPriceType;
|
||||||
|
ENUM_X_PRICE valePriceType;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum ...
|
||||||
|
int momentumBarValidationLength;
|
||||||
|
double momentumBarApprovedMultiplier;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TrueGap ...
|
||||||
|
double trueGapApprovedStrength;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pin ...
|
||||||
|
double pinBarShadowApprovedMultiplier;
|
||||||
|
double pinBarRangeMultiplier;
|
||||||
|
bool pinBarForceDirection;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Flag ...
|
||||||
|
int flagPatternPullbackLength;
|
||||||
|
|
||||||
|
//
|
||||||
|
// FVG ...
|
||||||
|
bool fvgForceType;
|
||||||
|
|
||||||
|
//
|
||||||
|
// OB ...
|
||||||
|
bool obForceTwoBar;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance ...
|
||||||
|
int supportAndResistanceValidationLength;
|
||||||
|
int supportAndResistanceLoopbackLength;
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION allowedDirs[];
|
||||||
|
ENUM_X_BAR_PATTERN allowedPatterns[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
XPatternAnalysisConfig()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// PV ...
|
||||||
|
pvValidationLength = 0;
|
||||||
|
peakPriceType = X_PRICE_NONE;
|
||||||
|
valePriceType = X_PRICE_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum ...
|
||||||
|
momentumBarValidationLength = 0;
|
||||||
|
momentumBarApprovedMultiplier = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TrueGap ...
|
||||||
|
trueGapApprovedStrength = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pin ...
|
||||||
|
pinBarShadowApprovedMultiplier = 0;
|
||||||
|
pinBarRangeMultiplier = 0;
|
||||||
|
pinBarForceDirection = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Flag ...
|
||||||
|
flagPatternPullbackLength = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// FVG ...
|
||||||
|
fvgForceType = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// OB ...
|
||||||
|
obForceTwoBar = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance ...
|
||||||
|
supportAndResistanceValidationLength = 0;
|
||||||
|
supportAndResistanceLoopbackLength = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
XClean(allowedDirs);
|
||||||
|
XClean(allowedPatterns);
|
||||||
|
|
||||||
|
//
|
||||||
|
ZeroMemory(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Configurations ...
|
||||||
|
*/
|
||||||
|
void Default()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// PV ...
|
||||||
|
pvValidationLength = 7;
|
||||||
|
peakPriceType = X_PRICE_HIGH;
|
||||||
|
valePriceType = X_PRICE_LOW;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum ...
|
||||||
|
momentumBarValidationLength = 3;
|
||||||
|
momentumBarApprovedMultiplier = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TrueGap ...
|
||||||
|
trueGapApprovedStrength = 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pin ...
|
||||||
|
pinBarShadowApprovedMultiplier = 3;
|
||||||
|
pinBarRangeMultiplier = 4;
|
||||||
|
pinBarForceDirection = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Flag ...
|
||||||
|
flagPatternPullbackLength = 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
// FVG ...
|
||||||
|
fvgForceType = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// OB ...
|
||||||
|
obForceTwoBar = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Support and Resistance ...
|
||||||
|
supportAndResistanceValidationLength = 21;
|
||||||
|
supportAndResistanceLoopbackLength = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Permissions ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Patterns Detection is Allowed or not ...
|
||||||
|
*
|
||||||
|
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern to Detect ...
|
||||||
|
* @param patternDir: ENUM_X_DIRECTION, which Pattern Direction to Detect ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CanDetect(
|
||||||
|
ENUM_X_BAR_PATTERN pattern,
|
||||||
|
ENUM_X_DIRECTION patternDir = X_DIRECTION_NONE //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Pattern and
|
||||||
|
// Check Pattern Exists ...
|
||||||
|
result = IsXValid(pattern) &&
|
||||||
|
HasChild(allowedPatterns) &&
|
||||||
|
Contains(pattern, allowedPatterns);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now Check Direction ...
|
||||||
|
int index = FindIndex(pattern, allowedPatterns);
|
||||||
|
result = IsValidIndex(index) &&
|
||||||
|
HasChild(allowedDirs) &&
|
||||||
|
(!HasDirection(patternDir)
|
||||||
|
? !HasDirection(allowedDirs[index])
|
||||||
|
: (!HasDirection(allowedDirs[index]) ||
|
||||||
|
patternDir == allowedDirs[index]));
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Collection Manipulations ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Full Detect Patterns ...
|
||||||
|
*
|
||||||
|
* @param forDir: ENUM_X_DIRECTION, which Pattern Direction to Detect ...
|
||||||
|
*/
|
||||||
|
void FullPattern(
|
||||||
|
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int count = GetAllBarPatters(allowedPatterns);
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
forDir,
|
||||||
|
allowedDirs //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Specified Pattern to Detecte ...
|
||||||
|
*
|
||||||
|
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern to Detect ...
|
||||||
|
* @param patternDir: ENUM_X_DIRECTION, which Pattern Direction to Detect ...
|
||||||
|
*/
|
||||||
|
void AddPattern(
|
||||||
|
ENUM_X_BAR_PATTERN pattern,
|
||||||
|
ENUM_X_DIRECTION patternDir = X_DIRECTION_NONE //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool has = IsXValid(pattern);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
pattern,
|
||||||
|
allowedPatterns //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
patternDir,
|
||||||
|
allowedDirs //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
struct XPatternAnalysisDrawConfig
|
struct XPatternAnalysisDrawConfig
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int zonesWidth;
|
||||||
|
bool fillZones;
|
||||||
|
int arrowsWidth;
|
||||||
|
bool ignoreZonesAt;
|
||||||
|
int arrowsThreshold;
|
||||||
|
ENUM_LINE_STYLE zonesStyle;
|
||||||
|
|
||||||
|
//
|
||||||
|
int bullishArrow;
|
||||||
|
int bearishArrow;
|
||||||
|
|
||||||
|
//
|
||||||
|
color bullishColor;
|
||||||
|
color bearishColor;
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_PRICE arrowValePriceType;
|
||||||
|
ENUM_X_PRICE arrowPeakPriceType;
|
||||||
|
|
||||||
|
//
|
||||||
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
||||||
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
||||||
ENUM_X_BAR_PATTERN allowedDrawPivots[]; // Allowed Draw Pattern Pivots
|
ENUM_X_BAR_PATTERN allowedDrawPivots[]; // Allowed Draw Pattern Pivots
|
||||||
@@ -2326,6 +2602,20 @@ struct XPatternAnalysisDrawConfig
|
|||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
arrowsWidth = 0;
|
||||||
|
zonesWidth = 0;
|
||||||
|
bullishArrow = 0;
|
||||||
|
bearishArrow = 0;
|
||||||
|
fillZones = false;
|
||||||
|
arrowsThreshold = 0;
|
||||||
|
ignoreZonesAt = false;
|
||||||
|
bullishColor = CLR_NONE;
|
||||||
|
bearishColor = CLR_NONE;
|
||||||
|
zonesStyle = STYLE_SOLID;
|
||||||
|
arrowValePriceType = X_PRICE_NONE;
|
||||||
|
arrowPeakPriceType = X_PRICE_NONE;
|
||||||
|
|
||||||
//
|
//
|
||||||
XClean(allowedDraws);
|
XClean(allowedDraws);
|
||||||
XClean(allowedDrawZones);
|
XClean(allowedDrawZones);
|
||||||
@@ -2337,6 +2627,20 @@ struct XPatternAnalysisDrawConfig
|
|||||||
*/
|
*/
|
||||||
void Default()
|
void Default()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
zonesWidth = 1;
|
||||||
|
arrowsWidth = 1;
|
||||||
|
arrowsThreshold = 2;
|
||||||
|
bullishArrow = 159;
|
||||||
|
bearishArrow = 159;
|
||||||
|
fillZones = false;
|
||||||
|
ignoreZonesAt = true;
|
||||||
|
bullishColor = clrAqua;
|
||||||
|
zonesStyle = STYLE_SOLID;
|
||||||
|
bearishColor = clrMagenta;
|
||||||
|
arrowValePriceType = X_PRICE_LOW;
|
||||||
|
arrowPeakPriceType = X_PRICE_HIGH;
|
||||||
|
|
||||||
//
|
//
|
||||||
FullDraw();
|
FullDraw();
|
||||||
|
|
||||||
|
|||||||
@@ -3995,7 +3995,6 @@ bool ToBox(
|
|||||||
iLower = bar.FindLowest(idx, mLength, valePriceType);
|
iLower = bar.FindLowest(idx, mLength, valePriceType);
|
||||||
iUpper = bar.FindHighest(idx, mLength, peakPriceType);
|
iUpper = bar.FindHighest(idx, mLength, peakPriceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -4019,7 +4018,7 @@ bool ToBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
iUpper = valePrice;
|
iUpper = peakPrice;
|
||||||
iLower = valePrice;
|
iLower = valePrice;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4044,14 +4043,8 @@ bool ToBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
iUpper =
|
iUpper = peakPrice;
|
||||||
isBullish
|
iLower = valePrice;
|
||||||
? peakPrice
|
|
||||||
: valePrice;
|
|
||||||
iLower =
|
|
||||||
isBullish
|
|
||||||
? peakPrice
|
|
||||||
: valePrice;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -4075,14 +4068,10 @@ bool ToBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
iUpper =
|
int idx = -1;
|
||||||
isBullish
|
int mLength = 3;
|
||||||
? peakPrice
|
iUpper = bar.FindHighest(idx, mLength, peakPriceType);
|
||||||
: valePrice;
|
iLower = bar.FindLowest(idx, mLength, valePriceType);
|
||||||
iLower =
|
|
||||||
isBullish
|
|
||||||
? peakPrice
|
|
||||||
: valePrice;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -4106,14 +4095,13 @@ bool ToBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
iUpper =
|
has = bar.GetPreviousBar(tmpBar);
|
||||||
isBullish
|
if (has)
|
||||||
? peakPrice
|
{
|
||||||
: valePrice;
|
//
|
||||||
iLower =
|
iUpper = MathMax(peakPrice, tmpBar.GetPrice(peakPriceType));
|
||||||
isBullish
|
iLower = MathMin(valePrice, tmpBar.GetPrice(valePriceType));
|
||||||
? peakPrice
|
}
|
||||||
: valePrice;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -37,82 +37,6 @@ struct XFIMAPatternDetectorConfig
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
//
|
|
||||||
bool detectSwingTrend;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool detectStarPattern;
|
|
||||||
bool detectFlagPattern;
|
|
||||||
bool detectRisingPattern;
|
|
||||||
bool detectPiercingPattern;
|
|
||||||
bool detectSignalKeyBarPattern;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool detectPinned;
|
|
||||||
bool detectMomentum;
|
|
||||||
bool detectEngulfed;
|
|
||||||
bool detectTrueGaped;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool analyseFIMAPVPivots;
|
|
||||||
bool analyseFIMAZigZagPivots;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool detectMACrosses;
|
|
||||||
double validMACrossDiffMultiplier;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool detectHKSwitches;
|
|
||||||
bool detectSARSwitches;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Configs ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trending ...
|
|
||||||
int trendingNumberOfSwings;
|
|
||||||
int trendingSwingShoulders;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support and Resistance ...
|
|
||||||
int zonesRequiredNumber;
|
|
||||||
int zonesValidationLength;
|
|
||||||
double zonesMinAlloweStrength;
|
|
||||||
int zonesBreakValidationLength;
|
|
||||||
double zonesBarShadowMultiplier;
|
|
||||||
int zonesMaxAllowedLoopbackLength;
|
|
||||||
|
|
||||||
//
|
|
||||||
// TrueGap ...
|
|
||||||
double truwGapApprovedPointMultiplier;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Flag Pattern ...
|
|
||||||
int flagPatternMinimumPullbackBars;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Momentum Bar ...
|
|
||||||
int momentumBarRangeLength;
|
|
||||||
double momentumBarApprovedMultiplier;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Pinned Bar ...
|
|
||||||
double pinnedBaarShadowApprovedMultiplier;
|
|
||||||
double pinnedBarMinimumPinBarRangeMultiplier;
|
|
||||||
bool pinnedBarForceDirection;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SignalKey Bar ...
|
|
||||||
double signalKeyBarShadowApprovedMultiplier;
|
|
||||||
double signalKeyBarMinimumPinBarRangeMultiplier;
|
|
||||||
bool signalKeyBarForceDirection;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Analyser ...
|
|
||||||
int pvPivotsValidationLength;
|
|
||||||
int numberOfRequiredPivotsForAnalysis;
|
|
||||||
int maxAllowedLoopbackLengthForAnalysis;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XFIMAPatternDetectorConfig()
|
XFIMAPatternDetectorConfig()
|
||||||
@@ -128,54 +52,6 @@ struct XFIMAPatternDetectorConfig
|
|||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
detectPinned = false;
|
|
||||||
detectMomentum = false;
|
|
||||||
detectEngulfed = false;
|
|
||||||
detectTrueGaped = false;
|
|
||||||
detectSwingTrend = false;
|
|
||||||
detectStarPattern = false;
|
|
||||||
detectFlagPattern = false;
|
|
||||||
detectRisingPattern = false;
|
|
||||||
analyseFIMAPVPivots = false;
|
|
||||||
detectPiercingPattern = false;
|
|
||||||
analyseFIMAZigZagPivots = false;
|
|
||||||
detectSignalKeyBarPattern = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectMACrosses = false;
|
|
||||||
validMACrossDiffMultiplier = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectHKSwitches = false;
|
|
||||||
detectSARSwitches = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
zonesRequiredNumber = 0;
|
|
||||||
zonesValidationLength = 0;
|
|
||||||
zonesMinAlloweStrength = 0;
|
|
||||||
zonesBarShadowMultiplier = 0;
|
|
||||||
zonesBreakValidationLength = 0;
|
|
||||||
zonesMaxAllowedLoopbackLength = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
trendingNumberOfSwings = 0;
|
|
||||||
trendingSwingShoulders = 0;
|
|
||||||
momentumBarRangeLength = 0;
|
|
||||||
pvPivotsValidationLength = 0;
|
|
||||||
pinnedBarForceDirection = false;
|
|
||||||
momentumBarApprovedMultiplier = 0;
|
|
||||||
signalKeyBarForceDirection = false;
|
|
||||||
truwGapApprovedPointMultiplier = 0;
|
|
||||||
flagPatternMinimumPullbackBars = 0;
|
|
||||||
numberOfRequiredPivotsForAnalysis = 0;
|
|
||||||
pinnedBaarShadowApprovedMultiplier = 0;
|
|
||||||
maxAllowedLoopbackLengthForAnalysis = 0;
|
|
||||||
signalKeyBarShadowApprovedMultiplier = 0;
|
|
||||||
pinnedBarMinimumPinBarRangeMultiplier = 0;
|
|
||||||
signalKeyBarMinimumPinBarRangeMultiplier = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
ZeroMemory(this);
|
ZeroMemory(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,78 +60,6 @@ struct XFIMAPatternDetectorConfig
|
|||||||
*/
|
*/
|
||||||
void Default()
|
void Default()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// Patterns ...
|
|
||||||
detectStarPattern = false;
|
|
||||||
detectFlagPattern = false;
|
|
||||||
detectRisingPattern = false;
|
|
||||||
detectPiercingPattern = false;
|
|
||||||
detectSignalKeyBarPattern = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bars ...
|
|
||||||
detectPinned = false;
|
|
||||||
detectMomentum = false;
|
|
||||||
detectEngulfed = false;
|
|
||||||
detectTrueGaped = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Analysers ...
|
|
||||||
analyseFIMAPVPivots = false;
|
|
||||||
analyseFIMAZigZagPivots = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectMACrosses = true;
|
|
||||||
validMACrossDiffMultiplier = 1;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectHKSwitches = true;
|
|
||||||
detectSARSwitches = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trending ...
|
|
||||||
trendingNumberOfSwings = 3;
|
|
||||||
trendingSwingShoulders = 11;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Support and Resistance ...
|
|
||||||
zonesRequiredNumber = 25;
|
|
||||||
zonesValidationLength = 21;
|
|
||||||
zonesMinAlloweStrength = 2;
|
|
||||||
zonesBarShadowMultiplier = 4;
|
|
||||||
zonesBreakValidationLength = 3;
|
|
||||||
zonesMaxAllowedLoopbackLength = 200;
|
|
||||||
|
|
||||||
//
|
|
||||||
// TrueGap ...
|
|
||||||
truwGapApprovedPointMultiplier = 1;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Flag Pattern ...
|
|
||||||
flagPatternMinimumPullbackBars = 3;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Momentum Bar ...
|
|
||||||
momentumBarRangeLength = 3;
|
|
||||||
momentumBarApprovedMultiplier = 2;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Pinned Bar ...
|
|
||||||
pinnedBaarShadowApprovedMultiplier = 3;
|
|
||||||
pinnedBarMinimumPinBarRangeMultiplier = 4;
|
|
||||||
pinnedBarForceDirection = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// SignalKey Bar ...
|
|
||||||
signalKeyBarShadowApprovedMultiplier = 3;
|
|
||||||
signalKeyBarMinimumPinBarRangeMultiplier = 4;
|
|
||||||
signalKeyBarForceDirection = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Length ...
|
|
||||||
pvPivotsValidationLength = 10;
|
|
||||||
numberOfRequiredPivotsForAnalysis = 50;
|
|
||||||
maxAllowedLoopbackLengthForAnalysis = 1500;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -263,30 +67,6 @@ struct XFIMAPatternDetectorConfig
|
|||||||
*/
|
*/
|
||||||
void FullDetect()
|
void FullDetect()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// Patterns ...
|
|
||||||
detectStarPattern = true;
|
|
||||||
detectFlagPattern = true;
|
|
||||||
detectRisingPattern = true;
|
|
||||||
detectPiercingPattern = true;
|
|
||||||
detectSignalKeyBarPattern = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bars ...
|
|
||||||
detectPinned = true;
|
|
||||||
detectMomentum = true;
|
|
||||||
detectEngulfed = true;
|
|
||||||
detectTrueGaped = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Analysers ...
|
|
||||||
analyseFIMAPVPivots = true;
|
|
||||||
analyseFIMAZigZagPivots = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectMACrosses = true;
|
|
||||||
detectHKSwitches = true;
|
|
||||||
detectSARSwitches = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -294,30 +74,6 @@ struct XFIMAPatternDetectorConfig
|
|||||||
*/
|
*/
|
||||||
void OffDetectors()
|
void OffDetectors()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
// Patterns ...
|
|
||||||
detectStarPattern = false;
|
|
||||||
detectFlagPattern = false;
|
|
||||||
detectRisingPattern = false;
|
|
||||||
detectPiercingPattern = false;
|
|
||||||
detectSignalKeyBarPattern = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bars ...
|
|
||||||
detectPinned = false;
|
|
||||||
detectMomentum = false;
|
|
||||||
detectEngulfed = false;
|
|
||||||
detectTrueGaped = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Analysers ...
|
|
||||||
analyseFIMAPVPivots = false;
|
|
||||||
analyseFIMAZigZagPivots = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
detectMACrosses = false;
|
|
||||||
detectHKSwitches = false;
|
|
||||||
detectSARSwitches = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -332,62 +88,6 @@ struct XFIMAMarketStructure
|
|||||||
//
|
//
|
||||||
XOHCL bar;
|
XOHCL bar;
|
||||||
|
|
||||||
//
|
|
||||||
XBoxZone obs[];
|
|
||||||
XBoxZone fvgs[];
|
|
||||||
XBoxZone supports[];
|
|
||||||
XBoxZone resistances[];
|
|
||||||
|
|
||||||
//
|
|
||||||
XPivot pinBars[];
|
|
||||||
XPivot engulfBars[];
|
|
||||||
XPivot trueGapBars[];
|
|
||||||
XPivot momentumBars[];
|
|
||||||
|
|
||||||
//
|
|
||||||
XBoxZone flagPatterns[];
|
|
||||||
XBoxZone starPatterns[];
|
|
||||||
XBoxZone risingPatterns[];
|
|
||||||
XBoxZone piercingPatterns[];
|
|
||||||
XBoxZone signalKeyBarPatterns[];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Analysis ...
|
|
||||||
XPivotAnalysis pvAnalysis;
|
|
||||||
XPivotAnalysis zigzagAnalysis;
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_DIRECTION pinnedDir;
|
|
||||||
ENUM_X_DIRECTION momentumDir;
|
|
||||||
ENUM_X_DIRECTION engulfedDir;
|
|
||||||
ENUM_X_DIRECTION trueGapedDir;
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL flagSwing;
|
|
||||||
ENUM_X_DIRECTION flagPatternDir;
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL trendSwings[];
|
|
||||||
ENUM_X_DIRECTION trendDir;
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_DIRECTION starPatternDir;
|
|
||||||
ENUM_X_DIRECTION risingPatternDir;
|
|
||||||
ENUM_X_DIRECTION piercingPatternDir;
|
|
||||||
ENUM_X_DIRECTION signalKeyBarPatternDir;
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_DIRECTION maCrossDir;
|
|
||||||
XPivot maCrosses[];
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_DIRECTION hkSwitchDir;
|
|
||||||
XPivot hkSwitches[];
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_DIRECTION sarSwitchDir;
|
|
||||||
XPivot sarSwitches[];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XFIMAMarketStructure()
|
XFIMAMarketStructure()
|
||||||
@@ -403,55 +103,6 @@ struct XFIMAMarketStructure
|
|||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
bar.Clean();
|
|
||||||
flagSwing.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
pvAnalysis.Clean();
|
|
||||||
zigzagAnalysis.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
trendDir = X_DIRECTION_NONE;
|
|
||||||
pinnedDir = X_DIRECTION_NONE;
|
|
||||||
momentumDir = X_DIRECTION_NONE;
|
|
||||||
engulfedDir = X_DIRECTION_NONE;
|
|
||||||
trueGapedDir = X_DIRECTION_NONE;
|
|
||||||
flagPatternDir = X_DIRECTION_NONE;
|
|
||||||
starPatternDir = X_DIRECTION_NONE;
|
|
||||||
risingPatternDir = X_DIRECTION_NONE;
|
|
||||||
piercingPatternDir = X_DIRECTION_NONE;
|
|
||||||
signalKeyBarPatternDir = X_DIRECTION_NONE;
|
|
||||||
|
|
||||||
//
|
|
||||||
maCrossDir = X_DIRECTION_NONE;
|
|
||||||
SpecifiedClean(maCrosses);
|
|
||||||
|
|
||||||
//
|
|
||||||
hkSwitchDir = X_DIRECTION_NONE;
|
|
||||||
SpecifiedClean(hkSwitches);
|
|
||||||
|
|
||||||
//
|
|
||||||
sarSwitchDir = X_DIRECTION_NONE;
|
|
||||||
SpecifiedClean(sarSwitches);
|
|
||||||
|
|
||||||
//
|
|
||||||
SpecifiedClean(obs);
|
|
||||||
SpecifiedClean(fvgs);
|
|
||||||
SpecifiedClean(pinBars);
|
|
||||||
SpecifiedClean(supports);
|
|
||||||
SpecifiedClean(engulfBars);
|
|
||||||
SpecifiedClean(resistances);
|
|
||||||
SpecifiedClean(trueGapBars);
|
|
||||||
SpecifiedClean(momentumBars);
|
|
||||||
SpecifiedClean(flagPatterns);
|
|
||||||
SpecifiedClean(starPatterns);
|
|
||||||
SpecifiedClean(risingPatterns);
|
|
||||||
SpecifiedClean(piercingPatterns);
|
|
||||||
SpecifiedClean(signalKeyBarPatterns);
|
|
||||||
|
|
||||||
//
|
|
||||||
SpecifiedClean(trendSwings);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
ZeroMemory(this);
|
ZeroMemory(this);
|
||||||
@@ -471,66 +122,6 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
|
||||||
//
|
|
||||||
bool drawOB; // Current Order Block ...
|
|
||||||
bool drawFVG; // Current Fair Value Gap ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool drawSupport; // Detected Supports ...
|
|
||||||
bool drawResistance; // Detected Resistances ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool drawSwingTrend; // Swing Trend ...
|
|
||||||
bool swingTrendRayLeft; // Ray Left Swing Trend ...
|
|
||||||
bool swingTrendRayRight; // Ray Right Swing Trend ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Current Detected Patterns ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool drawPinned;
|
|
||||||
bool drawMomentum;
|
|
||||||
bool drawEngulfed;
|
|
||||||
bool drawTrueGaped;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool drawStarPattern;
|
|
||||||
bool drawFlagPattern;
|
|
||||||
bool drawRisingPattern;
|
|
||||||
bool drawPiercingPattern;
|
|
||||||
bool drawSignalKeyBarPattern;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Recently Zones ...
|
|
||||||
bool drawRecentPatterns;
|
|
||||||
bool drawFakeBreakedZone;
|
|
||||||
bool drawRecentlyTestedZones;
|
|
||||||
bool drawRecentlyBreakedZones;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Analysis Pivots ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPV ...
|
|
||||||
bool drawFIMAPVPivotsAnalysis;
|
|
||||||
bool drawFIMAPVPivotsAnalysisZones;
|
|
||||||
bool drawFIMAPVPivotsAnalysisTrends;
|
|
||||||
bool drawFIMAPVPivotsAnalysisPivots;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XSAR ...
|
|
||||||
bool drawFIMASARPivotsAnalysis;
|
|
||||||
bool drawFIMASARPivotsAnalysisZones;
|
|
||||||
bool drawFIMASARPivotsAnalysisTrends;
|
|
||||||
bool drawFIMASARPivotsAnalysisPivots;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XZIGZAG ...
|
|
||||||
bool drawFIMAZigZagPivotsAnalysis;
|
|
||||||
bool drawFIMAZigZagPivotsAnalysisZones;
|
|
||||||
bool drawFIMAZigZagPivotsAnalysisTrends;
|
|
||||||
bool drawFIMAZigZagPivotsAnalysisPivots;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XFIMAMarketStructureDrawerConfig()
|
XFIMAMarketStructureDrawerConfig()
|
||||||
@@ -546,47 +137,6 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
*/
|
*/
|
||||||
void Clean()
|
void Clean()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
drawOB = false;
|
|
||||||
drawFVG = false;
|
|
||||||
drawPinned = false;
|
|
||||||
drawMomentum = false;
|
|
||||||
drawSupport = false;
|
|
||||||
drawEngulfed = false;
|
|
||||||
drawTrueGaped = false;
|
|
||||||
drawResistance = false;
|
|
||||||
drawSwingTrend = false;
|
|
||||||
drawStarPattern = false;
|
|
||||||
drawFlagPattern = false;
|
|
||||||
swingTrendRayLeft = false;
|
|
||||||
drawRisingPattern = false;
|
|
||||||
swingTrendRayRight = false;
|
|
||||||
drawPiercingPattern = false;
|
|
||||||
drawSignalKeyBarPattern = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawRecentPatterns = false;
|
|
||||||
drawFakeBreakedZone = false;
|
|
||||||
drawRecentlyTestedZones = false;
|
|
||||||
drawRecentlyBreakedZones = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAPVPivotsAnalysis = false;
|
|
||||||
drawFIMAPVPivotsAnalysisZones = false;
|
|
||||||
drawFIMAPVPivotsAnalysisTrends = false;
|
|
||||||
drawFIMAPVPivotsAnalysisPivots = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMASARPivotsAnalysis = false;
|
|
||||||
drawFIMASARPivotsAnalysisZones = false;
|
|
||||||
drawFIMASARPivotsAnalysisTrends = false;
|
|
||||||
drawFIMASARPivotsAnalysisPivots = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAZigZagPivotsAnalysis = false;
|
|
||||||
drawFIMAZigZagPivotsAnalysisZones = false;
|
|
||||||
drawFIMAZigZagPivotsAnalysisTrends = false;
|
|
||||||
drawFIMAZigZagPivotsAnalysisPivots = false;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
ZeroMemory(this);
|
ZeroMemory(this);
|
||||||
@@ -597,46 +147,6 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
*/
|
*/
|
||||||
void Default()
|
void Default()
|
||||||
{
|
{
|
||||||
drawOB = true;
|
|
||||||
drawFVG = true;
|
|
||||||
drawPinned = true;
|
|
||||||
drawMomentum = true;
|
|
||||||
drawSupport = true;
|
|
||||||
drawEngulfed = true;
|
|
||||||
drawTrueGaped = true;
|
|
||||||
drawResistance = true;
|
|
||||||
drawSwingTrend = true;
|
|
||||||
drawStarPattern = true;
|
|
||||||
drawFlagPattern = true;
|
|
||||||
drawRisingPattern = true;
|
|
||||||
drawPiercingPattern = true;
|
|
||||||
swingTrendRayLeft = false;
|
|
||||||
swingTrendRayRight = true;
|
|
||||||
drawSignalKeyBarPattern = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawRecentPatterns = true;
|
|
||||||
drawFakeBreakedZone = true;
|
|
||||||
drawRecentlyTestedZones = true;
|
|
||||||
drawRecentlyBreakedZones = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAPVPivotsAnalysis = true;
|
|
||||||
drawFIMAPVPivotsAnalysisZones = true;
|
|
||||||
drawFIMAPVPivotsAnalysisTrends = true;
|
|
||||||
drawFIMAPVPivotsAnalysisPivots = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMASARPivotsAnalysis = true;
|
|
||||||
drawFIMASARPivotsAnalysisZones = true;
|
|
||||||
drawFIMASARPivotsAnalysisTrends = true;
|
|
||||||
drawFIMASARPivotsAnalysisPivots = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAZigZagPivotsAnalysis = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisZones = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisTrends = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisPivots = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -644,50 +154,6 @@ struct XFIMAMarketStructureDrawerConfig
|
|||||||
*/
|
*/
|
||||||
void FullDraw()
|
void FullDraw()
|
||||||
{
|
{
|
||||||
//
|
|
||||||
Default();
|
|
||||||
|
|
||||||
//
|
|
||||||
drawOB = true;
|
|
||||||
drawFVG = true;
|
|
||||||
drawPinned = true;
|
|
||||||
drawMomentum = true;
|
|
||||||
drawSupport = true;
|
|
||||||
drawEngulfed = true;
|
|
||||||
drawTrueGaped = true;
|
|
||||||
drawResistance = true;
|
|
||||||
drawSwingTrend = true;
|
|
||||||
drawStarPattern = true;
|
|
||||||
drawFlagPattern = true;
|
|
||||||
drawRisingPattern = true;
|
|
||||||
swingTrendRayLeft = true;
|
|
||||||
swingTrendRayRight = true;
|
|
||||||
drawPiercingPattern = true;
|
|
||||||
drawSignalKeyBarPattern = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawRecentPatterns = true;
|
|
||||||
drawFakeBreakedZone = true;
|
|
||||||
drawRecentlyTestedZones = true;
|
|
||||||
drawRecentlyBreakedZones = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAPVPivotsAnalysis = true;
|
|
||||||
drawFIMAPVPivotsAnalysisZones = true;
|
|
||||||
drawFIMAPVPivotsAnalysisTrends = true;
|
|
||||||
drawFIMAPVPivotsAnalysisPivots = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMASARPivotsAnalysis = true;
|
|
||||||
drawFIMASARPivotsAnalysisZones = true;
|
|
||||||
drawFIMASARPivotsAnalysisTrends = true;
|
|
||||||
drawFIMASARPivotsAnalysisPivots = true;
|
|
||||||
|
|
||||||
//
|
|
||||||
drawFIMAZigZagPivotsAnalysis = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisZones = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisTrends = true;
|
|
||||||
drawFIMAZigZagPivotsAnalysisPivots = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user