技術分析 · 波動率 / 風控

ATR 完整教學
用波動率動態調整部位

2026-06-03·10 分鐘閱讀·風控核心

ATR(Average True Range,平均真實波幅)是 J. Welles Wilder 1978 年在《New Concepts in Technical Trading Systems》 發明的指標(他同年還發明了 RSI)。

這指標不告訴你買賣方向, 只告訴你「市場目前有多波動」。 但 ATR 是真正高手用的風控核心 — 1983 年的海龜交易系統、Bill Dunn 的 DUNN Capital 40 年複合年化 19%、 幾乎所有 CTA 都用 ATR 做部位管理。

1. 什麼是 ATR?背後的數學

先講「True Range(真實波幅)」 — 一根 K 棒的波動 = 三個值取最大:

text
TR = max(
  high − low,                  // 當根 K 的高低差
  abs(high − close_prev),      // 高點到前一根收盤的差
  abs(low − close_prev)        // 低點到前一根收盤的差
)

為什麼要考慮前一根收盤?因為跳空 gap — 當前 K 棒可能 high=100、low=98,看似波動小, 但前一根收盤是 105 → 實際波動 7(從 105 到 98)。

ATR 就是過去 N 根 K 的 TR 平均(N 預設 14):

text
ATR(14) = 過去 14 根 True Range 的「平滑移動平均」(RMA)
ATR 的單位是價格本身
ATR 不是 % 而是絕對價格。 BTC 在 $60k 時 ATR 可能 $1,500、ETH 在 $3k 時 ATR 可能 $80。 意思是「平均每根 K 棒波動 $1,500」。 這個性質是 ATR 做風控的關鍵 — 把波動率「翻譯」成具體的金額。

2. 用法 ①:動態停損(最常見)

固定停損的問題:用 1% 停損,BTC 高波動時容易被洗、低波動時又太鬆。 ATR 停損自動調整:

pine
//@version=5
strategy("ATR 動態停損", overlay=true)

atrLength = input.int(14, "ATR 週期")
atrMult = input.float(2.0, "停損 ATR 倍數")

atr = ta.atr(atrLength)

// 進場(隨便用 EMA 交叉做示範)
ema9 = ta.ema(close, 9)
ema21 = ta.ema(close, 21)
if (ta.crossover(ema9, ema21))
    strategy.entry("Long", strategy.long)
if (ta.crossunder(ema9, ema21))
    strategy.entry("Short", strategy.short)

// === 動態停損 ===
longStop = strategy.position_avg_price - atr * atrMult
shortStop = strategy.position_avg_price + atr * atrMult

strategy.exit("LongExit", "Long", stop=longStop)
strategy.exit("ShortExit", "Short", stop=shortStop)

plot(atr, "ATR", color=color.purple, display=display.pane)

常見 ATR 倍數:

  • 1.5x:緊停損,適合震盪盤、scalp
  • 2x:標準(海龜用的就是這個)
  • 3x:寬停損,適合波段、給趨勢空間
  • 4-5x:超寬停損,適合超長線

3. 用法 ②:海龜部位法(最值得學的)

這是 1983 年海龜交易系統的核心。詳見 CTA 趨勢追蹤 + 海龜交易

原理:每筆交易的「風險金額」永遠是帳戶 1%。 用 ATR 算出停損距離,反推部位大小。

text
風險金額 = 帳戶資金 × 1%
停損距離 = ATR × 2
部位大小(口數)= 風險金額 / 停損距離

範例:
  帳戶 $10,000
  ATR = $500

  風險金額 = $100
  停損距離 = $1,000
  部位大小 = $100 / $1,000 = 0.1 BTC
為什麼這方法是革命性
1983 年大多數人用「固定股數」或「固定金額」下單。 海龜首創用 ATR 動態調整 —波動大的市場部位自動小,波動小的市場部位自動大。 這讓不同市場、不同時期的「期望虧損」保持一致。 這是 1983 年的 paradigm shift。
pine
//@version=5
strategy("海龜部位法", overlay=true,
  initial_capital=10000, default_qty_type=strategy.fixed)

atrLength = input.int(20, "ATR 週期(海龜原版用 20)")
riskPct = input.float(1.0, "每筆風險 %")
atrMult = input.float(2.0, "停損 ATR 倍數")

atr = ta.atr(atrLength)

// 部位大小 = 風險金額 / 停損距離
riskAmount = strategy.equity * riskPct / 100
stopDistance = atr * atrMult
positionQty = riskAmount / stopDistance

// 進場
if (ta.crossover(close, ta.highest(high, 20)[1]))
    strategy.entry("Long", strategy.long, qty=positionQty)
if (ta.crossunder(close, ta.lowest(low, 20)[1]))
    strategy.entry("Short", strategy.short, qty=positionQty)

// 動態停損
strategy.exit("LongStop", "Long",
  stop=strategy.position_avg_price - atr * atrMult)
strategy.exit("ShortStop", "Short",
  stop=strategy.position_avg_price + atr * atrMult)

plot(atr, "ATR", color=color.purple)

4. 用法 ③:突破過濾(避免假突破)

很多突破策略會被「假突破」騙 — 價格剛剛突破前高,沒等回頭就回落。

解法:要求突破幅度大於 ATR × N,才算真突破:

pine
//@version=5
strategy("ATR 過濾突破", overlay=true)

prevHigh = ta.highest(high, 20)[1]
atr = ta.atr(14)
breakoutFilter = atr * 0.5  // 至少要突破 ATR 的 50%

// 真突破:close 比前高高 ≥ 0.5 ATR
trueBreakout = close > prevHigh + breakoutFilter

if (trueBreakout)
    strategy.entry("Long", strategy.long)

5. 用法 ④:趨勢強度判斷

ATR 上升 = 市場波動增加 = 通常有強趨勢或重大事件。ATR 下降 = 市場安靜 = 震盪或盤整。

可以用 ATR 跟它自己的長期平均比較:

pine
atr = ta.atr(14)
atrMa = ta.sma(atr, 50)

highVol = atr > atrMa * 1.5    // 波動率比平均高 50%
lowVol = atr < atrMa * 0.6     // 波動率比平均低 40%

// 高波動率時跑趨勢策略
// 低波動率時跑網格 / 均值回歸
bgcolor(highVol ? color.new(color.red, 90) : na, title="高波動")
bgcolor(lowVol ? color.new(color.blue, 90) : na, title="低波動")
實戰策略切換
進階用法:用 ATR 自動切換策略 — 高波動跑趨勢策略、 低波動跑網格 / 均值回歸。讓你的系統適應市場狀態。 詳見 網格交易教學 的「進階:網格 + 趨勢過濾」段。

6. ATR 跟其他波動率指標的差別

指標特性適用
ATR絕對價格波動,含 gap部位管理、動態停損
標準差(σ)統計波動,假設常態分布Bollinger Bands 等通道
歷史波動率 HV年化 σ,跨資產可比選擇權定價
隱含波動率 IV市場預期未來波動選擇權策略

7. 常見錯誤

❌ ATR 不是訊號

有人把「ATR 變大 → 做多」「ATR 變小 → 做空」當策略。 錯。ATR 只是波動率,沒有方向意義。 要配合趨勢或進出場規則。

❌ 把 ATR 當 %

ATR 是絕對價格,不是百分比。 BTC 在 $30k 時 ATR=$500 對應 1.67%, BTC 在 $60k 時 ATR=$500 對應 0.83%。 跨時間框架比較要正規化。

❌ 週期設太短

有人改 ATR 週期成 5 想「更敏感」。 結果 ATR 跟著最近 1-2 根極端 K 大幅震盪,停損點亂跳。 堅持用預設 14 或 20。

❌ 全部資產用同一 ATR 倍數

BTC 跟山寨幣的特性不同。建議:

  • BTC:ATR × 2-3
  • ETH / 大型山寨:ATR × 2-2.5
  • 小型山寨:ATR × 3-4(噪音大需更寬)

Get started

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

想直接把 ATR 風控嵌入策略?TVSBot 接 Pine 訊號到交易所,自動下單時可以動態算部位。

免費註冊 TVSBot

8. 三個關鍵 takeaway

  1. ATR 是「翻譯機」:把抽象波動率翻成具體金額, 讓你做部位、停損、風險控制
  2. 海龜部位法是 1983 年的革命性概念: 每筆 1% 風險、ATR 動態調整 — 至今仍是業界標準
  3. ATR 沒有方向,不要拿來當訊號。 它的價值在讓你的策略適應市場狀態