/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Common Library // -------------------------------------- // Name: XEnumsLib // 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 // // START Price Type ... // // // Availables Price Types ... enum ENUM_X_PRICE { X_PRICE_NONE, // None X_PRICE_HIGH, // High X_PRICE_OPEN, // Open X_PRICE_CLOSE, // Close X_PRICE_LOW, // Low X_PRICE_UP, // Body Up X_PRICE_DOWN, // Body Down X_PRICE_MEDIAN, // Median X_PRICE_BODY_MEDIAN, // Body Median X_PRICE_TYPICAL, // Typical X_PRICE_WEIGHTED // Weighted }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_PRICE member ... * * @return ( bool ) */ bool IsValid(ENUM_X_PRICE value) { // bool result = false; // result = value != NULL && value != X_PRICE_NONE; // return result; } /** * Converts Series Mode to ENUM_X_PRICE ... * * @param value: ENUM_SERIESMODE member ... * * @return ( ENUM_X_PRICE ) */ ENUM_X_PRICE ToXPrice(ENUM_SERIESMODE value) { // ENUM_X_PRICE result = X_PRICE_CLOSE; // switch (value) { // // High ... case MODE_HIGH: result = X_PRICE_HIGH; break; // // Open ... case MODE_OPEN: result = X_PRICE_OPEN; break; // // Low ... case MODE_LOW: result = X_PRICE_LOW; break; // // Close ... // Default ... case MODE_CLOSE: default: result = X_PRICE_CLOSE; break; } // return result; } /** * Converts Applied Price to ENUM_X_PRICE ... * * @param value: ENUM_APPLIED_PRICE member ... * * @return ( ENUM_X_PRICE ) */ ENUM_X_PRICE ToXPrice(ENUM_APPLIED_PRICE value) { // ENUM_X_PRICE result = X_PRICE_NONE; // switch (value) { // case PRICE_HIGH: result = X_PRICE_HIGH; break; // case PRICE_OPEN: result = X_PRICE_OPEN; break; // case PRICE_CLOSE: result = X_PRICE_CLOSE; break; // case PRICE_LOW: result = X_PRICE_LOW; break; // case PRICE_MEDIAN: result = X_PRICE_MEDIAN; break; // case PRICE_TYPICAL: result = X_PRICE_TYPICAL; break; // case PRICE_WEIGHTED: result = X_PRICE_WEIGHTED; break; } // return result; } /** * Converts Price Type to Applied Price ... * * @param value: ENUM_X_PRICE member ... * * @return ( ENUM_APPLIED_PRICE ) */ ENUM_APPLIED_PRICE ToAppliedPrice(ENUM_X_PRICE value) { // // Default ... ENUM_APPLIED_PRICE result = PRICE_CLOSE; // if (!IsValid(value) || value == X_PRICE_UP || value == X_PRICE_DOWN || value == X_PRICE_BODY_MEDIAN) { return result; } // switch (value) { // case X_PRICE_HIGH: result = PRICE_HIGH; break; // case X_PRICE_OPEN: result = PRICE_OPEN; break; // case X_PRICE_CLOSE: result = PRICE_CLOSE; break; // case X_PRICE_LOW: result = PRICE_LOW; break; // case X_PRICE_MEDIAN: result = PRICE_MEDIAN; break; // case X_PRICE_TYPICAL: result = PRICE_TYPICAL; break; // case X_PRICE_WEIGHTED: result = PRICE_WEIGHTED; break; } // return result; } /** * Converts To String ... * * @param value: ENUM_X_PRICE member ... * * @return ( string ) */ string ToString(ENUM_X_PRICE value) { // string result = NULL; // switch (value) { // case X_PRICE_NONE: result = "None"; break; // case X_PRICE_HIGH: result = "High"; break; // case X_PRICE_OPEN: result = "Open"; break; // case X_PRICE_CLOSE: result = "Close"; break; // case X_PRICE_LOW: result = "Low"; break; // case X_PRICE_UP: result = "Body Up"; break; // case X_PRICE_DOWN: result = "Body Down"; break; // case X_PRICE_MEDIAN: result = "Median"; break; // case X_PRICE_BODY_MEDIAN: result = "Body Median"; break; // case X_PRICE_TYPICAL: result = "Typical"; break; // case X_PRICE_WEIGHTED: result = "Weighted"; break; } // return result; } // // END Price Type ... // // // START Boundary Price Type ... // // // Available Boundary Price Types ... enum ENUM_X_BOUNDARY_PRICE { X_BOUNDARY_PRICE_NONE, // None X_BOUNDARY_PRICE_UP_DOWN, // Up/Down X_BOUNDARY_PRICE_HIGH_LOW, // High/Low }; /** * Validate ... * * @param value: ENUM_X_BOUNDARY_PRICE member ... * * @return ( bool ) */ bool IsValid(ENUM_X_BOUNDARY_PRICE value) { // bool result = false; // result = value != NULL && value != X_BOUNDARY_PRICE_NONE; // return result; } /** * Converts To String ... * * @param value: ENUM_X_BOUNDARY_PRICE member ... * * @return ( string ) */ string ToString(ENUM_X_BOUNDARY_PRICE value) { // string result = NULL; // if (!IsValid(value)) { value = X_BOUNDARY_PRICE_NONE; } // result = EnumToString(value); // return result; } // // END Boundary Price Type ... // // // START Direction ... // // // Directions ... enum ENUM_X_DIRECTION { X_DIRECTION_ALL, // All X_DIRECTION_NONE, // None X_DIRECTION_BULLISH, // Bullish X_DIRECTION_BEARISH, // Bearish }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( bool ) */ bool IsValid(ENUM_X_DIRECTION value) { // bool result = false; // result = value != NULL && value != X_DIRECTION_NONE; // return result; } /** * Validate value Has Specified Direction ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( bool ) */ bool HasDirection(ENUM_X_DIRECTION value) { // bool result = false; // result = IsValid(value) && value != X_DIRECTION_ALL; // return result; } /** * Check a Direction is Bullish or not ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( bool ) */ bool IsBullish(ENUM_X_DIRECTION value) { // bool result = false; // result = value == X_DIRECTION_BULLISH; // return result; } bool IsSpecifiedBullish(ENUM_X_DIRECTION value) { // bool result = false; // result = value == X_DIRECTION_BULLISH; // return result; } /** * Check a Direction is Bearish or not ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( bool ) */ bool IsBearish(ENUM_X_DIRECTION value) { // bool result = false; // result = value == X_DIRECTION_BEARISH; // return result; } bool IsSpecifiedBearish(ENUM_X_DIRECTION value) { // bool result = false; // result = value == X_DIRECTION_BEARISH; // return result; } /** * Converts Specified Direction to Opposit ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( ENUM_X_DIRECTION ) */ ENUM_X_DIRECTION Opposit(ENUM_X_DIRECTION value) { // ENUM_X_DIRECTION result = X_DIRECTION_NONE; // if (!HasDirection(value)) { return result; } // result = IsBullish(value) ? X_DIRECTION_BEARISH : X_DIRECTION_BULLISH; // return result; } /** * Converts To String ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( string ) */ string ToString(ENUM_X_DIRECTION value) { // string result = NULL; // switch (value) { case X_DIRECTION_ALL: result = "ALL"; break; case X_DIRECTION_NONE: result = "NONE"; break; case X_DIRECTION_BULLISH: result = "BULLISH"; break; case X_DIRECTION_BEARISH: result = "BEARISH"; break; } // return result; } // // END Direction ... // // // START Fibo Level ... // // // Fibonacci Levels ... enum ENUM_X_FIBO_LEVELS { X_FIBO_LEVEL_236, // 0.236 X_FIBO_LEVEL_270, // 0.27 X_FIBO_LEVEL_382, // 0.382 X_FIBO_LEVEL_500, // 0.5 X_FIBO_LEVEL_618, // 0.618 X_FIBO_LEVEL_730, // 0.730 X_FIBO_LEVEL_764, // 0.764 X_FIBO_LEVEL_786, // 0.786 }; // // Extensions ... /** * Converts To String ... * * @param value: ENUM_X_FIBO_LEVELS member ... * * @return ( string ) */ string ToString(ENUM_X_FIBO_LEVELS value) { // string result = NULL; // switch (value) { // case X_FIBO_LEVEL_236: result = "0.236"; break; // case X_FIBO_LEVEL_270: result = "0.270"; break; // case X_FIBO_LEVEL_382: result = "0.382"; break; // case X_FIBO_LEVEL_500: result = "0.500"; break; // case X_FIBO_LEVEL_618: result = "0.618"; break; // case X_FIBO_LEVEL_730: result = "0.730"; break; // case X_FIBO_LEVEL_764: result = "0.764"; break; // case X_FIBO_LEVEL_786: result = "0.786"; break; } // return result; } /** * Converts To String ... * * @param value: ENUM_X_FIBO_LEVELS member ... * * @return ( double ) */ double GetFiboLevelValue(ENUM_X_FIBO_LEVELS value) { // double result = 0; // switch (value) { // case X_FIBO_LEVEL_236: result = 0.236; break; // case X_FIBO_LEVEL_270: result = 0.270; break; // case X_FIBO_LEVEL_382: result = 0.382; break; // case X_FIBO_LEVEL_500: result = 0.500; break; // case X_FIBO_LEVEL_618: result = 0.618; break; // case X_FIBO_LEVEL_730: result = 0.730; break; // case X_FIBO_LEVEL_764: result = 0.764; break; // case X_FIBO_LEVEL_786: result = 0.786; break; } // return result; } // // END Fibo Level ... // // // START Swing Types ... // // // Swing Types ... enum ENUM_X_SWING_TYPE { X_SWING_NONE, // None X_SWING_LOW, // Swing Low X_SWING_HIGH, // Swing High }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_DIRECTION member ... * * @return ( bool ) */ bool IsValid(ENUM_X_SWING_TYPE value) { // bool result = false; // result = value != NULL && value != X_SWING_NONE; // return result; } /** * Converts To String ... * * @param value: ENUM_X_SWING_TYPE member ... * * @return ( string ) */ string ToString(ENUM_X_SWING_TYPE value) { // string result = NULL; // switch (value) { // case X_SWING_NONE: result = "None"; break; // case X_SWING_LOW: result = "Swing Low"; break; // case X_SWING_HIGH: result = "Swing High"; break; } // return result; } /** * Converts To ENUM_SERIESMODE ... * * @param value: ENUM_X_SWING_TYPE member ... * * @return ( ENUM_SERIESMODE ) */ ENUM_SERIESMODE ToSeriesMode(ENUM_X_SWING_TYPE value) { // ENUM_SERIESMODE result = MODE_HIGH; // switch (value) { // case X_SWING_HIGH: result = MODE_HIGH; break; // case X_SWING_LOW: default: result = MODE_LOW; break; } // return result; } // // END Swing Types ... // // // START Period Method ... // // // Period Calculation Method ... enum ENUM_X_PERIOD_METHOD { X_PERIOD_NONE, // None X_PERIOD_AUTO, // Auto Select X_PERIOD_MANUALLY // Manually }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_PERIOD_METHOD member ... * * @return ( bool ) */ bool IsValid(ENUM_X_PERIOD_METHOD value) { // bool result = false; // result = value != NULL && value != X_PERIOD_NONE; // return result; } /** * Converts To String ... * * @param value: ENUM_X_PERIOD_METHOD member ... * * @return ( string ) */ string ToString(ENUM_X_PERIOD_METHOD value) { // string result = NULL; // switch (value) { // case X_PERIOD_NONE: result = "None"; break; // case X_PERIOD_AUTO: result = "Auto Select"; break; // case X_PERIOD_MANUALLY: result = "Manually"; break; } // return result; } // // END Period Method ... // // // START Market Cycles ... // // // Market Cycles ... enum ENUM_X_MARKET_CYCLES { X_MARKET_CYCLE_UNKNOWN, // Unknown Cycle X_MARKET_CYCLE_SHORT, // Short Cycle X_MARKET_CYCLE_MEDIUM, // Medium Cycle X_MARKET_CYCLE_LONG, // Long Cycle X_MARKET_CYCLE_HIND, // Hind Cycle }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_MARKET_CYCLES member ... * * @return ( bool ) */ bool IsValid(ENUM_X_MARKET_CYCLES value) { // bool result = false; // result = // value != NULL && value != X_MARKET_CYCLE_UNKNOWN // ; // return result; } /** * Converts an String to it's related Market Cycle ... * * @param value: string ... * * @return ( ENUM_X_MARKET_CYCLES ) */ ENUM_X_MARKET_CYCLES ToCycle(string value) { // ENUM_X_MARKET_CYCLES result = X_MARKET_CYCLE_UNKNOWN; // ENUM_X_MARKET_CYCLES cycles[]; int count = GetAllMarketCycles(cycles); for (int i = 0; i < count; i++) { // ENUM_X_MARKET_CYCLES iCycle = cycles[i]; string iStr = ToString(iCycle); // if (value == iStr) { // result = iCycle; break; } } // return result; } /** * Converts To String ... * * @param value: ENUM_X_MARKET_CYCLES member ... * * @return ( string ) */ string ToString(ENUM_X_MARKET_CYCLES value) { // string result = NULL; // switch (value) { // case X_MARKET_CYCLE_UNKNOWN: result = "Unknown Cycle"; break; // case X_MARKET_CYCLE_SHORT: result = "Short Cycle"; break; // case X_MARKET_CYCLE_MEDIUM: result = "Medium Cycle"; break; // case X_MARKET_CYCLE_LONG: result = "Long Cycle"; break; // case X_MARKET_CYCLE_HIND: result = "Hind Cycle"; break; } // return result; } /** * Retrieve All Availabled Market Cycles ... * * @param cycles: ENUM_X_MARKET_CYCLES member collection ... * * @return ( int ) */ int GetAllMarketCycles(ENUM_X_MARKET_CYCLES &cycles[]) { // ZeroMemory(cycles); ArrayResize(cycles, 0); // ArrayResize(cycles, ArraySize(cycles) + 1); cycles[ArraySize(cycles) - 1] = X_MARKET_CYCLE_UNKNOWN; // ArrayResize(cycles, ArraySize(cycles) + 1); cycles[ArraySize(cycles) - 1] = X_MARKET_CYCLE_SHORT; // ArrayResize(cycles, ArraySize(cycles) + 1); cycles[ArraySize(cycles) - 1] = X_MARKET_CYCLE_MEDIUM; // ArrayResize(cycles, ArraySize(cycles) + 1); cycles[ArraySize(cycles) - 1] = X_MARKET_CYCLE_LONG; // ArrayResize(cycles, ArraySize(cycles) + 1); cycles[ArraySize(cycles) - 1] = X_MARKET_CYCLE_HIND; // int result = ArraySize(cycles); // return result; } // // END Market Cycles ... // // // START Week Days ... // // // Week Days ... enum ENUM_X_WEEK_DAYS { X_WEEK_DAY_NONE = -1, // None X_WEEK_DAY_SUNDAY = 0, // Sunday X_WEEK_DAY_MONDAY = 1, // Monday X_WEEK_DAY_TUESDAY = 2, // Tuesday X_WEEK_DAY_WEDNESDAY = 3, // Wednesday X_WEEK_DAY_THURSDAY = 4, // Thursday X_WEEK_DAY_FRIDAY = 5, // Friday X_WEEK_DAY_SATURDAY = 6, // Saturday }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_WEEK_DAYS member ... * * @return ( bool ) */ bool IsValid(ENUM_X_WEEK_DAYS value) { // bool result = false; // result = // value != NULL && value != X_WEEK_DAY_NONE // ; // return result; } /** * Converts To String ... * * @param value: ENUM_X_WEEK_DAYS member ... * * @return ( string ) */ string ToString(ENUM_X_WEEK_DAYS value) { // string result = NULL; // switch (value) { // case X_WEEK_DAY_NONE: result = "None"; break; // case X_WEEK_DAY_SUNDAY: result = "Sunday"; break; // case X_WEEK_DAY_MONDAY: result = "Monday"; break; // case X_WEEK_DAY_TUESDAY: result = "Tuesday"; break; // case X_WEEK_DAY_WEDNESDAY: result = "Wednesday"; break; // case X_WEEK_DAY_THURSDAY: result = "Thursday"; break; // case X_WEEK_DAY_FRIDAY: result = "Friday"; break; // case X_WEEK_DAY_SATURDAY: result = "Saturday"; break; } // return result; } // // END Week Days ... // // // START Ma Methods ... // // // Ma Methods ... enum ENUM_X_MA_METHOD { X_MA_MODE_NONE, // None X_MA_MODE_SMA, // SMA X_MA_MODE_EMA, // EMA X_MA_MODE_LWMA, // LWMA X_MA_MODE_SMMA, // SMMA }; // // Extensions ... /** * Validate ... * * @param value: ENUM_X_MA_METHOD member ... * * @return ( bool ) */ bool IsValid(ENUM_X_MA_METHOD value) { // bool result = false; // result = // value != NULL && value != X_MA_MODE_NONE // ; // return result; } /** * Converts To String ... * * @param value: ENUM_X_MA_METHOD member ... * * @return ( string ) */ string ToString(ENUM_X_MA_METHOD value) { // string result = NULL; // switch (value) { // case X_MA_MODE_NONE: result = "None"; break; // case X_MA_MODE_SMA: result = "SMA"; break; // case X_MA_MODE_EMA: result = "EMA"; break; // case X_MA_MODE_LWMA: result = "LWMA"; break; // case X_MA_MODE_SMMA: result = "SMMA"; break; } // return result; } // // END Ma Methods ... // //