MQLArticles/Utils/TfI/Main.mqh
2026-07-31 13:43:33 -05:00

135 lines
4.1 KiB
MQL4

//+------------------------------------------------------------------+
//| 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