This commit is contained in:
2025-01-11 19:09:20 +03:30
parent c6cfd9b115
commit 83694f54ff
9 changed files with 2184 additions and 427 deletions
+96 -96
View File
@@ -197,41 +197,41 @@ struct X121XATRConditions
// RSI ...
//
bool isRSIOverBought;
bool isRSICrossedOverOverBought;
bool isRSICrossedUnderOverBought;
bool isRsiOverBought;
bool isRsiCrossedOverOverBought;
bool isRsiCrossedUnderOverBought;
//
bool isRSIOverSold;
bool isRSICrossedUnderOverSold;
bool isRSICrossedOverOverSold;
bool isRsiOverSold;
bool isRsiCrossedUnderOverSold;
bool isRsiCrossedOverOverSold;
//
// ATR ...
//
bool isCloseOverATRUpper;
bool isCloseOverATRLower;
bool isCloseOverAtrUpper;
bool isCloseOverAtrLower;
//
bool isCloseUnderATRUpper;
bool isCloseUnderATRLower;
bool isCloseUnderAtrUpper;
bool isCloseUnderAtrLower;
//
bool isRejectUpATRUpper;
bool isRejectDownATRUpper;
bool isRejectUpAtrUpper;
bool isRejectDownAtrUpper;
//
bool isRejectUpATRLower;
bool isRejectDownATRLower;
bool isRejectUpAtrLower;
bool isRejectDownAtrLower;
//
bool isBreakUpATRUpper;
bool isBreakDownATRUpper;
bool isBreakUpAtrUpper;
bool isBreakDownAtrUpper;
//
bool isBreakUpATRLower;
bool isBreakDownATRLower;
bool isBreakUpAtrLower;
bool isBreakDownAtrLower;
//
// bool isCloseLower
@@ -283,41 +283,41 @@ struct X121XATRConditions
// RSI ...
//
isRSIOverBought = false;
isRSICrossedOverOverBought = false;
isRSICrossedUnderOverBought = false;
isRsiOverBought = false;
isRsiCrossedOverOverBought = false;
isRsiCrossedUnderOverBought = false;
//
isRSIOverSold = false;
isRSICrossedUnderOverSold = false;
isRSICrossedOverOverSold = false;
isRsiOverSold = false;
isRsiCrossedUnderOverSold = false;
isRsiCrossedOverOverSold = false;
//
// ATR ...
//
isCloseOverATRUpper = false;
isCloseOverATRLower = false;
isCloseOverAtrUpper = false;
isCloseOverAtrLower = false;
//
isCloseUnderATRUpper = false;
isCloseUnderATRLower = false;
isCloseUnderAtrUpper = false;
isCloseUnderAtrLower = false;
//
isRejectUpATRUpper = false;
isRejectDownATRUpper = false;
isRejectUpAtrUpper = false;
isRejectDownAtrUpper = false;
//
isRejectUpATRLower = false;
isRejectDownATRLower = false;
isRejectUpAtrLower = false;
isRejectDownAtrLower = false;
//
isBreakUpATRUpper = false;
isBreakDownATRUpper = false;
isBreakUpAtrUpper = false;
isBreakDownAtrUpper = false;
//
isBreakUpATRLower = false;
isBreakDownATRLower = false;
isBreakUpAtrLower = false;
isBreakDownAtrLower = false;
//
// XDON ...
@@ -394,26 +394,26 @@ struct X121XATRConditions
string conditionsStr =
//
// RSI ...
ToString("isRSIOverBought", isRSIOverBought, ignoreFalseConditions, separator) +
ToString("isRSICrossedOverOverBought", isRSICrossedOverOverBought, ignoreFalseConditions, separator) +
ToString("isRSICrossedUnderOverBought", isRSICrossedUnderOverBought, ignoreFalseConditions, separator) +
ToString("isRSIOverSold", isRSIOverSold, ignoreFalseConditions, separator) +
ToString("isRSICrossedUnderOverSold", isRSICrossedUnderOverSold, ignoreFalseConditions, separator) +
ToString("isRSICrossedOverOverSold", isRSICrossedOverOverSold, ignoreFalseConditions, separator) +
ToString("isRsiOverBought", isRsiOverBought, ignoreFalseConditions, separator) +
ToString("isRsiCrossedOverOverBought", isRsiCrossedOverOverBought, ignoreFalseConditions, separator) +
ToString("isRsiCrossedUnderOverBought", isRsiCrossedUnderOverBought, ignoreFalseConditions, separator) +
ToString("isRsiOverSold", isRsiOverSold, ignoreFalseConditions, separator) +
ToString("isRsiCrossedUnderOverSold", isRsiCrossedUnderOverSold, ignoreFalseConditions, separator) +
ToString("isRsiCrossedOverOverSold", isRsiCrossedOverOverSold, ignoreFalseConditions, separator) +
//
// ATR ...
ToString("isCloseOverATRUpper", isCloseOverATRUpper, ignoreFalseConditions, separator) +
ToString("isCloseOverATRLower", isCloseOverATRLower, ignoreFalseConditions, separator) +
ToString("isCloseUnderATRUpper", isCloseUnderATRUpper, ignoreFalseConditions, separator) +
ToString("isCloseUnderATRLower", isCloseUnderATRLower, ignoreFalseConditions, separator) +
ToString("isRejectUpATRUpper", isRejectUpATRUpper, ignoreFalseConditions, separator) +
ToString("isRejectDownATRUpper", isRejectDownATRUpper, ignoreFalseConditions, separator) +
ToString("isRejectUpATRLower", isRejectUpATRLower, ignoreFalseConditions, separator) +
ToString("isRejectDownATRLower", isRejectDownATRLower, ignoreFalseConditions, separator) +
ToString("isBreakUpATRUpper", isBreakUpATRUpper, ignoreFalseConditions, separator) +
ToString("isBreakDownATRUpper", isBreakDownATRUpper, ignoreFalseConditions, separator) +
ToString("isBreakUpATRLower", isBreakUpATRLower, ignoreFalseConditions, separator) +
ToString("isBreakDownATRLower", isBreakDownATRLower, ignoreFalseConditions, separator) +
ToString("isCloseOverAtrUpper", isCloseOverAtrUpper, ignoreFalseConditions, separator) +
ToString("isCloseOverAtrLower", isCloseOverAtrLower, ignoreFalseConditions, separator) +
ToString("isCloseUnderAtrUpper", isCloseUnderAtrUpper, ignoreFalseConditions, separator) +
ToString("isCloseUnderAtrLower", isCloseUnderAtrLower, ignoreFalseConditions, separator) +
ToString("isRejectUpAtrUpper", isRejectUpAtrUpper, ignoreFalseConditions, separator) +
ToString("isRejectDownAtrUpper", isRejectDownAtrUpper, ignoreFalseConditions, separator) +
ToString("isRejectUpAtrLower", isRejectUpAtrLower, ignoreFalseConditions, separator) +
ToString("isRejectDownAtrLower", isRejectDownAtrLower, ignoreFalseConditions, separator) +
ToString("isBreakUpAtrUpper", isBreakUpAtrUpper, ignoreFalseConditions, separator) +
ToString("isBreakDownAtrUpper", isBreakDownAtrUpper, ignoreFalseConditions, separator) +
ToString("isBreakUpAtrLower", isBreakUpAtrLower, ignoreFalseConditions, separator) +
ToString("isBreakDownAtrLower", isBreakDownAtrLower, ignoreFalseConditions, separator) +
//
""
//
@@ -999,56 +999,56 @@ class XCX121XATRHelper : public XCBaseHelper
// RSI ...
//
bool isRSIOverBought = conditions.rsiBuffer[cIDX] > mInputs.rsiOverBoughtLevel;
bool isRSIOverBoughtPrev = conditions.rsiBuffer[pIDX] > mInputs.rsiOverBoughtLevel;
bool isRsiOverBought = conditions.rsiBuffer[cIDX] > mInputs.rsiOverBoughtLevel;
bool isRsiOverBoughtPrev = conditions.rsiBuffer[pIDX] > mInputs.rsiOverBoughtLevel;
//
bool isRSICrossedOverOverBought = isRSIOverBought &&
!isRSIOverBoughtPrev;
bool isRSICrossedUnderOverBought = !isRSIOverBought &&
isRSIOverBoughtPrev;
bool isRsiCrossedOverOverBought = isRsiOverBought &&
!isRsiOverBoughtPrev;
bool isRsiCrossedUnderOverBought = !isRsiOverBought &&
isRsiOverBoughtPrev;
//
bool isRSIOverSold = conditions.rsiBuffer[cIDX] < mInputs.rsiOverSoldLevel;
bool isRSIOverSoldPrev = conditions.rsiBuffer[pIDX] < mInputs.rsiOverSoldLevel;
bool isRsiOverSold = conditions.rsiBuffer[cIDX] < mInputs.rsiOverSoldLevel;
bool isRsiOverSoldPrev = conditions.rsiBuffer[pIDX] < mInputs.rsiOverSoldLevel;
//
bool isRSICrossedUnderOverSold = isRSIOverSold &&
!isRSIOverSoldPrev;
bool isRSICrossedOverOverSold = !isRSIOverSold &&
isRSIOverSoldPrev;
bool isRsiCrossedUnderOverSold = isRsiOverSold &&
!isRsiOverSoldPrev;
bool isRsiCrossedOverOverSold = !isRsiOverSold &&
isRsiOverSoldPrev;
//
// ATR ...
//
bool isCloseOverATRUpper = cBar.close > conditions.atrUpperBuffer[cIDX];
bool isCloseOverATRLower = cBar.close > conditions.atrLowerBuffer[cIDX];
bool isCloseOverAtrUpper = cBar.close > conditions.atrUpperBuffer[cIDX];
bool isCloseOverAtrLower = cBar.close > conditions.atrLowerBuffer[cIDX];
//
bool isCloseUnderATRUpper = cBar.close < conditions.atrUpperBuffer[cIDX];
bool isCloseUnderATRLower = cBar.close < conditions.atrLowerBuffer[cIDX];
bool isCloseUnderAtrUpper = cBar.close < conditions.atrUpperBuffer[cIDX];
bool isCloseUnderAtrLower = cBar.close < conditions.atrLowerBuffer[cIDX];
//
bool isRejectUpATRUpper = IsBarReject(
bool isRejectUpAtrUpper = IsBarReject(
atrUpperBuffer[cIDX],
X_DIRECTION_BULLISH,
cBar //
);
bool isRejectDownATRUpper = IsBarReject(
bool isRejectDownAtrUpper = IsBarReject(
atrUpperBuffer[cIDX],
X_DIRECTION_BEARISH,
cBar //
);
//
bool isRejectUpATRLower = IsBarReject(
bool isRejectUpAtrLower = IsBarReject(
atrLowerBuffer[cIDX],
X_DIRECTION_BULLISH,
cBar //
);
;
bool isRejectDownATRLower = IsBarReject(
bool isRejectDownAtrLower = IsBarReject(
atrLowerBuffer[cIDX],
X_DIRECTION_BEARISH,
cBar //
@@ -1056,48 +1056,48 @@ class XCX121XATRHelper : public XCBaseHelper
;
//
bool isBreakUpATRUpper = IsBarBreak(
bool isBreakUpAtrUpper = IsBarBreak(
atrUpperBuffer[cIDX],
X_DIRECTION_BULLISH,
cBar //
);
bool isBreakDownATRUpper = IsBarBreak(
bool isBreakDownAtrUpper = IsBarBreak(
atrUpperBuffer[cIDX],
X_DIRECTION_BEARISH,
cBar //
);
//
bool isBreakUpATRLower = IsBarBreak(
bool isBreakUpAtrLower = IsBarBreak(
atrLowerBuffer[cIDX],
X_DIRECTION_BULLISH,
cBar //
);
bool isBreakDownATRLower = IsBarBreak(
bool isBreakDownAtrLower = IsBarBreak(
atrLowerBuffer[cIDX],
X_DIRECTION_BEARISH,
cBar //
);
//
conditions.isRSIOverSold = isRSIOverSold;
conditions.isRSIOverBought = isRSIOverBought;
conditions.isRejectUpATRUpper = isRejectUpATRUpper;
conditions.isRejectUpATRLower = isRejectUpATRLower;
conditions.isBreakUpATRUpper = isBreakUpATRUpper;
conditions.isBreakUpATRLower = isBreakUpATRLower;
conditions.isRejectDownATRUpper = isRejectDownATRUpper;
conditions.isRejectDownATRLower = isRejectDownATRLower;
conditions.isCloseOverATRUpper = isCloseOverATRUpper;
conditions.isCloseOverATRLower = isCloseOverATRLower;
conditions.isBreakDownATRUpper = isBreakDownATRUpper;
conditions.isBreakDownATRLower = isBreakDownATRLower;
conditions.isCloseUnderATRUpper = isCloseUnderATRUpper;
conditions.isCloseUnderATRLower = isCloseUnderATRLower;
conditions.isRSICrossedOverOverSold = isRSICrossedOverOverSold;
conditions.isRSICrossedUnderOverSold = isRSICrossedUnderOverSold;
conditions.isRSICrossedOverOverBought = isRSICrossedOverOverBought;
conditions.isRSICrossedUnderOverBought = isRSICrossedUnderOverBought;
conditions.isRsiOverSold = isRsiOverSold;
conditions.isRsiOverBought = isRsiOverBought;
conditions.isRejectUpAtrUpper = isRejectUpAtrUpper;
conditions.isRejectUpAtrLower = isRejectUpAtrLower;
conditions.isBreakUpAtrUpper = isBreakUpAtrUpper;
conditions.isBreakUpAtrLower = isBreakUpAtrLower;
conditions.isRejectDownAtrUpper = isRejectDownAtrUpper;
conditions.isRejectDownAtrLower = isRejectDownAtrLower;
conditions.isCloseOverAtrUpper = isCloseOverAtrUpper;
conditions.isCloseOverAtrLower = isCloseOverAtrLower;
conditions.isBreakDownAtrUpper = isBreakDownAtrUpper;
conditions.isBreakDownAtrLower = isBreakDownAtrLower;
conditions.isCloseUnderAtrUpper = isCloseUnderAtrUpper;
conditions.isCloseUnderAtrLower = isCloseUnderAtrLower;
conditions.isRsiCrossedOverOverSold = isRsiCrossedOverOverSold;
conditions.isRsiCrossedUnderOverSold = isRsiCrossedUnderOverSold;
conditions.isRsiCrossedOverOverBought = isRsiCrossedOverOverBought;
conditions.isRsiCrossedUnderOverBought = isRsiCrossedUnderOverBought;
//
return result;