Saya lihat ralat 'Had ingatan dilepasi. Kajian meletakkan X masa lebih daripada yang dibenarkan'

Untuk memastikan ketersediaan berterusan untuk sumber-sumber pengkomputeran kepada semua pengguna TradingView, penunjuk dan strategi tidak boleh menggunakan lebih ingatan (memory) daripada yang ditetapkan oleh had ingatan kami (memory limit). Jika jumlah ingatan untuk kajian memerlukan lebih daripada had berkenaanm ralat ‘Had ingatan dilepasi" akan muncul dan kajian akan memulangkan satu ralat waktu jalan (runtime error). Jika anda menjumpai ralat ini, anda boleh cuba mengoptimumkan kod anda supaya ia menggunakan kurang ingatan. Berikut ada beberapa perkara untuk diperhatikan apabila anda cuba mengoptimumkan kod anda  If you encountered the error, you can try optimizing your code so that it consumes less memory. Here are some of the things to pay attention to when you try to optimize your code:

  • Jika skrip anda menggunakan jadual, pastikan mereka dipaparkan secara optimum. Pemaparan kandungan jadual selalunya mewakili keadaan terakhir jadual, kerana ia dibina pada pelaksanaan terakhir skirp, pada bar akhir set data, jadi secara idealnya, jadual hanya perlu dibuat sekali sahaja, pada bar pertama, dan diisikan sekali sahaja, pada bar terakhir. Menggunakan kata kunci `var` untuk mengisytiharkan jadual dan memasukkan semua panggilan dalam satu blok `if barstate.islast` untuk prestasi lebih baik. Anda boleh mempelajari lebih mengenai jadual di dalam artikel Manual Pengguna ini.
  • Elakkan daripada menggunakan `max_bars_backkecuali jika diperlukan. `max_bars_back` ialah satu argumen yang menetapkan satu penimbal sejarah khusus untuk semua pembolehubah siri yang digunakan oleh penunjuk. Secara lalai, Pine telah meletakkan satu penimbal yang sesuai secara automatik untuk setiap pembolehubah, jadi `max_bars_back` adalah hanya diperlukan apabila anda mendapati Pine tidak dapat menentukan panjang rujukan untuk satu ralat siri. Sekiranya anda memang masih mendapat ralat, cuba jadikan nilai `max_bars_back` sekecil yang mungkin: jika anda mmepunyai satu pembolehubah yang pergi 400 bar ke belakang dan menyebabkan satu ralat, menetapkan `max_bars_backkepada 5000 akan bermaksud semua  pembolehubah di dalam kod mempunyai satu penimbal sejarah 5000-bar pada setiap bar, yang memerlukan satu ingatan yang sangat banyak, yang dihabiskan pada data yang tidak digunakan dalam skrip. Anda boleh membaca bagaimana untuk mengoptimumkan penggunaan `max_bars_back` anda di Pusat Bantuan kami.
  • Cuba gunakan panggilan `request.security()` sekurang mungkin. Fungsi `request.security()` adalah sangat mahal secara pengiraan. Penggunaan berlebihan dengan cepat menjadikan penunjuk anda mencapai had ingatan. Ini paling relevan untuk panggilan request.security() yang memerlukan data dari rangka masa yang lebih rendah: jika anda meminta data '1m' pada satu carta '1D', untuk setiap bar 1D, penunjuk terpaksa memuat data untuk ratusan bar 1m, menggunakan ingatan yang sangat banyak. Menukar rangka masa keselamatan kepada satu rangka masa lebih tinggi atau membuang request.security() mungkin dapat membantu.
  • Penimbal sejarah selalunya dicipta secara automatik, walaupun apabila anda tidak menggunakan pembolehubah `max_bars_back`. Pembolehubah merujuk kepada titik-titik jauh di dalam sejarah bar juga akan meningkatkan penggunaan ingatan. Sentiasa ingat perkara ini apabila anda mencipta pembolehubah yang merujuk kepada ribuan bar dalam sejarah dengan operator `[ ]`.
  • Jika anda menulis satu strategi, bilangan dagangan atau pesanan juga boleh memberikan kesan kepada ingatan yang digunakan oleh skrip. Anda boleh menghadkan titik permulaan strategi anda untuk membuang pesanan-pesanan tidak diperlukan, sebagai contoh, dengan menambahkan satu keadaan berbeza (separate condition) kepada masukan/keluaran anda yang membandingkan masa bar kepada satu cop masa tertentu. Satu contoh penyaringan tarikh yang bagus dalam strategi boleh ditemui di sini.
  • Garisan dan label dicipta dengan fungsi `line.new()` dan `label.new()` juga menggunaka banyak ingatan. Padamkan garisan dan label yang tidak diperlukan menggunakan fungsi `line.delete()` dan `label.delete()`, atau kurangkan kuantiti yang dijelaskan dengan `max_lines_count` atau `max_labels_count`.