Errori, bug, domande - pagina 2939
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
Tutti i prezzi sono visualizzati con cinque cifre decimali, e uno per qualche motivo nella stessa lista lo prende così: perché? È un errore o il mio output dovrebbe essere modificato per avere un aspetto uniforme? Beh, diciamo che posso farlo con PrintFormat o fprint, ma in linea di principio non è una rappresentazione errata del numero?
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
Nikolai Semko, 2020.01.05 21:41
Ho sempre questa domanda.
Costantemente tutti parlano dello standard IEEE 754, ma le persone spesso, quando vanno su Wikipedia - sia a causa della complessità, sia per pigrizia lasciano senza capire il significato dello standard.
Dedicherò un po' di tempo per cercare di spiegare questa norma nel modo più breve possibile e con parole semplici, per fare ulteriore riferimento a questo post.
Quindi, il tipo doppio consiste di 8 byte = 64 bit.(float 4 byte = 32 bit)
E la rappresentazione numerica deldoppio e del float consiste di 3 componenti:segno, esponente e mantissa
DOPPIO:
GALLEGGIANTE:
Naturalmente non esiste una rappresentazione decimale dei numeri in questo formato, ma solo binaria.
Un po' di comprensione della rappresentazione binaria dei numeri e la sua relazione con i numeri decimali:
2 4= 100002 = 1610
2 3= 10002 = 810
2 2= 1002 = 4
2 1=102= 2
2 0=12=110
2 -1= 0.12 =(1/2)10= 0.510
2 -2= 0.012 = (1/4)10= 0.2510
2 -3= 0.0012 = (1/8)10= 0.12510
2 -4= 0.00012 = (1/16)10= 0.062510
2 -5= 0.000012 = (1/32)10= 0.0312510
2 -6= 0.0000012 = (1/64)10= 0.01562510
2 -7= 0.00000012 = (1/128)10= 0.007812510
2 -8= 0.000000012 = (1/256)10= 0.0039062510
2 -9= 0.0000000012 = (1/512)10= 0.00195312510
2 - 10= 0.00000000012 = (1/1024)10= 0.000976562510
2 - 11= 0.000000000012 = (1/2048)10= 0.0004882812510
2 - 12= 0.0000000000012 = (1/4096)10= 0.00024414062510
2 - 13= 0.00000000000012 = (1/8192)10= 0.000122070312510
Rivediamo gli esempi per il doppio:
Esempio #1
Abbiamo un numero decimale: 891677.4025191
Questo numero può essere rappresentato in forma binaria:
110110011010110001010101.0110011100001011011101110111011000100000111111111010001110
(chi vuole può controllare))
Estraiamo la mantissa del numero dato semplicemente spostando la virgola 19 cifre a sinistra (in questo caso) in modo che venga dopo la prima unità.
1.1011001101100011101011001110000101101111101111000101000001111101110001110* 2 19
Ma abbiamo una mantissa di soli 52 bit. Quindi prendiamo i primi 52 bit significativi
Мантисса = 1011001101100011101011001110000101101111101111000101
Esponente = (19+1023)10 = 100000100102(poiché l'esponente è un numero firmato e l'esponente può essere negativo (per esempio se abbiamo 0,0000042132), dobbiamo aggiungere 1023 a 10(01111111111112), 011111111112 è zero, tutto ciò che è più è positivo, meno è negativo. In altre parole, per ottenere il valore inverso dell'esponente, dobbiamo sottrarre 1023 dal valore dell'esponente a 11 bit.
In totale, il nostro numero 891677.4025191 apparirà come segue in tipo doppio:
0100000100101011001101100011101011001110000101101111101111000101
Ma poiché questa è una rappresentazione binaria, convertiamola esattamente in decimale:
che sarebbe891677.402519099996425211429595947265625
Esempio #2
Abbiamo un numero decimale: -0.00000145258556224114
Questo numero può essere rappresentato in forma binaria:
-0.000000000000000000011000010111101100111010110111010011010101001111001110
Seleziona la mantissa di questo numero semplicemente spostando la virgola di 20 cifre a destra, in modo che si trovi dopo la prima unità.
1.1000010111101100111010110111010011010101001111001110 * 2 -20
Мантисса = 1000010111101100111010110111010011010101001111001110
esponente = (-20+1023)10=011111010112
segno meno, quindi il primo bit è 1.
Il nostro numero totale -0.00000145258556224114 apparirà come segue nel tipo doppio:
1011111010111000010111101100111010110111010011010101001111001110
convertirlo esattamente in decimale:
это будет -0.00000145258556224113991124017968015191826225418481044471263885498046875
Nel vostro caso, il problema si verifica con il numero 0,01, poiché nel tipo doppio sarà rappresentato nella forma:
0 01111111000 0100011110101110000101000111101011100001010001111011
che quando viene convertito nel sistema di notazione decimale è uguale a 0,010000000000000000208166817117216858513294309377670288085937510
Mentre con la rappresentazione
310 = 1.5*2 = 1.12*2 1
510 = 2.5*2 = 10.12*2 1
610 = 1.5*4 = 1.12*2 2
710 = 3.5*2 = 11.12*2 1
nessun problema.
Perché il numero doppio 0,01 è davvero maggiore di 0,01?
Ecco perché:
0 01111111000 01000111101101011101000010101111010111010101001010001111011 - 0.01000000000000000020816681711721685132943093776702880859375 errore = 0.000 000 000 000 000 000 000 208166817...
0 01111111000 01000111101101011100001010001111010 - 0.00999999999999999999984747344334114097569175064563751220703125 errore = - 0.000 000 000 000 000 001 5265566...
Per capire questo processo chimico si può giocare con queste calcolatrici:
https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
https://baseconvert.com/ieee-754-floating-point
https://baseconvert.com/ieee-754-floating-point
https://baseconvert.com/ieee-754-floating-point
Grazie, informativo. Beh, in pratica, le MQ avrebbero dovuto, ma sottocosto, o la decisione è stata lasciata all'utente?
C'è una funzione o qualche altra funzionalità aggiuntiva (libreria, codice) per salvare i parametri EA?
Il compito è quello di mettere del codice ondeinit, che, per esempio, quando si esegue l'EA su un simbolo (funzione aggiuntiva è anche l'analisi del periodo), salverebbe il file delle impostazioni impostate.
Per esempio - EA nome-simbolo-periodo.
File con la possibilità di sovrascrivere - solo le ultime impostazioni per il simbolo.
Per esempio, le impostazioni standard nel tester sono salvate per l'ultima esecuzione.
Ciao, ho un problema su un computer remoto, non posso accedere al sito web MQL5 e quindi non posso scaricare l'indicatore che ho comprato. non posso scaricare l'indicatore che ho comprato.
ma un computer remoto su Zomro?
Grazie, informativo. Beh, in pratica, le MQ dovrebbero avere, ma sottocosto, o la decisione è lasciata al giudizio dell'utente?
ma un computer remoto su Zomro?
Sì
Buongiorno, problema su un computer remoto, non posso accedere al sito web di MQL5, quindi non posso scaricare l'indicatore che ho comprato. Non posso scaricare l'indicatore, quindi non posso installarlo sul sito MQL5.
ma un computer remoto su Zomro?
Sì
Questo fornitore è bandito per cattiva condotta:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Perché l'accesso a www.mql4.com è bloccato?
Renat Fatkhullin, 2020.11.17 12:16
***Quindi non capiscono.
Non è questo il punto. La domanda è: dove può essere utile, specialmente per i commercianti, non per i programmatori? Non ho mai visto tali numeri nel terminale, né nella scala dei prezzi né nella finestra di inserimento dell'ordine; tutto lì è uguale dappertutto (da qualche parte cinque cifre, da qualche altra parte).
Questo fornitore è stato bandito per cattiva condotta:
Peccato, dovremo passare a un altro, qualche suggerimento?