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模型)就是来解决这个问题的。它把冲击拆成两部分:
- 永久冲击:你的交易对市场造成的长期影响。说白了,就是你买完后,价格回不去了。
- 临时冲击:每笔交易瞬间造成的价格偏离。过一会儿就恢复了。
公式长这样:
永久冲击:ΔP_perm = γ · v
临时冲击:ΔP_temp = η · sign(v) · |v|^α
其中:
- v 是交易速度(单位时间的交易量)
- γ 是永久冲击系数
- η 是临时冲击系数
- α 通常取0.5(平方根形式)
我当年第一次看到这个模型时,觉得它太复杂了。但后来做执行算法优化时才发现,它才是真正能用的东西。
为什么?因为它把时间维度加进来了。你想想看,你可以在1分钟内买完,也可以在1小时内买完。冲击成本完全不同。A-C模型帮你找到最优的「交易速度」——既不能太快(冲击大),也不能太慢(价格波动风险大)。
这里我画了一张图,帮你理解A-C模型的核心逻辑:
你看,A-C模型把问题变成了一个优化问题。你输入交易量、时间、波动率,模型帮你算出最优的交易速度曲线。
我曾经用A-C模型优化过一个ETF套利策略的执行算法。原来我们用的是固定速度拆单,年化冲击成本大概在0.3%左右。换成A-C模型后,冲击成本降到了0.18%。别小看这0.12%,对于高频套利来说,这就是利润翻倍的关键。
4.4 三个模型的对比与选择
说了这么多,到底该用哪个?我个人的经验是这样的:
| 模型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 线性模型 | 小单、流动性好的市场 | 简单、计算快 | 大单时严重高估冲击 |
| 平方根模型 | 中高频交易、中等规模订单 | 更贴近实际、参数少 | 没有时间维度 |
| A-C模型 | 大单执行、算法交易优化 | 考虑时间维度、可优化 | 参数估计复杂 |
嗯,这里要注意一点。很多人觉得A-C模型是万能的,其实不是。它的假设是价格服从随机游走,但实际市场有自相关性、有跳跃。所以用A-C模型算出来的最优速度,只能作为参考,不能完全照搬。
我曾经犯过一个错误。用A-C模型算出来一个最优交易计划,然后让交易系统严格执行。结果呢?市场突然出现大单,我的计划完全被打乱了。后来我学乖了——A-C模型给出的是「基准计划」,实际执行时要根据市场情况动态调整。
最后说一句。市场冲击模型不是越复杂越好。我见过有人用深度学习去预测冲击,效果还不如简单的平方根模型。为什么?因为冲击的本质是订单簿的供需关系,而不是什么玄学。抓住核心逻辑,比堆砌模型重要得多。