我看到'Pine cannot determine the referencing length of a series. Try using max_bars_back'錯誤

計算Pine腳本時,它將為代碼中的每個變量或函數建立一定大小的歷史緩衝區。該緩衝區包含有關變數/函數的先前值的資訊,當代碼使用 [] 歷史引用運算符引用過去的值時,將使用該緩衝區。緩衝區的大小指定可以請求該值到歷史記錄的距離。

Pine透過分析在前244根K線上計算腳本時過去所做的引用來自動確定所有變數和函數所需的緩衝區大小。如果未檢測到任何過去的引用,則將預設緩衝區大小分配給變數或函數。對於變數,預設緩衝區大小為300根K線,對於函數,預設緩衝區大小為1根K線。

當第244根K線已經通過時,首先執行對條件語句中變數或函數的過去引用時,條件語句分支 (if, iff, or?) 中通常會出現問題。在這種情況下,Pine將無法為該函數分配適當的緩衝區大小,並且將使用預設緩衝區大小。看看下面的代碼。它將返回上述錯誤,因為:

  • 編譯時未知var1變數值
  • 測試變數不要求圖表的前224根K線顯示任何過去的數據

因此,將為測試變數分配預設的300根K線緩衝區。當腳本過去請求變數的緩衝區之外的301根K線的值時,會發生錯誤。

//@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

存在 max_bars_back 參數和 max_bars_back() 函數可以解決此問題。它們允許您在預設緩衝區不足時為變數和函數指定正確的緩衝區大小。在上面的代碼中取消對 max_bars_back() 函數調用的註釋。將301緩衝區分配給測試變數,結果腳本將正確計算。

這是一個函數調用的示例,預設的單根K線(one-bar)緩衝區大小歸因於該函數調用,因為在前244根K線中未調用它。儘管沒有使用 [] 運算符明確引用過去的值,但是該函數仍然需要過去的20個值來進行計算。因此,腳本將返回 max_bars_back 錯誤:

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

max_bars_back() 函數不能用於為函數分配特定的緩衝區大小。如果需要這樣做,或者要為腳本中的所有變數和函數設定預設緩衝區大小,請在腳本的 studystrategy 聲明語句中添加 max_bars_back 參數。請注意,使用參數會增加腳本的資源使用率,因此僅應在需要時使用此方法:

//@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

您也可以透過將有問題的表達式移出條件分支來解決問題,在這種情況下,不需要 max_bars_back 參數:

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

您可以在我們的用戶手冊中了解有關 max_bars_back 和相關錯誤的更多資訊。

首頁 股票篩選器 外匯篩選器 加密貨幣篩選器 全球財經日曆 如何運作 圖表功能 價格 推薦朋友 網站規則 幫助中心 網站 & 經紀商解決方案 小工具 圖表解決方案 輕量圖表庫 部落格 & 新聞 推特
概覽 個人資料設定 賬戶和賬單 推薦朋友 代幣 我的客服工單 幫助中心 發表的想法 粉絲 正在關注 私人訊息 在線聊天 登出