/////////////////////////////////////////////////////// // // 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.xatr.helper.mq5" #include "../Helpers/x-saherelm.x121.xdon.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; X121XPVInputs xpvInputs; X121XATRInputs xatrInputs; X121XSTRInputs xstrInputs; X121XDONInputs xdonInputs; X121XVWAPInputs xvwapInputs; // // Constructor ... X121Inputs() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // xpvInputs.Clean(); xatrInputs.Clean(); xstrInputs.Clean(); xdonInputs.Clean(); xvwapInputs.Clean(); } /** * Set Default Values ... */ void Default() { // xpvInputs.Default(); xatrInputs.Default(); xstrInputs.Default(); xdonInputs.Default(); xvwapInputs.Default(); } /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = // xpvInputs.IsValid() && xatrInputs.IsValid() && xstrInputs.IsValid() && xdonInputs.IsValid() && xvwapInputs.IsValid() // ; // return result; } /** * Extract Max Input Length ... * * @return ( int ) */ int Max() { // int result = 0; // int xpvMax = xpvInputs.Max(); int xatrMax = xatrInputs.Max(); int xstrMax = xstrInputs.Max(); int xdonMax = xdonInputs.Max(); int xvwapMax = xvwapInputs.Max(); // result = MathMax(xpvMax, xatrMax); result = MathMax(result, xstrMax); result = MathMax(result, xdonMax); result = MathMax(result, xvwapMax); // return result; } }; // // Conditions ... struct X121Conditions { // // Common ... string symbol; ENUM_TIMEFRAMES period; datetime time; // // Buffers ... double atrUpperBuffer[]; double atrLowerBuffer[]; double atrUpperRawBuffer[]; double atrLowerRawBuffer[]; double rsiBuffer[]; double atrBuffer[]; double strBuffer[]; double strPriceBuffer[]; double strUpBuffer[]; double strDownBuffer[]; double strStateBuffer[]; double donOpenUpperBuffer[]; double donOpenLowerBuffer[]; double donHighUpperBuffer[]; double donHighLowerBuffer[]; double donLowUpperBuffer[]; double donLowLowerBuffer[]; double donCloseUpperBuffer[]; double donCloseLowerBuffer[]; double peaksBuffer[]; double valesBuffer[]; double sarBuffer[]; double cHHBuffer[]; double cLLBuffer[]; double sHHBuffer[]; double sLLBuffer[]; double mHHBuffer[]; double mLLBuffer[]; double lHHBuffer[]; double lLLBuffer[]; double hHHBuffer[]; double hLLBuffer[]; double vwapFastBuffer[]; double vwapMidBuffer[]; double vwapSlowBuffer[]; double vwapVolumeBuffer[]; double vwapPriceBuffer[]; double vwapFastStateBuffer[]; double vwapMidStateBuffer[]; double vwapSlowStateBuffer[]; // // Conditions ... bool isRSIOverBought; bool isRSICrossedOverOverBought; bool isRSICrossedUnderOverBought; bool isRSIOverSold; bool isRSICrossedUnderOverSold; bool isRSICrossedOverOverSold; // bool isCloseOverATRUpper; bool isCloseOverATRLower; bool isCloseUnderATRUpper; bool isCloseUnderATRLower; // bool isRejectUpATRUpper; bool isRejectDownATRUpper; // bool isRejectUpATRLower; bool isRejectDownATRLower; // bool isBreakUpATRUpper; bool isBreakDownATRUpper; // bool isBreakUpATRLower; bool isBreakDownATRLower; // bool isRejectDonOpenUpper; bool isRejectDonHighUpper; bool isRejectDonLowUpper; bool isRejectDonCloseUpper; // bool isRejectDonOpenLower; bool isRejectDonHighLower; bool isRejectDonLowLower; bool isRejectDonCloseLower; // bool isBreakDonOpenUpper; bool isBreakDonHighUpper; bool isBreakDonLowUpper; bool isBreakDonCloseUpper; // bool isBreakDonOpenLower; bool isBreakDonHighLower; bool isBreakDonLowLower; bool isBreakDonCloseLower; // 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 isVWapFastBullish; bool isVWapFastBearish; bool isVWapFastNeutural; bool isVWapMidBullish; bool isVWapMidBearish; bool isVWapMidNeutural; bool isVWapSlowBullish; bool isVWapSlowBearish; bool isVWapSlowNeutural; bool isVWapFastOverMid; bool isVWapMidOverSlow; bool isVWapFastUnderMid; bool isVWapMidUnderSlow; bool isVWapBullishState; bool isVWapBearishState; bool isVWapNeuturalState; bool isVWapBullishOrdered; bool isVWapBearishOrdered; bool isVWapSwitchedToBullishOrdered; bool isVWapSwitchedToBearishOrdered; bool isVWapSwitchedToBullishState; bool isVWapSwitchedToBearishState; bool isVWapSwitchedToNeuturalState; // // Complex Conditions ... // bool isSarEqualsToPeak; bool isSarEqualsToVale; // bool isNewPeakOverATRUpper; bool isNewValeUnderATRLower; // bool isDonHighUpperEqualsToPeak; bool isDonLowLowerEqualsToVale; // bool isSTRUpperCrossedOverATRUpper; bool isSTRLowerCrossedUnderATRLower; // bool isSTRUpperCrossedOverDonHighUpper; bool isSTRLowerCrossedUnderDonLowLower; // // Constructor ... X121Conditions() { Clean(); } // // Tools ... /** * Cleaning Up ... */ void Clean() { // // Commons ... symbol = NULL; period = NULL; time = NULL; // // Buffers ... // Clean(atrUpperBuffer); Clean(atrLowerBuffer); Clean(atrUpperRawBuffer); Clean(atrLowerRawBuffer); Clean(rsiBuffer); Clean(atrBuffer); Clean(strBuffer); Clean(strPriceBuffer); Clean(strUpBuffer); Clean(strDownBuffer); Clean(strStateBuffer); Clean(donOpenUpperBuffer); Clean(donOpenLowerBuffer); Clean(donHighUpperBuffer); Clean(donHighLowerBuffer); Clean(donLowUpperBuffer); Clean(donLowLowerBuffer); Clean(donCloseUpperBuffer); Clean(donCloseLowerBuffer); Clean(peaksBuffer); Clean(valesBuffer); Clean(sarBuffer); Clean(cHHBuffer); Clean(cLLBuffer); Clean(sHHBuffer); Clean(sLLBuffer); Clean(mHHBuffer); Clean(mLLBuffer); Clean(lHHBuffer); Clean(lLLBuffer); Clean(hHHBuffer); Clean(hLLBuffer); Clean(vwapFastBuffer); Clean(vwapMidBuffer); Clean(vwapSlowBuffer); Clean(vwapVolumeBuffer); Clean(vwapPriceBuffer); Clean(vwapFastStateBuffer); Clean(vwapMidStateBuffer); Clean(vwapSlowStateBuffer); // ArraySetAsSeries(atrUpperBuffer, true); ArraySetAsSeries(atrLowerBuffer, true); ArraySetAsSeries(atrUpperRawBuffer, true); ArraySetAsSeries(atrLowerRawBuffer, true); ArraySetAsSeries(rsiBuffer, true); ArraySetAsSeries(atrBuffer, true); ArraySetAsSeries(strBuffer, true); ArraySetAsSeries(strPriceBuffer, true); ArraySetAsSeries(strUpBuffer, true); ArraySetAsSeries(strDownBuffer, true); ArraySetAsSeries(strStateBuffer, true); ArraySetAsSeries(donOpenUpperBuffer, true); ArraySetAsSeries(donOpenLowerBuffer, true); ArraySetAsSeries(donHighUpperBuffer, true); ArraySetAsSeries(donHighLowerBuffer, true); ArraySetAsSeries(donLowUpperBuffer, true); ArraySetAsSeries(donLowLowerBuffer, true); ArraySetAsSeries(donCloseUpperBuffer, true); ArraySetAsSeries(donCloseLowerBuffer, true); ArraySetAsSeries(peaksBuffer, true); ArraySetAsSeries(valesBuffer, 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(vwapFastBuffer, true); ArraySetAsSeries(vwapMidBuffer, true); ArraySetAsSeries(vwapSlowBuffer, true); ArraySetAsSeries(vwapVolumeBuffer, true); ArraySetAsSeries(vwapPriceBuffer, true); ArraySetAsSeries(vwapFastStateBuffer, true); ArraySetAsSeries(vwapMidStateBuffer, true); ArraySetAsSeries(vwapSlowStateBuffer, true); // // Conditions ... // // RSI ... // isRSIOverBought = false; isRSICrossedOverOverBought = false; isRSICrossedUnderOverBought = false; // isRSIOverSold = false; isRSICrossedUnderOverSold = false; isRSICrossedOverOverSold = false; // // ATR ... // isCloseOverATRUpper = false; isCloseOverATRLower = false; // isCloseUnderATRUpper = false; isCloseUnderATRLower = false; // isRejectUpATRUpper = false; isRejectDownATRUpper = false; // isRejectUpATRLower = false; isRejectDownATRLower = false; // isBreakUpATRUpper = false; isBreakDownATRUpper = false; // isBreakUpATRLower = false; isBreakDownATRLower = false; // // DON ... // isRejectDonOpenUpper = false; isRejectDonHighUpper = false; isRejectDonLowUpper = false; isRejectDonCloseUpper = false; // isRejectDonOpenLower = false; isRejectDonHighLower = false; isRejectDonLowLower = false; isRejectDonCloseLower = false; // isBreakDonOpenUpper = false; isBreakDonHighUpper = false; isBreakDonLowUpper = false; isBreakDonCloseUpper = false; // isBreakDonOpenLower = false; isBreakDonHighLower = false; isBreakDonLowLower = false; isBreakDonCloseLower = false; // // 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 ... // isVWapFastBullish = false; isVWapFastBearish = false; isVWapFastNeutural = false; // isVWapMidBullish = false; isVWapMidBearish = false; isVWapMidNeutural = false; // isVWapSlowBullish = false; isVWapSlowBearish = false; isVWapSlowNeutural = false; // isVWapFastOverMid = false; isVWapMidOverSlow = 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; // // Complex Conditions ... // isSarEqualsToPeak = false; isSarEqualsToVale = false; // isNewPeakOverATRUpper = false; isNewValeUnderATRLower = false; // isDonHighUpperEqualsToPeak = false; isDonLowLowerEqualsToVale = false; // isSTRUpperCrossedOverATRUpper = false; isSTRLowerCrossedUnderATRLower = false; // isSTRUpperCrossedOverDonHighUpper = false; isSTRLowerCrossedUnderDonLowLower = false; } /** * 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; } /** * 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 = // "SAR ..." + separator + "-----------------------" + separator + ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) + ToString("isSarBearish", isSarBearish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBullish", isSarSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) + // "STR ..." + separator + "-----------------------" + separator + ToString("isStrBullish", isStrBullish, ignoreFalseConditions, separator) + ToString("isStrBearish", isStrBearish, ignoreFalseConditions, separator) + ToString("isStrSwitchedToBullish", isStrSwitchedToBullish, ignoreFalseConditions, separator) + ToString("isStrSwitchedToBearish", isStrSwitchedToBearish, ignoreFalseConditions, 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) + // "> 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) + // "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) + // "DON ..." + separator + "-----------------------" + separator + ToString("isBreakDownATRLower", isBreakDownATRLower, ignoreFalseConditions, separator) + ToString("isRejectDonOpenUpper", isRejectDonOpenUpper, ignoreFalseConditions, separator) + ToString("isRejectDonHighUpper", isRejectDonHighUpper, ignoreFalseConditions, separator) + ToString("isRejectDonLowUpper", isRejectDonLowUpper, ignoreFalseConditions, separator) + ToString("isRejectDonCloseUpper", isRejectDonCloseUpper, ignoreFalseConditions, separator) + ToString("isRejectDonOpenLower", isRejectDonOpenLower, ignoreFalseConditions, separator) + ToString("isRejectDonHighLower", isRejectDonHighLower, ignoreFalseConditions, separator) + ToString("isRejectDonLowLower", isRejectDonLowLower, ignoreFalseConditions, separator) + ToString("isRejectDonCloseLower", isRejectDonCloseLower, ignoreFalseConditions, separator) + ToString("isBreakDonOpenUpper", isBreakDonOpenUpper, ignoreFalseConditions, separator) + ToString("isBreakDonHighUpper", isBreakDonHighUpper, ignoreFalseConditions, separator) + ToString("isBreakDonLowUpper", isBreakDonLowUpper, ignoreFalseConditions, separator) + ToString("isBreakDonCloseUpper", isBreakDonCloseUpper, ignoreFalseConditions, separator) + ToString("isBreakDonOpenLower", isBreakDonOpenLower, ignoreFalseConditions, separator) + ToString("isBreakDonHighLower", isBreakDonHighLower, ignoreFalseConditions, separator) + ToString("isBreakDonLowLower", isBreakDonLowLower, ignoreFalseConditions, separator) + ToString("isBreakDonCloseLower", isBreakDonCloseLower, ignoreFalseConditions, 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 + "Coplex ..." + separator + "-----------------------" + separator + ToString("isSarEqualsToPeak", isSarEqualsToPeak, ignoreFalseConditions, separator) + ToString("isSarEqualsToVale", isSarEqualsToVale, ignoreFalseConditions, separator) + ToString("isNewPeakOverATRUpper", isNewPeakOverATRUpper, ignoreFalseConditions, separator) + ToString("isNewValeUnderATRLower", isNewValeUnderATRLower, 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) + // "" // ; // 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 ... XCX121XPVHelper *xpvHelper; XCX121XATRHelper *xatrHelper; XCX121XSTRHelper *xstrHelper; XCX121XDONHelper *xdonHelper; XCX121XVWAPHelper *xvwapHelper; // // Constructors ... XCX121Helper() { } // // Deconstructor ... ~XCX121Helper() { // delete xpvHelper; delete xatrHelper; delete xstrHelper; delete xdonHelper; delete 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; xpvInputs = inputs.xpvInputs; xatrInputs = inputs.xatrInputs; xstrInputs = inputs.xstrInputs; xdonInputs = inputs.xdonInputs; xvwapInputs = inputs.xvwapInputs; // // Initial Helpers ... // // XPV ... xpvHelper = new XCX121XPVHelper(); result = xpvHelper.Init( symbol, period, xpvInputs // ); 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; } // // XDON ... xdonHelper = new XCX121XDONHelper(); result = xdonHelper.Init( symbol, period, xdonInputs // ); 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; } // // 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; } // // XDON ... bool GetDONConditions( X121XDONConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = false; // result = xdonHelper.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; } // 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; } // // XATR ... X121XATRConditions xatrConditions; result = GetATRConditions( xatrConditions, barIndex, loopback // ); if (!result) { return result; } // // XSTR ... X121XSTRConditions xstrConditions; result = GetSTRConditions( xstrConditions, barIndex, loopback // ); if (!result) { return result; } // // XDON ... X121XDONConditions xdonConditions; result = GetDONConditions( xdonConditions, barIndex, loopback // ); if (!result) { return result; } // // XVWAP ... X121XVWAPConditions xvwapConditions; result = GetVWAPConditions( xvwapConditions, barIndex, loopback // ); if (!result) { return result; } // // Fill X121 Conditions Reference by Using // Retrieved Conditions ... // // XPV ... // // Buffers ... // Copy( xpvConditions.peaksBuffer, conditions.peaksBuffer // ); // Copy( xpvConditions.valesBuffer, conditions.valesBuffer // ); // 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 // ); // // 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; // // 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.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 ... // // 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; // // 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 ... // conditions.isBreakDonLowUpper = xdonConditions.isBreakDonLowUpper; conditions.isBreakDonLowLower = xdonConditions.isBreakDonLowLower; conditions.isRejectDonLowUpper = xdonConditions.isRejectDonLowUpper; conditions.isRejectDonLowLower = xdonConditions.isRejectDonLowLower; conditions.isBreakDonOpenUpper = xdonConditions.isBreakDonOpenUpper; conditions.isBreakDonHighUpper = xdonConditions.isBreakDonHighUpper; conditions.isBreakDonOpenLower = xdonConditions.isBreakDonOpenLower; conditions.isBreakDonHighLower = xdonConditions.isBreakDonHighLower; conditions.isRejectDonOpenUpper = xdonConditions.isRejectDonOpenUpper; conditions.isRejectDonHighUpper = xdonConditions.isRejectDonHighUpper; conditions.isRejectDonOpenLower = xdonConditions.isRejectDonOpenLower; conditions.isRejectDonHighLower = xdonConditions.isRejectDonHighLower; conditions.isBreakDonCloseUpper = xdonConditions.isBreakDonCloseUpper; conditions.isBreakDonCloseLower = xdonConditions.isBreakDonCloseLower; conditions.isRejectDonCloseUpper = xdonConditions.isRejectDonCloseUpper; conditions.isRejectDonCloseLower = xdonConditions.isRejectDonCloseLower; // // 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; // // Complex Conditions ... // int cIDX = 1; int pIDX = cIDX + 1; // bool isSarEqualsToPeak = conditions.sarBuffer[cIDX] == conditions.peaksBuffer[cIDX]; bool isSarEqualsToVale = conditions.sarBuffer[cIDX] == conditions.valesBuffer[cIDX]; // bool isNewPeakOverATRUpper = conditions.isNewPeak && conditions.peaksBuffer[cIDX] > conditions.atrUpperBuffer[cIDX]; bool isNewValeUnderATRLower = conditions.isNewVale && conditions.valesBuffer[cIDX] > conditions.atrLowerBuffer[cIDX]; // 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 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 isSTRLowerUnderDonLowLower = conditions.strDownBuffer[cIDX] < conditions.donLowLowerBuffer[cIDX]; bool isSTRLowerUnderDonLowLowerPrev = conditions.strDownBuffer[pIDX] < conditions.donLowLowerBuffer[pIDX]; bool isSTRLowerCrossedUnderDonLowLower = isSTRLowerUnderDonLowLower && !isSTRLowerUnderDonLowLowerPrev; // conditions.isSarEqualsToPeak = isSarEqualsToPeak; conditions.isSarEqualsToVale = isSarEqualsToVale; conditions.isNewPeakOverATRUpper = isNewPeakOverATRUpper; conditions.isNewValeUnderATRLower = isNewValeUnderATRLower; conditions.isDonHighUpperEqualsToPeak = isDonHighUpperEqualsToPeak; conditions.isDonLowLowerEqualsToVale = isDonLowLowerEqualsToVale; conditions.isSTRUpperCrossedOverATRUpper = isSTRUpperCrossedOverATRUpper; conditions.isSTRLowerCrossedUnderATRLower = isSTRLowerCrossedUnderATRLower; conditions.isSTRUpperCrossedOverDonHighUpper = isSTRUpperCrossedOverDonHighUpper; conditions.isSTRLowerCrossedUnderDonLowLower = isSTRLowerCrossedUnderDonLowLower; // return result; } // protected: // // private: // // string mSymbol; // Trading Symbol ENUM_TIMEFRAMES mPeriod; // Trading Period // // Inputs ... X121Inputs mInputs; X121XPVInputs xpvInputs; X121XATRInputs xatrInputs; X121XDONInputs xdonInputs; X121XSTRInputs xstrInputs; X121XVWAPInputs xvwapInputs; // int mRSIHandler; }; //