第 05 章 高频数据分析与市场微观结构
本章对应 Tsay 原书第 5 章。重点是统计建模:微观结构现象(非同步交易、买卖反弹)如何扭曲收益的统计性质,逐笔价格变化与成交间隔该用什么模型。交易机制、订单类型、做市商与流动性的制度性内容见第 07 册(Harris《Trading and Exchanges》),两章互补。
学习目标
- 能推导非同步交易模型下观测收益的均值、方差和自协方差,解释为什么会出现虚假的负自相关和组合层面的虚假领先–滞后。
- 掌握 Roll 模型,推导买卖反弹带来的 \(-0.5\) 一阶自相关,会用价格变化自协方差估计有效价差。
- 了解逐笔成交数据的四个经验特征(不等间隔、价格离散、日内 U 形、同秒多笔)及数据清洗要点。
- 掌握两类价格变化模型:有序 probit 和 ADS 分解模型,会读模型给出的条件概率。
- 掌握 ACD 久期模型(EACD/WACD/GACD)的定义、矩性质、风险函数含义和条件极大似然估计,了解门限 ACD、PCD 模型和用 ACD 建模日内极差。
读前导读
这一章在解决什么问题
前几章默认收益是「每天收盘价算出来的、等间隔的、连续取值的」数。到了日内逐笔数据,这三个默认全部失效:成交时间不等间隔,价格只能是最小价位(tick)的整数倍,成交价在买价和卖价之间来回跳。这一章回答两个问题:这些交易机制会怎样扭曲我们算出来的收益统计量?我们又该用什么模型直接描述逐笔价格和成交间隔?
和你已有知识的连接点很多。CFA 的交易成本部分讲过有效价差和隐性交易成本,Roll 模型告诉你如何只用成交价反推价差。CFA 讲过小盘股指数的收益「平滑」问题(以及另类资产估值平滑导致波动率被低估、自相关虚高),非同步交易是同一类现象:价格没有及时更新,导致统计量失真。有序 probit 和 logistic 回归是你在信用评分模型中见过的离散选择模型。ACD 模型则是 GARCH 的「孪生兄弟」:GARCH 描述波动率如何聚集,ACD 描述成交间隔如何聚集,公式几乎一样。
本章的实务意义很直接:用成交价算的短周期收益会出现假反转、假动量,回测时若不处理会高估策略表现。
需要先想起来的数学
1. 几何级数及其导数。 \(\sum_{k\ge0}\pi^k=\frac1{1-\pi}\)(\(|\pi|<1\))。两边对 \(\pi\) 求导得 \(\sum_{k\ge1}k\pi^{k-1}=\frac1{(1-\pi)^2}\),等价于 \(\sum_{k\ge0}(k+1)\pi^k=\frac1{(1-\pi)^2}\)。5.2 节的均值和协方差推导全靠这两个式子。例:\(\pi=0.5\) 时 \(1+2(0.5)+3(0.25)+\cdots=4\)。见 第 00 册第 04 章 级数与收敛 和 第 00 册第 02 章 导数与泰勒展开。
2. 全期望公式(按情形加权)。 若事件 \(B_k\) 两两互斥、覆盖全部情形,则 \(E(X)=\sum_kP(B_k)E(X\mid B_k)\)。非同步交易模型就是把「上次成交是在 \(k\) 期之前」分成无穷多种情形再加权。见 第 00 册第 07 章 概率中的分析工具。
3. 协方差的双线性。 \(\operatorname{Cov}(aX+bY,Z)=a\operatorname{Cov}(X,Z)+b\operatorname{Cov}(Y,Z)\)。Roll 模型的推导只用这一条。
4. 密度、生存函数与风险率。 密度 \(f(x)\),生存函数 \(S(x)=P(X>x)=1-F(x)\)。风险率 \(h=f/S\) 就是信用风险里的违约强度(hazard rate):已经活到 \(x\) 的条件下,下一瞬间「出事」的速率。指数分布的风险率为常数,对应常数违约强度。见 第 00 册第 03 章 积分。
5. 伽马函数 \(\Gamma(\cdot)\)。 阶乘的推广,\(\Gamma(n)=(n-1)!\),\(\Gamma(1)=1\),\(\Gamma(1.5)\approx0.886\)。Weibull 和广义 Gamma 分布的标准化常数中用到它,只需知道它是一个可以查表或用软件算出的数。
怎么读这一章
核心必读:5.2(非同步交易,至少看懂结论和回测警示)、5.3(Roll 模型,推导短而重要)、5.4 的经验特征、5.6.1–5.6.2(ACD 的定义及其与 GARCH 的对应)、5.6.3 的风险函数。第一次可以只看结论的:5.2.2 方差公式中关于 \(\sum(k+1)^2\pi^k\) 的证明、5.6.2 EACD 矩的推导、5.6.3 末尾标准化密度的具体形式、5.6.4 的对数似然表达式(会用代码估计即可)、5.8 PCD 模型、5.9 的门限 ACD 部分。建议顺序:5.1 → 5.3 → 5.2 → 5.4 → 5.6 → 5.5 → 5.7 → 5.9 → 5.8。
5.1 高频数据概述
高频数据(high-frequency data)指在细时间间隔上采集的观测;在金融中常指日频以下的数据,终极形态是逐笔成交(transaction-by-transaction)数据,时间戳精确到秒或更细。原书使用的数据源包括 NYSE 的 TAQ(Trades and Quotes,自 1992 年起收录 Consolidated Tape 上的全部成交和报价)和 TORQ 数据(Hasbrouck 1992)。
高频数据能回答低频数据回答不了的问题:不同交易制度下价格发现效率的比较、买卖报价的动态、订单驱动市场中谁在提供流动性等。一个有趣的例子是 Cho, Russell, Tiao & Tsay (2003) 用台湾 340 多只股票的 5 分钟收益发现,价格接近涨跌停板时有向停板靠拢的磁吸效应(magnet effect)。
本章依次讨论:非同步交易(5.2)、买卖价差(5.3)、逐笔数据的经验特征(5.4)、价格变化模型(5.5)、久期模型(5.6–5.7)、价格变化与久期的二元模型(5.8),以及一个把 ACD 用于日内价格极差的应用(5.9)。
5.2 非同步交易
5.2.1 现象
不同股票交易频率不同,同一股票的交易强度也随时间变化。"日收盘价"是当天最后一笔成交价,但最后一笔成交的时刻每天不同、每只股票不同。如果把日收益当成严格等间隔的 24 小时收益,即使真实收益独立,也会得出关于可预测性的错误结论。
非同步交易(nonsynchronous trading)会导致:(a) 股票收益之间出现滞后 1 的交叉相关;(b) 组合收益出现滞后 1 的序列相关;(c) 某些情形下单只股票收益出现负序列相关。
直观例子:A、B 两只股票相互独立,A 交易频繁,B 交易稀少。收盘前出现的市场消息当天就反映在 A 的收盘价上,而 B 可能当天已无成交,要到次日才反映。于是 A 看起来"领先" B,出现从 A 到 B 的显著滞后 1 交叉相关;同时持有 A、B 的组合则表现出正的滞后 1 自相关。
5.2.2 Lo–MacKinlay 模型
设真实连续复利收益 \(\{r_t\}\) iid,均值 \(\mu\)、方差 \(\sigma^2\);每期不成交的概率为 \(\pi\),与 \(r_t\) 独立。观测收益 \(r_t^o\):无成交时为 0;有成交时为自上次成交以来累积的真实收益。于是
\(r_t^o=\sum_{i=0}^{k}r_{t-i}\) 当且仅当 \(t\) 期成交、\(t-1,\dots,t-k\) 期都不成交、\(t-k-1\) 期成交,概率 \((1-\pi)\pi^k(1-\pi)\)。概率之和 \(\pi+(1-\pi)^2\sum_k\pi^k=\pi+(1-\pi)=1\)。
均值。 利用 \(\sum_{k\ge0}(k+1)\pi^k=1/(1-\pi)^2\):
推导拆解: 第一步(按情形加权):情形「\(r_t^o=\sum_{i=0}^kr_{t-i}\)」的概率是 \((1-\pi)^2\pi^k\),此时 \(r_t^o\) 是 \(k+1\) 个独立真实收益之和,期望为 \((k+1)\mu\);「不成交」情形贡献 \(0\)。所以 \(E(r_t^o)=\sum_{k\ge0}(1-\pi)^2\pi^k(k+1)\mu\)。 第二步(几何级数求导):由 \(\sum_{k\ge0}\pi^{k+1}=\frac{\pi}{1-\pi}\),两边对 \(\pi\) 求导得 \(\sum_{k\ge0}(k+1)\pi^k=\frac{1}{(1-\pi)^2}\)。 第三步:代入后 \((1-\pi)^2\) 恰好约掉,得 \(\mu\)。 直觉:观测收益要么是 0,要么是「攒了好几期」的收益,平均下来正好补齐,不会丢失也不会凭空多出收益。非同步交易只改变收益「何时」被观测到,不改变总量。
方差。 \(E[(\sum_{i=0}^{k}r_{t-i})^2]=(k+1)\sigma^2+(k+1)^2\mu^2\),再用恒等式 \(\sum_{k\ge0}(k+1)^2\pi^k=\frac{2}{(1-\pi)^3}-\frac{1}{(1-\pi)^2}\)(证明:令 \(H=\sum(k+1)^2\pi^k\),\(G=\sum(2k+1)\pi^k\),则 \((1-\pi)H=G\),\((1-\pi)G=1+2\pi+2\pi^2+\cdots=\frac{2}{1-\pi}-1\)),得
自协方差。 \(r_t^or_{t-1}^o\) 非零,要求 \(t\) 和 \(t-1\) 都成交;若 \(t-2\) 也成交(概率 \((1-\pi)^3\)),乘积为 \(r_tr_{t-1}\);若 \(t-1\) 成交前已连续 \(k-1\) 期未成交,乘积为 \(r_t\sum_{i=1}^{k}r_{t-i}\)(概率 \((1-\pi)^3\pi^{k-1}\))。由于不同期独立,\(E(r_tr_{t-j})=\mu^2\),
推导拆解: 第一步:只有 \(t\) 和 \(t-1\) 都成交时乘积 \(r_t^or_{t-1}^o\) 才非零。此时 \(r_t^o=r_t\)(因为 \(t-1\) 刚成交过,只攒了一期)。 第二步:\(r_{t-1}^o\) 取决于 \(t-1\) 之前连续多少期没成交。若 \(t-2,\dots,t-k\) 都没成交而 \(t-k-1\) 成交,则 \(r_{t-1}^o=\sum_{i=1}^{k}r_{t-i}\),共 \(k\) 项。该情形概率为 \((1-\pi)\)(\(t\) 成交)\(\times(1-\pi)\)(\(t-1\) 成交)\(\times\pi^{k-1}\times(1-\pi)\)(\(t-k-1\) 成交)\(=(1-\pi)^3\pi^{k-1}\)。 第三步:\(r_t\) 与 \(r_{t-1},\dots\) 独立,所以 \(E(r_t\sum_{i=1}^kr_{t-i})=k\mu^2\)。加权求和并用 \(\sum_{k\ge1}k\pi^{k-1}=1/(1-\pi)^2\),得 \((1-\pi)\mu^2\)。 第四步:\(\operatorname{Cov}=E(r_t^or_{t-1}^o)-[E(r_t^o)]^2=(1-\pi)\mu^2-\mu^2=-\pi\mu^2\)。 直觉:负协方差来自「乘积为零」的情形。只要两期中有一期没成交,乘积就是 0,而两期平均值仍是 \(\mu\),所以乘积的平均低于 \(\mu^2\)。
一般地 \(\operatorname{Cov}(r_t^o,r_{t-j}^o)=-\mu^2\pi^j\),\(j\ge1\),一阶自相关
结论:只要 \(\mu\ne0\),非同步交易就在单只股票的观测收益中诱导出负自相关。日频下 \(\mu\) 远小于 \(\sigma\),所以这一效应对单只股票通常很小;但推广到 \(N\) 只证券的组合(Campbell, Lo & MacKinlay 1997 第 3 章),组合层面会出现正的滞后相关,在小盘股指数中可能相当显著。在时间序列文献中,这一现象等价于由成交概率支配的随机时间聚合(random temporal aggregation)。
对回测的警示:小盘股组合或指数的显著正滞后 1 自相关不一定是可交易的动量,可能只是成分股非同步交易的产物。
金融直觉:单只股票的偏差为什么小、组合的偏差为什么大?单只股票的一阶自协方差是 \(-\pi\mu^2\),日收益 \(\mu\) 约 0.05%,\(\mu^2\) 微乎其微。组合则不同:昨天下午的市场冲击 \(\epsilon\) 是所有股票共有的,活跃股当天反映、冷门股次日才反映,于是组合今天的收益里有一部分是「昨天市场冲击的延迟兑现」,组合的自协方差与冲击方差 \(\sigma^2\) 同阶,而不是与 \(\mu^2\) 同阶,因此大得多。这和私募股权、房地产基金的「估值平滑」是同一回事:报告的净值滞后于真实价值,导致报告收益序列正自相关、波动率被低估。想交易这种「动量」时,你会发现成交时用的是冷门股的真实价格,那部分超额收益其实不存在。
5.3 买卖价差与 Roll 模型
5.3.1 背景
在 NYSE 这类有做市商的市场,做市商以买价(bid)\(P_b\) 买入、以更高的卖价(ask)\(P_a\) 卖出,向市场提供流动性。\(S=P_a-P_b\) 称买卖价差(bid–ask spread),是做市商的主要收入来源。做市商制度、价差构成(订单处理成本、存货成本、逆向选择成本)的经济学见第 07 册;这里只关心价差对价格序列统计性质的影响。
5.3.2 Roll (1984) 模型
\(P_t^*\) 是无摩擦市场中的基本价值,\(I_t\) 是独立的订单方向指示变量,以各 0.5 的概率取 \(+1\)(买方发起,成交在卖价)或 \(-1\)(卖方发起,成交在买价)。
若 \(P_t^*\) 不变,\(\Delta P_t=(I_t-I_{t-1})S/2\)。由 \(E(I_t)=0\)、\(\operatorname{Var}(I_t)=1\):
这就是买卖反弹(bid–ask bounce)。直观:成交价只取 \(P_a\) 或 \(P_b\);上一笔在 \(P_a\),这一笔要么不变要么跌到 \(P_b\);上一笔在 \(P_b\),这一笔要么不变要么涨到 \(P_a\)。价格在两个价位间来回弹,所以相邻价格变化负相关,但不会产生滞后 1 以外的相关。
推导拆解:记 \(c=S/2\),\(\Delta P_t=c(I_t-I_{t-1})\)。 方差:\(I_t\) 与 \(I_{t-1}\) 独立且方差都是 1,\(\operatorname{Var}(\Delta P_t)=c^2(1+1)=S^2/2\)。 一阶协方差:用协方差的双线性展开 \(\operatorname{Cov}(I_t-I_{t-1},\,I_{t-1}-I_{t-2})\),四项中只有 \(\operatorname{Cov}(-I_{t-1},I_{t-1})=-1\) 非零(其余各项是不同时刻的 \(I\),独立),所以 \(\operatorname{Cov}(\Delta P_t,\Delta P_{t-1})=-c^2=-S^2/4\)。 二阶协方差:\(\Delta P_t\) 含 \(I_t,I_{t-1}\),\(\Delta P_{t-2}\) 含 \(I_{t-2},I_{t-3}\),没有共同项,协方差为零。 自相关 \(=(-S^2/4)/(S^2/2)=-0.5\)。关键在于两个相邻价格变化共用了 \(I_{t-1}\),而且一个带正号、一个带负号。
更现实地,让基本价值做随机游走 \(\Delta P_t^*=\epsilon_t\)(方差 \(\sigma^2\),与 \(I_t\) 独立):
负相关变弱但仍存在。由 (5.12) 可以反解出Roll 价差估计
只要样本自协方差为负即可使用。它只需要成交价,不需要报价数据,因此在缺少报价的历史数据或低频数据上常被用来估计交易成本。(原书未明写此式,但它由 (5.12) 直接得到。)
金融直觉:为什么加入基本价值的随机游走后,Roll 估计仍然成立?因为 \(\epsilon_t\) 独立于 \(I_t\) 且自身无自相关,它只增加方差,不贡献一阶自协方差。所以「价格变化的一阶自协方差」只来自买卖反弹,可以干净地反推出价差。数值例子:一只 20 元的股票,日内逐笔价格变化的一阶自协方差为 \(-1.0\times10^{-4}\) 元²,则 \(\hat S=2\times0.01=0.02\) 元,即 10 个基点的价差,单边交易成本约 5 个基点。局限:若样本自协方差为正(例如订单拆分导致连续同向成交,见练习 6,或基本价值有动量),根号下为负,Roll 估计无法使用。
多元情形:若两只股票的订单方向 \(I_{1t},I_{2t}\) 同期正相关(例如同一机构同时买入),价差会在两只股票之间引入负的滞后 1 交叉相关。
5.4 逐笔成交数据的经验特征
记 \(t_i\) 为第 \(i\) 笔成交的日历时间(从午夜起算的秒数),伴随变量有成交价、成交量、当时的买卖报价等,合称交易数据。它们有四个在时间聚合后看不到的特征:
- 不等间隔:成交间隔(久期,duration)本身带有信息,例如交易强度。
- 价格离散:价格变化是最小价位(tick)的整数倍。NYSE 在 1997-06-24 前 tick 为 1/8 美元,2001-01-29 改为十进制前为 1/16 美元,之后为 1 美分。
- 日内周期(diurnal pattern):开盘和收盘交易密集、午间稀疏,交易强度呈 U 形。
- 同一秒内多笔成交:在繁忙时段,秒级时间戳太粗,会出现零久期,甚至同一秒内价格不同的成交。
5.4.1 IBM,1990-11 至 1991-01(TORQ,tick = 1/8 美元)
63 个交易日、正常时段(9:30–16:00)内 59,838 个成交间隔,其中 6,531 个为 0(10.91%)。价格变化分布(以 tick 计,%):
| ≤−3 | −2 | −1 | 0 | +1 | +2 | ≥+3 |
|---|---|---|---|---|---|---|
| 0.66 | 1.33 | 14.53 | 67.06 | 14.53 | 1.27 | 0.63 |
约 2/3 的成交价格不变,约 29% 变动 1 个 tick,正负近似对称。5 分钟成交笔数的 ACF 呈周期 78 的循环(一天 78 个 5 分钟区间),平均日内曲线呈 U 形。
连续两笔成交的价格变化方向交叉表(行:第 \(i-1\) 笔;列:第 \(i\) 笔):
| + | 0 | − | 合计 | |
|---|---|---|---|---|
| + | 441 | 5,498 | 3,948 | 9,887 |
| 0 | 4,867 | 29,779 | 5,473 | 40,119 |
| − | 4,580 | 4,841 | 410 | 9,831 |
连续上涨或连续下跌极少(各占 0.7% 左右);上涨之后更可能不变或下跌。方向序列 \(D_i\in\{+1,0,-1\}\) 的 ACF 只在滞后 1 有一个 −0.389 的尖峰——这是买卖反弹的直接证据。
5.4.2 IBM,1999 年 12 月(TAQ,tick = 1/16 美元)
日内成交增加约 6 倍(12 月共 134,120 笔),零久期比例升至 22.98%;12 月 3 日甚至出现过一秒内 42 笔成交,以及"跌 63 tick 后立即涨 64 tick"这样的异常跳点。价格不变的比例降到约 45.8%——tick 缩小提高了价格变化的概率。
5.4.3 Boeing,2008-12-01(十进制后)
正常时段 43,894 笔成交。价格变化以 1 美分为单位,分布关于 0 对称,58.5% 无变化,±1 美分各约 12%;另有 4.59% 的变化不是 1 美分的整数倍。十进制后价格变化"近似离散"的特征仍然存在。
5.4.4 数据清洗
高频数据的记录质量通常不如低频:缺失观测、时间戳错误(例如盘后时段开始前就出现 16:00 之后的时间戳)、异常跳点都常见。正确的清洗需要深入理解市场运作;必须清楚记录清洗规则,并在推断时考虑其影响。
记号:\(y_i=P_{t_i}-P_{t_{i-1}}\) 为价格变化,\(\Delta t_i=t_i-t_{i-1}\) 为久期,下标 \(i\) 是成交序号而非日历时间。下面先分别建模,再联合建模。
5.5 价格变化模型
日内价格变化离散且集中在零,普通回归不适用。原书介绍两种可引入解释变量的模型。
5.5.1 有序 probit 模型(Hausman, Lo & MacKinlay 1992)
设不可观测的"虚拟价格"变化为连续变量
\(\boldsymbol x_i\)、\(\boldsymbol w_i\) 都是 \(t_{i-1}\) 时可得的变量(\(\boldsymbol w_i\) 可含久期和条件异方差变量)。观测到的价格变化 \(y_i\) 取 \(k\) 个有序值 \(s_1<\dots<s_k\):
于是
两端类别分别取 \(\Phi(\cdot)\) 与 \(1-\Phi(\cdot)\)。参数为 \(\boldsymbol\beta\)、分界点 \(\alpha_1,\dots,\alpha_{k-1}\) 和方差函数参数;识别上需要对方差做标准化(下例把方差函数常数项固定为 1)。
白话解释:这和信用评级的有序 probit 模型完全一样:背后有一个连续的「信用分数」\(y^*\),分数落在哪两个分界点之间就给哪个评级。这里的「评级」换成了「价格变化几个 tick」。数值例子:只有三类 \(\{-1,0,+1\}\),分界点 \(\alpha_1=-1\)、\(\alpha_2=1\),\(\sigma_i=1\)。若 \(\boldsymbol x_i\boldsymbol\beta=0\),则 \(P(y=-1)=\Phi(-1)=0.159\),\(P(y=0)=\Phi(1)-\Phi(-1)=0.683\),\(P(y=+1)=0.159\)。若上一笔是上涨,模型给出 \(\boldsymbol x_i\boldsymbol\beta=-0.5\)(反转),则 \(P(y=-1)=\Phi(-0.5)=0.309\),\(P(y=+1)=1-\Phi(1.5)=0.067\)。识别问题:把 \(y^*\)、全部分界点和 \(\boldsymbol\beta\) 同时乘以 2,概率完全不变,所以必须固定一个尺度,这就是「方差常数项固定为 1」的原因。
例 5.1(IBM 1988 年,206,794 笔成交)。 9 个类别 \(\{-4,\dots,4\}\) tick。均值方程包含:标准化久期 \(\Delta t_i^*\)、3 个滞后价格变化、3 个滞后 S&P 500 期货 5 分钟收益 \(SP5\)、3 个滞后的成交价相对中点位置指示 \(IBS\)(高于中点 +1,等于 0,低于 −1)、以及 Box–Cox 变换后的成交量与 \(IBS\) 的交互项;方差方程 \(\sigma_i^2=1+\gamma_1^2\Delta t_i^*+\gamma_2^2AB_{i-1}\),\(AB\) 为价差。主要估计(括号为 t 比):
| 变量 | 系数 |
|---|---|
| 分界点 \(\alpha_1,\dots,\alpha_8\) | −4.67, −4.16, −3.11, −1.34, 1.33, 3.13, 4.21, 4.73 |
| \(\gamma_1\)(久期→方差),\(\gamma_2\)(价差→方差) | 0.40 (15.6),0.52 (71.1) |
| \(\Delta t^*\) | −0.12 (−11.4) |
| \(y_{i-1},y_{i-2},y_{i-3}\) | −1.01 (−135.6),−0.53 (−85.0),−0.21 (−47.2) |
| \(SP5_{i-1},SP5_{i-2},SP5_{i-3}\) | 1.12 (54.2),−0.26 (−12.1),0.01 (0.26) |
| \(IBS_{i-1},IBS_{i-2},IBS_{i-3}\) | −1.14 (−63.6),−0.37 (−21.6),−0.17 (−10.3) |
结论:分界点不等距但关于 0 近似对称;久期同时影响条件均值和方差;滞后价格变化系数强烈为负——价格反转;前一时刻价差显著提高条件方差;股指期货的滞后收益正向领先个股(\(\beta=1.12\)),体现期货的价格发现作用。
5.5.2 ADS 分解模型(Rydberg & Shephard 2003;McCulloch & Tsay 2000)
把价格变化分解为"是否变化 × 方向 × 大小":
\(A_i\in\{0,1\}\) 指示是否有价格变化;\(D_i\in\{+1,-1\}\) 为方向(仅当 \(A_i=1\) 时有定义);\(S_i\) 为变化大小(tick 数,正整数)。条件分布按顺序分解:
各成分设定为
\(g(\lambda)\) 为几何分布 \(P(m)=\lambda(1-\lambda)^m\),\(m=0,1,\dots\);加 1 保证有变化时至少 1 tick;上涨、下跌分开参数以允许不对称。对数似然可拆成三块分别估计——前两块就是两次普通 logistic 回归。与有序 probit 相比,ADS 不需要对大幅变化做截断或合并类别。
白话解释:(5.24) 是概率的乘法法则 \(P(A,B,C)=P(C\mid B,A)P(B\mid A)P(A)\) 的直接应用,就像把「一笔贷款损失多少」拆成「违约概率 PD × 违约后损失率 LGD」:先问「会不会动」,再问「往哪动」,最后问「动多少」。三个因子各有自己的参数、互不重叠,取对数后似然变成三项之和,所以可以分别最大化。\(\operatorname{logit}p=\ln\frac{p}{1-p}\) 是对数几率,反函数为 \(p=1/(1+e^{-z})\),把线性组合映射到 \((0,1)\)。几何分布 \(P(m)=\lambda(1-\lambda)^m\) 的含义是:每多涨一个 tick,都要再「过一关」,过关概率为 \(1-\lambda\),所以大幅变化的概率按几何速度递减。
例 5.2(IBM 1990-11 至 1991-01,59,838 笔)。 只保留显著的滞后变量:
估计:\(\beta_0=-1.057\),\(\beta_1=0.962\);\(\gamma_0=-0.067\),\(\gamma_1=-2.307\);\(\theta_{u,0}=2.235\),\(\theta_{u,1}=-0.670\);\(\theta_{d,0}=2.085\),\(\theta_{d,1}=-0.509\)。解读:
- 价格变化成簇:\(P(A_i=1\mid A_{i-1}=0)=0.258\),\(P(A_i=1\mid A_{i-1}=1)=0.476\)。
- 强烈反转:前一笔无变化时,上涨概率 0.483;前一笔上涨,本笔(若变化)上涨概率仅 0.085;前一笔下跌,上涨概率 0.904。
- 大小:\(S_{i-1}=1,2,3\) 时,上涨幅度恰为 1 tick 的概率分别为 0.827、0.709、0.556(例如 \(1/(1+e^{-(2.235-0.670)})=0.827\)),大变化之后更可能跟着大变化。
5.6 久期模型:ACD
5.6.1 动机与日内调整
久期长说明交易清淡、没有新信息;久期短说明信息到达或流动性需求集中。Engle & Russell (1998) 借鉴 ARCH 的思想提出自回归条件久期(autoregressive conditional duration,ACD)模型。
由于日内 U 形模式,先构造调整久期
\(f(t_i)\) 是久期的确定性日内成分。原书对 IBM 数据用 \(f(t_i)=\exp[d(t_i)]\),\(d(t_i)\) 是若干以正午为中心的二次函数和开盘、收盘时段指示变量的线性组合,用 OLS 回归 \(\ln\Delta t_i\) 得到。调整前 5 分钟区间平均久期在 10–40 秒之间呈明显日内模式,调整后基本消失。实践中也常用平滑样条或"按时段求跨日平均"的方法,没有哪种方法占绝对优势。
5.6.2 模型
记 \(x_i=\Delta t_i^*\),\(\psi_i=E(x_i\mid F_{i-1})\)。ACD(\(r,s\)):
\(\{\epsilon_i\}\) 是 iid 非负随机变量,\(E(\epsilon_i)=1\)。\(\epsilon_i\) 取标准指数分布时称 EACD,取标准化 Weibull 时称 WACD,取标准化广义 Gamma 时称 GACD。与 GARCH 的对应关系一目了然:\(x_i\leftrightarrow a_t^2\),\(\psi_i\leftrightarrow\sigma_t^2\)。
ARMA 表示。 令 \(\eta_i=x_i-\psi_i\)(鞅差序列),
这是非高斯新息的 ARMA。弱平稳时 \(E(x_i)=\omega/[1-\sum(\gamma_j+\omega_j)]\),要求 \(\omega>0\)、\(\sum(\gamma_j+\omega_j)<1\)。
推导拆解(以 ACD(1,1) 为例): 第一步:由定义 \(\psi_i=x_i-\eta_i\),\(\psi_{i-1}=x_{i-1}-\eta_{i-1}\)。 第二步:代入 \(\psi_i=\omega+\gamma_1x_{i-1}+\omega_1\psi_{i-1}\),得 \(x_i-\eta_i=\omega+\gamma_1x_{i-1}+\omega_1(x_{i-1}-\eta_{i-1})\)。 第三步:整理得 \(x_i=\omega+(\gamma_1+\omega_1)x_{i-1}-\omega_1\eta_{i-1}+\eta_i\),即 ARMA(1,1)。 第四步:两边取期望,\(E\eta=0\),平稳时 \(E x_i=E x_{i-1}=\mu_x\),得 \(\mu_x=\omega/(1-\gamma_1-\omega_1)\)。 「鞅差序列」指 \(E(\eta_i\mid F_{i-1})=0\):它不可预测,但方差可以随时间变化,所以不是 iid。这和 GARCH 中 \(a_t^2-\sigma_t^2\) 的作用完全一样。
金融直觉:把 \(\psi_i\) 理解为「市场对下一笔成交要等多久的预期」。刚刚等了很久(\(x_{i-1}\) 大),预期上调;预期本身有惯性(\(\omega_1\psi_{i-1}\))。和 GARCH 中「昨天大波动 → 今天预期波动上升」同构。例 5.4 的持续性 0.949 意味着交易活跃度的冲击消散得很慢,正如波动率聚集。
EACD(1,1) 的矩。 \(\epsilon_i\) 标准指数,\(E\epsilon_i^2=2\)。
-
均值:\(\mu_x=\omega/(1-\gamma_1-\omega_1)\)。
-
对 \(\psi_i\) 平方取期望,利用 \(E x_{i-1}^2=2E\psi_{i-1}^2\)、\(E(x_{i-1}\psi_{i-1})=E\psi_{i-1}^2\):
\[E(\psi_i^2)=\mu_x^2\frac{1-(\gamma_1+\omega_1)^2}{1-2\gamma_1^2-\omega_1^2-2\gamma_1\omega_1}.\tag{5.39}\]推导拆解:记 \(s=\gamma_1+\omega_1\)。 第一步:把 \(\psi_i=\omega+\gamma_1x_{i-1}+\omega_1\psi_{i-1}\) 平方再取期望,展开六项:\(\omega^2+\gamma_1^2Ex^2+\omega_1^2E\psi^2+2\omega\gamma_1\mu_x+2\omega\omega_1\mu_x+2\gamma_1\omega_1E(x\psi)\)(用了 \(E\psi=Ex=\mu_x\))。 第二步:因为 \(x_{i-1}=\psi_{i-1}\epsilon_{i-1}\),\(\epsilon\) 独立于 \(\psi\)、\(E\epsilon=1\)、\(E\epsilon^2=2\),所以 \(Ex^2=2E\psi^2\),\(E(x\psi)=E\psi^2\)。 第三步:平稳时 \(E\psi_i^2=E\psi_{i-1}^2\),移项得 \(E\psi^2(1-2\gamma_1^2-\omega_1^2-2\gamma_1\omega_1)=\omega^2+2\omega s\mu_x\)。 第四步:把 \(\omega=\mu_x(1-s)\) 代入右边,\(\mu_x^2[(1-s)^2+2s(1-s)]=\mu_x^2(1-s^2)\),即得 (5.39)。
-
方差:
\[\operatorname{Var}(x_i)=2E(\psi_i^2)-\mu_x^2=\mu_x^2\,\frac{1-\omega_1^2-2\gamma_1\omega_1}{1-\omega_1^2-2\gamma_1\omega_1-2\gamma_1^2},\]方差有限要求 \(2\gamma_1^2+\omega_1^2+2\gamma_1\omega_1<1\)。由于分母小于分子,\(\operatorname{Var}(x_i)>\mu_x^2\),即久期过度离散(overdispersion)——指数分布的方差恰等于均值平方,ACD 产生的久期比指数分布更分散,这正是成交"一阵密一阵疏"的聚集现象。
5.6.3 风险函数与新息分布的选择
生存函数 \(S(x)=P(X>x)\),风险函数(hazard function)
表示"已经等了 \(x\) 秒仍未成交,下一瞬间成交的条件强度"。对 Weibull 分布 \(h(x)=\frac{\alpha}{\beta^\alpha}x^{\alpha-1}\):
- \(\alpha=1\)(指数):风险为常数,无记忆;
- \(\alpha>1\):风险递增,等得越久越可能马上成交;
- \(\alpha<1\):风险递减,刚成交后更可能马上再成交。
白话解释:风险函数就是信用风险中的违约强度,只是把「违约」换成「下一笔成交」。\(h(x)\,dx\) 近似等于「已等了 \(x\) 秒仍未成交,接下来 \(dx\) 秒内成交」的概率。数值例子:Weibull 取 \(\beta=1\)。\(\alpha=1\) 时 \(h\equiv1\),无论已等多久,下一秒成交的强度都一样(指数分布的无记忆性)。\(\alpha=0.5\) 时 \(h(x)=0.5x^{-0.5}\),\(h(0.25)=1\),\(h(4)=0.25\):刚成交不久强度很高,等得越久越「冷」,对应交易成簇、冷清时段持续冷清。\(\alpha=2\) 时 \(h(x)=2x\),等得越久越可能马上成交,对应「订单堆积到一定程度后必然成交」。例 5.4 的 \(\hat\alpha=0.879<1\) 属于第一种情况。
指数和 Weibull 的风险函数只能是常数或单调的,限制太强。Zhang, Russell & Tsay (2001) 用广义 Gamma 分布,其风险函数可以呈 U 形或倒 U 形,称 GACD。指数、Weibull 都是广义 Gamma 的特例(\(\kappa=1\) 为 Weibull,再令 \(\alpha=1\) 为指数)。
几个单位均值的标准化密度(原书第 5 章附录 A):
- 标准化 Weibull:\(f(y\mid\alpha)=\alpha\big[\Gamma(1+\tfrac1\alpha)\big]^\alpha y^{\alpha-1}\exp\{-[\Gamma(1+\tfrac1\alpha)y]^\alpha\}\),\(\operatorname{Var}=\frac{\Gamma(1+2/\alpha)}{\Gamma^2(1+1/\alpha)}-1\)。
- 标准化广义 Gamma:\(f(y\mid\alpha,\kappa)=\dfrac{\alpha y^{\kappa\alpha-1}}{\lambda^{\kappa\alpha}\Gamma(\kappa)}\exp[-(y/\lambda)^\alpha]\),\(\lambda=\Gamma(\kappa)/\Gamma(\kappa+1/\alpha)\)。
5.6.4 估计
令 \(i_o=\max(r,s)\),忽略前 \(i_o\) 个观测的边际密度(其影响随样本增大而消失),用条件似然。WACD 的条件对数似然为
\(\alpha=1\) 时退化为 EACD 的 \(\sum[-\ln\psi_i-x_i/\psi_i]\)。GACD 的对数似然为
一个实用的观察(Engle & Russell 1998):指数似然 \(-\ln\psi_i-x_i/\psi_i\) 与正态 GARCH 似然 \(-\tfrac12\ln\sigma_t^2-\tfrac12a_t^2/\sigma_t^2\) 形式相同,所以把 \(\sqrt{x_i}\) 当作"收益"、用零均值 GARCH 程序估计,就得到 EACD 的拟极大似然估计(QMLE)——即使真实分布不是指数分布,估计仍相合。
白话解释:「拟极大似然」指明知分布设错了,仍用一个方便的似然去估计。它之所以可行,是因为指数似然 \(-\ln\psi_i-x_i/\psi_i\) 对 \(\psi_i\) 求导后,期望为零的条件恰好是 \(E(x_i\mid F_{i-1})=\psi_i\),即「条件均值设定正确」。只要均值方程对,参数估计就会收敛到真值(相合),代价是效率低一些、标准误需要用稳健公式修正。这和 OLS 在误差不服从正态时仍然无偏是同一道理。把 \(\sqrt{x_i}\) 当作「收益」的技巧成立,是因为 \((\sqrt{x_i})^2=x_i\) 正好对应 GARCH 中的 \(a_t^2\),而 \(\psi_i\) 对应 \(\sigma_t^2\)。
模拟验证(例 5.3)。 从 \(\psi_i=0.3+0.2x_{i-1}+0.7\psi_{i-1}\) 生成 500 个观测:WACD(\(\alpha=1.5\))的估计为 0.364、0.100、0.767、1.477;GACD(\(\alpha=0.5,\kappa=1.5\))的估计为 0.401、0.343、0.561、0.436、2.077。500 个观测时 \(\gamma_1,\omega_1\) 的估计误差相当大。
例 5.4(IBM 1990 年 11 月前 5 个交易日,3,534 个正的调整久期)。 WACD(1,1):
标准化残差及其平方的 \(Q(10)\)、\(Q(20)\) 均不显著。持续性 \(0.064+0.885=0.949\);隐含期望调整久期 \(0.169/(1-0.949)=3.31\) 秒,与样本均值 3.29 吻合。\(\hat\alpha<1\):风险函数缓慢递减,刚成交后更可能马上再成交。GACD(1,1):\(\psi_i=0.141+0.063x_{i-1}+0.897\psi_{i-1}\),\(\hat\kappa=4.248\),\(\hat\alpha=0.395\),期望久期 3.52,持续性 0.96。
5.7 非线性久期模型:门限 ACD
对例 5.4 WACD 的标准化残差做第 04b 章的非线性检验(基于 AR(4)):Ori-F 为 0.343(p=0.969),不显著;但 TAR-F(\(d=1,2,3\))为 3.29、3.14、3.13(p≈0.006–0.008),显著——没有二次型非线性,但有门限型非线性。
于是拟合以 \(x_{i-1}\) 为门限变量、门限 3.79 的门限 WACD(1,1):
两区制分别有 2,503、1,030 个观测,重做非线性检验后全部不显著。去掉不显著参数后的精简模型为区制 1:\(0.225x_{i-1}+0.867\psi_{i-1}\);区制 2:\(1.618+0.614\psi_{i-1}\)。两区制可理解为交易密集期与清淡期:即使去除了日内周期,两种状态下的交易动态依然不同,说明市场活动由信息到达驱动。
5.8 价格变化与久期的二元模型(PCD)
大量成交的价格不变,它们与交易强度相关但不直接带来价格信息。McCulloch & Tsay (2000) 只关注有价格变化的成交,并把中间不变价的成交笔数作为一个变量。重新定义:\(t_i\) 为第 \(i\) 次价格变化的时刻,\(\Delta t_i\) 为相邻两次价格变化之间的久期,\(N_i\) 为其间价格不变的成交笔数,\(D_i\)、\(S_i\) 为方向与大小,\(P_{t_i}=P_{t_{i-1}}+D_iS_i\)。好处是样本量大幅减少(IBM 三个月 60,265 笔成交中只有 19,022 次价格变化),而且价格变化之间的久期没有明显的日内周期;价格不变的成交不改变价格路径。
联合分布分解为
各成分:
- 久期:\(\ln\Delta t_i=\beta_0+\beta_1\ln\Delta t_{i-1}+\beta_2S_{i-1}+\sigma\epsilon_i\);
- 无变化笔数:\(P(N_i=0)\) 用 logistic,\(N_i\mid N_i>0\sim1+g(\lambda_i)\)(几何分布),参数依赖 \(\ln\Delta t_i\);
- 方向:\(D_i=\operatorname{sign}(\mu_i+\sigma_i\epsilon)\),\(\mu_i=\omega_0+\omega_1D_{i-1}+\omega_2\ln\Delta t_i\),\(\ln\sigma_i=\beta|D_{i-1}+D_{i-2}+D_{i-3}+D_{i-4}|\)——负的 \(\omega_1\) 刻画反转;过去 4 次方向一致时方差增大,使正负概率趋于均等,从而允许偶发的局部趋势;
- 大小:\(S_i-1\) 服从泊松分布,上涨、下跌分开参数,\(\ln\lambda\) 依赖 \(N_i\)、\(\ln\Delta t_i\)、\(S_{i-1}\)。
例 5.5(IBM 1990-11-21,194 次价格变化,MCMC 估计)。 久期方程几乎无动态依赖(\(\ln\Delta t_{i-1}\) 系数 0.032,后验标准差 0.073);久期越长,出现无变化成交的可能越大,\(N_i\) 也越大;方向方程 \(\mu_i=0.049-0.840D_{i-1}-0.004\ln\Delta t_i\),\(D_{i-1}\) 的系数显著为负——价格反转;大小方程中 \(N_i\) 的系数为负,即区间内无变化的成交越多,价格变化幅度越小(没有新信息)。扩展到 63 个交易日的层次模型后,许多参数变得显著,例如久期方程中 \(\ln\Delta t_{i-1}\) 的系数在 0.04–0.1 之间。
5.9 应用:用 ACD 刻画日内价格极差
ACD 的乘性误差结构 \(x_i=\psi_i\epsilon_i\) 适用于任何正值序列,这一思想后来被推广为乘性误差模型(MEM)。原书把它用于 Apple 股票的日对数价格极差 \(x_t=\ln H_t-\ln L_t\)(1999-01-04 至 2007-11-20,2,235 个观测)。极差是波动率的稳健代理(第 03b 章 3.15 节),用对数价格的极差还可以免去拆股调整。样本均值 0.0407、标准差 0.0218,ACF 高度显著且衰减缓慢。
| 模型 | \(\alpha_0\) | \(\alpha_1\) | \(\beta_1\) | 形状 \(\alpha\) | \(\kappa\) | \(Q(10)\) | \(Q^*(10)\) |
|---|---|---|---|---|---|---|---|
| EACD | 0.0007 (0.0005) | 0.133 | 0.849 | — | — | 16.65 (0.082) | 12.12 (0.277) |
| WACD | 0.0013 (0.0003) | 0.131 | 0.835 | 2.377 | — | 13.66 (0.189) | 9.74 (0.464) |
| GACD | 0.0010 (0.0002) | 0.133 | 0.843 | 1.622 | 2.104 | 14.62 (0.147) | 11.21 (0.341) |
三个模型的动态参数非常稳定;EACD 的常数项不显著、拟合略差。形状参数 \(\alpha>1\) 说明极差的风险函数递增,与波动率聚集一致。(原书给出的 GACD 残差描述统计顺序有误,合理解读为最小值 0.203、最大值 4.497、均值 0.999、标准差 0.436。)
门限 ACD。 初步分析表明两区制主要差在 Weibull 形状参数,于是拟合仅形状参数随区制变化的 TWACD(2;1,1),门限在 \(x_{t-1}\) 的 60%–95% 分位上网格搜索,对数似然在 70% 分位(0.04753)处最大:
干预分析。 美国股市在 2001-01-29 改为十进制报价。用 Box & Tiao (1975) 的干预分析,定义 \(I_t=1\)(\(t\le522\),即改制前)、否则为 0:
估计 \(\psi_t=0.0021+0.0011I_t+0.1595x_{t-1}+0.7828\psi_{t-1}\),\(\hat\gamma\) 在 1% 水平显著为正。改制后与改制前的期望日极差分别为
结论:十进制改革降低了 Apple 的期望日极差,即降低了波动率。这个框架可直接用于评估 tick size、涨跌停、交易费用等制度变化的影响。
量化实战
应用场景
- 回测中的微观结构偏差。 用成交价算短周期收益会同时受买卖反弹(单只股票的虚假反转)和非同步交易(组合的虚假动量、虚假领先–滞后)污染。对策:用中间价(mid-quote)而非成交价计算收益;信号与成交之间跳过一期;用 5.2、5.3 节的公式估计偏差量级。
- 交易成本估计。 Roll 价差 \(2\sqrt{-\operatorname{Cov}}\) 只需要价格序列,常用于缺少报价数据时估计有效价差,也可作为股票流动性因子。
- 执行与做市。 ADS 模型给出"下一次价格变化的方向"的条件概率(上一次上涨后再涨的概率只有约 8.5%),是预测下一个 tick 方向的基础;ACD 给出下一笔成交的期望等待时间,可用于判断当前流动性、安排拆单节奏。
- 日内季节性与成交量曲线。 5.6.1 节的日内调整方法同样适用于成交量,VWAP 算法依赖的正是日内 U 形成交量曲线。
- 波动率预测。 日极差的 ACD/CARR 模型、5 分钟收益的已实现波动率都是日频波动率预测器;它们比只用收盘价的 GARCH 利用了更多日内信息。
- 事件研究。 5.9 节的干预分析可评估制度变化对波动率和流动性的影响。
Python 示例
代码依次:(1) 模拟非同步交易,验证 \(\operatorname{Var}(r_t^o)\) 和 \(\operatorname{Cov}(r_t^o,r_{t-j}^o)=-\mu^2\pi^j\);(2) 模拟 Roll 模型并用自协方差估计价差;(3) 模拟 WACD(1,1) 并按式 (5.41) 做条件极大似然估计;(4) 用原书表 5.6 的参数生成 ADS 数据,再用两次 logistic 回归还原。
import numpy as np
from scipy import optimize, special
from statsmodels.stats.diagnostic import acorr_ljungbox
import statsmodels.api as sm
rng = np.random.default_rng(2024)
# ---------- 1. 非同步交易:验证 Cov(r_t^o, r_{t-1}^o) = -pi*mu^2 ----------
mu, sigma, pi, T = 0.5, 1.0, 0.4, 2_000_000
r = mu + sigma * rng.standard_normal(T)
trade = rng.random(T) > pi # 以概率 1-pi 成交
cum, ro = 0.0, np.zeros(T)
for t in range(T): # 观测收益 = 自上次成交以来的累计真实收益
cum += r[t]
if trade[t]:
ro[t], cum = cum, 0.0
ro = ro[1:]
print("非同步交易:")
print(f" Var(r^o) 模拟 {ro.var():.4f} 理论 {sigma**2 + 2*pi*mu**2/(1-pi):.4f}")
for j in (1, 2):
c = np.cov(ro[j:], ro[:-j])[0, 1]
print(f" Cov(lag {j}) 模拟 {c: .4f} 理论 {-mu**2 * pi**j: .4f}")
# ---------- 2. Roll 模型:由价格变化的一阶自协方差估计价差 ----------
S, s_eps, n = 0.02, 0.01, 200_000
p_star = 10 + np.cumsum(s_eps * rng.standard_normal(n))
I = rng.choice([-1, 1], n)
P = p_star + I * S / 2
dP = np.diff(P)
cov1 = np.cov(dP[1:], dP[:-1])[0, 1]
print(f"\nRoll 模型: rho1 = {np.corrcoef(dP[1:], dP[:-1])[0,1]:.3f} "
f"(理论 {-(S**2/4)/(S**2/2 + s_eps**2):.3f}), 估计价差 = {2*np.sqrt(-cov1):.4f} (真值 {S})")
# ---------- 3. WACD(1,1):模拟 + 条件极大似然估计 ----------
def sim_wacd(n, omega, gam, beta, alpha):
c = special.gamma(1 + 1/alpha)
eps = rng.weibull(alpha, n) / c # 标准化 Weibull,均值 1
x, psi = np.zeros(n), np.zeros(n)
psi[0] = omega / (1 - gam - beta); x[0] = psi[0] * eps[0]
for i in range(1, n):
psi[i] = omega + gam * x[i-1] + beta * psi[i-1]
x[i] = psi[i] * eps[i]
return x
def wacd_negll(theta, x):
omega, gam, beta, alpha = theta
if omega <= 0 or gam < 0 or beta < 0 or gam + beta >= 1 or alpha <= 0:
return 1e10
psi = np.empty_like(x); psi[0] = x.mean()
for i in range(1, len(x)):
psi[i] = omega + gam * x[i-1] + beta * psi[i-1]
lg = special.gammaln(1 + 1/alpha)
z = np.exp(lg) * x[1:] / psi[1:]
ll = alpha*lg + np.log(alpha/x[1:]) + alpha*np.log(x[1:]/psi[1:]) - z**alpha # 式 (5.41)
return -ll.sum()
x = sim_wacd(5000, 0.3, 0.2, 0.7, 1.5)
fit = optimize.minimize(wacd_negll, [0.2, 0.1, 0.8, 1.0], args=(x,), method="Nelder-Mead",
options={"maxiter": 4000, "xatol": 1e-6, "fatol": 1e-6})
om, ga, be, al = fit.x
print(f"\nWACD(1,1) 真值 (0.3, 0.2, 0.7, 1.5) 估计 ({om:.3f}, {ga:.3f}, {be:.3f}, {al:.3f})")
print(f" 期望久期: 理论 {0.3/(1-0.2-0.7):.2f}, 样本 {x.mean():.2f}, 模型隐含 {om/(1-ga-be):.2f}")
psi = np.empty_like(x); psi[0] = x.mean()
for i in range(1, len(x)):
psi[i] = om + ga * x[i-1] + be * psi[i-1]
eps_hat = x / psi
print(f" Q(10) 原久期 p={acorr_ljungbox(x, lags=[10])['lb_pvalue'].iloc[0]:.3g}, "
f"标准化残差 p={acorr_ljungbox(eps_hat, lags=[10])['lb_pvalue'].iloc[0]:.3f}")
# ---------- 4. ADS 分解模型:两次 logistic 回归 ----------
n = 60000
A, D = np.zeros(n, int), np.zeros(n, int)
for i in range(1, n):
pA = 1/(1+np.exp(-(-1.057 + 0.962*A[i-1]))) # 用原书表 5.6 的参数生成数据
A[i] = rng.random() < pA
if A[i]:
pU = 1/(1+np.exp(-(-0.067 - 2.307*D[i-1])))
D[i] = 1 if rng.random() < pU else -1
m1 = sm.Logit(A[1:], sm.add_constant(A[:-1])).fit(disp=0)
sel = A[1:] == 1
m2 = sm.Logit((D[1:][sel] + 1)//2, sm.add_constant(D[:-1][sel])).fit(disp=0)
print(f"\nADS: P(A_i=1) 方程 {np.round(m1.params, 3)}, 方向方程 {np.round(m2.params, 3)}")
for dprev in (1, 0, -1):
print(f" 上一笔方向 D_(i-1)={dprev:+d} 时本笔上涨概率 = {1/(1+np.exp(-(m2.params[0]+m2.params[1]*dprev))):.3f}")
关键输出:
非同步交易:
Var(r^o) 模拟 1.3380 理论 1.3333
Cov(lag 1) 模拟 -0.0992 理论 -0.1000
Cov(lag 2) 模拟 -0.0411 理论 -0.0400
Roll 模型: rho1 = -0.335 (理论 -0.333), 估计价差 = 0.0201 (真值 0.02)
WACD(1,1) 真值 (0.3, 0.2, 0.7, 1.5) 估计 (0.310, 0.192, 0.704, 1.515)
期望久期: 理论 3.00, 样本 2.97, 模型隐含 2.99
Q(10) 原久期 p=0, 标准化残差 p=0.357
ADS: P(A_i=1) 方程 [-1.061 0.955], 方向方程 [-0.095 -2.33 ]
上一笔方向 D_(i-1)=+1 时本笔上涨概率 = 0.081
上一笔方向 D_(i-1)=+0 时本笔上涨概率 = 0.476
上一笔方向 D_(i-1)=-1 时本笔上涨概率 = 0.903
模拟与理论公式高度吻合。为了让效应看得清楚,非同步交易例子把 \(\mu\) 设为 \(\sigma\) 的一半;真实日收益中 \(\mu/\sigma\) 通常小于 0.1,单只股票的偏差因此很小,组合层面的交叉效应才是主要问题。WACD 在 5,000 个观测下估计准确,标准化残差已无序列相关,而原久期序列的 Q 统计量极其显著。实际数据还应先去除日内周期。
本章小结
高频数据的统计性质深受市场微观结构影响:非同步交易让单只股票出现 \(-\mu^2\pi^j\) 的负自协方差、让组合出现虚假的正相关;买卖反弹让价格变化在无基本面变化时有 \(-0.5\) 的一阶自相关,反过来可用于估计价差。逐笔数据不等间隔、价格离散、有日内 U 形和同秒多笔,清洗与日内调整是必经步骤。价格变化可用有序 probit(潜变量 + 分界点)或 ADS 分解(是否变化 × 方向 × 大小)建模,实证都显示强烈的价格反转。久期用 ACD 建模,它是 GARCH 在正值序列上的翻版,新息分布决定风险函数的形状;门限 ACD 区分了密集与清淡两种交易状态。ACD 思想可推广到任何正值序列,如日内价格极差。
| 概念 / 公式 | 要点 |
|---|---|
| 非同步交易 | \(E r^o=\mu\);\(\operatorname{Var}r^o=\sigma^2+\frac{2\pi\mu^2}{1-\pi}\);\(\operatorname{Cov}(r^o_t,r^o_{t-j})=-\mu^2\pi^j\) |
| Roll 模型 \(P_t=P_t^*+I_tS/2\) | \(\operatorname{Cov}(\Delta P_t,\Delta P_{t-1})=-S^2/4\);\(\rho_1=-\frac{S^2/4}{S^2/2+\sigma^2}\) |
| Roll 价差估计 | \(\hat S=2\sqrt{-\widehat{\operatorname{Cov}}(\Delta P_t,\Delta P_{t-1})}\) |
| 有序 probit | \(P(y_i=s_j)=\Phi(\frac{\alpha_j-\boldsymbol x_i\boldsymbol\beta}{\sigma_i})-\Phi(\frac{\alpha_{j-1}-\boldsymbol x_i\boldsymbol\beta}{\sigma_i})\) |
| ADS 分解 | \(y_i=A_iD_iS_i\);两次 logistic + 几何分布 |
| 调整久期 | \(\Delta t_i^*=\Delta t_i/f(t_i)\) |
| ACD(\(r,s\)) | \(x_i=\psi_i\epsilon_i\),\(\psi_i=\omega+\sum\gamma_jx_{i-j}+\sum\omega_j\psi_{i-j}\) |
| EACD(1,1) 方差 | \(\mu_x^2\frac{1-\omega_1^2-2\gamma_1\omega_1}{1-\omega_1^2-2\gamma_1\omega_1-2\gamma_1^2}>\mu_x^2\)(过度离散) |
| 风险函数 | \(h=f/S\);Weibull:\(\alpha=1\) 常数,\(>1\) 递增,\(<1\) 递减;广义 Gamma 可 U 形 |
| WACD 对数似然 | 式 (5.41) |
| 干预分析 | \(\psi_t=\alpha_0+\gamma I_t+\alpha_1x_{t-1}+\beta_1\psi_{t-1}\) |
练习
基础
- (原书习题 5.1)\(r_t\) 为均值 0.05、方差 1.5 的高斯白噪声,每期成交概率 40%(即 \(\pi=0.6\))。观测收益是否序列相关?求前三阶自相关。 提示:\(\operatorname{Var}(r^o)=1.5+\frac{2\times0.6\times0.0025}{0.4}=1.5075\);\(\rho_j=-0.0025\times0.6^j/1.5075\),即 \(-0.00100,\,-0.00060,\,-0.00036\)。相关存在但极小。
- (原书习题 5.2)Roll 模型中 \(\Delta P_t^*\) 方差为 1.0,价差为 2 个 tick。tick 为 1/8 美元和 1/16 美元时,\(\Delta P_t\) 的一阶自相关各是多少? 提示:\(S=0.25\) 时 \(\rho_1=-0.015625/1.03125=-0.0152\);\(S=0.125\) 时 \(\rho_1=-0.00390625/1.0078=-0.0039\)。
- 某股票成交价变化的一阶样本自协方差为 \(-2.5\times10^{-5}\)(单位:美元²),用 Roll 方法估计有效价差。 提示:\(\hat S=2\sqrt{2.5\times10^{-5}}=0.01\) 美元。
- EACD(1,1) 中 \(\omega=0.2\)、\(\gamma_1=0.1\)、\(\omega_1=0.8\),求期望久期和久期方差,并验证过度离散。 提示:\(\mu_x=2\);方差 \(=4\times\frac{1-0.64-0.16}{1-0.64-0.16-0.02}=4\times\frac{0.20}{0.18}=4.44>4\)。
- 写出 Weibull 分布 \(\alpha=0.5\) 和 \(\alpha=2\) 时的风险函数形状,并分别解释它们对成交间隔意味着什么。
进阶
- 证明 Roll 模型中 \(\operatorname{Cov}(\Delta P_t,\Delta P_{t-2})=0\)。若订单方向 \(I_t\) 是一阶马尔可夫的、滞后 \(k\) 自相关为 \(\rho^k\)(\(\rho>0\),订单拆分导致连续同向成交),重新推导 \(\operatorname{Cov}(\Delta P_t,\Delta P_{t-1})\),并说明此时 Roll 估计会怎样偏差。 提示:\(\operatorname{Cov}=\frac{S^2}{4}[2\rho-1-\rho^2]=-\frac{S^2}{4}(1-\rho)^2\),Roll 估计低估价差。
- 修改本章代码,用 EACD 的 QMLE(即把指数似然用于 Weibull 数据)估计同一组模拟 WACD 数据,比较动态参数估计与 (5.41) 的 MLE 结果。
- (原书习题 5.5 改编)模拟一个"真实价格为 GBM + Roll 买卖反弹"的逐笔序列,按 1、5、30 分钟采样计算已实现波动率(日内收益平方和),观察采样频率越高、已实现方差越被价差噪声抬高的现象。
- (原书习题 5.6 改编)给模拟久期乘上一个 U 形日内因子,再用"按时段求跨日平均对数久期"的方法去季节性,检验调整后是否仍有日内模式,并拟合 WACD。
原书推荐习题:5.1、5.2(手算非同步交易与 Roll 模型);5.4、5.7、5.10(真实逐笔数据的日内模式与买卖反弹);5.5(已实现波动率及其偏差);5.6(去日内周期 + 三种 ACD 比较);5.8、5.9(不同采样频率下的收益序列相关)。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 5.1 高频数据概述 | 第 5 章引言 | p.251–252 |
| 5.2 非同步交易 | 5.1 | p.252–255 |
| 5.3 买卖价差与 Roll 模型 | 5.2 | p.255–257 |
| 5.4 逐笔数据经验特征 | 5.3 | p.257–264 |
| 5.5 有序 probit、ADS | 5.4 | p.264–273 |
| 5.6 ACD 模型 | 5.5 | p.273–284 |
| 5.7 门限 ACD | 5.6 | p.284–285 |
| 5.8 PCD 模型 | 5.7 | p.285–290 |
| 5.9 日内极差的 ACD 与干预分析 | 5.8 | p.290–296 |
| 概率分布回顾、风险函数、RATS 程序 | 附录 A、B、C | p.296–302 |
| 习题 | 第 5 章习题 | p.302–304 |
(原书印刷页码约等于 PDF 页码减 20。)