Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 143
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
Semplicemente non dovreste aspettarvi che se non c'è un valore, è necessariamente 0 e corrispondentemente falso se non è una variabile di tipo bool. Anche una conversione esplicita in bool non aiuta.
Funziona così senza errori.
Onestamente non capisco affatto da dove viene lo zero:
TickValue[0] contiene spazzatura. Può essere o meno uguale a zero.
Se il cestino in TickValue[0] non è uguale a zero, allora calcoliamo Points = Profit / Lots * cestino non zero * _Point, altrimenti, se il cestino in TickValue[0] è uguale a zero - equipariamo Points a zero.
E da dove prende lo zero l 'espressione Lots * spazzatura non zero * _Point, se Lots è inizializzato con uno quando viene dichiarato? C'è zero in _Point?
L'errore è chiaro infatti.
OK, l'errore non è chiaro. E non si riproduce nemmeno per me.
Ok, l'errore è incomprensibile. E non si riproduce a me.
In parole povere, chiamare questa funzione può causare la divisione per zero.
Ho incontrato questo problema in pratica nella libreria Report. Poi ho capito che è logico.
In parole povere, chiamare questa funzione può causare la divisione per zero.
Ho questo codice su border dubles, ma non va in crash
Ottengo lo stesso codice su border dubles, ma non si blocca
un tale incidente.
Per riassumere, la moltiplicazione di due doppietti non nulli può dare zero. E questo non è un caso degenerato, ma un caso reale nella pratica.
Approssimativamente, un EA da combattimento può rompersi a causa di questo con una probabilità tutt'altro che nulla.
E il controllo dello zero non salverà, né esplicitamente né implicitamente (conversione bool)
Per riassumere, la moltiplicazione di due doppietti non nulli può dare zero. E questo non è un caso degenerato, ma un caso reale nella pratica.
Approssimativamente, un EA da combattimento può rompersi a causa di questo con una probabilità tutt'altro che nulla.
su NaN è necessario controllare ulteriormente, molto probabilmente questo codice funzioneràhttp://qaru.site/questions/20557/checking-if-a-double-or-float-is-nan-in-c
o limitare la precisione, come nell'esempio di CompareDoubles() - sembra essere in SBhttps://www.mql5.com/ru/docs/basis/types/double