第2章:市场冲击模型

做量化交易的人,迟早要面对一个现实——你的订单本身就在影响市场。这不是玄学,是物理定律。我刚开始做算法交易那会儿,总觉得策略信号够准就能赚钱,结果实盘一跑,滑点直接把alpha吃干净了。嗯,从那以后,我才真正开始研究市场冲击。

2.1 市场冲击的定义

市场冲击,说白了就是你的交易行为导致的价格不利变动。你买,价格涨;你卖,价格跌。这个变动幅度,就是市场冲击成本。

举个例子:当前价格100元,你想买1万股。如果市场深度足够,你可能只付出100元均价。但现实是,你的买单会吃掉卖单,价格被推高到100.5元。这0.5元的差价,就是市场冲击。

核心公式:

市场冲击成本 = 实际成交均价 - 决策时的基准价格

(对于卖出,则是基准价格 - 实际成交均价)

我在项目中遇到过最夸张的一次,一个中等规模的订单,冲击成本占了总交易成本的60%。你以为你在赚alpha,其实你在给流动性提供商打工。

2.2 永久冲击 vs 暂时冲击

市场冲击不是铁板一块。它分两种:永久冲击和暂时冲击。理解这个区别,是设计执行算法的关键。

类型 定义 持续时间 成因
永久冲击 订单执行后,价格无法回到原位的部分 长期存在 信息泄露、供需失衡
暂时冲击 订单执行期间,价格暂时偏离的部分 短期(几分钟到几小时) 流动性不足、订单簿失衡

永久冲击,我习惯叫它「信息成本」。你的大单暴露了你的意图,市场参与者嗅到了方向,于是价格永久性地移动了。你想想看,如果你在市场上砸了1000万买盘,别人会怎么想?「有大户进场了,跟着买!」

暂时冲击,更像是「流动性成本」。你的订单暂时吃光了某个价位的挂单,价格跳了一档。但只要后续有新的订单进来,价格就会恢复。这就像你在超市买光了所有鸡蛋,价格暂时涨了,但补货后价格又回来了。

实战经验:

我曾经在回测中忽略永久冲击,结果策略看起来年化30%,实盘只有8%。后来我把永久冲击单独建模,才真正对齐了回测和实盘。

2.3 冲击成本估算方法

估算冲击成本,不是拍脑袋。业界有几种主流方法,我一个个说。

2.3.1 平方根模型(Almgren-Chriss模型)

这是最经典的模型。公式很简单:

冲击成本 = α × σ × √(Q / V)

其中:

  • α:冲击系数(通常0.1~0.5)
  • σ:波动率
  • Q:你的订单量
  • V:市场日均成交量

这个模型的核心思想:冲击成本与订单量的平方根成正比。也就是说,订单量翻4倍,冲击成本只翻2倍。为什么?因为市场会自我调节,大单会吸引更多对手盘。

我个人习惯:

对于A股市场,α取0.2~0.3比较靠谱。美股流动性好,α可以降到0.1。别问我怎么知道的,都是亏出来的经验。

2.3.2 线性模型

有些场景下,平方根模型不够精确。这时候可以用线性模型:

冲击成本 = β × (Q / V)

β是线性冲击系数。这个模型假设冲击成本与订单量成正比。简单粗暴,但适合流动性极差的市场。

我建议:

  • 流动性好的市场(如沪深300成分股):用平方根模型
  • 流动性差的市场(如小盘股、债券):用线性模型
  • 极端情况(如大宗交易):两个模型都不准,得用更复杂的模型

2.3.3 基于订单簿的微观模型

如果你有Level-2数据,可以更精细地估算。核心思路是模拟你的订单如何吃掉订单簿上的挂单。

def estimate_impact(order_book, order_qty):
    """
    基于订单簿估算冲击成本
    order_book: 卖单列表 [(价格, 数量), ...]
    order_qty: 你的买入量
    """
    remaining = order_qty
    total_cost = 0
    for price, qty in order_book:
        if remaining <= 0:
            break
        trade_qty = min(remaining, qty)
        total_cost += trade_qty * price
        remaining -= trade_qty
    avg_price = total_cost / order_qty
    return avg_price

这个方法最准确,但需要实时数据。我在高频交易系统里就用这个,精度能到0.1个tick。

避坑指南:

我曾经在回测里用收盘价估算冲击,结果严重低估。后来发现,收盘价是撮合出来的,不是真实的市场深度。一定要用tick级数据或分钟级订单簿数据。

2.4 知识体系总览

下面这张图,是我自己总结的市场冲击模型知识框架。你看一眼,就能明白各个概念之间的关系。

市场冲击模型知识体系 市场冲击定义 永久冲击 暂时冲击 平方根模型 线性模型 订单簿微观模型 流动性好的市场 流动性差的市场 高频/实时场景 核心目标:最小化总交易成本(冲击成本 + 时间成本)

2.5 实战中的选择

说了这么多,到底用哪个模型?我的建议是:

  1. 回测阶段:用平方根模型,简单且够用。α参数根据历史数据拟合。
  2. 实盘监控:用订单簿微观模型,精度高。但需要实时数据流。
  3. 极端行情:所有模型都可能失效。这时候,我建议直接暂停交易,或者用保守的线性模型。

一个小技巧:

你可以把多个模型的结果做加权平均。比如平方根模型占70%,订单簿模型占30%。这样既稳定又灵敏。我在实盘系统里就是这么干的。

市场冲击模型,说白了就是给你的交易成本算一笔账。算清楚了,你才知道你的策略到底赚不赚钱。别等到实盘亏了才后悔——嗯,我当年就是这么过来的。


公众号:蓝海资料掘金营,微信deep3321