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
WHRoeder: questo codice è buono (soprattutto controlla "added" e "default")? Può anche servire come facile riferimento finale per coloro che visitano questo thread e vanno solo all'ultima pagina (come ho fatto io)
Quel codice non è accurato.
Come si può usare if( !MathAbs( a - b ) > Point/2) per confrontare per l'uguaglianza? Questo vi direbbe 1.4999 == 1.5000
if( ! (MathAbs(1.4999 - 1.5000 > 0.00005 )
if( ! (0.0001 > 0.00005 )
if( ! (true )
if( false ) 1.4999 is NOT equal to 1.5000
Io uso
o per i doppi che non sono prezzi reali, una maggiore precisione
Il post di Raptors su questo codice
Quindi se usate,
Ho testato quel metodo in vari modi e non ho trovato uno scenario in cui non restituisse il risultato atteso o desiderato.Codice finale... Grazie WHRoeder
E, forse una funzione secondaria per confrontare tutti gli altri doppi che non sono prezzi...
Vedi anche 'MQL4 Reference > Language Basics > Data Types > Real Types (double, float)' per quanto riguarda l'uso di numeri piccoli per il confronto.
Forse qualcuno sa come scrivere meglio 0.00...1 in expon
Quindi c'è qualcos'altro di interessante che ho trovato, potenzialmente in connessione con "// 0 compare non ha bisogno di questa funzione".
Forse un bug solo nelle ultime versioni, non sono sicuro. Il confronto con 0 non funziona più correttamente. Ho dovuto ricorrere a qualcosa di poco amichevole come
risultato=(int(risultato*100)/100.0); // Risoluzione 2 cifre
Solo per assicurarmi che i valori 0 finissero effettivamente come valori 0.
WHRoeder, grazie. Più studio necessario :)
Penso che questo argomento sia trattato con troppa complessità inutile.
Cercate di rendere la vita del vostro programmatore sempre più facile possibile. Scrivete delle definizioni (o andate avanti con i metodi se proprio dovete) in quelle classi dove avete bisogno dei vostri doppi confronti:
Quando hai bisogno di confrontare due doppi allora usalo in una condizione come questa:
Se volete vedere se un doppio è zero (o molto, molto vicino allo zero) usate una condizione come questa:
Una nota a margine, dato che vedo molti post che parlano di divisioni:
Con l'incapsulamento tendiamo a dimenticare i costi del codice che viene "esternalizzato" ad alcuni metodi di utilità. Ricordatevi chele divisioni sono computazionalmente molto costose! Soprattutto, una volta avvolte in bei metodi di utilità da qualche parte nelle classi di utilità, cominciamo ad usarle ovunque negli indicatori o negli EA e ci siamo dimenticati da tempo quali passi computazionali eseguono. Quando usiamo lo strategy tester paghiamo un sacco di tempo inutile per la nostra sciatteria.
Regola empirica: Addizioni e sottrazioni sono molto più veloci di moltiplicazioni e divisioni. L'operazione di divisione richiede il tempo di calcolo più alto.Ottimizzate le divisioni- dove possibile! Se il denominatore è fisso come in questo ciclo...
allora sostituisci il denominatore x con il suo valore invertito 1/x:
Inoltre, se il risultato di una divisione è sempre lo stesso, allora fai il calcolo una volta sola e salva il risultato in una variabile in modo da poterlo usare ovunque nel tuo codice (ad esempio nei loop):
Grazie,
A.T.