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):交易方向(买为正,卖为负)
我的经验: 对于流动性好的指数成分股,α 通常接近 0.6。但对于一些冷门股,α 可能高达 0.9。建议你在实盘前先用历史数据拟合一下这个参数。

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 倍。建议你按时间段分段估计参数。

3.5 模型的应用场景

A-C 模型在指数套利中主要有三个用途:

  1. 事前评估:在下单前,估算这笔交易的冲击成本,判断套利空间是否足够覆盖
  2. 交易拆分:根据模型计算出最优的交易速度,把大单拆成小单,降低冲击
  3. 事后归因:交易完成后,分析实际冲击与模型预测的偏差,优化参数

举个例子。假设你发现沪深 300 期货和 ETF 之间有 0.3% 的价差。你算了一下,如果全仓买入 ETF,冲击成本大约是 0.15%。那套利空间还剩 0.15%,勉强能做。但如果你用 A-C 模型优化一下交易速度,把冲击成本降到 0.08%,那利润就翻倍了。

3.6 核心知识体系

下面这张图是我自己整理的 A-C 模型知识框架,帮你快速建立整体认知:

Almgren-Chriss 模型知识框架 冲击成本模型 永久性冲击 (Permanent) 临时性冲击 (Temporary) 冲击系数 γ 交易速度 v 冲击系数 β 指数 α 应用场景:事前评估 → 交易拆分 → 事后归因 参数估计:历史回归 + 分段拟合 + 实盘校准 核心公式:S(t) = S₀ + ∫[γ·v(τ)]dτ + β·sign(v(t))·|v(t)|^α

3.7 实际应用中的注意事项

最后,说几个我在实战中总结的要点:

  • 参数不是一成不变的:市场环境变了,参数就要重新估计。我每周都会跑一次参数校准脚本。
  • 不要迷信模型:A-C 模型假设市场是连续的,但实际中会有跳空、停牌等情况。遇到极端行情,模型误差可能很大。
  • 结合订单簿数据:光用历史价格估计参数不够,最好能接入 Level-2 行情,实时计算盘口深度。

好了,关于 A-C 模型的数学定义就讲到这里。这套框架虽然看起来有点复杂,但只要你动手实现一遍,就会发现它其实很直观。下次我们聊聊怎么用这个模型来优化你的交易策略。


专注资料整理