第26章:信息与交易成本:买卖价差、市场冲击、滑点分析
做交易的人,往往只盯着价格走势看。
但我个人习惯,会先看交易成本。为什么?因为信息本身不直接赚钱,你得通过交易去变现。而交易,是有摩擦的。这个摩擦,就是成本。
说白了,你发现了一个Alpha信号,结果一进场,成本把利润全吃掉了。这种事我见过太多次了。今天我们就来拆解这三块硬骨头:买卖价差、市场冲击、滑点。
26.1 买卖价差:你进场那一刻就亏了
买卖价差,英文叫Bid-Ask Spread。这是最直接的交易成本。
你想想看,市场上永远有人想买,有人想卖。买的人出价是Bid,卖的人要价是Ask。中间的差价,就是做市商赚的,也是你作为交易者必须付出的第一笔成本。
核心公式:
买卖价差 = Ask价格 - Bid价格
相对价差 = (Ask - Bid) / MidPrice
我在项目中遇到过一只小盘股,平时成交量就几千手。它的买卖价差经常达到0.5%甚至1%。你想想,一个信号预测的收益可能也就0.3%,结果一进去就亏了。这就是典型的「信号被成本吞噬」。
26.2 市场冲击:你的订单本身就是信息
市场冲击,这是最隐蔽的成本。
你下单的那一刻,你的订单信息就已经暴露了。大单买入,价格会被推高;大单卖出,价格会被压低。这个价格变动,就是市场冲击。
为什么会这样?因为市场上有很多人在盯着订单流。他们看到大单进来,就知道「有人在做动作」,于是跟着抢跑。你的交易意图,变成了别人的交易信号。
我的经验:
我曾经做过一个统计,对于流动性一般的股票,一个市价单的市场冲击成本,大约是买卖价差的2-3倍。很多人只算了价差,没算冲击,结果策略回测很漂亮,实盘一跑就崩。
市场冲击的估算,有一个经典模型:
# 简单市场冲击模型
def market_impact(volume, avg_volume, price):
"""
volume: 你的交易量
avg_volume: 日均成交量
price: 当前价格
"""
# 比例因子,经验值通常在0.1-0.5之间
impact_factor = 0.3
# 冲击成本 = 价格 * 因子 * (交易量/日均量)^0.5
impact = price * impact_factor * (volume / avg_volume) ** 0.5
return impact
这个模型虽然简单,但很实用。你想想看,如果你的交易量占日均成交量的10%,冲击成本大约是价格的0.1%左右。如果占30%,冲击成本可能就到0.3%了。
26.3 滑点:理想与现实的差距
滑点,就是你下单时的预期价格,和实际成交价格之间的差距。
滑点包含了两部分:一部分是买卖价差,一部分是市场冲击。但滑点更偏向「执行层面」的概念。
| 滑点类型 | 产生原因 | 典型范围 |
|---|---|---|
| 流动性滑点 | 订单簿深度不足 | 0.01% - 0.5% |
| 延迟滑点 | 网络延迟、系统延迟 | 0.001% - 0.1% |
| 信息滑点 | 订单暴露后被抢跑 | 0.05% - 1.0% |
嗯,这里要注意。延迟滑点在高频交易里是致命的。我见过一个团队,他们的策略信号延迟比别人慢了5毫秒,结果滑点成本直接翻倍。5毫秒,你眨个眼都不止这个时间,但在交易里,这就是真金白银。
26.4 信息如何影响这些成本?
现在我们把信息拉进来。
信息驱动价格变动,但信息本身也会改变交易成本。这是一个双向关系。
- 信息不对称加剧价差:当市场上有人知道你不知道的信息时,做市商会扩大价差来保护自己。财报发布前,价差通常会变大。
- 信息事件放大冲击:重大消息出来后,市场深度骤降。你这时候下单,冲击成本可能是平时的5倍。
- 信息速度决定滑点:谁先拿到信息,谁就能以更好的价格成交。后知后觉的人,只能吃滑点。
避坑指南:
我曾经犯过一个错误。回测时用了收盘价作为成交价,完全没考虑滑点。结果实盘跑了一个月,收益比回测少了40%。后来一查,全是滑点吃掉的。从那以后,我所有回测都强制加上滑点模型,至少按买卖价差的一半来算。
26.5 如何量化这些成本?
量化交易里,我们通常用「实现差价」来衡量实际交易成本。
# 实现差价计算
def realized_spread(trade_price, mid_price):
"""
trade_price: 实际成交价
mid_price: 下单时的中间价
"""
# 买入时:实现差价 = 成交价 - 中间价
# 卖出时:实现差价 = 中间价 - 成交价
spread = abs(trade_price - mid_price)
return spread
我个人习惯,会在策略里内置一个成本模块。每次信号生成后,先算成本,再决定是否执行。如果预期收益覆盖不了成本,那就放弃。宁可错过,不要做错。
26.6 知识体系总览
下面这张图,把信息、交易成本、价格变动的关系画清楚了。
这张图的核心逻辑很简单:信息来了,交易者做决策,然后订单执行和市场反应同时发生。订单执行产生价差和滑点,市场反应产生冲击。最终,这些成本叠加到价格上,决定了你的实际成交价。
26.7 实战中的应对策略
说了这么多问题,总得给点解法。
- 拆分订单:大单拆成小单,减少市场冲击。我习惯用VWAP算法,把订单按成交量分布拆开。
- 选择时机:避开信息密集发布的时间段。财报、经济数据公布前后,价差和冲击都大。
- 使用限价单:市价单虽然成交快,但成本高。限价单可以控制成本,但可能成交不了。这是个取舍。
- 监控流动性:实时看买卖盘口的深度。深度不够时,宁可等一等。
一个小技巧:
我每次跑策略前,会先跑一个「成本压力测试」。把买卖价差放大到平时的2倍,冲击成本放大到3倍,看看策略还能不能赚钱。如果能,那实盘基本稳了。如果不能,说明策略的利润空间太薄,需要优化。
交易成本这东西,说白了就是市场的摩擦力。信息是你的动力,但摩擦力会消耗你的动力。只有把摩擦力算清楚,你才知道你的车到底能跑多远。