/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Helper Class Library // ---------------------------------------------- // Name: XCX121Helper // Description: provides all Indicator // Helper requirements ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Imports ... #include "../Helpers/x-saherelm.x121.x3ma.helper.mq5" #include "../Helpers/x-saherelm.x121.xatr.helper.mq5" #include "../Helpers/x-saherelm.x121.xcc.helper.mq5" #include "../Helpers/x-saherelm.x121.xche.helper.mq5" #include "../Helpers/x-saherelm.x121.xdon.helper.mq5" #include "../Helpers/x-saherelm.x121.xhk.helper.mq5" #include "../Helpers/x-saherelm.x121.xmas.helper.mq5" #include "../Helpers/x-saherelm.x121.xpv.helper.mq5" #include "../Helpers/x-saherelm.x121.xstr.helper.mq5" #include "../Helpers/x-saherelm.x121.xvwap.helper.mq5" // // Inputs ... struct X121Inputs { // // Props ... bool showRSI; X121XCCInputs xccInputs; X121XPVInputs xpvInputs; X121XHKInputs xhkInputs; X121XMASInputs xmasInputs; X121XATRInputs xatrInputs; X121XSTRInputs xstrInputs; X121XCHEInputs xcheInputs; X121XDONInputs xdonInputs; X121X3MAInputs x3maInputs; X121XVWAPInputs xvwapInputs; // // Constructor ... X121Inputs() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // xccInputs.Clean(); xpvInputs.Clean(); xhkInputs.Clean(); xmasInputs.Clean(); xatrInputs.Clean(); xstrInputs.Clean(); xcheInputs.Clean(); xdonInputs.Clean(); xvwapInputs.Clean(); // ZeroMemory(this); } /** * Set Default Values ... */ void Default() { // xccInputs.Default(); xpvInputs.Default(); xhkInputs.Default(); xmasInputs.Default(); xatrInputs.Default(); xstrInputs.Default(); xcheInputs.Default(); xdonInputs.Default(); x3maInputs.Default(); xvwapInputs.Default(); } /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = // xccInputs.IsValid() && xpvInputs.IsValid() && xhkInputs.IsValid() && xmasInputs.IsValid() && xatrInputs.IsValid() && xstrInputs.IsValid() && xcheInputs.IsValid() && xdonInputs.IsValid() && xvwapInputs.IsValid() // ; // return result; } /** * Extract Max Input Length ... * * @return ( int ) */ int Max() { // int result = 0; // int xpvMax = xpvInputs.Max(); int xhkMax = xpvInputs.Max(); int xmasMax = xpvInputs.Max(); int xatrMax = xatrInputs.Max(); int xstrMax = xstrInputs.Max(); int xcheMax = xcheInputs.Max(); int xdonMax = xdonInputs.Max(); int xvwapMax = xvwapInputs.Max(); // result = MathMax(xpvMax, xhkMax); result = MathMax(result, xmasMax); result = MathMax(result, xatrMax); result = MathMax(result, xstrMax); result = MathMax(result, xcheMax); result = MathMax(result, xdonMax); result = MathMax(result, xvwapMax); // return result; } }; // // Conditions ... struct X121Conditions { // // Common ... string symbol; ENUM_TIMEFRAMES period; datetime time; // // Buffers ... double maBuffer[]; double rsiBuffer[]; double atrBuffer[]; double strBuffer[]; double le1Buffer[]; double se1Buffer[]; double le2Buffer[]; double se2Buffer[]; double sarBuffer[]; double cHHBuffer[]; double cLLBuffer[]; double sHHBuffer[]; double sLLBuffer[]; double mHHBuffer[]; double mLLBuffer[]; double lHHBuffer[]; double lLLBuffer[]; double hHHBuffer[]; double hLLBuffer[]; double upTBuffer[]; double adxBuffer[]; double adxPBuffer[]; double adxMBuffer[]; long volumeBuffer[]; double peaksBuffer[]; double valesBuffer[]; double strUpBuffer[]; double downTBuffer[]; double masMidBuffer[]; double masUpperBuffer[]; double masLowerBuffer[]; double strDownBuffer[]; double vwapMidBuffer[]; double upTrendBuffer[]; double x3maMidBuffer[]; double le1StartBuffer[]; double se1StartBuffer[]; double le2StartBuffer[]; double se2StartBuffer[]; double strPriceBuffer[]; double atrUpperBuffer[]; double atrLowerBuffer[]; double strStateBuffer[]; double vwapFastBuffer[]; double vwapSlowBuffer[]; double xhkSMLowBuffer[]; double x3maFastBuffer[]; double x3maSlowBuffer[]; double supportsBuffer[]; double downTrendBuffer[]; double vwapPriceBuffer[]; double xhkRawLowBuffer[]; double xhkSMOpenBuffer[]; double xhkSMHighBuffer[]; double xhkRawOpenBuffer[]; double xhkRawHighBuffer[]; double xhkSMCloseBuffer[]; double vwapVolumeBuffer[]; double peaksGoldenBuffer[]; double valesGoldenBuffer[]; double xhkRawCloseBuffer[]; double atrUpperRawBuffer[]; double atrLowerRawBuffer[]; double donLowUpperBuffer[]; double donLowLowerBuffer[]; double resistancesBuffer[]; double vwapMidStateBuffer[]; double donOpenUpperBuffer[]; double donOpenLowerBuffer[]; double donHighUpperBuffer[]; double donHighLowerBuffer[]; double x3maMidStateBuffer[]; double fractalsUpperBuffer[]; double fractalsLowerBuffer[]; double vwapFastStateBuffer[]; double vwapSlowStateBuffer[]; double donCloseUpperBuffer[]; double donCloseLowerBuffer[]; double x3maFastStateBuffer[]; double x3maSlowStateBuffer[]; // double rsiSlope; double strSlope; double atrUpperSlope; double atrLowerSlope; double vwapFastSlope; double vwapMidSlope; double vwapSlowSlope; // // Conditions ... // bool isRsiSlopeBullish; bool isStrSlopeBullish; bool isAtrUpperSlopeBullish; bool isAtrLowerSlopeBullish; bool isVwapFastSlopeBullish; bool isVwapMidSlopeBullish; bool isVwapSlowSlopeBullish; // bool isRsiSlopeBearish; bool isStrSlopeBearish; bool isAtrUpperSlopeBearish; bool isAtrLowerSlopeBearish; bool isVwapFastSlopeBearish; bool isVwapMidSlopeBearish; bool isVwapSlowSlopeBearish; // bool isRsiOverSold; bool isRsiOverBought; bool isRsiCrossedOverOverSold; bool isRsiCrossedUnderOverSold; bool isRsiCrossedOverOverBought; bool isRsiCrossedUnderOverBought; // bool isClosedOverAtrUpper; bool isClosedOverAtrLower; bool isClosedUnderAtrUpper; bool isClosedUnderAtrLower; // bool isSarBullish; bool isSarBearish; bool isSarSwitchedToBullish; bool isSarSwitchedToBearish; // bool isNewPeak; bool isNewPeakOverLast; bool isNewPeakUnderLast; // bool isNewVale; bool isNewValeOverLast; bool isNewValeUnderLast; // bool isStrBullish; bool isStrBearish; bool isStrSwitchedToBullish; bool isStrSwitchedToBearish; // bool isChe1Bullish; bool isChe1Bearish; bool isChe1SwitchedToBullish; bool isChe1SwitchedToBearish; // bool isChe2Bullish; bool isChe2Bearish; bool isChe2SwitchedToBullish; bool isChe2SwitchedToBearish; // bool isCheBullish; bool isCheBearish; bool isCheSwitchedToBullish; bool isCheSwitchedToBearish; // bool isVWapMidBullish; bool isVWapMidBearish; bool isVWapFastBullish; bool isVWapFastBearish; bool isVWapMidNeutural; bool isVWapSlowBullish; bool isVWapSlowBearish; bool isVWapFastOverMid; bool isVWapMidOverSlow; bool isVWapFastNeutural; bool isVWapSlowNeutural; bool isVWapFastUnderMid; bool isVWapMidUnderSlow; bool isVWapBullishState; bool isVWapBearishState; bool isVWapNeuturalState; bool isVWapBullishOrdered; bool isVWapBearishOrdered; bool isVWapSwitchedToBullishState; bool isVWapSwitchedToBearishState; bool isVWapSwitchedToNeuturalState; bool isVWapSwitchedToBullishOrdered; bool isVWapSwitchedToBearishOrdered; // bool isX3MaMidBullish; bool isX3MaMidBearish; bool isX3MaFastBullish; bool isX3MaFastBearish; bool isX3MaMidNeutural; bool isX3MaSlowBullish; bool isX3MaSlowBearish; bool isX3MaFastOverMid; bool isX3MaMidOverSlow; bool isX3MaFastNeutural; bool isX3MaSlowNeutural; bool isX3MaFastUnderMid; bool isX3MaMidUnderSlow; bool isX3MaBullishState; bool isX3MaBearishState; bool isX3MaNeuturalState; bool isX3MaBullishOrdered; bool isX3MaBearishOrdered; bool isX3MaSwitchedToBullishState; bool isX3MaSwitchedToBearishState; bool isX3MaSwitchedToNeuturalState; bool isX3MaSwitchedToBullishOrdered; bool isX3MaSwitchedToBearishOrdered; // bool isSMHKBullish; bool isRawHKBullish; bool isSMHKBearish; bool isRawHKBearish; bool isClosedOverSMHK; bool isClosedUnderSMHK; bool isClosedOverRawHK; bool isClosedUnderRawHK; bool isRawHKClosedOverSMHK; bool isRawHKClosedUnderSMHK; bool isSMHKSwitchedToBullish; bool isSMHKSwitchedToBearish; bool isRawHKSwitchedToBearish; bool isRawHKSwitchedToBullish; // // Complex Conditions ... // double cheMin; double cheMax; double x3maMin; double x3maMax; double vwapMin; double vwapMax; // bool isSarIncreased; bool isSarDecreased; bool isX3MaFatsOverMid; bool isSarEqualsToPeak; bool isSarEqualsToVale; bool isStrEqualsToPeak; bool isStrEqualsToVale; bool isX3MaFatsUnderMid; bool isX3MaFatsOverSlow; bool isAtrUpperOverPeak; bool isPeakOverAtrUpper; bool isStrUpperOverPeak; bool isStrLowerOverVale; bool isClosedOverCheMin; bool isClosedOverCheMax; bool isX3MaFatsUnderSlow; bool isAtrLowerUnderVale; bool isClosedOverX3MaMin; bool isClosedOverX3MaMax; bool isValeUnderAtrLower; bool isStrUpperUnderPeak; bool isStrLowerUnderVale; bool isClosedUnderCheMin; bool isClosedUnderCheMax; bool isClosedOverVWapMin; bool isClosedOverVWapMax; bool isClosedUnderX3MaMin; bool isClosedUnderX3MaMax; bool isStrCrossedOverVale; bool isSarCrossedOverVale; bool isClosedUnderVWapMin; bool isClosedUnderVWapMax; bool isX3MaFatsOverMidPrev; bool isSarCrossedUnderPeak; bool isStrCrossedUnderPeak; bool isNewPeakOverAtrUpper; bool isX3MaFatsUnderMidPrev; bool isX3MaFatsOverSlowPrev; bool isAtrUpperEqualsToPeak; bool isAtrLowerEqualsToVale; bool isStrUpperOverAtrUpper; bool isStrLowerOverAtrLower; bool isNewValeUnderAtrLower; bool isAtrUpperCrossedUpPeak; bool isAtrLowerCrossedUpVale; bool isStrUpperUnderAtrUpper; bool isStrLowerUnderAtrLower; bool isX3MaFatsUnderSlowPrev; bool isX3MaFastCrossedOverMid; bool isVWapFastCrossedOverMid; bool isX3MaFastCrossedUnderMid; bool isX3MaFastCrossedOverSlow; bool isAtrUpperCrossedDownPeak; bool isAtrLowerCrossedDownVale; bool isStrLowerOverDonLowLower; bool isVWapFastCrossedUnderMid; bool isStrUpperCrossedOverPeak; bool isStrLowerCrossedOverVale; bool isDonLowLowerEqualsToVale; bool isVWapFastCrossedOverSlow; bool isX3MaFastCrossedUnderSlow; bool isStrUpperOverDonHighUpper; bool isStrLowerUnderDonLowLower; bool isVWapFastCrossedUnderSlow; bool isStrUpperCrossedUnderPeak; bool isStrLowerCrossedUnderVale; bool isDonHighUpperEqualsToPeak; bool isStrUpperUnderDonHighUpper; bool isStrUpperCrossedOverAtrUpper; bool isStrLowerCrossedOverAtrLower; bool isStrUpperCrossedUnderAtrUpper; bool isStrLowerCrossedUnderAtrLower; bool isStrLowerCrossedOverDonLowLower; bool isStrUpperCrossedOverDonHighUpper; bool isStrLowerCrossedUnderDonLowLower; bool isStrUpperCrossedUnderDonHighUpper; // // Constructor ... X121Conditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // // Commons ... symbol = NULL; period = NULL; time = NULL; // // Buffers ... // Clean(maBuffer); Clean(rsiBuffer); Clean(atrBuffer); Clean(strBuffer); Clean(le1Buffer); Clean(se1Buffer); Clean(le2Buffer); Clean(se2Buffer); Clean(sarBuffer); Clean(cHHBuffer); Clean(cLLBuffer); Clean(sHHBuffer); Clean(sLLBuffer); Clean(mHHBuffer); Clean(mLLBuffer); Clean(lHHBuffer); Clean(lLLBuffer); Clean(hHHBuffer); Clean(hLLBuffer); Clean(upTBuffer); Clean(adxBuffer); Clean(adxPBuffer); Clean(adxMBuffer); Clean(peaksBuffer); Clean(valesBuffer); Clean(strUpBuffer); Clean(downTBuffer); Clean(volumeBuffer); Clean(masMidBuffer); Clean(strDownBuffer); Clean(vwapMidBuffer); Clean(upTrendBuffer); Clean(x3maMidBuffer); Clean(masUpperBuffer); Clean(masLowerBuffer); Clean(le1StartBuffer); Clean(se1StartBuffer); Clean(le2StartBuffer); Clean(se2StartBuffer); Clean(strPriceBuffer); Clean(atrUpperBuffer); Clean(atrLowerBuffer); Clean(strStateBuffer); Clean(vwapFastBuffer); Clean(vwapSlowBuffer); Clean(xhkSMLowBuffer); Clean(x3maFastBuffer); Clean(x3maSlowBuffer); Clean(supportsBuffer); Clean(downTrendBuffer); Clean(vwapPriceBuffer); Clean(xhkRawLowBuffer); Clean(xhkSMOpenBuffer); Clean(xhkSMHighBuffer); Clean(xhkRawOpenBuffer); Clean(xhkRawHighBuffer); Clean(xhkSMCloseBuffer); Clean(vwapVolumeBuffer); Clean(peaksGoldenBuffer); Clean(valesGoldenBuffer); Clean(xhkRawCloseBuffer); Clean(atrUpperRawBuffer); Clean(atrLowerRawBuffer); Clean(donLowUpperBuffer); Clean(donLowLowerBuffer); Clean(resistancesBuffer); Clean(vwapMidStateBuffer); Clean(donOpenUpperBuffer); Clean(donOpenLowerBuffer); Clean(donHighUpperBuffer); Clean(donHighLowerBuffer); Clean(x3maMidStateBuffer); Clean(fractalsUpperBuffer); Clean(fractalsLowerBuffer); Clean(vwapFastStateBuffer); Clean(vwapSlowStateBuffer); Clean(donCloseUpperBuffer); Clean(donCloseLowerBuffer); Clean(x3maFastStateBuffer); Clean(x3maSlowStateBuffer); // ArraySetAsSeries(maBuffer, true); ArraySetAsSeries(rsiBuffer, true); ArraySetAsSeries(atrBuffer, true); ArraySetAsSeries(strBuffer, true); ArraySetAsSeries(le1Buffer, true); ArraySetAsSeries(se1Buffer, true); ArraySetAsSeries(le2Buffer, true); ArraySetAsSeries(se2Buffer, true); ArraySetAsSeries(sarBuffer, true); ArraySetAsSeries(cHHBuffer, true); ArraySetAsSeries(cLLBuffer, true); ArraySetAsSeries(sHHBuffer, true); ArraySetAsSeries(sLLBuffer, true); ArraySetAsSeries(mHHBuffer, true); ArraySetAsSeries(mLLBuffer, true); ArraySetAsSeries(lHHBuffer, true); ArraySetAsSeries(lLLBuffer, true); ArraySetAsSeries(hHHBuffer, true); ArraySetAsSeries(hLLBuffer, true); ArraySetAsSeries(upTBuffer, true); ArraySetAsSeries(adxBuffer, true); ArraySetAsSeries(adxPBuffer, true); ArraySetAsSeries(adxMBuffer, true); ArraySetAsSeries(peaksBuffer, true); ArraySetAsSeries(valesBuffer, true); ArraySetAsSeries(strUpBuffer, true); ArraySetAsSeries(downTBuffer, true); ArraySetAsSeries(volumeBuffer, true); ArraySetAsSeries(masMidBuffer, true); ArraySetAsSeries(strDownBuffer, true); ArraySetAsSeries(vwapMidBuffer, true); ArraySetAsSeries(upTrendBuffer, true); ArraySetAsSeries(x3maMidBuffer, true); ArraySetAsSeries(masUpperBuffer, true); ArraySetAsSeries(masLowerBuffer, true); ArraySetAsSeries(le1StartBuffer, true); ArraySetAsSeries(se1StartBuffer, true); ArraySetAsSeries(le2StartBuffer, true); ArraySetAsSeries(se2StartBuffer, true); ArraySetAsSeries(strPriceBuffer, true); ArraySetAsSeries(atrUpperBuffer, true); ArraySetAsSeries(atrLowerBuffer, true); ArraySetAsSeries(strStateBuffer, true); ArraySetAsSeries(vwapFastBuffer, true); ArraySetAsSeries(vwapSlowBuffer, true); ArraySetAsSeries(xhkSMLowBuffer, true); ArraySetAsSeries(x3maFastBuffer, true); ArraySetAsSeries(x3maSlowBuffer, true); ArraySetAsSeries(supportsBuffer, true); ArraySetAsSeries(downTrendBuffer, true); ArraySetAsSeries(vwapPriceBuffer, true); ArraySetAsSeries(xhkRawLowBuffer, true); ArraySetAsSeries(xhkSMOpenBuffer, true); ArraySetAsSeries(xhkSMHighBuffer, true); ArraySetAsSeries(xhkRawOpenBuffer, true); ArraySetAsSeries(xhkRawHighBuffer, true); ArraySetAsSeries(xhkSMCloseBuffer, true); ArraySetAsSeries(vwapVolumeBuffer, true); ArraySetAsSeries(peaksGoldenBuffer, true); ArraySetAsSeries(valesGoldenBuffer, true); ArraySetAsSeries(xhkRawCloseBuffer, true); ArraySetAsSeries(atrUpperRawBuffer, true); ArraySetAsSeries(atrLowerRawBuffer, true); ArraySetAsSeries(donLowUpperBuffer, true); ArraySetAsSeries(donLowLowerBuffer, true); ArraySetAsSeries(resistancesBuffer, true); ArraySetAsSeries(vwapMidStateBuffer, true); ArraySetAsSeries(donOpenUpperBuffer, true); ArraySetAsSeries(donOpenLowerBuffer, true); ArraySetAsSeries(donHighUpperBuffer, true); ArraySetAsSeries(donHighLowerBuffer, true); ArraySetAsSeries(x3maMidStateBuffer, true); ArraySetAsSeries(fractalsUpperBuffer, true); ArraySetAsSeries(fractalsLowerBuffer, true); ArraySetAsSeries(vwapFastStateBuffer, true); ArraySetAsSeries(vwapSlowStateBuffer, true); ArraySetAsSeries(donCloseUpperBuffer, true); ArraySetAsSeries(donCloseLowerBuffer, true); ArraySetAsSeries(x3maFastStateBuffer, true); ArraySetAsSeries(x3maSlowStateBuffer, true); // cheMin = 0; cheMax = 0; vwapMin = 0; vwapMax = 0; x3maMin = 0; x3maMax = 0; // // Slopes ... rsiSlope = 0; strSlope = 0; atrUpperSlope = 0; atrLowerSlope = 0; vwapFastSlope = 0; vwapMidSlope = 0; vwapSlowSlope = 0; // // Conditions ... // isRsiSlopeBullish = false; isStrSlopeBullish = false; isAtrUpperSlopeBullish = false; isAtrLowerSlopeBullish = false; isVwapFastSlopeBullish = false; isVwapMidSlopeBullish = false; isVwapSlowSlopeBullish = false; // isRsiSlopeBearish = false; isStrSlopeBearish = false; isAtrUpperSlopeBearish = false; isAtrLowerSlopeBearish = false; isVwapFastSlopeBearish = false; isVwapMidSlopeBearish = false; isVwapSlowSlopeBearish = false; // // RSI ... // isRsiOverBought = false; isRsiCrossedOverOverBought = false; isRsiCrossedUnderOverBought = false; // isRsiOverSold = false; isRsiCrossedUnderOverSold = false; isRsiCrossedOverOverSold = false; // // ATR ... // isClosedOverAtrUpper = false; isClosedOverAtrLower = false; isClosedUnderAtrUpper = false; isClosedUnderAtrLower = false; // // DON ... // // SAR ... // isSarBullish = false; isSarBearish = false; isSarSwitchedToBullish = false; isSarSwitchedToBearish = false; // // PV ... // isNewPeak = false; isNewPeakOverLast = false; isNewPeakUnderLast = false; // isNewVale = false; isNewValeOverLast = false; isNewValeUnderLast = false; // // STR ... // isStrBullish = false; isStrBearish = false; isStrSwitchedToBullish = false; isStrSwitchedToBearish = false; // // VWAP ... isVWapMidBullish = false; isVWapMidBearish = false; isVWapMidNeutural = false; isVWapSlowBullish = false; isVWapSlowBearish = false; isVWapFastBullish = false; isVWapFastBearish = false; isVWapFastOverMid = false; isVWapMidOverSlow = false; isVWapFastNeutural = false; isVWapSlowNeutural = false; isVWapFastUnderMid = false; isVWapMidUnderSlow = false; isVWapBullishState = false; isVWapBearishState = false; isVWapNeuturalState = false; isVWapBullishOrdered = false; isVWapBearishOrdered = false; isVWapSwitchedToBullishState = false; isVWapSwitchedToBearishState = false; isVWapSwitchedToNeuturalState = false; isVWapSwitchedToBullishOrdered = false; isVWapSwitchedToBearishOrdered = false; // // X3MA ... isX3MaMidBullish = false; isX3MaMidBearish = false; isX3MaFastBullish = false; isX3MaFastBearish = false; isX3MaMidNeutural = false; isX3MaSlowBullish = false; isX3MaSlowBearish = false; isX3MaFastOverMid = false; isX3MaMidOverSlow = false; isX3MaFastNeutural = false; isX3MaSlowNeutural = false; isX3MaFastUnderMid = false; isX3MaMidUnderSlow = false; isX3MaBullishState = false; isX3MaBearishState = false; isX3MaNeuturalState = false; isX3MaBullishOrdered = false; isX3MaBearishOrdered = false; isX3MaSwitchedToBullishState = false; isX3MaSwitchedToBearishState = false; isX3MaSwitchedToNeuturalState = false; isX3MaSwitchedToBullishOrdered = false; isX3MaSwitchedToBearishOrdered = false; // // CHE ... // isCheBullish = false; isCheBearish = false; isChe1Bullish = false; isChe1Bearish = false; isChe2Bullish = false; isChe2Bearish = false; isClosedOverCheMin = false; isClosedOverCheMax = false; isClosedUnderCheMin = false; isClosedUnderCheMax = false; isCheSwitchedToBullish = false; isCheSwitchedToBearish = false; isChe1SwitchedToBullish = false; isChe1SwitchedToBearish = false; isChe2SwitchedToBullish = false; isChe2SwitchedToBearish = false; // // XHK ... isSMHKBullish = false; isRawHKBullish = false; isSMHKBearish = false; isRawHKBearish = false; isClosedOverSMHK = false; isClosedUnderSMHK = false; isClosedOverRawHK = false; isClosedUnderRawHK = false; isRawHKClosedOverSMHK = false; isSMHKSwitchedToBearish = false; isRawHKSwitchedToBearish = false; isRawHKClosedUnderSMHK = false; isSMHKSwitchedToBullish = false; isRawHKSwitchedToBullish = false; // // Complex Conditions ... // isSarIncreased = false; isSarDecreased = false; isX3MaFatsOverMid = false; isSarEqualsToPeak = false; isSarEqualsToVale = false; isStrEqualsToPeak = false; isStrEqualsToVale = false; isX3MaFatsUnderMid = false; isX3MaFatsOverSlow = false; isAtrUpperOverPeak = false; isPeakOverAtrUpper = false; isStrUpperOverPeak = false; isStrLowerOverVale = false; isClosedOverCheMin = false; isClosedOverCheMax = false; isX3MaFatsUnderSlow = false; isAtrLowerUnderVale = false; isClosedOverX3MaMin = false; isClosedOverX3MaMax = false; isValeUnderAtrLower = false; isStrUpperUnderPeak = false; isStrLowerUnderVale = false; isClosedUnderCheMin = false; isClosedUnderCheMax = false; isClosedOverVWapMin = false; isClosedOverVWapMax = false; isClosedUnderX3MaMin = false; isClosedUnderX3MaMax = false; isStrCrossedOverVale = false; isSarCrossedOverVale = false; isClosedUnderVWapMin = false; isClosedUnderVWapMax = false; isX3MaFatsOverMidPrev = false; isSarCrossedUnderPeak = false; isStrCrossedUnderPeak = false; isNewPeakOverAtrUpper = false; isX3MaFatsUnderMidPrev = false; isX3MaFatsOverSlowPrev = false; isAtrUpperEqualsToPeak = false; isAtrLowerEqualsToVale = false; isStrUpperOverAtrUpper = false; isStrLowerOverAtrLower = false; isNewValeUnderAtrLower = false; isAtrUpperCrossedUpPeak = false; isAtrLowerCrossedUpVale = false; isStrUpperUnderAtrUpper = false; isStrLowerUnderAtrLower = false; isX3MaFatsUnderSlowPrev = false; isX3MaFastCrossedOverMid = false; isVWapFastCrossedOverMid = false; isX3MaFastCrossedUnderMid = false; isX3MaFastCrossedOverSlow = false; isAtrUpperCrossedDownPeak = false; isAtrLowerCrossedDownVale = false; isStrLowerOverDonLowLower = false; isVWapFastCrossedUnderMid = false; isStrUpperCrossedOverPeak = false; isStrLowerCrossedOverVale = false; isDonLowLowerEqualsToVale = false; isVWapFastCrossedOverSlow = false; isX3MaFastCrossedUnderSlow = false; isStrUpperOverDonHighUpper = false; isStrLowerUnderDonLowLower = false; isVWapFastCrossedUnderSlow = false; isStrUpperCrossedUnderPeak = false; isStrLowerCrossedUnderVale = false; isDonHighUpperEqualsToPeak = false; isStrUpperUnderDonHighUpper = false; isStrUpperCrossedOverAtrUpper = false; isStrLowerCrossedOverAtrLower = false; isStrUpperCrossedUnderAtrUpper = false; isStrLowerCrossedUnderAtrLower = false; isStrLowerCrossedOverDonLowLower = false; isStrUpperCrossedOverDonHighUpper = false; isStrLowerCrossedUnderDonLowLower = false; isStrUpperCrossedUnderDonHighUpper = false; // ZeroMemory(this); } /** * Generate Conditions Scores ... * * @param bullishScore: Double, Directional Scores Reference ... * @param bearishScore: Double, Directional Scores Reference ... */ void GenerateScore( double &bullishScore, double &bearishScore // ) { // bullishScore = 0; bearishScore = 0; // double score = 1; double minScore = 0.5; double highScore = 1.5; // // SLOPES ... // if (isRsiSlopeBullish) { bullishScore += minScore; } if (isStrSlopeBullish) { bullishScore += minScore; } if (isAtrUpperSlopeBullish) { bullishScore += minScore; } if (isAtrLowerSlopeBullish) { bullishScore += minScore; } if (isVwapFastSlopeBullish) { bullishScore += minScore; } if (isVwapMidSlopeBullish) { bullishScore += minScore; } if (isVwapSlowSlopeBullish) { bullishScore += minScore; } // if (isRsiSlopeBearish) { bearishScore += minScore; } if (isStrSlopeBearish) { bearishScore += minScore; } if (isAtrUpperSlopeBearish) { bearishScore += minScore; } if (isAtrLowerSlopeBearish) { bearishScore += minScore; } if (isVwapFastSlopeBearish) { bearishScore += minScore; } if (isVwapMidSlopeBearish) { bearishScore += minScore; } if (isVwapSlowSlopeBearish) { bearishScore += minScore; } // // COMPLEX ... // if (isRsiOverSold) { bullishScore += score; } if (isRsiCrossedUnderOverSold) { bullishScore += highScore; } // if (isRsiOverBought) { bearishScore += score; } if (isRsiCrossedOverOverBought) { bearishScore += highScore; } // // XSAR ... // if (isSarBullish) { bullishScore += minScore; } if (isSarSwitchedToBullish) { bullishScore += score; } // if (isSarBearish) { bearishScore += minScore; } if (isSarSwitchedToBearish) { bearishScore += score; } // // XSTR ... // if (isStrBullish) { bullishScore += minScore; } if (isStrSwitchedToBullish) { bullishScore += score; } // if (isStrBearish) { bearishScore += minScore; } if (isStrSwitchedToBearish) { bearishScore += score; } // // XCHE ... // if (isCheBullish) { bullishScore += score; } if (isCheSwitchedToBullish) { bullishScore += highScore; } if (isChe1Bullish && !isCheBullish && !isCheSwitchedToBullish) { bullishScore += minScore; } if (isChe1SwitchedToBullish && !isCheBullish && !isCheSwitchedToBullish) { bullishScore += minScore; } // if (isCheBearish) { bearishScore += score; } if (isCheSwitchedToBearish) { bearishScore += highScore; } if (isChe1Bearish && !isCheBearish && !isCheSwitchedToBearish) { bearishScore += minScore; } if (isChe1SwitchedToBearish && !isCheBearish && !isCheSwitchedToBearish) { bearishScore += minScore; } // // XVWAP ... // if (isVWapBullishState) { bullishScore += score; } if (isVWapBullishOrdered) { bullishScore += score; } if (isVWapSwitchedToBullishState) { bullishScore += highScore; } if (isVWapSwitchedToBullishOrdered) { bullishScore += highScore; } if (!isVWapBullishState && !isVWapSwitchedToBullishState) { // if (isVWapFastBullish) { bullishScore += minScore; } if (isVWapSlowBullish) { bullishScore += minScore; } } if (!isVWapBullishOrdered && !isVWapSwitchedToBullishOrdered) { // if (isVWapFastOverMid) { bullishScore += minScore; } if (isVWapMidOverSlow) { bullishScore += minScore; } } // if (isVWapBearishState) { bearishScore += score; } if (isVWapBearishOrdered) { bearishScore += score; } if (isVWapSwitchedToBearishState) { bearishScore += highScore; } if (isVWapSwitchedToBearishOrdered) { bearishScore += highScore; } if (!isVWapBearishState && !isVWapSwitchedToBearishState) { // if (isVWapFastBearish) { bearishScore += minScore; } if (isVWapSlowBearish) { bearishScore += minScore; } } if (!isVWapBearishOrdered && !isVWapSwitchedToBearishOrdered) { // if (isVWapFastUnderMid) { bearishScore += minScore; } if (isVWapMidUnderSlow) { bearishScore += minScore; } } // // X3MA ... // if (isX3MaBullishState) { bullishScore += score; } if (isX3MaBullishOrdered) { bullishScore += score; } if (isX3MaSwitchedToBullishState) { bullishScore += highScore; } if (isX3MaSwitchedToBullishOrdered) { bullishScore += highScore; } if (!isX3MaBullishState && !isX3MaSwitchedToBullishState) { // if (isX3MaFastBullish) { bullishScore += minScore; } if (isX3MaSlowBullish) { bullishScore += minScore; } } if (!isX3MaBullishOrdered && !isX3MaSwitchedToBullishOrdered) { // if (isX3MaFastOverMid) { bullishScore += minScore; } if (isX3MaMidOverSlow) { bullishScore += minScore; } } // if (isX3MaBearishState) { bearishScore += score; } if (isX3MaBearishOrdered) { bearishScore += score; } if (isX3MaSwitchedToBearishState) { bearishScore += highScore; } if (isX3MaSwitchedToBearishOrdered) { bearishScore += highScore; } if (!isX3MaBearishState && !isX3MaSwitchedToBearishState) { // if (isX3MaFastBearish) { bearishScore += minScore; } if (isX3MaSlowBearish) { bearishScore += minScore; } } if (!isX3MaBearishOrdered && !isX3MaSwitchedToBearishOrdered) { // if (isX3MaFastUnderMid) { bearishScore += minScore; } if (isX3MaMidUnderSlow) { bearishScore += minScore; } } // // XSMHK ... // if (isSMHKBullish) { bullishScore += minScore; } if (isRawHKBullish) { bullishScore += minScore; } if (isClosedOverSMHK) { bullishScore += minScore; } if (isClosedOverRawHK) { bullishScore += minScore; } if (isRawHKClosedOverSMHK) { bullishScore += minScore; } if (isSMHKSwitchedToBullish) { bullishScore += highScore; } if (isRawHKSwitchedToBullish) { bullishScore += highScore; } // if (isSMHKBearish) { bearishScore += minScore; } if (isRawHKBearish) { bearishScore += minScore; } if (isClosedUnderSMHK) { bearishScore += minScore; } if (isClosedUnderRawHK) { bearishScore += minScore; } if (isRawHKClosedUnderSMHK) { bearishScore += minScore; } if (isSMHKSwitchedToBearish) { bearishScore += highScore; } if (isRawHKSwitchedToBullish) { bearishScore += highScore; } // // Complex Conditions ... // if (isSarIncreased) { bullishScore += minScore; } if (isSarEqualsToVale) { bullishScore += minScore; } if (isSarCrossedOverVale) { bullishScore += score; } // if (isAtrLowerUnderVale) { bullishScore += minScore; } if (isValeUnderAtrLower) { bullishScore += minScore; } if (isNewValeUnderAtrLower) { bullishScore += minScore; } if (isAtrLowerEqualsToVale) { bullishScore += minScore; } if (isStrLowerOverAtrLower) { bullishScore += minScore; } if (isStrUpperOverAtrUpper) { bullishScore += minScore; } if (isAtrLowerCrossedUpVale) { bullishScore += score; } if (isAtrUpperCrossedUpPeak) { bullishScore += score; } if (isStrLowerCrossedOverAtrLower) { bullishScore += score; } if (isStrUpperCrossedOverAtrUpper) { bullishScore += score; } // if (isStrEqualsToVale) { bullishScore += minScore; } if (isStrLowerOverVale) { bullishScore += minScore; } if (isStrLowerUnderVale) { bullishScore += minScore; } if (isStrCrossedOverVale) { bullishScore += score; } if (isStrUpperCrossedOverPeak) { bullishScore += score; } if (isStrLowerCrossedOverVale) { bullishScore += score; } if (isStrLowerUnderDonLowLower) { bullishScore += minScore; } if (isStrLowerCrossedOverDonLowLower) { bullishScore += score; } if (isStrUpperCrossedOverDonHighUpper) { bullishScore += score; } // if (isClosedOverVWapMin) { bullishScore += minScore; } if (isClosedOverVWapMax) { bullishScore += minScore; } if (isVWapFastCrossedOverMid) { bullishScore += score; } if (isVWapFastCrossedOverSlow) { bullishScore += score; } // if (isClosedOverX3MaMin) { bullishScore += minScore; } if (isClosedOverX3MaMax) { bullishScore += minScore; } if (isX3MaFastCrossedOverMid) { bullishScore += score; } if (isX3MaFastCrossedOverSlow) { bullishScore += score; } // if (isClosedOverCheMin) { bullishScore += minScore; } if (isClosedOverCheMax) { bullishScore += minScore; } if (isDonLowLowerEqualsToVale) { bullishScore += minScore; } // // // // if (isSarDecreased) { bearishScore += minScore; } if (isSarEqualsToPeak) { bearishScore += minScore; } if (isSarCrossedUnderPeak) { bearishScore += score; } // if (isAtrUpperOverPeak) { bearishScore += minScore; } if (isPeakOverAtrUpper) { bearishScore += minScore; } if (isNewPeakOverAtrUpper) { bearishScore += minScore; } if (isAtrUpperEqualsToPeak) { bearishScore += minScore; } if (isStrLowerUnderAtrLower) { bearishScore += minScore; } if (isStrUpperUnderAtrUpper) { bearishScore += minScore; } if (isAtrLowerCrossedDownVale) { bearishScore += score; } if (isAtrUpperCrossedDownPeak) { bearishScore += score; } if (isStrLowerCrossedUnderAtrLower) { bearishScore += score; } if (isStrUpperCrossedUnderAtrUpper) { bearishScore += score; } // if (isStrEqualsToPeak) { bearishScore += minScore; } if (isStrUpperOverPeak) { bearishScore += minScore; } if (isStrUpperUnderPeak) { bearishScore += minScore; } if (isStrCrossedUnderPeak) { bearishScore += score; } if (isStrLowerOverDonLowLower) { bearishScore += minScore; } if (isStrUpperOverDonHighUpper) { bearishScore += minScore; } if (isStrUpperCrossedUnderPeak) { bearishScore += score; } if (isStrLowerCrossedUnderVale) { bearishScore += score; } if (isStrUpperUnderDonHighUpper) { bearishScore += minScore; } if (isStrLowerCrossedUnderDonLowLower) { bearishScore += score; } if (isStrUpperCrossedUnderDonHighUpper) { bearishScore += score; } // if (isClosedUnderVWapMin) { bearishScore += minScore; } if (isClosedUnderVWapMax) { bearishScore += minScore; } if (isVWapFastCrossedUnderMid) { bearishScore += score; } if (isVWapFastCrossedUnderSlow) { bearishScore += score; } // if (isClosedUnderX3MaMin) { bearishScore += minScore; } if (isClosedUnderX3MaMax) { bearishScore += minScore; } if (isX3MaFastCrossedUnderMid) { bearishScore += score; } if (isX3MaFastCrossedUnderSlow) { bearishScore += score; } // if (isClosedUnderCheMin) { bearishScore += minScore; } if (isClosedUnderCheMax) { bearishScore += minScore; } if (isDonHighUpperEqualsToPeak) { bearishScore += minScore; } // // // } /** * Generate Summary String for Represent Conditions State ... * * @param onlyCommons: Boolean, Just Generate Only Commons Conditions ... * @param onlyConditions: Boolean, Just Generate Only Conditions ... * @param includeScores: Boolean, Attach Scores Representations on Result ... * @param ignoreFalseConditions: Boolean, Ignore False Conditions on Result ... * @param separator: String, Separate Lines ... * * @return ( string ) */ string GenerateSummary( bool onlyCommons = false, bool onlyConditions = false, bool includeScores = true, bool ignoreFalseConditions = true, string separator = "\n" // ) { // string result = NULL; // double bullishScore = 0; double bearishScore = 0; GenerateScore( bullishScore, bearishScore // ); // string scoresStr = // "Scores: " + separator + "---------------" + separator + "Bullish: " + ToString(bullishScore) + separator + "Bearish: " + ToString(bearishScore) + separator + "" // ; // string commonStr = GenerateSpecifiedCommonSummary( this, separator, includeScores // ); // string conditionsStr = // "-----------------------" + separator + "SAR ..." + separator + "-----------------------" + separator + ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) + ToString("isSarBearish", isSarBearish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBullish", isSarSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + // "-----------------------" + separator + "STR ..." + separator + "-----------------------" + separator + ToString("isStrBullish", isStrBullish, ignoreFalseConditions, separator) + ToString("isStrBearish", isStrBearish, ignoreFalseConditions, separator) + ToString("isStrSwitchedToBullish", isStrSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isStrSwitchedToBearish", isStrSwitchedToBearish, ignoreFalseConditions, separator) + // "-----------------------" + separator + "PV ..." + separator + "-----------------------" + separator + ToString("isNewPeak", isNewPeak, ignoreFalseConditions, separator) + ToString("isNewPeakOverLast", isNewPeakOverLast, ignoreFalseConditions, separator) + ToString("isNewPeakUnderLast", isNewPeakUnderLast, ignoreFalseConditions, separator) + ToString("isNewVale", isNewVale, ignoreFalseConditions, separator) + 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) + // "-----------------------" + separator + "ATR ..." + separator + "-----------------------" + separator + ToString("isClosedOverAtrUpper", isClosedOverAtrUpper, ignoreFalseConditions, separator) + ToString("isClosedOverAtrLower", isClosedOverAtrLower, ignoreFalseConditions, separator) + ToString("isClosedUnderAtrUpper", isClosedUnderAtrUpper, ignoreFalseConditions, separator) + ToString("isClosedUnderAtrLower", isClosedUnderAtrLower, ignoreFalseConditions, separator) + // "-----------------------" + separator + "DON ..." + separator + "-----------------------" + separator + // "-----------------------" + separator + "VWAP ..." + separator + "-----------------------" + separator + ToString("isVWapFastBullish", isVWapFastBullish, ignoreFalseConditions, separator) + ToString("isVWapFastBearish", isVWapFastBearish, ignoreFalseConditions, separator) + ToString("isVWapFastNeutural", isVWapFastNeutural, ignoreFalseConditions, separator) + ToString("isVWapMidBullish", isVWapMidBullish, ignoreFalseConditions, separator) + ToString("isVWapMidBearish", isVWapMidBearish, ignoreFalseConditions, separator) + ToString("isVWapMidNeutural", isVWapMidNeutural, ignoreFalseConditions, separator) + ToString("isVWapSlowBullish", isVWapSlowBullish, ignoreFalseConditions, separator) + ToString("isVWapSlowBearish", isVWapSlowBearish, ignoreFalseConditions, separator) + ToString("isVWapSlowNeutural", isVWapSlowNeutural, ignoreFalseConditions, separator) + ToString("isVWapFastOverMid", isVWapFastOverMid, ignoreFalseConditions, separator) + ToString("isVWapMidOverSlow", isVWapMidOverSlow, ignoreFalseConditions, separator) + ToString("isVWapFastUnderMid", isVWapFastUnderMid, ignoreFalseConditions, separator) + ToString("isVWapMidUnderSlow", isVWapMidUnderSlow, ignoreFalseConditions, separator) + ToString("isVWapBullishState", isVWapBullishState, ignoreFalseConditions, separator) + ToString("isVWapBearishState", isVWapBearishState, ignoreFalseConditions, separator) + ToString("isVWapNeuturalState", isVWapNeuturalState, ignoreFalseConditions, separator) + ToString("isVWapBullishOrdered", isVWapBullishOrdered, ignoreFalseConditions, separator) + ToString("isVWapBearishOrdered", isVWapBearishOrdered, ignoreFalseConditions, separator) + ToString("isVWapSwitchedToBullishOrdered", isVWapSwitchedToBullishOrdered, ignoreFalseConditions, separator) + ToString("isVWapSwitchedToBearishOrdered", isVWapSwitchedToBearishOrdered, ignoreFalseConditions, separator) + ToString("isVWapSwitchedToBullishState", isVWapSwitchedToBullishState, ignoreFalseConditions, separator) + ToString("isVWapSwitchedToBearishState", isVWapSwitchedToBearishState, ignoreFalseConditions, separator) + ToString("isVWapSwitchedToNeuturalState", isVWapSwitchedToNeuturalState, ignoreFalseConditions, separator) + // "-----------------------" + separator + "X3MA ..." + separator + "-----------------------" + separator + ToString("isX3MaMidBullish", isX3MaMidBullish, ignoreFalseConditions, separator) + ToString("isX3MaMidBearish", isX3MaMidBearish, ignoreFalseConditions, separator) + ToString("isX3MaFastBullish", isX3MaFastBullish, ignoreFalseConditions, separator) + ToString("isX3MaFastBearish", isX3MaFastBearish, ignoreFalseConditions, separator) + ToString("isX3MaMidNeutural", isX3MaMidNeutural, ignoreFalseConditions, separator) + ToString("isX3MaSlowBullish", isX3MaSlowBullish, ignoreFalseConditions, separator) + ToString("isX3MaSlowBearish", isX3MaSlowBearish, ignoreFalseConditions, separator) + ToString("isX3MaFastOverMid", isX3MaFastOverMid, ignoreFalseConditions, separator) + ToString("isX3MaMidOverSlow", isX3MaMidOverSlow, ignoreFalseConditions, separator) + ToString("isX3MaFastNeutural", isX3MaFastNeutural, ignoreFalseConditions, separator) + ToString("isX3MaSlowNeutural", isX3MaSlowNeutural, ignoreFalseConditions, separator) + ToString("isX3MaFastUnderMid", isX3MaFastUnderMid, ignoreFalseConditions, separator) + ToString("isX3MaMidUnderSlow", isX3MaMidUnderSlow, ignoreFalseConditions, separator) + ToString("isX3MaBullishState", isX3MaBullishState, ignoreFalseConditions, separator) + ToString("isX3MaBearishState", isX3MaBearishState, ignoreFalseConditions, separator) + ToString("isX3MaNeuturalState", isX3MaNeuturalState, ignoreFalseConditions, separator) + ToString("isX3MaBullishOrdered", isX3MaBullishOrdered, ignoreFalseConditions, separator) + ToString("isX3MaBearishOrdered", isX3MaBearishOrdered, ignoreFalseConditions, separator) + ToString("isX3MaSwitchedToBullishState", isX3MaSwitchedToBullishState, ignoreFalseConditions, separator) + ToString("isX3MaSwitchedToBearishState", isX3MaSwitchedToBearishState, ignoreFalseConditions, separator) + ToString("isX3MaSwitchedToNeuturalState", isX3MaSwitchedToNeuturalState, ignoreFalseConditions, separator) + ToString("isX3MaSwitchedToBullishOrdered", isX3MaSwitchedToBullishOrdered, ignoreFalseConditions, separator) + ToString("isX3MaSwitchedToBearishOrdered", isX3MaSwitchedToBearishOrdered, ignoreFalseConditions, separator) + // "-----------------------" + separator + "CHE ..." + separator + "-----------------------" + separator + ToString("isChe1Bullish", isChe1Bullish, ignoreFalseConditions, separator) + ToString("isChe1Bearish", isChe1Bearish, ignoreFalseConditions, separator) + ToString("isChe1SwitchedToBullish", isChe1SwitchedToBullish, ignoreFalseConditions, separator) + ToString("isChe1SwitchedToBearish", isChe1SwitchedToBearish, ignoreFalseConditions, separator) + ToString("isChe2Bullish", isChe2Bullish, ignoreFalseConditions, separator) + ToString("isChe2Bearish", isChe2Bearish, ignoreFalseConditions, separator) + ToString("isChe2SwitchedToBullish", isChe2SwitchedToBullish, ignoreFalseConditions, separator) + ToString("isChe2SwitchedToBearish", isChe2SwitchedToBearish, ignoreFalseConditions, separator) + ToString("isCheBullish", isCheBullish, ignoreFalseConditions, separator) + ToString("isCheBearish", isCheBearish, ignoreFalseConditions, separator) + ToString("isCheSwitchedToBullish", isCheSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isCheSwitchedToBearish", isCheSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isClosedOverCheMin", isClosedOverCheMin, ignoreFalseConditions, separator) + ToString("isClosedOverCheMax", isClosedOverCheMax, ignoreFalseConditions, separator) + ToString("isClosedUnderCheMin", isClosedUnderCheMin, ignoreFalseConditions, separator) + ToString("isClosedUnderCheMax", isClosedUnderCheMax, ignoreFalseConditions, separator) + // "-----------------------" + separator + "HK ..." + separator + "-----------------------" + separator + ToString("isSMHKBullish", isSMHKBullish, ignoreFalseConditions, separator) + ToString("isRawHKBullish", isRawHKBullish, ignoreFalseConditions, separator) + ToString("isSMHKBearish", isSMHKBearish, ignoreFalseConditions, separator) + ToString("isRawHKBearish", isRawHKBearish, ignoreFalseConditions, separator) + ToString("isClosedOverSMHK", isClosedOverSMHK, ignoreFalseConditions, separator) + ToString("isClosedUnderSMHK", isClosedUnderSMHK, ignoreFalseConditions, separator) + ToString("isClosedOverRawHK", isClosedOverRawHK, ignoreFalseConditions, separator) + ToString("isClosedUnderRawHK", isClosedUnderRawHK, ignoreFalseConditions, separator) + ToString("isRawHKClosedOverSMHK", isRawHKClosedOverSMHK, ignoreFalseConditions, separator) + ToString("isSMHKSwitchedToBearish", isSMHKSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isRawHKSwitchedToBearish", isRawHKSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isRawHKClosedUnderSMHK", isRawHKClosedUnderSMHK, ignoreFalseConditions, separator) + ToString("isSMHKSwitchedToBullish", isSMHKSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isRawHKSwitchedToBullish", isRawHKSwitchedToBullish, ignoreFalseConditions, separator) + // "-----------------------" + separator + "Slopes ..." + separator + "-----------------------" + separator + ToString("isRsiSlopeBullish", isRsiSlopeBullish, ignoreFalseConditions, separator) + ToString("isStrSlopeBullish", isStrSlopeBullish, ignoreFalseConditions, separator) + ToString("isAtrUpperSlopeBullish", isAtrUpperSlopeBullish, ignoreFalseConditions, separator) + ToString("isAtrLowerSlopeBullish", isAtrLowerSlopeBullish, ignoreFalseConditions, separator) + ToString("isVwapFastSlopeBullish", isVwapFastSlopeBullish, ignoreFalseConditions, separator) + ToString("isVwapMidSlopeBullish", isVwapMidSlopeBullish, ignoreFalseConditions, separator) + ToString("isVwapSlowSlopeBullish", isVwapSlowSlopeBullish, ignoreFalseConditions, separator) + ToString("isRsiSlopeBearish", isRsiSlopeBearish, ignoreFalseConditions, separator) + ToString("isStrSlopeBearish", isStrSlopeBearish, ignoreFalseConditions, separator) + ToString("isAtrUpperSlopeBearish", isAtrUpperSlopeBearish, ignoreFalseConditions, separator) + ToString("isAtrLowerSlopeBearish", isAtrLowerSlopeBearish, ignoreFalseConditions, separator) + ToString("isVwapFastSlopeBearish", isVwapFastSlopeBearish, ignoreFalseConditions, separator) + ToString("isVwapMidSlopeBearish", isVwapMidSlopeBearish, ignoreFalseConditions, separator) + ToString("isVwapSlowSlopeBearish", isVwapSlowSlopeBearish, ignoreFalseConditions, separator) + // "-----------------------" + separator + "Coplex ..." + separator + "-----------------------" + separator + ToString("isSarIncreased", isSarIncreased, ignoreFalseConditions, separator) + ToString("isSarDecreased", isSarDecreased, ignoreFalseConditions, separator) + ToString("isSarEqualsToPeak", isSarEqualsToPeak, ignoreFalseConditions, separator) + ToString("isStrEqualsToPeak", isStrEqualsToPeak, ignoreFalseConditions, separator) + ToString("isStrEqualsToVale", isStrEqualsToVale, ignoreFalseConditions, separator) + ToString("isPeakOverAtrUpper", isPeakOverAtrUpper, ignoreFalseConditions, separator) + ToString("isStrUpperOverPeak", isStrUpperOverPeak, ignoreFalseConditions, separator) + ToString("isStrLowerOverVale", isStrLowerOverVale, ignoreFalseConditions, separator) + ToString("isAtrUpperOverPeak", isAtrUpperOverPeak, ignoreFalseConditions, separator) + ToString("isAtrLowerUnderVale", isAtrLowerUnderVale, ignoreFalseConditions, separator) + ToString("isClosedOverVWapMin", isClosedOverVWapMin, ignoreFalseConditions, separator) + ToString("isClosedOverVWapMax", isClosedOverVWapMax, ignoreFalseConditions, separator) + ToString("isStrUpperUnderPeak", isStrUpperUnderPeak, ignoreFalseConditions, separator) + ToString("isValeUnderAtrLower", isValeUnderAtrLower, ignoreFalseConditions, separator) + ToString("isStrLowerUnderVale", isStrLowerUnderVale, ignoreFalseConditions, separator) + ToString("isClosedUnderVWapMin", isClosedUnderVWapMin, ignoreFalseConditions, separator) + ToString("isClosedUnderVWapMax", isClosedUnderVWapMax, ignoreFalseConditions, separator) + ToString("isSarCrossedOverVale", isSarCrossedOverVale, ignoreFalseConditions, separator) + ToString("isStrCrossedOverVale", isStrCrossedOverVale, ignoreFalseConditions, separator) + ToString("isSarCrossedUnderPeak", isSarCrossedUnderPeak, ignoreFalseConditions, separator) + ToString("isStrCrossedUnderPeak", isStrCrossedUnderPeak, ignoreFalseConditions, separator) + ToString("isNewPeakOverAtrUpper", isNewPeakOverAtrUpper, ignoreFalseConditions, separator) + ToString("isNewValeUnderAtrLower", isNewValeUnderAtrLower, ignoreFalseConditions, separator) + ToString("isStrUpperOverAtrUpper", isStrUpperOverAtrUpper, ignoreFalseConditions, separator) + ToString("isStrLowerOverAtrLower", isStrLowerOverAtrLower, ignoreFalseConditions, separator) + ToString("isAtrUpperEqualsToPeak", isAtrUpperEqualsToPeak, ignoreFalseConditions, separator) + ToString("isAtrLowerEqualsToVale", isAtrLowerEqualsToVale, ignoreFalseConditions, separator) + ToString("isAtrUpperCrossedUpPeak", isAtrUpperCrossedUpPeak, ignoreFalseConditions, separator) + ToString("isAtrLowerCrossedUpVale", isAtrLowerCrossedUpVale, ignoreFalseConditions, separator) + ToString("isStrUpperUnderAtrUpper", isStrUpperUnderAtrUpper, ignoreFalseConditions, separator) + ToString("isStrLowerUnderAtrLower", isStrLowerUnderAtrLower, ignoreFalseConditions, separator) + ToString("isVWapFastCrossedOverMid", isVWapFastCrossedOverMid, ignoreFalseConditions, separator) + ToString("isAtrUpperCrossedDownPeak", isAtrUpperCrossedDownPeak, ignoreFalseConditions, separator) + ToString("isAtrLowerCrossedDownVale", isAtrLowerCrossedDownVale, ignoreFalseConditions, separator) + ToString("isVWapFastCrossedUnderMid", isVWapFastCrossedUnderMid, ignoreFalseConditions, separator) + ToString("isVWapFastCrossedOverSlow", isVWapFastCrossedOverSlow, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedOverPeak", isStrUpperCrossedOverPeak, ignoreFalseConditions, separator) + ToString("isStrLowerOverDonLowLower", isStrLowerOverDonLowLower, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedOverVale", isStrLowerCrossedOverVale, ignoreFalseConditions, separator) + ToString("isDonLowLowerEqualsToVale", isDonLowLowerEqualsToVale, ignoreFalseConditions, separator) + ToString("isVWapFastCrossedUnderSlow", isVWapFastCrossedUnderSlow, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedUnderPeak", isStrUpperCrossedUnderPeak, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedUnderVale", isStrLowerCrossedUnderVale, ignoreFalseConditions, separator) + ToString("isDonHighUpperEqualsToPeak", isDonHighUpperEqualsToPeak, ignoreFalseConditions, separator) + ToString("isStrUpperOverDonHighUpper", isStrUpperOverDonHighUpper, ignoreFalseConditions, separator) + ToString("isStrLowerUnderDonLowLower", isStrLowerUnderDonLowLower, ignoreFalseConditions, separator) + ToString("isStrUpperUnderDonHighUpper", isStrUpperUnderDonHighUpper, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedOverAtrUpper", isStrUpperCrossedOverAtrUpper, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedOverAtrLower", isStrLowerCrossedOverAtrLower, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedUnderAtrUpper", isStrUpperCrossedUnderAtrUpper, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedUnderAtrLower", isStrLowerCrossedUnderAtrLower, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedOverDonLowLower", isStrLowerCrossedOverDonLowLower, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedOverDonHighUpper", isStrUpperCrossedOverDonHighUpper, ignoreFalseConditions, separator) + ToString("isStrLowerCrossedUnderDonLowLower", isStrLowerCrossedUnderDonLowLower, ignoreFalseConditions, separator) + ToString("isStrUpperCrossedUnderDonHighUpper", isStrUpperCrossedUnderDonHighUpper, ignoreFalseConditions, separator) + // "" // ; // result = // "[" + GetTag() + "]" + separator + (onlyConditions ? "" : commonStr) + (!includeScores ? "" : scoresStr) + " " + separator + (onlyCommons ? "" : conditionsStr) + "" // ; // return result; } /** * Retrieve nique Tag Identifier ... * * @return ( string ) */ string GetTag() { return GetTypeName(this); } // }; // // Implementation ... class XCX121Helper : public XCBase { // public: // // // Helpers ... XCX121XCCHelper *xccHelper; XCX121XPVHelper *xpvHelper; XCX121XHKHelper *xhkHelper; XCX121XMASHelper *xmasHelper; XCX121XATRHelper *xatrHelper; XCX121XSTRHelper *xstrHelper; XCX121XCHEHelper *xcheHelper; XCX121XDONHelper *xdonHelper; XCX121X3MAHelper *x3maHelper; XCX121XVWAPHelper *xvwapHelper; // // Constructors ... XCX121Helper() { } // // Deconstructor ... ~XCX121Helper() { // mInputs.Clean(); xccInputs.Clean(); xpvInputs.Clean(); xhkInputs.Clean(); xmasInputs.Clean(); xatrInputs.Clean(); xdonInputs.Clean(); xstrInputs.Clean(); xcheInputs.Clean(); x3maInputs.Clean(); xvwapInputs.Clean(); // delete xccHelper; delete xpvHelper; delete xhkHelper; delete xmasHelper; delete xatrHelper; delete xstrHelper; delete xcheHelper; delete xdonHelper; delete x3maHelper; delete xvwapHelper; // ZeroMemory(xccHelper); ZeroMemory(xpvHelper); ZeroMemory(xhkHelper); ZeroMemory(xmasHelper); ZeroMemory(xatrHelper); ZeroMemory(xstrHelper); ZeroMemory(xcheHelper); ZeroMemory(xdonHelper); ZeroMemory(x3maHelper); ZeroMemory(xvwapHelper); } // string GetSymbol() { return mSymbol; } // ENUM_TIMEFRAMES GetPeriod() { return mPeriod; } // // Tools ... /** * Initialize Indicator Helper ... * * @param symbol: String, Symbol ... * @param period: ENUM_TIMEFRAMES member, Period ... * @param inputs: X121Inputs instance, Indicator Inputs ... * * @return ( bool ) */ bool Init( string symbol, // Trading Symbol ENUM_TIMEFRAMES period, // Trading Period X121Inputs &inputs // Inputs ) { // bool result = false; // result = IsValid(symbol) && IsValid(period) && inputs.IsValid(); if (!result) { return result; } // mSymbol = symbol; mPeriod = period; // // Setting Inputs ... // mInputs = inputs; xccInputs = inputs.xccInputs; xpvInputs = inputs.xpvInputs; xhkInputs = inputs.xhkInputs; xmasInputs = inputs.xmasInputs; xatrInputs = inputs.xatrInputs; xstrInputs = inputs.xstrInputs; xcheInputs = inputs.xcheInputs; xdonInputs = inputs.xdonInputs; x3maInputs = inputs.x3maInputs; xvwapInputs = inputs.xvwapInputs; // // Initial Helpers ... // // XCC ... xccHelper = new XCX121XCCHelper(); result = xccHelper.Init( symbol, period, xccInputs // ); if (!result) { return result; } // // XPV ... xpvHelper = new XCX121XPVHelper(); result = xpvHelper.Init( symbol, period, xpvInputs // ); if (!result) { return result; } // // XHK ... xhkHelper = new XCX121XHKHelper(); result = xhkHelper.Init( symbol, period, xhkInputs // ); if (!result) { return result; } // // XMAS ... xmasHelper = new XCX121XMASHelper(); result = xmasHelper.Init( symbol, period, xmasInputs // ); if (!result) { return result; } // // XATR ... xatrHelper = new XCX121XATRHelper(); result = xatrHelper.Init( symbol, period, xatrInputs // ); if (!result) { return result; } // // XSTR ... xstrHelper = new XCX121XSTRHelper(); result = xstrHelper.Init( symbol, period, xstrInputs // ); if (!result) { return result; } // // XCHE ... xcheHelper = new XCX121XCHEHelper(); result = xcheHelper.Init( symbol, period, xcheInputs // ); if (!result) { return result; } // // XDON ... xdonHelper = new XCX121XDONHelper(); result = xdonHelper.Init( symbol, period, xdonInputs // ); if (!result) { return result; } // // X3MA ... x3maHelper = new XCX121X3MAHelper(); result = x3maHelper.Init( symbol, period, x3maInputs // ); if (!result) { return result; } // // XVWAP ... xvwapHelper = new XCX121XVWAPHelper(); result = xvwapHelper.Init( symbol, period, xvwapInputs // ); if (!result) { return result; } // if (inputs.showRSI) { // mRSIHandler = iRSI( symbol, period, xatrInputs.rsiLength, xatrInputs.rsiAppliedTo // ); // result = mRSIHandler != INVALID_HANDLE; if (!result) { return result; } } // return result; } // // Conditions Readers ... // // XPV ... bool GetPVConditions( X121XPVConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xpvHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XHK ... bool GetHKConditions( X121XHKConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xhkHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XMAS ... bool GetMASConditions( X121XMASConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xmasHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XATR ... bool GetATRConditions( X121XATRConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xatrHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XSTR ... bool GetSTRConditions( X121XSTRConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xstrHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XCHE ... bool GetCHEConditions( X121XCHEConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xcheHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XDON ... bool GetDONConditions( X121XDONConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xdonHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // X3MA ... bool Get3MAConditions( X121X3MAConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = x3maHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // // XVWAP ... bool GetVWAPConditions( X121XVWAPConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xvwapHelper.GetConditions( conditions, barIndex, loopback // ); // return result; } // void Free() { // xpvHelper.Free(); xhkHelper.Free(); xmasHelper.Free(); xatrHelper.Free(); xstrHelper.Free(); xcheHelper.Free(); xdonHelper.Free(); xvwapHelper.Free(); } // bool GetConditions( X121Conditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = true; // if (loopback < 5) { loopback = 5; } // conditions.Clean(); // conditions.symbol = mSymbol; conditions.period = mPeriod; conditions.time = TimeCurrent(); // int zIndex = barIndex; int cIndex = zIndex + 1; int pIndex = cIndex + 1; int ppIndex = pIndex + 1; // XOHCL zBar; result = zBar.Init( mSymbol, mPeriod, zIndex // ); if (!result) { return result; } // XOHCL cBar; result = cBar.Init( mSymbol, mPeriod, cIndex // ); if (!result) { return result; } // XOHCL pBar; result = pBar.Init( mSymbol, mPeriod, pIndex // ); if (!result) { return result; } // // XPV ... X121XPVConditions xpvConditions; result = GetPVConditions( xpvConditions, barIndex, loopback // ); if (!result) { return result; } // // XHK ... X121XHKConditions xhkConditions; result = GetHKConditions( xhkConditions, barIndex, loopback // ); if (!result) { return result; } // // XMAS ... X121XMASConditions xmasConditions; result = GetMASConditions( xmasConditions, barIndex, loopback // ); if (!result) { return result; } // // XATR ... X121XATRConditions xatrConditions; result = GetATRConditions( xatrConditions, barIndex, loopback // ); if (!result) { return result; } // // XSTR ... X121XSTRConditions xstrConditions; result = GetSTRConditions( xstrConditions, barIndex, loopback // ); if (!result) { return result; } // // XCHE ... X121XCHEConditions xcheConditions; result = GetCHEConditions( xcheConditions, barIndex, loopback // ); if (!result) { return result; } // // XDON ... X121XDONConditions xdonConditions; result = GetDONConditions( xdonConditions, barIndex, loopback // ); if (!result) { return result; } // // X3MA ... X121X3MAConditions x3maConditions; result = Get3MAConditions( x3maConditions, barIndex, loopback // ); if (!result) { return result; } // // XVWAP ... X121XVWAPConditions xvwapConditions; result = GetVWAPConditions( xvwapConditions, barIndex, loopback // ); if (!result) { return result; } // // Fill Volume Buffer ... for (int i = barIndex; i < barIndex + loopback; i++) { // // Reading Bar Valuem ... long iVol = iVolume( mSymbol, mPeriod, i // ); // Add( iVol, conditions.volumeBuffer // ); } // // Fill X121 Conditions Reference by Using // Retrieved Conditions ... // int cIDX = 1; int pIDX = cIDX + 1; // // XPV ... // // Buffers ... // Copy( xpvConditions.peaksBuffer, conditions.peaksBuffer // ); // Copy( xpvConditions.valesBuffer, conditions.valesBuffer // ); // Copy( xpvConditions.supportsBuffer, conditions.supportsBuffer // ); // Copy( xpvConditions.resistancesBuffer, conditions.resistancesBuffer // ); // Copy( xpvConditions.peaksGoldenBuffer, conditions.peaksGoldenBuffer // ); // Copy( xpvConditions.valesGoldenBuffer, conditions.valesGoldenBuffer // ); // Copy( xpvConditions.sarBuffer, conditions.sarBuffer // ); // Copy( xpvConditions.cHHBuffer, conditions.cHHBuffer // ); // Copy( xpvConditions.cLLBuffer, conditions.cLLBuffer // ); // Copy( xpvConditions.sHHBuffer, conditions.sHHBuffer // ); // Copy( xpvConditions.sLLBuffer, conditions.sLLBuffer // ); // Copy( xpvConditions.mHHBuffer, conditions.mHHBuffer // ); // Copy( xpvConditions.mLLBuffer, conditions.mLLBuffer // ); // Copy( xpvConditions.lHHBuffer, conditions.lHHBuffer // ); // Copy( xpvConditions.lLLBuffer, conditions.lLLBuffer // ); // Copy( xpvConditions.hHHBuffer, conditions.hHHBuffer // ); // Copy( xpvConditions.hLLBuffer, conditions.hLLBuffer // ); // Copy( xpvConditions.fractalsUpperBuffer, conditions.fractalsUpperBuffer // ); // Copy( xpvConditions.fractalsLowerBuffer, conditions.fractalsLowerBuffer // ); // // Conditions ... // conditions.isNewPeak = xpvConditions.isNewPeak; conditions.isNewVale = xpvConditions.isNewVale; conditions.isSarBullish = xpvConditions.isSarBullish; conditions.isSarBearish = xpvConditions.isSarBearish; conditions.isNewPeakOverLast = xpvConditions.isNewPeakOverLast; conditions.isNewValeOverLast = xpvConditions.isNewValeOverLast; conditions.isNewPeakUnderLast = xpvConditions.isNewPeakUnderLast; conditions.isNewValeUnderLast = xpvConditions.isNewValeUnderLast; conditions.isSarSwitchedToBullish = xpvConditions.isSarSwitchedToBullish; conditions.isSarSwitchedToBearish = xpvConditions.isSarSwitchedToBearish; // // XHK ... // // Buffers ... // Copy( xhkConditions.xhkRawOpenBuffer, conditions.xhkRawOpenBuffer // ); // Copy( xhkConditions.xhkRawHighBuffer, conditions.xhkRawHighBuffer // ); // Copy( xhkConditions.xhkRawLowBuffer, conditions.xhkRawLowBuffer // ); // Copy( xhkConditions.xhkRawCloseBuffer, conditions.xhkRawCloseBuffer // ); // Copy( xhkConditions.xhkSMOpenBuffer, conditions.xhkSMOpenBuffer // ); // Copy( xhkConditions.xhkSMHighBuffer, conditions.xhkSMHighBuffer // ); // Copy( xhkConditions.xhkSMLowBuffer, conditions.xhkSMLowBuffer // ); // Copy( xhkConditions.xhkSMCloseBuffer, conditions.xhkSMCloseBuffer // ); // // Conditions ... conditions.isSMHKBullish = xhkConditions.isSMHKBullish; conditions.isRawHKBullish = xhkConditions.isRawHKBullish; conditions.isSMHKBearish = xhkConditions.isSMHKBearish; conditions.isRawHKBearish = xhkConditions.isRawHKBearish; conditions.isClosedOverSMHK = xhkConditions.isClosedOverSMHK; conditions.isClosedUnderSMHK = xhkConditions.isClosedUnderSMHK; conditions.isClosedOverRawHK = xhkConditions.isClosedOverRawHK; conditions.isClosedUnderRawHK = xhkConditions.isClosedUnderRawHK; conditions.isRawHKClosedOverSMHK = xhkConditions.isRawHKClosedOverSMHK; conditions.isSMHKSwitchedToBearish = xhkConditions.isSMHKSwitchedToBearish; conditions.isRawHKSwitchedToBearish = xhkConditions.isRawHKSwitchedToBearish; conditions.isRawHKClosedUnderSMHK = xhkConditions.isRawHKClosedUnderSMHK; conditions.isSMHKSwitchedToBullish = xhkConditions.isSMHKSwitchedToBullish; conditions.isRawHKSwitchedToBullish = xhkConditions.isRawHKSwitchedToBullish; // // XMAS ... // // Buffers ... // Copy( xmasConditions.upperBuffer, conditions.masUpperBuffer // ); // Copy( xmasConditions.midBuffer, conditions.masMidBuffer // ); // Copy( xmasConditions.lowerBuffer, conditions.masLowerBuffer // ); // // XATR ... // // Buffers ... // Copy( xatrConditions.atrUpperBuffer, conditions.atrUpperBuffer // ); // Copy( xatrConditions.atrLowerBuffer, conditions.atrLowerBuffer // ); // Copy( xatrConditions.atrUpperRawBuffer, conditions.atrUpperRawBuffer // ); // Copy( xatrConditions.atrLowerRawBuffer, conditions.atrLowerRawBuffer // ); // Copy( xatrConditions.atrBuffer, conditions.atrBuffer // ); // Copy( xatrConditions.rsiBuffer, conditions.rsiBuffer // ); // // Conditions ... // conditions.isRsiOverSold = xatrConditions.isRsiOverSold; conditions.isRsiOverBought = xatrConditions.isRsiOverBought; conditions.isClosedOverAtrUpper = xatrConditions.isClosedOverAtrUpper; conditions.isClosedOverAtrLower = xatrConditions.isClosedOverAtrLower; conditions.isClosedUnderAtrUpper = xatrConditions.isClosedUnderAtrUpper; conditions.isClosedUnderAtrLower = xatrConditions.isClosedUnderAtrLower; conditions.isRsiCrossedOverOverSold = xatrConditions.isRsiCrossedOverOverSold; conditions.isRsiCrossedUnderOverSold = xatrConditions.isRsiCrossedUnderOverSold; conditions.isRsiCrossedOverOverBought = xatrConditions.isRsiCrossedOverOverBought; conditions.isRsiCrossedUnderOverBought = xatrConditions.isRsiCrossedUnderOverBought; // // XSTR ... // // Buffers ... // Copy( xstrConditions.strBuffer, conditions.strBuffer // ); // Copy( xstrConditions.strPriceBuffer, conditions.strPriceBuffer // ); // Copy( xstrConditions.strUpBuffer, conditions.strUpBuffer // ); // Copy( xstrConditions.strDownBuffer, conditions.strDownBuffer // ); // Copy( xstrConditions.strStateBuffer, conditions.strStateBuffer // ); // // Conditions ... // conditions.isStrBullish = xstrConditions.isStrBullish; conditions.isStrBearish = xstrConditions.isStrBearish; conditions.isStrSwitchedToBullish = xstrConditions.isStrSwitchedToBullish; conditions.isStrSwitchedToBearish = xstrConditions.isStrSwitchedToBearish; // // XCHE ... // // Buffers ... // Copy( xcheConditions.le1Buffer, conditions.le1Buffer // ); // Copy( xcheConditions.se1Buffer, conditions.se1Buffer // ); // Copy( xcheConditions.le2Buffer, conditions.le2Buffer // ); // Copy( xcheConditions.se2Buffer, conditions.se2Buffer // ); // Copy( xcheConditions.le1StartBuffer, conditions.le1StartBuffer // ); // Copy( xcheConditions.se1StartBuffer, conditions.se1StartBuffer // ); // Copy( xcheConditions.le2StartBuffer, conditions.le2StartBuffer // ); // Copy( xcheConditions.se2StartBuffer, conditions.se2StartBuffer // ); // // Conditions ... conditions.isCheBullish = xcheConditions.isCheBullish; conditions.isCheBearish = xcheConditions.isCheBearish; conditions.isChe1Bullish = xcheConditions.isChe1Bullish; conditions.isChe1Bearish = xcheConditions.isChe1Bearish; conditions.isChe2Bullish = xcheConditions.isChe2Bullish; conditions.isChe2Bearish = xcheConditions.isChe2Bearish; conditions.isClosedOverCheMin = xcheConditions.isClosedOverCheMin; conditions.isClosedOverCheMax = xcheConditions.isClosedOverCheMax; conditions.isClosedUnderCheMin = xcheConditions.isClosedUnderCheMin; conditions.isClosedUnderCheMax = xcheConditions.isClosedUnderCheMax; conditions.isCheSwitchedToBullish = xcheConditions.isCheSwitchedToBullish; conditions.isCheSwitchedToBearish = xcheConditions.isCheSwitchedToBearish; conditions.isChe1SwitchedToBullish = xcheConditions.isChe1SwitchedToBullish; conditions.isChe1SwitchedToBearish = xcheConditions.isChe1SwitchedToBearish; conditions.isChe2SwitchedToBullish = xcheConditions.isChe2SwitchedToBullish; conditions.isChe2SwitchedToBearish = xcheConditions.isChe2SwitchedToBearish; // // XDON ... // // Buffers ... // Copy( xdonConditions.donOpenUpperBuffer, conditions.donOpenUpperBuffer // ); // Copy( xdonConditions.donOpenLowerBuffer, conditions.donOpenLowerBuffer // ); // Copy( xdonConditions.donHighUpperBuffer, conditions.donHighUpperBuffer // ); // Copy( xdonConditions.donHighLowerBuffer, conditions.donHighLowerBuffer // ); // Copy( xdonConditions.donLowUpperBuffer, conditions.donLowUpperBuffer // ); // Copy( xdonConditions.donLowLowerBuffer, conditions.donLowLowerBuffer // ); // Copy( xdonConditions.donCloseUpperBuffer, conditions.donCloseUpperBuffer // ); // Copy( xdonConditions.donCloseLowerBuffer, conditions.donCloseLowerBuffer // ); // // Conditions ... // // X3MA ... // // Buffers ... // Copy( x3maConditions.x3maFastBuffer, conditions.x3maFastBuffer // ); // Copy( x3maConditions.x3maMidBuffer, conditions.x3maMidBuffer // ); // Copy( x3maConditions.x3maSlowBuffer, conditions.x3maSlowBuffer // ); // Copy( x3maConditions.x3maFastStateBuffer, conditions.x3maFastStateBuffer // ); // Copy( x3maConditions.x3maMidStateBuffer, conditions.x3maMidStateBuffer // ); // Copy( x3maConditions.x3maSlowStateBuffer, conditions.x3maSlowStateBuffer // ); // // Conditions ... // conditions.isX3MaMidBullish = x3maConditions.isX3MaMidBullish; conditions.isX3MaMidBearish = x3maConditions.isX3MaMidBearish; conditions.isX3MaFastBullish = x3maConditions.isX3MaFastBullish; conditions.isX3MaFastBearish = x3maConditions.isX3MaFastBearish; conditions.isX3MaMidNeutural = x3maConditions.isX3MaMidNeutural; conditions.isX3MaSlowBullish = x3maConditions.isX3MaSlowBullish; conditions.isX3MaSlowBearish = x3maConditions.isX3MaSlowBearish; conditions.isX3MaFastOverMid = x3maConditions.isX3MaFastOverMid; conditions.isX3MaMidOverSlow = x3maConditions.isX3MaMidOverSlow; conditions.isX3MaFastNeutural = x3maConditions.isX3MaFastNeutural; conditions.isX3MaSlowNeutural = x3maConditions.isX3MaSlowNeutural; conditions.isX3MaFastUnderMid = x3maConditions.isX3MaFastUnderMid; conditions.isX3MaMidUnderSlow = x3maConditions.isX3MaMidUnderSlow; conditions.isX3MaBullishState = x3maConditions.isX3MaBullishState; conditions.isX3MaBearishState = x3maConditions.isX3MaBearishState; conditions.isX3MaNeuturalState = x3maConditions.isX3MaNeuturalState; conditions.isX3MaBullishOrdered = x3maConditions.isX3MaBullishOrdered; conditions.isX3MaBearishOrdered = x3maConditions.isX3MaBearishOrdered; conditions.isX3MaSwitchedToBullishState = x3maConditions.isX3MaSwitchedToBullishState; conditions.isX3MaSwitchedToBearishState = x3maConditions.isX3MaSwitchedToBearishState; conditions.isX3MaSwitchedToNeuturalState = x3maConditions.isX3MaSwitchedToNeuturalState; conditions.isX3MaSwitchedToBullishOrdered = x3maConditions.isX3MaSwitchedToBullishOrdered; conditions.isX3MaSwitchedToBearishOrdered = x3maConditions.isX3MaSwitchedToBearishOrdered; // // XVWAP ... // // Buffers ... // Copy( xvwapConditions.vwapFastBuffer, conditions.vwapFastBuffer // ); // Copy( xvwapConditions.vwapMidBuffer, conditions.vwapMidBuffer // ); // Copy( xvwapConditions.vwapSlowBuffer, conditions.vwapSlowBuffer // ); // Copy( xvwapConditions.vwapVolumeBuffer, conditions.vwapVolumeBuffer // ); // Copy( xvwapConditions.vwapPriceBuffer, conditions.vwapPriceBuffer // ); // Copy( xvwapConditions.vwapFastStateBuffer, conditions.vwapFastStateBuffer // ); // Copy( xvwapConditions.vwapMidStateBuffer, conditions.vwapMidStateBuffer // ); // Copy( xvwapConditions.vwapSlowStateBuffer, conditions.vwapSlowStateBuffer // ); // // Conditions ... // conditions.isVWapMidBullish = xvwapConditions.isVWapMidBullish; conditions.isVWapMidBearish = xvwapConditions.isVWapMidBearish; conditions.isVWapFastBullish = xvwapConditions.isVWapFastBullish; conditions.isVWapFastBearish = xvwapConditions.isVWapFastBearish; conditions.isVWapMidNeutural = xvwapConditions.isVWapMidNeutural; conditions.isVWapSlowBullish = xvwapConditions.isVWapSlowBullish; conditions.isVWapSlowBearish = xvwapConditions.isVWapSlowBearish; conditions.isVWapFastOverMid = xvwapConditions.isVWapFastOverMid; conditions.isVWapMidOverSlow = xvwapConditions.isVWapMidOverSlow; conditions.isVWapFastNeutural = xvwapConditions.isVWapFastNeutural; conditions.isVWapSlowNeutural = xvwapConditions.isVWapSlowNeutural; conditions.isVWapFastUnderMid = xvwapConditions.isVWapFastUnderMid; conditions.isVWapMidUnderSlow = xvwapConditions.isVWapMidUnderSlow; conditions.isVWapBullishState = xvwapConditions.isVWapBullishState; conditions.isVWapBearishState = xvwapConditions.isVWapBearishState; conditions.isVWapNeuturalState = xvwapConditions.isVWapNeuturalState; conditions.isVWapBullishOrdered = xvwapConditions.isVWapBullishOrdered; conditions.isVWapBearishOrdered = xvwapConditions.isVWapBearishOrdered; conditions.isVWapSwitchedToBullishState = xvwapConditions.isVWapSwitchedToBullishState; conditions.isVWapSwitchedToBearishState = xvwapConditions.isVWapSwitchedToBearishState; conditions.isVWapSwitchedToNeuturalState = xvwapConditions.isVWapSwitchedToNeuturalState; conditions.isVWapSwitchedToBullishOrdered = xvwapConditions.isVWapSwitchedToBullishOrdered; conditions.isVWapSwitchedToBearishOrdered = xvwapConditions.isVWapSwitchedToBearishOrdered; // // Slopes ... // double rsiSlope = GetSlope(conditions.rsiBuffer, pIDX, cIDX); double strSlope = GetSlope(conditions.strBuffer, pIDX, cIDX); double atrUpperSlope = GetSlope(conditions.atrUpperBuffer, pIDX, cIDX); double atrLowerSlope = GetSlope(conditions.atrLowerBuffer, pIDX, cIDX); double vwapFastSlope = GetSlope(conditions.vwapFastBuffer, pIDX, cIDX); double vwapMidSlope = GetSlope(conditions.vwapMidBuffer, pIDX, cIDX); double vwapSlowSlope = GetSlope(conditions.vwapSlowBuffer, pIDX, cIDX); // bool isRsiSlopeBullish = rsiSlope > 0; bool isStrSlopeBullish = strSlope > 0; bool isAtrUpperSlopeBullish = atrUpperSlope > 0; bool isAtrLowerSlopeBullish = atrLowerSlope > 0; bool isVwapFastSlopeBullish = vwapFastSlope > 0; bool isVwapMidSlopeBullish = vwapMidSlope > 0; bool isVwapSlowSlopeBullish = vwapSlowSlope > 0; // bool isRsiSlopeBearish = rsiSlope < 0; bool isStrSlopeBearish = strSlope < 0; bool isAtrUpperSlopeBearish = atrUpperSlope < 0; bool isAtrLowerSlopeBearish = atrLowerSlope < 0; bool isVwapFastSlopeBearish = vwapFastSlope < 0; bool isVwapMidSlopeBearish = vwapMidSlope < 0; bool isVwapSlowSlopeBearish = vwapSlowSlope < 0; // conditions.rsiSlope = rsiSlope; conditions.strSlope = strSlope; conditions.vwapMidSlope = vwapMidSlope; conditions.vwapSlowSlope = vwapSlowSlope; conditions.atrUpperSlope = atrUpperSlope; conditions.atrLowerSlope = atrLowerSlope; conditions.vwapFastSlope = vwapFastSlope; conditions.isRsiSlopeBearish = isRsiSlopeBearish; conditions.isStrSlopeBearish = isStrSlopeBearish; conditions.isRsiSlopeBullish = isRsiSlopeBullish; conditions.isStrSlopeBullish = isStrSlopeBullish; conditions.isVwapMidSlopeBearish = isVwapMidSlopeBearish; conditions.isVwapMidSlopeBullish = isVwapMidSlopeBullish; conditions.isAtrUpperSlopeBearish = isAtrUpperSlopeBearish; conditions.isAtrLowerSlopeBearish = isAtrLowerSlopeBearish; conditions.isVwapFastSlopeBearish = isVwapFastSlopeBearish; conditions.isVwapSlowSlopeBearish = isVwapSlowSlopeBearish; conditions.isAtrUpperSlopeBullish = isAtrUpperSlopeBullish; conditions.isAtrLowerSlopeBullish = isAtrLowerSlopeBullish; conditions.isVwapFastSlopeBullish = isVwapFastSlopeBullish; conditions.isVwapSlowSlopeBullish = isVwapSlowSlopeBullish; // // Complex Conditions ... // double x3maFast = conditions.x3maFastBuffer[cIDX]; double x3maMid = conditions.x3maMidBuffer[cIDX]; double x3maSlow = conditions.x3maSlowBuffer[cIDX]; // double x3mas[3] = { x3maFast, x3maMid, x3maSlow // }; // double x3maMin = GetMin(x3mas); double x3maMax = GetMax(x3mas); // bool isX3MaFatsOverMid = conditions.x3maFastBuffer[cIDX] > conditions.x3maMidBuffer[cIDX]; bool isX3MaFatsOverMidPrev = conditions.x3maFastBuffer[pIDX] > conditions.x3maMidBuffer[pIDX]; // bool isX3MaFatsUnderMid = conditions.x3maFastBuffer[cIDX] < conditions.x3maMidBuffer[cIDX]; bool isX3MaFatsUnderMidPrev = conditions.x3maFastBuffer[pIDX] < conditions.x3maMidBuffer[pIDX]; // bool isX3MaFatsOverSlow = conditions.x3maFastBuffer[cIDX] > conditions.x3maSlowBuffer[cIDX]; bool isX3MaFatsOverSlowPrev = conditions.x3maFastBuffer[pIDX] > conditions.x3maSlowBuffer[pIDX]; // bool isX3MaFatsUnderSlow = conditions.x3maFastBuffer[cIDX] < conditions.x3maSlowBuffer[cIDX]; bool isX3MaFatsUnderSlowPrev = conditions.x3maFastBuffer[pIDX] < conditions.x3maSlowBuffer[pIDX]; // bool isX3MaFastCrossedOverMid = isX3MaFatsOverMid && !isX3MaFatsOverMidPrev; bool isX3MaFastCrossedUnderMid = isX3MaFatsUnderMid && !isX3MaFatsUnderMidPrev; // bool isX3MaFastCrossedOverSlow = isX3MaFatsOverSlow && !isX3MaFatsOverSlowPrev; bool isX3MaFastCrossedUnderSlow = isX3MaFatsUnderSlow && !isX3MaFatsUnderSlowPrev; // bool isClosedOverX3MaMin = cBar.close > x3maMin; bool isClosedUnderX3MaMin = cBar.close < x3maMin; // bool isClosedOverX3MaMax = cBar.close > x3maMax; bool isClosedUnderX3MaMax = cBar.close < x3maMax; // // // // double vwapFast = conditions.vwapFastBuffer[cIDX]; double vwapMid = conditions.vwapMidBuffer[cIDX]; double vwapSlow = conditions.vwapSlowBuffer[cIDX]; // double vwaps[3] = { vwapFast, vwapMid, vwapSlow // }; // double vwapMin = GetMin(vwaps); double vwapMax = GetMax(vwaps); // bool isVWapFatsOverMid = conditions.vwapFastBuffer[cIDX] > conditions.vwapMidBuffer[cIDX]; bool isVWapFatsOverMidPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapMidBuffer[pIDX]; // bool isVWapFatsUnderMid = conditions.vwapFastBuffer[cIDX] < conditions.vwapMidBuffer[cIDX]; bool isVWapFatsUnderMidPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapMidBuffer[pIDX]; // bool isVWapFatsOverSlow = conditions.vwapFastBuffer[cIDX] > conditions.vwapSlowBuffer[cIDX]; bool isVWapFatsOverSlowPrev = conditions.vwapFastBuffer[pIDX] > conditions.vwapSlowBuffer[pIDX]; // bool isVWapFatsUnderSlow = conditions.vwapFastBuffer[cIDX] < conditions.vwapSlowBuffer[cIDX]; bool isVWapFatsUnderSlowPrev = conditions.vwapFastBuffer[pIDX] < conditions.vwapSlowBuffer[pIDX]; // bool isVWapFastCrossedOverMid = isVWapFatsOverMid && !isVWapFatsOverMidPrev; bool isVWapFastCrossedUnderMid = isVWapFatsUnderMid && !isVWapFatsUnderMidPrev; // bool isVWapFastCrossedOverSlow = isVWapFatsOverSlow && !isVWapFatsOverSlowPrev; bool isVWapFastCrossedUnderSlow = isVWapFatsUnderSlow && !isVWapFatsUnderSlowPrev; // bool isClosedOverVWapMin = cBar.close > vwapMin; bool isClosedUnderVWapMin = cBar.close < vwapMin; // bool isClosedOverVWapMax = cBar.close > vwapMax; bool isClosedUnderVWapMax = cBar.close < vwapMax; // bool isSarEqualsToPeak = conditions.sarBuffer[cIDX] == conditions.peaksBuffer[cIDX]; bool isSarEqualsToVale = conditions.sarBuffer[cIDX] == conditions.valesBuffer[cIDX]; // bool isSarIncreased = conditions.sarBuffer[cIDX] > conditions.sarBuffer[pIDX]; bool isSarDecreased = conditions.sarBuffer[cIDX] < conditions.sarBuffer[pIDX]; // double prevSar = conditions.sarBuffer[pIDX]; double prevStr = conditions.strBuffer[pIDX]; double prevCheLE1 = conditions.le1Buffer[pIDX]; double prevCheLE2 = conditions.le2Buffer[pIDX]; double prevCheSE1 = conditions.se1Buffer[pIDX]; double prevCheSE2 = conditions.se2Buffer[pIDX]; double prevAtrUpper = conditions.atrUpperBuffer[pIDX]; double prevAtrLower = conditions.atrLowerBuffer[pIDX]; // double ches[]; if (prevCheLE1 != EMPTY_VALUE) { // Add( prevCheLE1, ches // ); } if (prevCheLE2 != EMPTY_VALUE) { // Add( prevCheLE2, ches // ); } if (prevCheSE1 != EMPTY_VALUE) { // Add( prevCheSE1, ches // ); } if (prevCheSE2 != EMPTY_VALUE) { // Add( prevCheSE2, ches // ); } // double cheMin = GetMin(ches); double cheMax = GetMax(ches); // 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 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]; bool isDonLowLowerEqualsToVale = conditions.donLowLowerBuffer[cIDX] == conditions.valesBuffer[cIDX]; // bool isStrUpperOverAtrUpper = conditions.strUpBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; bool isStrUpperOverAtrUpperPrev = conditions.strUpBuffer[pIDX] > conditions.atrUpperBuffer[pIDX]; bool isStrUpperCrossedOverAtrUpper = isStrUpperOverAtrUpper && !isStrUpperOverAtrUpperPrev; // 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 = conditions.strDownBuffer[pIDX] < conditions.atrLowerBuffer[pIDX]; bool isStrLowerCrossedUnderAtrLower = isStrLowerUnderAtrLower && !isStrLowerUnderAtrLowerPrev; // bool isStrUpperOverDonHighUpper = conditions.strUpBuffer[cIDX] > conditions.donHighUpperBuffer[cIDX]; bool isStrUpperOverDonHighUpperPrev = conditions.strUpBuffer[pIDX] > conditions.donHighUpperBuffer[pIDX]; bool isStrUpperCrossedOverDonHighUpper = isStrUpperOverDonHighUpper && !isStrUpperOverDonHighUpperPrev; // 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 = conditions.strDownBuffer[pIDX] < conditions.donLowLowerBuffer[pIDX]; bool isStrLowerCrossedUnderDonLowLower = isStrLowerUnderDonLowLower && !isStrLowerUnderDonLowLowerPrev; // bool isAtrUpperOverPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]; bool isAtrUpperEqualsToPeak = conditions.atrUpperBuffer[cIDX] == conditions.peaksBuffer[cIDX]; // bool isAtrUpperCrossedUpPeak = conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX] && !(conditions.atrUpperBuffer[cIDX] > conditions.peaksBuffer[cIDX]); bool isAtrUpperCrossedDownPeak = conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX] && !(conditions.atrUpperBuffer[cIDX] < conditions.peaksBuffer[cIDX]); // bool isAtrLowerUnderVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]; bool isAtrLowerEqualsToVale = conditions.atrUpperBuffer[cIDX] == conditions.valesBuffer[cIDX]; // bool isAtrLowerCrossedUpVale = conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX] && !(conditions.atrUpperBuffer[cIDX] > conditions.valesBuffer[cIDX]); bool isAtrLowerCrossedDownVale = conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX] && !(conditions.atrUpperBuffer[cIDX] < conditions.valesBuffer[cIDX]); // conditions.cheMin = cheMin; conditions.cheMax = cheMax; conditions.x3maMin = x3maMin; conditions.x3maMax = x3maMax; conditions.vwapMin = vwapMin; conditions.vwapMax = vwapMax; // conditions.isSarIncreased = isSarIncreased; conditions.isSarDecreased = isSarDecreased; conditions.isSarEqualsToPeak = isSarEqualsToPeak; conditions.isSarEqualsToVale = isSarEqualsToVale; conditions.isStrEqualsToPeak = isStrEqualsToPeak; conditions.isStrEqualsToVale = isStrEqualsToVale; conditions.isX3MaFatsOverMid = isX3MaFatsOverMid; conditions.isX3MaFatsUnderMid = isX3MaFatsUnderMid; conditions.isX3MaFatsOverSlow = isX3MaFatsOverSlow; conditions.isStrUpperOverPeak = isStrUpperOverPeak; conditions.isPeakOverAtrUpper = isPeakOverAtrUpper; conditions.isStrLowerOverVale = isStrLowerOverVale; conditions.isAtrUpperOverPeak = isAtrUpperOverPeak; conditions.isClosedOverX3MaMin = isClosedOverX3MaMin; conditions.isClosedOverX3MaMax = isClosedOverX3MaMax; conditions.isX3MaFatsUnderSlow = isX3MaFatsUnderSlow; conditions.isAtrLowerUnderVale = isAtrLowerUnderVale; conditions.isStrLowerUnderVale = isStrLowerUnderVale; conditions.isStrUpperUnderPeak = isStrUpperUnderPeak; conditions.isValeUnderAtrLower = isValeUnderAtrLower; conditions.isClosedOverVWapMin = isClosedOverVWapMin; conditions.isClosedOverVWapMax = isClosedOverVWapMax; conditions.isClosedUnderX3MaMin = isClosedUnderX3MaMin; conditions.isClosedUnderX3MaMax = isClosedUnderX3MaMax; conditions.isClosedUnderVWapMin = isClosedUnderVWapMin; conditions.isClosedUnderVWapMax = isClosedUnderVWapMax; conditions.isSarCrossedOverVale = isSarCrossedOverVale; conditions.isStrCrossedOverVale = isStrCrossedOverVale; conditions.isX3MaFatsOverMidPrev = isX3MaFatsOverMidPrev; conditions.isSarCrossedUnderPeak = isSarCrossedUnderPeak; conditions.isStrCrossedUnderPeak = isStrCrossedUnderPeak; conditions.isNewPeakOverAtrUpper = isNewPeakOverAtrUpper; conditions.isX3MaFatsUnderMidPrev = isX3MaFatsUnderMidPrev; conditions.isX3MaFatsOverSlowPrev = isX3MaFatsOverSlowPrev; conditions.isAtrUpperEqualsToPeak = isAtrUpperEqualsToPeak; conditions.isAtrLowerEqualsToVale = isAtrLowerEqualsToVale; conditions.isNewValeUnderAtrLower = isNewValeUnderAtrLower; conditions.isStrUpperOverAtrUpper = isStrUpperOverAtrUpper; conditions.isStrLowerOverAtrLower = isStrLowerOverAtrLower; conditions.isX3MaFatsUnderSlowPrev = isX3MaFatsUnderSlowPrev; conditions.isStrUpperUnderAtrUpper = isStrUpperUnderAtrUpper; conditions.isStrLowerUnderAtrLower = isStrLowerUnderAtrLower; conditions.isAtrUpperCrossedUpPeak = isAtrUpperCrossedUpPeak; conditions.isAtrLowerCrossedUpVale = isAtrLowerCrossedUpVale; conditions.isX3MaFastCrossedOverMid = isX3MaFastCrossedOverMid; conditions.isVWapFastCrossedOverMid = isVWapFastCrossedOverMid; conditions.isX3MaFastCrossedUnderMid = isX3MaFastCrossedUnderMid; conditions.isX3MaFastCrossedOverSlow = isX3MaFastCrossedOverSlow; conditions.isAtrUpperCrossedDownPeak = isAtrUpperCrossedDownPeak; conditions.isAtrLowerCrossedDownVale = isAtrLowerCrossedDownVale; conditions.isVWapFastCrossedUnderMid = isVWapFastCrossedUnderMid; conditions.isDonLowLowerEqualsToVale = isDonLowLowerEqualsToVale; conditions.isStrUpperCrossedOverPeak = isStrUpperCrossedOverPeak; conditions.isStrLowerCrossedOverVale = isStrLowerCrossedOverVale; conditions.isStrLowerOverDonLowLower = isStrLowerOverDonLowLower; conditions.isVWapFastCrossedOverSlow = isVWapFastCrossedOverSlow; conditions.isX3MaFastCrossedUnderSlow = isX3MaFastCrossedUnderSlow; conditions.isVWapFastCrossedUnderSlow = isVWapFastCrossedUnderSlow; 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; // xpvConditions.Clean(); xhkConditions.Clean(); xmasConditions.Clean(); xatrConditions.Clean(); xstrConditions.Clean(); xcheConditions.Clean(); xdonConditions.Clean(); x3maConditions.Clean(); xvwapConditions.Clean(); // Free(); // return result; } // protected: // // private: // // string mSymbol; // Trading Symbol ENUM_TIMEFRAMES mPeriod; // Trading Period // // Inputs ... X121Inputs mInputs; X121XCCInputs xccInputs; X121XPVInputs xpvInputs; X121XHKInputs xhkInputs; X121XMASInputs xmasInputs; X121XATRInputs xatrInputs; X121XDONInputs xdonInputs; X121XSTRInputs xstrInputs; X121XCHEInputs xcheInputs; X121X3MAInputs x3maInputs; X121XVWAPInputs xvwapInputs; // int mRSIHandler; }; //