Errore 'Memory limits exceeded. The study allocates X times more than allowed'

Per assicurare a tutti gli utenti di TradingView la disponibilità ininterrotta di risorse per l'elaborazione dei dati, gli indicatori e le strategie non possono eccedere il nostro limite di memoria. Pena la comparsa del messaggio 'Memory limits exceeded' e dell'errore in fase di runtime. Per evitare l'occorrere di tale problematica, si consiglia di ottimizzare il codice in modo da renderlo meno energivoro. Ecco alcuni consigli su come fare:

  • Evita di usare 'max_bars_back' se non è necessario. Si tratta di un argomento che stabilisce un buffer storico per tutte le variabili di serie adoperate nello script. Di default, Pine è in grado di allocare un buffer proporzionale all'utilizzo di ogni variabile, pertanto l'uso di 'max_bars_back' diviene indispensabile solo laddove Pine non riesca a stabilire da solo un buffer appropriato (errore 'Pine cannot determine the refering length of a series'). Se incontri tale errore, mantieni comunque l'argomento sul valore minore possibile: ad esempio, se hai una variabile che deve andare indietro di 400 barre e genera l'errore di cui sopra, impostare un 'max_bars_back' di 5000 barre sarebbe inutile poiché forzerebbe ogni variabile a eseguire un calcolo per 5000 barre nel passato in ogni momento, con conseguenze dispendio inutile di risorse. Per saperne di più su come ottimizzare questo parametro, visita il nostro Centro di supporto.
  • Limita al minimo il numero di esecuzioni di 'security()'. Poiché si tratta di una delle funzioni più energivore, basta poco per raggiungere il limite di memoria, soprattutto quando si va a richiedere dati da timeframe minori: ad esempio, se richiedi i dati del grafico ad 1 minuto quando sei su un giornaliero, per ogni barra lo script dovrà caricare centinaia di barre ad 1 minuto, spendendo molte risorse. Alzare il timeframe o rimuovere del tutto la funzione può aiutare.
  • Solitamente, il buffer storico viene creato in automatico, anche quando non usi 'max_bars_back'. In ogni caso, le variabili che fanno riferimento ad eventi di molto indietro nel passato incrementano il consumo di memoria. Tienilo a mente quando crei variabili usando l'operatore '[ ]' per accedere ad elementi indietro di migliaia di barre.
  • Se stai scrivendo una strategia, il numero di trade o ordini può avere un effetto sulle risorse utilizzate dallo script. Puoi specificare il punto di inizio di una strategia per alleggerire il numro di operazioni: ad esempio, puoi aggiungere una condizione supplementare per filtrare gli ingressi e le uscite dal mercato in base al valore di timestamp. Su questa pagina puoi trovare qualche spunto.
  • Le linee e le etichette create con le funzioni 'line.new()' e 'label.new()' consumano molte risorse. Puoi rimuovere le linee non necessarie usando 'line.delete()' o 'label.delete()', o ridurre la quantità massima di oggetti con 'max_lines_count' o 'max_labels_count'.