2026-07-31 13:06:41 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| 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
|
|
|
|
|
*/
|
|
|
|
|
|
2026-07-31 13:43:33 -05:00
|
|
|
namespace TSN
|
|
|
|
|
{
|
2026-07-31 13:06:41 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-31 13:43:33 -05:00
|
|
|
#define MQLARTICLES_TFI_BUCKETS_SIZE (8ULL)
|
2026-07-31 13:06:41 -05:00
|
|
|
#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] =
|
2026-07-31 13:43:33 -05:00
|
|
|
{
|
|
|
|
|
2ULL,
|
|
|
|
|
1ULL,
|
|
|
|
|
7ULL,
|
|
|
|
|
17ULL,
|
|
|
|
|
0ULL,
|
|
|
|
|
2ULL,
|
|
|
|
|
0ULL,
|
|
|
|
|
1ULL
|
|
|
|
|
};
|
2026-07-31 13:06:41 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-31 13:43:33 -05:00
|
|
|
//-- 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
|
|
|
|
|
};
|
2026-07-31 13:06:41 -05:00
|
|
|
|
|
|
|
|
//--- Ahora namigs
|
2026-07-31 13:43:33 -05:00
|
|
|
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..
|
|
|
|
|
};
|
2026-07-31 13:06:41 -05:00
|
|
|
|
2026-07-31 13:43:33 -05:00
|
|
|
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
|
|
|
|
|
};
|
|
|
|
|
}
|
2026-07-31 13:06:41 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#endif // MQLARITCLES_UTILS_TFI_MAIN_MQH
|