第 21a 章 交易成本度量(上):价格基准法
对应 Harris《Trading and Exchanges》Part VI 导言与第 21 章 “Liquidity and Transaction Cost Measurement” 的前半部分(21.1–21.4)。第 21 章是全书与量化落地联系最紧的一章,几乎就是今天交易成本分析(transaction cost analysis, TCA)的完整框架。本书把它拆成两章:本章讲指定价格基准法——有效价差、已实现价差、执行差额(implementation shortfall)、VWAP,以及交易方向识别的 Lee–Ready 规则和各估计量的偏差与可博弈性;第 21b 章讲计量估计法、错失机会成本和成本预测。
学习目标
读完本章,你应当能够:
- 把交易成本分成显性成本、隐性成本、错失交易机会成本三类,并说明为什么后两类需要“基准价”。
- 写出带符号的基准法成本公式,理解它的零和性质。
- 正确表述并实现 Lee–Ready 交易方向识别规则,知道它的两个缺陷。
- 写出有效价差、已实现价差、执行差额的定义,并用“报价价差 − 有效价差 = 价格改善”“有效价差 − 已实现价差 = 价格冲击”两条恒等式解读结果。
- 用原书的拆单例子,算出同一笔交易在流动性溢价、VWAP、执行差额、收盘价四种基准下的成本(200、0、400、−200 美元),并解释差异。
- 说出各基准在噪声、择时识别、偏差(拆单、动量/逆向、知情交易)和可博弈性上的优劣,知道为什么数据允许时执行差额是最佳估计量。
读前导读
这一章在解决什么问题。 CFA 三级组合执行部分讲过执行差额(implementation shortfall)、VWAP、到达价这些名词,也讲过"显性成本 + 隐性成本 + 机会成本"。这一章回答的是更实际的问题:同一笔交易,换一个基准价,成本可以从 +400 美元变成 −200 美元,到底该信哪个?Harris 的回答是:成本 = 成交价减基准价,所以"选哪个基准"决定了"你在度量什么"。基准离成交越近,噪声越小,但看不出拆单的累积冲击和择时好坏;基准越早,越能抓住全部成本,但会混进与执行无关的价格变化。各种基准还会被经纪商"刷分"(博弈),只有在下单之前就确定的基准(执行差额)刷不动。
如果你做过 GIPS 合规或业绩归因,可以把本章看成"交易层面的归因":有效价差、已实现价差、价格冲击三者之间的恒等式,和 Brinson 归因里"配置效应 + 选择效应 + 交互效应 = 超额收益"一样,是把一个总数拆成几个有经济含义的部分。
需要先想起来的数学。
- 带符号的求和。 用 \(Q=+1\)(买)、\(Q=-1\)(卖)把买卖两种情形合成一个公式:\(Q(P-B)\) 买入时是"付多了多少",卖出时是"收少了多少"。对一组交易求和 \(\sum_iQ_iX_i(P_i-B)\),就是带方向的总成本。见 第 00 册第 07 章 概率中的分析工具 的求和记号部分。
- 加权平均。 VWAP \(=\sum_tw_tP_t\),权重 \(w_t\) 非负且和为 1。你的平均成交价也是一个加权平均。两个加权平均相等的充分条件是权重相同,这就是"跟着成交量交易就能让 VWAP 成本为零"的数学原因。
- 条件期望与偏差。 "知情者测得的已实现价差偏低"的意思是 \(E[\text{度量值}\mid\text{知情}]<E[\text{真实执行成本}\mid\text{知情}]\)。偏差(bias)指估计量的期望与真值之差,与 CFA 统计里讲的无偏估计同义。
- 测量误差导致的衰减。 把一部分交易方向分错,等于给 \(Q\) 加了噪声,用它算出的冲击会被"拉向零"。这与回归中解释变量有测量误差时系数被低估(衰减偏差)是同一机制。
怎么读这一章。 21.2.1 基本公式、21.3(四种基准的定义)和 21.4.4 的拆单例是核心,必读;拆单例的四个数字建议自己算一遍。21.2.2 Lee–Ready 规则如果你不处理逐笔数据,可以只记结论(高于中点判买、低于中点判卖)。21.4.2、21.4.3 噪声与择时的讨论可以快读,抓住"准确需要近基准、识别择时需要远基准"这个两难。21.4.5 的汇总表适合作为日后的查阅卡片。量化实战二对做市和执行研究者有用,其他读者可以只看"怎么读"的四点。
21.0 为什么要度量交易成本
Part VI 的导言先讲清了大局:组合绩效取决于两件事——选什么(组合选择/构成问题,portfolio selection/composition problem)和怎么建(组合实施问题,portfolio implementation problem)。很少有逐利交易者能持续跑赢市场;多数主动交易者亏损,是因为交易太多、交易付费太多,交易成本最终会压倒任何信息优势。对多数交易者而言,实施问题比选择问题更容易解决,所以更重要——“无法度量就无法管理”。第 22a、22b 章会讲为什么好的选股绩效难以取得、更难以预测。
第 21 章开篇的判断是:对多数主动交易者,交易成本是总收益最重要的决定因素;表现差的投机者,通常是因为交易成本超过了策略的价值。交易者度量成本,是为了评估自己和经纪商的实施质量——是不是交易得过于激进或不够激进、哪家经纪商该拿到以后的订单;交易者预测成本,是为了估计策略的实施代价——小规模赚钱的策略放大后可能因冲击而净亏。
其他关心交易成本的人:
- 交易所:记录市场质量,用于营销和考核其经纪商、交易商、专家。
- 经纪商:证明自己为客户取得了最佳执行(best execution)。交易商付钱买经纪商的订单(订单流付费,payment for order flow)时尤其重要,法规要求经纪商定期严格检查执行质量。
- 投资委托人(investment sponsors):确保经理花的佣金物有所值。美国劳工部要求受 ERISA 覆盖的养老基金把佣金当作须节约的基金资产。
- 监管者:比较不同市场结构。原书写作时,SEC 要求所有市场中心公布细分的执行质量统计(Rule 11Ac1-5)。
现状补充:Rule 11Ac1-5 在 2005 年并入 Reg NMS,成为今天常说的 Rule 605(市场中心执行质量报告);与之配套的 Rule 606 要求经纪商披露订单路由情况。SEC 在 2024 年通过了对 Rule 605 的修订,扩大了报告主体范围并更新了统计口径。欧盟在 MiFID II 下也有最佳执行义务。
原书专栏“硬币的另一面”提醒了一个容易忽视的事实:买方的交易成本就是卖方的收入。卖方推销低成本服务只是因为相互竞争。不过长期看,交易成本下降使买方大幅增加交易量,加上提供服务的成本也大幅下降,卖方利润反而在增加。
21.1 交易成本的构成
交易成本包括与交易相关的一切成本,分三类:
- 显性成本(explicit costs):成本会计容易识别的——佣金、交易所费用、税;也包括交易台的建设、人员、运营开支。
- 隐性成本(implicit costs):因为交易者影响了价格而产生的成本。在卖价买、在买价卖就付了价差;大买家推高价格、大卖家压低价格的价格冲击也是成本。
- 错失交易机会成本(missed trade opportunity costs):没成交或没及时成交的成本。
例(棉花期货)。 一位投机者想在棉花期货价格 65 美分/磅时买 100 张合约。为求好价,他挂了 64.95 美分的限价买单。随后价格涨到 68 美分,订单没成交。如果他更激进一点、以平均 65.25 美分成交,每磅可赚 \(68-65.25=2.75\) 美分,每张合约 5 万磅即 1,375 美元,100 张共 137,500 美元——这就是他因不够激进而错失的机会。
显性成本最容易度量,做成本会计加总即可。隐性成本与机会成本难得多,都需要一个“没有这笔交易时价格会是多少”的基准(benchmark):度量已完成交易的冲击,要估计没有这笔交易时的价格;度量未完成交易的机会成本,要估计若完成会以什么平均价成交。这使交易成本度量成为一门困难且不精确的科学。
21.2 隐性成本的两类估计方法
两类方法:指定价格基准法(specified price benchmark methods)和计量估计法(econometric methods)。基准法最常用——容易实施,评估具体交易时有用;计量法最适合估计整个市场的平均成本(第 21b 章)。计量法其实也可以理解为“估计出基准而不是指定基准”的基准法。
21.2.1 基准法的基本公式
单位成本是成交价与基准价之差:买入时为成交价高出基准的部分,卖出时相反。写成带符号的形式:
买方付高价、卖方收低价时,估计成本高。
零和性质:同一笔交易的买方与卖方用同一基准,估计成本之和恰为零——一方的交易成本就是另一方的交易利润。需求流动性的一方通常付成本,提供流动性的一方成本为负。
推导拆解:零和性质一行就能证明。同一笔成交,规模 \(X\)、价格 \(P\)、基准 \(B\) 相同,买方 \(Q=+1\),卖方 \(Q=-1\)。买方成本 \(X(P-B)\),卖方成本 \(-X(P-B)\),相加为零。例如基准 10.00、成交 10.05、1,000 股:买方成本 +50 美元,卖方成本 −50 美元(即赚 50)。这说明"市场整体的平均交易成本"只有在挑定一方(通常是主动方)时才有意义,这就是下一节要识别主动方向的原因。
理想基准是“如果交易者没有尝试交易,本应出现的价格”,它与成交价之差完全由交易引起。但没人能确定这个价格,实务中常用:成交量加权平均价(VWAP)、开盘价、收盘价、开高低收均价(OHLC 平均)、交易时点附近的买卖中间价。
21.2.2 交易方向识别:Lee–Ready 规则
研究自己的交易时,你知道自己是买方还是卖方。研究别人的交易(例如用公开逐笔数据估计市场的平均成本)时,每笔成交都有一买一卖,两方成本之和为零,所以必须决定看哪一方——通常看看起来在取用流动性的一方,即主动方。这就需要从成交价和报价推断主动方向。
Lee–Ready 算法(Lee and Ready, 1991)是最常用的方法,正确表述如下:
- 报价规则(quote rule):把成交价与当时的报价中点比较。成交价高于中点(更接近卖价 ask),判为买方发起(激进买方取用了卖方的报价);成交价低于中点(更接近买价 bid),判为卖方发起。
- 点检验(tick test):成交价恰好等于中点时,看上一次价格变化:若为上升(uptick)或零上升(zero uptick,价格不变但上一次非零变化是上升),判为买方发起;否则(下降或零下降)判为卖方发起。
关于原书表述的更正:精读笔记指出,原书此处正文写成“成交价更接近买价(bid)则假定买方是激进方,更接近卖价则卖方激进”,这与 Lee–Ready 算法本身和上下文的逻辑正好相反,是笔误。道理很简单:激进买方用市价单买入,吃掉的是卖方的报价,成交价在卖价或接近卖价。本书按上面的正确规则表述。
实现细节:Lee 和 Ready 原论文建议把成交与“成交前约 5 秒”的报价比较,以修正当时数据中报价与成交记录的时间错位。如今时间戳精度高得多,一般直接用成交时刻之前的最新有效报价。此外还有一些改进算法,如 Ellis–Michaely–O'Hara(2000)的规则,以及不需要逐笔方向、按成交量与价格变化概率分配的“批量成交量分类”(bulk volume classification)。
Lee–Ready 规则有两个缺陷:
- 使估计成本高于多数交易者实际承担的成本:它只看主动方,而多数交易者并非总在需求流动性。
- 无法识别一个订单被多笔成交填满的情况:若订单有冲击,各笔价格不同,逐笔看会低估填满整张订单的成本(下面的拆单例子会看到)。
还要注意它对“激进的被动者”无能为力。原书专栏“市场中的被动-激进行为”:一个买方只要买得起,就可以把买价“钉”在市场上(peg the market at his bid),持续用限价单大量吸筹,但 Lee–Ready 会把他归为被动方。另一个专栏“资金流”(money flow)指出,技术分析中的资金流指标(上升价位成交量 − 下降价位成交量)就是点检验的变体。
21.3 指定价格基准:有效价差、已实现价差、执行差额、VWAP
21.3.1 用报价中点做基准
很多人用成交价与报价中点(quotation midpoint)的带符号差估计成本,结果取决于取哪个时点的中点:
| 中点的时点 | 得到的度量 |
|---|---|
| 交易时点 \(t\) | 有效价差(effective spread),其一半称流动性溢价(liquidity premium) |
| 交易后 \(t+\Delta\)(常用 5、10、15、60 分钟) | 已实现价差(realized spread) |
| 交易前:组合经理决定交易时 | 执行差额(implementation shortfall),Perold(1988)推广;Treynor 早七年称之为“纸面组合法”(method of paper portfolios) |
记 \(P_t\) 为成交价,\(M_t\) 为时点 \(t\) 的中点,\(Q_t\) 为方向(买 \(+1\)、卖 \(-1\))。
21.3.2 有效价差
直觉:当中点不变时,它精确衡量往返交易的隐性成本。 在卖价买入、再在买价卖出同样数量,除了交易什么也没做,每单位往返损失一个价差,每笔成本是半个价差。以中点为基准正好给出:买入成本 \(=\text{ask}-M=S/2\),卖出成本 \(=M-\text{bid}=S/2\)。乘以 2 是为了与报价价差同口径比较。
与报价价差(quoted spread)的关系:
- 所有买入都在卖价、卖出都在买价成交时,有效价差等于报价价差(精读笔记指出原书此处写反为“买入在 bid、卖出在 offer”,应为笔误);
- 经纪商或交易商提供价格改善(price improvement)、成交在价差之内时,有效价差小于报价价差;
- 大单穿透最优报价、在价差之外成交时,有效价差大于报价价差。
零售市价单交易者最常用这个度量:他们拿成交价与下单时的买卖价比,多数人并不知道自己在做成本分析,只是想检查价格是否公道。
21.3.3 已实现价差
中点在度量区间内不变时,已实现价差等于有效价差。但价格常常变化——激进买方之后价格上升,激进卖方之后价格下降——所以已实现价差往往小于有效价差。
交易商关心已实现价差,因为他的利润取决于建仓价与随后的平仓价。把三种价差放在一起,得到两条非常有用的恒等式:
第二条是代数恒等式:\(2Q(P-M_t)-2Q(P-M_{t+\Delta})=2Q(M_{t+\Delta}-M_t)\)。这一项叫价格冲击(price impact),对应第 13 章的逆向选择成分;已实现价差则是交易商扣除逆向选择后真正赚到的部分。今天做市商和执行团队常说的 markout 分析(看成交后 1 秒、10 秒、1 分钟、5 分钟中点相对成交价的变化)就是这个思想。
金融直觉:从提供流动性的交易商角度看这三个数。他按报价成交一笔,名义收入是有效价差的一半;之后中点朝不利方向移动(因为对方可能知情),他持有的存货贬值,这部分就是价格冲击;扣掉之后剩下的才是已实现价差,即真正落袋的钱。用练习 1 的数字:有效价差 0.06,价格冲击 0.14,已实现价差 \(0.06-0.14=-0.08\),交易商这笔是亏的。这和贷款定价的思路相同:名义利差(有效价差)减去预期信用损失(价格冲击)才是风险调整后的收益(已实现价差)。
21.3.4 执行差额
执行差额可以理解为实际组合与对应纸面组合(paper portfolio)的价值差。纸面组合是在纸上构建、看看“如果真的交易会怎样”的虚拟组合。度量交易成本时,把纸面组合的买卖价设为决定交易时的报价中点——这是决策时对价值的朴素最佳估计。实施通常有成本,所以纸面组合一般比实际组合更值钱。
记决策时中点为 \(M_{\text{dec}}\),计划数量 \(X\),已成交 \(X_f\)、平均成交价 \(\bar P\),未成交 \(X_u=X-X_f\),度量时的价格为 \(P_{\text{now}}\),方向 \(Q\):
推导拆解:为什么这个式子等于"纸面组合价值 − 实际组合价值"?以买入为例(\(Q=+1\)),在度量时点比较两个组合。 纸面组合:以 \(M_{\text{dec}}\) 买入全部 \(X\) 股,现在价值 \(XP_{\text{now}}\),花费 \(XM_{\text{dec}}\),盈亏 \(X(P_{\text{now}}-M_{\text{dec}})\)。 实际组合:只买到 \(X_f\) 股,花费 \(X_f\bar P\),现在价值 \(X_fP_{\text{now}}\),盈亏 \(X_f(P_{\text{now}}-\bar P)\)。 两者相减:\(X(P_{\text{now}}-M_{\text{dec}})-X_f(P_{\text{now}}-\bar P)\)。把 \(X\) 拆成 \(X_f+X_u\),\(X_f\) 部分的 \(P_{\text{now}}\) 抵消,剩下 \(X_f(\bar P-M_{\text{dec}})+X_u(P_{\text{now}}-M_{\text{dec}})\),正是上式两项。 所以执行差额的经济含义很清楚:组合经理的想法如果能"零成本、瞬间"实施,能多赚多少。练习 5 的卖出例:\(Q=-1\),已成交部分 \(-30{,}000\times(0.97-1.00)=900\),未成交部分 \(-70{,}000\times(0.82-1.00)=12{,}600\),合计 13,500 美元,其中错失机会占九成以上。
用纸面组合评估新想法时,成本假设至关重要:假设过低可能采纳不赚钱的策略,过高可能拒绝本可赚钱的策略。通常假设买入付中点加一个溢价、卖出得中点减一个折扣,溢价和折扣来自交易成本研究——这正是今天回测中“滑点模型”的来历。
现状补充:Perold 的执行差额如今是机构 TCA 的标准口径,常用的“到达价”(arrival price,订单到达交易台或经纪商时的中点)基准是它的一个变体;以最小化执行差额为目标的执行算法(IS 算法、Almgren–Chriss 类最优执行)是主流算法之一。
21.3.5 日度基准:VWAP、开盘价、收盘价
最常见的日度基准是 VWAP——当日每笔成交价以其成交量加权的平均价:
交易者喜欢 VWAP,因为希望至少做得和当天的平均交易者一样好。许多投资委托人不知道经理是在当天什么时候交易的,通常只收到一个当日平均成交价,只能用日度基准。也有人用开盘价、收盘价或 OHLC 平均。下文会看到,这三种日度度量都有严重问题,很难解释为交易成本。
原书专栏“咨询机构的基准”列出了当时几家 TCA 服务商各自偏好的基准,可以看出不同客户需要不同的度量:Abel/Noser 最先推广 VWAP(向客户证明折扣佣金也能拿到好价格);SEI 推广收盘价基准;Plexus Group 做执行差额分析,客户主要是投资委托人和经理;Transaction Auditing Group 做有效价差审计,客户主要是要向监管者证明最佳执行的经纪商;State Street 旗下的 Elkins/McSherry 以 OHLC 均价为基准,做 42 个国家的成本比较。
21.4 各种基准估计量的性质
好的成本估计量应当容易计算、准确、能识别择时能力、无偏、不可被博弈。这些要求相互冲突。
21.4.1 数据要求
日度汇总对比日度基准最便宜;基于中点的估计需要日内成交与报价数据,更贵;执行差额还需要记录决策时间。
21.4.2 准确性(噪声)
与交易实施无关的随机事件不应影响成本估计。例:买方清晨谈到一个极好的价格,下午公司传出坏消息、股价大跌;若以低得多的收盘价为基准,他看起来谈了个很差的价格。这种估计有噪声(noisy);以开盘价为基准就准确得多。
一般规律:交易与基准价之间的时间越长,噪声越大。 开盘/收盘价比平均价噪声大;所有日度基准都有噪声,因为当天所有交易用同一个基准。噪声最小的是有效价差(同期基准);已实现价差和执行差额的噪声随基准与成交的时间距离增大而增大。
21.4.3 择时识别
经理给经纪商择时裁量权,是希望经纪商识别并利用可预测的短期价格变化——例如未知情者买入后价格往往偏高,持卖单的经纪商应立即执行,持买单的可以等回落。给了裁量权就必须监控成本,因为经纪商通常按成交拿佣金,可能宁愿尽快成交而不等好时机。
有效价差对此几乎无用:它只相对当前中点度量,经纪商对中点短期走势的任何判断都不会被揭示。一般而言,基准价不依赖交易时点时最能衡量择时效果;若依赖交易时点(如已实现价差),交易与基准间隔越长越能衡量择时。
两难:准确需要临近的基准,识别择时需要远离的基准。所以要准确衡量择时效果,必须分析大量交易。
21.4.4 偏差
好的估计量只衡量“在当前市况下实施策略的成本”。有偏的估计量往往依赖交易“如何”或“为何”进行。四个偏差来源:拆单、交易决策依赖过去价格、交易者知道未来价格、经纪商知道自己被怎样评估。
(1)拆单(split orders)。 交易者常把大单拆开以免暴露全部规模,也为了在推动价格时进行价格歧视,因此最后一部分通常最贵。估计方法应估计执行整个订单的总成本,而不是各部分表面成本之和。
原书数值例:4,000 股买单拆成两半。
- 第一笔 2,000 股:报价 30.00 / 30.10,以 30.10 成交;
- 第二笔 2,000 股:第一笔推高报价至 30.10 / 30.20,以 30.20 成交;
- 决策时中点 30.05;收盘价 30.20;假设他是当天唯一的买家。
四种基准的结果:
| 基准 | 计算 | 估计成本 |
|---|---|---|
| 流动性溢价(半个有效价差) | 两笔每股都是 0.05 | 200 美元 |
| VWAP | 他的均价就是当天市场均价 | 0 美元 |
| 执行差额(决策时中点 30.05) | 第一笔 5 美分、第二笔 15 美分,平均 10 美分 | 400 美元 |
| 收盘价(30.20) | 第一笔 −10 美分、第二笔 0 | −200 美元 |
推导拆解:四个数字逐一算出(\(Q=+1\),每笔 2,000 股)。 流动性溢价:第一笔中点 30.05,成本 \(30.10-30.05=0.05\);第二笔中点 30.15,成本 \(30.20-30.15=0.05\)。合计 \(4{,}000\times0.05=200\)。每笔都以"自己推高后的中点"为基准,所以第一笔推高报价的影响被漏掉了。 VWAP:当天只有他交易,VWAP \(=(30.10+30.20)/2=30.15\),等于他的均价,成本 \(4{,}000\times(30.15-30.15)=0\)。他自己就是市场,用自己比自己当然是零。 执行差额:基准 30.05,\(2{,}000\times0.05+2{,}000\times0.15=100+300=400\)。 收盘价:基准 30.20,\(2{,}000\times(-0.10)+2{,}000\times0=-200\)。收盘价已经包含了他自己造成的冲击,于是被冲击抬高的价格反过来让他"看起来"买得便宜。 四种方法的差别全来自基准是否被这笔交易本身污染:只有执行差额的基准在交易之前就固定下来。
谁对?看实际后果:如果他随即反向平仓——报价 30.10 / 30.20 时以 30.10 卖 2,000 股,报价跌到 30.00 / 30.10 时以 30.00 卖 2,000 股——所有股份都比买入价低 10 美分,往返总损失 400 美元,与执行差额一致。收盘价基准显示的 200 美元“利润”是未实现的,试图实现就会变成亏损。
一般规律:基准依赖于填单的成交本身时,就会出现拆单问题。 拆单改变后续中点,有效价差低估总成本;拆单冲击影响 VWAP,VWAP 估计量也低估总成本;收盘价被大单冲击显著影响,问题最严重(甚至给出负成本)。执行差额不受影响,因为基准在订单影响价格之前就确定了。
(2)动量与逆向交易者。 动量策略在上涨后买、下跌后卖;逆向策略相反。开盘价基准偏差尤其严重:动量交易者在价格上涨后买入,开盘价偏低,高估其成本;卖出时开盘价偏高,同样高估。逆向交易者则被低估。一般地,交易决策基于基准确定之后的价格变化时,估计就会有偏;开盘价基准、以及在较小程度上的 VWAP 基准,对这两类交易者都有偏。
白话解释:用数字看。开盘 100,上午涨到 103,动量交易者在 103.05 买入(卖价,执行完美)。以开盘价为基准,成本 \(=103.05-100=3.05\),但其中 3.00 是他下决定之前就已发生的上涨,与执行无关,真正的执行成本只有 0.05。逆向交易者在跌到 97 后买入,成交 97.05,开盘价基准算出 \(-2.95\),看起来"赚了",同样不是执行的功劳。问题的根源是:交易时点本身由基准之后的价格走势决定,于是"成交价 − 基准"系统性地带上了策略的方向。这与 GIPS 和业绩归因里强调"基准应在事前确定"的道理一致。
(3)知情交易者。 知情者买后价格往往上涨、卖后下跌,所以基准在其交易之后确定时,会低估其成本。例如知情者测得的已实现价差小于有效价差——差异来自成功的投机,不是执行质量。基准确定得越晚,偏差越大:收盘价(以及较小程度上的 VWAP)低估知情者成本,交易很快会公开的短期信息时低估最严重。
(4)博弈(gaming)。 用成本估计评估经纪商时,经纪商不应能通过不符合客户利益的方式操纵结果。
-
博弈有效价差:有裁量权的经纪商只提供流动性、从不取用——永远在买价买、在卖价卖,市场背离就改价再挂。估计成本总为负,但客户可能拿不到想要的成交。原因:基准随市场移动,经纪商不因等待受罚。
-
任何基准依赖交易时点的度量,都能被有择时裁量权的经纪商博弈。 例:经纪商知道客户用开盘价评估,尾盘收到买单,若当天已跌就立即成交,若已涨就拖到次日——避免在开盘低得多的日子记一笔高价买入。开盘价基准最严重,VWAP 等部分由交易时机决定的均价基准也存在。缓解办法:在更长区间算基准(例如一周 VWAP 而非当日 VWAP),代价是噪声更大。
-
与基准同步交易也能博弈:用 VWAP 评估时,把订单在全天分散执行使均价约等于市场 VWAP,估计成本接近零;用收盘价评估时,只在收盘时执行,估计成本为零。
推导拆解:为什么跟着成交量交易就能让 VWAP 成本接近零?设当天第 \(t\) 个时段市场成交量占全天比例 \(w_t\),你在该时段买入 \(x_t=w_tX\) 股(按全天成交量比例分配),成交价约等于该时段市场均价 \(P_t\)。你的均价 \(=\sum_tx_tP_t/X=\sum_tw_tP_t=\text{VWAP}\)。权重一样,加权平均自然一样,成本 \(X(\bar P-\text{VWAP})\approx0\)。但这个"零"只说明你和市场平均一样,不说明你执行得好:若你的单子占全天成交量的 20%,你自己的买盘已经把当天所有价格(因而 VWAP)推高了,这部分冲击在 VWAP 口径下完全看不见。
-
基准价在经纪商收到订单之前就已确定时,不可能被博弈——所以执行差额无法被博弈。
作者也指出:公然博弈容易被识别,聪明的经纪商只会适度博弈;多数经纪商诚实工作,在做出符合客户利益却会显示异常高成本的交易时,往往会事先告知客户。
21.4.5 小结:基准决定了你在度量什么
- 交易时点中点:衡量相对同期报价的执行质量,但对拆单的累积冲击一无所知,对择时也所知甚少;
- 交易后很久的基准:可能了解这些问题,但同时衡量了组合经理的选股好坏(混入了 alpha);
- 决定交易之前很久的基准:不受拆单影响,但同时衡量了决策对过去价格的依赖(动量/逆向偏差)。
不考虑数据成本时,执行差额是最佳估计量,不受上述偏差影响,也不可博弈。数据成本显著时:零售交易者通常用有效价差(对小单一般无偏);不知道经理何时下单的机构委托人常用 VWAP——它有偏差、可博弈、有噪声,但对多数交易者问题比开盘/收盘基准小。
原书表 21-1 汇总了各估计量的性质。该表在原书中是旋转排版,精读笔记的抽取严重损坏,只能辨认 “POTENTIAL BIASES”“underestimate”“overestimate costs”“Trade only at the close” 等片段。下表是依据正文重建的版本,个别格子的措辞可能与原表不同,需要原表细节请对照原书第 433 页附近(PDF 第 446 页):
| 基准 | 数据要求 | 噪声 | 识别择时 | 拆单 | 动量/逆向 | 知情者 | 可否博弈及方式 |
|---|---|---|---|---|---|---|---|
| 交易时中点(有效价差) | 日内报价,较贵 | 最小 | 几乎不能 | 低估 | 无偏 | 无偏 | 可(只挂限价单、追着市场改价) |
| 交易后中点(已实现价差) | 日内报价 | 随区间增大 | 随区间增强 | 低估 | — | 低估,区间越长越严重 | 可 |
| 决策时中点(执行差额) | 需决策时间与报价 | 随实施时长增大 | 好 | 无偏 | 无偏 | 无偏 | 不可 |
| VWAP | 日度,便宜 | 中等 | 有限 | 低估 | 有偏(较轻) | 低估(较轻) | 可(全天跟随成交量交易使成本≈0) |
| 开盘价 | 日度 | 较大 | — | — | 动量高估、逆向低估 | — | 可(拖延到次日) |
| 收盘价 | 日度 | 较大 | — | 低估(可为负) | — | 低估 | 可(只在收盘交易) |
最后两点提醒:所有方法应用于单笔交易时都有噪声,对许多交易取平均更可靠,但平均解决不了偏差和博弈;用成本评估经纪商时必须有比较标准,而且只有给各经纪商相似难度的订单时比较才有意义,否则拿到难单的经纪商会显得效率低。
量化实战一:复算拆单例子
先用几行代码把 21.4.4 的例子算一遍,体会“同一笔交易,四个数字”。
# 原书 21.4.4.1 拆单例:同一笔 4,000 股买单,不同基准给出的成本
trades = [(2000, 30.10, 30.00, 30.10), # (股数, 成交价, 当时买价, 当时卖价)
(2000, 30.20, 30.10, 30.20)]
decision_mid = 30.05
close = 30.20
shares = sum(q for q, *_ in trades)
liq_premium = sum(q * (p - (b + a) / 2) for q, p, b, a in trades) # 有效价差的一半 × 股数
vwap = sum(q * p for q, p, *_ in trades) / shares # 假设他是当天唯一买家
vwap_cost = sum(q * (p - vwap) for q, p, *_ in trades)
is_cost = sum(q * (p - decision_mid) for q, p, *_ in trades)
close_cost = sum(q * (p - close) for q, p, *_ in trades)
print(f"流动性溢价(半个有效价差)法: {liq_premium:8.2f} 美元")
print(f"VWAP 基准法 : {vwap_cost:8.2f} 美元")
print(f"执行差额(决策时中点)法 : {is_cost:8.2f} 美元 (每股 {is_cost/shares*100:.1f} 美分)")
print(f"收盘价基准法 : {close_cost:8.2f} 美元")
# 若随即反向卖出:报价 30.10/30.20 时以 30.10 卖 2000,报价 30.00/30.10 时以 30.00 卖 2000
sells = [(2000, 30.10), (2000, 30.00)]
round_trip = sum(q * p for q, p in sells) - sum(q * p for q, p, *_ in trades)
print(f"实际往返盈亏 : {round_trip:8.2f} 美元")
输出:
流动性溢价(半个有效价差)法: 200.00 美元
VWAP 基准法 : 0.00 美元
执行差额(决策时中点)法 : 400.00 美元 (每股 10.0 美分)
收盘价基准法 : -200.00 美元
实际往返盈亏 : -400.00 美元
只有执行差额与“真实往返损失”一致。实际 TCA 系统中,这意味着:评估拆单执行(几乎所有机构执行都是拆单)时,要以母单(parent order)为单位、以决策价或到达价为基准,而不是对子单(child order)逐笔算有效价差再相加。
量化实战二:Lee–Ready 分类与价差分解
下面模拟约 20 个交易日、5 万笔成交的逐笔数据:30% 的主动成交来自知情者(知道下一次新闻的方向),每笔主动成交对中点有永久冲击 \(\lambda\);报价价差 2 分,70% 成交在报价上、20% 获得 0.5 分价格改善、10% 在中点成交。我们实现 Lee–Ready 规则,并计算有效价差、5 分钟已实现价差和价格冲击。
import numpy as np, pandas as pd
rng = np.random.default_rng(21)
n = 50_000 # 成交笔数(约 20 个交易日,每 10 秒一笔)
tick, half = 0.01, 0.01 # 最小价位 1 分;报价半价差 1 分(报价价差 2 分)
lam = 0.004 # 每笔主动成交对中间价的永久冲击(逆向选择)
mu = 0.3 # 订单中知情者比例
sig = 0.003 # 与订单流无关的中间价新闻波动
t = np.cumsum(rng.exponential(10, n)) # 成交时间(秒)
V_jump = rng.normal(0, sig, n) # 新闻
informed = rng.random(n) < mu
# 知情者知道下一笔新闻的方向;未知情者随机
Q = np.where(informed, np.sign(V_jump + 1e-12), rng.choice([-1, 1], n)).astype(int)
mid = np.empty(n); m = 20.0
for i in range(n):
mid[i] = m # 成交时的报价中点
m = m + lam * Q[i] + V_jump[i] # 成交后中点更新
mid = np.round(mid / 0.005) * 0.005 # 中点落在半价位网格上
bid, ask = mid - half, mid + half
# 成交价:70% 在报价上成交,20% 获得 0.5 分价格改善,10% 在中点成交
u = rng.random(n)
improve = np.where(u < 0.7, 0.0, np.where(u < 0.9, 0.005, half))
price = np.where(Q > 0, ask - improve, bid + improve)
# ---------- Lee-Ready 交易方向识别 ----------
def lee_ready(price, mid):
side = np.sign(price - mid) # 报价规则:高于中点为买,低于为卖
# 点检验(tick test):与上一个不同成交价比较,上升/零上升为买
tick_sign = np.zeros(len(price)); last = 0.0
for i in range(1, len(price)):
d = price[i] - price[i-1]
if d > 1e-9: last = 1.0
elif d < -1e-9: last = -1.0
tick_sign[i] = last # 零变动沿用上一次的方向
side[side == 0] = tick_sign[side == 0]
return side.astype(int)
Q_lr = lee_ready(price, mid)
at_mid = np.isclose(price, mid)
print(f"Lee-Ready 总体正确率 {np.mean(Q_lr == Q):.3f};"
f"报价内成交正确率 {np.mean((Q_lr == Q)[~at_mid]):.3f};中点成交(用点检验)正确率 {np.mean((Q_lr == Q)[at_mid]):.3f}")
# ---------- 有效价差、已实现价差、价格冲击 ----------
df = pd.DataFrame({"t": t, "P": price, "M": mid, "Q": Q, "Q_lr": Q_lr, "informed": informed})
def mid_after(seconds):
idx = np.searchsorted(t, t + seconds) # 第一笔时间 >= t+Δ 的成交前中点
idx = np.minimum(idx, n - 1)
return mid[idx]
df["M5"] = mid_after(300) # 5 分钟后中点
for col, q in [("真实方向", "Q"), ("Lee-Ready方向", "Q_lr")]:
es = 2 * df[q] * (df.P - df.M)
rs = 2 * df[q] * (df.P - df.M5)
pi = 2 * df[q] * (df.M5 - df.M)
print(f"[{col}] 报价价差 {2*half*100:.2f} 分 | 有效价差 {es.mean()*100:.3f} 分 | "
f"5分钟已实现价差 {rs.mean()*100:.3f} 分 | 价格冲击 {pi.mean()*100:.3f} 分")
es = 2 * df.Q * (df.P - df.M); rs = 2 * df.Q * (df.P - df.M5)
print("\n按交易者类型(真实方向):")
print(pd.DataFrame({"有效价差(分)": es * 100, "已实现价差(分)": rs * 100, "类型": np.where(df.informed, "知情", "未知情")})
.groupby("类型").mean().round(3).to_string())
print(f"\n价格改善 = 报价价差 - 有效价差 = {(2*half - es.mean())*100:.3f} 分")
输出:
Lee-Ready 总体正确率 0.948;报价内成交正确率 1.000;中点成交(用点检验)正确率 0.488
[真实方向] 报价价差 2.00 分 | 有效价差 1.597 分 | 5分钟已实现价差 0.687 分 | 价格冲击 0.910 分
[Lee-Ready方向] 报价价差 2.00 分 | 有效价差 1.597 分 | 5分钟已实现价差 0.781 分 | 价格冲击 0.816 分
按交易者类型(真实方向):
有效价差(分) 已实现价差(分)
类型
未知情 1.597 0.845
知情 1.597 0.321
价格改善 = 报价价差 - 有效价差 = 0.403 分
怎么读:
-
Lee–Ready 的误差集中在中点成交:不在中点的成交,报价规则 100% 正确(这是模拟的理想情况,真实数据中报价与成交的时间错位会带来额外误差);中点成交只能靠点检验,正确率不到一半,和抛硬币差不多。今天美国股市大量成交发生在中点(暗池、中点挂单),这是真实数据中分类误差的主要来源。
-
两条恒等式:报价价差 2 分,有效价差 1.597 分,差额 0.403 分就是价格改善;有效价差 1.597 = 已实现价差 0.687 + 价格冲击 0.910。也就是说,交易商名义上每笔赚 1.6 分,但其中 0.91 分在 5 分钟内被价格的不利移动吃掉,真正留下的只有 0.69 分。
-
分类误差会扭曲分解:用 Lee–Ready 方向时,价格冲击被低估(0.816 对 0.910)、已实现价差被高估。原因是中点成交分错方向后,这些成交的冲击符号被搞反,相互抵消。
推导拆解:可以粗算这个低估幅度。中点成交占 10%,其中约一半分错。分对的成交贡献 \(+\text{冲击}\),分错的贡献 \(-\text{冲击}\),所以平均冲击约被乘以 \((1-2\times5\%)=0.9\),\(0.910\times0.9\approx0.82\),与输出 0.816 吻合。有效价差不受影响,因为中点成交的 \(P-M=0\),方向分错也乘出零;已实现价差 \(=\) 有效价差 \(-\) 冲击,冲击被低估,它就被高估。这与回归中解释变量带测量误差时系数被衰减是同一类问题。
-
知情与未知情:两类交易者的有效价差相同(都在同样的报价上成交),但交易商从知情者身上的已实现价差只有 0.32 分,从未知情者身上有 0.85 分——这就是第 13 章“交易商从未知情者身上赚、在知情者身上亏”的直接度量。做市策略的 markout 分析,本质就是按对手方类型(或订单来源、时段)拆这张表。
本章小结
交易成本分显性、隐性和错失机会三类,后两类要用基准价来度量:成本 = 规模 × 方向 × (成交价 − 基准价),买卖双方之和为零。研究别人的交易要先用 Lee–Ready 规则识别主动方:高于中点为买方发起,低于中点为卖方发起,恰在中点用点检验。以交易时中点为基准得有效价差,以交易后中点得已实现价差,两者之差是价格冲击;以决策时中点得执行差额。基准越近噪声越小,但越看不出择时;拆单、动量/逆向、知情交易都会让某些基准有偏,依赖交易时点的基准都可被博弈。数据允许时,执行差额无偏且不可博弈,是最佳估计量。
| 概念/公式 | 要点 |
|---|---|
| 成本三分 | 显性(佣金、费用、税)+ 隐性(价差、冲击)+ 错失机会 |
| 基准法 | \(\text{Cost}=\text{Size}\times Q\times(P-B)\);买卖双方之和为零 |
| Lee–Ready | \(P>M\) 判买方发起;\(P<M\) 判卖方发起;\(P=M\) 用点检验(上升/零上升为买) |
| 有效价差 | \(2Q_t(P_t-M_t)\);半值为流动性溢价 |
| 已实现价差 | \(2Q_t(P_t-M_{t+\Delta})\) |
| 价格冲击 | 有效价差 − 已实现价差 \(=2Q_t(M_{t+\Delta}-M_t)\) |
| 价格改善 | 报价价差 − 有效价差 |
| 执行差额 | 以决策时中点为基准:已成交部分的成本 + 未成交部分的机会成本 |
| VWAP | \(\sum w_tP_t\);跟随成交量交易可使估计成本≈0(被博弈) |
| 拆单例 | 流动性溢价 200、VWAP 0、IS 400、收盘价 −200;真实往返损失 400 |
| 最佳估计量 | 数据允许时用执行差额:无偏、不可博弈 |
练习
基础
- 报价 50.00 / 50.10。一笔买单以 50.08 成交,5 分钟后中点为 50.12。求有效价差、已实现价差、价格冲击和价格改善。 答案:中点 50.05;有效价差 \(2(50.08-50.05)=0.06\);已实现价差 \(2(50.08-50.12)=-0.08\);价格冲击 \(2(50.12-50.05)=0.14\);价格改善 \(0.10-0.06=0.04\)。已实现价差为负,说明提供流动性的一方亏了。
- 用 Lee–Ready 规则判断方向:报价 20.00 / 20.04,成交价依次为 20.03、20.02、20.02、20.01。 答案:20.03 高于中点 20.02,买方发起;20.02 等于中点,上一次变化为下降(20.03→20.02),卖方发起;第二个 20.02 为零下降,卖方发起;20.01 低于中点,卖方发起。
- 解释为什么执行差额不可被博弈,而 VWAP 可以。
- 一位动量交易者在开盘后大涨的股票上买入。用开盘价做基准,他的成本会被高估还是低估?为什么?
- 交易者想卖 10 万股,决策时中点 1.00 美元,卖出 3 万股、均价 0.97 美元,其余未成交,当前价 0.82 美元。分解执行差额(不计佣金)。 答案:已成交部分 \(30{,}000\times(1.00-0.97)=900\) 美元;机会成本 \(70{,}000\times(1.00-0.82)=12{,}600\) 美元;合计 13,500 美元。
进阶
- 原书思考题 5:21.4.4 的扩展例中,四笔往返交易的执行差额为 400 美元;若收盘价为 30.05,收盘价估计也是 400 美元。为什么本例中两者相等? 提示:往返交易后净头寸为零,基准价项相互抵消,任何对四笔都用同一基准价的方法都给出相同结果——就是实际往返盈亏。
- 原书思考题 2:执行差额研究可以把买入的基准设为决策时的卖价、卖出的基准设为决策时的买价,而不是中点。这样做有何利弊? 提示:好处是把“必然要付的半个价差”从成本中剔除,衡量的是超出正常价差的部分;坏处是不同价差的股票不可比,也掩盖了能拿到价格改善的执行能力。
- 修改量化实战二的代码:把中点成交的比例从 10% 提高到 40%,观察 Lee–Ready 正确率和价格冲击估计的偏差如何变化。再实现一个只用点检验(不看报价)的分类器,比较两者。
- 假设你的经纪商按“当日 VWAP”被考核,而你的订单是早盘收到的短期 alpha 信号(预计 1 小时内兑现)。经纪商最可能怎样执行?这对你有什么损失?应改用什么基准? 提示:经纪商会把订单摊在全天按成交量分布执行,成本估计接近零,但 alpha 在上午就衰减掉了;应改用到达价/决策价基准(执行差额)。
原书推荐习题:思考题 5(复算 21.4.4 全部数字,检验对基准与零净头寸的理解);思考题 2(以 ask/bid 为基准的执行差额);思考题 4(哪些交易者测得的成本应较高、较低:需求流动性者高、提供流动性者低,知情者用事后基准测得偏低)。另建议用逐笔成交与报价数据计算有效价差、5 分钟已实现价差并比较。
原书对照
- Part VI 导言:PDF 第 432 页(原书页码约为 PDF 页码减 13,即第 419 页)。
- 原书第 21 章 Liquidity and Transaction Cost Measurement,PDF 第 433–454 页(原书第 420–441 页);本章覆盖其前半部分:
- 章首导言与专栏 “The Flip Side”:PDF p.433–434;
- 21.1 交易成本构成(棉花期货例):p.434–435;
- 21.2 隐性成本估计方法、交易方向识别(Lee–Ready,专栏 “Money Flow”“Passive-Aggressive Behavior”):p.435–436;
- 21.3 指定价格基准(有效价差、已实现价差、执行差额、VWAP;专栏“咨询机构的基准”):p.436–440;
- 21.4 价格基准估计量的性质(数据、准确性、择时、偏差、博弈;拆单例):p.440–445;表 21-1:p.446(旋转排版,本章所列为依据正文的重建版本)。
- 后半部分(21.5–21.11)见第 21b 章。