看完 Pine Script 入門 會畫一條均線後,這篇給你三個最常用的實作範例:均線黃金交叉(含標記與警示)、RSI、KD。程式都用 v6 語法,複製貼進 TradingView 的 Pine 編輯器、按「新增到圖表」就能跑。
範例一:均線黃金交叉(標記 + 警示)
畫出快線與慢線,並在黃金交叉(快線由下往上穿過慢線)時標一個向上箭頭、死亡交叉標向下箭頭,最後加一個警示條件:
//@version=6 indicator("均線黃金交叉", overlay = true) fastLen = input.int(5, "快線天數") slowLen = input.int(20, "慢線天數") fast = ta.sma(close, fastLen) slow = ta.sma(close, slowLen) plot(fast, "快線", color = color.red, linewidth = 2) plot(slow, "慢線", color = color.blue, linewidth = 2) golden = ta.crossover(fast, slow) death = ta.crossunder(fast, slow) plotshape(golden, title = "黃金交叉", style = shape.triangleup, location = location.belowbar, color = color.red, size = size.small) plotshape(death, title = "死亡交叉", style = shape.triangledown, location = location.abovebar, color = color.green, size = size.small) alertcondition(golden, title = "黃金交叉", message = "出現黃金交叉!")
*台股紅漲綠跌,所以這裡黃金交叉用紅色、死亡交叉用綠色。
重點函式:ta.crossover(a, b) 在 a 由下往上穿過 b 時回傳 true;ta.crossunder 相反。plotshape 負責在圖上畫箭頭;alertcondition 建立一個警示條件——存檔後在圖表上按「鬧鐘」新增警示,就能在交叉時收到通知。
範例二:RSI(畫在副圖)
RSI 不是畫在 K 線上,而是獨立副圖,所以把 overlay 設成 false:
//@version=6 indicator("我的 RSI", overlay = false) length = input.int(14, "RSI 期數") rsi = ta.rsi(close, length) plot(rsi, "RSI", color = color.purple, linewidth = 2) hline(70, "超買", color = color.gray) hline(30, "超賣", color = color.gray)
*hline 畫水平參考線;一般 RSI > 70 視為超買、< 30 視為超賣(RSI 怎麼看)。
範例三:KD(隨機指標,副圖)
先用 ta.stoch 取得 RSV,再平滑成 K 與 D:
//@version=6 indicator("我的 KD", overlay = false) length = input.int(9, "RSV 期數") rsv = ta.stoch(close, high, low, length) k = ta.sma(rsv, 3) d = ta.sma(k, 3) plot(k, "K", color = color.blue, linewidth = 2) plot(d, "D", color = color.orange, linewidth = 2) hline(80, "超買", color = color.gray) hline(20, "超賣", color = color.gray)
上面用移動平均(ta.sma)平滑,是 TradingView 常見的「慢速 KD」。但台股券商的 KD 用的是「遞迴平滑」:K = 前一日 K × 2/3 + 當日 RSV × 1/3,D 同理。想完全復刻台股 KD,要用到「前一根數值
[1]」與 := 賦值(進階):
//@version=6 indicator("台股式 KD (9,3,3)", overlay = false) length = input.int(9, "RSV 期數") rsv = ta.stoch(close, high, low, length) var float k = na var float d = na k := na(k[1]) ? 50.0 : k[1] * 2 / 3 + rsv / 3 d := na(d[1]) ? 50.0 : d[1] * 2 / 3 + k / 3 plot(k, "K", color = color.blue, linewidth = 2) plot(d, "D", color = color.orange, linewidth = 2)這裡
k[1] 是「前一根的 K」、:= 是把新值賦回同一個變數、na(...)?...:... 是處理第一根還沒有前值的情況(給起始值 50)。
把範例改成自己的:3 個馬上能動手的地方
複製貼上只是第一步,真正學會是「改得動」。上面的程式碼,你可以先從這三個地方下手改,很快就有成就感:
1. 改天數、改參數。均線範例裡的 input.int(5, "快線天數")、input.int(20, "慢線天數"),就是均線的長短。把 5、20 換成你習慣的組合(例如 10 和 60),或直接在圖表的指標設定面板調——因為用了 input,這些數字會變成可以用滑鼠調整的欄位,不用每次改程式。
2. 改顏色、改線寬。color = color.red、linewidth = 2 決定線的樣子。台股習慣紅漲綠跌,但你想改成藍色、加粗線都可以。想換成其他顏色,把 color.red 改成 color.blue、color.orange 等即可。
3. 讓警示訊息帶上價格。範例的 alertcondition 訊息是固定字串。想讓通知順便告訴你當下價位,可以在觸發後用 alert() 搭配 str.tostring(close) 把收盤價串進訊息裡,手機收到通知就能直接看到價格,不用再開盤面確認。
改壞了也不用怕——Pine 編輯器會即時標紅告訴你哪一行有問題,對照上面的語法速查修回來就好。這種「改一點、跑一次、看結果」的循環,就是學程式最快的方式。
這些指標能畫出來,不代表能賺。KD、RSI、均線都有鈍化與假訊號的老問題,寫成 Pine Script 只是幫你自動標記、自動提醒,不會提高勝率。把它當「輔助判讀 + 少盯盤」的工具就好,別把交叉箭頭當成穩賺訊號。