3、冲击成本的数学定义:Almgren-Chriss模型框架介绍
说到冲击成本,很多做套利的朋友第一反应就是「滑点」。其实滑点只是表象,真正要量化它,我们需要一套严谨的数学模型。我个人最常用的,就是 Almgren-Chriss 模型(简称 A-C 模型)。
这个模型在业界有多火?这么说吧,几乎所有做程序化交易的大厂,内部风控系统里都跑着这个模型的变体。我当年在自营团队搭建套利系统时,也是拿它作为冲击成本计算的基准框架。
3.1 为什么需要数学模型?
你想想看,我们做指数套利,一单下去可能就是几百手甚至上千手。这么大的单子,市场不可能无动于衷。你买的时候价格会被推高,卖的时候会被压低。这个「被推高/压低」的部分,就是冲击成本。
但问题来了:冲击成本到底是多少?
凭感觉?不行。拍脑袋?更不行。我们需要一个数学框架,把冲击成本拆解成可计算、可预测的组成部分。A-C 模型就是干这个的。
3.2 Almgren-Chriss 模型的两大核心假设
A-C 模型把交易对价格的影响分成两部分。嗯,这里要仔细听,因为这是整个模型的基础。
3.2.1 永久性冲击(Permanent Impact)
永久性冲击,说白了就是你的交易行为改变了市场的供需平衡。你买走了大量股票,市场上流通的筹码变少了,价格自然就上去了。而且这个价格变化是回不来的。
数学上,永久性冲击与交易速度(即单位时间内的交易量)成正比:
ΔP_permanent = γ · v · t
其中:
- γ:永久冲击系数,由市场深度决定
- v:交易速度(股/秒)
- t:交易持续时间
我在项目中遇到过一种情况:某只小盘股,我们只买了总成交量的 3%,结果价格直接跳了 0.5%。这就是永久性冲击在作祟。你想想看,这种冲击一旦发生,你的套利利润可能瞬间归零。
3.2.2 临时性冲击(Temporary Impact)
临时性冲击则不同。它是因为你的订单吃掉了盘口的挂单,导致价格暂时偏离。但只要市场流动性恢复,价格就会回归。
数学表达式:
ΔP_temporary = β · sign(v) · |v|^α
参数说明:
- β:临时冲击系数,与买卖价差相关
- α:非线性指数,通常在 0.5~1 之间
- sign(v):交易方向(买为正,卖为负)
3.3 完整的冲击成本公式
把上面两部分加起来,就得到了 A-C 模型的核心公式:
S(t) = S₀ + ∫[γ · v(τ)] dτ + β · sign(v(t)) · |v(t)|^α
翻译成人话就是:
- S₀:初始价格
- 第一项积分:从开始到现在累积的永久性冲击
- 第二项:当前时刻的临时性冲击
这个公式看起来有点吓人,但实际用起来很简单。我一般会把它离散化,变成逐笔计算的形式:
# 离散化后的冲击成本计算
def calculate_impact(trade_volume, market_depth, gamma, beta, alpha):
# 永久性冲击
permanent = gamma * sum(trade_volume) / market_depth
# 临时性冲击
temporary = beta * (abs(trade_volume[-1]) / market_depth) ** alpha
return permanent + temporary
3.4 模型的关键参数
搞清楚了公式,接下来就是参数估计。这部分我踩过不少坑,分享给你。
| 参数 | 含义 | 典型取值范围 | 估计方法 |
|---|---|---|---|
| γ | 永久冲击系数 | 10⁻⁶ ~ 10⁻⁴ | 用大单成交前后的价格变化回归 |
| β | 临时冲击系数 | 10⁻⁴ ~ 10⁻² | 用盘口深度和买卖价差拟合 |
| α | 非线性指数 | 0.5 ~ 1.0 | 用不同规模订单的冲击数据拟合 |
3.5 模型的应用场景
A-C 模型在指数套利中主要有三个用途:
- 事前评估:在下单前,估算这笔交易的冲击成本,判断套利空间是否足够覆盖
- 交易拆分:根据模型计算出最优的交易速度,把大单拆成小单,降低冲击
- 事后归因:交易完成后,分析实际冲击与模型预测的偏差,优化参数
举个例子。假设你发现沪深 300 期货和 ETF 之间有 0.3% 的价差。你算了一下,如果全仓买入 ETF,冲击成本大约是 0.15%。那套利空间还剩 0.15%,勉强能做。但如果你用 A-C 模型优化一下交易速度,把冲击成本降到 0.08%,那利润就翻倍了。
3.6 核心知识体系
下面这张图是我自己整理的 A-C 模型知识框架,帮你快速建立整体认知:
3.7 实际应用中的注意事项
最后,说几个我在实战中总结的要点:
- 参数不是一成不变的:市场环境变了,参数就要重新估计。我每周都会跑一次参数校准脚本。
- 不要迷信模型:A-C 模型假设市场是连续的,但实际中会有跳空、停牌等情况。遇到极端行情,模型误差可能很大。
- 结合订单簿数据:光用历史价格估计参数不够,最好能接入 Level-2 行情,实时计算盘口深度。
好了,关于 A-C 模型的数学定义就讲到这里。这套框架虽然看起来有点复杂,但只要你动手实现一遍,就会发现它其实很直观。下次我们聊聊怎么用这个模型来优化你的交易策略。