last ...
This commit is contained in:
@@ -227,6 +227,17 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check a Bar has Same Sequence Directionalo Bar or Not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL, Specified Bar ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION, Detected Bars Direction ...
|
||||||
|
* @param count: int, Number of Same Bars ...
|
||||||
|
* @param validation: int, Validation of Same Bars ...
|
||||||
|
* @param loopback: int, Loopback for Detection ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
bool HasSameBars(
|
bool HasSameBars(
|
||||||
XOHCL &bar,
|
XOHCL &bar,
|
||||||
ENUM_X_DIRECTION &dir,
|
ENUM_X_DIRECTION &dir,
|
||||||
@@ -252,12 +263,34 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL tmpBar;
|
||||||
|
bar.GetPreviousBar(tmpBar);
|
||||||
|
while (tmpBar.GetDirection() == bar.GetDirection())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
count++;
|
||||||
|
tmpBar.GetPreviousBar(tmpBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Count ...
|
||||||
|
result = count >= validation;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
dir = bar.GetDirection();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
result =
|
result =
|
||||||
|
result &&
|
||||||
count > 0 &&
|
count > 0 &&
|
||||||
HasDirection(dir) &&
|
HasDirection(dir) &&
|
||||||
count >= validation;
|
count >= validation;
|
||||||
|
|
||||||
|
//
|
||||||
|
tmpBar.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -533,12 +533,13 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Signaller Flags ...
|
// Signaller Flags ...
|
||||||
bool useSignaller1 = true;
|
bool useSignaller1 = false;
|
||||||
bool useSignaller2 = false;
|
bool useSignaller2 = false;
|
||||||
bool useSignaller3 = false;
|
bool useSignaller3 = false;
|
||||||
bool useSignaller4 = false;
|
bool useSignaller4 = false;
|
||||||
bool useSignaller5 = false;
|
bool useSignaller5 = false;
|
||||||
bool useSignaller6 = false;
|
bool useSignaller6 = false;
|
||||||
|
bool useSignaller7 = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
XBoxZone tmpZone;
|
XBoxZone tmpZone;
|
||||||
@@ -552,6 +553,7 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
|||||||
bool signaller4HasSignal = false;
|
bool signaller4HasSignal = false;
|
||||||
bool signaller5HasSignal = false;
|
bool signaller5HasSignal = false;
|
||||||
bool signaller6HasSignal = false;
|
bool signaller6HasSignal = false;
|
||||||
|
bool signaller7HasSignal = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validator Flags ...
|
// Validator Flags ...
|
||||||
@@ -772,6 +774,39 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
|||||||
tmpDir = X_DIRECTION_NONE;
|
tmpDir = X_DIRECTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Signaller 7 ...
|
||||||
|
// Supply and Demand ...
|
||||||
|
if (useSignaller7)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
signaller7HasSignal = Strategy7HasSignal(
|
||||||
|
bar,
|
||||||
|
tmpZone,
|
||||||
|
targets,
|
||||||
|
tmpDir //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (signaller7HasSignal)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
provider += ToXString(X121_XKI_STRATEGY_7);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!zone.IsValid())
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir = tmpDir;
|
||||||
|
zone = tmpZone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
tmpZone.Clean();
|
||||||
|
tmpDir = X_DIRECTION_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Summarize Signallers Result ...
|
// Summarize Signallers Result ...
|
||||||
result = signaller1HasSignal ||
|
result = signaller1HasSignal ||
|
||||||
@@ -779,7 +814,8 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
|||||||
signaller3HasSignal ||
|
signaller3HasSignal ||
|
||||||
signaller4HasSignal ||
|
signaller4HasSignal ||
|
||||||
signaller5HasSignal ||
|
signaller5HasSignal ||
|
||||||
signaller6HasSignal;
|
signaller6HasSignal ||
|
||||||
|
signaller7HasSignal;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Signal Validating ...
|
// Signal Validating ...
|
||||||
@@ -1688,6 +1724,92 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Bar Has Signal Based on Strategy 7 ...
|
||||||
|
* ُSupply and Demand ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Strategy7HasSignal(
|
||||||
|
XOHCL &bar,
|
||||||
|
XBoxZone &zone,
|
||||||
|
XTarget &targets[],
|
||||||
|
ENUM_X_DIRECTION &dir //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
zone.Clean();
|
||||||
|
XClean(targets);
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int barIndex = bar.Index() + 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Retrieve Base Conditions ...
|
||||||
|
bool isBullish = false;
|
||||||
|
bool isBearish = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone demandZones[];
|
||||||
|
int demandZonesCount = poiDetector.DetectDemands(
|
||||||
|
demandZones,
|
||||||
|
barIndex,
|
||||||
|
bar.symbol,
|
||||||
|
bar.period,
|
||||||
|
100,
|
||||||
|
4,
|
||||||
|
2,
|
||||||
|
100 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Conditions ...
|
||||||
|
result = isBullish || isBearish;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Validation and Filtering Market Structure if required ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check and Prepare Direction ...
|
||||||
|
dir =
|
||||||
|
isBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: isBearish ? X_DIRECTION_BEARISH
|
||||||
|
: X_DIRECTION_NONE;
|
||||||
|
result = HasDirection(dir);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Zone ...
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
zone.IsValid() &&
|
||||||
|
HasDirection(dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region TF Patterns ...
|
// #region TF Patterns ...
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
|||||||
ENUM_TIMEFRAMES forPeriod = NULL,
|
ENUM_TIMEFRAMES forPeriod = NULL,
|
||||||
int loopback = 50,
|
int loopback = 50,
|
||||||
int minAllowedSameDirectionalBars = 4,
|
int minAllowedSameDirectionalBars = 4,
|
||||||
|
double minFVGAllowedPoints = 30,
|
||||||
int confluence = 1,
|
int confluence = 1,
|
||||||
int confluenceLoopback = 50 //
|
int confluenceLoopback = 50 //
|
||||||
)
|
)
|
||||||
@@ -134,6 +135,11 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
|||||||
confluenceLoopback = 0;
|
confluenceLoopback = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (minFVGAllowedPoints < 0) {
|
||||||
|
minFVGAllowedPoints = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
if (minAllowedSameDirectionalBars < 0)
|
if (minAllowedSameDirectionalBars < 0)
|
||||||
{
|
{
|
||||||
@@ -148,11 +154,14 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
|||||||
double upper = 0;
|
double upper = 0;
|
||||||
double lower = 0;
|
double lower = 0;
|
||||||
XBoxZone tmpZone;
|
XBoxZone tmpZone;
|
||||||
|
int tmpCount = 0;
|
||||||
|
XBoxZone tmpFVGs[];
|
||||||
string type = NULL;
|
string type = NULL;
|
||||||
double tmpValue = 0;
|
double tmpValue = 0;
|
||||||
datetime from = NULL;
|
datetime from = NULL;
|
||||||
int start = barIndex;
|
int start = barIndex;
|
||||||
int end = barIndex + loopback;
|
int end = barIndex + loopback;
|
||||||
|
ENUM_X_DIRECTION tmpDir = X_DIRECTION_NONE;
|
||||||
datetime to = GetBarTime(forSymbol, forPeriod, barIndex);
|
datetime to = GetBarTime(forSymbol, forPeriod, barIndex);
|
||||||
for (int i = start; i < end; i++)
|
for (int i = start; i < end; i++)
|
||||||
{
|
{
|
||||||
@@ -163,6 +172,40 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Next Step is Detect Sequence Same Directional Bars ...
|
// Next Step is Detect Sequence Same Directional Bars ...
|
||||||
|
has = HasSameBars(tmpBar, tmpDir, tmpCount, minAllowedSameDirectionalBars);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Zone Bar ...
|
||||||
|
XOHCL zoneBar;
|
||||||
|
has = zoneBar.Init(tmpBar.symbol, tmpBar.period, i + tmpCount + 1);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Zone Bar Direction ...
|
||||||
|
has = has &&
|
||||||
|
zoneBar.GetDirection() != tmpBar.GetDirection();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate FVG Exists ...
|
||||||
|
CollectFVGs(tmpBar, tmpFVGs, 5, 0, zoneBar.Index() - tmpBar.Index());
|
||||||
|
FilterZones(tmpBar, tmpFVGs, tmpBar.GetDirection(), X_PRICE_CLOSE, tmpBar.GetDirection());
|
||||||
|
has = ArraySize(tmpFVGs) > 0;
|
||||||
|
if (has && minFVGAllowedPoints > 0) {
|
||||||
|
//
|
||||||
|
// Validate FVG Gap
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
DebugBreak();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
zoneBar.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
tmpBar.Clean();
|
tmpBar.Clean();
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ enum X121XKIStrategies
|
|||||||
X121_XKI_STRATEGY_4 = 4,
|
X121_XKI_STRATEGY_4 = 4,
|
||||||
X121_XKI_STRATEGY_5 = 5,
|
X121_XKI_STRATEGY_5 = 5,
|
||||||
X121_XKI_STRATEGY_6 = 6,
|
X121_XKI_STRATEGY_6 = 6,
|
||||||
|
X121_XKI_STRATEGY_7 = 7,
|
||||||
};
|
};
|
||||||
bool IsXValid(X121XKIStrategies value)
|
bool IsXValid(X121XKIStrategies value)
|
||||||
{
|
{
|
||||||
@@ -77,6 +78,10 @@ string ToXString(X121XKIStrategies value)
|
|||||||
case X121_XKI_STRATEGY_6:
|
case X121_XKI_STRATEGY_6:
|
||||||
result = "6";
|
result = "6";
|
||||||
break;
|
break;
|
||||||
|
//
|
||||||
|
case X121_XKI_STRATEGY_7:
|
||||||
|
result = "7";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +121,10 @@ X121XKIStrategies ToX121XKIStrategy(string value)
|
|||||||
{
|
{
|
||||||
result = X121_XKI_STRATEGY_6;
|
result = X121_XKI_STRATEGY_6;
|
||||||
}
|
}
|
||||||
|
else if (value == ToXString(X121_XKI_STRATEGY_7))
|
||||||
|
{
|
||||||
|
result = X121_XKI_STRATEGY_7;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user