//+------------------------------------------------------------------+ //| Final.mq5 | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include #include "..\\Src\\ColHash\\HashMap\\All.mqh" #include "..\\Src\\ColHash\\Dict\\DictT.mqh" #include #include "..\\Src\\ColHash\\Hash\\Generic.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ const string g_tf_keys[21] = { "PERIOD_M1", "PERIOD_M2", "PERIOD_M3", "PERIOD_M4", "PERIOD_M5", "PERIOD_M6", "PERIOD_M10", "PERIOD_M12", "PERIOD_M15", "PERIOD_M20", "PERIOD_M30", "PERIOD_H1", "PERIOD_H2", "PERIOD_H3", "PERIOD_H4", "PERIOD_H6", "PERIOD_H8", "PERIOD_H12", "PERIOD_D1", "PERIOD_W1", "PERIOD_MN1" }; const ENUM_TIMEFRAMES g_tf_values[21] = { PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2, PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1 }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ ENUM_TIMEFRAMES StringToTimeframe(const string& s) { for(int i = 0; i < 21; i++) if(g_tf_keys[i] == s) return g_tf_values[i]; return PERIOD_CURRENT; } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- const int ti = 100000; CDictSValue dict1; CHashMap dict2; CHashMapFast(string, int) dict3; for(int i = 0; i < 21; i++) { dict1.Add(g_tf_keys[i], g_tf_values[i]); dict2.Add(g_tf_keys[i], g_tf_values[i]); dict3.Add(g_tf_keys[i], g_tf_values[i]); } //--- MathSrand(100); int v; ulong a = GetMicrosecondCount(); for(int i = 0; i < ti; i++) { dict1.TryGet(g_tf_keys[MathRand() % 21], v); } ulong b = GetMicrosecondCount(); Print("DictSValue: ", (b - a)); //--- MathSrand(100); a = GetMicrosecondCount(); for(int i = 0; i < ti; i++) { dict2.TryGetValue(g_tf_keys[MathRand() % 21], v); } b = GetMicrosecondCount(); Print("CHashMap: ", (b - a)); //--- MathSrand(100); //--- a = GetMicrosecondCount(); for(int i = 0; i < ti; i++) { dict3.TryGet(g_tf_keys[MathRand() % 21], v); } b = GetMicrosecondCount(); Print("CHashMapFast: ", (b - a)); //--- MathSrand(100); //--- a = GetMicrosecondCount(); for(int i = 0; i < ti; i++) { v = TSN::CEnumRegBasis::GetVal(g_tf_keys[MathRand() % 21], 0); } b = GetMicrosecondCount(); Print("Perfect hash: ", (b - a)); //--- MathSrand(100); //--- a = GetMicrosecondCount(); for(int i = 0; i < ti; i++) { v = StringToTimeframe(g_tf_keys[MathRand() % 21]); } b = GetMicrosecondCount(); Print("linear: ", (b - a)); } //+------------------------------------------------------------------+ /* 2026.07.15 07:55:34.576 Final (EURUSD,M1) DictSValue: 2466 2026.07.15 07:55:34.585 Final (EURUSD,M1) CHashMap: 8750 2026.07.15 07:55:34.586 Final (EURUSD,M1) CHashMapFast: 1925 2026.07.15 07:55:34.588 Final (EURUSD,M1) Perfect hash: 1705 2026.07.15 07:55:34.598 Final (EURUSD,M1) linear: 9818 2026.07.15 07:55:37.148 Final (EURUSD,M1) DictSValue: 2438 2026.07.15 07:55:37.157 Final (EURUSD,M1) CHashMap: 8827 2026.07.15 07:55:37.159 Final (EURUSD,M1) CHashMapFast: 1949 2026.07.15 07:55:37.160 Final (EURUSD,M1) Perfect hash: 1706 2026.07.15 07:55:37.170 Final (EURUSD,M1) linear: 9869 */