Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Per favore, ditemi come MathRand() ottiene i valori.
Possiamo aspettarci che MathRand() sia distribuito uniformemente nell'intervallo dichiarato?
ecco un esempio, naturalmente ci sono altri algoritmi più complessi...
sorgente rand.c :
È necessaria una funzione RNG con il numero Int da 0 a qualsiasi valore.
Poiché il valore massimo di Int =2.147.483.647, calcoliamo fino ad esso.
Abbiamo ottenuto questa funzione. Credo che la distribuzione sia uniforme.
L'articolo ha un generatore fino a 4294967295
Alglib SB ha un oscillatore ad alta precisione
UPD: ho provatohttps://www.mql5.com/ru/forum/324066#comment_13500222 , sembra funzionare, ma non c'è documentazione per Alglib in MQL5, dovresti leggerla sul sito web di Alglib
L'articolo ha un generatore a 4294967295
Grazie, l'ho confrontato in termini di velocità di calcolo.
La mia funzione su rand() standard è risultata essere 2 volte più lenta. Anche se il codice sembrava molto più semplice...
Alglib SB ha un oscillatore ad alta precisione
UPD: ho provatohttps://www.mql5.com/ru/forum/324066#comment_13500222 , sembra funzionare, ma non c'è documentazione per Alglib in MQL5, dovresti leggerla sul sito web di Alglib
L'ho visto ma lo voglio senza alglib. Inoltre, quella funzione ha un sacco di */%. Non ho confrontato la sua velocità perché è ovviamente più lento. Il generatore dell'articolo funziona con spostamenti di bit - è più veloce.
Ho riscritto la mia funzione per ottimizzare la velocità:
La distribuzione è risultata essere uniforme. Vedi le immagini dell'esperimento nel blog https://www.mql5.com/ru/blogs/post/735953Ho riscritto l'RNG dall'articolo.
Ho scartato le cose inutili e questo è quello che ho ottenuto:
Anche la distribuzione è risultata essere uniforme.
Ho confrontato la velocità di entrambe le funzioni, originale dall'articolo e semplice MathRand():
Accorciato secondo l'articolo rnu.Rand_01() - 596 ms
La mia versione ottimizzata di RandomInteger() - 840 ms (vecchia versione 1200 ms, cioè il 25% più veloce)
Solo da MathRand() - 353 ms (il più veloce, ma la distribuzione non sarà uniforme. Se la gamma di numeri richiesti è maggiore di 32767, il risultato sarà saltato. Se meno di 32767, per esempio i=31111. allora l'arrotondamento sarà più frequente in alcuni punti).
Approfittane)
Perché complicare così tanto le cose?
Puoi farlo in questo modo (approssimativamente):
E se volete giocare o vedere cosa mostra, potete fare così:
e vedere come cambia i valori.
Ho riscritto la mia funzione per ottimizzare la velocità:
La distribuzione è uniforme. Vedi le immagini dell'esperimento sul blog https://www.mql5.com/ru/blogs/post/735953Ho riscritto l'RNG dall'articolo.
Ho scartato le cose inutili e questo è quello che ho ottenuto:
Anche la distribuzione risulta essere uniforme.
L'ho confrontato con la distribuzione della guida, non vedo alcuna differenza