This commit is contained in:
2026-01-06 11:48:16 +03:30
parent fb03a1c88a
commit e6165f44f2
4 changed files with 1308 additions and 566 deletions
@@ -988,12 +988,44 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
return result;
}
//
ENUM_X_DIRECTION patternsDir[];
ENUM_X_BAR_PATTERN patterns[];
poiDetector.FillStrategy1Patterns(
patterns,
patternsDir //
);
//
isBullish = poiDetector.HasRecentPatternRejected(
zone,
patterns,
patternsDir,
barIndex,
3, // Loopback ..
iBar.period,
X_DIRECTION_BULLISH //
);
if (!isBullish)
{
//
isBearish = poiDetector.HasRecentPatternRejected(
zone,
patterns,
patternsDir,
barIndex,
3, // Loopback ..
iBar.period,
X_DIRECTION_BEARISH //
);
}
// #region Swings/OrderFlow ...
//
// Swings ...
XBoxZone swingLow;
XBoxZone swingHigh;
bool hasSwings = poiDetector.DetectRecentSwings(
poiDetector.DetectRecentSwings(
swingHigh,
swingLow,
barIndex //
@@ -1004,160 +1036,11 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
//
XBoxZone bullishOrderFlow[];
result = poiDetector.HasOrderFlow(bullishOrderFlow, barIndex, 4, X_DIRECTION_BULLISH, 15);
poiDetector.HasOrderFlow(bullishOrderFlow, barIndex, 4, X_DIRECTION_BULLISH, 15);
//
XBoxZone bearishOrderFlow[];
result = poiDetector.HasOrderFlow(bearishOrderFlow, barIndex, 4, X_DIRECTION_BEARISH, 15);
// #endregion
// #region Reading Conditions and Scoring ...
//
// ATR ...
bool isATRUp = kiParser.IsVolatilityHigh(barIndex) ||
kiParser.IsVolatilitySwitchdToHigh(barIndex);
// #region KI ...
//
bool isKIReadyForBullish = ((kiParser.IsKIFastBearish(barIndex) ||
(kiParser.IsKIFastBullish(barIndex) &&
iBar.IsRejected(kiHelper.GetKIFast(barIndex), X_DIRECTION_BULLISH))) &&
kiParser.IsKISlowBullish(barIndex));
//
bool isKIReadyForBearish = ((kiParser.IsKIFastBullish(barIndex) ||
(kiParser.IsKIFastBearish(barIndex) &&
iBar.IsRejected(kiHelper.GetKIFast(barIndex), X_DIRECTION_BEARISH))) &&
kiParser.IsKISlowBearish(barIndex));
//
bool isKIBandBullish = (kiHelper.GetKIUpper(barIndex) > kiHelper.GetKIUpper(barIndex + 1) ||
kiHelper.GetKILower(barIndex) > kiHelper.GetKILower(barIndex + 1));
//
bool isKIBandBearish = (kiHelper.GetKIUpper(barIndex) < kiHelper.GetKIUpper(barIndex + 1) ||
kiHelper.GetKILower(barIndex) < kiHelper.GetKILower(barIndex + 1));
//
bool isKIBullish = (kiParser.IsKIFastBullish(barIndex) ||
kiParser.IsKIFastSwitchedToBullish(barIndex)) &&
(kiParser.IsKISlowBullish(barIndex) ||
kiParser.IsKISlowSwitchedToBullish(barIndex));
if (isKIBullish)
{
scoreBullish++;
}
//
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++;
}
//
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
// #endregion
// #region Summarize Directional Conditions ...
//
isBullish =
isATRUp &&
isLowerTFBullish &&
isKIReadyForBullish &&
isCandlestickBullish &&
scoreBullish >= 2 &&
(isKIBullish ||
isMaBullish ||
isKIWaveBullish ||
isKIBandBullish);
//
isBearish =
isATRUp &&
isLowerTFBearish &&
isKIReadyForBearish &&
isCandlestickBearish &&
scoreBearish >= 2 &&
(isKIBearish ||
isMaBearish ||
isKIWaveBearish ||
isKIBandBearish);
poiDetector.HasOrderFlow(bearishOrderFlow, barIndex, 4, X_DIRECTION_BEARISH, 15);
// #endregion
//
@@ -1172,168 +1055,33 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
return result;
}
//
// Select Operational Zone ...
ENUM_X_DIRECTION patternsDir[];
ENUM_X_BAR_PATTERN patterns[];
//
GetAllBarPatters(patterns, patternsDir);
//
// XAUUSD ...
// //
// // FVG ...
// Add(X_BAR_PATTERN_FVG, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
// //
// // Piercing ...
// Add(X_BAR_PATTERN_PIERCING, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
//
// EURUSD ...
//
// Add(X_BAR_PATTERN_STAR, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
// //
// Add(X_BAR_PATTERN_SUPPORT, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
// //
// Add(X_BAR_PATTERN_RESISTANCE, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
//
// Add(X_BAR_PATTERN_SIGNALKEY, patterns);
// Add(X_DIRECTION_NONE, patternsDir);
//
int nearestOrderFlowIDX = -1;
if (isBullish)
{
//
// Looking Bar Patterns to Detect Zone ...
isBullish =
isBullish &&
HasChild(bullishOrderFlow) &&
poiDetector.HasNearZone(
nearestOrderFlowIDX,
iBar.close,
5,
bullishOrderFlow //
) &&
poiDetector.HasRecentPatternTouched(
zone,
patterns,
patternsDir,
iBar.close,
barIndex,
5,
5,
iBar.period,
X_DIRECTION_BULLISH //
);
}
else if (isBearish)
{
//
// Looking Bar Patterns to Detect Zone ...
isBearish =
isBearish &&
HasChild(bearishOrderFlow) &&
poiDetector.HasNearZone(
nearestOrderFlowIDX,
iBar.close,
5,
bearishOrderFlow //
) &&
poiDetector.HasRecentPatternTouched(
zone,
patterns,
patternsDir,
iBar.close,
barIndex,
5,
5,
iBar.period,
X_DIRECTION_BEARISH //
);
}
//
// Refactor Result ...
result = result &&
zone.IsValid();
if (result)
{
//
// Refine Zone ...
poiDetector.RefineZone(zone);
//
// SL Refactoring ...
//
XOHCL toBar;
if (zone.ToBar(toBar))
{
//
int to = zone.ToIndex();
int from = zone.FromIndex();
int length = from - to;
double iValue =
isBullish
? toBar.FindLowest(length, MODE_LOW)
: isBearish
? toBar.FindHighest(length, MODE_HIGH)
: EMPTY_VALUE;
if (NotEmptyZero(iValue))
{
//
if (isBullish)
{
zone.lower = MathMin(zone.lower, iValue);
}
//
if (isBearish)
{
zone.upper = MathMax(zone.upper, iValue);
}
}
}
toBar.Clean();
}
//
// Do Directional Validation ...
if (result)
{
//
poiDetector.RefactorStrategy1OperationalZone(zone);
//
// Bullish ...
if (isBullish)
{
//
isBullish =
isBullish &&
isLowerTFBullish &&
isCandlestickBullish;
// //
// isBullish =
// isBullish &&
// isLowerTFBullish &&
// isCandlestickBullish;
}
//
// Bearish ...
if (isBearish)
{
//
isBearish =
isBearish &&
isLowerTFBearish &&
isCandlestickBearish;
// //
// isBearish =
// isBearish &&
// isLowerTFBearish &&
// isCandlestickBearish;
}
//
@@ -1346,17 +1094,6 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
}
}
//
// Validate Result ...
if (!result)
{
//
iBar.Clean();
//
return result;
}
//
// Draws ...
bool draw = true;
@@ -1365,6 +1102,9 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
//
int drawn = 0;
//
poiDrawer.drawnObjects.Clear();
//
XPOIDrawConfig config;
config.Default();
@@ -1422,7 +1162,8 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
//
if (drawn > 0)
{
// DebugBreak();
DebugBreak();
return false;
}
//
@@ -1493,8 +1234,7 @@ class XCX121XKIStrategy1Signaller : public XCX121XKIBaseSignaller
*
* @return ( bool )
*/
bool
Strategy2HasSignal(
bool Strategy2HasSignal(
XOHCL &bar,
XBoxZone &zone,
XTarget &targets[],