È possibile evitare molti "o" (||) nelle condizioni che causano la stessa azione? - pagina 2
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Si possono anche ottimizzare i calcoli in questo modo:
È stato detto molte volte: non ci sono scorciatoie in MCL, se (a||b|||c||d|e){} tutte le condizioni saranno controllate.
La via d'uscita sono le condizioni di nidificazione:
if(a){if(b){if(c){}} in questo caso l'uscita avverrà alla prima condizione corrispondente
Ma anche la nidificazione non è infinita, la soluzione più flessibile è controllare le condizioni in un ciclo con un'uscita:
È stato detto molte volte: non ci sono scorciatoie in MCL, se (a||b|||c||d|e){} tutte le condizioni saranno controllate.
La via d'uscita sono le condizioni di nidificazione:
if(a){if(b){if(c){}} in questo caso l'uscita avverrà alla prima condizione corrispondente
Ma anche la nidificazione non è infinita, la soluzione più flessibile è controllare le condizioni in un ciclo con un'uscita:
No, ma conosco bene Olbanian :))
Annidare le condizioni if(a){if(b){if(c){}} non va bene, perché tutte le condizioni si escludono a vicenda, ma qualcosa non funziona con i booleani. Probabilmente e molto probabilmente sto facendo qualcosa di sbagliato. Finora mi sono fermato a fare una variabile doppia per ogni condizione e a incollarla nello stesso if() con 4 "o". Come mi aspettavo, non ha influito sulla velocità dei test. Gli stessi 13 minuti su tutte le zecche in 12 mesi.
O forse questa lingua si chiamaOblansky?
Le condizioni annidate if(a){if(b){if(c){}} non sono buone, perché tutte le condizioni si escludono a vicenda. Probabilmente e molto probabilmente sta facendo qualcosa di sbagliato.
Tutto va bene, basta ricordare alcune identità dell'aritmetica booleana, per esempio: a || b = !( !a && !b ). Allora cambiando dalla congiunzione alla disgiunzione possiamo sostituire il controllo della condizione OR con il controllo consecutivo (annidato) delle condizioni AND: per esempio, se (a || b || c) si trasforma, come ha giustamente scritto TarasBY sopra, in
Questo codice è in generale più veloce del codice originale con |||, perché viene eseguito solo finché una delle condizioni nella lista è vera, cioè finché l'intera operazione OR risulta in TRU.
Tutto va bene, basta ricordare alcune identità dell'aritmetica booleana, per esempio: a || b = !( !a && !b ). Allora cambiando dalla congiunzione alla disgiunzione possiamo sostituire il controllo della condizione OR con il controllo consecutivo (annidato) delle condizioni AND: per esempio, se (a || b || c) si trasforma, come ha giustamente scritto TarasBY sopra, in
Questo codice è in generale più veloce del codice originale con ||| perché viene eseguito solo finché una delle condizioni nella lista è vera, cioè finché l'intera operazione OR produce un risultato TRU.
Tutto va bene, basta ricordare alcune identità dell'aritmetica booleana, per esempio: a || b = !( !a && !b ). Allora cambiando dalla congiunzione alla disgiunzione possiamo sostituire il controllo della condizione OR con il controllo consecutivo (annidato) delle condizioni AND: per esempio, se (a || b || c) si trasforma, come ha giustamente scritto TarasBY sopra, in
Questo codice è in generale più veloce del codice originale con ||| perché viene eseguito solo finché una delle condizioni nella lista è vera, cioè finché l'intera operazione OR produce un risultato TRU.
Grazie per la vostra partecipazione! Ho 5 condizioni diverse ma uguali, e se nessuna condizione è soddisfatta, l'EA aspetta che una di esse sia soddisfatta. Pertanto, nessuna forma di implementazione si è dimostrata migliore, nonostante i miei sforzi. Perciò, per ora mi atterrò alle mie "torte".