風險與交易計畫

如何依波動率調整倉位大小?用 ATR 算停損距離與下單數量

單筆風險固定在 1%,停損距離改用日線 ATR 決定,再反推下單數量。以 ETH 三個波動時期與 BTC、ETH、SOL 同日比較,完整示範 k 值選擇、費用扣除、數量取整與名義上限。

如何依波動率調整倉位大小?用 ATR 算停損距離與下單數量

同樣把單筆風險定在帳戶的 1%,市場平靜時和劇烈波動時,下單數量應該一樣嗎?不應該。如果停損距離固定寫成 5%,波動大的那幾天停損會被日常震盪掃掉;波動小的時候又放得太遠。比較穩的做法是:先用波動率決定停損距離,再用停損距離反推數量。這篇用日線 ATR(平均真實波幅)一步步算,讀完你可以為任何一個交易對算出「今天該下多少」。

BTC、ETH、SOL 三條日線 ATR 佔收盤價百分比曲線,2025 年 10 月至 2026 年 10 月;ETH 在 2026-02-05 高點 10.55%、2026-08-18 低點 2.41%、2026-10-04 為 3.15%

BTC、ETH、SOL 的日線 ATR(14) 除以收盤價。同一個幣,一年內高低可差 4 倍以上;本文算例用的就是圖上標出的三個 ETH 日期。

固定百分比停損在不同波動期會出什麼問題

先看 ETH 兩個日子的真實數據(Binance 現貨日 K 線,UTC 收盤):

日期 收盤價 ATR(14) ATR/價格 5% 停損等於幾個 ATR
2026-02-05 1,826.83 192.65 10.55% 0.47
2026-08-18 1,917.85 46.24 2.41% 2.07

2 月 5 日那段時間,ETH 平均一天的真實波幅就超過 10%,5% 停損還不到半天的正常擺動,被掃到幾乎只是時間問題。8 月 18 日則相反,5% 等於兩個多 ATR。同一個百分比,在不同時期代表完全不同的「離噪音有多遠」,這就是改用波動率衡量停損的理由。

ATR 是什麼、怎麼算

ATR 先算每天的真實波幅 TR,取三者最大值:

  • 當日最高 − 當日最低
  • |當日最高 − 前一日收盤|
  • |當日最低 − 前一日收盤|

後兩項是為了把跳空算進去。再用 Wilder 平滑求 14 日平均:第一個 ATR 是前 14 個 TR 的簡單平均,之後每天 ATR今日 = (ATR昨日 × 13 + TR今日) ÷ 14。多數看盤軟體的 ATR 指標預設就是這個算法,參數 14。

資料可以從看盤軟體讀,也可以自己抓。下圖是 Binance 公開的現貨 K 線介面回傳的 ETHUSDT 日線,每一列依序是開盤時間(毫秒)、開、高、低、收、成交量等欄位:

data-api.binance.vision 的 ETHUSDT 日 K 線 JSON 回傳,共 8 列,倒數第二列開盤時間 1791072000000、收盤 2726.94,最後一列為尚未收完的當日 K 線

/api/v3/klines?symbol=ETHUSDT&interval=1d 的原始回傳。倒數第二列是 2026-10-04(UTC)收盤 2,726.94;最後一列是 10-05 還沒收完的 K 線,算 ATR 時要排除。

注意最後一列:介面會把當天還沒收完的 K 線一起回傳。把它算進 ATR,數字會隨盤中跳動,下單數量也會跟著變。只用已收盤的 K 線。

公式:從 ATR 到下單數量

停損距離 = k × ATR
每單位最壞損失 = 停損距離 + 進場價 × 來回費用率
數量 = 風險金額 ÷ 每單位最壞損失(再向下取整到數量步進)
  • 風險金額:帳戶淨值 × 單筆風險比例,例如 10,000 USDT × 1% = 100 USDT。
  • k:停損放在幾個 ATR 之外,下一節用數據選。
  • 來回費用率:開倉加平倉的費用。本文假設兩邊都用吃單、各 0.1%,合計 0.2%;你的實際費率以交易平台費率頁和帳戶等級為準。
  • 停損是用市價觸發時還會有滑價,這部分在 停損單為什麼沒成交?跳空、滑價與流動性排查 有專門處理,這裡不重複。

如果你已經熟悉「停損距離 → 數量」的換算與數量步進,可以對照 倉位大小怎麼算?從停損距離、費用到下單數量;本文只多做一件事:讓停損距離跟著波動率走。

k 該取多少:用歷史數據看停損多常被日內波動碰到

我們用 2025-09 至 2026-10 共 385 個交易日統計:以前一天收盤時的 ATR 為準,當天「開盤到最低點」的跌幅超過 k 個 ATR 的天數比例(也就是假設開盤做多、停損放在 k 個 ATR 下方,當天就被碰到的頻率):

k BTC ETH SOL
1 12.2% 11.9% 11.7%
1.5 3.9% 3.4% 3.1%
2 2.3% 2.3% 1.3%
3 0.8% 0.5% 0.5%

讀法:k = 1 時,大約每 8~9 天就有一天光是日內擺動就會碰到停損;k = 2 降到約 2%。k 越大停損越少被雜訊打到,但數量也越小。本文算例取 k = 2。

這張表只回答「單日內被碰到的頻率」,不代表持倉多天的結果,也不是勝率。你的策略若持倉一週,停損應該對應更長週期的波動,可以改用週線 ATR,或把 k 放大後再驗算。停損最終要放在交易想法失效的位置,ATR 只是檢查這個位置有沒有離噪音太近。

完整算例:同一個 ETH,三個時期下多少

條件:帳戶 10,000 USDT,單筆風險 1% = 100 USDT,k = 2,來回費用 0.2%,於日線收盤價買進現貨 ETH,ETHUSDT 數量步進 0.0001。

日期 收盤價 ATR 停損距離(2 ATR) 停損價 每單位最壞損失 數量 名義金額
2026-02-05 1,826.83 192.65 385.30(21.09%) 1,441.53 388.95 0.2571 469.68
2026-08-18 1,917.85 46.24 92.48(4.82%) 1,825.37 96.32 1.0382 1,991.11
2026-10-04 2,726.94 85.86 171.73(6.30%) 2,555.21 177.18 0.5643 1,538.81

以 10 月 4 日那列逐步驗算:

  1. 停損距離 = 2 × 85.86 = 171.73(ATR 原值 85.864,四捨五入後乘出的 171.72 有 0.01 誤差,以原值計算為準)。
  2. 停損價 = 2,726.94 − 171.73 = 2,555.21。
  3. 每單位費用 = 2,726.94 × 0.2% = 5.45;每單位最壞損失 = 171.73 + 5.45 = 177.18。
  4. 數量 = 100 ÷ 177.18 = 0.56439…,向下取到 0.0001 → 0.5643 ETH。
  5. 驗算:0.5643 × 177.18 = 99.98 USDT,沒有超過 100。

三列放在一起看:2 月和 8 月的價格差不多,數量卻差了 4 倍(0.2571 對 1.0382),而三列在停損觸發時的損失都在 100 USDT 左右。風險固定、數量浮動,就是依波動率調整倉位的全部意思。

不同幣種也能用同一把尺

10 月 4 日同樣用 100 USDT 風險、k = 2:

交易對 收盤價 ATR/價格 停損距離 數量 名義金額
BTCUSDT 86,530 2.54% 4,391.24 0.02190 BTC 1,895.01
ETHUSDT 2,726.94 3.15% 171.73 0.5643 ETH 1,538.81
SOLUSDT 121.60 3.97% 9.65 10.107 SOL 1,229.01

SOL 波動最大,所以名義金額最小。如果三筆同時做多,它們的漲跌高度相關,停損可能一起被觸發,總風險不是 100,而是接近 300——怎麼合併計算見 多個相關倉位的總風險怎麼算?。

什麼時候重算,什麼時候不要動

  • 進場前算一次:用最近一根已收盤 K 線的 ATR,算出停損價和數量後就照單執行。
  • 持倉中不要因為 ATR 變了就加減倉:ATR 上升不代表要把停損拉遠、更不代表要加倉;已開的倉位風險在進場時就鎖定了。
  • 加倉時重算:新加的那一筆用當下的 ATR 單獨算,再確認合計風險沒有超過上限。
  • 波動很低時設名義上限:8 月那列名義金額接近帳戶的 20%;若 ATR 再降一半,數量會翻倍。建議事先寫下一條上限(例如單筆名義金額不超過帳戶的某個比例),算出來超過就以上限為準。這個比例沒有通用標準,要依你的帳戶與能承受的跳空損失自訂。
  • 合約倉位:上面算出的是數量,槓桿只影響要放多少保證金,不應該反過來放大數量;並且停損價必須離強平價夠遠。用槓桿前可以先用 槓桿倉位壓力測試 的情境表檢查一次。

也可以用實現波動率,但別混用

另一種做法是用近 20 日收盤報酬率的標準差(日實現波動率)代替 ATR。以 10 月 4 日的 ETH 為例,20 日日波動率是 2.31%,同日 ATR/價格是 3.15%。兩者量的東西不同:標準差只看收盤到收盤,ATR 還包含日內高低與跳空,所以 ATR 通常比較大。選一種用到底,k 也要配合重新驗算,不要把用 ATR 測出的 k 直接套在標準差上。

常見錯誤與處理方式

錯誤 後果 處理
把盤中未收完的 K 線算進 ATR 數量隨盤中跳動,無法重現 只用最後一根已收盤 K 線
ATR 變大後把停損拉遠但數量不變 單筆風險悄悄放大 停損距離一變,數量必須重算
波動低時數量無上限 一次跳空可能遠超計畫損失 加名義金額上限
用 1 小時 ATR 算持有一週的單 停損太近,頻繁被掃 ATR 週期要對應持倉時間
忘了扣費用 實際損失略高於風險預算 每單位損失加上來回費用
多個相關倉位各自 1% 同時觸發時總虧損數倍 合併計算總風險

風險邊界

  • ATR 描述的是過去的平均波幅,不能預測下一根 K 線;極端行情(例如 2 月初那段)單日跌幅可以超過 3 個 ATR,上表裡就有這樣的日子。
  • 停損單觸發後的成交價不保證等於停損價,跳空和流動性不足時實際損失會超過計畫。
  • ATR 很高時,算出的停損可能遠到 20% 以上(2 月 5 日那列)。這時候更合理的選擇常常是降低單筆風險比例或乾脆不交易,而不是照公式硬做。
  • 本文所有數字是歷史數據的計算示範,不構成任何買賣建議。

完成檢查表

  • 寫下帳戶淨值與單筆風險比例,算出風險金額
  • 取最近一根已收盤 K 線的 ATR(14),確認週期與持倉時間相符
  • 選定 k,並確認停損價落在交易想法失效的位置附近
  • 每單位最壞損失 = k × ATR + 進場價 × 來回費用率
  • 數量 = 風險金額 ÷ 每單位最壞損失,向下取整到數量步進
  • 驗算:數量 × 每單位最壞損失 ≤ 風險金額
  • 名義金額沒有超過自己設的上限;合約倉位的停損早於強平價
  • 若同時持有相關倉位,合計風險仍在上限內

想把目標價一起規劃,可以接著看 交易風險報酬比怎麼算?,用同一個停損距離算出合理的目標位置。

資料來源

  • K 線數據:Binance 公開現貨行情介面 https://data-api.binance.vision/api/v3/klines?symbol=ETHUSDT&interval=1d(BTCUSDT、SOLUSDT 同),取數區間 2025-08-31 至 2026-10-04 UTC,ATR 與表中比例均由此自行計算。
  • 數量步進:同介面 /api/v3/exchangeInfo?symbol=ETHUSDT 的 LOT_SIZE(stepSize 0.0001)。