Q1. ATR 是什么?

Average True Range,真实波动幅度。把每根 K 线的「真实波幅」做平滑,得到一个平均振幅。它的单位和价格一样,默认周期 14。

Q2. 它能告诉我涨还是跌吗?

不能。ATR 永远为正,暴涨和暴跌都会把它推高。它给的是尺度,不是方向。

Q3. 那它到底有什么用?

它给出的是一个距离。交易里需要距离的地方只有两处:止损放多远,以及由止损距离倒推的仓位该开多大。

Q4. 最大的坑是什么?

滞后。ATR 算的是过去 14 根 K 线的平均,行情突变的那一根上,它还停在平静期的读数。

ATR 是一把尺子,不是指南针。它不参与「该做多还是该做空」这个决定,只回答一个问题:最近这段行情里,一根 K 线平均能走出多大的幅度。J. Welles Wilder 在 1978 年的《New Concepts in Technical Trading Systems》里提出它(Open Library 著录:Trend Research, 1978),用意很朴素——各个期货合约的躁动程度天差地别,得先有个统一的办法量出「这东西现在有多能折腾」,再谈进出场。

币观已经写过 RSIMACD布林带OBV,也写过 爆仓价精算凯利公式。前一组回答「往哪走」,后一组回答「能亏多少」。ATR 是中间缺的那块拼图:它把「行情有多躁」翻译成一个带价格单位的距离,而这个距离恰好是把方向判断接到仓位公式上的接口。所以这篇的重点不是再抄一遍公式,而是讲清两件事——这个距离怎么变成止损位,又怎么变成你该开几张。

话说在前面:ATR 不会让你不被扫。它滞后,它对插针没有免疫力,再合理的止损也可能在一次流动性缺口里被打掉。它能做的只是让「止损放多远」这个决定有依据可循,而不是拍脑袋定一个整数。

1. ATR 测的是什么——一把尺子,不是指南针。

ATR 的输出和你熟悉的大多数指标不同:它带价格单位。RSI 输出 0 到 100 的一个位置,MACD 输出一个正负值,而 ATR 输出的是「多少钱」。假如某天 BTC/USDT 日线的 ATR 读数是 1,200 USDT,含义就是最近这十几天里,BTC 每天平均折腾大约 1,200 USDT 的幅度。

这个差别听起来小,用起来不小。一个带价格单位的数字,可以直接减在入场价上。RSI 是 68 还是 32,你没法拿它算止损位;ATR 是 1,200,你可以立刻算出「两倍 ATR 的止损放在入场价下方 2,400」。指标里能干这件事的不多。

第二个要记住的性质:ATR 永远大于等于零。它是波幅的平均,不带符号。价格今天涨 5% 和跌 5%,喂给 ATR 的是同一个数。所以它对方向完全沉默——这不是缺陷,是分工(Investopedia: Average True Range)。

先说最容易搞错的一件事。
「ATR 涨上来了,是不是要跌?」——这个问题本身是错的。ATR 上升只意味着振幅在变大,涨得凶会让它上升,跌得凶同样会。你在一段单边上涨的主升浪里看到 ATR 冲高,和在一次暴跌里看到 ATR 冲高,读数可能一模一样。ATR 描述的是环境的吵闹程度,不是行情的走向。

那么日常什么时候需要看它?说白了就三个时刻:开仓前——定止损距离和仓位;持仓中——如果你用移动止损,ATR 决定它跟得多紧;行情性质变化时——ATR 从长期低位抬起来,说明市场从安静切换到躁动,你原来那套止损尺度可能已经不适用了。除此之外,盯着 ATR 看没什么意义,它本来就不产生信号。

2. 真实波幅的三取其大:为什么不能只用「今高减今低」。

ATR 的原料叫真实波幅(True Range,TR)。它不是简单的「最高价减最低价」,而是三个候选值里取最大的那个(Wikipedia: Average true range):

  • 当期最高价 当期最低价
  • | 当期最高价 上一期收盘价 |(取绝对值)
  • | 当期最低价 上一期收盘价 |(取绝对值)

为什么要绕这一圈?举个假设的例子:假设某个标的昨天收在 100,今天直接从 108 开出来,全天在 108 到 110 之间走。今高减今低只有 2,看起来今天风平浪静。但从昨天的收盘算起,价格实际已经跑了 10。三个候选分别是 2、|110−100|=10、|108−100|=8,取最大得 TR = 10。

这个例子说明了 TR 真正在量什么:不是「今天这根 K 线画得有多长」,而是「从上一个已知的公允价格出发,价格实际跑了多远」。跳空那一段虽然没有成交,但风险是真实发生的——你挂在那里的止损单,照样会在跳空之后成交在一个更差的价格上。把跳空算进去,ATR 量出来的才是你实际要承受的距离。

三取其大还有一个附带好处:TR 恒大于等于「今高减今低」,也恒为非负数。所以 ATR 不会出现负值,也不会因为某天 K 线短就低估当天的实际位移。

那加密市场用得上这个设计吗?7×24 交易,似乎不存在隔夜跳空。答案是仍然用得上,只是主导项换了:

  • 合约维护、恢复交易前后,以及极端行情中订单簿被打穿的瞬间,价格是会「跳」的,后两个候选会顶上来。
  • CME 的比特币期货有正经的周末缺口,这是传统意义上的跳空,我们在 CME Gap 那篇里单独讲过。
  • 日内 K 线上,一根深插针会让第一个候选(今高减今低)直接成为最大项——这是加密市场最常见的情形。

换句话说,传统隔夜市场里 TR 的大值多来自后两项(跳空),加密市场里多来自第一项(插针)。这个差异会一路传导到第 6 节要讲的问题上。

3. Wilder 的平滑:同样叫 14,它比你以为的慢。

有了每根 K 线的 TR,接下来要把它们平均掉。这一步 Wilder 用的不是普通均线,而是他自己那套递推平滑,很多平台把它标成 RMA 或 SMMA。流程是这样的:先取最初 14 根 TR 的简单平均作为种子值,之后每来一根新 K 线,按下式往前推:

ATR(今) = [ ATR(昨) × 13 + TR(今) ] ÷ 14

这条递推式在 Wikipedia 的 ATR 词条里写得很清楚,一般形式是 ATRt = [ATRt−1 × (n−1) + TRt] ÷ n。展开看,它等价于一条平滑系数 α = 1/14 的指数平滑线。

而你平时用的 EMA,平滑系数是 α = 2/(n+1)。这两个东西容易被混为一谈,但把它们摆在一起解一下就知道差多少:令 2/(n+1) = 1/14,解得 n = 27。也就是说,Wilder 的「14 周期 ATR」,反应速度接近一条 27 周期的 EMA。这个换算任何人拿这两条公式都能自己推一遍,不需要相信我。

知道它慢,有两个很实际的后果:

  • ATR 追不上突变。一根巨阴砸下来,新的 TR 只以 1/14 的权重进入 ATR,要连着好几根 K 线才能把水位抬到位。行情最凶险的那一刻,ATR 给你的还是平静期的读数——你按它算出的止损,在那一刻是偏窄的。
  • 反过来也一样慢。一根插针把 ATR 顶上去之后,即使市场立刻恢复平静,ATR 还要拖好几根 K 线才降回来。这段「余温」里,你按 ATR 设的止损会过宽、算出来的仓位会过小,等于在为一次已经过去的波动持续付账。

至于默认周期为什么是 14:Wilder 在 1978 年那本书里,RSI、DMI、ATR 基本都用 14,大致对应两周左右的交易日。它是作者的经验设定,书里并没有把它当成被证明的最优值。所以别把 14 当真理,但也别随手乱调——理由在第 7 节。

还有一个坑,看图之前最好先确认:很多平台的 ATR 参数面板里可以选平滑方式。

平滑方式平滑系数相对反应速度说明
RMA / Wilder(原版)1/n最慢Wilder 书中的定义,多数平台的 ATR 默认值
EMA2/(n+1)较快同样叫 14,权重给近期更多
SMA等权 1/n较快,但会突然掉值大 TR 滑出窗口那一根,ATR 会阶梯式下跌

同一根 K 线上,三种平滑给出的 ATR 数值不同。换平滑方式等于换了尺子,你原来定的倍数不再对应同一段距离。如果你在一个平台上校准好了参数,换平台前先核对这一项。

4. 把 ATR 换成止损距离:k 该取多少,取决于什么。

这是 ATR 最主要的用途。公式本身没什么可讲的:

做多止损 = 入场价 − k × ATR  做空止损 = 入场价 + k × ATR

难的是 k 取多少。这里先把话讲死:不存在一个通用的最优倍数,任何直接甩给你一个具体数字并说它最优的说法,都值得怀疑。公开教材和常见模板多在 1.5 到 3 之间取值,那是惯例区间,不是结论。真正决定 k 的是下面这几件事。

决定因素倾向取小(约 1–1.5)倾向取大(约 2.5–3 以上)
持仓时长日内,几小时内了结波段,拿几天到几周
策略类型均值回归、区间边缘接反手趋势跟随,要吃完整一段
品种深度深度厚的主流合约深度薄、易插针的小市值
你更怕哪种痛怕单次亏大,接受被扫得多怕被反复扫,接受单次亏多

这张表给的是方向,不是配方。那怎么给自己定一个数?不靠猜,靠回头数自己的单。把你过去的成交记录拉出来,统计两个比例:

  1. 被止损出局的比例;
  2. 被止损之后,价格在随后若干根 K 线内又回到原方向、并走到了你原本的目标位的比例

第二个数偏高,说明你的 k 太小,你一直在为日常噪声交学费;如果反过来,你几乎不被止损、但每次亏损都很重,说明 k 太大,止损形同虚设。这两个比例任何人拿自己的成交记录都能算出来,不需要采信别人的参数。你的 k 应该由你自己的历史单决定,不是由一篇文章决定。

再补一种常见变体:移动止损。把止损挂在「入场以来出现过的最高价 − k × ATR」,并且只上移、不下移。它的好处是止损距离会随波动自动伸缩——行情变躁 ATR 变大,止损自动放宽,不至于在震荡幅度扩大时被甩下车;行情转平静,止损自动收紧,利润锁得更牢。缺点是趋势一旦走完,它会把一部分浮盈还回去,这是这类止损的固有代价,不是参数没调好。

最后三条硬提醒,写在这里免得被当成万能药:

  • ATR 是滞后的。行情突变的那根 K 线上,它还是旧值,你此刻按它设的止损天然偏窄。
  • 别把止损正好挂在人人都算得出的位置。整数关口下方一点点、明显前低下方一点点,那正是流动性被主动去找的地方,清算地图那篇讲的就是这个机制。ATR 给你距离,你还得挪开那些扎堆的位置。
  • 止损再合理,也会被打掉。ATR 降低的是「被日常噪声扫出局」的概率,它对流动性瞬间抽干的那一下没有任何办法。

5. 把 ATR 换成仓位:先定亏多少,再倒推开多大。

这一节要把顺序反过来:不是先选杠杆倍数再看能亏多少,而是先定这笔单最多亏多少,再由止损距离倒推出该开多大。杠杆是算完之后的结果,不是一开始的选择。

三步,一行算术:

① 风险金额 = 账户权益 × 单笔风险比例
② 止损距离 = k × ATR
③ 开仓数量 = 风险金额 ÷ 止损距离

第一步里的「单笔风险比例」是你自己定的纪律,常见的做法在 1% 上下,保守的用 0.5%,激进的到 2%。这个数取多少不由 ATR 决定,由你的资金曲线能扛多深的连续回撤决定——这正是凯利公式那篇在讨论的问题。ATR 只负责第二步和第三步。

📋 算例 · 全部为假设值 · 换成你自己的数字同样成立

下面每一个数字都是为了演示算法而假设的,不代表任何时点的真实行情,也不是任何账户的记录。

假设账户权益 5,000 USDT,你定的单笔风险比例是 1%,那么风险金额 = 5,000 × 1% = 50 USDT

假设此刻 BTC 日线 ATR 读数为 1,200 USDT,你根据自己的历史单把 k 定在 2,那么止损距离 = 2 × 1,200 = 2,400 USDT

于是开仓数量 = 50 ÷ 2,400 ≈ 0.0208 BTC。假设 BTC 现价 60,000 USDT,这笔仓位的名义价值约 1,250 USDT,占账户权益的 25%。

读这个算例要抓的不是那几个数,而是它们怎么互相牵动:ATR 一变,止损距离跟着变,仓位跟着反向变。同样是 50 USDT 的风险预算,如果 ATR 涨到 2,400,止损距离变成 4,800,你能开的量就自动腰斩到 0.0104 BTC。波动大的时候仓位自动缩小,等于在躁动的市场里替你主动降了杠杆,不用你临场拍板。

注意一个容易被忽略的细节:上面算出的名义价值 1,250 USDT,和「你会亏多少」是两回事。你会亏多少已经被止损锁在 50 USDT 了——前提是止损真的能触发。这个前提就引出了整套方法最常见的失败模式。

必做的交叉检查:强平价和止损价,谁更近?
按 ATR 算出仓位之后,一定要回头核一遍这笔单的强平价在哪。如果强平价比止损价离得更近,你会先被强平,止损永远轮不到执行,前面那套风控就全是摆设。这在高杠杆逐仓下特别容易发生:你以为最多亏 50 USDT,实际上亏掉的是整笔保证金。核算方法见 BTC 10x 杠杆爆仓价精确计算,或者直接用站内的爆仓价计算器把两个价格摆在一起看。

顺带把 ATR 和凯利公式的分工说清楚,因为这两篇经常被放在一起读却容易搞混:

  • 凯利回答的是「风险预算该定多大」——也就是上面第一步里那个百分比。它的输入是胜率和盈亏比,输出是一个比例。注意那篇的结论:实盘里基本没人用全凯利。
  • ATR 回答的是「这个预算在当前波动下换成多少张」——它是单位换算器,把百分比翻译成具体数量。

两者不冲突,顺序也不能颠倒:先有预算,再有换算。站内的仓位风险计算器凯利计算器分别对应这两步,你可以把 ATR 读数填进去直接得到数量,省掉手算。

6. 加密市场的四个不一样。

ATR 是 1978 年为商品期货设计的,搬到 7×24 的加密市场,有四处会咬人。

① 没有收盘,「昨收」是人为切出来的。传统市场每天有明确的收盘价,而永续合约不休市,所谓的日线收盘只是把连续的价格流按某个时刻切一刀。这一刀切在 UTC 0 点还是切在你所在时区的 0 点,得到的「上一期收盘价」就不一样。而这个价直接进 TR 的第二、第三个候选。你在两个软件上看到同一个币的 ATR(14) 数值不同,第一个该查的就是日线基准时区。

② 跳空少了,插针多了。TR 三取其大这个设计,当初主要是为了处理隔夜跳空。加密市场几乎没有隔夜,但换来了另一样东西:流动性瞬间被抽干导致的深插针。插针进入 TR 的方式是最粗暴的第一项(今高减今低),一根针就能把 TR 顶到平时的好几倍,再由第 3 节讲的慢平滑拖着好几根 K 线消化。结果就是——插针过后那段时间,ATR 是虚高的,你按它算的仓位会明显偏小。这不算错,但你要知道自己在为什么付账。

③ 同一个币,各家交易所的 ATR 不一样。ATR 的输入是 K 线的高、低、收,而这三个数是各家自己撮合出来的。深度不同,极端行情下插针的深度就不同,高低点自然不同。更麻烦的是永续合约有两套价格:图表上画的通常是最新成交价,而强平判定用的是标记价,两者差距最大的时刻恰好是插针那一刻——也就是你最需要它们一致的时候。可执行的原则只有一条:用你实际下单那家的 K 线算 ATR,别拿 A 所的数字去 B 所挂单。这也意味着,在开始按 ATR 定止损和仓位之前,你得先把「常用哪一家」定下来——一旦换所,同一套倍数和仓位公式就得重新校一遍。还没定的话,本站数据主要以 Binance 的 K 线为口径,你也可以选任何一家,重点是固定下来别来回换。

④ 计价单位决定了 ATR 能不能横着比。USDT 本位合约的 ATR 单位是 USDT,数值可以直接当美元距离用;币本位合约的盈亏以币计价,同一个 ATR 对应的美元风险会随币价浮动。而跨品种比较时,绝对值一律没有可比性——BTC 的 ATR 是四位数,一个单价 0.01 的币 ATR 可能是小数点后四位。要比就得先归一:

ATR% = ATR ÷ 当前价格 × 100%

这个百分比形式(常写作 ATRP)才是跨品种、跨时间比较波动的正确口径。你想知道「这个山寨比 BTC 躁多少倍」,只有这个比值能回答。

最后补一句 ATR 结构上的盲区:它只看价格,看不见杠杆结构。持仓量堆到高位、资金费率走到极端时,市场的尾部风险其实已经上来了,但只要价格还没开始动,ATR 就还是低的。安静加上拥挤,是最容易出事的组合,而 ATR 对前半句敏感、对后半句完全无感。这也是为什么下一节要讲配合。

7. 五种最常见的用错方式。

① 当方向信号用。「ATR 上穿均线就买入」这类用法从根上就不成立。TR 取的是绝对值,ATR 永远为正,涨得凶和跌得凶在它眼里是同一件事。ATR 变大只说明环境变吵了,至于往哪边吵,它一个字都没说。

② 跨品种直接比绝对值。「这个币 ATR 才 0.0004,比 BTC 的 1,200 安全多了」——这句话没有意义,两个数的单位根本不同。要比就先转成上一节的 ATR%,一个单价低的小币折算成百分比之后,往往比 BTC 躁得多。

③ 把 ATR 变小当成「安全」。这条最伤人。低波动通常不是风险消失,而是能量在积蓄——布林带讲的「挤压」说的是同一件事,只是换了个度量方式。在 ATR 收缩期按当时读数设的窄止损,恰好会在突破启动的那一根被一次扫光。低 ATR 的正确解读是「止损此刻很便宜」,不是「现在很安全」。这两句话差得远。

④ 止盈和止损用同一个 k。不少模板写成「止损 2 倍 ATR、止盈 2 倍 ATR」,这等于强行把盈亏比钉死在 1:1。这个 1:1 不是分析出来的,是参数偷懒的副产品。止盈的依据应该来自价格结构——前高、流动性密集区、关键整数位,ATR 在这里只负责给目标位一个下限:如果目标距离还不到 1 倍 ATR,那这笔单的空间可能还没手续费和滑点大。

⑤ 行情不顺就改周期。把 14 改成 20 再改成 10,是最容易自我欺骗的动作。改周期就是改尺子,改完之后你所有靠 ATR 定的止损距离和仓位公式都换了尺度,过去的记录不再可比,你也就永远没法判断到底是参数有问题还是策略有问题。要改就在开始交易之前定死,并且改完重跑一遍自己的历史单。

8. ATR 在你的判断流程里坐哪个位置。

ATR 不是信号源,是执行层的参数。这也是它很难被单独回测的原因——你没法回测「一把尺子」,只能回测「用这把尺子量出来的止损和仓位,让整套策略变好了还是变差了」。把币观写过的这些指标按流程排一下,分工就清楚了:

指标它回答什么在流程里的位置
RSI / MACD方向和动量第 1 步:做不做,做哪边
OBV这个动作背后有没有量在推第 2 步:真伪
布林带带宽现在是挤压还是扩张第 2 步:环境
持仓量 / 资金费率下面堆了多少杠杆第 2 步:拥挤度
ATR一根 K 线平均能走多远第 3 步:止损距离与仓位
爆仓价强平价落在哪第 4 步:交叉检查

ATR 和布林带带宽值得单独辨一下,因为它俩经常同步动,容易被当成一个东西。算法上的差别放在下面的常见问题里说,这里只讲实战上更有用的那一点:它们什么时候会分家。一是只有插针、收盘价却没怎么动的日子——ATR 会抬头,带宽几乎不动,这时候止损该放宽,但你光看带宽看不出来;二是价格重心稳步平移、每天振幅却不大的行情——带宽扩张,ATR 未必跟。两边分家的时候,定止损距离以 ATR 为准,因为你的止损面对的是实际振幅,不是收盘价的标准差。

顺序上有个原则值得记住:ATR 从不参与「做不做」这个决定,只参与「做多大、退在哪」。方向由前两步定,ATR 接手第三步,最后必须回到第四步核一遍强平价。这条链子中间断哪一环,前面的功夫都白费——想看更完整的组合方式,可以读把孤立指标变成执行系统那篇

9. 常见问题。

ATR 数值多大算高?

单看一个数字答不了,因为 ATR 的单位跟价格一样。BTC 的 ATR 可能是几百上千,一个单价 0.01 的小币 ATR 可能是 0.0004,这两个数字放在一起没有意义。判断高低只有两条路:一是把 ATR 除以当前价格换成百分比(常写作 ATRP),这样跨品种才可比;二是把这个品种自己的 ATR 和它过去几个月的 ATR 比,看现在落在它自己历史区间的哪一段。绝对值本身不携带高或低的信息,它只是一个距离。

止损用几倍 ATR 合适?

没有通用的最优倍数,谁直接给你一个数字都该打问号。公开教材和常见模板多在 1.5 到 3 倍之间取值,那是惯例区间,不是结论。真正决定倍数的是四件事:你看的周期(周期越大 ATR 越大,同样倍数换算出的实际距离更远)、品种的波动性格、这笔单打算拿多久,以及策略是趋势跟随(需要宽止损来容忍回撤)还是均值回归(可以窄)。定倍数的正确做法是回头统计自己的历史单——被止损之后价格又回到原方向的比例有多高。这个比例偏高,说明倍数取小了。

ATR 周期该不该从 14 改掉?

14 是 Wilder 在 1978 年那本书里给的默认值,他那几个指标基本都用 14,属于作者的经验设定,不是被证明的最优参数。你可以改,但要清楚代价:周期一变,ATR 的数值全变,你靠 ATR 定的止损距离和仓位公式跟着换了尺度,过去的记录不再可比。所以要么一开始就定死,要么改完重新跑一遍自己的历史单。最糟的做法是行情不顺就调参数,那是在事后给自己找解释。

为什么同一个币在两个交易所的 ATR 不一样?

因为 ATR 的输入是 K 线的高、低、收,而这三个数每家交易所都是自己撮合出来的。深度不同,极端行情下插针的深度就不同,高低点自然不同;日线按 UTC 切还是按你所在时区切也不同,昨收随之不同,而昨收直接进 True Range 的计算。永续合约还多一层:图表通常画最新成交价,强平却按标记价。结论很实际——用你实际下单那家的 K 线算 ATR,别拿 A 所的数字去 B 所挂单。

ATR 能判断方向吗?

不能,而且这是它最常见的误用。ATR 由真实波幅平滑而来,真实波幅取的是绝对值,永远为正,所以暴涨和暴跌都会把 ATR 推高。ATR 上升只说明一件事:最近的振幅变大了,环境变吵了,它对涨跌一视同仁。方向要交给价格结构和趋势类指标去判断,ATR 负责的是另一个问题——方向定下来之后,止损该放多远、仓位该开多大。

ATR 和布林带带宽是一回事吗?

不是,但两者测的东西高度相关。布林带带宽用收盘价的标准差算,而且通常除以中轨做了归一化,天生是个相对值;ATR 用高、低、收三个价格,把跳空和插针都算了进去,输出是一个和价格同单位的绝对距离。用起来的差别是:带宽适合回答现在是不是挤压,ATR 适合直接换算成止损距离。两者同步收缩的时候,是环境要变的双重提示。


下一步该看什么。