4、动态仓位调整:根据市场波动率(如ATR)动态调整单笔做市仓位大小

做市这行,最怕什么?

怕行情突然暴走,你还在按老规矩挂单。一单下去,直接穿仓。

我早年吃过这个亏。2018年BTC闪崩那会儿,我按固定仓位做市,结果波动率瞬间翻了三倍,单笔亏损直接吃掉了我一周的利润。从那以后,我养成了一个习惯——仓位必须跟着波动率走

为什么波动率决定仓位大小?

说白了,波动率就是市场的「脾气」。

脾气好的时候,价格慢慢晃,你挂单风险小。脾气爆的时候,一根大阳线或大阴线,直接把你挂单吃掉。你想想看,同样的仓位,在低波动环境里可能只亏0.1%,在高波动环境里可能亏1%。

所以,波动率越高,单笔仓位就应该越小。这不是什么高深理论,这是生存法则。

核心原则:

  • 波动率 × 仓位 = 风险敞口(这个值应该保持恒定)
  • ATR越高,单笔挂单量越小
  • ATR越低,单笔挂单量可以适当放大

ATR:我最常用的波动率指标

ATR(Average True Range)就是平均真实波幅。它不告诉你方向,只告诉你波动有多大。

我个人习惯用14周期的ATR。为什么是14?其实没什么玄学,就是行业默认值,用顺手了。

市场状态 ATR值(相对) 建议仓位调整
低波动 ATR < 20日均值×0.7 仓位×1.2 ~ 1.5
正常波动 ATR在均值±20%内 仓位不变
高波动 ATR > 20日均值×1.3 仓位×0.5 ~ 0.7
极端波动 ATR > 20日均值×2.0 暂停做市或仓位×0.2

我的经验:

别死盯着ATR的绝对值。不同币种、不同时间框架的ATR差异很大。我一般用ATR与20日均值的比值来做判断,这样更稳定。

动态仓位计算公式

这里给出一套我实际在用的公式。不复杂,但很实用。

# 基础参数
base_position = 1000  # 基础仓位(USDT等值)
atr_current = get_atr(symbol, period=14)  # 当前ATR
atr_ma20 = sma(atr_current, period=20)  # ATR的20日均值

# 波动率系数
volatility_ratio = atr_ma20 / atr_current

# 限制波动率系数的范围,防止极端值
volatility_ratio = max(0.3, min(3.0, volatility_ratio))

# 动态仓位
dynamic_position = base_position * volatility_ratio

# 最终仓位(还要考虑账户总资金限制)
max_position = account_equity * 0.02  # 单笔最大不超过总资金的2%
final_position = min(dynamic_position, max_position)

print(f"当前ATR: {atr_current:.2f}, ATR均值: {atr_ma20:.2f}")
print(f"波动率系数: {volatility_ratio:.2f}")
print(f"建议仓位: {final_position:.2f} USDT")

你看,逻辑其实很简单:ATR越高,分母越大,系数越小,仓位越小

注意:

我曾经犯过一个错误——把波动率系数设成无限制。结果有一次ATR突然降到极低,系数飙到5倍,我差点把整个账户都挂进去了。所以一定要加上下限,这是保命用的。

做市场景下的特殊处理

做市和普通交易不一样。我们不是单方向开仓,而是双边挂单。

所以动态仓位调整要分两层:

  1. 总风险敞口:根据ATR调整双边挂单的总价值
  2. 单边挂单量:在总敞口内,分配买单和卖单的量

举个例子:

假设基础双边总敞口是10,000 USDT。ATR显示波动率偏高,系数0.6。那么总敞口降到6,000 USDT。买单和卖单各挂3,000 USDT。

如果波动率继续升高,我可能会把买单和卖单的比例也调一下——比如偏向某一侧。但这属于更高级的玩法了,今天先不展开。

SVG流程图:动态仓位调整逻辑

动态仓位调整流程 获取当前ATR 计算ATR的20日均值 波动率系数 = 均值 / 当前ATR 限制系数范围 [0.3, 3.0] 动态仓位 = 基础仓位 × 系数 执行双边挂单 ATR高 → 系数小 → 仓位小 ATR低 → 系数大 → 仓位大 极端值被截断,防止风险

实战中的几个坑

嗯,这里要注意几个容易翻车的地方。

  • ATR滞后性:ATR是历史数据算出来的。波动率突然飙升时,ATR还没跟上。我一般会加一个「波动率突变检测」——如果价格变动超过前一根K线的3倍ATR,立即减仓,不等ATR更新。
  • 不同时间框架:做市一般看1分钟或5分钟ATR。但别忘了看一眼15分钟和1小时的ATR,防止大周期波动把小周期带崩。
  • 流动性陷阱:有些小币种ATR很低,但流动性也差。这时候按公式算出来的仓位可能偏大,但实际根本挂不出去。我一般会再加一个「最大挂单量 = 最近1分钟平均成交量 × 5%」的限制。

一个小技巧:

我习惯在交易系统里加一个「波动率仪表盘」。实时显示当前ATR、均值、系数,以及建议仓位。颜色编码——绿色正常、黄色警告、红色危险。这样一眼就能看出该不该动手。

总结一下

动态仓位调整,说白了就是一句话:看菜吃饭,量体裁衣

市场波动大,你就缩一缩。市场平静,你可以适当放大。别跟市场较劲,它脾气不好的时候,你躲远点就是了。

我见过太多人,明明波动率已经爆表了,还在那里按固定仓位猛干。结果呢?一波带走。做市不是比谁赚得快,是比谁活得久。

专注资料整理