Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Por favor, dime cómo MathRand() obtiene los valores.
¿Podemos esperar que MathRand() se distribuya uniformemente en el rango declarado?
este es un ejemplo, por supuesto hay otros algoritmos más complejos...
fuente rand.c :
Se requiere una función RNG con el número Int de 0 a cualquier valor.
Como el valor máximo de Int =2.147.483.647, calculamos hasta él.
Hemos obtenido esta función. Creo que la distribución es uniforme.
El artículo tiene un generador de hasta 4294967295
El Alglib SB tiene un oscilador de alta precisión
UPD: Lo he probadohttps://www.mql5.com/ru/forum/324066#comment_13500222 , parece que funciona, pero no hay documentación para Alglib en MQL5, deberías leerla en la web de Alglib
El artículo tiene un generador a 4294967295
Gracias, lo he comparado en términos de velocidad de cálculo.
Mi función en rand() estándar resultó ser 2 veces más lenta. Aunque el código parecía mucho más sencillo...
El Alglib SB tiene un oscilador de alta precisión
UPD: Lo he probadohttps://www.mql5.com/ru/forum/324066#comment_13500222 , parece que funciona, pero no hay documentación para Alglib en MQL5, deberías leerla en la web de Alglib
Lo he visto pero lo quiero sin alglib. Además, esa función tiene un montón de */%. No he comparado su velocidad ya que obviamente es más lenta. El generador del artículo funciona con cambios de bits: es más rápido.
Reescribí mi función para optimizar la velocidad:
La distribución resultó ser uniforme. Vea las imágenes del experimento en el blog https://www.mql5.com/ru/blogs/post/735953He vuelto a escribir el RNG del artículo.
Descarté cosas innecesarias y esto es lo que obtuve:
La distribución también resultó ser uniforme.
He comparado la velocidad de ambas funciones, la original del artículo y la simple MathRand():
Acortado según el artículo rnu.Rand_01() - 596 ms
Mi versión optimizada de RandomInteger() - 840 ms (la versión antigua 1200 ms, es decir, un 25% más rápida)
Sólo por MathRand() - 353 ms (el más rápido, pero la distribución será desigual. Si el rango de números requerido es mayor que 32767, el resultado será omitido. Si es inferior a 32767, por ejemplo i=31111. entonces el redondeo será más frecuente en algunos puntos).
Aprovecha)
¿Por qué complicar tanto las cosas?
Puedes hacerlo así (a grandes rasgos):
Y si quieres jugar o ver lo que muestra, puedes hacer esto:
y ver cómo cambia los valores.
He reescrito mi función para optimizar la velocidad:
La distribución es uniforme. Vea las imágenes del experimento en el blog https://www.mql5.com/ru/blogs/post/735953He vuelto a escribir el RNG del artículo.
Descarté cosas innecesarias y eso es lo que tengo:
La distribución también resulta ser uniforme.
Lo he comparado con la distribución de la ayuda, no veo ninguna diferencia