last ...
This commit is contained in:
@@ -973,11 +973,15 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
}
|
||||
|
||||
//
|
||||
int score = 0;
|
||||
int scoreBullish = 0;
|
||||
int scoreBearish = 0;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
int barIndex = bar.Index() + 1;
|
||||
|
||||
//
|
||||
// Initialize Indexed Bar ...
|
||||
XOHCL iBar;
|
||||
result = iBar.Init(bar.symbol, bar.period, barIndex);
|
||||
if (!result)
|
||||
@@ -985,7 +989,7 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// #region Market Structure ...
|
||||
XBoxZone supports[];
|
||||
XBoxZone resistances[];
|
||||
XBoxZone minorSupport;
|
||||
@@ -1001,8 +1005,8 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
majorResistance,
|
||||
barIndex,
|
||||
bar.symbol,
|
||||
bar.period, // Minor ...
|
||||
PERIOD_H1, // Major ...
|
||||
iBar.period, // Minor ...
|
||||
PERIOD_H1, // Major ...
|
||||
50,
|
||||
14,
|
||||
21,
|
||||
@@ -1010,35 +1014,166 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
);
|
||||
|
||||
//
|
||||
isBullish = majorSupport.IsValid() &&
|
||||
minorSupport.IsValid() &&
|
||||
poiDetector.HasCandlestickDirection(
|
||||
iBar,
|
||||
X_DIRECTION_BULLISH //
|
||||
) &&
|
||||
IsTFBullishPattern(barIndex, PERIOD_M5) &&
|
||||
minorSupport.lower <= majorSupport.upper &&
|
||||
poiDetector.IsNearZone(iBar.close, minorSupport, 10);
|
||||
// Refining Zones ...
|
||||
int refineLoopback = 500;
|
||||
double refineBreakThreshold = 10;
|
||||
ENUM_X_PRICE refineBreakBy = X_PRICE_CLOSE;
|
||||
poiDetector.RefineStructure(
|
||||
supports,
|
||||
resistances,
|
||||
minorSupport,
|
||||
majorSupport,
|
||||
minorResistance,
|
||||
majorResistance,
|
||||
refineLoopback,
|
||||
refineBreakThreshold,
|
||||
refineBreakBy //
|
||||
);
|
||||
// #endregion
|
||||
|
||||
// #region Reading Conditions and Scoring ...
|
||||
//
|
||||
// ATR ...
|
||||
bool isATRUp = kiParser.IsVolatilityHigh(barIndex) ||
|
||||
kiParser.IsVolatilitySwitchdToHigh(barIndex);
|
||||
|
||||
// #region KI ...
|
||||
//
|
||||
bool isKIBullish = (kiParser.IsKIFastBullish(barIndex) ||
|
||||
kiParser.IsKIFastSwitchedToBullish(barIndex)) &&
|
||||
(kiParser.IsKISlowBullish(barIndex) ||
|
||||
kiParser.IsKISlowSwitchedToBullish(barIndex));
|
||||
if (isKIBullish)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
isBearish = majorResistance.IsValid() &&
|
||||
minorResistance.IsValid() &&
|
||||
poiDetector.HasCandlestickDirection(
|
||||
iBar,
|
||||
X_DIRECTION_BEARISH //
|
||||
) &&
|
||||
IsTFBearishPattern(barIndex, PERIOD_M5) &&
|
||||
minorResistance.upper >= majorResistance.lower &&
|
||||
poiDetector.IsNearZone(iBar.close, minorResistance, 10);
|
||||
bool isKIBearish = (kiParser.IsKIFastBearish(barIndex) ||
|
||||
kiParser.IsKIFastSwitchedToBearish(barIndex)) &&
|
||||
(kiParser.IsKISlowBearish(barIndex) ||
|
||||
kiParser.IsKISlowSwitchedToBearish(barIndex));
|
||||
if (isKIBearish)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region KI Wave ...
|
||||
//
|
||||
bool isKIWaveBullish = kiParser.IsKIWaveBullish(barIndex) ||
|
||||
kiParser.IsKIWaveSwitchedToBullish(barIndex);
|
||||
if (isKIWaveBullish)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
// Retrieve Base Conditions ...
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// IsBullishPOILongEntry(barIndex);
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// IsBearishPOIShortEntry(barIndex);
|
||||
bool isKIWaveBearish = kiParser.IsKIWaveBearish(barIndex) ||
|
||||
kiParser.IsKIWaveSwitchedToBearish(barIndex);
|
||||
if (isKIWaveBearish)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region MA ...
|
||||
//
|
||||
bool isMaBullish = kiParser.IsMACrossoverBullish(barIndex) ||
|
||||
kiParser.IsMACrossoverSwitchedToBullish(barIndex);
|
||||
if (isMaBullish)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
bool isMaBearish = kiParser.IsMACrossoverBearish(barIndex) ||
|
||||
kiParser.IsMACrossoverSwitchedToBearish(barIndex);
|
||||
if (isMaBearish)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region LowerTF Candlstick ...
|
||||
//
|
||||
bool isLowerTFBullish = IsTFBullishPattern(barIndex, PERIOD_M5);
|
||||
if (isLowerTFBullish)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
bool isLowerTFBearish = IsTFBearishPattern(barIndex, PERIOD_M5);
|
||||
if (isLowerTFBearish)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region Candlestick ...
|
||||
//
|
||||
bool isCandlestickBullish = poiDetector.HasCandlestickDirection(
|
||||
iBar,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
if (isCandlestickBullish)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
bool isCandlestickBearish = poiDetector.HasCandlestickDirection(
|
||||
iBar,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
if (isCandlestickBearish)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
|
||||
// #region NearInside Support/Resistance ...
|
||||
//
|
||||
int tmpSupportIDX = -1;
|
||||
bool isNearSupport = poiDetector.HasNearZone(tmpSupportIDX, iBar.close, 5, supports);
|
||||
if (isNearSupport)
|
||||
{
|
||||
scoreBullish++;
|
||||
}
|
||||
|
||||
//
|
||||
int tmpResistanceIDX = -1;
|
||||
bool isNearResistance = poiDetector.HasNearZone(tmpResistanceIDX, iBar.close, 5, resistances);
|
||||
if (isNearResistance)
|
||||
{
|
||||
scoreBearish++;
|
||||
}
|
||||
// #endregion
|
||||
// #endregion
|
||||
|
||||
//
|
||||
// Summarize Directional Conditions ...
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isATRUp &&
|
||||
scoreBullish >= 4 &&
|
||||
(isMaBullish ||
|
||||
isNearSupport ||
|
||||
isKIWaveBullish ||
|
||||
isLowerTFBullish ||
|
||||
isCandlestickBullish);
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isATRUp &&
|
||||
scoreBearish >= 4 &&
|
||||
(isMaBearish ||
|
||||
isNearResistance ||
|
||||
isKIWaveBearish ||
|
||||
isLowerTFBearish ||
|
||||
isCandlestickBearish);
|
||||
|
||||
//
|
||||
// Validate Conditions ...
|
||||
@@ -1059,8 +1194,110 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
}
|
||||
|
||||
//
|
||||
// Select Operational Zone ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
// Nearest Support ...
|
||||
if (IsValidIndex(tmpSupportIDX))
|
||||
{
|
||||
zone = supports[tmpSupportIDX];
|
||||
}
|
||||
|
||||
//
|
||||
// Make Sure Zone Exists ...
|
||||
if (!zone.IsValid())
|
||||
{
|
||||
//
|
||||
// Looking Bar Patterns to Detect Zone ...
|
||||
poiDetector.HasRecentPatternTouched(zone, iBar.close, barIndex, 5, 5, iBar.period, X_DIRECTION_BULLISH);
|
||||
}
|
||||
}
|
||||
else if (isBearish)
|
||||
{
|
||||
//
|
||||
// Nearest Resistance ...
|
||||
if (IsValidIndex(tmpResistanceIDX))
|
||||
{
|
||||
zone = resistances[tmpResistanceIDX];
|
||||
}
|
||||
|
||||
//
|
||||
// Make Sure Zone Exists ...
|
||||
if (!zone.IsValid())
|
||||
{
|
||||
//
|
||||
// Looking Bar Patterns to Detect Zone ...
|
||||
poiDetector.HasRecentPatternTouched(zone, iBar.close, barIndex, 5, 5, iBar.period, X_DIRECTION_BEARISH);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Refactor Result ...
|
||||
result = result &&
|
||||
zone.IsValid();
|
||||
if (result)
|
||||
{
|
||||
poiDetector.RefineZone(zone);
|
||||
}
|
||||
|
||||
//
|
||||
// Do Directional Validation ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Bullish ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isLowerTFBullish &&
|
||||
isCandlestickBullish;
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isLowerTFBearish &&
|
||||
isCandlestickBearish;
|
||||
}
|
||||
|
||||
//
|
||||
result = isBullish || isBearish;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
isBullish = false;
|
||||
isBearish = false;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Result ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
iBar.Clean();
|
||||
XClean(supports);
|
||||
XClean(resistances);
|
||||
minorSupport.Clean();
|
||||
majorSupport.Clean();
|
||||
minorResistance.Clean();
|
||||
majorResistance.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Draws ...
|
||||
bool draw = true;
|
||||
if (draw)
|
||||
if (draw && result)
|
||||
{
|
||||
//
|
||||
int drawn = 0;
|
||||
@@ -1069,6 +1306,24 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
XPOIDrawConfig config;
|
||||
config.Default();
|
||||
|
||||
//
|
||||
if (zone.IsValid())
|
||||
{
|
||||
//
|
||||
drawn++;
|
||||
|
||||
//
|
||||
config.zonesWidth = 3;
|
||||
config.bullishColor = clrYellow;
|
||||
config.bearishColor = clrOrange;
|
||||
|
||||
//
|
||||
poiDrawer.DrawZone(zone, config);
|
||||
|
||||
//
|
||||
config.Default();
|
||||
}
|
||||
|
||||
//
|
||||
// Minors ...
|
||||
if (minorSupport.IsValid())
|
||||
@@ -1114,237 +1369,6 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
}
|
||||
}
|
||||
|
||||
// //
|
||||
// // Do Validation and Filtering Market Structure if required ...
|
||||
|
||||
// //
|
||||
// // Validate near Support / Resistance Zones ...
|
||||
// bool validateNearSupRes = true;
|
||||
// if (result && validateNearSupRes)
|
||||
// {
|
||||
// //
|
||||
// // Configs ...
|
||||
// int loopback = 100;
|
||||
// int validationLength = 7;
|
||||
// double nearThreshold = 5;
|
||||
// int validationRetests = 0;
|
||||
// int validationLoopback = 100;
|
||||
// double validationThreshold = 5;
|
||||
|
||||
// //
|
||||
// // Filling Zones ...
|
||||
// XBoxZone zones[];
|
||||
// if (isBullish)
|
||||
// {
|
||||
// //
|
||||
// // Detect Supports ...
|
||||
// poiDetector.DetectSupports(
|
||||
// zones,
|
||||
// barIndex,
|
||||
// loopback,
|
||||
// true,
|
||||
// validationLength, // Validation Length ...
|
||||
// validationRetests, // Min Retest ...
|
||||
// validationThreshold, // Retest Threshold ...
|
||||
// validationLoopback, // Retest Loopback ...
|
||||
// symbol,
|
||||
// period //
|
||||
// );
|
||||
// }
|
||||
// else if (isBearish)
|
||||
// {
|
||||
// //
|
||||
// // Detect Resistances ...
|
||||
// poiDetector.DetectResistances(
|
||||
// zones,
|
||||
// barIndex,
|
||||
// loopback,
|
||||
// true,
|
||||
// validationLength, // Validation Length ...
|
||||
// validationRetests, // Min Retest ...
|
||||
// validationThreshold, // Retest Threshold ...
|
||||
// validationLoopback, // Retest Loopback ...
|
||||
// symbol,
|
||||
// period //
|
||||
// );
|
||||
// }
|
||||
|
||||
// //
|
||||
// if (HasChild(zones))
|
||||
// {
|
||||
// //
|
||||
// XPOIDrawConfig iConfig;
|
||||
// iConfig.Default();
|
||||
|
||||
// //
|
||||
// poiDrawer.DrawZones(zones, iConfig);
|
||||
// iConfig.Clean();
|
||||
// // DebugBreak();
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Check Has Nearest ...
|
||||
// int nearIDX = -1;
|
||||
// result = poiDetector.HasNearZone(
|
||||
// nearIDX,
|
||||
// bar.close,
|
||||
// nearThreshold,
|
||||
// zones //
|
||||
// );
|
||||
|
||||
// //
|
||||
// // Validate ...
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Validate by ATR Rising/Falling ...
|
||||
// bool validateByATRRaisFalling = true;
|
||||
// if (result && validateByATRRaisFalling)
|
||||
// {
|
||||
// //
|
||||
// // Bullish:
|
||||
// // - ATR Lower Rising ...
|
||||
// // - ATR Over ATR Ma ...
|
||||
// // Bearsih:
|
||||
// // - ATR Upper Falling ...
|
||||
// // - ATR Over ATR Ma ...
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// // kiHelper.GetATR(barIndex) > kiHelper.GetATRSmoothed(barIndex) &&
|
||||
// kiHelper.GetKILower(barIndex) > kiHelper.GetKILower(barIndex + 1);
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// // kiHelper.GetATR(barIndex) > kiHelper.GetATRSmoothed(barIndex) &&
|
||||
// kiHelper.GetKIUpper(barIndex) < kiHelper.GetKIUpper(barIndex + 1);
|
||||
// result = isBullish || isBearish;
|
||||
|
||||
// //
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Validate by RSI ...
|
||||
// bool validatebyRSI = false;
|
||||
// if (result && validatebyRSI)
|
||||
// {
|
||||
// //
|
||||
// // Bullish:
|
||||
// // - Not in Over Baught;
|
||||
// // - Rising;
|
||||
// // Bearish :
|
||||
// // - Not in Over Sold;
|
||||
// // - Falling;
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// !kiParser.IsRSIOverbought(barIndex) &&
|
||||
// kiHelper.GetRSI(barIndex) > kiHelper.GetRSI(barIndex + 1);
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// !kiParser.IsRSIOversold(barIndex) &&
|
||||
// kiHelper.GetRSI(barIndex) < kiHelper.GetRSI(barIndex + 1);
|
||||
// result = isBullish || isBearish;
|
||||
|
||||
// //
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Validate by iBar Pattern ...
|
||||
// // in this Strategy we have PinBar or SignalKeyBar ...
|
||||
// bool validateByBarPatterns = false;
|
||||
// if (result && validateByBarPatterns)
|
||||
// {
|
||||
// //
|
||||
// // Pin ...
|
||||
// bool isPinBar = poiDetector.IsPinnedBar(
|
||||
// iBar,
|
||||
// dir //
|
||||
// );
|
||||
// bool isPinBarBullish =
|
||||
// isPinBar &&
|
||||
// IsXBullish(dir);
|
||||
// bool isPinBarBearish =
|
||||
// isPinBar &&
|
||||
// IsXBearish(dir);
|
||||
|
||||
// //
|
||||
// // Engulfe ...
|
||||
// bool isEngulfed = poiDetector.IsEngulfedBar(
|
||||
// iBar,
|
||||
// dir //
|
||||
// );
|
||||
// bool isEngulfedBullish =
|
||||
// isEngulfed &&
|
||||
// IsXBullish(dir);
|
||||
// bool isEngulfedBearish =
|
||||
// isEngulfed &&
|
||||
// IsXBearish(dir);
|
||||
|
||||
// //
|
||||
// // Signal Key Bar ...
|
||||
// bool isSignalKeyBar = poiDetector.IsSignalKeyBarPattern(
|
||||
// iBar,
|
||||
// dir //
|
||||
// );
|
||||
// bool isSignalKeyBarBullish =
|
||||
// isSignalKeyBar &&
|
||||
// IsXBullish(dir);
|
||||
// bool isSignalKeyBarBearish =
|
||||
// isSignalKeyBar &&
|
||||
// IsXBearish(dir);
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// (isEngulfedBullish);
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// (isEngulfedBearish);
|
||||
|
||||
// // //
|
||||
// // isBullish =
|
||||
// // isBullish &&
|
||||
// // (isPinBarBullish ||
|
||||
// // isEngulfedBullish ||
|
||||
// // isSignalKeyBarBullish);
|
||||
// // isBearish =
|
||||
// // isBearish &&
|
||||
// // (isPinBarBearish ||
|
||||
// // isEngulfedBearish ||
|
||||
// // isSignalKeyBarBearish);
|
||||
|
||||
// //
|
||||
// result = isBullish || isBearish;
|
||||
|
||||
// //
|
||||
// if (!result)
|
||||
// {
|
||||
// //
|
||||
// isBullish = false;
|
||||
// isBearish = false;
|
||||
// }
|
||||
// }
|
||||
|
||||
//
|
||||
// Check and Prepare Direction ...
|
||||
dir =
|
||||
@@ -1352,7 +1376,8 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
? X_DIRECTION_BULLISH
|
||||
: isBearish ? X_DIRECTION_BEARISH
|
||||
: X_DIRECTION_NONE;
|
||||
result = HasDirection(dir);
|
||||
result = result &&
|
||||
HasDirection(dir);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
@@ -1376,14 +1401,14 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
//
|
||||
double upper = isBullish
|
||||
? entry
|
||||
: minorSupport.upper;
|
||||
: zone.upper;
|
||||
double lower = isBullish
|
||||
? minorResistance.lower
|
||||
? zone.lower
|
||||
: entry;
|
||||
datetime to = bar.time;
|
||||
datetime from = isBullish
|
||||
? minorSupport.from
|
||||
: minorResistance.from;
|
||||
? zone.from
|
||||
: zone.from;
|
||||
result = zone.Init(
|
||||
iBar.symbol,
|
||||
iBar.period,
|
||||
@@ -1394,18 +1419,6 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
|
||||
dir,
|
||||
"XS1" //
|
||||
);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
XPOIDrawConfig iConfig;
|
||||
iConfig.Default();
|
||||
|
||||
//
|
||||
poiDrawer.DrawZone(zone, iConfig);
|
||||
|
||||
//
|
||||
// DebugBreak();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user