4. 交易成本模型:显性成本与隐性成本
做量化交易,尤其是做高频或者大单执行的时候,成本控制是命门。很多人只盯着策略的收益率,却忽略了交易成本这个「隐形杀手」。我见过太多策略在回测里跑得漂亮,一上实盘就亏钱,十有八九是成本模型没建对。
今天我们就来拆解一下交易成本。说白了,它分两类:显性成本和隐性成本。显性成本是明码标价的,佣金、税费这些,看一眼交割单就清楚。隐性成本就狡猾多了,冲击成本、延迟成本、机会成本,它们看不见摸不着,但每一笔都在啃噬你的利润。
核心观点: 显性成本是「硬支出」,隐性成本是「软损耗」。对于大资金、高频交易来说,隐性成本往往比显性成本高出几个数量级。
4.1 显性成本:佣金与税费
先讲简单的。显性成本就是交易所、券商、监管机构明着收你的钱。这部分没什么技术含量,但你不能忽视。
- 佣金: 券商收的服务费。现在国内很多券商已经卷到「万一免五」了,但机构客户通常还能谈得更低。我个人习惯把佣金分成「固定部分」和「比例部分」。固定部分适合小单,比例部分适合大单。
- 印花税: 目前A股是卖出时收千分之一。这是国家收的,没得商量。做高频策略时,印花税是最大的显性成本,没有之一。
- 过户费、经手费、证管费: 这些杂费加起来虽然不多,但积少成多。我建议你在回测时把这些费用全部算进去,别偷懒。
我的经验: 曾经有个团队做ETF套利,回测年化收益20%,结果实盘只有12%。一查,就是漏算了印花税和过户费。嗯,这种坑我踩过一次就记住了。
4.2 隐性成本:真正的「利润杀手」
隐性成本才是我们今天要聊的重点。为什么叫「隐性」?因为它不直接体现在交易流水里,而是通过滑点、延迟、错失机会等方式体现出来。
4.2.1 冲击成本
冲击成本,说白了就是「你的订单把价格打偏了」。你买的时候,价格被你推高了;你卖的时候,价格被你砸低了。这个差价就是冲击成本。
冲击成本跟订单规模、市场流动性、订单类型都有关系。我常用的一个简化模型是:
冲击成本 = α × (订单量 / 市场深度) × 波动率
其中α是一个经验系数,不同市场、不同品种差异很大。我在做股指期货时,α大概取0.3;做小盘股时,α可能到0.8甚至更高。
注意: 冲击成本不是线性的。订单量越大,边际冲击成本越高。你想想看,如果你要买100万股,前10万股可能只推高0.1%,后10万股可能推高0.5%。这就是为什么大单要拆单执行。
4.2.2 延迟成本
延迟成本,就是「你下单到成交这段时间里,价格跑掉了」。做高频交易的人对这个最敏感。我记得有一次做期货跨期套利,信号出来到下单只差了50微秒,结果价格已经滑了2个tick。50微秒啊,眨个眼都不止这个时间。
延迟成本主要来自三个方面:
- 网络延迟: 你的服务器到交易所的距离。所以做高频的人都在抢机房位置,离交易所越近越好。
- 系统处理延迟: 你的策略计算、风控检查、订单编码这些环节。我建议用C++或者FPGA来优化这部分。
- 交易所撮合延迟: 这个你控制不了,但可以选择流动性好的品种来降低影响。
4.2.3 机会成本
机会成本最容易被忽略。它指的是「因为没成交而错过的收益」。比如你挂了一个限价单,价格到了但没成交,然后价格就一路涨上去了。你不仅没赚到钱,还浪费了资金占用。
机会成本跟你的订单激进程度直接相关。挂市价单,冲击成本高但机会成本低;挂限价单,冲击成本低但机会成本高。这是一个trade-off。
我的建议: 做执行算法时,一定要把机会成本量化。我习惯用「未成交部分的预期收益」来估算机会成本。比如你挂了1000手,只成交了800手,那200手如果涨了1%,机会成本就是2手的价格收益。
4.3 成本模型总览
下面这张图是我自己整理的成本模型框架。你可以看到,显性成本和隐性成本是两条线,最终汇合到「总交易成本」。
4.4 如何量化这些成本?
光知道概念没用,你得能算。下面是我在实际项目中用的成本估算方法。
| 成本类型 | 估算方法 | 典型值(A股) |
|---|---|---|
| 佣金 | 成交金额 × 佣金费率 | 万分之一到万分之三 |
| 印花税 | 卖出金额 × 0.1% | 千分之一(仅卖出) |
| 冲击成本 | α × (订单量/深度) × 波动率 | 0.05% ~ 0.5% |
| 延迟成本 | 延迟时间 × 价格变化率 | 0.01% ~ 0.1% |
| 机会成本 | 未成交比例 × 后续价格变动 | 0.1% ~ 1% |
避坑指南: 我曾经在回测中只算了冲击成本,忽略了延迟成本。结果实盘时,因为网络延迟导致滑点比预期大了3倍。后来我学乖了,在回测里加了一个「延迟模拟器」,把网络抖动也考虑进去。
4.5 实战中的成本控制策略
知道了成本怎么算,接下来就是怎么控。我总结了几条经验:
- 拆单执行: 大单拆成小单,降低冲击成本。但拆得太碎会增加延迟成本和机会成本。这里有个最优拆单频率,需要根据市场流动性动态调整。
- 选择交易时段: 开盘和收盘时流动性最好,冲击成本最低。但这时候竞争也激烈,延迟成本可能上升。我一般选择在开盘后15分钟到收盘前15分钟之间执行大单。
- 使用算法交易: TWAP、VWAP、Implementation Shortfall 这些算法,本质上就是在帮你平衡各种成本。我个人比较喜欢用IS算法,因为它直接以「最小化总成本」为目标。
- 监控市场微观结构: 订单簿的深度、买卖价差、挂单量变化,这些都能帮你预判冲击成本。我习惯在策略里实时计算「流动性指标」,动态调整下单速度。
一句话总结: 交易成本不是「事后算账」,而是「事前规划」。你把成本模型建好了,执行算法才能跑出好效果。
公众号:蓝海资料掘金营,微信deep3321