last ...
This commit is contained in:
@@ -227,6 +227,17 @@ class XCMarketPatternDetector : public XCBase
|
||||
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(
|
||||
XOHCL &bar,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
@@ -252,12 +263,34 @@ class XCMarketPatternDetector : public XCBase
|
||||
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 &&
|
||||
count > 0 &&
|
||||
HasDirection(dir) &&
|
||||
count >= validation;
|
||||
|
||||
//
|
||||
tmpBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -533,12 +533,13 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
|
||||
//
|
||||
// Signaller Flags ...
|
||||
bool useSignaller1 = true;
|
||||
bool useSignaller1 = false;
|
||||
bool useSignaller2 = false;
|
||||
bool useSignaller3 = false;
|
||||
bool useSignaller4 = false;
|
||||
bool useSignaller5 = false;
|
||||
bool useSignaller6 = false;
|
||||
bool useSignaller7 = true;
|
||||
|
||||
//
|
||||
XBoxZone tmpZone;
|
||||
@@ -552,6 +553,7 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
bool signaller4HasSignal = false;
|
||||
bool signaller5HasSignal = false;
|
||||
bool signaller6HasSignal = false;
|
||||
bool signaller7HasSignal = false;
|
||||
|
||||
//
|
||||
// Validator Flags ...
|
||||
@@ -772,6 +774,39 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
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 ...
|
||||
result = signaller1HasSignal ||
|
||||
@@ -779,7 +814,8 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
signaller3HasSignal ||
|
||||
signaller4HasSignal ||
|
||||
signaller5HasSignal ||
|
||||
signaller6HasSignal;
|
||||
signaller6HasSignal ||
|
||||
signaller7HasSignal;
|
||||
|
||||
//
|
||||
// Signal Validating ...
|
||||
@@ -1688,6 +1724,92 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
//
|
||||
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
|
||||
|
||||
// #region TF Patterns ...
|
||||
|
||||
@@ -85,6 +85,7 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
||||
ENUM_TIMEFRAMES forPeriod = NULL,
|
||||
int loopback = 50,
|
||||
int minAllowedSameDirectionalBars = 4,
|
||||
double minFVGAllowedPoints = 30,
|
||||
int confluence = 1,
|
||||
int confluenceLoopback = 50 //
|
||||
)
|
||||
@@ -134,6 +135,11 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
||||
confluenceLoopback = 0;
|
||||
}
|
||||
|
||||
//
|
||||
if (minFVGAllowedPoints < 0) {
|
||||
minFVGAllowedPoints = 0;
|
||||
}
|
||||
|
||||
//
|
||||
if (minAllowedSameDirectionalBars < 0)
|
||||
{
|
||||
@@ -148,11 +154,14 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
||||
double upper = 0;
|
||||
double lower = 0;
|
||||
XBoxZone tmpZone;
|
||||
int tmpCount = 0;
|
||||
XBoxZone tmpFVGs[];
|
||||
string type = NULL;
|
||||
double tmpValue = 0;
|
||||
datetime from = NULL;
|
||||
int start = barIndex;
|
||||
int end = barIndex + loopback;
|
||||
ENUM_X_DIRECTION tmpDir = X_DIRECTION_NONE;
|
||||
datetime to = GetBarTime(forSymbol, forPeriod, barIndex);
|
||||
for (int i = start; i < end; i++)
|
||||
{
|
||||
@@ -163,6 +172,40 @@ class XCX121XKIPOIDetector : public XCMarketPatternDetector
|
||||
{
|
||||
//
|
||||
// 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();
|
||||
|
||||
@@ -37,6 +37,7 @@ enum X121XKIStrategies
|
||||
X121_XKI_STRATEGY_4 = 4,
|
||||
X121_XKI_STRATEGY_5 = 5,
|
||||
X121_XKI_STRATEGY_6 = 6,
|
||||
X121_XKI_STRATEGY_7 = 7,
|
||||
};
|
||||
bool IsXValid(X121XKIStrategies value)
|
||||
{
|
||||
@@ -77,6 +78,10 @@ string ToXString(X121XKIStrategies value)
|
||||
case X121_XKI_STRATEGY_6:
|
||||
result = "6";
|
||||
break;
|
||||
//
|
||||
case X121_XKI_STRATEGY_7:
|
||||
result = "7";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,6 +121,10 @@ X121XKIStrategies ToX121XKIStrategy(string value)
|
||||
{
|
||||
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