第4章:市价订单冲击模型
大家好,我是你们的量化交易讲师。今天我们来聊聊市价订单冲击模型——说白了,就是你的大单子砸进去,市场会有什么反应。
我在做高频策略那几年,最头疼的就是这个问题。你明明算好了入场价,结果一梭子打进去,价格直接滑出去好几个tick。嗯,这就是我们今天要解决的痛点。
4.1 瞬时冲击与永久冲击
先搞清楚两个基本概念:瞬时冲击和永久冲击。
瞬时冲击,指的是你的订单刚进去那一瞬间,价格被推高的部分。它像一块石头砸进水里,溅起的水花。这个水花会很快回落——因为做市商会补单,其他套利者也会进来。
永久冲击,则是价格回落后,仍然比原来高出的那部分。它反映了市场对你这笔交易的信息解读——「有人在大买,是不是有什么利好?」
我举个例子你就明白了:
- 你买1000股,价格从10.00跳到10.05,然后又回到10.02。那么瞬时冲击是0.05,永久冲击是0.02。
- 你买100万股,价格从10.00跳到10.50,回落到10.30。瞬时冲击0.50,永久冲击0.30。
核心公式:
瞬时冲击 = 成交瞬间的最高价 - 原始价
永久冲击 = 价格稳定后的均价 - 原始价
我在项目中遇到过一种情况:某个小市值股票,我挂了一笔市价单,瞬时冲击直接干到2%。但半小时后价格几乎完全回来了——说明市场认为这只是流动性问题,不是信息驱动。这种时候,永久冲击几乎为零。
4.2 Almgren-Chriss模型简化版
说到冲击模型,就绕不开Almgren-Chriss。这个模型是2000年左右提出的,到现在还是业界标准。不过说实话,完整版太复杂了,我一般只用它的简化版。
简化版的核心思想:
价格变化 = 永久冲击 + 瞬时冲击 × 交易速率
用数学表达就是:
ΔP = α × Q + β × v × sign(Q)
其中:
- ΔP:价格变化
- α:永久冲击系数(跟股票本身有关)
- Q:你的交易量
- β:瞬时冲击系数(跟流动性有关)
- v:交易速率(每秒交易量)
- sign(Q):买卖方向(+1买,-1卖)
你想想看,这个公式其实很直观。永久冲击只跟总量有关,你买得多就推得高。瞬时冲击还跟速度有关,你冲得越快,水花越大。
我的经验:
α和β这两个参数,我建议用历史数据回测来估计。具体做法是:找过去30天的逐笔成交数据,把大单挑出来,看价格变化和交易量的关系。用线性回归就能拟合出来。
我曾经踩过一个坑:直接用全市场数据拟合α和β,结果参数很不稳定。后来发现,不同时间段的流动性差异很大——早盘和尾盘的β值能差3倍。所以我现在都是分时段拟合,早盘一套参数,午盘一套,尾盘再一套。
4.3 滑点计算
滑点,说白了就是「你以为的成交价」和「实际成交价」之间的差距。这是量化交易里最隐蔽的成本,很多人做回测时把它忽略了,结果实盘亏得莫名其妙。
滑点的构成:
- 买卖价差(Spread):你买的时候按卖一价成交,天然就比中间价高半个tick。
- 市场冲击(Impact):你的订单推高了价格,这部分就是冲击成本。
- 延迟成本(Delay):从你下单到成交,这期间价格可能已经变了。
计算滑点,我一般用这个公式:
滑点 = 实际成交均价 - 决策时的中间价
举个例子:
| 项目 | 数值 |
|---|---|
| 决策时中间价 | 10.00 |
| 实际成交均价 | 10.03 |
| 滑点 | 0.03(3个tick) |
这3个tick就是你的成本。如果你做高频交易,每天交易1000次,每次3个tick,一天下来就是3000个tick的成本——这可不是小数目。
注意:
滑点不是固定的。它跟你的订单大小、市场流动性、波动率都有关系。我建议你在回测时,至少用三种滑点假设:保守(0.5个tick)、中性(1个tick)、激进(2个tick)。这样能看出策略对滑点的敏感度。
嗯,这里要特别提醒一下:很多新手喜欢用「成交价 - 信号价」来计算滑点,但信号价本身就有延迟。我习惯用「成交价 - 下单前最后一笔成交价」,这样更贴近实际。
4.4 知识体系总览
为了让你更直观地理解本章内容,我画了一张图:
这张图把三个核心概念串起来了。瞬时冲击和永久冲击是Almgren-Chriss模型的两个组成部分,而滑点则是它们的综合体现。你理解了这张图,就掌握了本章的精髓。
实战建议:
我建议你从今天开始,在回测框架里加入滑点模块。先用固定滑点跑一遍,再用动态滑点(根据订单大小和流动性调整)跑一遍。你会发现,很多看起来赚钱的策略,加上滑点后就变成亏钱了——这才是真实的市场。
好了,这一章就到这里。记住:冲击成本是量化交易里最隐蔽的敌人,你不主动管理它,它就会悄悄吃掉你的利润。