Pine Script®新功能:平均K線圖表上的真實回測、訪問商品資訊的內建函數等

Jun 30, 2023

隨著我們不斷將您要求的改進添加到我們的編程語言中,跟上我們的腳本可能是一個挑戰。這篇文章介紹了我們最近添加的最重要的內容,這樣您就不會錯過它們。

平均K線圖(Heikin Ashi)上更真實的回測

在平均K線圖上運算的回測通常會產生不可靠的回測結果,因為經紀商模擬器始終使用該圖表的價格來執行訂單,在HA圖表中這些價格是合成的。而“使用標準OHLC執行訂單”的新功能解決了這個問題。當使用時,在HA圖表上運算的策略將以實際市場價格來執行訂單,更接近模擬您的策略在即時交易中的行為。

策略使用者可以在”策略”的”屬性”標籤中啟用此功能。預設情況下,該功能是關閉的。

請注意,這只會改變在HA圖表上運算的策略行為。對於其他合成圖表類型(如:磚形圖Renko),回測仍然會按照合成圖表價格執行訂單,不受該功能設定的影響。

input.*()函數的新display參數

新的display參數使您可以更好地控制腳本名稱旁邊輸入值的顯示。可以使用四個參數:display.status_linedisplay.data_windowdisplay.alldisplay.none。允許使用加號或減號組合這些參數,而無論使用哪個參數,輸入值仍然會繼續出現在腳本設定的”輸入”標籤中。

新參數允許您隱藏狀態行中出現的輸入值,或者顯示隱藏的輸入值,即:布爾值、顏色或日期輸入。使用新參數,您還可以在數據視窗中的腳本名稱旁邊顯示輸入。不使用該參數時,輸入的預設顯示不變。

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

用於訪問商品資訊的新內建函數

我們向syminfo命名空間增加了三個內建函數:syminfo.sectorsyminfo.industrysyminfo.country。它們回傳字符串,為您提供有關當前商品的更多資訊。國家/地區資訊以 ISO 3166-1 alpha-2格式呈現。

停用策略中已執行訂單的快訊

現在您可以通過在創建訂單時使用 disable_alert = true的函數,將策略中的個別訂單通知停用。例如:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

這在使用alert()函數生成自訂消息以通知或在策略執行期間使用webhooks時,對於過濾特定訂單非常有用。

策略中最大回撤和回升的計算變化

最大回撤和最大回升的計算已經改進,考慮了在交易中可能實現的資本。以前只考慮了進出點的資本值,這可能導致最大回撤和最大回升值與其最大潛力值不符。新方法在「最大回撤」和「最大回升」的幫助中心文章中有詳細解釋。

持用戶定義類型中的varip修飾符

varip修飾符現在可以應用於用戶定義類型的欄位,它允許變數在同一個K線圖上的每次腳本執行之間保留值。請注意,如果未使用varip定義欄位,則這些欄位將在每個K線圖上回滾,因此即使包含它們的對象是使用varip創建的,在同一個K線圖上多次執行期間分配給它們的值也不會被保留。

例如:

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)
// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

貨幣兌換率請求

我們引入了一個新的request.currency_rate()函數,允許您檢索從一種貨幣到另一種貨幣的兌換率。此函數需要兩個參數:fromto,每個參數都是符合ISO 4217的三字母字符串代碼。

以下是如何使用它將金融工具的價格轉換為英鎊(GBP)的範例:

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

array命名空間中的新函數

為陣列增加了四個新函數:

  • array.first() — 回傳陣列的第一個元素。
  • array.last() — 回傳陣列的最後一個元素。
  • array.every() — 如果陣列的每個元素都為true,則回傳true;否則,回傳false
  • array.some() — 如果陣列中至少有一個元素為true,則回傳true;否則,回傳false。

要了解最新的Pine Script®功能,請關注用戶手冊的發行說明PineCoders帳戶還透過Telegram上的Squawk BoxTwitter帳戶,以及TradingView上的Pine Script® Q&A公共聊天室更新。

我們相信您會發現這些功能很有用,請繼續向我們發送您的反饋和建議,讓我們成為最好的平台。我們為您建構TradingView,我們始終渴望聽到您的想法。

TradingView團隊

Look first Then leap

TradingView專門為您打造,請確保您充分利用我們出色的功能
開啟圖表