/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Common Library // -------------------------------------- // Name: X121SMCLib // Description: provide all commonly used functions ... // // // 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 "../../Classes/x-saherelm.base.class.mq5" #include "../../Helpers/x-saherelm.x121.helper.mq5" #include "../../Libraries/x-saherelm.common.lib.mq5" #include "../../Libraries/x-saherelm.x-poi.lib.mq5" #include "../../Libraries/x-saherelm.x-trade.lib.mq5" // // Definitions ... // const string X121SMCStrategyToken = "X121SMC"; // const string X121SMCXTestToken = "X121XTest"; const string X121SMCXPVOBToken = "X121XPVOB"; const string X121SMCXPVDPToken = "X121XPVDP"; const string X121SMCXVWPBToken = "X121XVWPB"; const string X121SMCXTWPVToken = "X121XTWPV"; const string X121SMCXOEPVToken = "X121XOEPV"; const string X121SMCXPVSupDemToken = "X121XPVSUPDEM"; // // X121 SMC Providers ... enum ENUM_X_121_SMC_PROVIDERS { // X_121_SMC_PROVIDER_NONE, X_121_SMC_PROVIDER_XTEST, X_121_SMC_PROVIDER_XPVOB, X_121_SMC_PROVIDER_XPVDP, X_121_SMC_PROVIDER_XVWPB, X_121_SMC_PROVIDER_XTWPV, X_121_SMC_PROVIDER_XOEPV, X_121_SMC_PROVIDER_XPVSUPDEM, }; // // X121 SL Method ... enum ENUM_X_121_SMC_SL_TYPES { X_121_SMC_SL_TYPE_NONE, X_121_SMC_SL_TYPE_LAST_SAR_CHANGED_BAR, X_121_SMC_SL_TYPE_CURRENT_SAR_BOX, X_121_SMC_SL_TYPE_LAST_DIRECTIONAL_SAR, X_121_SMC_SL_TYPE_CURRENT_SAR, X_121_SMC_SL_TYPE_DON_CLOSE_BOX, X_121_SMC_SL_TYPE_FIBO_LEVEL_1_5, X_121_SMC_SL_TYPE_FIBO_LEVEL_3, X_121_SMC_SL_TYPE_VWAP_FAST, X_121_SMC_SL_TYPE_VWAP_MID, X_121_SMC_SL_TYPE_VWAP_SLOW, X_121_SMC_SL_TYPE_SWING, X_121_SMC_SL_TYPE_MOMENTUM, X_121_SMC_SL_TYPE_REJECTION, X_121_SMC_SL_TYPE_TENKAN_SEN, }; // // Each Market Cycle (Time Frame) Conditions // Model as this Structure ... struct X121SMCCycleConditions { // string symbol; ENUM_TIMEFRAMES period; datetime time; // X121Conditions x121Conditions; // XPOIState state; // void X121SMCStrategyConditions() { Clean(); } // // Tools ... /** * Cleanup ... */ void Clean() { // symbol = NULL; period = NULL; time = NULL; // state.Clean(); x121Conditions.Clean(); } /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = IsSpecifiedValid(symbol) && IsSpecifiedValid(period) && IsSpecifiedValid(time); // ; // return result; } // // Reporter Functions ... /** * Generate Provided Scores ... * * @param bullishScore: Integer, reference ... * @param bearishScore: Integer, referenceF ... */ void GenerateScore( double &bullishScore, double &bearishScore // ) { // bullishScore = 0; bearishScore = 0; // if (!IsValid()) { return; } // double bullScore = 0; double bearScore = 0; } /** * Generate Summary ... * * @param onlyCommons: Boolean ... * @param onlyConditions: Boolean ... * @param includeScores: Boolean ... * @param ignoreFalseConditions: Boolean ... * @param separator: String ... * * @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 commonStr = GenerateSpecifiedCommonSummary( this, separator, includeScores, true // ); // string conditionsStr = // "" // ; // result = // "[" + GetTag() + "]" + separator + "----------" + separator + (onlyConditions ? "" : commonStr) + " " + separator + (onlyCommons ? "" : conditionsStr) + "" // ; // return result; } /** * Get Unique Identifier ... * * @param forObject: Boolean ... * * @return ( string ) */ string GetTag( bool forObject = false // ) { // string result = NULL; // string typeName = GetTypeName(this); // if (!forObject) { result = typeName; } else { // result = typeName + "_" + symbol + "_" + ToString(period) + "_" + ToMD5(time); } // return result; } // }; // // Model Signalling Conditions ... struct X121SMCStrategyConditions { // string symbol; ENUM_TIMEFRAMES period; datetime time; // // Cycles Conditions here ... X121SMCCycleConditions triggerConditions; X121SMCCycleConditions decisionConditions; X121SMCCycleConditions analyseConditions; X121SMCCycleConditions verificationConditions; X121SMCCycleConditions consolidationConditions; X121SMCCycleConditions visionConditions; // double sl; double tp; double target; string provider; ENUM_X_DIRECTION signalDir; ENUM_X_DIRECTION marketStructureDir; // // void X121SMCStrategyConditions() { Clean(); } // // Tools ... /** * Cleanup ... */ void Clean() { // symbol = NULL; period = NULL; time = NULL; // sl = 0; tp = 0; provider = NULL; signalDir = X_DIRECTION_NONE; marketStructureDir = X_DIRECTION_NONE; // triggerConditions.Clean(); decisionConditions.Clean(); analyseConditions.Clean(); verificationConditions.Clean(); consolidationConditions.Clean(); visionConditions.Clean(); } /** * Validate ... * * @return ( bool ) */ bool IsValid() { // bool result = false; // result = IsSpecifiedValid(symbol) && IsSpecifiedValid(period) && IsSpecifiedValid(time); // return result; } /** * Check Conditions Has Valid Bullish Signal ... * * @return ( bool ) */ bool HasBullishSignal() { // bool result = false; // result = (sl > 0 || tp > 0) && IsValid() && HasDirection(signalDir); if (!result) { return result; } // result = IsBullish(signalDir); // return result; } /** * Check Conditions Has Valid Bearish Signal ... * * @return ( bool ) */ bool HasBearishSignal() { // bool result = false; // result = (sl > 0 || tp > 0) && IsValid() && HasDirection(signalDir); if (!result) { return result; } // result = IsBearish(signalDir); // return result; } // // Reporter Functions ... /** * Generate Provided Scores ... * * @param bullishScore: Integer, reference ... * @param bearishScore: Integer, referenceF ... */ void GenerateScore( double &bullishScore, double &bearishScore // ) { // bullishScore = 0; bearishScore = 0; // if (!IsValid()) { return; } // double bullScore = 0; double bearScore = 0; } /** * Generate Summary ... * * @param onlyCommons: Boolean ... * @param onlyConditions: Boolean ... * @param includeScores: Boolean ... * @param ignoreFalseConditions: Boolean ... * @param separator: String ... * * @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 commonStr = GenerateSpecifiedCommonSummary( this, separator, includeScores, true // ); // string conditionsStr = // "" // ; // result = // "[" + GetTag() + "]" + separator + "----------" + separator + (onlyConditions ? "" : commonStr) + " " + separator + (onlyCommons ? "" : conditionsStr) + "" // ; // return result; } /** * Get Unique Identifier ... * * @param forObject: Boolean ... * * @return ( string ) */ string GetTag( bool forObject = false // ) { // string result = NULL; // string typeName = GetTypeName(this); // if (!forObject) { result = typeName; } else { // result = typeName + "_" + symbol + "_" + ToString(period) + "_" + ToMD5(time); } // return result; } // }; // // // typedef void (*TOnX121SMCSignal)( XSignal &signal, X121SMCStrategyConditions &conditions // ); // // Extentions ... /** * Validate a Signal Provider ... * * @param value: ENUM_X_121_SMC_PROVIDERS member ... * * @return ( bool ) */ bool IsValid(ENUM_X_121_SMC_PROVIDERS value) { // bool result = false; // result = value != X_121_SMC_PROVIDER_NONE; // return result; } /** * Converts a Signal Provider to String ... * * @param value: ENUM_X_121_SMC_PROVIDERS member ... * * @return ( string ) */ string ToString(ENUM_X_121_SMC_PROVIDERS value) { // string result = NULL; // if (!IsValid(value)) { return result; } // switch (value) { // case X_121_SMC_PROVIDER_XTEST: result = X121SMCXTestToken; break; // case X_121_SMC_PROVIDER_XPVOB: result = X121SMCXPVOBToken; break; // case X_121_SMC_PROVIDER_XPVDP: result = X121SMCXPVDPToken; break; // case X_121_SMC_PROVIDER_XVWPB: result = X121SMCXVWPBToken; break; // case X_121_SMC_PROVIDER_XTWPV: result = X121SMCXTWPVToken; break; // case X_121_SMC_PROVIDER_XOEPV: result = X121SMCXOEPVToken; break; // case X_121_SMC_PROVIDER_XPVSUPDEM: result = X121SMCXPVSupDemToken; break; } // return result; } /** * Parse Specified String as a Signal Provider ... * * @param value: String ... * * @return ( ENUM_X_121_SMC_PROVIDERS ) */ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value) { // ENUM_X_121_SMC_PROVIDERS result = X_121_SMC_PROVIDER_NONE; // if (!IsValid(value)) { return result; } // if (Contains(X121SMCXTestToken, value)) { result = X_121_SMC_PROVIDER_XTEST; } else if (Contains(X121SMCXPVOBToken, value)) { result = X_121_SMC_PROVIDER_XPVOB; } else if (Contains(X121SMCXPVDPToken, value)) { result = X_121_SMC_PROVIDER_XPVDP; } else if (Contains(X121SMCXVWPBToken, value)) { result = X_121_SMC_PROVIDER_XVWPB; } else if (Contains(X121SMCXTWPVToken, value)) { result = X_121_SMC_PROVIDER_XTWPV; } else if (Contains(X121SMCXOEPVToken, value)) { result = X_121_SMC_PROVIDER_XOEPV; } else if (Contains(X121SMCXPVSupDemToken, value)) { result = X_121_SMC_PROVIDER_XPVSUPDEM; } // return result; } //