事后 TCA 与归因:度量发生了什么、为什么
事后 TCA 的意义不在报告本身,而在反馈环:量出实现成本、分解成成分、归因到 broker/算法/场所,再把结果喂回事前模型。环闭上了,明天的执行才会比今天好。
你下单了。市场动了。你成交了。然后呢?
“然后呢”就是事后 TCA:昨晚的分析告诉你昨天的执行好不好、花了多少钱、为什么。事前估计有用,实时跟踪有用,但真正的学习发生在事后归因里——这也是执行交易员保住饭碗或者丢掉饭碗的地方。Harris (2003, 第 23 章) 把话说得很重:事后 TCA 是买方在执行质量上仅有的反馈机制。没有它,desk 在蒙眼飞行;有了却不用,desk 手里有信息却在浪费。
难的部分从来不是算数字。TCA 供应商很乐意替你算,配上漂亮的图表和一排基准。难的是两件事:把数字读对,以及让它反馈到明天的执行。这篇文章的主线就是那个环——量、分解、归因、校准、回到事前——以及环上每一节容易断掉的地方。基准本身的偏差(VWAP 奖励什么、到达价惩罚什么)上一篇已经讲透,这里默认你带着那副眼镜来读。
原材料:事后报告里有什么
一份标准的事后报告,对每个父单给五层东西:订单元数据(股票、方向、规模、发送与完成时间、broker、算法);逐笔成交数据(每笔子成交的时间戳、价格、场所、对手侧);基准比较(成交均价对到达价、VWAP、TWAP、收盘价以及任何自定义基准);成本分解(点差、冲击、时机、机会四成分);还有上下文(当天波动率、当天成交量、新闻事件、同伴对比)。供应商交付的形式可能是 PDF 也可能是 API,格式不重要——解读才重要。
表头数字不会自己说话
最常见的错误就是看到表头数字就停下。表头写着:“订单 XYZ123 买入 AAPL 50,000 股,成交均价 $195.47,到达价 $195.30,滑点 +17 美分 = +8.7 bp。”
8.7 bp 看着糟。真糟吗?没有上下文这个数字什么都不是。当天波动率多大——2σ 的日子里 8.7 bp 可能完全正常。你的参与率多高——如果你占了成交量的 15%,8.7 bp 算出色。点差多宽——点差本身 5 bp 的话,超出点差的部分只有 3.7 bp,那才是冲击。有没有新闻——AAPL 下午 4:30 出财报,价格动是因为财报,不是因为你的单。
上下文里还藏着几个把读数直接搞错的技术性陷阱。基准区间要和订单的工作区间对齐:订单 9:55 发出,拿 10:00–10:30 的 VWAP 当基准就是错的。隔夜跳空不能算到执行头上:早上 9:30 发的买单对着上周五收盘价量滑点,是把跳空记在了你账上。这两条听起来低级,但在自动化报告流水线里经常悄悄发生。
分解:把一个数拆成四个原因
标准分解和事前 TCA 那篇一致:
事后与事前的区别只在于:每一项现在用实现的成交和实现的市场数据来算,是已知数不是估计。
点差成本按每笔成交当时的半点差记账,被动成交记负值。一个买单,点差 2 美分(半点差 1 美分),60% 的量在卖价成交、40% 在买价成交,点差成本就是 美分每股——在卖价成交付半点差,在买价成交省半点差,两边要轧差。冲击是刨掉点差和时机之后归于你的订单本身的价格让步:冲击 = (成交均价 − 到达价) − (期末中间价 − 期初中间价的漂移份额) − 点差成本。时机是工作区间内的中间价漂移应用到已成交规模:股票在你干活的 30 分钟里上漂了 0.5%,时机成本就是 0.5% 乘以已成交部分。机会是没成交的那部分股票上的价格变动:只完成了 80%,剩下 20% 的名义金额在你放弃之后又贵了 1%,机会成本约等于 1% × 20% × 订单名义金额。
两条纪律。第一,四项加总必须等于相对到达价的总差额,对不上就是分解错了。第二,别把点差算两遍:如果冲击已经用”成交价减成交时中间价”度量,就不能再把半点差塞进别的成本项——冲击应该是超出点差的那部分让步。
归因:从成分到原因
分解回答”钱花在哪”,归因回答”该记在谁头上”。昨天 AAPL 上那 8.7 bp 里,多少是 broker 的问题、多少是算法的问题、多少是场所的问题、多少纯粹是当天市场的问题?维度有五个,每个都值得单独拆。
哪个 broker:同类订单在不同 broker 之间比成交质量,冲击持续少 1–2 bp 的 broker 值得更多流量。哪个算法:broker 提供 VWAP、POV、IS 多种算法时,你想知道哪个算法在什么条件下对什么股票最好。哪个场所:逐笔成交看流动性来自哪里——亮池、暗池、内部化方的成本分布各不相同。什么时段:开盘干的单和午盘干的单成本分布不同,知道差异才能安排时间。什么波动率情景:高波动日所有成本一起涨,评 broker 必须同类比同类。
“同类比同类”值得展开,因为它是归因里最容易糊弄过去的一步。在所有订单上取平均,等于把 50,000 股 AAPL 和 50,000 股小盘股当同一种东西——点差不同、深度不同、冲击分布不同,平均出来的数没有意义。正确做法是同伴组:小盘单对你们自己的其他小盘单比,大盘单对大盘单比,在股票-规模同伴组内看每个 broker 的表现。多数 TCA 供应商都提供同伴组比较,用它。一个小盘做得好、大盘做得差的 broker 完全可能存在,“最佳 broker”取决于你在交易什么。时间维度同理:周一通常更波动(周末新闻积压),周五更安静,月末有再平衡流量,假日前清淡。比较 broker 时控制住周内效应——能把周一早上处理好的 broker,比只在周五下午好看的值钱。
归因最常见的落地形式是 broker 评分卡。对每个 broker 按季度统计所有订单的平均 IS、平均点差成本、平均冲击、IS 的方差、成交率、信息泄露指标,以及分算法的表现,再按订单特征(规模、紧急度、股票类型)加权,做成可比的横截面:
| 度量 | Broker A | Broker B | Broker C |
|---|---|---|---|
| 平均 IS(bp) | 4.2 | 5.8 | 6.1 |
| 平均冲击(bp) | 2.1 | 3.4 | 3.8 |
| 平均时机(bp) | 1.3 | 1.5 | 1.7 |
| 成交率 | 98% | 95% | 99% |
| 方差(bp²) | 12 | 28 | 14 |
| 单数 | 1,247 | 1,189 | 1,098 |
读法:Broker A 平均上最好;Broker C 成交率最高但成本最差;Broker B 方差最大——对风险厌恶的 desk,方差本身就是成本。
算法比较有一个专属陷阱。单个 broker 内你可以比 VWAP、POV、IS、寻流、只暗池这些算法,但正确的问题不是”哪个整体最好”,而是”哪个对哪种单最好”:量可预测的小盘低量单适合 VWAP,流动大盘无紧急度的单适合 POV,高 alpha 紧急单适合 IS,难成交的名字上寻流。而且评分的尺子会预定胜负——用到达价评所有算法,IS 算法赢(它就是冲着最小化到达差额设计的);用 VWAP 评,VWAP 算法赢。基准选择在多数情况下比算法选择更能决定结论,这正是上一篇讲的”没有基准是中性的”在归因环节的具体报应。
泄露探测:最难的归因
有一类成本不该出现在任何成分里:你的订单信息在成交前就漏了出去。探测思路是看订单到达场所前几秒到几分钟的市场行为——价格在你成交前夕持续不利移动、特定对手方的报价活动增加、你的单到场所之前出现成交量尖峰、你成交之后价格往回走(回归),这些都是有人先你一步的迹象。
def detect_leakage(fills, market_data, window_seconds=30):
"""探测每笔成交前夕的不利价格变动。"""
flags = []
for ts, price, side in fills:
pre_window = market_data[(ts - window_seconds):ts]
if side == 'buy' and pre_window['price'].pct_change().sum() > 0.001:
flags.append((ts, 'adverse_pre_fill'))
return flags
这是玩具版。真实的泄露探测要做完整的统计检验,并控制整体市场变动;商用产品(Markit 一脉,几经并购现在归在 S&P Global 旗下)会逐笔成交打”泄露分数”。归因结论一旦指向泄露,处理方式也最简单粗暴:换 broker 或换场所,不用留恋。
校准:把事后喂回事前
环的关键一跳在这里。最简单的校准是逐单跟踪实现成本对预测成本的偏差:
偏差持续为正,说明事前模型系统性低估成本;持续为负则高估。更讲究一点,把实现成本对预测成本加股票特定因子做回归:
用历史数据拟合 、、,拟合出来的模型就是更新后的事前估计器。实操中 经常是几个 bp——模型没覆盖的固定成本,佣金费项之类; 接近 1.0 说明模型量级大致对; 因股票而异,有些名字就是系统性地更贵。
把校准放进完整的环里看:
- 事前:用历史模型估计订单成本。
- 实时:订单工作期间对基准跟踪。
- 事后:量实现成本对估计,分解,归因。
- 校准:用实现成本更新事前模型。
- Broker 反馈:把结果与 broker 沟通,调整流量分配。
- 算法选择:按实证表现更新算法选择规则。
- 回到事前:下一笔单用更新后的模型。
跳过第 4 步,环就断了。多数 shop 恰恰断在这里——不是不想做,是没有把事前预测和事后实现对到同一条数据管道上的基础设施。做到了的 shop 有真实的复利优势:事前估计随时间变准,执行决策跟着变好。这个优势可以粗算:一个年成交 $5B、平均成本 10 bp 的 desk,一年的执行成本是 $5M;执行质量改善 2 bp 就是每年 $1M,而拿到这 2 bp 所需的 TCA 基础设施只花 $1M 的一小部分。反过来,TCA 做得差的成本就是坏决策的成本——评分卡因为基准用错而排错序,流量给了错的 broker;泄露被忽略,亏钱的通道继续用;成本不分解,你分不清糟糕的一天是自己的错还是市场的错。
数字的几种典型表情
环跑起来之后,事后数字会反复出现几种模式,每种都指向一个动作。冲击高、点差成本低:你太激进、频繁跨点差,考虑放慢或多挂被动单。时机成本高、冲击低:你等得太久,市场在你耐心的时候朝不利方向走,考虑更快执行或更早开始。机会成本高:订单没做完,要么规模对水平期太大,要么算法太被动。对所有基准都持续为正差额:broker 在跑输,去查。方差高:有些单很好有些很糟,要么算法不稳定,要么订单混合太异质、需要分开对待。泄露指标亮灯:前面说过,换。
诚实:对内和对外
最有用的事后报告是承认”我们做错了”的那份;最没用的是替自己开脱的那份。一个报告”所有单都跑赢基准”的交易员,要么用错了基准,要么在挑数据;一个报告”这个季度平均亏 3 bp”的交易员在说真话——而说真话的交易员会随时间变好。这对 PM 有直接含义:奖励诚实报告,别惩罚。交易员因为承认错误被炒,下一个交易员就不会承认错误,整个 TCA 职能从此变成表演。
对外同理。好 broker 的 TCA 数字应该和你自己算的对得上:他们说 4 bp、你用同样数据算出 6 bp,就有人算错了。专业的 broker 会跟你对账;差的 broker 只会说”我们的数对,你的错”,不给解释——这是红旗。不愿对账的 broker,换掉。执行本来就难,没必要再跟一个数字不可信的对手方合作。
反事实的边界
事后 TCA 有一个绕不开的认识论局限:它量的是你付了什么,不是你在别的策略下会付什么。一笔订单只能执行一次,没法回放换个算法重来,所以一切事后分析都是观察性的,不是实验性的。最接近实验的做法是并行测试:把同一笔大单 50/50 拆给两个 broker 或两个算法同时跑,直接比。缺点明摆着——每一半只有一半规模,动力学变了——但即便带噪声,这仍是你能拿到的最干净的对照数据,有些 shop 把它做成了例行制度。
组织、频率与合规
把以上拼成一个能运转的体系,认真的买方 desk 需要六个组件,且每个喂下一个:事前成本估计器、实时 TCA dashboard、事后报告系统、校准引擎、broker 评分卡、泄露探测。实时和事后各有受众——实时给正在干活的交易员管单,事后给想知道发生了什么的 PM 和更新模型的分析师,两者靠同一条数据管道集成。报告节奏按用途分层:每天出给交易员抓离群点,每周给首席交易员审查,每月给 PM 看执行质量,每季度出 broker 评分卡支撑分配决策,每年给 CIO 和合规。日报抓问题快,季报抓结构性问题。
合规不是附带品。在欧洲 MiFID II 和美国 best execution 规则下,公司必须能证明为客户拿到了最佳执行,事后 TCA 报告就是证据:要有文档(至少保留 5 年)、定期审查(至少每年)、可操作(真的用在 broker 分配上)、且独立——broker 自己提供的报告单独不算数。多数公司由独立于交易 desk 的 TCA 团队负责这件事,独立性不是官僚要求:交易员审查自己的执行,利益冲突明摆着。
落到交易员个人,这一切压缩成一个早晨的例行动作:打开 dashboard 审昨天的单、标离群点;用自己的成交数据核对 broker 报告、记下差异;看算法表现,跑输的考虑换;实现成本和估计差太远就重新标定;有大问题向 PM 亮出来,没有就简短总结。每天做这套的交易员知道什么管用什么不管用;不做的,只能在被 PM 质问时被动应付。
收尾清单
对照着检查你的 desk:
- 每笔单每天算 IS。
- 分解成点差、冲击、时机、机会。
- 归因到 broker、算法、场所。
- 在同伴组内比较。
- 跑泄露探测。
- 每季校准事前模型。
- 每季更新 broker 评分卡。
- 对账 broker 报告与自己的报告。
- 为合规记录一切。
- 把洞察实时反馈给交易员。
十条全做,你在最好的那批 desk 里;做到五条,平均水平;不到三条,你在蒙眼飞行。
参考文献
- Harris, L. (2003). Trading and Exchanges: Market Microstructure for Practitioners. Oxford University Press. 第 23 章。ISBN: 978-0-19-514470-3.
- Perold, A. F. (1988). “The Implementation Shortfall: Paper Versus Reality.” Journal of Portfolio Management, 14(3), 4-9.
- Almgren, R., & Chriss, N. (2000). “Optimal Execution of Portfolio Transactions.” Journal of Risk, 3(2), 5-39.
- Bertsimas, D., & Lo, A. W. (1998). “Optimal Control of Execution Costs.” Journal of Financial Markets, 1(1), 1-50.
- Kissell, R., Glantz, M., & Malamut, R. (2004). Optimal Trading Strategies. AMACOM.