![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Veuillez me dire comment MathRand() obtient des valeurs.
Peut-on s'attendre à ce que MathRand() soit distribué uniformément dans l'intervalle déclaré ?
voici un exemple, il existe bien sûr d'autres algorithmes plus complexes...
source rand.c :
Une fonction RNG est requise avec le nombre Int de 0 à n'importe quelle valeur.
Puisque la valeur maximale de Int =2147 483 647, nous calculons jusqu'à elle.
Nous avons obtenu cette fonction. Je pense que la distribution est uniforme.
L'article a un générateur jusqu'à 4294967295
Alglib SB possède un oscillateur de haute précision
UPD : J'ai essayéhttps://www.mql5.com/ru/forum/324066#comment_13500222 , cela semble fonctionner, mais il n'y a pas de documentation pour Alglib dans MQL5, vous devriez la lire sur le site web d'Alglib.
L'article a un générateur à 4294967295
Merci, je l'ai comparé en termes de vitesse de calcul.
![](https://c.mql5.com/3/316/Untitled-1.png)
Ma fonction sur le standard rand() s'est avérée être 2 fois plus lente. Bien que le code semblait beaucoup plus simple...
Alglib SB possède un oscillateur de haute précision
UPD : J'ai essayéhttps://www.mql5.com/ru/forum/324066#comment_13500222 , cela semble fonctionner, mais il n'y a pas de documentation pour Alglib dans MQL5, vous devriez la lire sur le site web d'Alglib.
Je l'ai vu mais je le veux sans alglib. De plus, cette fonction a beaucoup de */%. Je n'ai pas comparé sa vitesse puisqu'elle est évidemment plus lente. Le générateur de l'article fonctionne avec des décalages de bits - c'est plus rapide.
Réécriture de ma fonction pour optimiser la vitesse :
La distribution s'est avérée être uniforme. Voir les images de l'expérience sur le blog https://www.mql5.com/ru/blogs/post/735953.J'ai réécrit le RNG à partir de l'article.
J'ai jeté les choses inutiles, et voilà ce que j'ai obtenu :
La distribution s'est également avérée être uniforme.
J'ai comparé la vitesse des deux fonctions, l'originale de l'article et la simple MathRand() :
Raccourci selon l'article rnu.Rand_01() - 596 ms
Ma version optimisée de RandomInteger() - 840 ms (ancienne version 1200 ms, c'est-à-dire 25% plus rapide)
Juste par MathRand() - 353 ms (le plus rapide, mais la distribution sera inégale. Si la plage de nombres requise est supérieure à 32767, le résultat sera ignoré. Si elle est inférieure à 32767, par exemple i=31111. alors les arrondis seront plus fréquents à certains points).
Profitez-en)
Pourquoi compliquer les choses à ce point ?
Vous pouvez procéder de la manière suivante (en gros) :
Et si vous voulez jouer avec ou voir ce qu'il montre, vous pouvez le faire :
et voir comment cela change les valeurs.
J'ai réécrit ma fonction pour optimiser la vitesse :
La distribution est régulière. Voir les images de l'expérience sur le blog https://www.mql5.com/ru/blogs/post/735953.J'ai réécrit le RNG à partir de l'article.
J'ai jeté les choses inutiles et c'est ce que j'ai obtenu :
La distribution s'avère également uniforme.
Je l'ai comparé avec la distribution de l'aide, je ne vois pas de différence.