技術分析 · Supertrend

Supertrend 是什麼?—
參數怎麼調、為什麼適合當自動下單訊號

2026-08-18·10 分鐘閱讀

你把 Supertrend 掛上 TradingView。線是綠的、多頭;線一翻紅、就是空頭。你把「翻色」設成 alert 條件,接上 webhook(TradingView 觸發時打出去的 HTTP 通知)打去 TVSBot 或任何一個執行端。第一次跑起來,你會遇到兩件事。

第一件:K 棒還沒收,訊號先跳一下就送出去了。第二件:同一根 K 棒後來又翻回去,等你反應過來部位已經反手了兩次,手續費先付了一輪。這不是 Supertrend 壞了,也不是你的策略邏輯錯——是它「當下就給你答案」的性格跟自動下單的節奏對不上。

先講結論
Supertrend 的翻轉訊號要跟 K 棒收盤綁在一起送。Pine Script(也就是 TradingView 內建的策略語言)的做法有兩種:alertcondition() 加上 UI 的「Once Per Bar Close」觸發模式、或者在條件裡加 barstate.isconfirmed。兩種都能擋掉 K 棒收盤前的閃爍。這是這篇最重要的一句話。

Supertrend 在算什麼——ATR 決定寬度,close 決定方向

Supertrend 的計算分兩層。第一層是基本帶:以每根 K 棒的中點 (high + low) / 2 為中線,往上往下各推 multiplier × ATR 得到上下軌。ATR 是 Average True Range,量的是這段時間的波動——ATR 大代表最近震得凶,帶就寬;ATR 小代表相對平靜,帶就窄。

第二層是趨勢鎖定:這條線畫出來的時候,是走上軌還是下軌,取決於當前是多頭還是空頭。空頭時畫上軌、上軌只能往下步進(如果新的一根 K 棒算出來上軌變寬,會保留原本較窄的那條);多頭時畫下軌、下軌只能往上步進。方向翻轉的觸發條件很單純:收盤價穿越當前那條線。close 從下軌上方跌破下軌,翻空;close 從上軌下方突破上軌,翻多。

這條規則的用處
「trailing」是這個機制的關鍵。它讓 Supertrend 在趨勢裡不會被雜訊搖回中線——一旦鎖定方向,只有實際反轉才會跳線。這也是為什麼很多人拿它當**動態止損**用:多頭時 Supertrend 的那條線就是你的止損位,跌破就出。

兩個參數:ATR 週期與 multiplier

Supertrend 就兩個旋鈕,其他都是這兩個推導出來的。

10
TradingView 內建 Supertrend 的 ATR 週期預設值
3
multiplier 預設倍數
-1 / +1
direction 值:多頭 / 空頭
參數在做什麼調大的效果調小的效果
ATR 週期算 ATR 的取樣長度(K 棒數)波動計算更平滑、反應變慢波動計算對近期更敏感、翻轉更頻繁
multiplier帶到中線的距離(幾倍 ATR)帶變寬、翻轉次數變少、容忍雜訊帶變窄、訊號變密、抓小波動

Supertrend 的兩個參數與它們各自影響哪一件事。(查證日期 2026 年 8 月)

TradingView 內建的 ta.supertrend(factor, atrPeriod) 預設是 ATR 週期 10、multiplier 3。TVSBot 的 Pine 範本頁也是同一組,這是這個組合在圈子裡的預設起點——不是「最好」,是「大家都從這裡開始」。你要偏保守就把 multiplier 拉到 4 或 5、要偏敏感就調到 2。

pine
//@version=5
        strategy("TVSBot SuperTrend", overlay=true)

        atrPeriod = input.int(10, "ATR 週期")
        factor    = input.float(3.0, "SuperTrend 倍數")

        [supertrend, direction] = ta.supertrend(factor, atrPeriod)

        longCondition  = ta.change(direction) < 0  // 從空翻多
        shortCondition = ta.change(direction) > 0  // 從多翻空

        if longCondition
            strategy.entry("Long",  strategy.long,  alert_message='{"side":"buy"}')
        if shortCondition
            strategy.entry("Short", strategy.short, alert_message='{"side":"sell"}')

這段是 TVSBot 官方 Pine 範本,來源 /docs/pine-templatesta.supertrend() 的第一個回傳是那條線的價位,第二個是方向:-1 是多頭、1 是空頭。用 ta.change(direction) < 0 就是「這一根從空翻多」。

為什麼它比 RSI/MACD 更適合當自動下單訊號

震盪類指標——RSI(相對強弱指數)、MACD(快慢均線差)——的訊號本質是連續數值:RSI 是 0 到 100 之間的數字、MACD histogram 是持續浮動的差值。你要拿它當自動下單訊號,得自己在上面拉一條線(RSI 低於 30 買、histogram 穿零軸買),而那條線在盤整區會被反覆穿越。

Supertrend 不一樣,它直接產出離散狀態——只有 updown 兩種,翻轉是一次明確的事件。沒有「差一點就翻」、也沒有「即將翻」。這對送 webhook 特別重要,因為 webhook 只知道「觸發」跟「沒觸發」,它沒辦法送出「快翻了」這種曖昧狀態。

RSI / MACDSupertrend
訊號本質連續數值離散方向
翻轉判定穿越自定閾值穿越當前 trailing band
止損位置需另外定義指標線本身
盤整區行為雜訊多、容易誤觸翻轉少但一翻就整段
適合作 webhook 條件要另加濾網翻轉就是條件

要講清楚的是:這不代表 Supertrend 一定「比較準」。它只是結構上跟自動下單的介面更合——你不用寫太多 wrapper 就能把它變成一個乾淨的訊號源。

但——K 棒收盤前的訊號會反覆

Pine Script 對「當前 K 棒」的計算方式是這樣的:每一個 tick(成交跳動)進來,它都會用「假設這根 K 棒現在就收在這個價位」的前提重新算一次。所以你在圖表上看 Supertrend 的當前那一段,其實一直在被覆寫。

這不是傳統定義的 repainting,但效果很像
過去的 K 棒不會被改(那才是嚴格定義的 repainting);但當前這根 K 棒的 direction 值,在它收盤之前每個 tick 都可能不同。你把 alert 設成「Once Per Bar」,會在條件第一次滿足時就觸發——即使那個滿足只維持了半秒。K 棒收盤那一刻真正的 direction 可能完全相反。

Pine 有兩個現成機制擋這件事。alertcondition() 在 TradingView UI 上可以選 Once Per Bar Close,這樣只有 K 棒收盤那一刻條件滿足才會觸發。barstate.isconfirmed 這個內建變數在 K 棒收盤那一刻才是 true,把它加進 if 條件裡就能過濾掉 intra-bar 的閃爍。

上面的範本是 strategy.entryalert()/alert 條件的路線,正常路徑是靠 alert 建立時的觸發設定。如果你另外用 alertcondition() 拉一條自訂條件出來,那就一定要選 close 那個選項——不然前面講的一切就白做了。

接進 webhook 前必查的四件事

下面五條裡任何一條沒過,你的 Supertrend 訊號都會在盤中反覆或跟你想像的不一樣。全部過了再上實盤。

1
Alert 觸發模式選了 Once Per Bar Close 嗎?
沒有先回去 alert 設定改。這是 0 號問題,其他都不用查。
往下一題。
2
Data Window 的 direction 在盤中會來回跳嗎?
正常。K 棒收盤前的訊號不作數,等收盤那筆再看。
不會你的 timeframe 可能對不上——確認圖表與 alert 掛在同一個週期上。
3
dry-run 跑幾天,訊號時間戳對得上圖表翻色的位置嗎?
對得上可以上實盤。
有偏差回去查前兩題,多數是 alert 觸發模式或 timeframe 沒對齊。
  • Alert 建立時,觸發模式選 Once Per Bar Close,不要選 Once Per Bar。後者在條件第一次成立時就觸發,K 棒收盤前反覆是常態。
  • 如果你自己寫 alertcondition(),或者 strategy 的進出場條件不想倚賴 UI 設定,就在條件裡加 and barstate.isconfirmed。這是 Pine 官方推薦的 intra-bar 過濾方式。
  • 用 TradingView 的 Data Window(右上角 {} 圖示 → Data Window)看 direction 這欄的值。在盤中盯一根 K 棒的實時變化,如果它會來回跳,你的 alert 就會照跳一次。
  • webhook payload 裡的 {{strategy.order.action}} 是 TradingView 在觸發那一刻的訂單方向。K 棒沒收盤前送出去的方向,跟收盤後不見得一樣——所以第一件事一定要做,不然這條 payload 就是騙自己。
  • 在 TVSBot 的 dashboard 開 dry-run(不實際下單、只跑執行流程)跑幾天,比對每一次 Supertrend 翻轉的圖表位置跟 dashboard 收到的訊號時間戳。有偏差就回去查前三條。

誠實的一段:Supertrend 不擅長的事

Supertrend 在單邊趨勢裡表現最好——鎖定方向後只吃順風。反過來,在盤整區它會被反覆打耳光:帶收得再寬,價格在中間震來震去終究會穿越某條線,然後翻回來、再翻過去。這不是參數沒調好,是這個指標的結構就會這樣。

它也只給你方向,不給你部位大小。從空翻多是 buy、從多翻空是 sell,但要 buy 多少、要不要加碼、什麼時候止盈,都是另一件事。TVSBot 的 payload 裡 margin_pcttp_pctsl_pct 這幾個欄位是 Supertrend 訊號之外你要自己決定的部分(webhook 自動交易的部位怎麼抓那篇拆得更細)。指標本身不知道你的帳戶大小,也不管你的風險胃納。

另一件實際使用者常忽略的事:Supertrend 的訊號是給那個時間週期的。你在 4H 圖上調好的參數,換到 15m 圖不能直接用。Multiplier 3 在 4H 是穩健,在 5m 上可能就是每兩小時一次翻轉。參數要跟你打算跑的 timeframe 一起調,不然你以為在跑一個保守策略,實際跑的是雜訊機。

常見問題

預設參數(ATR 10、multiplier 3)真的可以直接用嗎?
可以當起點,不要當終點。這組是 ta.supertrend() 常見的 demo 值、也是 TVSBot 範本的預設,但真正合不合適要看你的 timeframe 與標的的波動特性。用 TradingView 的 Strategy Tester 把 ATR 週期在 7 到 14、multiplier 在 2 到 5 之間各跑一輪回測,選出你能忍受最大回撤的那組。
為什麼線的顏色翻了,但 direction 值沒變?
幾乎都是 timeframe 對不上——你圖表放 15m、alert 掛在 1H;或者你正在看即時 K 棒,方向會來回變。用 Data Window 對 direction 那一欄可以直接看到當下的實際值。
Once Per Bar Close 會不會讓我進場慢一根?
會,但這是刻意的。K 棒收盤才確定「這根真的翻了」,收盤前的訊號可能撤回,那不是保守、是雜訊。歷史回測跟實盤要用同一個觸發模式,不然回測數字騙人。
Supertrend 可以跟其他指標搭配嗎?
可以,而且盤整區很需要。常見做法是加一個趨勢確認濾網——例如 200 EMA(見 均線完整教學)當方向、只做順向 Supertrend 翻轉——或加 volume 條件過濾掉低量翻轉。過濾器越多、訊號越少,這是取捨。
我用 Supertrend 送 webhook 給 TVSBot,可以在同一個 Pine 檔裡下多筆單嗎?
可以,但預設行為跟直覺相反:strategy()pyramiding 參數預設是 0,意思是「同方向只允許 1 筆進場,之後的同方向 strategy.entry() 會被 rejected」。想真的加碼得在 strategy(...) 宣告裡顯式寫 pyramiding=2(或更大)。想開多個獨立部位就用 TVSBot 的 strategy 欄位在 payload 裡區分策略、或每個部位跑獨立的 Pine 檔。這件事跟 Supertrend 無關,跟 Pine 部位大小處理那類坑有關。

Get started

想把今天學到的東西自動化跑起來?

把 Supertrend 的翻轉訊號接進交易所——TVSBot 用你自己的 API key、支援 dry-run、風控自己設。7 家交易所都能打。

免費開始使用