ScalerByLeo/Src/Scaler/Bench
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-16 18:51:57 -05:00
..
CLPattern.mq5 mejoras 2026-09-16 18:20:12 -05:00
MaxMin.mq5 primeras mejoras 2026-09-15 11:21:44 -05:00
Mean.mq5 primeras mejoras 2026-09-15 11:21:44 -05:00
OpMatrixIsFastOrNot.mq5 mejoras 2026-09-16 18:20:12 -05:00
README.md nuevo patron aplicado 2026-09-16 18:51:57 -05:00
Robust.mq5 primeros pasos 2026-09-15 16:39:51 -05:00
Std.mq5 primeras mejoras 2026-09-15 11:21:44 -05:00

Benchmarks de test

MaxMin

La idea aqui es ver cual es el mejor patron para implementare en max min

  1. Version fast que calcula el min max inplace
  2. Version que llama a las funciones nativas Min\Max

Esto surge con la dudad de..

Sera que las funciones nativas de MQL5 como min max?¿ es mas rapido qeu hacer en mql5 hay buenas razon para eso dado que en el motor de vecotr para el acceso de arrays no hay chekleos de rangos en cada acceso (Eso creo) o quizas usen SIMD o algo asi quien sabe.. debido a que las docs son opacas con esto en vector toca probar, es lento si, pero un costo a pagar por una lib fast

Resultado:

  • El meotod fast (manual max\min) gano claramente

Mean

Esto es como una prueba que hice dado que se con certeza con todos estos test y espreinci que no todos de los meotods de vvector\matrix son "naive" o la forma normal sin optimizar, si no qeu mat mul y funciones blas se delegan a lib super fast como OpenBLAS etc.. Entonces aqui sea evlaua el uso de mat mul con manual\emulado con array double\mat mul nativo.. gana el nativo brutalemtne x10 a mas... depende del tamñao pero siemprte gana...

OpMatrixIsFastOrNot

La idea aqui es ver si el matrix::operator= es rapido ?¿ o sera naive elemnto a elemento?¿ Esto surge como duda dado qeu en MinMax en la parte de recontruir+tamaños dineite sse requiere hacer una modifacion inplace + copia de datos hay dos propuetas aqui

  1. Uso del matrix::operator= y luego modicar lo qeu se quiere
  2. Resize de out y hacer 3 buclees 1 bajo 1 mid con los datos 1 alto con la parte de arriba

Reultaod:

  • Depenbde de la porscion a modificar... respecto al tamaño, si fs es como el 90% a mas... entonces es mas rapido el metodo 2. de lo contraio la velocidad de matrix::operator= compensa la copia incial... pero casi siempre es mejor el metodo 2. en geral... eso lo estuvimos probadno
2026.09.16 13:22:52.401	OpMatrixIsFastOrNot (EURUSD,H1)	=== Bench: estrategia de copia (out=X+overwrite vs loops manuales) ===
2026.09.16 13:22:52.401	OpMatrixIsFastOrNot (EURUSD,H1)	size   fs     frac   A(us)        B(us)        OnlyAssign   A_vs_B    
2026.09.16 13:22:52.408	OpMatrixIsFastOrNot (EURUSD,H1)	500    5      0.01   163          334          191          2.05      
2026.09.16 13:22:52.412	OpMatrixIsFastOrNot (EURUSD,H1)	500    50     0.10   196          351          191          1.79      
2026.09.16 13:22:52.417	OpMatrixIsFastOrNot (EURUSD,H1)	500    250    0.50   285          339          191          1.19      
2026.09.16 13:22:52.422	OpMatrixIsFastOrNot (EURUSD,H1)	500    450    0.90   380          336          191          0.88      
2026.09.16 13:22:52.427	OpMatrixIsFastOrNot (EURUSD,H1)	500    500    1.00   404          342          191          0.85      
2026.09.16 13:22:52.648	OpMatrixIsFastOrNot (EURUSD,H1)	2000   20     0.01   1995         25892        1706         12.98     
2026.09.16 13:22:52.865	OpMatrixIsFastOrNot (EURUSD,H1)	2000   200    0.10   3754         25962        1706         6.92      
2026.09.16 13:22:53.135	OpMatrixIsFastOrNot (EURUSD,H1)	2000   1000   0.50   11629        25939        1706         2.23      
2026.09.16 13:22:53.466	OpMatrixIsFastOrNot (EURUSD,H1)	2000   1800   0.90   19602        25800        1706         1.32      
2026.09.16 13:22:53.803	OpMatrixIsFastOrNot (EURUSD,H1)	2000   2000   1.00   21211        25698        1706         1.21      
2026.09.16 13:22:55.419	OpMatrixIsFastOrNot (EURUSD,H1)	5000   50     0.01   14798        189198       13261        12.79     
2026.09.16 13:22:56.999	OpMatrixIsFastOrNot (EURUSD,H1)	5000   500    0.10   28034        189083       13261        6.74      
2026.09.16 13:22:58.988	OpMatrixIsFastOrNot (EURUSD,H1)	5000   2500   0.50   86385        188767       13261        2.19      
2026.09.16 13:23:01.380	OpMatrixIsFastOrNot (EURUSD,H1)	5000   4500   0.90   145084       188297       13261        1.30      
2026.09.16 13:23:03.873	OpMatrixIsFastOrNot (EURUSD,H1)	5000   5000   1.00   159696       187807       13261        1.18      
2026.09.16 13:23:03.875	OpMatrixIsFastOrNot (EURUSD,H1)	=== Fin ===
2026.09.16 13:23:03.875	OpMatrixIsFastOrNot (EURUSD,H1)	A_vs_B > 1.0 significa que B (loops manuales) fue MAS RAPIDO que A (out=X+overwrite)
2026.09.16 13:23:03.875	OpMatrixIsFastOrNot (EURUSD,H1)	A_vs_B < 1.0 significa que A (out=X+overwrite) fue MAS RAPIDO que B
2026.09.16 13:23:03.875	OpMatrixIsFastOrNot (EURUSD,H1)	OnlyAssign muestra el costo puro de 'out = X' sin ningun overwrite encima, para referencia

Robust

La misma idea... aunque aqui es demoledor la versino fast con un solo sort y copy gana por 4x .. a la verisno que llama a Percentil.. etc por separado nada mas que decir... solo eran dudas que tenia... dado qeu como dije a dia de hoy no hay un diccionario o algo asi ni docs que digan examtne que funciones son naive y optimizadas.. en mql5 docs.. solo te dice com ousar ejemplos, etc.. nada de bajo nivel .. solo qeuda porbar..

CLPattern

Aqui la idea es con opencl.. dado que noramlte se rteuiqenr pasar los datos via buffer write a la gpu entonces hay una pregunta.. apra el caso donde haya que fs (tamaño que se queire) es menor al total?¿ se plantena dos hiptoeiss

  1. pasar TODA la matrix inicial (A) a la gpu con offets (eviamtos una copia extra de recorte cl lee directo), contras "posiblemte el costo de lecutra de gpu sea cara"
  2. pasar EXACTAEMTNE lo qeu se operar en GPU (B) y luego reconuitr... en un vector final uniendo piesas

Ganador claro ha sido el (A)

2026.09.16 13:51:59.327	CLPattern (EURUSD,H1)	=== Bench SUBRANGO REAL (reconstruir=true, fs != total_cols): CPU vs GPU-A vs GPU-B ===
2026.09.16 13:51:59.327	CLPattern (EURUSD,H1)	size   fs     frac   CPU(us)      GPU_A(us)    GPU_B(us)    A_vs_CPU   B_vs_CPU  
2026.09.16 13:51:59.327	CLPattern (EURUSD,H1)	OpenCL: GPU device 'Intel UHD Graphics 770' selected
2026.09.16 13:51:59.335	CLPattern (EURUSD,H1)	500    5      0.01   158          491          419          0.32       0.38      
2026.09.16 13:51:59.341	CLPattern (EURUSD,H1)	500    25     0.05   174          484          398          0.36       0.44      
2026.09.16 13:51:59.348	CLPattern (EURUSD,H1)	500    50     0.10   200          468          503          0.43       0.40      
2026.09.16 13:51:59.358	CLPattern (EURUSD,H1)	500    125    0.25   260          476          613          0.55       0.42      
2026.09.16 13:51:59.369	CLPattern (EURUSD,H1)	500    250    0.50   327          507          865          0.64       0.38      
2026.09.16 13:51:59.382	CLPattern (EURUSD,H1)	500    375    0.75   418          547          1161         0.76       0.36      
2026.09.16 13:51:59.398	CLPattern (EURUSD,H1)	500    450    0.90   476          585          1336         0.81       0.36      
2026.09.16 13:51:59.449	CLPattern (EURUSD,H1)	2000   20     0.01   1932         3693         2284         0.52       0.85      
2026.09.16 13:51:59.506	CLPattern (EURUSD,H1)	2000   100    0.05   2606         3761         3251         0.69       0.80      
2026.09.16 13:51:59.580	CLPattern (EURUSD,H1)	2000   200    0.10   3490         4063         4649         0.86       0.75      
2026.09.16 13:51:59.716	CLPattern (EURUSD,H1)	2000   500    0.25   6062         4821         12018        1.26       0.50      
2026.09.16 13:51:59.983	CLPattern (EURUSD,H1)	2000   1000   0.50   10481        5426         28661        1.93       0.37      
2026.09.16 13:52:00.428	CLPattern (EURUSD,H1)	2000   1500   0.75   15288        6555         45278        2.33       0.34      
2026.09.16 13:52:00.891	CLPattern (EURUSD,H1)	2000   1800   0.90   17500        6480         52707        2.70       0.33      
2026.09.16 13:52:01.257	CLPattern (EURUSD,H1)	5000   50     0.01   14876        24663        16680        0.60       0.89      
2026.09.16 13:52:01.759	CLPattern (EURUSD,H1)	5000   250    0.05   21459        25754        26950        0.83       0.80      
2026.09.16 13:52:02.469	CLPattern (EURUSD,H1)	5000   500    0.10   28331        27635        44368        1.03       0.64      
2026.09.16 13:52:03.850	CLPattern (EURUSD,H1)	5000   1250   0.25   47865        28629        107600       1.67       0.44      
2026.09.16 13:52:06.300	CLPattern (EURUSD,H1)	5000   2500   0.50   80148        29316        201531       2.73       0.40      
2026.09.16 13:52:09.952	CLPattern (EURUSD,H1)	5000   3750   0.75   113731       38969        306398       2.92       0.37      
2026.09.16 13:52:14.214	CLPattern (EURUSD,H1)	5000   4500   0.90   132840       34170        364163       3.89       0.36      
2026.09.16 13:52:15.993	CLPattern (EURUSD,H1)	9600   96     0.01   60603        167866       71604        0.36       0.85      
2026.09.16 13:52:18.470	CLPattern (EURUSD,H1)	9600   480    0.05   85435        170199       161903       0.50       0.53      
2026.09.16 13:52:21.929	CLPattern (EURUSD,H1)	9600   960    0.10   114406       165467       221509       0.69       0.52      
2026.09.16 13:52:28.449	CLPattern (EURUSD,H1)	9600   2400   0.25   201086       176190       504726       1.14       0.40      
2026.09.16 13:52:48.024	CLPattern (EURUSD,H1)	9600   4800   0.50   361969       208858       1096036      1.73       0.33      
2026.09.16 13:53:13.111	CLPattern (EURUSD,H1)	9600   7200   0.75   545162       219112       1411575      2.49       0.39      
2026.09.16 13:54:08.574	CLPattern (EURUSD,H1)	9600   8640   0.90   2334430      265216       4784659      8.80       0.49      

Notas finales

Como resulta de costumbre MQL5 al no proveer docs espeicificas de sus funciones o tener a la mano un ASM o un formato de ejeucino final no queda de otra que hacer esto.... a mano.. y probar el patron mas rapido que haya...