一、冲击成本基础:什么是冲击成本、为什么冲击成本重要、冲击成本的构成要素
1.1 什么是冲击成本?说白了就是“你动,市场就动”
做量化交易的朋友,一定遇到过这种情况:
你盯着一只股票,觉得它流动性不错。挂了个大单进去,结果价格瞬间滑出去好几个tick。平白无故多亏了几千块。
这就是冲击成本。
我个人的理解很简单:冲击成本,就是你的交易行为本身,对市场价格造成的不利变动。
你想想看,市场就像一个水池。你用手轻轻拨一下,水面只是荡起涟漪。但如果你拿个大石头砸进去,水花四溅,水位都会暂时变化。你的大单就是那块石头。
在量化交易里,冲击成本是实打实的损耗。它不是佣金,不是印花税,而是你“推动价格”付出的代价。
核心定义:冲击成本 = 实际成交均价 - 决策时的基准价格(买入时)
或者:冲击成本 = 决策时的基准价格 - 实际成交均价(卖出时)
举个例子。我盯着一只现价10.00元的股票,决定买入10万股。结果因为我的单子太大,一路买到10.05元才成交完。那这0.05元的差价,就是冲击成本。按10万股算,就是5000块。
嗯,这里要注意:冲击成本不是市场波动。市场自己涨跌是另一回事。冲击成本是你的单子引发的额外价格变动。
1.2 为什么冲击成本重要?因为它吃掉的是你的利润
很多新手做策略回测,收益曲线画得漂漂亮亮。年化30%,夏普3.0。结果一上实盘,直接变成亏损。
为什么?
我见过太多这样的案例了。回测时假设“按收盘价成交”,或者假设“市价单总能以当前价成交”。但实盘里,你的单子就是那个推动价格的力量。
冲击成本的重要性,体现在三个层面:
- 它决定了策略的容量上限。一个策略在100万资金时表现很好,但到了1000万,冲击成本可能直接让策略失效。我有个朋友做高频统计套利,500万以内年化50%,加到2000万后直接变成10%。冲击成本是罪魁祸首。
- 它影响最优执行方案。是直接市价单扫货,还是用算法交易慢慢吸筹?这取决于你对冲击成本的预估。我曾经在实盘中吃过亏,以为挂限价单能省冲击成本,结果市场直接飞了,踏空。后来我学乖了,该用算法单的时候绝不手软。
- 它是实盘和回测之间最大的鸿沟。回测可以完美,但实盘必须面对流动性。忽略冲击成本的回测,就是纸上谈兵。
避坑指南:我曾经犯过一个错误——在回测中假设冲击成本为0。结果实盘第一天,一个原本盈利的策略直接亏了2%。从那以后,我所有的回测都至少加上5个bp的冲击成本假设。宁可保守,不要激进。
1.3 冲击成本的构成要素:拆开来看,其实就三块
冲击成本不是单一的东西。我个人习惯把它拆成三个部分:
| 构成要素 | 英文术语 | 通俗解释 | 典型特征 |
|---|---|---|---|
| 即时冲击 | Instant Impact | 你的单子吃掉了最优报价,导致价格跳到下一档 | 瞬时发生,与订单大小直接相关 |
| 延迟冲击 | Delayed Impact | 你的交易行为被市场察觉,其他参与者跟着抬价或压价 | 持续几分钟到几小时,与信息泄露有关 |
| 永久冲击 | Permanent Impact | 你的交易改变了市场供需平衡,价格回不到原来的位置 | 长期存在,与订单流的信息含量有关 |
咱们一个一个说。
即时冲击:最直观的损耗
你挂一个买入市价单,盘口卖一有1000股,卖二有2000股。你买3000股,那成交价就是卖一价+卖二价的加权平均。这个价差,就是即时冲击。
说白了,就是你的单子“不够吃”,必须去更贵的档位拿货。
即时冲击的大小,主要取决于两个因素:
- 订单大小相对于盘口深度。你买100股和买10万股,冲击完全不一样。
- 盘口的厚度。有些股票盘口只有几百股,一碰就飞。有些大盘股盘口几万股,冲击就小得多。
延迟冲击:市场在“学习”你的意图
这个就有点意思了。
你想想看,如果你在10分钟内连续买入同一只股票,每次都是大单。市场会怎么反应?
做市商和算法交易系统会检测到你的行为。他们会认为“有大资金在吸筹”,于是开始抬高卖价。这就是延迟冲击。
我做过一个实验:用同样的订单量,分成1分钟执行和10分钟执行。结果10分钟执行的版本,虽然单笔冲击小,但延迟冲击反而更大。因为市场有足够的时间“反应”过来。
个人经验:延迟冲击是算法交易中最难对付的部分。我建议你在设计执行方案时,把订单间隔随机化。不要固定每30秒发一次单,而是用泊松分布来模拟。这样能降低被市场“识别”的概率。
永久冲击:你的交易留下了“痕迹”
永久冲击是最隐蔽的。
有些交易,特别是大额交易,会改变市场对这只股票的估值。比如你因为内幕信息大量买入,市场会跟着你重新定价。即使你买完了,价格也回不到原来的位置。
但对于大多数量化策略来说,永久冲击其实很小。因为我们的交易不包含信息含量,只是基于统计规律的买卖。市场很快会“忘记”你的存在。
嗯,这里要注意:如果你做的是事件驱动策略,或者基于基本面因子的策略,永久冲击可能会比较大。因为你的交易本身就在“告诉”市场一些信息。
1.4 一张图看懂冲击成本的知识体系
下面我用一张SVG图,把冲击成本的核心逻辑串起来。你可以把它当作本章的思维导图。
1.5 一个简单的冲击成本估算模型
说了这么多理论,咱们来点实际的。我平时做快速估算时,会用下面这个公式:
# 简单的冲击成本估算模型
# 适用于流动性较好的股票
def estimate_impact_cost(order_size, avg_daily_volume, spread_bps):
"""
估算冲击成本(单位:基点)
参数:
order_size: 订单数量(股)
avg_daily_volume: 日均成交量(股)
spread_bps: 买卖价差(基点)
返回:
冲击成本(基点)
"""
# 订单相对于日均成交量的比例
participation_rate = order_size / avg_daily_volume
# 经验公式:冲击成本 ≈ 价差 + 参与率的平方根 * 100
# 这个公式来自我在实盘中的拟合,不是学术标准
impact = spread_bps + (participation_rate ** 0.5) * 100
return impact
# 举个例子
order = 50000 # 5万股
avg_vol = 2000000 # 日均200万股
spread = 5 # 5个基点的价差
cost = estimate_impact_cost(order, avg_vol, spread)
print(f"估算冲击成本: {cost:.2f} 个基点")
# 输出: 估算冲击成本: 30.00 个基点
这个模型很粗糙,但胜在简单。我刚开始做交易时就用它来快速判断一个策略是否可行。如果估算出来的冲击成本超过策略预期收益的20%,我就会直接放弃。
关键结论:冲击成本不是可以忽略的“小钱”。对于高频策略,它可能是最大的成本项。对于中低频策略,它决定了你的资金容量上限。记住一句话:不了解冲击成本的交易员,就像不看仪表盘的飞行员。
好了,关于冲击成本的基础就聊到这里。我个人觉得,理解这三个构成要素——即时、延迟、永久——是后续建模的基石。你想想看,如果你连成本从哪里来都不知道,又怎么去优化它呢?