last ...
This commit is contained in:
+388
-117
@@ -186,34 +186,34 @@ struct X121Conditions
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
bool isRSIOverBought;
|
||||
bool isRSICrossedOverOverBought;
|
||||
bool isRSICrossedUnderOverBought;
|
||||
bool isRSIOverSold;
|
||||
bool isRSICrossedUnderOverSold;
|
||||
bool isRSICrossedOverOverSold;
|
||||
bool isRsiOverBought;
|
||||
bool isRsiCrossedOverOverBought;
|
||||
bool isRsiCrossedUnderOverBought;
|
||||
bool isRsiOverSold;
|
||||
bool isRsiCrossedUnderOverSold;
|
||||
bool isRsiCrossedOverOverSold;
|
||||
|
||||
//
|
||||
bool isCloseOverATRUpper;
|
||||
bool isCloseOverATRLower;
|
||||
bool isCloseUnderATRUpper;
|
||||
bool isCloseUnderATRLower;
|
||||
bool isCloseOverAtrUpper;
|
||||
bool isCloseOverAtrLower;
|
||||
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 isRejectDonOpenUpper;
|
||||
@@ -294,20 +294,76 @@ struct X121Conditions
|
||||
bool isSarEqualsToVale;
|
||||
|
||||
//
|
||||
bool isNewPeakOverATRUpper;
|
||||
bool isNewValeUnderATRLower;
|
||||
bool isSarCrossedUnderPeak;
|
||||
bool isSarCrossedOverVale;
|
||||
|
||||
//
|
||||
bool isStrEqualsToPeak;
|
||||
bool isStrEqualsToVale;
|
||||
|
||||
//
|
||||
bool isStrCrossedUnderPeak;
|
||||
bool isStrCrossedOverVale;
|
||||
|
||||
//
|
||||
bool isPeakOverAtrUpper;
|
||||
bool isValeUnderAtrLower;
|
||||
|
||||
//
|
||||
bool isNewPeakOverAtrUpper;
|
||||
bool isNewValeUnderAtrLower;
|
||||
|
||||
//
|
||||
bool isStrUpperOverPeak;
|
||||
bool isStrUpperUnderPeak;
|
||||
|
||||
//
|
||||
bool isStrUpperCrossedOverPeak;
|
||||
bool isStrUpperCrossedUnderPeak;
|
||||
|
||||
//
|
||||
bool isStrLowerOverVale;
|
||||
bool isStrLowerUnderVale;
|
||||
|
||||
//
|
||||
bool isStrLowerCrossedOverVale;
|
||||
bool isStrLowerCrossedUnderVale;
|
||||
|
||||
//
|
||||
bool isDonHighUpperEqualsToPeak;
|
||||
bool isDonLowLowerEqualsToVale;
|
||||
|
||||
//
|
||||
bool isSTRUpperCrossedOverATRUpper;
|
||||
bool isSTRLowerCrossedUnderATRLower;
|
||||
bool isStrUpperOverAtrUpper;
|
||||
bool isStrUpperUnderAtrUpper;
|
||||
|
||||
//
|
||||
bool isSTRUpperCrossedOverDonHighUpper;
|
||||
bool isSTRLowerCrossedUnderDonLowLower;
|
||||
bool isStrLowerOverAtrLower;
|
||||
bool isStrLowerUnderAtrLower;
|
||||
|
||||
//
|
||||
bool isStrUpperCrossedOverAtrUpper;
|
||||
bool isStrUpperCrossedUnderAtrUpper;
|
||||
|
||||
//
|
||||
bool isStrLowerCrossedOverAtrLower;
|
||||
bool isStrLowerCrossedUnderAtrLower;
|
||||
|
||||
//
|
||||
bool isStrUpperOverDonHighUpper;
|
||||
bool isStrUpperUnderDonHighUpper;
|
||||
|
||||
//
|
||||
bool isStrLowerOverDonLowLower;
|
||||
bool isStrLowerUnderDonLowLower;
|
||||
|
||||
//
|
||||
bool isStrUpperCrossedOverDonHighUpper;
|
||||
bool isStrUpperCrossedUnderDonHighUpper;
|
||||
|
||||
//
|
||||
bool isStrLowerCrossedOverDonLowLower;
|
||||
bool isStrLowerCrossedUnderDonLowLower;
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
@@ -424,41 +480,41 @@ struct X121Conditions
|
||||
// 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;
|
||||
|
||||
//
|
||||
// DON ...
|
||||
@@ -574,20 +630,76 @@ struct X121Conditions
|
||||
isSarEqualsToVale = false;
|
||||
|
||||
//
|
||||
isNewPeakOverATRUpper = false;
|
||||
isNewValeUnderATRLower = false;
|
||||
isSarCrossedUnderPeak = false;
|
||||
isSarCrossedOverVale = false;
|
||||
|
||||
//
|
||||
isStrEqualsToPeak = false;
|
||||
isStrEqualsToVale = false;
|
||||
|
||||
//
|
||||
isStrCrossedUnderPeak = false;
|
||||
isStrCrossedOverVale = false;
|
||||
|
||||
//
|
||||
isPeakOverAtrUpper = false;
|
||||
isValeUnderAtrLower = false;
|
||||
|
||||
//
|
||||
isNewPeakOverAtrUpper = false;
|
||||
isNewValeUnderAtrLower = false;
|
||||
|
||||
//
|
||||
isStrUpperOverPeak = false;
|
||||
isStrUpperUnderPeak = false;
|
||||
|
||||
//
|
||||
isStrUpperCrossedOverPeak = false;
|
||||
isStrUpperCrossedUnderPeak = false;
|
||||
|
||||
//
|
||||
isStrLowerOverVale = false;
|
||||
isStrLowerUnderVale = false;
|
||||
|
||||
//
|
||||
isStrLowerCrossedOverVale = false;
|
||||
isStrLowerCrossedUnderVale = false;
|
||||
|
||||
//
|
||||
isDonHighUpperEqualsToPeak = false;
|
||||
isDonLowLowerEqualsToVale = false;
|
||||
|
||||
//
|
||||
isSTRUpperCrossedOverATRUpper = false;
|
||||
isSTRLowerCrossedUnderATRLower = false;
|
||||
isStrUpperOverAtrUpper = false;
|
||||
isStrUpperUnderAtrUpper = false;
|
||||
|
||||
//
|
||||
isSTRUpperCrossedOverDonHighUpper = false;
|
||||
isSTRLowerCrossedUnderDonLowLower = false;
|
||||
isStrLowerOverAtrLower = false;
|
||||
isStrLowerUnderAtrLower = false;
|
||||
|
||||
//
|
||||
isStrUpperCrossedOverAtrUpper = false;
|
||||
isStrUpperCrossedUnderAtrUpper = false;
|
||||
|
||||
//
|
||||
isStrLowerCrossedOverAtrLower = false;
|
||||
isStrLowerCrossedUnderAtrLower = false;
|
||||
|
||||
//
|
||||
isStrUpperOverDonHighUpper = false;
|
||||
isStrUpperUnderDonHighUpper = false;
|
||||
|
||||
//
|
||||
isStrLowerOverDonLowLower = false;
|
||||
isStrLowerUnderDonLowLower = false;
|
||||
|
||||
//
|
||||
isStrUpperCrossedOverDonHighUpper = false;
|
||||
isStrUpperCrossedUnderDonHighUpper = false;
|
||||
|
||||
//
|
||||
isStrLowerCrossedOverDonLowLower = false;
|
||||
isStrLowerCrossedUnderDonLowLower = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -657,6 +769,7 @@ struct X121Conditions
|
||||
//
|
||||
string conditionsStr =
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"SAR ..." + separator +
|
||||
"-----------------------" + separator +
|
||||
ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) +
|
||||
@@ -664,6 +777,7 @@ struct X121Conditions
|
||||
ToString("isSarSwitchedToBullish", isSarSwitchedToBullish, ignoreFalseConditions, separator) +
|
||||
ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"STR ..." + separator +
|
||||
"-----------------------" + separator +
|
||||
ToString("isStrBullish", isStrBullish, ignoreFalseConditions, separator) +
|
||||
@@ -671,6 +785,7 @@ struct X121Conditions
|
||||
ToString("isStrSwitchedToBullish", isStrSwitchedToBullish, ignoreFalseConditions, separator) +
|
||||
ToString("isStrSwitchedToBearish", isStrSwitchedToBearish, ignoreFalseConditions, separator) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"PV ..." + separator +
|
||||
"-----------------------" + separator +
|
||||
ToString("isNewPeak", isNewPeak, ignoreFalseConditions, separator) +
|
||||
@@ -680,32 +795,35 @@ struct X121Conditions
|
||||
ToString("isNewValeOverLast", isNewValeOverLast, ignoreFalseConditions, separator) +
|
||||
ToString("isNewValeUnderLast", isNewValeUnderLast, ignoreFalseConditions, separator) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"> RSI ..." + separator +
|
||||
"-----------------------" + 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) +
|
||||
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) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"ATR ..." + separator +
|
||||
"-----------------------" + 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("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) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"DON ..." + separator +
|
||||
"-----------------------" + separator +
|
||||
ToString("isBreakDownATRLower", isBreakDownATRLower, ignoreFalseConditions, separator) +
|
||||
ToString("isBreakDownAtrLower", isBreakDownAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isRejectDonOpenUpper", isRejectDonOpenUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isRejectDonHighUpper", isRejectDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isRejectDonLowUpper", isRejectDonLowUpper, ignoreFalseConditions, separator) +
|
||||
@@ -723,6 +841,7 @@ struct X121Conditions
|
||||
ToString("isBreakDonLowLower", isBreakDonLowLower, ignoreFalseConditions, separator) +
|
||||
ToString("isBreakDonCloseLower", isBreakDonCloseLower, ignoreFalseConditions, separator) +
|
||||
//
|
||||
"-----------------------" + separator +
|
||||
"VWAP ..." + separator +
|
||||
"-----------------------" + separator +
|
||||
ToString("isVWapFastBullish", isVWapFastBullish, ignoreFalseConditions, separator) +
|
||||
@@ -754,14 +873,42 @@ struct X121Conditions
|
||||
"-----------------------" + separator +
|
||||
ToString("isSarEqualsToPeak", isSarEqualsToPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isSarEqualsToVale", isSarEqualsToVale, ignoreFalseConditions, separator) +
|
||||
ToString("isNewPeakOverATRUpper", isNewPeakOverATRUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isNewValeUnderATRLower", isNewValeUnderATRLower, ignoreFalseConditions, separator) +
|
||||
ToString("isSarCrossedUnderPeak", isSarCrossedUnderPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isSarCrossedOverVale", isSarCrossedOverVale, ignoreFalseConditions, separator) +
|
||||
ToString("isStrEqualsToPeak", isStrEqualsToPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrEqualsToVale", isStrEqualsToVale, ignoreFalseConditions, separator) +
|
||||
ToString("isStrCrossedUnderPeak", isStrCrossedUnderPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrCrossedOverVale", isStrCrossedOverVale, ignoreFalseConditions, separator) +
|
||||
ToString("isPeakOverAtrUpper", isPeakOverAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isValeUnderAtrLower", isValeUnderAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isNewPeakOverAtrUpper", isNewPeakOverAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isNewValeUnderAtrLower", isNewValeUnderAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperOverPeak", isStrUpperOverPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperUnderPeak", isStrUpperUnderPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedOverPeak", isStrUpperCrossedOverPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedUnderPeak", isStrUpperCrossedUnderPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerOverVale", isStrLowerOverVale, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerUnderVale", isStrLowerUnderVale, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedOverVale", isStrLowerCrossedOverVale, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedUnderVale", isStrLowerCrossedUnderVale, ignoreFalseConditions, separator) +
|
||||
ToString("isDonHighUpperEqualsToPeak", isDonHighUpperEqualsToPeak, ignoreFalseConditions, separator) +
|
||||
ToString("isDonLowLowerEqualsToVale", isDonLowLowerEqualsToVale, ignoreFalseConditions, separator) +
|
||||
ToString("isSTRUpperCrossedOverATRUpper", isSTRUpperCrossedOverATRUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isSTRLowerCrossedUnderATRLower", isSTRLowerCrossedUnderATRLower, ignoreFalseConditions, separator) +
|
||||
ToString("isSTRUpperCrossedOverDonHighUpper", isSTRUpperCrossedOverDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isSTRLowerCrossedUnderDonLowLower", isSTRLowerCrossedUnderDonLowLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperOverAtrUpper", isStrUpperOverAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperUnderAtrUpper", isStrUpperUnderAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerOverAtrLower", isStrLowerOverAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerUnderAtrLower", isStrLowerUnderAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedOverAtrUpper", isStrUpperCrossedOverAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedUnderAtrUpper", isStrUpperCrossedUnderAtrUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedOverAtrLower", isStrLowerCrossedOverAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedUnderAtrLower", isStrLowerCrossedUnderAtrLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperOverDonHighUpper", isStrUpperOverDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperUnderDonHighUpper", isStrUpperUnderDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerOverDonLowLower", isStrLowerOverDonLowLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerUnderDonLowLower", isStrLowerUnderDonLowLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedOverDonHighUpper", isStrUpperCrossedOverDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrUpperCrossedUnderDonHighUpper", isStrUpperCrossedUnderDonHighUpper, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedOverDonLowLower", isStrLowerCrossedOverDonLowLower, ignoreFalseConditions, separator) +
|
||||
ToString("isStrLowerCrossedUnderDonLowLower", isStrLowerCrossedUnderDonLowLower, ignoreFalseConditions, separator) +
|
||||
//
|
||||
""
|
||||
//
|
||||
@@ -1378,24 +1525,24 @@ class XCX121Helper : public XCBase
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
conditions.isRSIOverSold = xatrConditions.isRSIOverSold;
|
||||
conditions.isRSIOverBought = xatrConditions.isRSIOverBought;
|
||||
conditions.isBreakUpATRUpper = xatrConditions.isBreakUpATRUpper;
|
||||
conditions.isBreakUpATRLower = xatrConditions.isBreakUpATRLower;
|
||||
conditions.isCloseOverATRUpper = xatrConditions.isCloseOverATRUpper;
|
||||
conditions.isRejectUpATRUpper = xatrConditions.isRejectUpATRUpper;
|
||||
conditions.isRejectUpATRLower = xatrConditions.isRejectUpATRLower;
|
||||
conditions.isCloseOverATRLower = xatrConditions.isCloseOverATRLower;
|
||||
conditions.isBreakDownATRUpper = xatrConditions.isBreakDownATRUpper;
|
||||
conditions.isBreakDownATRLower = xatrConditions.isBreakDownATRLower;
|
||||
conditions.isCloseUnderATRUpper = xatrConditions.isCloseUnderATRUpper;
|
||||
conditions.isCloseUnderATRLower = xatrConditions.isCloseUnderATRLower;
|
||||
conditions.isRejectDownATRUpper = xatrConditions.isRejectDownATRUpper;
|
||||
conditions.isRejectDownATRLower = xatrConditions.isRejectDownATRLower;
|
||||
conditions.isRSICrossedOverOverSold = xatrConditions.isRSICrossedOverOverSold;
|
||||
conditions.isRSICrossedUnderOverSold = xatrConditions.isRSICrossedUnderOverSold;
|
||||
conditions.isRSICrossedOverOverBought = xatrConditions.isRSICrossedOverOverBought;
|
||||
conditions.isRSICrossedUnderOverBought = xatrConditions.isRSICrossedUnderOverBought;
|
||||
conditions.isRsiOverSold = xatrConditions.isRsiOverSold;
|
||||
conditions.isRsiOverBought = xatrConditions.isRsiOverBought;
|
||||
conditions.isBreakUpAtrUpper = xatrConditions.isBreakUpAtrUpper;
|
||||
conditions.isBreakUpAtrLower = xatrConditions.isBreakUpAtrLower;
|
||||
conditions.isCloseOverAtrUpper = xatrConditions.isCloseOverAtrUpper;
|
||||
conditions.isRejectUpAtrUpper = xatrConditions.isRejectUpAtrUpper;
|
||||
conditions.isRejectUpAtrLower = xatrConditions.isRejectUpAtrLower;
|
||||
conditions.isCloseOverAtrLower = xatrConditions.isCloseOverAtrLower;
|
||||
conditions.isBreakDownAtrUpper = xatrConditions.isBreakDownAtrUpper;
|
||||
conditions.isBreakDownAtrLower = xatrConditions.isBreakDownAtrLower;
|
||||
conditions.isCloseUnderAtrUpper = xatrConditions.isCloseUnderAtrUpper;
|
||||
conditions.isCloseUnderAtrLower = xatrConditions.isCloseUnderAtrLower;
|
||||
conditions.isRejectDownAtrUpper = xatrConditions.isRejectDownAtrUpper;
|
||||
conditions.isRejectDownAtrLower = xatrConditions.isRejectDownAtrLower;
|
||||
conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold;
|
||||
conditions.isRsiCrossedUnderOverSold = xatrConditions.isRsiCrossedUnderOverSold;
|
||||
conditions.isRsiCrossedOverOverBought = xatrConditions.isRsiCrossedOverOverBought;
|
||||
conditions.isRsiCrossedUnderOverBought = xatrConditions.isRsiCrossedUnderOverBought;
|
||||
|
||||
//
|
||||
// XSTR ...
|
||||
@@ -1613,13 +1760,77 @@ class XCX121Helper : public XCBase
|
||||
conditions.sarBuffer[cIDX] == conditions.valesBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isNewPeakOverATRUpper =
|
||||
conditions.isNewPeak &&
|
||||
bool isSarCrossedUnderPeak =
|
||||
conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] &&
|
||||
!(conditions.sarBuffer[pIDX] < conditions.peaksBuffer[pIDX]);
|
||||
bool isSarCrossedOverVale =
|
||||
conditions.sarBuffer[cIDX] > conditions.valesBuffer[cIDX] &&
|
||||
!(conditions.sarBuffer[pIDX] > conditions.valesBuffer[pIDX]);
|
||||
|
||||
//
|
||||
bool isStrEqualsToPeak =
|
||||
conditions.strBuffer[cIDX] == conditions.peaksBuffer[cIDX];
|
||||
bool isStrEqualsToVale =
|
||||
conditions.strBuffer[cIDX] == conditions.valesBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isStrCrossedUnderPeak =
|
||||
conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX] &&
|
||||
!(conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX]);
|
||||
bool isStrCrossedOverVale =
|
||||
conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX] &&
|
||||
!(conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX]);
|
||||
|
||||
//
|
||||
bool isPeakOverAtrUpper =
|
||||
conditions.peaksBuffer[cIDX] > conditions.atrUpperBuffer[cIDX];
|
||||
bool isNewValeUnderATRLower =
|
||||
conditions.isNewVale &&
|
||||
bool isValeUnderAtrLower =
|
||||
conditions.valesBuffer[cIDX] > conditions.atrLowerBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isNewPeakOverAtrUpper =
|
||||
isPeakOverAtrUpper &&
|
||||
conditions.isNewPeak;
|
||||
bool isNewValeUnderAtrLower =
|
||||
isValeUnderAtrLower &&
|
||||
conditions.isNewVale;
|
||||
|
||||
//
|
||||
bool isStrUpperOverPeak =
|
||||
conditions.strBuffer[cIDX] > conditions.peaksBuffer[cIDX];
|
||||
bool isStrUpperOverPeakPrev =
|
||||
conditions.strBuffer[pIDX] > conditions.peaksBuffer[pIDX];
|
||||
|
||||
//
|
||||
bool isStrUpperUnderPeak =
|
||||
conditions.strBuffer[cIDX] < conditions.peaksBuffer[cIDX];
|
||||
bool isStrUpperUnderPeakPrev =
|
||||
conditions.strBuffer[pIDX] < conditions.peaksBuffer[pIDX];
|
||||
|
||||
//
|
||||
bool isStrUpperCrossedOverPeak = isStrUpperOverPeak &&
|
||||
!isStrUpperOverPeakPrev;
|
||||
bool isStrUpperCrossedUnderPeak = isStrUpperUnderPeak &&
|
||||
!isStrUpperUnderPeakPrev;
|
||||
|
||||
//
|
||||
bool isStrLowerOverVale =
|
||||
conditions.strBuffer[cIDX] > conditions.valesBuffer[cIDX];
|
||||
bool isStrLowerOverValePrev =
|
||||
conditions.strBuffer[pIDX] > conditions.valesBuffer[pIDX];
|
||||
|
||||
//
|
||||
bool isStrLowerUnderVale =
|
||||
conditions.strBuffer[cIDX] < conditions.valesBuffer[cIDX];
|
||||
bool isStrLowerUnderValePrev =
|
||||
conditions.strBuffer[pIDX] < conditions.valesBuffer[pIDX];
|
||||
|
||||
//
|
||||
bool isStrLowerCrossedOverVale = isStrLowerOverVale &&
|
||||
!isStrLowerOverValePrev;
|
||||
bool isStrLowerCrossedUnderVale = isStrLowerUnderVale &&
|
||||
!isStrLowerUnderValePrev;
|
||||
|
||||
//
|
||||
bool isDonHighUpperEqualsToPeak =
|
||||
conditions.donHighUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX];
|
||||
@@ -1627,48 +1838,108 @@ class XCX121Helper : public XCBase
|
||||
conditions.donLowLowerBuffer[cIDX] == conditions.valesBuffer[cIDX];
|
||||
|
||||
//
|
||||
bool isSTRUpperOverATRUpper =
|
||||
bool isStrUpperOverAtrUpper =
|
||||
conditions.strUpBuffer[cIDX] > conditions.atrUpperBuffer[cIDX];
|
||||
bool isSTRUpperOverATRUpperPrev =
|
||||
bool isStrUpperOverAtrUpperPrev =
|
||||
conditions.strUpBuffer[pIDX] > conditions.atrUpperBuffer[pIDX];
|
||||
bool isSTRUpperCrossedOverATRUpper = isSTRUpperOverATRUpper &&
|
||||
!isSTRUpperOverATRUpperPrev;
|
||||
bool isStrUpperCrossedOverAtrUpper = isStrUpperOverAtrUpper &&
|
||||
!isStrUpperOverAtrUpperPrev;
|
||||
|
||||
//
|
||||
bool isSTRLowerUnderATRLower =
|
||||
bool isStrUpperUnderAtrUpper =
|
||||
conditions.strUpBuffer[cIDX] < conditions.atrUpperBuffer[cIDX];
|
||||
bool isStrUpperUnderAtrUpperPrev =
|
||||
conditions.strUpBuffer[pIDX] < conditions.atrUpperBuffer[pIDX];
|
||||
bool isStrUpperCrossedUnderAtrUpper = isStrUpperUnderAtrUpper &&
|
||||
!isStrUpperUnderAtrUpperPrev;
|
||||
|
||||
//
|
||||
bool isStrLowerOverAtrLower =
|
||||
conditions.strDownBuffer[cIDX] > conditions.atrLowerBuffer[cIDX];
|
||||
bool isStrLowerOverAtrLowerPrev =
|
||||
conditions.strDownBuffer[pIDX] > conditions.atrLowerBuffer[pIDX];
|
||||
bool isStrLowerCrossedOverAtrLower = isStrLowerOverAtrLower &&
|
||||
!isStrLowerOverAtrLowerPrev;
|
||||
|
||||
//
|
||||
bool isStrLowerUnderAtrLower =
|
||||
conditions.strDownBuffer[cIDX] < conditions.atrLowerBuffer[cIDX];
|
||||
bool isSTRLowerUnderATRLowerPrev =
|
||||
bool isStrLowerUnderAtrLowerPrev =
|
||||
conditions.strDownBuffer[pIDX] < conditions.atrLowerBuffer[pIDX];
|
||||
bool isSTRLowerCrossedUnderATRLower = isSTRLowerUnderATRLower &&
|
||||
!isSTRLowerUnderATRLowerPrev;
|
||||
bool isStrLowerCrossedUnderAtrLower = isStrLowerUnderAtrLower &&
|
||||
!isStrLowerUnderAtrLowerPrev;
|
||||
|
||||
//
|
||||
bool isSTRUpperOverDonHighUpper =
|
||||
bool isStrUpperOverDonHighUpper =
|
||||
conditions.strUpBuffer[cIDX] > conditions.donHighUpperBuffer[cIDX];
|
||||
bool isSTRUpperOverDonHighUpperPrev =
|
||||
bool isStrUpperOverDonHighUpperPrev =
|
||||
conditions.strUpBuffer[pIDX] > conditions.donHighUpperBuffer[pIDX];
|
||||
bool isSTRUpperCrossedOverDonHighUpper = isSTRUpperOverDonHighUpper &&
|
||||
!isSTRUpperOverDonHighUpperPrev;
|
||||
bool isStrUpperCrossedOverDonHighUpper = isStrUpperOverDonHighUpper &&
|
||||
!isStrUpperOverDonHighUpperPrev;
|
||||
|
||||
//
|
||||
bool isSTRLowerUnderDonLowLower =
|
||||
bool isStrUpperUnderDonHighUpper =
|
||||
conditions.strUpBuffer[cIDX] < conditions.donHighUpperBuffer[cIDX];
|
||||
bool isStrUpperUnderDonHighUpperPrev =
|
||||
conditions.strUpBuffer[pIDX] < conditions.donHighUpperBuffer[pIDX];
|
||||
bool isStrUpperCrossedUnderDonHighUpper = isStrUpperUnderDonHighUpper &&
|
||||
!isStrUpperUnderDonHighUpperPrev;
|
||||
|
||||
//
|
||||
bool isStrLowerOverDonLowLower =
|
||||
conditions.strDownBuffer[cIDX] > conditions.donLowLowerBuffer[cIDX];
|
||||
bool isStrLowerOverDonLowLowerPrev =
|
||||
conditions.strDownBuffer[pIDX] > conditions.donLowLowerBuffer[pIDX];
|
||||
bool isStrLowerCrossedOverDonLowLower = isStrLowerOverDonLowLower &&
|
||||
!isStrLowerOverDonLowLowerPrev;
|
||||
|
||||
//
|
||||
bool isStrLowerUnderDonLowLower =
|
||||
conditions.strDownBuffer[cIDX] < conditions.donLowLowerBuffer[cIDX];
|
||||
bool isSTRLowerUnderDonLowLowerPrev =
|
||||
bool isStrLowerUnderDonLowLowerPrev =
|
||||
conditions.strDownBuffer[pIDX] < conditions.donLowLowerBuffer[pIDX];
|
||||
bool isSTRLowerCrossedUnderDonLowLower = isSTRLowerUnderDonLowLower &&
|
||||
!isSTRLowerUnderDonLowLowerPrev;
|
||||
bool isStrLowerCrossedUnderDonLowLower = isStrLowerUnderDonLowLower &&
|
||||
!isStrLowerUnderDonLowLowerPrev;
|
||||
|
||||
//
|
||||
conditions.isSarEqualsToPeak = isSarEqualsToPeak;
|
||||
conditions.isSarEqualsToVale = isSarEqualsToVale;
|
||||
conditions.isNewPeakOverATRUpper = isNewPeakOverATRUpper;
|
||||
conditions.isNewValeUnderATRLower = isNewValeUnderATRLower;
|
||||
conditions.isDonHighUpperEqualsToPeak = isDonHighUpperEqualsToPeak;
|
||||
conditions.isStrEqualsToPeak = isStrEqualsToPeak;
|
||||
conditions.isStrEqualsToVale = isStrEqualsToVale;
|
||||
conditions.isStrUpperOverPeak = isStrUpperOverPeak;
|
||||
conditions.isPeakOverAtrUpper = isPeakOverAtrUpper;
|
||||
conditions.isStrLowerOverVale = isStrLowerOverVale;
|
||||
conditions.isStrLowerUnderVale = isStrLowerUnderVale;
|
||||
conditions.isStrUpperUnderPeak = isStrUpperUnderPeak;
|
||||
conditions.isValeUnderAtrLower = isValeUnderAtrLower;
|
||||
conditions.isSarCrossedOverVale = isSarCrossedOverVale;
|
||||
conditions.isStrCrossedOverVale = isStrCrossedOverVale;
|
||||
conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak;
|
||||
conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak;
|
||||
conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper;
|
||||
conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower;
|
||||
conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper;
|
||||
conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower;
|
||||
conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper;
|
||||
conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower;
|
||||
conditions.isDonLowLowerEqualsToVale = isDonLowLowerEqualsToVale;
|
||||
conditions.isSTRUpperCrossedOverATRUpper = isSTRUpperCrossedOverATRUpper;
|
||||
conditions.isSTRLowerCrossedUnderATRLower = isSTRLowerCrossedUnderATRLower;
|
||||
conditions.isSTRUpperCrossedOverDonHighUpper = isSTRUpperCrossedOverDonHighUpper;
|
||||
conditions.isSTRLowerCrossedUnderDonLowLower = isSTRLowerCrossedUnderDonLowLower;
|
||||
conditions.isStrUpperCrossedOverPeak = isStrUpperCrossedOverPeak;
|
||||
conditions.isStrLowerCrossedOverVale = isStrLowerCrossedOverVale;
|
||||
conditions.isStrLowerOverDonLowLower = isStrLowerOverDonLowLower;
|
||||
conditions.isStrUpperOverDonHighUpper = isStrUpperOverDonHighUpper;
|
||||
conditions.isStrLowerUnderDonLowLower = isStrLowerUnderDonLowLower;
|
||||
conditions.isDonHighUpperEqualsToPeak = isDonHighUpperEqualsToPeak;
|
||||
conditions.isStrUpperCrossedUnderPeak = isStrUpperCrossedUnderPeak;
|
||||
conditions.isStrLowerCrossedUnderVale = isStrLowerCrossedUnderVale;
|
||||
conditions.isStrUpperUnderDonHighUpper = isStrUpperUnderDonHighUpper;
|
||||
conditions.isStrLowerCrossedOverAtrLower = isStrLowerCrossedOverAtrLower;
|
||||
conditions.isStrUpperCrossedOverAtrUpper = isStrUpperCrossedOverAtrUpper;
|
||||
conditions.isStrUpperCrossedUnderAtrUpper = isStrUpperCrossedUnderAtrUpper;
|
||||
conditions.isStrLowerCrossedUnderAtrLower = isStrLowerCrossedUnderAtrLower;
|
||||
conditions.isStrLowerCrossedOverDonLowLower = isStrLowerCrossedOverDonLowLower;
|
||||
conditions.isStrUpperCrossedOverDonHighUpper = isStrUpperCrossedOverDonHighUpper;
|
||||
conditions.isStrLowerCrossedUnderDonLowLower = isStrLowerCrossedUnderDonLowLower;
|
||||
conditions.isStrUpperCrossedUnderDonHighUpper = isStrUpperCrossedUnderDonHighUpper;
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -743,6 +743,59 @@ class XCX121XSTRHelper : public XCBaseHelper
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
double GetLastSTR(
|
||||
ENUM_X_DIRECTION dir,
|
||||
int barIndex = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
double result = 0;
|
||||
|
||||
//
|
||||
if (barIndex < 0)
|
||||
{
|
||||
barIndex = 0;
|
||||
}
|
||||
|
||||
//
|
||||
if (!HasDirection(dir))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int index = barIndex;
|
||||
bool isBullish = IsBullish(dir);
|
||||
|
||||
//
|
||||
bool canContinue = true;
|
||||
while (canContinue)
|
||||
{
|
||||
//
|
||||
double iStr = GetSTR(index);
|
||||
double iState = GetSTRState(index);
|
||||
|
||||
//
|
||||
canContinue =
|
||||
isBullish
|
||||
? iState < 0
|
||||
: iState > 0;
|
||||
if (!canContinue)
|
||||
{
|
||||
//
|
||||
result = iStr;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
index++;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool GetConditions(
|
||||
X121XSTRConditions &conditions, //
|
||||
|
||||
Reference in New Issue
Block a user