/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Class Library // ---------------------------------------------- // Name: XSCX121Setup // Description: provides implementation of X121 // Setup ... // // // 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 "../Libraries/x-saherelm.xtrade.lib.mq5" // #include "../Classes/x-saherelm.xalert.class.mq5" // #include "../Helpers/x-saherelm.xtd.helper.mq5" #include "../Helpers/x-saherelm.xhk.helper.mq5" #include "../Helpers/x-saherelm.xstr.helper.mq5" #include "../Helpers/x-saherelm.xche.helper.mq5" #include "../Helpers/x-saherelm.xich.helper.mq5" #include "../Helpers/x-saherelm.xmrb.helper.mq5" #include "../Helpers/x-saherelm.xosc.helper.mq5" #include "../Helpers/x-saherelm.xasct.helper.mq5" #include "../Helpers/x-saherelm.xsslc.helper.mq5" #include "../Helpers/x-saherelm.xhull.helper.mq5" #include "../Helpers/x-saherelm.xmatd.helper.mq5" #include "../Helpers/x-saherelm.xadxtd.helper.mq5" // // Definitions ... // // Inputs ... struct X121SetupInputs { // // Commons ... string symbol; // Symbol ENUM_TIMEFRAMES period; // Time Frame // // Helpers Inputs ... XTDInputs tdInputs; // XTD Inputs XHKInputs hkInputs; // XHK Inputs XCHEInputs cheInputs; // XCHE Inputs XICHInputs ichInputs; // XICH Inputs XSTRInputs strInputs; // XSTR Inputs XMRBInputs mrbInputs; // XMRB Inputs XOSCInputs oscInputs; // XOSC Inputs XMATDInputs matdInputs; // XMATD Inputs XASCTInputs asctInputs; // XASCT Inputs XSSLCInputs sslcInputs; // XSSLC Inputs XHULLInputs hullInputs; // XHULL Inputs XADXTDInputs adxtdInputs; // XADXTD Inputs // // Constructor ... void X121SetupInputs() { Clean(); } // bool Init() { // Default(); // bool result = IsValid(); // return result; } bool Init( string _symbol, // Symbol ENUM_TIMEFRAMES _period, // Time Frame XTDInputs &_tdInputs, // XTD Inputs XHKInputs &_hkInputs, // XHK Inputs XCHEInputs &_cheInputs, // XCHE Inputs XICHInputs &_ichInputs, // XICH Inputs XSTRInputs &_strInputs, // XSTR Inputs XMRBInputs &_mrbInputs, // XMRB Inputs XOSCInputs &_oscInputs, // XOSC Inputs XMATDInputs &_matdInputs, // XMATD Inputs XASCTInputs &_asctInputs, // XASCT Inputs XSSLCInputs &_sslcInputs, // XSSLC Inputs XHULLInputs &_hullInputs, // XHULL Inputs XADXTDInputs &_adxtdInputs // XADXTD Inputs ) { // this.symbol = _symbol; this.period = _period; // // Helpers Inputs ... this.tdInputs = _tdInputs; this.hkInputs = _hkInputs; this.cheInputs = _cheInputs; this.ichInputs = _ichInputs; this.strInputs = _strInputs; this.mrbInputs = _mrbInputs; this.oscInputs = _oscInputs; this.matdInputs = _matdInputs; this.asctInputs = _asctInputs; this.sslcInputs = _sslcInputs; this.hullInputs = _hullInputs; this.adxtdInputs = _adxtdInputs; // bool result = IsValid(); // return result; } // // Tools ... // // Cleanup ... void Clean() { // symbol = NULL; period = NULL; // tdInputs.Clean(); hkInputs.Clean(); cheInputs.Clean(); ichInputs.Clean(); strInputs.Clean(); mrbInputs.Clean(); oscInputs.Clean(); matdInputs.Clean(); asctInputs.Clean(); sslcInputs.Clean(); hullInputs.Clean(); adxtdInputs.Clean(); } // // Default ... void Default() { // tdInputs.Default(); hkInputs.Default(); cheInputs.Default(); ichInputs.Default(); strInputs.Default(); mrbInputs.Default(); oscInputs.Default(); matdInputs.Default(); asctInputs.Default(); sslcInputs.Default(); hullInputs.Default(); adxtdInputs.Default(); } // // Validate ... bool IsValid() { // bool result = false; // result = // IsValid(symbol) && IsValid(period) // ; if (!result) { return result; } // result = tdInputs.IsValid(); if (!result) { return result; } result = hkInputs.IsValid(); if (!result) { return result; } result = cheInputs.IsValid(); if (!result) { return result; } result = ichInputs.IsValid(); if (!result) { return result; } result = strInputs.IsValid(); if (!result) { return result; } result = mrbInputs.IsValid(); if (!result) { return result; } result = oscInputs.IsValid(); if (!result) { return result; } result = matdInputs.IsValid(); if (!result) { return result; } result = asctInputs.IsValid(); if (!result) { return result; } result = sslcInputs.IsValid(); if (!result) { return result; } result = hullInputs.IsValid(); if (!result) { return result; } result = adxtdInputs.IsValid(); if (!result) { return result; } // return result; } }; // // Conditions ... struct X121SetupConditions { // // Common ... string symbol; ENUM_TIMEFRAMES period; datetime time; // // Conditions ... XTDConditions tdConditions; XHKConditions hkConditions; XCHEConditions cheConditions; XICHConditions ichConditions; XSTRConditions strConditions; XMRBConditions mrbConditions; XMATDConditions matdConditions; XASCTConditions asctConditions; XSSLCConditions sslcConditions; XHULLConditions hullConditions; XADXTDConditions adxtdConditions; // // Oscillators ... double cci[]; double rsi[]; double macd[]; double macdSignal[]; // // Tools ... // // Cleanup ... void Clean() { // time = NULL; symbol = NULL; period = NULL; // Clean(cci); Clean(rsi); Clean(macd); Clean(macdSignal); // tdConditions.Clean(); hkConditions.Clean(); cheConditions.Clean(); ichConditions.Clean(); strConditions.Clean(); mrbConditions.Clean(); matdConditions.Clean(); asctConditions.Clean(); sslcConditions.Clean(); hullConditions.Clean(); adxtdConditions.Clean(); } // void GenerateScore( double &bullishScore, double &bearishScore // ) { // bullishScore = 0; bearishScore = 0; // double tempBullishScore = 0; double tempBearishScore = 0; // matdConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // adxtdConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // strConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // cheConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // asctConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // tdConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // ichConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // hkConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // mrbConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // sslcConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; // hullConditions.GenerateScore( tempBullishScore, tempBearishScore // ); bullishScore += tempBullishScore; bearishScore += tempBearishScore; } // 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 matdSummary = matdConditions.GenerateSummary(false, true, false); string adxtdSummary = adxtdConditions.GenerateSummary(false, true, false); string strSummary = strConditions.GenerateSummary(false, true, false); string cheSummary = cheConditions.GenerateSummary(false, true, false); string asctSummary = asctConditions.GenerateSummary(false, true, false); string tdSummary = tdConditions.GenerateSummary(false, true, false); string ichSummary = ichConditions.GenerateSummary(false, true, false); string hkSummary = hkConditions.GenerateSummary(false, true, false); string mrbSummary = mrbConditions.GenerateSummary(false, true, false); string sslcSummary = sslcConditions.GenerateSummary(false, true, false); string hullSummary = hullConditions.GenerateSummary(false, true, false); // string conditionsStr = // matdSummary + separator + adxtdSummary + separator + strSummary + separator + cheSummary + separator + asctSummary + separator + tdSummary + separator + ichSummary + separator + hkSummary + separator + mrbSummary + separator + sslcSummary + separator + hullSummary + separator + "" // ; // result = // "[" + GetTag() + "]" + separator + (onlyConditions ? "" : commonStr) + (!includeScores ? "" : scoresStr) + " " + separator + (onlyCommons ? "" : conditionsStr) + "" // ; // return result; } // string GetTag() { return "X121Setup"; } }; // // Condition Parser ... struct X121SignalGenerator { // string version; // // Retrieve OSC Based Long Verifications ... bool IsOSCLongVerified( X121SetupConditions &conditions // Conditions ) { // bool result = false; // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; // result = // // CCI ... conditions.cci[cIndex] < 96 && conditions.cci[cIndex] > conditions.cci[pIndex] // && // // RSI ... conditions.rsi[cIndex] < 70 && conditions.rsi[cIndex] > conditions.rsi[pIndex] // && // // MACD ... conditions.macd[cIndex] > 0 && conditions.macdSignal[cIndex] > 0 && conditions.macd[cIndex] > conditions.macdSignal[cIndex] // ; // return result; } // // Retrieve OSC Based Short Verifications ... bool IsOSCShortVerified( X121SetupConditions &conditions // Conditions ) { // bool result = false; // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; // result = // // CCI ... conditions.cci[cIndex] > -96 && conditions.cci[cIndex] < conditions.cci[pIndex] // && // // RSI ... conditions.rsi[cIndex] > 30 && conditions.rsi[cIndex] < conditions.rsi[pIndex] // && // // MACD ... conditions.macd[cIndex] < 0 && conditions.macdSignal[cIndex] < 0 && conditions.macd[cIndex] < conditions.macdSignal[cIndex] // ; // return result; } // // Check Market Conditions for Long Signals ... bool HasLongConditions( X121SetupConditions &conditions, // Conditions int &pusher // Pushers ) { // bool result = false; // pusher = 0; // bool isOSCShortVerified = IsOSCShortVerified(conditions); // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; // double bullishScore = 0; double bearishScore = 0; conditions.GenerateScore( bullishScore, bearishScore // ); // bool long1 = // // Starting Conditions ... conditions.matdConditions.isSwitchedToBullish && // // Verifications ... conditions.matdConditions.isSARBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.tdConditions.isBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long1) { pusher++; } // bool long2 = // // Starting Conditions ... conditions.matdConditions.isSARSwitchedToBullish && // // Verifications ... conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.tdConditions.isBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long2) { pusher++; } // bool long3 = // // Starting Conditions ... conditions.adxtdConditions.isStrongSwitchedToBullish && // // Verifications ... conditions.matdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.tdConditions.isBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long3) { pusher++; } // bool long4 = // // Starting Conditions ... conditions.strConditions.isTrendSwitchedToBullish && // // Verifications ... conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.cheConditions.isStrongBullish && conditions.tdConditions.isBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long4) { pusher++; } // bool long5 = // // Starting Conditions ... conditions.cheConditions.isStrongSwitchedToBullish && // // Verifications ... conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.tdConditions.isBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long5) { pusher++; } // bool long6 = // // Starting Conditions ... conditions.tdConditions.isSwitchedToBullish && // // Verifications ... conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long6) { pusher++; } // bool long7 = // // Starting Conditions ... conditions.rsi[cIndex] > 30 && conditions.rsi[pIndex] <= 30 && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long7) { pusher++; } // bool long8 = // // Starting Conditions ... conditions.cci[cIndex] > -100 && conditions.cci[pIndex] <= -100 && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long8) { pusher++; } // bool long9 = // // Starting Conditions ... conditions.macd[cIndex] > 0 && conditions.macd[cIndex] > conditions.macdSignal[cIndex] && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long9) { pusher++; } // bool long10 = // // Starting Conditions ... conditions.ichConditions.HasLongConditions() && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long10) { pusher++; } // bool long11 = // // Starting Conditions ... conditions.hkConditions.isHKSwitchedToBullish && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long11) { pusher++; } // bool long12 = // // Starting Conditions ... conditions.hkConditions.isSMHKSwitchedToBullish && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long12) { pusher++; } // bool long13 = // // Starting Conditions ... conditions.mrbConditions.isFastCrossedOverSlow && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.sslcConditions.isBullish && conditions.hullConditions.isBullish // ; if (long13) { pusher++; } // bool long14 = // // Starting Conditions ... conditions.sslcConditions.isSwitchedToBullish && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.hullConditions.isBullish // ; if (long14) { pusher++; } // bool long15 = // // Starting Conditions ... conditions.hullConditions.isSwitchedToBullish && // // Verifications ... conditions.tdConditions.isBullish && conditions.matdConditions.isBullish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBullish && conditions.strConditions.isTrendBullish && conditions.cheConditions.isStrongBullish && conditions.hkConditions.isHKBullish && conditions.hkConditions.isSMHKBullish && conditions.mrbConditions.isFastOverSlow && conditions.sslcConditions.isBullish // ; if (long15) { pusher++; } // result = // pusher >= 1 && !isOSCShortVerified && conditions.asctConditions.isLongSignal && bullishScore > bearishScore * 2 && ( // long1 // || // long2 // || // long3 // || // long4 // || // long5 // || // long6 // || // long7 // || // long8 // || // long9 // || // long10 // || // long11 // || // long12 // || // long13 // || // long14 // || // long15 // ) // ; // return result; } // // Check Market Conditions for Short Signals ... bool HasShortConditions( X121SetupConditions &conditions, // Conditions int &pusher // Pushers ) { // bool result = false; // pusher = 0; // bool isOSCLongVerified = IsOSCLongVerified(conditions); // int zIndex = 0; int cIndex = zIndex + 1; int pIndex = cIndex + 1; // double bullishScore = 0; double bearishScore = 0; conditions.GenerateScore( bullishScore, bearishScore // ); // bool short1 = // // Starting Conditions ... conditions.matdConditions.isSwitchedToBearish && // // Verifications ... conditions.matdConditions.isSARBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.tdConditions.isBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short1) { pusher++; } // bool short2 = // // Starting Conditions ... conditions.matdConditions.isSARSwitchedToBearish && // // Verifications ... conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.tdConditions.isBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short2) { pusher++; } // bool short3 = // // Starting Conditions ... conditions.adxtdConditions.isStrongSwitchedToBearish && // // Verifications ... conditions.matdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.tdConditions.isBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short3) { pusher++; } // bool short4 = // // Starting Conditions ... conditions.strConditions.isTrendSwitchedToBearish && // // Verifications ... conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.cheConditions.isStrongBearish && conditions.tdConditions.isBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short4) { pusher++; } // bool short5 = // // Starting Conditions ... conditions.cheConditions.isStrongSwitchedToBearish && // // Verifications ... conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.tdConditions.isBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short5) { pusher++; } // bool short6 = // // Starting Conditions ... conditions.tdConditions.isSwitchedToBearish && // // Verifications ... conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short6) { pusher++; } // bool short7 = // // Starting Conditions ... conditions.rsi[cIndex] < 70 && conditions.rsi[pIndex] >= 70 && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short7) { pusher++; } // bool short8 = // // Starting Conditions ... conditions.cci[cIndex] < 100 && conditions.cci[pIndex] >= 100 && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short8) { pusher++; } // bool short9 = // // Starting Conditions ... conditions.macd[cIndex] < 0 && conditions.macd[cIndex] < conditions.macdSignal[cIndex] && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short9) { pusher++; } // bool short10 = // // Starting Conditions ... conditions.ichConditions.HasShortConditions() && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short10) { pusher++; } // bool short11 = // // Starting Conditions ... conditions.hkConditions.isHKSwitchedToBearish && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short11) { pusher++; } // bool short12 = // // Starting Conditions ... conditions.hkConditions.isSMHKSwitchedToBearish && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short12) { pusher++; } // bool short13 = // // Starting Conditions ... conditions.mrbConditions.isFastCrossedUnderSlow && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.sslcConditions.isBearish && conditions.hullConditions.isBearish // ; if (short13) { pusher++; } // bool short14 = // // Starting Conditions ... conditions.sslcConditions.isSwitchedToBearish && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.hullConditions.isBearish // ; if (short14) { pusher++; } // bool short15 = // // Starting Conditions ... conditions.hullConditions.isSwitchedToBearish && // // Verifications ... conditions.tdConditions.isBearish && conditions.matdConditions.isBearish && conditions.adxtdConditions.isStrong && conditions.adxtdConditions.isBearish && conditions.strConditions.isTrendBearish && conditions.cheConditions.isStrongBearish && conditions.hkConditions.isHKBearish && conditions.hkConditions.isSMHKBearish && conditions.mrbConditions.isFastUnderSlow && conditions.sslcConditions.isBearish // ; if (short15) { pusher++; } // result = // pusher >= 1 && !isOSCLongVerified && conditions.asctConditions.isShortSignal && bearishScore > bullishScore * 2 && ( // short1 // || // short2 // || // short3 // || // short4 // || // short5 // || // short6 // || // short7 // || // short8 // || // short9 // || // short10 // || // short11 // || // short12 // || // short13 // || // short14 // || // short15 // ) // ; // return result; } // // Check Conditions for Generating Possible Signals ... bool HasSignal( X121SetupConditions &conditions, // Conditions XSignal &signal, // Signal if Exists int &pusher, // Pushers bool _allowLong, // Allow Long Signals bool _allowShort, // Allow Short Signals double _volume = 0.01, // Volume double _slPoint = 0, // SL Point double _tpPoint = 30 // TP Point ) { // bool result = false; // signal.Clean(); // result = _allowLong || _allowShort; if (!result) { return result; } // bool hasLong = !_allowLong ? false : HasLongConditions( conditions, pusher // ); // bool hasShort = !_allowShort ? false : HasShortConditions( conditions, pusher // ); // result = hasLong || hasShort; if (!result) { return result; } // // Prepare Signals ... ENUM_POSITION_TYPE mType = hasLong ? POSITION_TYPE_BUY : POSITION_TYPE_SELL; // double mEntry = GetEntry( conditions.symbol, mType // ); // double mSL = 0; double mTP = 0; double mPointValue = GetPoints(conditions.symbol); result = CalculateTPSLByPoint( mSL, mTP, mType, mEntry, mPointValue, 1, _slPoint, _tpPoint // ); if (!result) { return result; } // result = signal.Prepare( conditions.symbol, GetTag() + ToString(pusher), conditions.period, mType, X_ORDER_MODE_MARKET, mEntry, _volume, 0, // mSL, mTP // ); if (!result) { return result; } // return result; } // string GetTag() { return "X121"; } }; // // Class ... class XSCX121Setup : public XSCBaseAlert { // // Public ... public: // // Props ... XSCXTDHelper *tdHelper; XSCXHKHelper *hkHelper; XSCXCHEHelper *cheHelper; XSCXICHHelper *ichHelper; XSCXSTRHelper *strHelper; XSCXMRBHelper *mrbHelper; XSCXOSCHelper *oscHelper; XSCXMATDHelper *matdHelper; XSCXASCTHelper *asctHelper; XSCXSSLCHelper *sslcHelper; XSCXHULLHelper *hullHelper; XSCXADXTDHelper *adxtdHelper; // // Constructor(s) ... void XSCX121Setup() {} // // Deconstructor ... void ~XSCX121Setup() { // delete tdHelper; delete hkHelper; delete cheHelper; delete ichHelper; delete strHelper; delete mrbHelper; delete oscHelper; delete matdHelper; delete asctHelper; delete sslcHelper; delete hullHelper; delete adxtdHelper; } // // Getter(s) / Setter(s) ... // string GetSymbol() { return inputs.symbol; } // ENUM_TIMEFRAMES GetPeriod() { return inputs.period; } // // Tools ... // bool Init( X121SetupInputs &_inputs // Configurations ) { // bool result = false; // result = _inputs.IsValid(); if (!result) { return result; } // inputs = _inputs; // // Initialize Helpers ... // // XTD ... tdHelper = new XSCXTDHelper(); result = tdHelper.Init( inputs.symbol, inputs.period, inputs.tdInputs // ); if (!result) { return result; } // // XHK ... hkHelper = new XSCXHKHelper(); result = hkHelper.Init( inputs.symbol, inputs.period, inputs.hkInputs // ); if (!result) { return result; } // // XCHE ... cheHelper = new XSCXCHEHelper(); result = cheHelper.Init( inputs.symbol, inputs.period, inputs.cheInputs // ); if (!result) { return result; } // // XICH ... ichHelper = new XSCXICHHelper(); result = ichHelper.Init( inputs.symbol, inputs.period, inputs.ichInputs // ); if (!result) { return result; } // // XSTR ... strHelper = new XSCXSTRHelper(); result = strHelper.Init( inputs.symbol, inputs.period, inputs.strInputs // ); if (!result) { return result; } // // XMRB ... mrbHelper = new XSCXMRBHelper(); result = mrbHelper.Init( inputs.symbol, inputs.period, inputs.mrbInputs // ); if (!result) { return result; } // // XOSC ... oscHelper = new XSCXOSCHelper(); result = oscHelper.Init( inputs.symbol, inputs.period, inputs.oscInputs // ); if (!result) { return result; } // // XMATD ... matdHelper = new XSCXMATDHelper( inputs.symbol, inputs.period // ); result = matdHelper.Init( inputs.matdInputs // ); if (!result) { return result; } // // XASCT ... asctHelper = new XSCXASCTHelper(); result = asctHelper.Init( inputs.symbol, inputs.period, inputs.asctInputs // ); if (!result) { return result; } // // XSSLC ... sslcHelper = new XSCXSSLCHelper(); result = sslcHelper.Init( inputs.symbol, inputs.period, inputs.sslcInputs // ); if (!result) { return result; } // // XHULL ... hullHelper = new XSCXHULLHelper(); result = hullHelper.Init( inputs.symbol, inputs.period, inputs.hullInputs // ); if (!result) { return result; } // // XADXTD ... adxtdHelper = new XSCXADXTDHelper( inputs.symbol, inputs.period // ); result = adxtdHelper.Init( inputs.adxtdInputs // ); if (!result) { return result; } // return result; } // X121SetupInputs GetInputs() { return inputs; } // bool SetInputs( X121SetupInputs &_inputs // Configurations ) { return Init(_inputs); } // bool GetConditions( X121SetupConditions &conditions, // int barIndex = 0, // int loopback = 5 // ) { // bool result = true; // conditions.Clean(); // conditions.symbol = GetSymbol(); conditions.period = GetPeriod(); conditions.time = TimeCurrent(); // result = tdHelper.GetConditions( conditions.tdConditions, barIndex, loopback // ); if (!result) { return result; } // result = hkHelper.GetConditions( conditions.hkConditions, barIndex, loopback // ); if (!result) { return result; } // result = cheHelper.GetConditions( conditions.cheConditions, barIndex, loopback // ); if (!result) { return result; } // result = ichHelper.GetConditions( conditions.ichConditions, barIndex, loopback // ); if (!result) { return result; } // result = strHelper.GetConditions( conditions.strConditions, barIndex, loopback // ); if (!result) { return result; } // result = mrbHelper.GetConditions( conditions.mrbConditions, barIndex, loopback // ); if (!result) { return result; } // result = matdHelper.GetConditions( conditions.matdConditions, barIndex, loopback // ); if (!result) { return result; } // result = asctHelper.GetConditions( conditions.asctConditions, barIndex, loopback // ); if (!result) { return result; } // result = sslcHelper.GetConditions( conditions.sslcConditions, barIndex, loopback // ); if (!result) { return result; } // result = hullHelper.GetConditions( conditions.hullConditions, barIndex, loopback // ); if (!result) { return result; } // result = adxtdHelper.GetConditions( conditions.adxtdConditions, barIndex, loopback // ); if (!result) { return result; } // oscHelper.CopyCCI( barIndex, loopback, conditions.cci // ); oscHelper.CopyRSI( barIndex, loopback, conditions.rsi // ); oscHelper.CopyMACD( barIndex, loopback, conditions.macd // ); oscHelper.CopyMACDSignal( barIndex, loopback, conditions.macdSignal // ); // return result; } // // Protected ... protected: // // Private ... private: // // Props ... X121SetupInputs inputs; // Setup Configurations ... };