第1章:大单交易冲击成本建模与实操
1.1 为什么冲击成本是量化交易的核心
做量化交易这些年,我见过太多人把精力全花在预测价格上。说实话,预测准了方向,最后却亏在交易执行上,这种事我遇到过不下十次。
冲击成本是什么?简单说,就是你的大单子进场时,把价格推高了(买的时候),或者砸低了(卖的时候)。你想想看,本来想买在100块,结果因为单子太大,成交均价变成了100.5。这0.5块,就是冲击成本。
我个人习惯把冲击成本分成两类:
- 永久冲击:你的交易改变了市场供需,价格回不去了
- 临时冲击:只是流动性被暂时抽干,过一会儿价格会恢复
嗯,这里要注意:很多新手只关注永久冲击,觉得临时冲击无所谓。我在实盘里吃过这个亏——有一次做股指期货,临时冲击直接吃掉了我半个月的利润。
1.2 线性冲击模型:Almgren-Chriss 基础
说到冲击成本建模,绕不开 Almgren-Chriss 模型。这个模型是2000年左右提出的,到现在还是业界主流。为什么?因为它够简单,够实用。
模型的核心假设是:冲击成本与交易速度成正比。说白了,你交易得越快,冲击越大。
数学形式是这样的:
冲击成本 = α × 交易速度 + β × 持仓变化
其中:
- α 是临时冲击系数
- β 是永久冲击系数
- 交易速度 = 成交量 / 时间窗口
我记得第一次用这个模型时,觉得它太简单了。但跑完回测才发现,简单模型往往最稳健。那些加了十几个参数的复杂模型,过拟合得一塌糊涂。
核心要点:Almgren-Chriss 模型把冲击成本拆成两部分,永久部分影响所有后续交易,临时部分只影响当前交易。这个分解非常实用。
1.3 永久冲击与临时冲击的实战区别
怎么区分永久冲击和临时冲击?我教你一个土办法:
- 下一笔小单子,看看价格变化
- 等5分钟,看看价格是否恢复
- 如果恢复了,就是临时冲击;没恢复,就是永久冲击
我在做美股的时候,发现一个规律:
| 交易品种 | 临时冲击占比 | 永久冲击占比 |
|---|---|---|
| 大盘蓝筹股 | 60-70% | 30-40% |
| 小盘股 | 40-50% | 50-60% |
| 期货(主力合约) | 70-80% | 20-30% |
为什么会这样?大盘股流动性好,临时冲击很快被做市商消化。小盘股就不一样了,你的单子可能真的改变了市场预期。
实战技巧:如果你做的是高频策略,重点关注临时冲击。如果是中长线持仓,永久冲击才是大头。我曾经有个策略,就是因为没区分这两者,回测漂亮,实盘一塌糊涂。
1.4 冲击成本函数的线性形式
线性冲击函数长这样:
I(Q) = a × Q + b × sign(Q)
其中:
- I(Q) 是冲击成本
- Q 是交易量(正数为买,负数为卖)
- a 是斜率系数
- b 是固定成本(买卖价差)
这个公式看着简单,但用起来有讲究。我建议你注意三点:
- 斜率 a 不是常数:市场深度不同,a 会变。早盘和尾盘,a 能差3倍
- 固定成本 b 可以忽略:对于大单,b 占比很小,主要看 a
- 符号函数 sign(Q):买和卖的冲击不对称,别用同一个模型
我曾经犯过一个错误:直接用全天的数据拟合 a 值。结果呢?早盘交易时,冲击成本比模型预测的大一倍。后来我才意识到,a 值应该分时段估计。
1.5 知识体系总览
下面这张图,是我做这个课程时画的。它把冲击成本建模的整个逻辑串起来了:
这张图把整个逻辑串起来了。从上往下看:先搞清楚核心问题,再区分冲击类型,然后用 Almgren-Chriss 模型量化,最后落实到实战中的参数估计和验证。
避坑指南:我曾经在实盘里直接用回测的冲击参数,结果亏了。后来才明白,回测用的是历史数据,实盘的市场环境已经变了。建议你每周重新估计一次参数,别偷懒。
1.6 小结
这一章我们聊了:
- 冲击成本的定义和分类
- Almgren-Chriss 模型的基本框架
- 永久冲击和临时冲击的实战区别
- 线性冲击函数的数学形式
嗯,内容不多,但都是基础。下一章我们会深入讲怎么用 Python 实现这个模型,包括参数估计和回测框架。到时候我会分享一些我踩过的坑,保证有用。
公众号:蓝海数据掘金营,微信 deep3321