Salve, mi è comparso più volte l’alert “E’ stato rilevato un ciclo infinito o un ciclo con troppe iterazioni” utilizando un codice che contiene un While ed un For che in effetti in un grafico daily completo con molte barre da calcolare potrebbe portare a superare anche le 300 iterazioni. Volevo chiedere ai più esperti qual’è il limite di cicli supportato dalla versione 10.3.
Grazie in anticipo, Fabrizio
Non c’è un limite preciso, dipende molto dalla struttura del codice e dalla memoria disponibile.
E’ opportuno cercare di limitare quanto più possibile le iterazioni, specialmente se ve ne sono più di una annidate tra loro. Inoltre occorre sempre avere un termine ben definito per non incorrere nell’altro tipo di errore “ciclo infinito”.
Questo codice gira regolarmente su ProBackTest, ma se aumento il limite a 10001 mi segnala “ciclo infinito”:
for i = 0 to 10000
x = close[i]
next
buy at -x limit
Questo gira regolarmente su ProBuilder (Dax, 4h, 1000 barre), ma se aumento il limite a 6665 segnala errore per troppe interazioni o ciclo infinito:
for i = 0 to 6664
x = close[i]
next
return x
Grazie per la velocissima risposta! Molto interessanti i tuoi esempi…nel mio caso stavo effettuando delle modifiche al codice:
Bull & Bear Volume-by-Price levels
dove un For lungo quanto il numero di barre del grafico è annidato dentro un While, la lunghezza del quale è parametrica. Superato un certo limite (a dire il vero molto basso) nel while, si blocca tutto.
p.e. fargli disegnare 20 barre su un grafico da 10min (144 candele) = 2880 cicli manda in blocco l’indicatore. Quando parlavi di memoria, intendi quella del PC o quella che il motore di PRT si riserva durante l’esecuzione?
Cioa, grazie
Quella che si riserva PRT, non so bene come la gestisca.
Grazie Roberto, buona giornata
Fabrizio