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
In ogni caso.
if(a==0){espressione} significa che se a è 0 allora è vero, quindi esegui {espressione}.
if(a=0){espressione} è equivalente a if(a){a=0;espressione} se a è vero, {a=0;espressione}.
Il secondo è sbagliato, dovrebbe essere scritto così
if(a=x) { espressione } assegna il valore di x alla variabile a, e se a non è 0 dopo questo, allora esegue l'espressione
if(a=0) { } dopo l'ottimizzazione ci sarà solo a=0
La seconda è sbagliata. Il modo corretto di scriverla è
if(a=x) { espressione } assegna il valore di x alla variabile a, e se a non è 0 dopo questo, esegue l'espressione
if(a=0) { } dopo l'ottimizzazione ci sarà solo a=0
Scusa, è vero, le espressioni vengono eseguite da sinistra a destra.
Ecco perché cominciamo con l'assegnazione, e poi controlliamo la verità.
Questo è più o meno il caso:
Questo codice non solo calcola il volume massimo, ma lo inserisce anche esattamente nei limiti delle impostazioni del simbolo.Lo calcola ma dimentica perché lo calcola quando lo inserisce:
Il valore del lotto a questo punto è calcolato in modo da consumare tutto il margine disponibile con un margine minimo.
Se questo valore è aumentato di almeno un passo di volume, non ci sarà abbastanza denaro per aprire una posizione.
Ma la seconda linea del codice citato CREA il valore del lotto nel caso in cui la condizione sotto if sia soddisfatta, e può aumentarlo di molto più del valore del passo di volume, perché in realtà ci sono volume min = 0,1 e passo di volume = 0,01.
E in questo codice qui sotto, può verificarsi una divisione per zero, contro la quale non c'è protezione:
Se SymbolInfoDouble() restituisce 0, è finita. I programmi MQL5 terminano sulla divisione per 0, giusto? Non può restituire 0? La gente qui si lamenta che le funzioni informative molto spesso restituiscono 0. Non si può ripiegare su "non restituirà 0" perché, in primo luogo, potrebbe, e in secondo luogo, la divisione per 0 è fatale.
Ci sono alcune osservazioni minori sulla "precisione di inserimento", ma non sono davvero troppo significative, cioè non hanno conseguenze così gravi, si possono ignorare.
Anticipando possibili argomenti che il codice è "approssimativo", faccio notare: quanti utenti del prodotto sono in grado di trovare e sistemare con competenza questi "brutti posti"?
Per loro, questo è "il codice degli sviluppatori". Un esempio a cui guardare.
Perché il pulsante "Next" non è attivo quando tutti i campi obbligatori sono compilati?
Perché il pulsante "Next" non è attivo quando tutti i campi obbligatori sono compilati?
Calcola, ma poi dimentica per cosa stava calcolando:
Anticipando possibili argomentazioni sul fatto che il codice è "approssimativo", voglio far notare: quanti utenti del prodotto possono correggere correttamente tali "brutti posti"?Il codice era approssimativo (copiato da due pezzi), ma i tuoi commenti sono corretti.
Ecco la versione corretta:
E perché session_index++; quando session_index=1 è già falso:
Non possiamo sapere in anticipo qual è il numero di sessioni per strumento. Quindi interroghiamo ogni sessione per numero. Se è vero
session_exist=SymbolInfoSessionQuote(symbol,day,session_index,start,finish);
ci interessa il tempo del suo inizio e della sua fine. Se otteniamo false - ecco, non c'è nessuna sessione con questo numero.
Non possiamo sapere in anticipo quale sia il numero di sessioni per uno strumento. Perciò richiediamo ogni sessione per numero. Se è vero
analizziamo il tempo del suo inizio e della sua fine. Se otteniamo false - ecco, non c'è nessuna sessione con questo numero.
A...... allora perché tutto finisce il venerdì alle 24:00 e nella realtà alle 23:00?