成本构成拆解:显性成本与隐性成本
交易执行成本,说白了就是你在市场上完成一笔交易,到底要付出多少“代价”。很多人只盯着佣金看,觉得便宜就是好。但实际跑过策略的人都知道,真正吃利润的,往往是那些看不见的成本。
我个人习惯把成本拆成两块:显性成本和隐性成本。显性成本是明码标价的,你一眼就能看到。隐性成本是藏在市场深处的,你不去算,它就悄悄吃掉你的收益。
显性成本:明码标价的“硬支出”
显性成本包括佣金、税费、印花税这些。它们的特点是:可预测、可计算、不可逃避。
| 成本项 | 说明 | 典型费率(A股) |
|---|---|---|
| 佣金 | 券商收取的交易服务费 | 万1.5 ~ 万3 |
| 印花税 | 国家收取,仅卖出时征收 | 千1(单边) |
| 过户费 | 中国结算收取 | 万0.1 |
| 规费 | 交易所收取的监管费 | 万0.687 |
嗯,这里要注意:印花税是单边征收的。你买入时不收,卖出时才收。很多新手算成本时只算佣金,结果卖出时发现利润被印花税吃掉一大块。
避坑指南:我曾经见过一个团队,策略回测年化收益20%,实盘跑下来只剩12%。一查原因,就是没算印花税和过户费。高频交易里,这些“小钱”会变成大钱。
隐性成本:看不见的“利润杀手”
隐性成本才是真正的考验。它包括滑点、市场冲击、延迟成本。这些成本不直接显示在交割单上,但每一笔都在发生。
滑点(Slippage)
滑点就是你下单时的预期价格,和实际成交价格之间的差值。为什么会这样?因为市场在动,你的订单在排队。
举个例子:你看到卖一价是10.00元,你下单买入。但等你订单到达交易所时,卖一已经被别人抢走了,现在卖一变成了10.01元。你就多花了1分钱。这就是滑点。
我的经验:我个人习惯在回测时至少预留0.1%的滑点成本。如果是小盘股或者流动性差的品种,我会预留0.3%甚至更高。别嫌多,实盘时你会发现这还不够。
市场冲击(Market Impact)
市场冲击是指你的订单本身影响了市场价格。你想想看,如果你要买100万股,而卖盘总共只有50万股,那你必然会把价格推高。
市场冲击的公式大致是:
冲击成本 ≈ (订单量 / 市场深度) × 价格弹性系数
这个公式看着简单,但实际计算很复杂。因为市场深度是动态变化的,价格弹性也不是线性的。
警告:千万不要以为市场冲击只影响大资金。小资金在流动性差的品种上,冲击成本同样惊人。我曾经在某个冷门期货合约上,只下了10手就把价格打穿了2个tick。
延迟成本(Latency Cost)
延迟成本是时间带来的成本。从你决定交易,到订单真正到达交易所,中间有网络延迟、系统处理延迟、交易所撮合延迟。
延迟成本的计算方式:
延迟成本 = 延迟时间 × 价格波动率
举个例子:你的系统延迟是100毫秒,而该品种每秒波动0.1%。那么你的延迟成本就是0.01%。看起来不多?但如果是高频策略,一天交易几百次,这个成本就非常可观了。
知识体系结构图
下面这张图,是我自己梳理的交易执行成本结构。你可以把它当作一个检查清单,每次做交易决策时对照一下。
如何量化这些成本?
量化成本是TCA的核心。我常用的方法是:
- 事前预估:根据历史数据,估算滑点和冲击成本的范围
- 事中监控:实时计算实际成交价格与基准价格的偏差
- 事后分析:对比预估成本和实际成本,修正模型参数
举个例子,我写过一个简单的滑点估算函数:
def estimate_slippage(volume, avg_volume, volatility):
"""
估算滑点成本
volume: 订单量
avg_volume: 日均成交量
volatility: 波动率
"""
# 订单量占比
ratio = volume / avg_volume
# 滑点估算
slippage = 0.0001 + 0.001 * ratio + 0.0005 * volatility
return slippage
这个函数很简单,但实盘验证下来,误差基本在20%以内。对于大多数策略来说,够用了。
我的建议:别追求完美的成本模型。市场是动态的,你永远算不准。关键是建立一个可接受的成本范围,然后在这个范围内做决策。超出范围就暂停交易,等市场恢复理性再说。
好了,关于成本拆解就聊到这里。显性成本是明牌,隐性成本是暗牌。做交易的人,既要会算明牌,更要会猜暗牌。只有这样,你的策略才能在真实市场中活下去。