Files
MQL5Data/Libraries/x-saherelm.x-enums.lib.mq5
T
2025-03-26 05:25:00 +03:30

1229 lines
18 KiB
Plaintext

///////////////////////////////////////////////////////
//
// 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_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_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_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 ...
//
//