//+------------------------------------------------------------------+ //| Main.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_MAIN_MQH #define MQLARITCLES_UTILS_TFI_MAIN_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ /* La idea con este mqh es poder mapear los valores de enumtimeframe (Que estan dispersos) en una talba de 32 entradas por ejemplo un fast period seconds, o un swith jump table o(1) O un timeframe to string */ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define MQLARTICLES_TFI_BUCKETS_SIZE (8ULL) #define MQLARTICLES_TFI_BUCKETS_SIZE_L (7ULL) #define MQLARTICLES_TFI_FINAL_TSIZE (32ULL) #define MQLARTICLES_TFI_FINAL_TSIZE_L (31ULL) /* Algoritmo completo const int seed_index = int(v & MQLARTICLES_TFI_BUCKETS_SIZE_L); ulong h = ((ulong)v ^ g_mqlarticles_tfi_out_seeds[seed_index]) * 0x9E3779B97F4A7C15; h ^= h >> 32; const int fi = int(h & MQLARTICLES_TFI_FINAL_TSIZE_L); */ //--- Tabla de seeds const ulong g_mqlarticles_tfi_out_seeds[MQLARTICLES_TFI_BUCKETS_SIZE] = { 2ULL, 1ULL, 7ULL, 17ULL, 0ULL, 2ULL, 0ULL, 1ULL }; //+------------------------------------------------------------------+ //-- Ahora empezamos con otras tablas const int g_mqlarticles_tfi_period_s[MQLARTICLES_TFI_FINAL_TSIZE] = { 60, // PERIOD_M1 300, // PERIOD_M5 900, // PERIOD_M15 28800, // PERIOD_H8 -1, // Invalid 604800, // PERIOD_W1 360, // PERIOD_M6 10800, // PERIOD_H3 -1, // Invalid -1, // Invalid 1800, // PERIOD_M30 86400, // PERIOD_D1 14400, // PERIOD_H4 720, // PERIOD_M12 -1, // Invalid -1, // Invalid 180, // PERIOD_M3 240, // PERIOD_M4 3600, // PERIOD_H1 -1, // Invalid -1, // Invalid 21600, // PERIOD_H6 120, // PERIOD_M2 2592000, // PERIOD_MN1 43200, // PERIOD_H12 1200, // PERIOD_M20 600, // PERIOD_M10 7200, // PERIOD_H2 -1, // Invalid -1, // Invalid -1, // Invalid -1 // Invalid }; //--- Ahora namigs struct MqlArticlesTfiDesc { string full_name; // Nombre compleato eg: PERIOD_M1 string short_name_up; // Short name upper M1, etc.. string short_name_lo; // Short name lowe m1, etc.. string desc; // Short name lowe m1, etc.. }; const MqlArticlesTfiDesc g_mqlarticles_tfi_desc[MQLARTICLES_TFI_FINAL_TSIZE] = { {"PERIOD_M1", "M1", "m1", ""}, {"PERIOD_M5", "M5", "m5", ""}, {"PERIOD_M15", "M15", "m15", ""}, {"PERIOD_H8", "H8", "h8", ""}, {"", "", "", ""}, // Invalid {"PERIOD_W1", "W1", "w1", ""}, {"PERIOD_M6", "M6", "m6", ""}, {"PERIOD_H3", "H3", "h3", ""}, {"", "", "", ""}, // Invalid {"", "", "", ""}, // Invalid {"PERIOD_M30", "M30", "m30", ""}, {"PERIOD_D1", "D1", "d1", ""}, {"PERIOD_H4", "H4", "h4", ""}, {"PERIOD_M12", "M12", "m12", ""}, {"", "", "", ""}, // Invalid {"", "", "", ""}, // Invalid {"PERIOD_M3", "M3", "m3", ""}, {"PERIOD_M4", "M4", "m4", ""}, {"PERIOD_H1", "H1", "h1", ""}, {"", "", "", ""}, // Invalid {"", "", "", ""}, // Invalid {"PERIOD_H6", "H6", "h6", ""}, {"PERIOD_M2", "M2", "m2", ""}, {"PERIOD_MN1", "MN1", "mn1", ""}, {"PERIOD_H12", "H12", "h12", ""}, {"PERIOD_M20", "M20", "m20", ""}, {"PERIOD_M10", "M10", "m10", ""}, {"PERIOD_H2", "H2", "h2", ""}, {"", "", "", ""}, // Invalid {"", "", "", ""}, // Invalid {"", "", "", ""}, // Invalid {"", "", "", ""} // Invalid }; } //+------------------------------------------------------------------+ #endif // MQLARITCLES_UTILS_TFI_MAIN_MQH