ATR指标实战入门:用真实波幅均值优化资金、止损与仓位

·

真实波幅均值(ATR,Average True Range)是量化交易里最常出现的波动率指标。它由技术交易之父 J. Welles Wilder 于 1978 年提出,一句话就能理解:把一段时间内的最大价格波动“平均化”,帮助交易者看清市场的“身体语言”。无论你在股票、期货还是数字货币市场,只要会用 ATR,就能更聪明地分配资金、设置止损、动态调整仓位。下文将拆解三大实战场景,并提供可复制代码与常见疑问速查表。

精准资金分配:让每只合约“同权波动”

很多投资者喜欢把钱平均分到数个品种,却忽略了波动差异——
10 万元保证金买入 A 品种,日波幅 1%,和 10 万元买入日波幅 5% 的 B 品种,风险完全不对等。ATR 可以轻松拉平这种差异:

  1. 先把 1% 本金作为一个风险单位;
  2. 计算每手合约对应的 ATR×合约乘数;
  3. 用风险单位除以该值,得出应开手数。

示例

👉 点此查看 ATR 计算过程中的超清数据接口示例,5 分钟跑通代码,立即开始量化测试。

资金分配完成后,“篮子”里的每个头寸在同等正常波动下,对总净值的影响被控制在 ±1% 以内。

动态止损:用 ATR 取代僵硬的“8%铁律”

以 8% 固定止损举例:

利用 ATR 可以把止损价与当前波动同步伸缩:

优点
✓ 小波动停止回吐,大波动不被震出
✓ 无需反复人工调节,完全交由算法

代码片段

# 触发止损
if quote.last_price <= entry_price - 2 * current_atr:
    target_pos.set_target_volume(0)

仓位再平衡:波动收缩时加杠杆,扩大时减杠杆

市场盘整会导致 ATR 持续走低。若仍用最初计算的 3 手螺纹,实际风险占资金比例已悄悄下降至 0.7%。闲置保证金与低杠杆都不是高效率的做法。

步骤:

  1. 取最近的 ATR_new=20
  2. 重新计算所需手数=10000÷(20×10)=5 手
  3. 补开 2 手,使成本价边缘风险回到 1% 刻度

熊市、震荡市皆可低买叠加,牛市、井喷时反向操作即可减仓锁定利润。

ATR 计算公式拆解

简短三步即可实时计算:

  1. True Range 真实波幅
    TR = max( H - L, |H - C_prev|, |C_prev - L| )
  2. ATR14
    ATR14 = TR14 的简单移动平均

用任何语言的 pandas 两行就能完成:

tr = np.maximum.reduce((high-low, np.abs(high-prev_close), np.abs(prev_close-low)))
atr = tr.rolling(14).mean()

入门案例:黄金多头的“加仓-止损”策略

import tqsdk
SYMBOL  = "COMEX.au2308"
RISK_ATR_RATIO = 0.5   # 加仓触发
STOP_ATR_RATIO = 2     # 止损触发

api       = tqsdk.TqApi()
klines    = api.get_kline_serial(SYMBOL, 24*60*60, 100)
atr_val   = tqsdk.ta.ATR(klines,14).atr.iloc[-1]
position  = api.get_position(SYMBOL)
quote     = api.get_quote(SYMBOL)
trades    = api.get_trade(SYMBOL)

# 首次开仓
if position.pos_long == 0:
    api.insert_order(SYMBOL, "BUY", "OPEN", 1)

while True:
    api.wait_update()
    if position.pos_long > 0:
        if quote.last_price >= trades[-1].trade_price + RISK_ATR_RATIO * atr_val:
            # 加仓
            api.insert_order(SYMBOL, "BUY", "OPEN", 1)
        elif quote.last_price <= trades[-1].trade_price - STOP_ATR_RATIO * atr_val:
            # 止损
            api.insert_order(SYMBOL, "SELL", "CLOSE", position.pos_long)

👉 复制上面代码,立即进入零成本期货模拟账户体验连续加仓与止损,真实感受 ATR 的节律。

常见问题(FAQ)

Q1:ATR 与波动率百分比指标有何区别?
ATR 使用的是绝对金额波动,可同时兼容不同价格的品种;而 VIX、历史波动率等则是百分比概念,适合同一资产的纵向比较。

Q2:为什么有时 14 日 ATR 仍然过拟合?
震荡行情的突变会使 14 日窗口偏高。可使用 EMA-ATRChandelier Exit 等平滑算法缓解。

Q3:ATR 参数到底该选多少天?
日内交易可缩短至 7~10 日;波段或长线可扩到 21~30 日。先回溯三年数据,找出一对夏普最高、回撤最小的组合即可。

Q4:能否将 ATR 用于止盈?
可以。反向设置:将多单止盈价设为 P + m×ATR,移动止盈也适用,称为 Trailing ATR Stop

Q5:ATR 指标的盲区在哪?

  1. 当日出现跳空极限行情,ATR 滞后;2. 极端消息导致涨停跌停,ATR 无法反映流动性缺口。

Q6:想通过 ATR 做期权波动率交易,可行吗?
ATR 作为历史波动率的近似值,可和隐含波动率 IV 构成 IV-ATR 差值套利。需注意期权二阶风险。


通过本文,你已掌握: