last ...
This commit is contained in:
@@ -1882,7 +1882,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Doji Pattern or not ...
|
* Check Specified Bar is Doji Pattern or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param shadowMultiplier: double, Specified Shadow Multiplier ...
|
* @param shadowMultiplier: double, Specified Shadow Multiplier ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
@@ -1938,7 +1938,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Swing or not ...
|
* Check Specified Bar is Swing or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param loopback: int, Specified Loopback ...
|
* @param loopback: int, Specified Loopback ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
@@ -2062,7 +2062,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar's Prev Bar is Simple Swing or not ...
|
* Check Specified Bar's Prev Bar is Simple Swing or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to it's Prev Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to it's Prev Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -2145,7 +2145,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Hammer Pattern or not ...
|
* Check Specified Bar is Hammer Pattern or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param bodyMultiplier: double, Specified Body Multiplier ...
|
* @param bodyMultiplier: double, Specified Body Multiplier ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
@@ -2205,7 +2205,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Engulfed Prev Bar or not ...
|
* Check Specified Bar is Engulfed Prev Bar or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -2286,7 +2286,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Momentum Bar or not ...
|
* Check Specified Bar is Momentum Bar or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param forceBarType: bool, Force Apply Bar Type ...
|
* @param forceBarType: bool, Force Apply Bar Type ...
|
||||||
* @param forceFiboPressure: bool, Force Apply Bar Type ...
|
* @param forceFiboPressure: bool, Force Apply Bar Type ...
|
||||||
*
|
*
|
||||||
@@ -2431,7 +2431,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Momentum Bar or not ...
|
* Check Specified Bar is Momentum Bar or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param loopback: int, Specified Loopback ...
|
* @param loopback: int, Specified Loopback ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
@@ -2538,7 +2538,7 @@ class XCBarAnalyser : public XCBase
|
|||||||
* Check Specified Bar is Pullback or not ...
|
* Check Specified Bar is Pullback or not ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
* @param bar: XOHCL instance reference, Specified Bar to Check ...
|
||||||
* @param dir: ENUM_X_DIRECTION member, Specified Doji Direction ...
|
* @param dir: ENUM_X_DIRECTION member, Specified Direction ...
|
||||||
* @param loopback: int, Specified Loopback ...
|
* @param loopback: int, Specified Loopback ...
|
||||||
* @param forceBody: bool, Force Using Body ...
|
* @param forceBody: bool, Force Using Body ...
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1300,6 +1300,137 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Bar has Pullback Bar Pattern or not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL, Specified Bar ...
|
||||||
|
* @param zone: XBoxZone, refrence to hold pullback zone ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
|
||||||
|
* @param pullbackLength: int, min required indirectional bars to confirm pullback ...
|
||||||
|
* @param forceBreak: bool, force pullback bar breaks peak or vale of Zone ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsPullbackPattern(
|
||||||
|
XOHCL &bar,
|
||||||
|
XBoxZone &zone,
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int pullbackLength = 2,
|
||||||
|
bool forceBreak = false //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
zone.Clean();
|
||||||
|
CleanDirection(dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize ...
|
||||||
|
pullbackLength = NormalizeInt(pullbackLength, 2);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = bar.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// First Bar Direction ...
|
||||||
|
dir = bar.GetDirection();
|
||||||
|
result = HasDirection(dir);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Loop through Pullback Length ...
|
||||||
|
XOHCL iBar;
|
||||||
|
datetime from = NULL;
|
||||||
|
double max = EMPTY_VALUE;
|
||||||
|
double min = EMPTY_VALUE;
|
||||||
|
int start = bar.Index() + 1;
|
||||||
|
int end = start + pullbackLength;
|
||||||
|
for (int i = start; i < end; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Initialize Indexed Bar ...
|
||||||
|
iBar.Clean();
|
||||||
|
result = bar.BarAt(i, iBar) &&
|
||||||
|
iBar.GetDirection() == Opposit(dir);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Max and Min ...
|
||||||
|
max =
|
||||||
|
!NotEmptyZero(max)
|
||||||
|
? iBar.high
|
||||||
|
: MathMax(max, iBar.high);
|
||||||
|
min =
|
||||||
|
!NotEmptyZero(min)
|
||||||
|
? iBar.low
|
||||||
|
: MathMin(min, iBar.low);
|
||||||
|
from = iBar.time;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Apply Force Break ...
|
||||||
|
if (result &&
|
||||||
|
forceBreak)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
NotEmptyZero(min) &&
|
||||||
|
NotEmptyZero(max) &&
|
||||||
|
(IsXBullish(dir)
|
||||||
|
? bar.close > max
|
||||||
|
: bar.close < min);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Zone ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ToBox(
|
||||||
|
bar,
|
||||||
|
zone,
|
||||||
|
dir,
|
||||||
|
ToXString(X_BAR_PATTERN_PULLBACK) //
|
||||||
|
);
|
||||||
|
zone.upper = max;
|
||||||
|
zone.lower = min;
|
||||||
|
zone.from = from;
|
||||||
|
zone.at = bar.time;
|
||||||
|
zone.to = bar.time;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = zone.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zone.Clean();
|
||||||
|
CleanDirection(dir);
|
||||||
|
}
|
||||||
|
iBar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FVG ...
|
// FVG ...
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ enum ENUM_X_BAR_PATTERN
|
|||||||
X_BAR_PATTERN_FVG = 13,
|
X_BAR_PATTERN_FVG = 13,
|
||||||
X_BAR_PATTERN_SUPPORT = 14,
|
X_BAR_PATTERN_SUPPORT = 14,
|
||||||
X_BAR_PATTERN_RESISTANCE = 15,
|
X_BAR_PATTERN_RESISTANCE = 15,
|
||||||
|
X_BAR_PATTERN_PULLBACK = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,6 +158,11 @@ string ToXString(ENUM_X_BAR_PATTERN value)
|
|||||||
case X_BAR_PATTERN_RESISTANCE:
|
case X_BAR_PATTERN_RESISTANCE:
|
||||||
result = "XRESISTANCE";
|
result = "XRESISTANCE";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_BAR_PATTERN_PULLBACK:
|
||||||
|
result = "XPULLBACK";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -247,6 +253,10 @@ ENUM_X_BAR_PATTERN ToBarPattern(string value)
|
|||||||
{
|
{
|
||||||
result = X_BAR_PATTERN_RESISTANCE;
|
result = X_BAR_PATTERN_RESISTANCE;
|
||||||
}
|
}
|
||||||
|
else if (value == ToXString(X_BAR_PATTERN_PULLBACK))
|
||||||
|
{
|
||||||
|
result = X_BAR_PATTERN_PULLBACK;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -406,11 +406,26 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Strategy 3 ...
|
// Strategy 3 ...
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// has = Strategy3HasSignal(
|
||||||
|
// iBar,
|
||||||
|
// iZone,
|
||||||
|
// iTargets,
|
||||||
|
// iDir,
|
||||||
|
// iFIMAConditions,
|
||||||
|
// structure //
|
||||||
|
// );
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Strategy 4 ...
|
||||||
has = false;
|
has = false;
|
||||||
if (!has)
|
if (!has)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
has = Strategy3HasSignal(
|
has = Strategy4HasSignal(
|
||||||
iBar,
|
iBar,
|
||||||
iZone,
|
iZone,
|
||||||
iTargets,
|
iTargets,
|
||||||
@@ -423,13 +438,13 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
has = HasDirection(iDir) &&
|
has = HasDirection(iDir) &&
|
||||||
iZone.IsValid();
|
iZone.IsValid();
|
||||||
// if (has)
|
if (has)
|
||||||
// {
|
{
|
||||||
// //
|
//
|
||||||
// has = false;
|
has = false;
|
||||||
// iZone.Clean();
|
iZone.Clean();
|
||||||
// iDir = X_DIRECTION_NONE;
|
iDir = X_DIRECTION_NONE;
|
||||||
// }
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (has)
|
if (has)
|
||||||
@@ -1478,6 +1493,164 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Bar Has Signal Based on Strategy 4 ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL, reference to Bar ...
|
||||||
|
* @param zone: XBoxZone, reference to holds affected zone ...
|
||||||
|
* @param targets: XTarget, reference to detected Signal's Targets collections ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION, detected Signal's direction ...
|
||||||
|
* @param conditions: XFIMAConditions, reference to Bar Specified XFIMA Conditions ...
|
||||||
|
* @param structure: XFIMAMarketStructure, refrence to Provides Market Structure ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Strategy4HasSignal(
|
||||||
|
XOHCL &bar,
|
||||||
|
XBoxZone &zone,
|
||||||
|
XTarget &targets[],
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
XFIMAConditions &conditions,
|
||||||
|
XFIMAMarketStructure &_structure //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
zone.Clean();
|
||||||
|
XClean(targets);
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = bar.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Requirements ...
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL pBar;
|
||||||
|
int barIndex = bar.Index();
|
||||||
|
int pBarIndex = barIndex + 1;
|
||||||
|
result = bar.GetPreviousBar(pBar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Conditions Checking ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reading HK Bond ...
|
||||||
|
double hkBondUpper = fimaHelper.GetHKBondUpper(pBarIndex);
|
||||||
|
double hkBondLower = fimaHelper.GetHKBondLower(pBarIndex);
|
||||||
|
bool hasHKBoundary =
|
||||||
|
NotEmptyZero(hkBondUpper) &&
|
||||||
|
NotEmptyZero(hkBondLower);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Pullback Detection ...
|
||||||
|
bool isPullback = poiDetector.IsPullbackPattern(
|
||||||
|
pBar,
|
||||||
|
zone,
|
||||||
|
dir,
|
||||||
|
2,
|
||||||
|
false //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish =
|
||||||
|
isPullback &&
|
||||||
|
hasHKBoundary &&
|
||||||
|
IsXBullish(dir) &&
|
||||||
|
zone.lower > hkBondLower;
|
||||||
|
|
||||||
|
//
|
||||||
|
isBearish =
|
||||||
|
isPullback &&
|
||||||
|
hasHKBoundary &&
|
||||||
|
IsXBearish(dir) &&
|
||||||
|
zone.upper < hkBondUpper;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
isBullish ||
|
||||||
|
isBearish;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Validations ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Direction Assignment ...
|
||||||
|
dir =
|
||||||
|
isBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
// TEMP ...
|
||||||
|
poiDrawer.DrawZone(
|
||||||
|
zone,
|
||||||
|
structureDrawConfig.drawConfig //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Decision Zone ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Zone Detection ...
|
||||||
|
zone.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
// zone.dir = dir;
|
||||||
|
// zone.type = name;
|
||||||
|
// zone.to = bar.time;
|
||||||
|
// zone.at = pBar.time;
|
||||||
|
// zone.from = pBar.time;
|
||||||
|
// zone.symbol = bar.symbol;
|
||||||
|
// zone.period = bar.period;
|
||||||
|
// zone.lower = MathMin(pBar.low, bar.low);
|
||||||
|
// zone.upper = MathMax(pBar.high, bar.high);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = zone.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Targets ...
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Target Handling ...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup ...
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
zone.Clean();
|
||||||
|
XClean(targets);
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
}
|
||||||
|
pBar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user