Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 495
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
Sul primo caso è risolto - messo tra parentesi per due confronti e non giura - c'era un errore logico - cioè i risultati del confronto potrebbero essere sostituiti a causa della "o"?
Rimane una questione aperta con la seconda espressione - cosa c'è di sbagliato lì - qualche idea?
Il primo caso è risolto - metti tra parentesi due confronti e non giura - c'era un errore logico - cioè i risultati del confronto potrebbero essere sostituiti a causa di "or"?
C'è ancora una questione aperta riguardo alla seconda espressione - cosa c'è di sbagliato lì - qualche idea?
Ricordate che il controllo di una condizione nel nuovo mql4 non viene eseguito completamente. Cioè nella condizione
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Se Low[x] non è più grande di PriceBuy, allora non verrà eseguito alcun ulteriore controllo. Questo è ciò che ci dice la descrizione dell'errore. Corrispondentemente, se la prima coppia è racchiusa tra parentesi, la seconda coppia di condizioni sarà controllata se fallisce.
Seconda domanda.
for(calc_day;calc_day>0; calc_day--)
A cosa è uguale calc_day? Può essere meno di zero? Il compilatore non sa cosa c'è nella logica... Ecco perché avverte di un possibile loop inefficace.
Ricordate che il controllo delle condizioni nel nuovo mql4 non viene eseguito completamente. Cioè, nella condizione
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Se Low[x] non è maggiore di PriceBuy, non viene eseguito nessun altro controllo. Questo è ciò che ci dice la descrizione dell'errore. Corrispondentemente, se la prima coppia è racchiusa tra parentesi, la seconda coppia di condizioni sarà controllata se fallisce.
Grazie per la risposta!
Sorpreso - come visivamente la logica ha sempre funzionato correttamente, hmmm...
Seconda domanda.
for(calc_day;calc_day>0; calc_day--)
A cosa è uguale calc_day? Può essere meno di zero? Il compilatore non sa cosa c'è nella logica... Ecco perché avverte di un possibile loop inefficace.
Grazie per la risposta!
Sorpreso - come visivamente la logica ha sempre funzionato correttamente, hmmm...
Prima delle build 6** era così, controllava l'intera catena di condizioni e tutto funzionava, ma ora tutto è cambiato. E nelle vecchie costruzioni in questo caso la condizione è ambigua. Come è progettato?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
O l'ha fatto?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cervello umano può capirlo, ma cosa deve fare un compilatore? Non ha un cervello.
-Aleks-:
Il numero calc_day è sempre maggiore di 0. Altri valori non causano la chiamata del codice.Dillo al compilatore...
Fino alla build 6** era così, l'intera catena di condizioni era controllata e tutto funzionava, ma ora tutto è cambiato. E nelle vecchie costruzioni la condizione è ambigua anche in questo caso. Come è progettato?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
o è così?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cervello umano può capirlo, ma cosa deve fare un compilatore? Non ha un cervello...
Dillo al compilatore...
Convincente - sarò più vigile.
Come faccio a dirlo al compilatore? Scrivilo, ma capirà?
if (calc_day<0) calc_day=calc_day*(-1);
Era così prima delle build 6**, l'intera catena di condizioni era controllata e tutto funzionava, ma ora tutto è cambiato. Sì e nelle vecchie costruzioni in questo caso condizione ambiguità. Come è progettato?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
o lo è?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cervello umano può capirlo, ma cosa deve fare un compilatore? Non ha un cervello...
Dillo al compilatore...
controllare la precedenza dell'operatore per un possibile errore; usare le parentesi per chiarire la precedenza - questo non è un errore. È un avvertimento. Si verifica nei vecchi codici.
L'hanno aggiunto per l'utente piuttosto che per il compilatore. Il compilatore è guidato dalle priorità delle operazioni. Lì tutto è chiaro. La priorità di && è superiore a quella di |||. Ecco perché le parentesi dovrebbero essere disposte in questo modo
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Aggiornamento: in questo caso sia per MT4 che per MT5 la priorità è la stessa.
Convincente - sarò più vigile.
Come faccio a dirlo al compilatore? Scrivilo, ma capirà?
if (calc_day<0) calc_day=calc_day*(-1);
controllare la precedenza dell'operatore per un possibile errore; usare le parentesi per chiarire la precedenza - questo non è un errore. È un avvertimento. Si verifica nei vecchi codici.
L'abbiamo aggiunto per l'utente piuttosto che per il compilatore. Il compilatore è guidato dalle priorità delle operazioni. Lì tutto è chiaro. La priorità di && è superiore a quella di |||. Ecco perché le parentesi dovrebbero essere disposte in questo modo
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Aggiornamento: in questo caso sia per MT4 che per MT5 la priorità è la stessa.
Beh, in sostanza, sì, l'avviso non è un errore. Ma come funzionerà la variante iniziale if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )? O è una seccatura mettere un paio di staffe?
Convincente - sarò più vigile.
Come faccio a dirlo al compilatore? Scrivilo, ma capirà?
if (calc_day<0) calc_day=calc_day*(-1);
Beh, in sostanza, sì, l'avviso non è un errore. Ma come funzionerà la variante iniziale if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )? O non riuscirà a mettere un paio di staffe?
Funzionerà come ho scritto sopra.
Il compilatore avverte l'utente di non essere pigro e di mettere le parentesi per evitare possibili errori non ovvi.