一、滑点与冲击成本概述
做量化交易的朋友,一定都遇到过这种情况:明明策略信号是赚钱的,可实际跑下来却亏了。问题出在哪?
我刚开始做量化那会儿,也踩过这个坑。回测曲线漂亮得不行,实盘一跑就变样。后来才明白,滑点和冲击成本这两个东西,才是实盘和回测之间最大的鸿沟。
什么是滑点?
滑点,说白了就是「你看到的成交价」和「实际成交价」之间的差价。
举个例子:你看到某股票当前报价是10.00元,果断下单买入。结果成交价是10.02元。这0.02元就是滑点。
为什么会这样?因为市场在动。从你看到价格到订单到达交易所,这中间有网络延迟、有排队等待。尤其是行情剧烈波动时,价格可能瞬间就变了。
滑点的本质:理想价格与实际执行价格之间的偏差。
我个人习惯把滑点分成两类:
- 显性滑点:买卖价差造成的。比如买一价10.00,卖一价10.01,你市价买入,自然成交在10.01。
- 隐性滑点:市场波动造成的。从你决定下单到成交,价格已经变了。
什么是冲击成本?
冲击成本,就是你的订单本身对市场价格造成的影响。
你想想看,如果你要买入100万股某只股票,而当前卖盘总共只有50万股。你的大单会把价格一路推高。最后成交均价可能比最初的价格高出不少。这部分额外成本,就是冲击成本。
我在项目中遇到过一只小盘股,流动性很差。策略信号说要买入,我下了个市价单,结果直接把价格拉高了3%。那笔交易虽然方向对了,但冲击成本吃掉了一大半利润。嗯,从那以后我再也不敢忽视流动性问题了。
一个简单的判断方法:如果你的订单量超过了市场深度的5%,冲击成本就会显著上升。
滑点和冲击成本的区别
| 维度 | 滑点 | 冲击成本 |
|---|---|---|
| 产生原因 | 市场波动 + 买卖价差 | 自身订单影响价格 |
| 与订单量的关系 | 弱相关 | 强相关 |
| 可预测性 | 较难预测 | 可以建模估算 |
| 控制手段 | 限价单、算法交易 | 拆分订单、时间加权 |
简单来说:滑点是市场「本来就在动」,冲击成本是你「把市场推得更动」。
为什么它们对量化交易至关重要?
这个问题,我可以用一句话回答:回测不考虑滑点和冲击成本,就是纸上谈兵。
量化交易的核心逻辑是「用历史数据验证策略,然后实盘执行」。但历史数据里的成交价,是假设你「不影响市场」的情况下得到的。实盘里,你的每一笔交易都在影响市场。
具体来说,有三个方面:
- 策略容量受限:一个在100万资金下年化50%的策略,放到1个亿可能就变成10%。为什么?冲击成本吃掉了大部分收益。
- 高频策略尤其敏感:高频交易赚的就是微小的价差。一个滑点可能就把利润全吞了。我曾经有个高频策略,回测年化80%,实盘加了滑点模型后只剩25%。
- 影响策略选择:有些策略在考虑滑点后完全失效,有些反而表现更好。比如趋势跟踪策略对滑点相对不敏感,而均值回归策略对滑点极其敏感。
注意:很多新手做回测时,只加一个固定滑点(比如万分之三)。这远远不够。滑点和冲击成本是动态变化的,跟市场状态、订单量、交易频率都有关系。
核心知识体系
下面这张图,是我自己整理的本章节知识结构。你可以把它当作一个地图,后面几节都会围绕这些概念展开。
这张图把本章的核心逻辑串起来了。左边是滑点的三个来源,右边是冲击成本的两个主要因素,底部是它们对量化交易的影响。你可以在后续章节中反复对照这张图来理解。
一个简单的代码示例
下面这个Python函数,是我早期做回测时用的滑点模拟。虽然简单,但能帮你理解滑点是怎么影响收益的。
def simulate_slippage(price, order_type, slippage_bps=3):
"""
模拟滑点对成交价的影响
:param price: 当前市场价格
:param order_type: 'buy' 或 'sell'
:param slippage_bps: 滑点,单位是基点 (1 bps = 0.01%)
"""
slippage_factor = slippage_bps / 10000
if order_type == 'buy':
# 买入时,实际成交价更高
executed_price = price * (1 + slippage_factor)
else:
# 卖出时,实际成交价更低
executed_price = price * (1 - slippage_factor)
return executed_price
# 举个例子
market_price = 100.0
buy_price = simulate_slippage(market_price, 'buy', slippage_bps=5)
print(f"市场价: {market_price}, 买入成交价: {buy_price:.2f}")
# 输出: 市场价: 100.0, 买入成交价: 100.05
小提示:实际项目中,滑点不是固定的。我一般会根据历史数据统计出滑点的分布,然后做蒙特卡洛模拟。这样更接近真实情况。
好了,这一节就到这里。滑点和冲击成本是量化交易里绕不开的两个概念。理解了它们,你才能做出更靠谱的回测,也才能避免实盘翻车。
公众号:蓝海资料掘金营,微信deep3321