本文面向 TradingView 新手,介紹如何使用 Pine Script 撰寫指標腳本。
涵蓋基本語法[版本宣告、indicator()
/strategy()
]、套用內建與社群指標、示例程式碼、策略回測操作,以及設定警報和自訂條件的方法,助您快速上手自動化交易分析。
TradingView腳本(Pine Script)是什麼
Pine腳本是什麼?Pine Script 是 TradingView 的腳本語言,用來打造自訂指標與策略。指標用於視覺化分析;策略可進行歷史回測並模擬下單。
如何開始?
基本參考資料:
- 用戶手冊 – 詳細的文件,描述了主要功能、程式語言的語法和結構、Pine 腳本、以及如何與社群腳本庫一起使用;
- Pine腳本參考 – Pine 中可用的所有函數、變數和關鍵字的快速參考材料,以及如何使用每個函數的範例。您可以透過彈出視窗直接在編輯器中開啟我們的參考資料
TradingView 官方建立了一個簡化的章節,任何人都可以透過使用簡單的腳本範例來熟悉我們語言的結構,該腳本範例已分成幾個部分,以方便您使用。
快速開始:介面與流程
- 完成後可在「策略測試器」看績效,或在「警報」建立提醒。
- 打開任何商品圖表 → 下方點「Pine 編輯器」。
- 貼上腳本 → 按「新增到圖表」。
- 需要回測就用 strategy();只想顯示訊號就用 indicator()。
在圖表中套用指標
內建指標夠用、社群指標夠多,但別一次塞滿。建議先用 1~2 個趨勢類(如 MA/EMA)搭配 1 個動能類(如 RSI/MACD),把畫面保持乾淨;有需要再另存成模板,之後就能一鍵還原熟悉的配置。社群指標多半有說明與參數預設,先觀察它在不同週期與商品上的穩定度,再決定是否納入日常。
- 內建指標:圖表上方「指標」→ 搜尋例如「RSI、MACD、Moving Average」。
- 社群指標:在同一視窗搜尋關鍵字(如「Supertrend」),選取評價高、更新頻率高的腳本。
- 小技巧:加入後可「儲存預設」與「另存模板」,一鍵套用常用組合。
入門語法速記
真正要記的其實不多:版本宣告、腳本類型、常用技術函式與繪圖/訊號 API。把 ta.sma/ta.rsi/ta.crossover
視為積木,先能組出「何時買、何時賣、畫在哪」三件事,你就進入門檻了。其餘像是顏色、字體、圖示大小,都是視覺強化,後面慢慢補即可。
- 版本宣告:
//@version=6
- 指標腳本:
indicator("名稱", overlay=true/false)
- 策略腳本:
strategy("名稱", overlay=true/false)
- 常用函式:
ta.sma、ta.ema、ta.rsi、ta.crossover、ta.crossunder
- 繪圖:
plot()
;圖上圖示:plotshape()
- 策略下單:
strategy.entry()
、strategy.close()
- 警報:
alertcondition()
(指標)、alert()
(指標/策略)
標準內建函數
這些是您在 pine 腳本開發中會常用到的標準函數。大多數情況下,您傳入數據,然後系統會傳回結果值。
功能 | 描述 |
---|---|
sqrt(9) | 回傳數值的平方根。 |
log(5) | 回傳數值的對數。 |
round(54.23) | 將浮點數四捨五入為最接近整數(例:54.23 ⇒ 54)。 |
min(val1, val2, val3) | 回傳多個數值中的最小值。 |
max(val1, val2, val3) | 回傳多個數值中的最大值。 |
crossover(ema1,ema2) | 判斷於最新資料點是否上穿:若 ema1 上穿 ema2,回傳布林值 true(否則為 false)。 |
crossunder(ema1,ema2) | 判斷於最新資料點是否下穿:若 ema1 下穿 ema2,回傳 true。 |
cross(ema1,ema2) | 判斷於最新資料點是否發生任一方向的穿越(上穿或下穿),回傳 true/false。 |
valuewhen(crossover(slow, fast), close) | 當指定事件發生時(例:fast 上穿 slow),擷取當下的收盤價。 |
strategy.entry(“long”, strategy.long, 100, when=strategy.position_size <= 0) | 符合條件時建立多單,數量 100;此例僅在目前無持倉(部位 ≦ 0)時進場。 |
strategy.exit(“exit”, “long”, stop=stopLoss, limit=takeProfit) | 依設定的停損/停利價格條件出場指定部位。 |
label.new(bar_index, high, syminfo.ticker) | 在指定 K 棒索引與價格位置新增標籤,可顯示文字(如商品代碼)。 |
tokyoOpen = time(timeframe.period, “0000-0800”) | 依 UTC 定義的時段建立時間序列標記(此例為 00:00–08:00),用來辨識是否位於該時段。 |
bgcolor(na(tokyoOpen) ? na : color.green) | 依條件變更圖表背景色;在時段內塗綠,否則保持透明。 |
myColor = color(#800080,0) | 以十六進位建立自訂顏色(此例為紫色,透明度 0)。 |
teslaClose = security(“TSLA”, “D”, close) | 取得其他商品/時間框架資料(此例抓取 TSLA 日線收盤價),可用於相關性或 Beta 分析。 |
nz(ema1, ema2) | 以備用值取代空值;常用來把 NaN 轉為 0(或指定值)以清理序列。 |
TradingView腳本範例一:均線交叉「指標」買賣訊號
均線交叉是最直覺的趨勢入場法:快線上穿慢線代表動能轉強。實務上,建議把參數交給 input
,你就能直接在圖上改 10/30、20/60 等組合,比用固定數字更好調整。訊號只做「提示」,不是強制進出;若要納入交易,務必搭配停損與風控。
(顯示訊號,不做回測)
//@version=6
indicator("簡單均線交叉", overlay=true)
shortLen = input.int(10, "短期均線")
longLen = input.int(30, "長期均線")
shortMA = ta.sma(close, shortLen)
longMA = ta.sma(close, longLen)
plot(shortMA, "短均", color=color.new(color.blue, 0))
plot(longMA, "長均", color=color.new(color.red, 0))
buySignal = ta.crossover(shortMA, longMA)
sellSignal = ta.crossunder(shortMA, longMA)
plotshape(buySignal, title="買進", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, text="BUY")
plotshape(sellSignal, title="賣出", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, text="SELL")
// 建立可用於「建立警報」的條件
alertcondition(buySignal, title="黃金交叉", message="短均上穿長均")
alertcondition(sellSignal, title="死亡交叉", message="短均下穿長均")
※怎麼用:新增到圖表後,在圖表上方「警報」→ 條件選這個指標 → 選擇「黃金交叉 / 死亡交叉」。
TradingView腳本範例二:RSI 超買超賣訊號(指標)
RSI 對震盪盤特別有用,但在單邊趨勢容易「一直超買或一直超賣」。因此更好的做法,是把 RSI 與趨勢濾波合用:例如果價在長期均線之上,只做 RSI 超賣回到區間的多頭訊號。這樣能大幅減少逆勢訊號的干擾。
//@version=6
indicator("RSI 超買超賣", overlay=false)
len = input.int(14, "RSI 週期")
h = input.int(70, "超買")
l = input.int(30, "超賣")
r = ta.rsi(close, len)
plot(r, "RSI", color=color.new(color.blue, 0))
hline(h, "超買", color=color.new(color.red, 0))
hline(l, "超賣", color=color.new(color.green, 0))
buyCond = ta.crossunder(r, l)
sellCond = ta.crossover(r, h)
plotshape(buyCond, title="買進", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, text="RSI<超賣")
plotshape(sellCond, title="賣出", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, text="RSI>超買")
alertcondition(buyCond, "RSI 進場", "RSI 跌破超賣線")
alertcondition(sellCond, "RSI 出場", "RSI 突破超買線")
把訊號做成「策略」並回測
當你把 indicator()
換成 strategy()
,世界就不同了:每一次觸發都會變成一筆模擬交易,策略測試器會告訴你勝率、最大回撤、利潤因子等指標。不要被短期高勝率迷惑,先看最大回撤是否在可承受範圍、是否只有少數幾筆貢獻大部分獲利,以及在不同商品/週期是否仍有一致性。
//@version=6
strategy("均線交叉策略(回測版)", overlay=true, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.05)
shortLen = input.int(10, "短期均線")
longLen = input.int(30, "長期均線")
shortMA = ta.sma(close, shortLen)
longMA = ta.sma(close, longLen)
longEntry = ta.crossover(shortMA, longMA)
longExit = ta.crossunder(shortMA, longMA)
if (longEntry)
strategy.entry("Long", strategy.long)
if (longExit)
strategy.close("Long")
// 可用於警報(在建立警報時選「任何 alert() 函數呼叫」)
if (longEntry)
alert("均線黃金交叉 - 建倉條件觸發", alert.freq_once_per_bar_close)
回測步驟:
- 新增到圖表 → 開啟「策略測試器」。
- 檢視「概要、績效、交易清單」。
- 點策略設定(齒輪)可調參數,或在屬性加入滑點、手續費。
- 觀察淨利、最大回撤、勝率、利潤因子等指標。
建立警報
把條件變成警報,代表你把「盯盤」外包給系統。建議警報訊息使用關鍵字+數值(如:「MA Cross 多|收盤價=…」),收到推播時才能一眼判斷是否要行動。對策略類腳本,選「任何 alert() 函數呼叫」通常最彈性。
- 指標腳本:用
alertcondition()
宣告條件 → 圖表上按「警報」→ 條件選你的指標與該條件 → 設通知方式與有效期限。 - 策略腳本:在程式中呼叫
alert()
;建立警報時條件選「任何 alert() 函數呼叫」,或勾選策略的「訂單執行」事件。
常見錯誤與排查
九成問題源自三件事:版本宣告錯、overlay 設置不當、沒把條件用 alertcondition/alert
暴露給警報面板。若回測數據離譜,先檢查是不是用了非標準圖表(如 Heikin Ashi/ Renko),再確認是否有合理的滑點與手續費設定。
- 新增到圖表沒反應:檢查第一行
//@version=6
與indicator()/strategy()
是否正確。 - 指標疊不上主圖:把
overlay
設為true
。 - 警報按鈕無法選到條件:確認已在程式內使用
alertcondition()
或alert()
,且腳本已加到圖表。 - 回測數據怪異:先用標準 K 線,不用 Heikin Ashi、Renko 等非標準圖表;並設定合理的滑點/手續費。
結論
先用內建與社群指標熟悉介面,再用以上範例改參數、看回測、設警報。目標是建立「可重複、可驗證、可提醒」的分析流程;等習慣後再把策略模組化,持續迭代優化。
延伸閱讀:TradingView 中文教學:功能總覽、版本差異、安裝指南與進階技巧
XQ全球贏家看盤自由度最高,重視量化交易者首選
籌碼K線使用教學與方案比較|專業版破解好用嗎?
三竹股市教學與功能介紹:新手必備看盤軟體操作指南