ATR
一句话:ATR(Average True Range)是「一根 K 线平均能波动多大」的滚动平均 —— 它只回答幅度,不回答方向。
用在哪里:第4层 波动率与止损 —— 止损距离 = 1.5~3 × 日线ATR(交易目录说明 四条硬规则第 1 条);它也直接决定你这笔能买多少。
本文数据快照:2026-09-19(北京时间日线收盘后),OKX 公开 API,已收盘 K 线 1D×3266(2017-10-11 ~ 2026-09-19)、4H×6599、1H×3899。现价 2,271(2.78%)**,4H ATR14 = $892(1.09%)。换个时点跑数字会变,看法不变。
一、它解决什么问题:让止损距离跟着市场的呼吸走
新手定止损最自然的方式是「拍一个数」:3%、5%。问题是波动率是变化的 ——
同一个「3%」,在平静期是 1.4 个 ATR(够远),在动荡期只有 0.6 个 ATR(必被扫)。止损不是被趋势打败的,是被波动率打败的。
ATR 的作用就是把「3%」换成「1.5 个 ATR」:距离随市场自动放大缩小,而止损的含义(被随机波动扫掉的概率)保持恒定。
二、怎么算:三步,没有玄学
① 先算真实波幅 TR(True Range)—— 取三个数的最大值:
TR = max( 当天最高 − 当天最低 ,
|当天最高 − 昨天收盘| ,
|当天最低 − 昨天收盘| )
后两项是为跳空准备的:如果今天开盘直接跳到昨天收盘之外,光用「最高−最低」会低估真实波动。
② 再取 14 根的平均:ATR(14) = 最近 14 个 TR 的简单平均(SMA14,本项目口径)。
最近 14 根日线的真实数字(atr_study.py A 段,节选最后 4 根):
| 日期 | 高 | 低 | 前收 | H−L | |H−前收| | |L−前收| | TR |
|---|---|---|---|---|---|---|---|
| 2026-09-16 | 77,349 | 74,956 | 76,506 | 2,393 | 843 | 1,550 | 2,393 |
| 2026-09-17 | 77,167 | 75,055 | 75,789 | 2,112 | 1,378 | 734 | 2,112 |
| 2026-09-18 | 81,155 | 76,258 | 76,780 | 4,897 | 4,375 | 522 | 4,897 |
| 2026-09-19 | 81,953 | 80,569 | 80,729 | 1,384 | 1,224 | 160 | 1,384 |
看第 3 行:09-18 那天 H−L 是 4,897,而 |H−前收| 是 4,375 —— 这天是从下往上爆拉(开 76,780 → 高 81,155),TR 取 4,897。
ATR 里混着这种「一天走完平时两天路」的日子 —— 所以它不是「平均振幅」,而是「平均最坏情况」。
③ 口径可以不同,但必须固定:同一份数据,SMA14 与 Wilder(EMA)14 的中位差 +2.55%,极端时刻能差 −33% ~ +66%(波动突变时 Wilder 反应更慢,因为它记住更久的历史)。
| 口径 | 当前值 |
|---|---|
| SMA14(本项目) | $2,271 |
| Wilder14 | $2,358(+3.84%) |
两个数字都「对」。但混着用会让止损距离差几个百分点 —— 所以判断卡、
daily_card.py、本卡全部用 SMA14。
三、ATR 自己也在变(固定百分比止损为什么失效)
近 300 天与全样本的日线 ATR%(每个数都是「那一天的 ATR ÷ 那一天的收盘价」,不是拿今天的 ATR 去除历史价格):
| P5 | P25 | 中位 | P75 | P95 | 最小 | 最大 | |
|---|---|---|---|---|---|---|---|
| 近 300 天 | 2.16% | 2.59% | 3.26% | 4.02% | 4.99% | 1.41% | 7.40% |
| 全样本(3246 天) | 2.23% | 3.17% | 4.20% | 5.63% | 10.11% | 1.20% | 18.97% |
把倍数折算成百分比距离(近 300 天):
| 止损口径 | P5 | 中位 | P95 | 最小 | 最大 |
|---|---|---|---|---|---|
| 1.5×日线ATR | 3.23% | 4.89% | 7.49% | 2.12% | 11.10% |
| 3.0×日线ATR | 6.47% | 9.78% | 14.98% | — | — |
同一个「1.5×ATR」,从 2.1% 到 11.1% 都出现过(差 5.2 倍)。 这就是为什么硬规则写的是「1.5 ×日线ATR」,而不是「止损 5%」。
参考:1.5×日线ATR 落在 4~8% 这个「甜点区」的时间占 近 300 天 67.3% / 全样本 57.5%(中位 4.89% / 6.29%)—— 剩下四成时间它在甜点区之外,该跟着变的是仓位,不是止损。
四、【核心】同一套规则,换成 ATR 再看被扫概率
规则:入场 = 任意一根日线收盘,止损 = 入场 − X,之后 N 根日线的最低价 ≤ 止损就算被扫。没有方向过滤,测的纯粹是「距离够不够」。样本 3246 根日线(2017-10 ~ 2026-09):
| 止损口径 | 样本 | 3 天内被扫 | 10 天内被扫 |
|---|---|---|---|
| 0.5×ATR | 3153 | 60.0% | 77.6% |
| 1.0×ATR | 3153 | 32.4% | 57.1% |
| 1.5×ATR | 3153 | 16.9% | 39.6% |
| 2.0×ATR | 3153 | 8.8% | 28.5% |
| 3.0×ATR | 3153 | 3.8% | 14.5% |
| 固定 2% | 3153 | 62.1% | 78.4% |
| 固定 3% | 3153 | 47.8% | 68.9% |
| 固定 5% | 3153 | 27.2% | 52.3% |
| 固定 8% | 3153 | 12.8% | 32.4% |
读法(两个方向都要看):
- 从 0.5×ATR 到 3×ATR,被扫概率从 60% 掉到 3.8% —— 止损距离的每一档都真实地换来生存率。
- 但固定百分比也能「打折实现」同样的效果:固定 8%(12.8%)比 1.5×ATR(16.9%)看起来更不容易被扫。这不是固定百分比更好,而是它换了个更远的距离而已 —— 而 8% 在低波动期(ATR% 2.16%)相当于 3.7 个 ATR,仓位会被压到几乎没意义(见第六节 ⑤)。
ATR 的价值不在「更不容易被扫」,而在「被扫概率不随行情波动漂移」。
五、被扫之后又涨回去:「假扫」占比
同一批被扫的样本,再往后 10 天内最高价 ≥ 入场价,就算「假扫」:
| 止损口径 | 3 天内被扫 | 其中假扫占比 |
|---|---|---|
| 0.5×ATR | 60.0% | 78.5% |
| 1.0×ATR | 32.4% | 63.2% |
| 1.5×ATR | 16.9% | 48.7% |
| 2.0×ATR | 8.8% | 37.8% |
| 3.0×ATR | 3.8% | 23.3% |
止损越近,扫掉之后价格又走对的比例越高 —— 0.5×ATR 的止损有 78.5% 是假扫。这不是说止损该无限放远(放远 → 仓位变小 → 风险金额虽不变但 2R 的绝对收益也砍半),而是说:止损近 = 你在为随机波动交学费。
六、五个最容易误解的地方(都有反向数据)
① 用未收盘 K 线算 ATR,会低估约 47%
用 1H 数据把每个日线拆成 24 段,只用前 12 小时算 TR,与全天对比(162 个完整日线,2026-04-11 ~ 09-19):
| P25 | 中位 | P75 | |
|---|---|---|---|
| 半天 TR ÷ 全天 TR | 0.52 | 0.67 | 0.86 |
- 单根 K 线:全天区间的中位完成度只有 67%(最差的一天只完成了 11%)
- 按「最近 14 天」的平均口径:半天 ATR 2,271 → 低估 47%
含义:盘中看到 ATR 就下单,你用的止损距离偏小;收盘后重算,距离会突然变大。daily_card.py 因此固定剔除最后一根未收盘 K 线(confirm == "0")。
② ATR 只管幅度,完全不含方向
按当日 ATR% 把交易日分成三组,看次日:
| 组 | 当日 ATR% 中位 | 次日平均|涨跌| | 次日上涨占比 | 次日日均涨跌 |
|---|---|---|---|---|
| 低 1/3 | 2.78% | 1.51% | 51.9% | +0.125% |
| 中 1/3 | 4.14% | 2.01% | 52.7% | +0.109% |
| 高 1/3 | 6.30% | 2.98% | 52.1% | +0.107% |
高波动组的幅度几乎翻倍(1.51% → 2.98%),但上涨占比与日均涨跌几乎不动。
(52% 这个绝对值是样本本身的基础概率 —— BTC 这九年整体偏多头;要看的不是 52%,而是三组之间没有差别。)
ATR 大的时候,市场只是走得更远,不是更可能上涨。 把「ATR 放大」当买入理由是错的 —— 这正是 2026-09-19 判断卡 里那句「真空带里价格跑得快,不等于现在是入场点」。
③ ATR 是「过去 14 天的平均」,波动率突变时它慢半拍
21 天窗口下日线 ATR 的变化率:
| P5 | 中位 | P95 | 最大 | 最小 |
|---|---|---|---|---|
| −44.3% | −3.9% | +127.9% | +379.4% | −68.3% |
- ATR 21 天翻倍以上(+128%)发生在 P95;最极端的一次 21 天涨了 379%
- 从低分位(≤P25 2,853):中位 39 天,样本只有 3 次(最短 25 天)—— 小样本,不要当规律
含义:波动率刚放大时 ATR 还没跟上,此时 1.5×ATR 是偏小的。ATR 只会慢慢变大,不会提前预告。
④ 两张「被扫概率表」看起来矛盾,其实是样本期不同
同一套规则、同一个 3% 止损,只换样本窗口:
| 样本 | 3% 止损 3 天内被扫 | 该期日线 ATR% 中位 |
|---|---|---|
| 全样本(3246 天) | 47.7% | 4.20% |
| 近 1000 天 | 41.0% | 3.42% |
| 近 300 天 | 39.7% | 3.26% |
同一口径往前几天跑,就是此前记录里的 40.5% —— 同一件事。
同一句「止损 3% 有 40% 概率被扫」,在高波动期是错的:全样本是 47.7%。 引用被扫概率时必须写明样本期 —— 这就是 ATR 存在的理由。
⑤ 止损放太远,仓位会被压到没意义(真金白银)
按单笔风险 15 USDT(300 USDT 账户的 5%)、现价 $81,647:
| 止损口径 | 止损距离 | 名义仓位 | 账户杠杆 | 5x 下 杠杆×止损 |
|---|---|---|---|---|
| 4H ATR ×1.5(日内) | $1,338(1.64%) | $916 | 3.05x | 8.2% ✅ |
| 日线 ATR ×1.5(波段) | $3,406(4.17%) | $360 | 1.20x | 20.9% ✅ |
| 日线 ATR ×3 | $6,812(8.34%) | $180 | 0.60x | 41.7% ✅ |
止损距离翻一倍,仓位就砍一半 —— 风险金额不变,但赚到 2R 的绝对收益也砍一半。所以硬规则写的是「1.5~3×ATR」,不是「越远越好」。
七、用哪个周期的 ATR:跟持仓时长走
一天有 6 根 4H,波动按时间的平方根累积 → 日线 ATR 应该 ≈ 4H ATR × √6 = 2.449。实测(6586 根 4H,约 3 年):
| 口径 | 值 |
|---|---|
| 日线 ATR ÷ 4H ATR(中位) | 2.61 |
| 理论值 √6 | 2.449(差 +6.5%) |
| 当前实测 | 892 = 2.55 |
| 持仓时长 | 用哪个 ATR | 当前对应止损(×1.5) |
|---|---|---|
| 几小时(日内) | 4H ATR | 约 1.6% |
| 1~3 天(波段,本项目) | 日线 ATR | 约 4.2% |
| 一周以上 | 日线 ATR(×3~4) | 8%+ |
最常见的错误:用 4H ATR 算出 1.6% 的止损,却准备持仓两三天。两天 ≈ 1.6% × √8 ≈ 4.5%,1.6% 覆盖不了持仓期的正常波动 —— 结果是被随机波动扫掉,而不是被趋势打败。
八、记忆口诀
ATR = 平均「最坏情况」,不是平均振幅(跳空那天它取 |H−前收|) 它量的是幅度,不是方向 —— ATR 翻倍 ≠ 要涨 固定百分比会骗你,ATR 不骗你:波动率变,距离跟着变 止损距离 ÷ 仓位 = 反比:放远一倍,买少一半 ATR 只记得昨天以前的 14 天,突变时它慢半拍
九、自己复现
python3 ~/trading/scripts/atr_study.py # A~J 十段全部统计(用缓存,约 2 秒)
python3 ~/trading/scripts/atr_study.py --refresh # 重新拉 1D/4H/1H
python3 ~/trading/scripts/daily_card.py # 第4层就是当前 ATR 与合规止损区间
python3 ~/trading/scripts/position_calc.py --entry 81647 --stop 78241 --target 88459 --atr 2271 --fee 0.07
# ↑ 复现第六节⑤ 第一行:止损 1.50×ATR($3,406 / 4.17%)→ 名义仓位 $359.57 / 账户 1.20 倍 / 杠杆×止损 20.9%各段口径写在脚本输出里;样本量不足的地方(第六节 ③ 的 3 次)已在正文标注。
十、相关
- 交易目录说明 —— 四条硬规则第 1 条「止损 ≥1.5×日线ATR」的出处
- 10-交易/知识卡/回调后站回 —— 触发成立之后,为什么还要用 ATR 检查止损够不够远
- 10-交易/方法/第5层_触发与RR —— 门槛
T ≥ S + 4.5×ATR就是「止损 ≥1.5×ATR」与「RR≥2」联立的结果 - 10-交易/判断卡/2026-09-19 —— 实例:3.54×ATR 偏出上限、合规区间 6,623 的算法