Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1737

 
Artyom Trishkin #:

Naturalmente, il programma non sta aspettando che il terminale in un thread separato registri alcuni dati.

Grazie, voglio dire

 
Per favore ditemi, dopo la pausa nell'operatore for (i; i>0; i--) viene eseguita l'espressione "i--" o solo "espressione 3" (secondo la documentazione)? Non l'ho trovato nel libro di testo.

Non capisco perché "-1" viene lanciato di volta in volta se dopo la pausa il Print(i); prima della pausa c'è i-- e if (i==0), che è il comando di uscita se i ha già raggiunto lo 0 all'interno dell'operatore. Poiché i è usato anche più in basso nel codice, in Close[i], produce l'errore "out of range

 
Ivan Butko operatore for (i; i>0; i--) viene eseguita l'espressione "i--" o solo "espressione 3" (secondo la documentazione)? Non l'ho trovato nel libro di testo.

Non capisco perché "-1" viene lanciato di volta in volta se dopo la pausa il Print(i); prima della pausa c'è i-- e if (i==0), che è il comando di uscita se i ha già raggiunto lo 0 all'interno dell'operatore. Poiché i è usato anche più in basso nel codice, in Close[i], produce l'errore "out of range

Non lo capisco. Mostrami il codice
 
Ivan Butko operatore for (i; i>0; i--) viene eseguita l'espressione "i--" o solo "espressione 3" (secondo la documentazione)? Non l'ho trovato nel libro di testo.

Non capisco perché "-1" viene lanciato di volta in volta se dopo la pausa il Print(i); prima della pausa c'è i-- e if (i==0), che è il comando di uscita se i ha già raggiunto lo 0 all'interno dell'operatore. Poiché i è usato anche più in basso nel codice, in Close[i], produce l'errore "out of range

Dopo la pausa, esce dal ciclo all'operatore successivo al ciclo, dopo che il ciclo itera fino alla fine dell'iterazione in quel punto e ne inizia una nuova.

 
Valeriy Yastremskiy for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// Nel log dice (-1), come mai... e, quindi, l'errorearray out of range, perché Close[-1] non avviene.

Voglio dire, ho ragione nel capire che dopo la pausa nell'intestazione(i; i>0; i--) la terza espressione "i--" viene ancora eseguita?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// Il log dice (-1), come mai... e, quindi, l'errorearray out of range, perché Close[-1] non avviene.

Voglio dire, ho ragione nel capire che dopo la pausa nell'intestazione(i; i>0; i--) la terza espressione "i--" viene eseguita comunque?

Correttamente scrive

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);
Si toglie non solo nell'intestazione, ma anche nel corpo del ciclo.
 
Konstantin Nikitin #:

Scrive correttamente.

Non chiedetemi che tipo di stronzate scrivo nel mio codice. Voglio solo capire le sfumature di questo operatore) Sembra che nel corpo ho specificato "è ora di lasciare qui, perché i=0", ma l'operatore prende e ancora una volta esegue l'espressione, anche se dovrebbe passare il controllo all'operatore successivo

 
Ivan Butko #:

Non chiedetemi che tipo di sciocchezze sto scrivendo. Voglio solo capire le sfumature di questo operatore) È come se nel corpo avessi specificato "è il momento di lasciare qui, perché i=0", ma l'operatore prende e ancora una volta esegue l'espressione, anche se dovrebbe passare il controllo all'operatore successivo

Sì, l'hai fatto, ma l'hai tolto prima di questo controllo. Scrivilo in questo modo

i=10;
for (i; i>0; i--)
{
if (i==0) break;
i--;
}

Print(i);
Print(Close[i]);

ci sarà un risultato diverso

 
Konstantin Nikitin #:

Sì, l'hai fatto, ma l'hai tolto prima di questo controllo. Scrivilo così


aah... capito. Capito.

Grazie a tutti per le vostre pronte risposte.

 
Ivan Butko #:

ahh... Capito. Capito.

Grazie a tutti per le vostre pronte risposte.

Il tuo codice stampa 0, non -1...

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }
//+------------------------------------------------------------------+

Probabilmente -1 stampato da qualche altra parte, molto probabilmente l'intero codice è nelle stampanti...

Prima di cercare di risolvere il problema, è necessario identificarlo... Assicurati che ci sia e localizzalo prima di risolverlo...

Motivazione: