4. 市场冲击模型:线性冲击模型、平方根冲击模型、Almgren-Chriss模型

做量化交易这些年,我踩过最大的坑,就是低估了市场冲击的成本。

你想想看,你看到一个信号,觉得能赚钱,啪一下把单子砸进去。结果呢?成交价比你预期的差了老远。赚的钱全被冲击成本吃掉了。这就是市场冲击——你的交易行为本身,改变了价格。

今天咱们聊聊三个最经典的冲击模型。说实话,它们各有各的脾气,用对了地方就是神器,用错了就是灾难。

4.1 线性冲击模型:简单但够用

线性冲击模型,说白了就是假设价格变化和你的交易量成正比。

公式长这样:

ΔP = α · Q

其中:

  • ΔP 是价格变化
  • α 是冲击系数(市场越薄,α越大)
  • Q 是你的交易量

我刚开始做执行算法时,特别喜欢用这个模型。为什么?因为它简单。你只需要估计一个α值,就能算出大概的冲击成本。

我的经验: 线性模型在流动性好的股票上表现还行。比如茅台、平安这种,你打个几百万,冲击基本是线性的。但到了小盘股,线性模型就崩了。

举个例子。假设α = 0.0001(每交易1万股,价格变动0.01%),你想买10万股:

ΔP = 0.0001 × 100,000 = 10(即价格变动0.1%)

嗯,看起来挺合理。但如果你买100万股呢?线性模型告诉你冲击是1%。现实中呢?可能直接干到3%甚至5%。

注意: 线性模型假设冲击成本与交易量成正比。但实际市场里,大单的边际冲击是递增的。千万别在大单上用线性模型做预算,否则你会亏得很惨。

4.2 平方根冲击模型:更贴近现实

为什么线性模型会失效?因为市场深度不是无限的。你买得越多,剩下的对手单越少,你得往更差的价格上吃。

平方根模型就是来解决这个问题的:

ΔP = β · √Q

你看,这里用的是平方根。这意味着什么?冲击成本的增长速度,随着交易量增加而放缓,但始终是递增的。

我个人习惯用这个模型做中高频交易的冲击估算。为什么?因为它抓住了市场微观结构的一个核心特征——订单簿的深度分布。

我记得有一次做回测,用线性模型算出来的预期收益是年化15%,但实盘跑下来只有8%。后来换成平方根模型重新算,预期收益直接降到9%,跟实盘差不多。从那以后,我对平方根模型就特别信任。

举个例子对比一下:

交易量(万股) 线性模型冲击(α=0.0001) 平方根模型冲击(β=0.001)
10 0.10% 0.10%
50 0.50% 0.22%
100 1.00% 0.32%
500 5.00% 0.71%

看到没?小单时两者差不多,但大单时线性模型给出的冲击高得离谱。实际上,市场不会让你吃那么大的亏——因为你会拆单,会找流动性。平方根模型更符合这个直觉。

核心要点: 平方根模型在学术圈和业界都很流行。它背后的数学原理是:订单簿的深度分布近似于指数分布,累积深度与价格的平方根成正比。这个结论在很多实证研究中都被验证过。

4.3 Almgren-Chriss模型:最优执行的基石

好了,前面两个模型都是静态的——它们只告诉你「买这么多会冲击多少」。但实际交易是动态的:你拆成N笔单子,每笔都有冲击,而且价格还在波动。

Almgren-Chriss模型(简称A-C模型)就是来解决这个问题的。它把冲击拆成两部分:

  1. 永久冲击:你的交易对市场造成的长期影响。说白了,就是你买完后,价格回不去了。
  2. 临时冲击:每笔交易瞬间造成的价格偏离。过一会儿就恢复了。

公式长这样:

永久冲击:ΔP_perm = γ · v
临时冲击:ΔP_temp = η · sign(v) · |v|^α

其中:

  • v 是交易速度(单位时间的交易量)
  • γ 是永久冲击系数
  • η 是临时冲击系数
  • α 通常取0.5(平方根形式)

我当年第一次看到这个模型时,觉得它太复杂了。但后来做执行算法优化时才发现,它才是真正能用的东西。

为什么?因为它把时间维度加进来了。你想想看,你可以在1分钟内买完,也可以在1小时内买完。冲击成本完全不同。A-C模型帮你找到最优的「交易速度」——既不能太快(冲击大),也不能太慢(价格波动风险大)。

这里我画了一张图,帮你理解A-C模型的核心逻辑:

Almgren-Chriss模型核心逻辑 输入参数 • 总交易量 Q • 交易时间 T • 波动率 σ 冲击模型 • 永久冲击: γ·v • 临时冲击: η·|v|^α • 总冲击 = 永久 + 临时 最优策略 • 最优交易速度 v* • 最小化成本函数 • 冲击 vs 风险权衡 成本函数分解 总成本 = 冲击成本 + 风险成本 冲击成本 = ∫(永久冲击 + 临时冲击) · v(t) dt 风险成本 = 波动率 · 持仓风险 目标:找到 v(t) 使总成本最小化

你看,A-C模型把问题变成了一个优化问题。你输入交易量、时间、波动率,模型帮你算出最优的交易速度曲线。

我曾经用A-C模型优化过一个ETF套利策略的执行算法。原来我们用的是固定速度拆单,年化冲击成本大概在0.3%左右。换成A-C模型后,冲击成本降到了0.18%。别小看这0.12%,对于高频套利来说,这就是利润翻倍的关键。

实战建议: A-C模型虽然好,但参数估计是个大坑。γ和η怎么算?我建议用历史交易数据做回归。具体来说,把每笔交易的冲击和交易速度做回归,就能得到这两个参数。但要注意,不同时间段的参数可能不一样——早盘和尾盘的市场微观结构完全不同。

4.4 三个模型的对比与选择

说了这么多,到底该用哪个?我个人的经验是这样的:

模型 适用场景 优点 缺点
线性模型 小单、流动性好的市场 简单、计算快 大单时严重高估冲击
平方根模型 中高频交易、中等规模订单 更贴近实际、参数少 没有时间维度
A-C模型 大单执行、算法交易优化 考虑时间维度、可优化 参数估计复杂

嗯,这里要注意一点。很多人觉得A-C模型是万能的,其实不是。它的假设是价格服从随机游走,但实际市场有自相关性、有跳跃。所以用A-C模型算出来的最优速度,只能作为参考,不能完全照搬。

我曾经犯过一个错误。用A-C模型算出来一个最优交易计划,然后让交易系统严格执行。结果呢?市场突然出现大单,我的计划完全被打乱了。后来我学乖了——A-C模型给出的是「基准计划」,实际执行时要根据市场情况动态调整。

我的小技巧: 实盘时,我会把A-C模型算出来的最优速度作为「目标速度」,然后用一个PID控制器去跟踪这个速度。这样既能享受A-C模型的优化效果,又能应对市场的突发变化。

最后说一句。市场冲击模型不是越复杂越好。我见过有人用深度学习去预测冲击,效果还不如简单的平方根模型。为什么?因为冲击的本质是订单簿的供需关系,而不是什么玄学。抓住核心逻辑,比堆砌模型重要得多。