//+------------------------------------------------------------------+ //| Base.mqh | //| Copyright 2026, Niquel Mendoza | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza" #property link "https://www.mql5.com" #property strict #ifndef MQLARITCLES_UTILS_TFI_BASE_MQH #define MQLARITCLES_UTILS_TFI_BASE_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "Main.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CTimeframe { public: CTimeframe(void) {} ~CTimeframe(void) {} //--- To Idx static __forceinline char ToIdx(ENUM_TIMEFRAMES v); static __forceinline char ToIdxWVer(const ENUM_TIMEFRAMES v); //--- Period second fast static __forceinline int PeriodSecondsFast(ENUM_TIMEFRAMES tf); static __forceinline int PeriodSecondsFastSeg(const ENUM_TIMEFRAMES tf); //--- Funciones de utilidad static __forceinline string ToStrUpper(ENUM_TIMEFRAMES tf) { return g_mqlarticles_tfi_desc[ToIdx(tf)].short_name_up; } static __forceinline string ToStrLower(ENUM_TIMEFRAMES tf) { return g_mqlarticles_tfi_desc[ToIdx(tf)].short_name_lo; } static __forceinline string ToStrEnum(ENUM_TIMEFRAMES tf) { return g_mqlarticles_tfi_desc[ToIdx(tf)].full_name; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ static __forceinline char CTimeframe::ToIdx(ENUM_TIMEFRAMES v) { if(v == PERIOD_CURRENT) v = _Period; ulong h = ((ulong)v ^ g_mqlarticles_tfi_out_seeds[int(v & MQLARTICLES_TFI_BUCKETS_SIZE_L)]) * 0x9E3779B97F4A7C15; h ^= h >> 32; return char(h & MQLARTICLES_TFI_FINAL_TSIZE_L); } //+------------------------------------------------------------------+ static __forceinline char CTimeframe::ToIdxWVer(const ENUM_TIMEFRAMES v) { ulong h = ((ulong)v ^ g_mqlarticles_tfi_out_seeds[int(v & MQLARTICLES_TFI_BUCKETS_SIZE_L)]) * 0x9E3779B97F4A7C15; h ^= h >> 32; return char(h & MQLARTICLES_TFI_FINAL_TSIZE_L); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // Referencia: iCanvas_CB.mqh static __forceinline int CTimeframe::PeriodSecondsFast(ENUM_TIMEFRAMES tf) { if(tf == PERIOD_CURRENT) tf = _Period; const int tff = tf >> 14; return (tff == 0) ? (tf & 0x0FFF) * 60 : (tff == 1) ? (tf & 0x0FFF) * 3600 : (tff == 2) ? 604800 : 2592000; } //+------------------------------------------------------------------+ static __forceinline int CTimeframe::PeriodSecondsFastSeg(const ENUM_TIMEFRAMES tf) { const int tff = tf >> 14; return (tff == 0) ? (tf & 0x0FFF) * 60 : (tff == 1) ? (tf & 0x0FFF) * 3600 : (tff == 2) ? 604800 : 2592000; } } #endif // MQLARITCLES_UTILS_TFI_BASE_MQH