第 14 章 买卖价差
对应 Harris《Trading and Exchanges》第 14 章 Bid/Ask Spreads 及其附录。这是本册对量化交易最重要的一章:做市报价、交易成本模型、限价单还是市价单的选择、回测中的成本假设,都建立在本章的价差理论之上。原书给出了价差的两个成分、Glosten–Milgrom 定理的简化版本、指令驱动市场的均衡价差和横截面价差预测;本教材补充了完整的序贯 Glosten–Milgrom 模型、Roll 模型和基于交易方向的价差分解回归,并配了模拟代码。补充内容会明确标出。
学习目标
读完本章,你应当能够:
- 把价差分解为交易成本(暂时性)成分与逆向选择(永久性)成分,写出交易商的报价公式,并说明成交后报价如何移动。
- 从"信息视角"和"会计视角"两条路推导出相同的逆向选择价差 \(2PE\)(Glosten–Milgrom 定理),并推导序贯 Glosten–Milgrom 模型中的贝叶斯报价公式,解释价差为何随学习收窄、成交价为何是鞅。
- 推导 Roll 模型 \(s=2\sqrt{-\mathrm{Cov}(\Delta p_t,\Delta p_{t-1})}\),知道它在存在逆向选择时估计的是什么,并会用交易方向回归估计两个成分。
- 解释"本书最重要的一课":不知情交易者无论用限价单还是市价单都会输给知情交易者。
- 推导指令驱动市场的均衡价差:理想条件下为零,现实中等于佣金差、限价单管理成本、两倍择时期权价值等的组合,并算出 Lisbet–Tim–Dieter 例子中的数字。
- 用三个主要决定因素(信息不对称、波动率、功利性交易兴趣)及其代理变量预测横截面相对价差,并把它变成回测和组合优化中的交易成本模型。
读前导读
**这一章在解决什么问题。**你在 CFA 里把买卖价差当作一个给定的交易成本输入,本章回答它为什么是这个数、由哪几块组成、能不能从数据里估出来。答案是两块:一块是交易商的“经营成本”(暂时性成分,成交价在 bid 和 ask 之间来回跳),一块是“输给知情者的保险费”(逆向选择成分,成交后价格永久移动)。第 13 章用文字讲了逆向选择,本章用 Glosten–Milgrom 模型把它算出来,用 Roll 模型和回归把它从数据里分离出来,再用指令驱动市场的均衡分析说明:即使没有交易商,限价单交易者之间也会自发形成同样结构的价差。
对量化工作,这一章直接决定三件事:回测里的成本假设应该怎么设、做市报价的骨架是什么、为什么高换手的无 alpha 策略必然亏钱。
需要先想起来的数学。
- 贝叶斯公式与条件期望:\(P(A\mid B)=\dfrac{P(B\mid A)P(A)}{P(B)}\),其中分母 \(P(B)=P(B\mid A)P(A)+P(B\mid A^c)P(A^c)\)(全概率公式,\(A^c\) 表示 \(A\) 不发生)。例:疾病发病率 1%,检测准确率 90%,阳性者真有病的概率 \(=0.9\times0.01/(0.9\times0.01+0.1\times0.99)\approx8\%\)。Glosten–Milgrom 模型里,“疾病”换成“价值高”,“阳性”换成“有人来买”。见 第 00 册第 07 章 概率中的分析工具。
- 鞅与塔性质:若 \(p_t=E[V\mid\mathcal F_t]\)(\(\mathcal F_t\) 表示到第 \(t\) 笔为止看到的全部交易历史),则 \(E[p_{t+1}\mid\mathcal F_t]=p_t\),价格变化不可预测。第 10 章已用过同样的论证。
- 协方差的双线性:\(\mathrm{Cov}(aX+bY,\,Z)=a\,\mathrm{Cov}(X,Z)+b\,\mathrm{Cov}(Y,Z)\),独立变量的协方差为零。Roll 模型的推导只用这一条,加上 \(\mathrm{Cov}(X,X)=\mathrm{Var}(X)\)。
- OLS 回归系数的含义:在 \(y=\beta_1x_1+\beta_2x_2+e\) 中,若 \(x_1,x_2\) 互不相关且与 \(e\) 无关,OLS 能无偏地估出 \(\beta_1,\beta_2\)。14.5.2 的价差分解回归就是这种最简单的情形。CFA 二级多元回归的知识足够。
- 期权的视角:一张挂在 20 元的卖出限价单,等于免费送给市场一张执行价 20 的看涨期权(谁都可以按 20 买走);买入限价单等于送出一张看跌期权。14.7 的“择时期权”就是这个意思。
**怎么读这一章。**14.3 的两个成分和报价公式 (14.1)、(14.2) 是全章骨架,必读。14.4 是核心:先读 14.4.1 的直观,再按讲解框把 14.4.2 和 14.4.3 的推导亲手走一遍,这两节读懂了,第 10 章的 Kyle 模型和第 13 章的做市逻辑会连成一体。14.5 的 Roll 模型和分解回归是微观结构计量的入门,做高频或交易成本分析的读者必读。14.6 是“最重要的一课”,务必读。14.7 的均衡价差篇幅长,第一次可以只读 14.7.1 的结论、(14.5) 式和例 14.1。14.9 的横截面预测与代码 4 合起来读,是搭建交易成本模型的直接起点。
14.1 价差是即时性的价格
买卖价差是急躁交易者为即时性支付的价格。 急躁的人在 ask 买、在 bid 卖;价差是交易商和限价单交易者提供即时性的补偿。
价差在两个决策中起核心作用:
- 交易者选择限价单还是市价单。价差宽,即时性贵,市价单成本高,限价单更有吸引力;价差窄,市价单更划算。要优化订单提交策略,就要知道在当前市况下价差算宽还是算窄,所以必须理解价差的决定因素。
- 交易商决定是否在某个市场提供流动性。价差太窄,做市无利可图,交易商退出;价差宽,新交易商进入。
本章的结论可以先列出来:价差最重要的决定因素是知情交易带来的逆向选择、波动率和市场活跃度。而 Harris 称之为"本书对多数读者最重要的一课"的结论是:不知情交易者无论用限价单还是市价单都会输给知情交易者;他们输,仅仅因为他们在交易。不想输,就尽量少交易。
14.2 交易商如何设定价差
交易商设定价差以最大化利润:要宽到足以覆盖经营成本,否则只能退出;又不能宽到没人和他交易。收入取决于往返交易的有效价差(effective spread)、存货周转频率以及输给知情者的损失;费用包括存货融资成本、人员薪酬、交易所会员费、通讯、研究、系统开发、清算结算、会计、场地等。
垄断交易商可以报宽价差。最优垄断价差满足经济学教科书上的"边际收入 = 边际成本":价差略降带来的边际收入,等于提供由此增加的流动性的边际成本。但金融市场的交易商很少能成为垄断者:进入壁垒低,超额利润会吸引新交易商;进入的威胁本身就可能约束唯一的交易商。此外,交易商还面临公共限价单交易者的竞争,限价单本质上和交易商报价一样,都是供他人随时成交的交易要约。原书举例说,NYSE 专家是所负责股票的唯一交易商,但并非垄断者,因为他面对公共限价单和其他交易所的竞争。
竞争性市场中,自由进出使价差调整到交易商恰好赚取正常利润:收入恰好覆盖全部经济成本,即上述各项成本加上资本的公平回报和企业家努力的公平报酬。此时经济利润为零。
14.3 价差的两个成分
经济学家把价差分成两个成分,二者之和是总价差:
- 交易成本成分(transaction cost component):补偿交易商的正常经营成本,也包括可能的垄断利润和承担存货风险所需的风险溢价。
- 逆向选择成分(adverse selection component):补偿与知情者交易的损失,让交易商能从不知情者身上赚回输给知情者的部分。
交易商从不分开报这两个成分,只报 bid 和 ask。要估计它们,需要计量方法(14.5 节)。
14.3.1 交易成本成分:暂时性
如果所有人都确切知道价值,交易成本成分就是全部价差:价格在略低于价值的 bid 与略高于价值的 ask 之间来回跳动。竞争使它等于正常经营成本。
它又叫暂时性成分(transitory component),因为相关的价格变化是暂时的、会规律性地反转:从 bid 跳到 ask 之后,最常见的下一步是从 ask 跳回 bid。这种来回跳动叫买卖反弹(bid/ask bounce),是急躁交易者引起的一种轻微价格波动,会使成交价变化出现负自相关。
14.3.2 逆向选择成分:永久性
交易商不太了解基本面价值,所以暴露于更知情者的逆向选择。只覆盖正常成本的价差,最终会让交易商被知情者逼出市场,所以价差必须进一步加宽:一是从不知情者那里收回输给知情者的部分;二是让知情者以更差的价格成交,减少损失。这部分加宽就是逆向选择成分。
它又叫永久性成分(permanent component),因为相关的价格变化不会系统性反转。它反映交易商对价值估计的修正。若交易商有效利用了全部信息,估计的修正序列就应该不可预测(若可预测,说明早该纳入那些信息了)。不可预测变化构成的过程本质上是随机游走,每一次变化都是永久的,影响此后所有的水平。
14.3.3 交易商的报价公式
原书在"总价差"边栏中描述了交易商在原理上如何报价(实践中交易商凭经验,但会经常思考这些问题):
- 用全部现有信息估计价值 \(V_0\),作为报价的中心;
- 分别估计"下一个是买方"时的价值 \(V_B\) 和"下一个是卖方"时的价值 \(V_S\),两者之差就是逆向选择成分 \(S_{AS}\)。若知情买卖概率相等、两种情形下的期望定价误差相等,则 \(V_B=V_0+\tfrac12 S_{AS}\),\(V_S=V_0-\tfrac12 S_{AS}\);
- 再在两侧各加半个交易成本成分 \(S_{TC}\):
成交后报价如何移动:如果下一个交易者是买方(成交价 \(P_0=\text{Ask}_0\)),而交易商没有学到别的东西,新的无条件价值估计就是之前的条件估计 \(V_1=V_B\),于是 bid 和 ask 都上移半个逆向选择成分 \(\tfrac12 S_{AS}\)。卖方到来时对称地下移。
把这个过程写成时间序列:记 \(q_t=+1\)(买方发起)或 \(-1\)(卖方发起),\(c=\tfrac12 S_{TC}\),\(\lambda=\tfrac12 S_{AS}\),\(m_t\) 为第 \(t\) 笔成交后的价值估计(报价中点),则
其中 \(\varepsilon_t\) 是公共信息带来的变化。第 \(t\) 笔的成交价相对成交前中点偏离 \((\lambda+c)q_t\),正是半个总价差。这个式子把原书的定性描述变成了可以估计的模型,14.5 节会用到。
推导拆解:(14.2) 怎样对应 (14.1),逐项看。 第一步,约定每一期先到公共新闻、后到交易。新闻把报价中心从 \(m_{t-1}\) 移到 \(m_{t-1}+\varepsilon_t\),这就是第 \(t\) 笔成交前的中点(相当于 (14.1) 里的 \(V_0\))。 第二步,若第 \(t\) 笔是买单(\(q_t=+1\)),按 (14.1) 成交价是 ask \(=(m_{t-1}+\varepsilon_t)+\tfrac12S_{AS}+\tfrac12S_{TC}=(m_{t-1}+\varepsilon_t)+\lambda+c\)。 第三步,成交后,交易商把价值估计上移半个逆向选择成分:\(m_t=(m_{t-1}+\varepsilon_t)+\lambda\),这就是 (14.2) 第一式(14.3.3 “成交后报价如何移动”那句话的公式版)。 第四步,把第三步代入第二步:成交价 \(=m_t+c\),即 \(p_t=m_t+cq_t\)。卖单时所有符号反过来,用 \(q_t=-1\) 统一表示。 两个成分在式子里的位置揭示了它们的性质:\(\lambda q_t\) 进入了 \(m_t\),以后每一期的 \(m\) 都带着它,所以是“永久的”;\(cq_t\) 只出现在当期成交价上,下一笔就没了,所以是“暂时的”。 注意记号:这里的 \(\lambda\) 是“每笔交易”的永久冲击(半个逆向选择成分),单位是价格;第 10 章 Kyle 模型的 \(\lambda\) 是“每股”的冲击系数。两者思想相同,量纲不同。
14.4 Glosten–Milgrom 定理
14.4.1 两种解释,同一个大小
逆向选择成分有两种解释:
- 信息视角:以下一个交易者是买方或卖方为条件,交易商价值估计之差。
- 会计视角:交易商为从不知情者那里收回预期输给知情者的损失,而必须报出的那部分价差。
两者大小相同,这就是 Glosten–Milgrom 定理。原书先给了直观理解(简化假设:知情者交易时交易商确知价值,但不知道何时是知情者在交易;结论不依赖这一假设):
- 信息视角:与已知的不知情者交易,什么也学不到;与已知的知情者交易,就应把报价调整到正确价值,调整量是定价误差。由于不知道谁知情,每笔交易后只部分调整:逆向选择成分 = 定价误差 × 对手为知情者的概率。
- 会计视角:只有与知情者交易才会亏损,亏损额是原估计与正确价值之差,所以每笔平均损失 = 与知情者交易的损失 × 与知情者交易的概率。
当"与知情者交易的损失 = 定价误差"时两者相等,这在交易商来不及在价格反映信息之前恢复存货时成立。即使交易商能及时恢复存货,结论也基本成立:如果他没意识到与知情者交易而调价不足,知情者会反复来交易,交易商持续亏损,直到价格反映信息,累计损失恰好等于原来的定价误差。
白话解释:两种视角为什么必然相等,可以这样想。交易商像一个按“平均风险”收保费的保险公司。信息视角问的是:“看到这笔买单后,我对价值的估计应该改多少?”答案是“如果他知情我错了多少 × 他知情的概率”。会计视角问的是:“我每笔平均要赔多少?”答案是“如果他知情我赔多少 × 他知情的概率”。只要“错了多少”和“赔多少”是同一个数(定价误差),两个答案就一模一样。前者是精算师算的“期望赔付”,后者是会计记的“实际赔付的平均值”,在大数定律下它们必须相等,否则保费就定错了。
14.4.2 原书附录:单期模型的推导
设定:交易商认为证券的无条件价值为 \(V\);下一个交易者是买方或卖方的概率各 \(\tfrac12\);是知情者的概率为 \(P\);若知情者想买,价值为 \(V+E\),若想卖,价值为 \(V-E\)。交易商既不知道下一个人是否知情,也不知道他要买还是卖。
信息视角:给定下一个是买方,若他不知情,交易商学不到东西,估计仍为 \(V\);若知情,价值为 \(V+E\)。所以
两者之差 \(2PE\) 就是逆向选择价差成分。
推导拆解:上面这一行省掉了一个关键步骤:为什么“看到买单”之后,对手是知情者的概率仍然是 \(P\)? 第一步,用贝叶斯公式:\(P(\text{知情}\mid\text{买})=\dfrac{P(\text{买}\mid\text{知情})\,P}{P(\text{买})}\)。 第二步,设定里“知情者想买或想卖”各占一半(价值高、低等可能),所以 \(P(\text{买}\mid\text{知情})=\tfrac12\);不知情者也是买卖各半,\(P(\text{买}\mid\text{不知情})=\tfrac12\)。全概率公式给出 \(P(\text{买})=\tfrac12P+\tfrac12(1-P)=\tfrac12\)。 第三步,代回:\(P(\text{知情}\mid\text{买})=\tfrac12P/\tfrac12=P\)。正因为两类人买的倾向一样,“看到一笔买单”本身不改变“他是知情者”的概率,只改变“如果知情,价值在哪一边”的判断。 第四步,用全期望公式(把期望按情形拆开再加权):\(E[V\mid\text{买}]=P(\text{知情}\mid\text{买})\cdot E[V\mid\text{买},\text{知情}]+P(\text{不知情}\mid\text{买})\cdot E[V\mid\text{买},\text{不知情}]=P(V+E)+(1-P)V\)。第二项里,不知情者的买单与价值无关,所以条件期望还是 \(V\)。 第五步,同理 \(E[V\mid\text{卖}]=V-PE\),相减得 \(2PE\)。 如果第二步的对称性不成立(比如知情者更可能是买方),\(P(\text{知情}\mid\text{买})\) 就不等于 \(P\),ask 与 bid 也不再关于 \(V\) 对称,这就是练习 7 要处理的推广。
会计视角(忽略经营成本,求使交易商期望盈亏平衡的价差):
- 下一个是卖方,交易商以 bid \(B\) 买入:卖方不知情时期望利润 \(V-B\),知情时 \((V-E)-B\)。加权得 \((1-P)(V-B)+P(V-E-B)=V-B-PE\)。
- 下一个是买方,交易商以 ask \(A\) 卖出:不知情时 \(A-V\),知情时 \(A-(V+E)\)。加权得 \(A-V-PE\)。(原书正文此处把知情买方对应的价值误印为 \(V-E\),按设定应为 \(V+E\);原书给出的结果 \(A-V-PE\) 是正确的。)
- 买卖等概率,期望利润为
令其为零,得盈亏平衡价差 \(A-B=2PE\),与信息视角相同。
这个结果还说明了钱的流向:报价 \(A=V+PE\)、\(B=V-PE\) 时,交易商在每笔不知情交易上赚半价差 \(PE\)(概率 \(1-P\)),在每笔知情交易上亏 \(E-PE\)(概率 \(P\)),期望为 \((1-P)PE-P(E-PE)=0\)。不知情者支付的半价差,原封不动地转移给了知情者,交易商只是中介。逆向选择成分与知情者比例 \(P\) 和信息价值 \(E\) 都成正比。
推导拆解:把上面那个期望展开验算一遍:\((1-P)PE-P(E-PE)=PE-P^2E-PE+P^2E=0\)。知情者每笔平均赚 \(E-PE=(1-P)E\),不知情者每笔平均亏 \(PE\);按人数加权,知情者总收益 \(P(1-P)E\),不知情者总损失 \((1-P)PE\),两者相等。 数值例(与代码 1 第一行相同):\(V=100\)、\(E=2\)、\(P=0.25\)。报价 \(100.5/99.5\),价差 1。不知情者每笔亏 0.5,知情者每笔赚 1.5;每 100 笔里 75 笔不知情、25 笔知情,\(75\times0.5=25\times1.5=37.5\)。
金融直觉:这一模型也解释了为什么零售订单流值钱(第 13 章 PFOF):如果批发商能确定某批订单的 \(P\) 接近 0,他报出的价差就可以接近只覆盖经营成本的 \(S_{TC}\),比交易所里面对全体订单流的报价更好,同时还有利可图。
14.4.3 补充:序贯 Glosten–Milgrom 模型
(本小节是对原书附录的扩展,原模型见 Glosten 和 Milgrom 1985 年发表于 Journal of Financial Economics 的论文。)
原书的单期模型回答了"价差有多大",但没有回答"价差如何随交易演化"。序贯模型把它推广到多笔交易。
设定:证券的真实价值 \(V\in\{V_L,V_H\}\),在交易开始前确定,交易结束后公开。交易商当前认为 \(V=V_H\) 的概率为 \(\delta\)。每次到来一个交易者,交易一单位:以概率 \(\mu\) 是知情者,\(V=V_H\) 时买、\(V=V_L\) 时卖;以概率 \(1-\mu\) 是不知情者,买卖各半。交易商是竞争性的、风险中性的,期望利润为零。
条件概率:
报价 = 条件期望:零利润意味着 ask 必须等于"给定有人来买"时的价值期望,bid 等于"给定有人来卖"时的价值期望。由贝叶斯公式,
推导拆解:(14.3) 的每一块从哪里来。 第一步(似然):先算“价值为高/低时出现买单的概率”。价值高时,知情者(概率 \(\mu\))一定买,不知情者(概率 \(1-\mu\))一半买,合计 \(\mu+\tfrac{1-\mu}{2}=\tfrac{1+\mu}{2}\);价值低时知情者一定卖,只有不知情者的一半买,合计 \(\tfrac{1-\mu}{2}\)。这就是上面的“条件概率”。 第二步(全概率):交易商眼中出现买单的总概率 \(P(\text{买})=\delta\cdot\tfrac{1+\mu}{2}+(1-\delta)\cdot\tfrac{1-\mu}{2}\)。 第三步(贝叶斯):\(\delta^+=P(V_H\mid\text{买})=\dfrac{P(\text{买}\mid V_H)\,\delta}{P(\text{买})}=\dfrac{\delta\cdot\frac{1+\mu}{2}}{\delta\cdot\frac{1+\mu}{2}+(1-\delta)\cdot\frac{1-\mu}{2}}\),分子分母同乘 2,约掉 \(\tfrac12\),即得正文公式。\(\delta^-\) 把“买”的似然换成“卖”的似然 \(\tfrac{1-\mu}{2}\)、\(\tfrac{1+\mu}{2}\) 即可。 第四步(条件期望):\(V\) 只有两个取值,\(E[V\mid\text{买}]=V_H\delta^++V_L(1-\delta^+)=V_L+(V_H-V_L)\delta^+\)。零利润竞争使 Ask 等于它。Bid 同理。 数值例:\(V_L=99\)、\(V_H=101\)、\(\mu=0.2\)、\(\delta=0.5\)。\(\delta^+=\frac{0.5\times1.2}{0.5\times1.2+0.5\times0.8}=0.6\),Ask \(=99+2\times0.6=100.2\);\(\delta^-=0.4\),Bid \(=99.8\)。这与第 13 章导读里的数值例一致。
白话解释:贝叶斯更新还有一个更好记的“赔率”写法。把概率换成赔率 \(\delta/(1-\delta)\)(价值高对价值低的赔率),由第三步直接得到
\[\frac{\delta^+}{1-\delta^+}=\frac{\delta}{1-\delta}\times\frac{1+\mu}{1-\mu},\qquad \frac{\delta^-}{1-\delta^-}=\frac{\delta}{1-\delta}\times\frac{1-\mu}{1+\mu}.\]也就是说,每看到一笔买单,赔率乘以固定倍数 \(\tfrac{1+\mu}{1-\mu}\);每看到一笔卖单,除以这个倍数。\(\mu=0.2\) 时倍数是 1.5。一买一卖正好抵消,回到原来的信念。所以交易商的信念只取决于“净买单笔数”,这和第 12 章“永久冲击只依赖累计净订单流”的无操纵条件是一致的。 继续上面的数值例:一笔买单后 \(\delta=0.6\)(赔率 1.5)。下一次报价时,\(\delta^+\) 对应赔率 \(2.25\),即 \(\delta^+=0.692\),Ask \(=100.385\);\(\delta^-\) 对应赔率 1,即 0.5,Bid \(=100.0\)。价差从 0.4 缩到 0.385,中心上移到约 100.19。
与原书的对应:在 \(\delta=\tfrac12\) 时,\(\delta^{\pm}=\tfrac{1\pm\mu}{2}\),所以
令 \(V=\tfrac{V_L+V_H}{2}\)、\(E=\tfrac{V_H-V_L}{2}\)、\(P=\mu\),这正是 \(2PE\)。
更新规则:成交后,交易商把信念更新为 \(\delta^{+}\)(若是买)或 \(\delta^{-}\)(若是卖),然后按 (14.3) 重新报价。由此得到模型的四个重要性质:
- 交易商零期望利润。每一笔的成交价都是"给定这笔交易及以往全部历史"的价值条件期望。
- 成交价是鞅。因为成交价 \(p_t=E[V\mid\mathcal F_t]\),由迭代期望 \(E[p_{t+1}\mid\mathcal F_t]=p_t\),价格变化不可预测,相邻价格变化不相关。这正是 14.3.2 节"永久性成分是随机游走"的严格表述。
- 价差随学习收窄。价差是 \(\delta\) 的函数,在 \(\delta=\tfrac12\)(最不确定)时最大;交易越多,信念越接近 0 或 1,价差越窄。知情者比例 \(\mu\) 越大,初始价差越宽,但学习也越快。
- 知情者的盈利 = 不知情者的亏损。交易商只是中介。
推导拆解:性质 2 和性质 3 的细节。 性质 2(鞅):记 \(\mathcal F_t\) 为到第 \(t\) 笔为止的全部交易记录。第 \(t\) 笔成交价是在“已知此前历史 + 本笔方向”下的价值期望,即 \(p_t=E[V\mid\mathcal F_t]\)。对下一笔:\(E[p_{t+1}\mid\mathcal F_t]=E\big[E[V\mid\mathcal F_{t+1}]\mid\mathcal F_t\big]=E[V\mid\mathcal F_t]=p_t\),中间一步是塔性质(信息只增不减,用少的信息去预测“多的信息下的预测”,等于直接用少的信息预测)。所以价格变化的条件期望为零,相邻变化不相关,代码 1 中“中间价变化自相关”约为 0 验证了这一点。 性质 3(价差收窄):价差 \(=(V_H-V_L)(\delta^+-\delta^-)\)。由上面的赔率写法,\(\delta\) 越接近 0 或 1,乘以或除以同一个倍数造成的概率变化越小(赔率 99 乘以 1.5 是 148.5,对应概率只从 0.990 变到 0.993),\(\delta^+-\delta^-\) 越小。\(\delta=\tfrac12\) 时同样的赔率变化造成的概率变化最大,价差最宽。真实价值为 \(V_H\) 时,买单出现得更频繁(概率 \(\tfrac{1+\mu}{2}>\tfrac12\)),净买单数随交易笔数稳定增长,赔率按指数趋于无穷,\(\delta\to1\),价差趋于零。 一个读模型时容易混淆的地方:性质 1 说交易商“每笔都不亏”,是以交易商自己掌握的信息为条件的期望:对每一笔,与不知情者成交的期望盈利正好抵消与知情者成交的期望亏损。站在知道真实价值的旁观者角度,在某一条具体路径上交易商可能明显盈利或亏损,只是在所有他无法区分的路径上平均为零。
极端情形与市场失灵:当 \(\mu\to1\) 时,价差趋于 \(V_H-V_L\),ask 等于最高可能价值、bid 等于最低可能价值,不知情者没有任何理由交易,市场不复存在。这就是 14.9 节"市场失灵"的模型版本。
14.5 区分两个成分:Roll 模型与交易方向回归
原书指出,计量经济学家能估计两个成分,因为它们赋予价格不同的统计性质:交易成本成分使价格在 bid 与 ask 之间反弹,带来负自相关;逆向选择成分带来随机游走式的不可预测变化。最常见的方法是用每笔交易是买方还是卖方发起(交易方向,trade sign)去解释当前和未来的价格变化。原书的结论是:多数市场中,逆向选择成分占总价差的比例大于交易成本成分。 原书没有给出具体模型,下面两小节为补充内容。
14.5.1 补充:Roll 模型
Roll(1984)给出了一个只用成交价就能估计价差的方法。假设:
- 有效价格 \(m_t\) 是随机游走,其变化与交易方向无关(即没有逆向选择,\(\lambda=0\));
- 成交价 \(p_t=m_t+c\,q_t\),\(q_t\) 独立同分布,以各 \(\tfrac12\) 的概率取 \(\pm1\);半价差 \(c=s/2\)。
于是
由于 \(\Delta m_t\) 与所有 \(q\) 独立、\(\mathrm{Var}(q)=1\),
所以
推导拆解:中间那一步只用了协方差的双线性和独立性,逐项写出来。 第一步,写出两期价格变化:\(\Delta p_t=\Delta m_t+c\,q_t-c\,q_{t-1}\),\(\Delta p_{t-1}=\Delta m_{t-1}+c\,q_{t-1}-c\,q_{t-2}\)。 第二步,按双线性把 \(\mathrm{Cov}(\Delta p_t,\Delta p_{t-1})\) 展开成 \(3\times3=9\) 项。凡是含 \(\Delta m\) 的项都为零:\(\Delta m_t\) 与 \(\Delta m_{t-1}\) 不相关(随机游走的增量独立),\(\Delta m\) 与所有 \(q\) 独立(假设没有逆向选择)。 第三步,剩下 4 项:\(c^2[\mathrm{Cov}(q_t,q_{t-1})-\mathrm{Cov}(q_t,q_{t-2})-\mathrm{Cov}(q_{t-1},q_{t-1})+\mathrm{Cov}(q_{t-1},q_{t-2})]\)。不同时刻的 \(q\) 独立,只有第三项不为零,它是 \(-\mathrm{Var}(q_{t-1})=-1\)(\(q\) 取 \(\pm1\),均值 0,方差 1)。 第四步,所以 \(\mathrm{Cov}=-c^2\),\(c=\sqrt{-\mathrm{Cov}}\),价差 \(s=2c\)。 直观上:\(q_{t-1}\) 同时出现在两期价格变化里,在前一期带正号(价格从中点跳到 ask),在后一期带负号(从 ask 跳回中点),这个“共享的一跳”造成负自协方差。用数字看:中点不动、半价差 0.05 时,一笔从 bid 到 ask 的变化 \(+0.10\) 后,下一笔变化只可能是 0(又一笔买)或 \(-0.10\)(一笔卖),平均 \(-0.05\),确实倾向于反转。
推导拆解:有逆向选择时的协方差 \(-c(c+\lambda)\)。由 (14.2),\(\Delta p_t=\Delta m_t+c(q_t-q_{t-1})=(\lambda+c)q_t-c\,q_{t-1}+\varepsilon_t\),同理 \(\Delta p_{t-1}=(\lambda+c)q_{t-1}-c\,q_{t-2}+\varepsilon_{t-1}\)。两式中唯一共享的随机变量是 \(q_{t-1}\),系数分别是 \(-c\) 和 \(\lambda+c\),所以 \(\mathrm{Cov}=-c(\lambda+c)\mathrm{Var}(q_{t-1})=-c(c+\lambda)\)。Roll 估计量 \(2\sqrt{c(c+\lambda)}\) 是 \(2c\) 与 \(2(c+\lambda)\) 的几何平均,必然夹在两者之间。代码 2 中 \(c=0.03\)、\(\lambda=0.02\),得 \(2\sqrt{0.0015}\approx0.0775\)。
它估计的到底是什么:若存在逆向选择,按 (14.2) 有 \(\Delta p_t=(\lambda+c)q_t-c\,q_{t-1}+\varepsilon_t\),此时
Roll 估计量变成 \(2\sqrt{c(c+\lambda)}\),介于暂时性价差 \(2c\) 与总有效价差 \(2(c+\lambda)\) 之间。也就是说,Roll 模型主要捕捉买卖反弹,系统性地低估存在逆向选择时的总价差。另一个实际问题是:样本自协方差为正时,公式无定义,这在日频数据中很常见。
14.5.2 补充:用交易方向回归分解价差
若能观察到交易方向 \(q_t\)(有逐笔数据时可用 Lee–Ready 等算法推断),可以直接对 (14.2) 做回归:
于是 \(\hat c=-\hat\beta_2\),\(\hat\lambda=\hat\beta_1+\hat\beta_2\),逆向选择占半价差的比例为 \(\hat\lambda/(\hat\lambda+\hat c)\)。这是 Glosten–Harris(1988)、Huang–Stoll(1997)等一类模型的最简形式;实际研究中还会加入交易规模、订单流自相关等项。
推导拆解:回归系数为什么能读出两个成分,以及方向误判为什么造成衰减。 第一步,上一个讲解框已得到 \(\Delta p_t=(\lambda+c)q_t-c\,q_{t-1}+\varepsilon_t\)。把它与回归式逐项对照,\(\beta_1=\lambda+c\),\(\beta_2=-c\),误差项就是公共信息 \(\varepsilon_t\)。 第二步,OLS 能正确估计这两个系数,需要自变量与误差项无关:\(q_t\)、\(q_{t-1}\) 与 \(\varepsilon_t\) 独立,且 \(q_t\) 与 \(q_{t-1}\) 互不相关(这里假设交易方向独立同分布)。 第三步,解出 \(c=-\beta_2\),\(\lambda=\beta_1-c=\beta_1+\beta_2\)。 第四步(误判):若观察到的方向 \(\tilde q_t\) 以概率 \(f\) 与真实方向相反,则 \(\mathrm{Cov}(\tilde q_t,q_t)=(1-f)\cdot1+f\cdot(-1)=1-2f\),而 \(\mathrm{Var}(\tilde q_t)=1\)。用 \(\tilde q\) 回归时,每个系数都乘以 \(\mathrm{Cov}(\tilde q,q)/\mathrm{Var}(\tilde q)=1-2f\)。\(f=0.2\) 时乘以 0.6,正是代码 2 最后一行的结果。由于两个系数按同一比例缩小,\(\lambda/(\lambda+c)\) 不受影响。这与 CFA 二级回归里“自变量有测量误差导致系数向零偏”是同一种现象。
金融直觉:用这个回归可以给自己的执行做“体检”。拿自己的成交记录(方向确定、无需推断),对成交后的中间价变化回归:若永久成分 \(\lambda\) 占比很高,说明你的订单在市场眼里“像知情者”,冲击会留在价格里,大单要更耐心地拆;若暂时成分 \(c\) 占比高,说明你主要在支付流动性费用,价格会反弹,挂限价单等待更划算。
14.6 本书最重要的一课:不知情者为什么总会输
逆向选择解释了为什么不知情者无论用什么订单都会输给知情者。
用限价单:
- 如果 bid 定得过高或 offer 定得过低,订单很快成交,因为知情者急于和它交易,事后不知情者后悔成交(像交易商一样直接遭受逆向选择);
- 如果和知情者站在同一侧竞争,限价单常常不成交;知情者通常判断正确,价格会远离限价单,不知情者后悔没成交。
用市价单:保证成交,但交易商已经把价差加宽了,以便从不知情者身上收回输给知情者的部分。逆向选择价差实际上是交易商向市价单交易者收取的、承担逆向选择风险的费用。
不知情者输,并不是因为系统性地站错了边:即使抛硬币决定方向,也有一半时间是对的,但成交成本使他们平均亏损。
表 14-1 不知情者无论如何交易都倾向于输给知情者
| 不知情者的订单 | 知情者 | 订单结果 | 随后价格 | 对不知情者的后果 |
|---|---|---|---|---|
| 限价单 | 想在另一侧交易 | 知情者迅速成交该订单 | 朝不利于新头寸的方向变动 | 后悔成交 |
| 限价单 | 想在同一侧交易 | 与知情者竞争而不成交 | 远离限价单 | 后悔未成交 |
| 市价单 | 无关 | 以被知情交易加宽的价差成交 | 买卖反弹使价格朝不利方向变动 | 损失半个价差 |
结论:不知情者唯一避免输钱的办法是不交易。 对量化交易者,这条结论的含义很具体:一个没有 alpha 的再平衡交易,期望收益就是负的半价差加冲击成本;换手本身就是成本,任何策略都要先证明其信号的期望收益能覆盖它。
14.7 指令驱动市场中的均衡价差
在连续指令驱动拍卖市场里,没有专门的交易商,价差由交易者自己选择限价单还是市价单决定。分析基础是 Cohen、Maier、Schwartz 和 Whitcomb(1981)关于均衡价差的论文。回顾第 04a 章:市价单立即成交但支付价差;限价单若成交则价格好,但市场离开时可能不成交,届时若仍想交易,只能改用更激进的订单,结果可能比一开始就用市价单更差。
14.7.1 理想情形:均衡价差为零
先做一组极不现实的假设:所有交易者本质相同(交易规模相同,无人更知情,无人风险厌恶,不看重时间,不急于交易);人人瞬间得知价值变化但无人能预测;可瞬间、零成本地下单和撤单;佣金与订单类型无关。唯一的差别是有人想买、有人想卖。
两个推论:
- 选择订单策略时只关心期望交易成本;
- 每笔成交价都等于当前价值:限价单交易者知道价值并可免费撤改单,会持续调整限价;市价单交易者无法以偏离价值的价格成交。
于是市价单的期望成本恰为半个价差(择时无利可图)。均衡要求两种策略同样有吸引力,否则人人都选更好的那种:价差太窄,人人用市价单,没人挂单;太宽,人人挂单,没人成交。
结论:此时均衡价差为零。 推理是:交易是零和的,限价单交易者的期望成本恰等于市价单交易者的期望利润;均衡要求两种策略的期望成本相等,所以都为零;市价单的期望成本是半个价差,所以价差为零。
推导拆解:把这个论证写成两行代数。记半价差为 \(h\)。市价单交易者相对价值多付 \(h\),成本为 \(+h\);与之成交的限价单交易者相对价值多赚 \(h\),成本为 \(-h\)(零和)。均衡要求两种策略成本相等:\(h=-h\),所以 \(h=0\)。 加入佣金差后同样做:市价单成本 \(h+C_M\),限价单成本 \(-h+C_L\)(\(C_M\)、\(C_L\) 分别为市价单和限价单佣金),令两者相等得 \(2h=C_L-C_M\),价差 \(S^*=2h=C_L-C_M\),即下面 14.7.2 的第一个公式。 这种“让两个可选策略的期望成本相等”的论证,与 CFA 里用“无差异”求解远期价格、利率平价的思路相同:如果一边更便宜,所有人都会涌向那一边,直到价格调整到两边无差异。
原书在这里插了一个"经济学家与开罐器"的笑话:荒岛上三个饥饿的人要开罐头,化学家建议加热,工程师建议用石头砸,经济学家说"假设我们有一个开罐器……"。不现实的假设是为了构造一个能完全理解的基准,然后逐一替换成现实的假设,看结果如何变化。下面就这样做。
14.7.2 逐一放松假设
差别佣金:若限价单佣金高于市价单,没有补偿就没人挂单。均衡时价差必须扩大,使两类交易者平摊佣金差:市价单成本为半个价差,须等于佣金差的一半,所以
原书的边栏"对报价价差的操纵"由此推出:只对市价单收佣金的市场,报价价差会恰好收窄"佣金差"那么多,但这不改变交易者的实际成本。只有能控制全体买卖双方佣金的市场(经营自己市场的经纪人、能规定佣金的交易所)才能这样做。当时 Cantor Fitzgerald 的子公司 eSpeed 在政府债券市场只对市价单收佣金;Archipelago 等 ECN 也对两类订单收不同费用。这就是今天 maker-taker 收费模式的雏形。
现状补充:maker-taker(对挂单方返佣、对吃单方收费)已是美国股票交易所的主流收费模式。Reg NMS 规则 610 长期把访问费上限定为每股 0.3 美分;2024 年 SEC 修订 Reg NMS,下调了这一上限,并对部分报价价差很窄的股票引入半美分的最小报价单位。按本节的逻辑,比较不同交易所的报价价差时,应使用含费后的价差。
昂贵的限价单管理:现实中撤单重下有成本(撤单费、注意力的机会成本),限价单交易者只在价值显著偏离限价时才调整。更重要的是,不持续更新的限价单向市价单交易者赠送了有价值的择时期权(timing option):想买的市价单交易者可以等着看,若价值涨过某张卖出限价单的限价,就按限价买入赚差价;若价值下跌,就等卖方降价。择时期权让限价单交易者遭受一种逆向选择:成交时后悔没改价,没成交时后悔没成交。从这个意义上,市价单交易者"更知情",因为他们掌握的信息比限价单交易者设定限价时更新。
择时期权在两种情况下最有价值:市价单交易者反应快于限价单交易者;竞争行使同一期权的市价单交易者少。均衡价差为
因为价差是用两笔市价单完成一次往返的总成本,均衡必须补偿限价单交易者赠出的择时期权,并让两类交易者平摊管理成本。现实中限价单交易者无法在最优时刻瞬间改价:注意力成本、下单路由延迟都使择时期权更值钱。所以撤单越慢,均衡价差越宽;品种越波动,择时期权越值钱,均衡价差也越宽。
金融直觉:(14.5) 中的“2 倍”来自期权的两条腿。一张挂在 ask 的卖出限价单,等于向全市场免费卖出一张执行价为 ask 的看涨期权(价值涨过 ask 时,谁都可以按 ask 买走);挂在 bid 的买入限价单,等于免费卖出一张执行价为 bid 的看跌期权。价差是一次完整往返的成本,覆盖买卖两边,所以要补偿两张期权。期权价值随波动率和期限上升:期限在这里就是“限价单交易者发现价值变化、撤单改价所需的时间”。撤单延迟从 1 秒降到 1 毫秒,相当于把期权期限缩短了 1000 倍,期权价值大约按 \(\sqrt{T}\) 缩小(布朗运动下价值偏离的幅度与 \(\sqrt{T}\) 成正比),这就是做市商愿意为低延迟花大钱的原因。
例 14.1(简单择时期权):合约价值 20 美元,接下来 5 分钟价值可能不变、涨 12 美分或跌 12 美分,各 \(\tfrac13\)。
- Lisbet 挂了限价 20 的卖单;
- Mark 是对价格不敏感的市价单买方,5 分钟内到达的概率为 \(\tfrac12\),与价值变化无关;
- Tim 伺机行使择时期权:若价值上涨而 Mark 未先到,就从 Lisbet 处买入;
- Dieter 是交易商,总愿以低于当前价值 6 美分的价格买入;5 分钟后若 Lisbet 未成交,她就卖给 Dieter。
无 Tim:\(\tfrac12\) 概率卖给 Mark 得 20;否则卖给 Dieter,价值跌、不变、涨时分别得 19.82、19.94、20.06,平均 19.94。期望卖价 \((20+19.94)/2=19.97\)。
有 Tim:Mark 不来时,价值跌得 19.82(Dieter),不变得 19.94(Dieter),涨则被 Tim 以 20.00 买走,平均 19.92。期望卖价 \((20+19.92)/2=19.96\)。
Tim 的期望利润是 \(\tfrac13\times\tfrac12\times12=2\) 美分。其中 1 美分来自 Lisbet:她在 \(\tfrac16\) 的时间里(价值上涨且 Mark 未到)以 20 而不是 20.06 成交,\(\tfrac16\times6=1\) 美分。(原书此处误写为"Mark arrives"。)另 1 美分来自 Dieter:无 Tim 时 Dieter 以 \(\tfrac12\) 的概率成交、每次赚 6 美分,期望 3 美分;有 Tim 时只在 Mark 不来且价值跌或不变时成交(概率 \(\tfrac13\)),期望 2 美分。也就是说,Tim 一半是在对 Lisbet 行使择时期权,一半是在 Dieter 的报价前面做报价匹配。
时间价值与风险厌恶:交易者看重时间时,限价单策略更费时、更贵,均衡价差必须扩大。所以价差就是即时性的价格,交易员说"市价单交易者买时间,限价单交易者卖时间"。风险方面,限价单交易者面临不成交的执行风险,市价单交易者面临成交价意外的价格风险。对小交易者限价单风险更大,对大交易者市价单风险可能更大。内部价差处的挂单量往往很小,可以合理推断内部价差主要由小交易者设定,所以限价单执行风险对价差的影响可能更强。均衡时,最风险厌恶、最看重时间的人用市价单,最能承受风险、监控成本最低的人用限价单。
原书还介绍了两类降低限价单成本的工具:指数化(浮动)限价单(indexed / floating limit orders,按指定指数自动调整限价,今天的盯住订单 pegged orders 即此类)和自动限价单管理系统(如 ITG 的 Quantex,可编程实现"限价单在指定时间后未成交即改为市价单"等规则)。它们降低了挂单成本,从而降低均衡价差。
价值估计的共同不确定性:只要所有人总是同样知情,结论不变。唯一的例外涉及波动率:条件期望的方差不超过原变量的方差,\(\mathrm{Var}(E[V\mid\mathcal F])\le\mathrm{Var}(V)\),所以价值估计的波动率低于价值本身的波动率,模型推出"交易者对价值了解越少,价差越小"。这与现实(价值不确定时价差通常更大)相反,差别在于现实中信息是不对称分布的。
白话解释:\(\mathrm{Var}(E[V\mid\mathcal F])\le\mathrm{Var}(V)\) 来自“总方差分解”:\(\mathrm{Var}(V)=\mathrm{Var}(E[V\mid\mathcal F])+E[\mathrm{Var}(V\mid\mathcal F)]\),即总波动 = 可解释的波动 + 剩余的不确定性,后一项非负。和回归里“总平方和 = 回归平方和 + 残差平方和”是一回事。信息越少,你的估计越“平滑”,越少随新信息跳动;而择时期权的价值取决于估计的跳动幅度,所以在“人人同样无知”的世界里,择时期权反而更不值钱。现实中价差随不确定性扩大,说明起作用的是信息不对称,而不是不确定性本身。
信息不对称:知情者之间互相竞争,都必须快速交易,所以知情者倾向于用市价单。这使限价单交易者遭受逆向选择:站错边的限价单迅速成交,站对边的不成交。均衡价差必须为此额外扩大,这部分就是逆向选择价差。对多数品种,信息不对称程度与交易者的估值能力成反比:多数人估值很差时,能估好的人优势巨大。所以多数人难以估值的品种,价差更宽。
表 14-2 连续指令驱动市场中均衡价差的决定因素
| 因素 | 对价差的影响 | 重要性 |
|---|---|---|
| 交易者间信息不对称程度 | 扩大 | 很大 |
| 撤销限价单所需时间 | 扩大 | 高 |
| 波动率 | 扩大 | 高 |
| 限价单管理成本 | 扩大 | 中 |
| 交易者的时间价值 | 扩大 | 中 |
| 限价单与市价单佣金之差 | 一比一 | 取决于差额 |
| 交易者风险厌恶程度 | 扩大 | 低 |
小结:所有交易者相同时,均衡价差使他们在两种策略间无差异;交易者不同时,均衡价差使流动性供给等于需求。平均而言,限价单策略的成交价略优于市价单策略,因为市价单交易者必须补偿限价单交易者额外付出的管理时间、价格风险和择时期权。
14.8 公共交易者与交易商竞争
两者的竞争并不对等:
- 公共限价单交易者没有交易商的经营成本,可以报更激进的价格。决心成交的公共交易者可能用激进定价的限价单代替市价单,由此形成的价差可能小到交易商无法覆盖成本,把交易商挤出市场。
- 但交易商看到的订单流更多,改价通常也更快。在价差极窄的市场中,交易商可以靠分析订单流发现的投机机会生存,尤其是报价匹配、订单预期、择时等公共交易者无法识别或无法足够快实施的策略(第 11、24 章)。交易商越多地使用这些策略,限价单对公共交易者越没有吸引力,公共交易者更多改用市价单,价差反而比交易商不利用订单流时更宽。
这段分析几乎就是今天高频做市商与普通挂单者关系的写照。
14.9 横截面价差预测
14.9.1 三个主要决定因素
价差的三个主要决定因素是:交易者间的信息不对称、波动率、功利性交易兴趣(utilitarian trading interest,第 08 章:功利型交易者因交易带来的利润以外的好处而交易)。知道这三者,就能预测价差。难点在于只有波动率容易测量,另外两个都不能直接观测,必须从可观察的特征推断,这些特征称为次要决定因素。原书幽默地说,实证经济学就是经济学家努力让大家相信自己找到了好的代理变量(proxy)的竞赛。
比较不同证券时要用相对价差 = 价差 / 价格:1 美元股票 10 美分价差(10%)比 100 美元股票 1 美元价差(1%)贵得多。
- 信息不对称:知情者掌握重大信息时价差最宽。
- 波动率:波动增加限价单的期权价值;使可分散存货风险对风险厌恶的交易商更可怕,需要风险溢价;还是信息不对称的良好代理,因为基本面变化快的品种难以估值。所以波动品种的逆向选择成分一般较大。
- 功利性交易兴趣:没有功利型交易者就没有市场,纯逐利的交易者彼此交易不可能都赚钱。功利性兴趣通过两条途径收窄价差:兴趣强则市场活跃;功利型交易者不知情,稀释了订单流中的信息。市场活跃使价差变窄的原因有四:固定成本摊到更多成交量上;存货失衡能迅速转移,存货风险小;限价单成交概率高、赠出的择时期权价值低(很多人竞争行使),公共交易者更愿意挂单;不活跃市场容纳不了很多交易商,交易商可能有定价权。
三者并不独立:信息不对称高 → 价差宽 → 劝退不知情投资者 → 成交量下降 → 价差更宽。
14.9.2 次要决定因素(代理变量)
表 14-3 横截面相对价差的代理变量
| 主要因素 | 代理变量 | 预测(其他条件相同) |
|---|---|---|
| 信息不对称 | 信息披露规则严格 | 价差更窄 |
| 政府发布商品市场供求报告 | 价差更窄 | |
| 分析师覆盖多、媒体报道多 | 价差更窄 | |
| 代表整体经济风险的合约(石油、黄金、利率、外汇、股指期货) | 价差很窄 | |
| 分散化组合(股指期货 vs 个股)、多元化经营公司 | 价差更窄 | |
| 成熟行业(价值股)vs 新兴行业(成长股);老公司 vs 年轻公司 | 前者更窄 | |
| 内幕交易规则执行有效 | 价差更窄 | |
| 财报公告前后、预期出现重大信息时 | 价差扩大 | |
| 波动率 | 财务杠杆、经营杠杆、增长不确定(股票);易腐、库存低、依赖天气(商品);政治与通胀不确定(货币);通胀、利率、信用风险(债券) | 价差更宽 |
| 功利性交易兴趣 | 成交量、成交笔数 | 越活跃越窄 |
| 公司规模 | 越大越窄 | |
| 债券发行规模;新券(on-the-run)vs 老券(off-the-run) | 大额新券最窄,随老化变宽 | |
| 合约能否复制众多对冲者的风险 | 能则更窄 | |
| 波动率(次级效应:吸引赌徒和对冲者) | 与主要效应方向相反 |
几个边栏值得一提:
- 德国 GAAP 与美国 GAAP:德国公司历来使用的会计准则允许大量隐藏准备金平滑利润,分析师难以准确估值,所以其股票价差应更宽。NYSE 当时要求上市公司使用美国 GAAP 或基本相似的准则。
- 为什么美联储主席的讲话很少有意思:宏观合约价差很窄,因为很少有人对利率有可靠的私人信息;唯一可能准确预测利率的是美联储主席和 FOMC 成员,他们不能利用这些信息交易,也不想透露任何能让人预测利率走向的东西。
- 橙汁期货:寒潮南下佛罗里达时,气象学家和当地农民有信息优势,期货价差扩大。
现状补充:欧盟自 2005 年起要求上市公司合并报表采用国际财务报告准则(IFRS);SEC 于 2007 年起允许外国私人发行人直接用 IFRS 报告而无需调节到美国 GAAP。原书的会计准则对比如今已基本成为历史,但"信息披露质量影响价差"的结论仍然成立。
原书提醒,次要因素之间常常相关,分类也有些随意(如公司规模与投资者兴趣正相关、与波动率负相关)。例如,新兴行业因信息不对称应当价差更宽,但新兴行业常有大量投资兴趣,带来大成交量和更窄的价差。因素相关时,需要用多元回归来分离相互冲突的效应,下面的量化实战会演示。
14.9.3 流动性与资本结构:市场失灵
信息不对称特别严重或功利性兴趣极小时,价差可能宽到没人交易:交易商预期输给知情者的损失(以及为避免损失而研究价值的成本)大于交易收入,就不会做市。经济学家称之为市场失灵(market failure),意思不是市场出了故障,而是市场根本不存在。这正是序贯 Glosten–Milgrom 模型中 \(\mu\to1\) 的情形。
市场失灵解释了小企业为什么很少发行公开交易的股票:投资者不会买无法交易的股票。小企业只能向银行(私人债务)和风险投资(私募股权)融资,这些机构花大量时间做尽职调查,并对管理层施加限制,最重要的是监督权,而这只有在保密、互信的私人关系中才可行。原书的例子是 Tommy 的汉堡店:单店小生意想扩张,投行朋友告诉他几乎没人会买他的股票,因为交易商害怕与更知情者交易而不会做市;最后他从为他提供结算服务的银行融到了钱,银行可以持续监控他的支票账户。
量化实战
本章是量化交易中交易成本建模的理论基础,用途至少有五个:
- 回测中的成本假设:至少用"相对半价差 + 冲击"计算成本;高频回测中要用中间价而不是成交价计算收益,否则买卖反弹会制造虚假的负自相关和虚假的反转 alpha。
- 交易成本模型:横截面价差预测(规模、成交量、波动率、分析师覆盖、财报窗口)可以直接作为成本模型的解释变量,用于组合优化中的成本惩罚项和策略容量估计。财报前后价差扩大,意味着事件驱动策略在这些窗口的执行成本更高。
- 限价 vs 市价的决策:均衡价差模型给出"何时挂单、何时吃单"的框架。挂单的期望收益必须覆盖择时期权损失(被更快的人"挑走")和不成交风险。撤单延迟和波动率决定挂单的期望 markout,这正是高频交易追求低延迟的经济原因;Tim 的例子就是"陈旧报价狙击"(stale quote sniping)。
- 做市报价:(14.1)–(14.3) 就是做市报价的骨架:中心 = 价值估计,半价差 = 半个交易成本成分 + 半个逆向选择成分,成交后按 \(\lambda q_t\) 移动中心。Glosten–Milgrom 给出了 \(\lambda\) 的贝叶斯基础。
- 微观结构计量:Roll 估计、交易方向回归、Hasbrouck 向量自回归、PIN/VPIN 等指标都建立在本章暂时性/永久性成分的区分之上。
代码 1:Glosten–Milgrom,从单期到序贯
import numpy as np
import pandas as pd
# ---------- (1) Harris 附录的单期模型:两种视角给出同一个价差 2PE ----------
V, E, P = 100.0, 2.0, 0.25
ask_info = (1 - P) * V + P * (V + E) # 信息视角:E[V | 买]
bid_info = (1 - P) * V + P * (V - E) # 信息视角:E[V | 卖]
def dealer_profit(A, B): # 会计视角:交易商期望利润
sell_to_buyer = (1 - P) * (A - V) + P * (A - (V + E))
buy_from_seller = (1 - P) * (V - B) + P * ((V - E) - B)
return 0.5 * sell_to_buyer + 0.5 * buy_from_seller
print(f"信息视角价差 = {ask_info - bid_info:.3f};2PE = {2*P*E:.3f};"
f"以 V±PE 报价时交易商期望利润 = {dealer_profit(V + P*E, V - P*E):.1e}")
# ---------- (2) 序贯 Glosten–Milgrom 模型 ----------
def gm_quotes(delta, mu, VL, VH):
"""delta = P(V=VH)。知情者比例 mu,不知情者买卖各半。
返回 bid, ask 以及成交后的后验 P(VH|买)、P(VH|卖)。"""
pb_H, pb_L = mu + (1 - mu) / 2, (1 - mu) / 2 # P(买|VH), P(买|VL)
pH_buy = delta * pb_H / (delta * pb_H + (1 - delta) * pb_L)
pH_sell = delta * (1 - pb_H) / (delta * (1 - pb_H) + (1 - delta) * (1 - pb_L))
return VL + (VH - VL) * pH_sell, VL + (VH - VL) * pH_buy, pH_buy, pH_sell
def simulate_gm(mu, VL=99.0, VH=101.0, n_trades=60, n_paths=20000, seed=14):
rng = np.random.default_rng(seed)
spreads = np.zeros((n_paths, n_trades))
mids = np.zeros((n_paths, n_trades + 1))
gain = {"知情者": [], "不知情者": []}
for i in range(n_paths):
Vtrue = VH if rng.random() < 0.5 else VL
delta = 0.5
mids[i, 0] = VL + (VH - VL) * delta
for t in range(n_trades):
bid, ask, pHb, pHs = gm_quotes(delta, mu, VL, VH)
spreads[i, t] = ask - bid
if rng.random() < mu:
who, buy = "知情者", Vtrue == VH
else:
who, buy = "不知情者", rng.random() < 0.5
price = ask if buy else bid
gain[who].append((Vtrue - price) if buy else (price - Vtrue))
delta = pHb if buy else pHs # 贝叶斯更新
mids[i, t + 1] = VL + (VH - VL) * delta
gi, gu = np.array(gain["知情者"]), np.array(gain["不知情者"])
dealer = -(gi.sum() + gu.sum()) / (n_paths * n_trades)
d = np.diff(mids, axis=1)
rho = np.corrcoef(d[:, 1:].ravel(), d[:, :-1].ravel())[0, 1]
sp = spreads.mean(axis=0)
return dict(mu=mu, 价差_第1笔=sp[0], 价差_第10笔=sp[9], 价差_第40笔=sp[39],
交易商每笔=dealer, 知情者每笔=gi.mean(), 不知情者每笔=gu.mean(),
中间价变化自相关=rho)
pd.set_option("display.width", 200)
print(pd.DataFrame([simulate_gm(mu) for mu in [0.1, 0.3, 0.5]]).round(4).to_string(index=False))
输出:
信息视角价差 = 1.000;2PE = 1.000;以 V±PE 报价时交易商期望利润 = 0.0e+00
mu 价差_第1笔 价差_第10笔 价差_第40笔 交易商每笔 知情者每笔 不知情者每笔 中间价变化自相关
0.1 0.2 0.1834 0.1422 0.0006 0.7024 -0.0786 0.0005
0.3 0.6 0.3044 0.0511 -0.0002 0.1737 -0.0743 -0.0014
0.5 1.0 0.1738 0.0014 -0.0000 0.0470 -0.0469 -0.0021
解读:
- 第一行验证了原书附录:\(P=0.25\)、\(E=2\) 时两种视角都给出价差 \(2PE=1\),以 \(V\pm PE\) 报价时交易商期望利润恰为零。
- 首笔价差恰为 \(\mu(V_H-V_L)\),与 \(2PE\) 对应。
- 价差随交易收窄,知情者越多收窄越快:\(\mu=0.5\) 时第 40 笔价差几乎为零,因为交易商已基本确定了真实价值。
- 交易商每笔利润约为零(模拟误差内),知情者赚的就是不知情者亏的:以 \(\mu=0.1\) 为例,\(0.1\times0.7024\approx0.9\times0.0786\approx0.07\)。
- 中间价变化自相关约为零:价格是鞅,逆向选择造成的价格变化是永久的。
- 一个容易忽略的细节:\(\mu\) 越大,不知情者的每笔平均亏损在这 60 笔里反而更小。原因是知情者多时交易商学得快,价格很快接近真实价值,后面的交易价差很窄。不知情者最吃亏的,是信息刚出现、价格还远未反映信息的那段时间。
代码 2:Roll 模型与价差分解回归
按 (14.2) 模拟逐笔数据:暂时性半价差 \(c=0.03\),永久冲击 \(\lambda=0.02\)。
import numpy as np
import statsmodels.api as sm
rng = np.random.default_rng(140)
N = 100_000
c, lam, sig = 0.03, 0.02, 0.02 # 暂时性半价差、永久冲击(逆向选择)、公共信息噪声
q = rng.choice([-1, 1], N) # 交易方向:买 +1,卖 -1
m = 50 + np.cumsum(lam * q + rng.normal(0, sig, N)) # 有效价格(成交后的中间价)
p = m + c * q # 成交价
dp = np.diff(p)
def roll(dp):
cov = np.cov(dp[1:], dp[:-1])[0, 1]
return 2 * np.sqrt(-cov) if cov < 0 else np.nan
print(f"真实有效价差 2(c+λ) = {2*(c+lam):.4f};暂时性部分 2c = {2*c:.4f}")
print(f"理论 Roll 值 2√(c(c+λ)) = {2*np.sqrt(c*(c+lam)):.4f};样本 Roll 估计 = {roll(dp):.4f}")
# 纯买卖反弹情形(λ=0):Roll 估计应恢复 2c
m0 = 50 + np.cumsum(rng.normal(0, sig, N))
print(f"λ=0 时样本 Roll 估计 = {roll(np.diff(m0 + c*q)):.4f}(真值 {2*c:.4f})")
# 用交易方向回归分解价差:Δp_t = (λ+c) q_t − c q_{t−1} + e_t
X = np.column_stack([q[1:], q[:-1]])
res = sm.OLS(dp, X).fit()
b1, b2 = res.params
c_hat, lam_hat = -b2, b1 + b2
print(f"\n回归系数 b1={b1:.4f} (理论 {lam+c:.3f}), b2={b2:.4f} (理论 {-c:.3f})")
print(f"估计 c = {c_hat:.4f},λ = {lam_hat:.4f};逆向选择占半价差比例 = {lam_hat/(lam_hat+c_hat):.2%}"
f"(真值 {lam/(lam+c):.0%})")
# 交易方向误判 20% 时的影响
flip = rng.random(N) < 0.20
q_obs = np.where(flip, -q, q)
res2 = sm.OLS(dp, np.column_stack([q_obs[1:], q_obs[:-1]])).fit()
print(f"20% 方向误判时:估计 c = {-res2.params[1]:.4f},λ = {res2.params.sum():.4f}")
输出:
真实有效价差 2(c+λ) = 0.1000;暂时性部分 2c = 0.0600
理论 Roll 值 2√(c(c+λ)) = 0.0775;样本 Roll 估计 = 0.0769
λ=0 时样本 Roll 估计 = 0.0596(真值 0.0600)
回归系数 b1=0.0501 (理论 0.050), b2=-0.0300 (理论 -0.030)
估计 c = 0.0300,λ = 0.0200;逆向选择占半价差比例 = 40.02%(真值 40%)
20% 方向误判时:估计 c = 0.0178,λ = 0.0121
结论:没有逆向选择时 Roll 估计准确;有逆向选择时它落在 \(2c\) 与 \(2(c+\lambda)\) 之间,低估了总价差。交易方向回归能准确分离两个成分。最后一行提醒:交易方向推断有误差时,两个系数都会按 \(1-2\times\)误判率(这里是 0.6)被衰减,各成分的绝对值被低估,但两者的比例不受影响。实际研究中,Lee–Ready 算法的误判率不可忽视,这一点要心中有数。
代码 3:择时期权例子的精确计算
from itertools import product
from fractions import Fraction as F
# 原书"简单择时期权例子":价值 20,5 分钟内变为 19.88 / 20 / 20.12,各 1/3;
# Mark(不看价格的市价买单)到达概率 1/2;Dieter 总以"当前价值 - 0.06"买入。
values = [F(1988, 100), F(20), F(2012, 100)]
def outcome(with_tim):
lis = tim = die = F(0)
for v, mark in product(values, [True, False]):
pr = F(1, 3) * F(1, 2)
if mark: # Mark 先到,以 20 买走
lis += pr * 20
elif with_tim and v > 20: # Tim 行使择时期权
lis += pr * 20; tim += pr * (v - 20)
else: # 5 分钟后卖给 Dieter
lis += pr * (v - F(6, 100)); die += pr * F(6, 100)
return lis, tim, die
for flag in [False, True]:
lis, tim, die = outcome(flag)
print(f"{'有' if flag else '无'} Tim:Lisbet 期望卖价 {float(lis):.4f},"
f"Tim 期望利润 {float(tim)*100:.1f} 美分,Dieter 期望利润 {float(die)*100:.1f} 美分")
输出:
无 Tim:Lisbet 期望卖价 19.9700,Tim 期望利润 0.0 美分,Dieter 期望利润 3.0 美分
有 Tim:Lisbet 期望卖价 19.9600,Tim 期望利润 2.0 美分,Dieter 期望利润 2.0 美分
与例 14.1 完全一致:Tim 的 2 美分中,Lisbet 和 Dieter 各贡献 1 美分。
代码 4:横截面价差模型(交易成本模型的雏形)
下面用模拟的横截面数据演示如何把 14.9 节的预测变成成本模型。数据生成机制是假设的,系数符号按本章的横截面预测设定,目的是演示方法,而不是给出真实市场的系数。
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
rng = np.random.default_rng(1406)
n = 3000
log_mcap = rng.normal(9, 1.5, n) # 对数市值
log_vol = 0.8 * log_mcap + rng.normal(0, 0.8, n) # 对数成交额,与规模相关
log_sigma = -3.5 - 0.15 * (log_mcap - 9) + rng.normal(0, 0.3, n) # 对数日波动率,大公司更低
analysts = rng.poisson(np.exp(0.4 * (log_mcap - 7))) # 分析师覆盖数
earn = rng.random(n) < 0.08 # 处于财报窗口
# 假设的"真实"相对价差生成机制(单位:基点),符号与第 14 章的横截面预测一致
log_rs = (2.0 - 0.25 * (log_mcap - 9) - 0.20 * (log_vol - 7.2) + 0.60 * (log_sigma + 3.5)
- 0.10 * np.log1p(analysts) + 0.15 * earn + rng.normal(0, 0.25, n)) + np.log(10)
df = pd.DataFrame(dict(log_rs=log_rs, log_mcap=log_mcap, log_vol=log_vol,
log_sigma=log_sigma, log_analysts=np.log1p(analysts), earn=earn.astype(int)))
full = smf.ols("log_rs ~ log_mcap + log_vol + log_sigma + log_analysts + earn", df).fit()
only_size = smf.ols("log_rs ~ log_mcap", df).fit()
print(full.params.round(3).to_string())
print(f"R2 = {full.rsquared:.3f};只用规模时 log_mcap 系数 = {only_size.params['log_mcap']:.3f}"
f"(吸收了成交量、波动率、覆盖度的效应)")
# 用模型预测两只股票的相对半价差(基点),作为回测/优化中的成本输入
new = pd.DataFrame(dict(log_mcap=[11.0, 7.0], log_vol=[9.0, 5.0], log_sigma=[-3.9, -3.0],
log_analysts=[np.log1p(20), np.log1p(1)], earn=[0, 1]))
half_bp = np.exp(full.predict(new)) / 2
print("预测相对半价差(bp):大盘股 %.1f,小盘股(财报窗口)%.1f" % tuple(half_bp))
输出:
Intercept 10.084
log_mcap -0.251
log_vol -0.197
log_sigma 0.599
log_analysts -0.108
earn 0.171
R2 = 0.916;只用规模时 log_mcap 系数 = -0.531(吸收了成交量、波动率、覆盖度的效应)
预测相对半价差(bp):大盘股 9.0,小盘股(财报窗口)141.3
截距的数值只是生成机制中常数项的合并,没有经济含义。要点有两个:多元回归能恢复各因素的独立效应;只用规模一个变量时,其系数(−0.531)是真实规模效应(−0.25)的两倍多,因为它吸收了与规模相关的成交量、波动率和覆盖度效应。这正是原书提醒的"次要因素彼此相关"。在真实应用中,把预测的相对半价差加上冲击项,就得到组合优化中每只股票的单位换手成本。
本章小结
价差是即时性的价格,由交易成本成分(暂时性,产生买卖反弹和负自相关)和逆向选择成分(永久性,随机游走)组成,实证上多数市场以后者为主。Glosten–Milgrom 定理指出,逆向选择成分既是"以下一笔方向为条件的价值估计之差",也是"从不知情者收回输给知情者损失所需的价差",简单模型中二者都等于 \(2PE\);序贯模型中报价是贝叶斯条件期望,价差随学习收窄,成交价是鞅,知情者的盈利就是不知情者的亏损。Roll 模型用成交价负自协方差估计价差,但在存在逆向选择时会低估;交易方向回归可以分离两个成分。不知情者无论用限价单还是市价单都会输,换手本身就是成本。指令驱动市场的均衡价差在理想条件下为零,现实中由佣金差、限价单管理成本、择时期权、时间价值、风险厌恶和信息不对称共同决定,撤单速度、波动率和信息不对称最重要。横截面上,信息不对称、波动率、功利性交易兴趣通过众多代理变量决定相对价差,极端情况下市场不复存在。
| 公式 / 概念 | 内容 |
|---|---|
| 报价公式 | \(\text{Ask}_0=V_0+\tfrac12S_{AS}+\tfrac12S_{TC}\),\(\text{Bid}_0=V_0-\tfrac12S_{AS}-\tfrac12S_{TC}\) |
| 成交后报价移动 | 买方成交后 bid、ask 同时上移 \(\tfrac12S_{AS}\) |
| 价格过程 | \(m_t=m_{t-1}+\lambda q_t+\varepsilon_t\),\(p_t=m_t+c\,q_t\) |
| Glosten–Milgrom(单期) | \(E[V\mid\text{买}]-E[V\mid\text{卖}]=2PE\) = 盈亏平衡价差 |
| Glosten–Milgrom(序贯) | \(\text{Ask}=E[V\mid\mathcal F,\text{买}]\);\(\delta^{+}=\frac{\delta(1+\mu)}{\delta(1+\mu)+(1-\delta)(1-\mu)}\);\(\delta=\tfrac12\) 时价差 \(\mu(V_H-V_L)\) |
| Roll 模型 | \(s=2\sqrt{-\mathrm{Cov}(\Delta p_t,\Delta p_{t-1})}\);有逆向选择时估计 \(2\sqrt{c(c+\lambda)}\) |
| 价差分解回归 | \(\Delta p_t=(\lambda+c)q_t-c\,q_{t-1}+e_t\) |
| 均衡价差(差别佣金) | \(S^*=\) 限价单佣金 − 市价单佣金 |
| 均衡价差(管理成本) | \(S^*=E[\text{管理成本}]+2\times\text{择时期权价值}\) |
| 主要决定因素 | 信息不对称(扩大)、波动率(扩大)、功利性交易兴趣(收窄) |
| 相对价差 | 价差 / 价格;横截面比较只能用它 |
| 最重要的一课 | 不知情者无论用何种订单都输给知情者,唯一办法是少交易 |
练习
基础题
- 某交易商估计 \(V_0=50\),交易成本成分 \(S_{TC}=0.04\),逆向选择成分 \(S_{AS}=0.06\)。写出 bid 和 ask;若下一笔是买单且交易商没学到别的,新的 bid 和 ask 是多少? 答案要点:49.95/50.05;买单后 \(V_1=50.03\),新报价 49.98/50.08。
- 在原书附录模型中,\(V=40\),\(E=1\),知情者比例 \(P=0.2\)。求逆向选择价差。若交易商把价差定为 0.3,他的期望利润是多少? 答案要点:\(2PE=0.4\);期望利润 \(\tfrac12(0.3)-0.2=-0.05\),每笔亏 5 美分。
- 证明 Roll 模型中 \(\mathrm{Cov}(\Delta p_t,\Delta p_{t-1})=-c^2\)。若某股票日收益(价格变化)自协方差为 \(-0.0004\),Roll 估计的价差是多少? 答案要点:\(2\sqrt{0.0004}=0.04\)。
- 用表 14-1 说明,一个随机决定买卖方向的交易者为什么平均亏损。
- 在例 14.1 中,如果 Mark 到达的概率是 \(\tfrac14\),Tim 的期望利润是多少? 答案要点:\(\tfrac13\times\tfrac34\times12=3\) 美分。
进阶题
- 在序贯 Glosten–Milgrom 模型中,证明 \(\delta=\tfrac12\) 时价差最大。求 \(\mu=0.2\)、\(V_H-V_L=1\) 时,连续两笔买单后的 ask。 提示:第一笔后 \(\delta^{+}=0.6\);第二笔报价时 \(\delta=0.6\),再算 \(\delta^{+}=\frac{0.6\times1.2}{0.6\times1.2+0.4\times0.8}=0.692\),ask \(=V_L+0.692\)。
- 推广附录模型:设下一笔为买方的概率为 \(\pi\ne\tfrac12\),知情买方对应价值 \(V+E_B\),知情卖方对应 \(V-E_S\)。求 ask、bid 和价差。 提示:推荐习题中的"附录推广"。注意此时 \(V\) 本身也要满足无条件期望一致性。
- 在 (14.2) 中加入订单流自相关(\(q_t\) 服从 \(P(q_t=q_{t-1})=\rho>\tfrac12\) 的马尔可夫链),Roll 估计和交易方向回归会出现什么偏差?如何修正? 提示:Huang–Stoll(1997)在回归中加入了对 \(q_t\) 的预期项,永久冲击只应作用于订单流中未预期的部分。
- 若交易商经济利润为零,公共交易者随机在最优买价和最优卖价挂限价单,能否获利? 提示:原书思考题 14。挂单者也承担逆向选择和择时期权损失,平均下来不会比交易商好。
- 大的最小报价单位给价差设了下限。若做市有超额利润而价差已经等于一个 tick,新进入者如何吸引订单流? 提示:原书思考题 7。报更大数量、订单流付费、价格改善等非价格竞争。
原书推荐习题:第 14 章思考题 2(知情交易风险在日内、季节和财报周期中的变化)、7(tick 约束下的非价格竞争)、10–13(限价单调价时机、择时期权价值的上界与波动率)、14(在最优价随机挂单能否获利)、17(同一公司股票与债券的相对价差比较);另建议把附录模型推广到买卖概率不等或信息幅度不对称的情形。思考题共 20 题。
原书对照
| 本章小节 | 原书章节 | PDF 页码 | 原书页码(约) |
|---|---|---|---|
| 14.1 价差是即时性的价格 | 第 14 章章首 | p.310 | p.297 |
| 14.2 交易商如何设定价差 | 14.1 Dealer Bid/Ask Spreads | p.310–311 | p.297–298 |
| 14.3 价差的两个成分 | 14.2 Spread Components(14.2.1–14.2.2,"总价差"边栏) | p.311–315 | p.298–302 |
| 14.4 Glosten–Milgrom 定理 | 14.2.3;附录 14.10 | p.313–315,p.333–334 | p.300–302,p.320–321 |
| 14.5 区分两个成分 | 14.2.4 Distinguishing Between the Two Components(Roll 模型与回归为补充) | p.315–316 | p.302–303 |
| 14.6 最重要的一课 | 14.3 Adverse Selection and Uninformed Traders | p.316–317 | p.303–304 |
| 14.7 指令驱动市场的均衡价差 | 14.4 Equilibrium Spreads in Continuous Order-driven Auction Markets | p.316–323 | p.303–310 |
| 14.8 公共交易者与交易商 | 14.5 Spreads When Public Traders Compete with Dealers | p.323–324 | p.310–311 |
| 14.9 横截面价差预测 | 14.6 Cross-sectional Spread Predictions(含 14.6.3) | p.324–330 | p.311–317 |
| 小结与练习 | 14.7–14.9 | p.330–333 | p.317–320 |
原书页码按"PDF 页码 − 13"估算。