Pine Script 指標與策略:差異與各自的使用時機
閱讀約6分鐘 · 更新於
在TradingView上,指標和策略在 Pine 編輯器裡看起來幾乎一樣。指標在你的圖表上繪圖。策略模擬交易,並回報這些交易會賺多少。把兩者搞混,是歷史上看起來很棒的腳本在實盤令人失望的最常見原因。這份指南涵蓋會改變你結果的差異,以及第三種腳本類型:函式庫。
指標、策略和函式庫:各自的用途
- 指標(
indicator()):計算並繪圖。用於價位、以plotshape()繪製的訊號、儀表板、市場偏向,以及用alertcondition()建立的警示。 - 策略(
strategy()):指標能繪製的一切,加上透過strategy.entry、strategy.exit和strategy.close模擬的委託單。TradingView執行這些委託單,並用交易統計填滿策略測試器。 - 函式庫(
library()):一組你發布、再匯入其他腳本的可重複使用函式。函式庫本身永遠不會被加到圖表上。
單一腳本只能宣告這三者其中之一,所以一個腳本不能同時是指標和策略。常見的做法是用函式庫存放共用邏輯,用指標處理圖表和警示,用策略做測試。
一行說明差異
Pine 腳本的第一行就宣告它是哪一種。以indicator()開頭的腳本只能計算和繪圖:線條、顏色、標籤、填色。它沒有部位、成交價或獲利的概念。以strategy()開頭的腳本則加入委託單模擬引擎:它可以呼叫strategy.entry和strategy.exit之類的函式,TradingView會對歷史 K 線執行這些委託單,產生策略測試器報告、淨利、最大回撤、勝率、獲利因子,以及模擬交易清單。
所以區別在於:指標描述條件;策略斷言這些條件會賺多少。第二個主張比第一個沉重得多,因為你一模擬委託單,就繼承了一堆關於這些委託單何時以及以什麼價格成交的假設。
回測引擎悄悄做出假設的地方
策略的資金曲線,只和底下的成交假設一樣值得信任。四個預設值造成大部分的傷害:
- 以收盤評估。預設情況下,測試器在 K 線收盤時評估你的邏輯。如果條件引用了該 K 線自己的最高價、最低價或收盤價,歷史的「成交」可能用到實盤交易要等到 K 線完成後才有的資訊。
- 以下一根 K 線開盤價成交。依訊號下的市價單,在模擬中以下一根 K 線的開盤價成交。在快速的開盤,那個印出的價格可能和你實際會成交的價格差了好幾跳或好幾點。
- 零摩擦。如果在
strategy()呼叫中把commission和slippage留在零,每一筆模擬交易都是免費的,而每一筆真實交易都要付手續費和滑價。 - 樣本大小。測試器會很樂意回報一條建立在十二筆交易上的漂亮曲線。十二次獲利是穿著優勢外衣的雜訊。
實例說明
假設一個策略在ES期貨的40筆交易中顯示+US$4200,而成本留在零。加上約US$5的來回手續費(散戶期貨手續費因券商而異,請用你自己的),再加上每邊一跳的滑價。在ES上一跳是0.25點,價值US$12.50,所以來回各一跳就是US$25。每筆交易大約有US$30的摩擦成本,40筆交易下來約US$1200,把表面上的 +US$4200拉到約US$3000。而這還是客氣的版本:如果進場集中在波動大的開盤,真實滑價比一跳更寬,落差會更大。同樣邏輯的指標版本裡完全不會出現這些摩擦成本,因為指標根本不會宣稱有成交。想進一步了解如何區分真正的優勢和配適出來的優勢,請看如何辨識過度配適的交易系統。
訊號:指標中用 plotshape,策略中用委託單
指標用plotshape()或plotchar()標記訊號,也就是在條件成立的 K 線上放一個三角形或標籤。什麼也沒有被買進,所以指標沒有交易統計。策略用strategy.entry()把同一個條件變成委託單,策略測試器接著回報淨利、勝率、回撤和完整的交易清單。要衡量訊號的準確度,就把條件移到策略裡,加入合理的成本,並閱讀交易清單。
測試訊號:收盤與盤中
預設情況下,策略每根 K 線在收盤時計算一次,市價單在下一根 K 線的開盤價成交。三個設定可以改變這一點:
process_orders_on_close = true讓委託單在訊號 K 線的收盤價成交。calc_on_every_tick = true在每個即時跳動重新計算。歷史資料只有已完成的 K 線,所以實盤和歷史結果可能不同。use_bar_magnifier = true在停損和目標都落在同一根 K 線內時,使用較低時間框架的資料來判斷該 K 線的哪個價格先出現。
在 K 線收盤時確認的訊號,讓回測與實盤結果最接近。
盤中訊號仍然有它的位置。必須在價格穿過價位的瞬間行動的突破策略,可以在實盤使用calc_on_every_tick,前提是你先在模擬帳戶上對實盤版本做前向測試,因為回測無法顯示訊號在 K 線內部的表現。對指標來說,警示也適用同樣的區分:「每根 K 線收盤一次」等待已確認的 K 線,「每根 K 線一次」則在條件於 K 線內部第一次轉為真時觸發,即使該 K 線之後收在相反的方向。Pine Script 常見問題更詳細地說明警示設定。
哪種腳本類型能在 Pine Screener 中使用?
Pine Screener 執行的是指標。要篩選策略的進場條件,請把條件放進指標,並繪製你想篩選的數值。
重繪究竟是什麼意思
任何事後顯示的數值與即時不同的腳本,都會被扣上「重繪」的帽子,但這個標籤常被誤用。誠實的測試只有一個問題:這個決定能不能在同一時刻、用同樣的資訊在實盤做出來?只有在 K 線收盤時才確認的訊號,只是要求你等待收盤。真正會誤導人的情況,是在仍在形成的 K 線上繪製、K 線結束後又跳動的訊號,或是用 lookahead 拉取的較高時間框架資料。在已確認的 K 線上評估邏輯,能讓你的回測和實盤體驗彼此誠實,無論你建立的是指標還是策略。
這如何對應到交易計畫
交易計畫刻意繞開重繪問題,給你固定、預先規劃的價位。每日價位,也就是ES、SPY、NQ和QQQ的價位,是在前一個收盤後計算的,交易時段中不會移動。沒有東西可以重繪:每個價位在美東時間9:30之前就已設定,並且固定不動。繪製這些線條的MyLinedChart,運作方式像指標。它繪製價位,什麼也不模擬,所以不帶有上述任何成交或手續費的假設。如果已發布的價位與你自己的策略告訴你的不一致,這種不一致就是資訊,答案常常是等待。
用你自己的價位建立策略
大多數策略是圍繞交易者已經手繪的價格進行交易:支撐、壓力、軸心。MyLinedChart會把你圖表上的每一條線、價位、註解和指標匯出為JSON、CSV或XLSX。把那個檔案交給 ChatGPT、Claude 或你自己的程式碼,請它寫出以那些確切價格交易的 Pine Script 策略。策略如何進場和出場,由你和你的 AI 決定。
相信任何一種腳本類型之前的簡短檢查清單
- 知道你手上拿的是哪一種:
indicator()只繪圖;strategy()模擬委託單並產生策略測試器報告。 - 在策略上,閱讀任何一個獲利數字之前,先為你實際交易的商品設定合理的
commission和slippage。 - 在已收盤的 K 線上確認邏輯,讓歷史和實盤共用同一個決策時刻。
- 要有足夠多的交易筆數,結果才有參考價值。
- 把背景疊加(例如已發布的價位)與執行的決定權分開,圖表提供資訊,決定則由你寫下的規則做出。
這樣使用時,指標是一面透鏡,策略是一個假設。在相信它們之前,兩者都要用真實成交來測試。
延伸閱讀
資料來源
僅供教育用途。不構成投資建議。
僅供教育用途。不構成投資建議。