//+------------------------------------------------------------------+ //| perf.mq5 | //| Copyright © 2026, Amr Ali | //| https://www.mql5.com/en/users/amrali | //+------------------------------------------------------------------+ #include "TimeUtils.mqh" #define BENCHSIZE 20000000 //ulong randUlong() { return((ulong)rand()<<60)|((ulong)rand()<<45)|((ulong)rand()<<30)|((ulong)rand()<<15)|(ulong)rand(); } // RNG that can generate all possible 2^64 values. struct SplitMix64 { uint64_t x; uint64_t next() { uint64_t z = (x += 0x9e3779b97f4a7c15); z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9; z = (z ^ (z >> 27)) * 0x94d049bb133111eb; return z ^ (z >> 31); } long next(long min, long max) {return min + (long)(next()%(max-min+1));} // [min, max] void seed(uint64_t seed) { x = seed; } // custom seed (e.g., for reproducibility) SplitMix64() { x = GetTickCount64(); } // auto-seeded constructor }; #define BENCH(expression, label) { \ ulong sum = 0; \ ulong t1 = GetMicrosecondCount(); \ for(int i=0; i