Saya melihat 'Pine tidak dapat menentukan siri panjang rujukan. Cuba gunakan ralat max_bars_back '

Apabila skrip Pine dikira, ia membuat penimbal sejarah dalam ukuran tertentu untuk setiap pemboleh ubah atau fungsi dalam kod. Penimbal itu mengandungi maklumat mengenai nilai-nilai yang lalu yang digunakan pemboleh ubah / fungsi dan penimbal ini akan digunakan apabila kod merujuk kepada nilai-nilai yang lalu menggunakan operator rujukan sejarah []. Ukuran penimbal menentukan sejauh mana sejarah nilai ini dapat diminta.

Pine automatically determines the required buffer size for all variables and functions by analyzing past references made while calculating the script on the first 244 bars. If no past references are detected, a default buffer size is assigned to the variable or function. For variables, the default buffer size is 300 bars, for functions it is one bar. 

Pine secara automatik menentukan ukuran penimbal yang diperlukan untuk semua pemboleh ubah dan fungsi dengan menganalisis rujukan masa lalu yang dibuat sambil mengira skrip pada 244 bar pertama. Sekiranya tidak ada rujukan masa lalu yang dapat dikesan, ukuran penimbal lalai diberikan kepada pemboleh ubah atau fungsi. Untuk pemboleh ubah, ukuran penimbal lalai adalah 300 bar, untuk fungsi adalah satu bar:

  • Nilai pemboleh ubah var1 tidak diketahui pada masa penyusunan
  • Pemboleh ubah ujian tidak meminta data masa lalu pada 244 bar pertama carta

Oleh sebab itu, pemboleh ubah ujian diberi penimbal lalai sebanyak 300 bar. Apabila skrip meminta nilai bar ke-301 pada masa lalu, yang berada di luar penimbal pemboleh ubah, ralat akan berlaku.

//@version=4
study("max_bars_back var",overlay=true)
var1 = input(301)
test = 0.0
//max_bars_back(test, 301)
if bar_index > 244
    test := test[var1]
plot(test)
Java

Parameter max_bars_back dan fungsi max_bars_back () wujud untuk mengatasi masalah ini. Mereka membolehkan anda menentukan ukuran penimbal yang betul untuk pemboleh ubah dan fungsi apabila penimbal lalai tidak mencukupi. Jadikan bukan pernyataan bagi fungsi-panggilan max_bars_back () dalam kod di atas. Penimbal sebanyak 301 akan diberikan kepada pemboleh ubah ujian dan hasilnya, skrip akan mengira dengan betul.

Berikut adalah contoh fungsi-pangilan yang mana ukuran penimbal satu-bar lalai dikaitkan kerana ia tidak dipanggil pada 244 bar pertama. Walaupun tidak ada rujukan eksplisit terhadap nilai lalu menggunakan operator [], fungsi tersebut tetap memerlukan 20 nilai terakhir untuk mengira. Oleh itu, skrip akan menyebabkan ralat max_bars_back: 

//@version=4
study("Requires max_bars_back")
test = 0.0
if bar_index > 1000
    test := vwma(close, 20)
plot(test)
Java

Fungsi max_bars_back () tidak dapat digunakan untuk menetapkan ukuran penimbal tertentu pada fungsi. Apabila anda perlu melakukannya, atau ketika anda ingin menetapkan ukuran penimbal lalai untuk semua pemboleh ubah dan fungsi dalam skrip, tambahkan parameter max_bars_back ke pernyataan skrip kajian atau pernyataan strategi. Perhatikan bahawa menggunakan parameter akan meningkatkan penggunaan sumber skrip, jadi kaedah ini hanya gunakan bila perlu:

//@version=4
study("Requires max_bars_back", max_bars_back=20)
test = 0.0
if bar_index > 1000
    test := vwma(close, 20)
plot(test)
Java

Anda juga dapat menyelesaikan masalah ini dengan mengeluarkan ungkapan bermasalah dari cabang bersyarat, dalam hal ini parameter max_bars_back tidak diperlukan:

//@version=4
study("Requires max_bars_back")
test = 0.0
vwma20 = vwma(close, 20)
if bar_index > 1000
    test := vwma20
plot(test)
Java

Ralat mungkin berlaku semasa menggunakan fungsi yang membenarkan panjang dinamik , cthnya nilai-nilai bersiri. Skrip berikut memulangkan ralat max_bars_back kerana pada 300 bar yang pertama, sma() dikira dengan kepanjangan 50. Oleh sebab itu, hanya 50 bar sejarah data diminta, dan mempunyai batasan hingga 50. Selepas bar ke-300, kepanjangan akan ditukar kepada 100, di luar penimbal yang ditetapkan.

//@version=4
study("Out of bounds")
series_length = bar_index > 300 ? 100 : 50
plot(sma(close, series_length))
Java

Untuk menyelesaikan masalah ini, anda boleh menjana penimbal yang lebih besar pada permulaan pengiraan penunjuk dengan menggunakan nilai kepanjangan yang lebih besar. Dalam kod berikut, kami telah memanggil 1000 bar sejarah data pada bar pertama dalam pengiraan penunjuk kami. Ini akan mencipta penimbal 1000-bar yang tetap untuk sma() kami , dan hasilnya tidak akan melebihi batasan.

Anda boleh mengetahui lebih lanjut mengenai max_bars_back dan kesalahan yang berkaitan dalam Manual Pengguna kami.