風險與交易計畫
如何依波動率調整倉位大小?用 ATR 算停損距離與下單數量
單筆風險固定在 1%,停損距離改用日線 ATR 決定,再反推下單數量。以 ETH 三個波動時期與 BTC、ETH、SOL 同日比較,完整示範 k 值選擇、費用扣除、數量取整與名義上限。
同樣把單筆風險定在帳戶的 1%,市場平靜時和劇烈波動時,下單數量應該一樣嗎?不應該。如果停損距離固定寫成 5%,波動大的那幾天停損會被日常震盪掃掉;波動小的時候又放得太遠。比較穩的做法是:先用波動率決定停損距離,再用停損距離反推數量。這篇用日線 ATR(平均真實波幅)一步步算,讀完你可以為任何一個交易對算出「今天該下多少」。

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 日線,每一列依序是開盤時間(毫秒)、開、高、低、收、成交量等欄位:

/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 日那列逐步驗算:
- 停損距離 = 2 × 85.86 = 171.73(ATR 原值 85.864,四捨五入後乘出的 171.72 有 0.01 誤差,以原值計算為準)。
- 停損價 = 2,726.94 − 171.73 = 2,555.21。
- 每單位費用 = 2,726.94 × 0.2% = 5.45;每單位最壞損失 = 171.73 + 5.45 = 177.18。
- 數量 = 100 ÷ 177.18 = 0.56439…,向下取到 0.0001 → 0.5643 ETH。
- 驗算: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)。
