第一节 基本分析框架
一 时间序列:理解高频数据的起点
(一) 时间序列分析的标尺
从构建模型的角度来看,时间序列模型一般指的是“连续状态,离散时间”(变量连续取值,观测时点离散) 这类情形,于是自然还有“连续状态、连续时间”( 如连续时间金融模型)、“离散状态、离散时间”(如Markov chain model)、“离散状态、连续时间”( 如久期模型duration model或生存分析survival analysis)。
若要从时间序列的角度来认识这类数据,我们首先需要从观测变量{Xt} 的脚标开始:通常时间序列 {Xt} 的脚标是等间隔的钟表时间(calendar time scale),如1,2,3, ……;但在高频数据中,脚标还可以是随机间隔的交易时间(tick-by-tick time scale),如t1, t2, t3, ……这样一个很重要的转变是,前者的标尺是外生变量,而后者转为内生变量,显然传统方法 (诸如ARCH、SV、VAR等) 不再适用。为此可以考虑以下几种处理方法:
(1) 对时间定义一个固定的窗宽 (如五分钟、十分钟等),取最后一笔交易价格 (拟收盘价),或进行累加,或 (线性) 插值,将序列变换为等间隔数据,从而重新启用我们熟知的传统方法。这种逻辑是很直接的,比如后文提到的HHT就是将非线性非平稳序列平稳化分解之后再做Hilbert变换;SVM也是如此,将某空间非线性可分的点变换到另一空间(维度一般会大于等于原空间) 再做线性划分;我们对趋势非平稳序列取差分得到平稳序列也是要“迎合”旧有的工具。不过,这个思路涉及一个直接的问题就是,最优取样间隔如何确定?
(2) 对取值定义一个固定的窗宽,进行计数,从频率 (测度) 的角度做分析。后文提出的协同波动率估计就是采用这种方法。
(3) 直接对随机交易间隔建模。以上两种方法虽然在一定程度上避免了微结构噪声的干扰,但如果感兴趣的是微结构动态 (microstructue dynamic),那么,所规避的微结构噪声恰恰是我们分析的对象。
【例】随机交易间隔等间隔化所带来的影响
价格未变动的情形 (价格惰性) 反映在下图矩形色块的水平方向,矩形色块的垂直方向反映的则是同时交易问题 (同一时刻有多笔交易,且这多笔交易的价格不同),这部分二者基本上是等价的。不同的是,等间隔化将中间一段没有交易的部分毫无缘由地“填满”了 (右移),其余部分的变动趋势也被曲解了 (比如放大或缩小)。一个简要的图示如下:真实的情况是通过 (1,1) 和 (3,2) 两点,见下图虚线部分;而等间隔化 (取最后一笔交易) 之后则通过 (1,1) 和 (2,2) 两点,见下图实线部分,趋势被扭曲了。
图2-1 日内交易价格:等间隔 (人为设置seq)
图2-2 日内交易价格:不等间隔 (按真实记录TradeTime)
图2-3 等间隔化
(二) 两类加总 (consolidated; aggregation)、分拆 (split) 与匹配(matching)
为了解释清楚两类加总 (consolidated; aggregation)、分拆 (split) 与匹配 (matching) 这些典型的数据处理方法,不妨考虑某只股票形成的市场 (注意,一种商品的买卖构成一个市场):
[1]Buy 20@6.4
[2]Buy 40@5.2
[3]Buy 20@5.2
[4]Buy 20@4.1
图2-4 供求曲线
需求曲线表示的是潜在可执行的情况,比如,若有卖4.1的卖者,则买的量远不止20,而是100 (20+40+20+20,愿意出高价的买者会参与进来,获得消费者剩余)。在5.2这个价格上的需求量是40+20=60,是数量上的加总 (consolidated)。当一个市价指令 (marketable oder, on one side of the market) 与数个等待的限价指令 (several standing limit orders, on the opposite side of the market) 相匹配时〈价格相等,但数量上未补平(unfilled),就会产生拆分问题 (splittransactions)〉。比如,
Sell 1000@5.2
[1]Buy 500@5.2
[2]Buy 500@5.2
这些子交易 (sub-trades) 是逐个记录的 (recorded individually),在记录精度不高的情况下交易数据会表现为同时交易 (注意,这里的同时交易是因为记录时间精度不够而引起的,非同时交易〈non -synchro-nized〉一般指的是不同交易所报价和记录数据存在时间上的不一致,或者不同股票交易时间不同却以等间隔取样所导致的非同时性),相应的价格保持不变 (事实上也可以是变化的,比如,第一个order是Buy 500@5.3)。
如果交易本身是拆分完成的,将子交易 (sub-trades) 加总为一个总交易 (one single transaction) 是恰当的。Grammig和Wellner (2002) 提出了一类鉴别拆分交易的方法:子交易间隔小于1秒,同时相应的价格不变。但是,Veredas等 (2008) 认为,(1) 如果第一个买入指令是Buy 500@5.234,那么其实并不是交易拆分问题,而是两个不同的交易 (交易价格不同) ——即便数据显示为同时交易,在这种情况下,贸然加总是有问题的;(2) 对于交易非常活跃的情形,即便记录时间精确可以至毫秒,但1毫秒内发生数笔交易也不是不可能的,在这种情况下,贸然对零交易间隔的数据进行加总会导致误配 (mismatching)。
其实,我们所使用的高频数据大都是加总过的。尽管加总会损失一些信息,但是 (1) 对于我们要分析的变量,这样构造和组织数据是经济且实用的,特别是数据量比较大的时候;(2) 可以减少市场微结构噪声的影响。
加总有两个基本的思路:事件加总 (Event aggregation) 和时间加总(Time aggregation),前者根据具体的某类交易事件是否发生进行加总,比如交易是否发生 (transaction time; business time)、限价指令是否到达、交易价格是否变动等;后者根据钟表时间 (clock time; calendar time)是否嘀嗒跳动进行加总,不同于前者会相应地产生久期 (duration) ——刻画交易动态,时间加总在时间上显然是等距的。采用时间加总的好处是:(1) 在进行多变量分析时,数据采样可以保持一致;(2) 在进行预测时,通常是钟表时间刻度的。但采用时间加总需要比较不同间隔宽窄所带来的影响,即取样的细致程度对分析结果是有影响的(不难想象,随着取样间隔加细,往往会收敛到事件加总的情形)。
数据处理过程中,除了加总与拆分,还有一类值得注意的问题是匹配(matching)。比如,不同的交易所会对交易和报价做各自的记录,那么如何把这些数据集进行匹配就成了问题。再比如,交易与相应的报价之间的匹配,Lee和Ready (1991) 建议让报价前置5秒(“Five-seconds rule”:This is due to the fact that quotes are posted more quickly than trades can be recorded. ),但这个法则并不适用于最近的数据,因为无论从指令处理的速度还是准确度来讲都有了很大的提升,这在一定程度上减少了延迟 (5秒), Henker和Wang (2006) 的实证分析表明1秒的延迟是恰当的,这与目前的大多相关研究相符。事实上,采用“一刀切”的延迟匹配规则并不合适,从这个角度来讲,数据导向的延迟规则则更合理一些,参见Hautsch和Huang (2009)、Hautsch (2012) 的研究。
注释:设交易价格和最优买卖报价分别为pi, ai, bi,其中,时间标度i<j,下面可以根据规则:
保留点j, if|pj-pi|≥dp
将序列进行加总 (缩减),其中,dp是外生给定的。事实上,为防止买卖价跃动 (bid-ask bounce) 所带来的偏差 (biases),通常在产生价格久期的时候,并不以交易价格pi为标准,而是以中间报价为准。图2-5直观地反映了随机交易间隔 (irregular spacing of trades) (小圆圈之间的横向间距不等)、价格和报价的离散变动以及交易价格在买卖报价之间的上下跳跃。
图2-5 JP Morgan和Microsoft在2009年6月1日某一分钟的交易价格和买卖报价
注:小圆圈代表相应的交易价格,实线和虚线分别是最优的买卖报价。
资料来源:Hautsch (2012)。
二 序贯面板数据变换
(一) 序贯面板数据
面板数据 (Panel or Longitudinal Data) 的思想至少可以追溯到Hildreth (1950),我们的基本想法是对高频数据做“拟面板变换”,如表2-1所示,得到序贯面板数据 (sequential panel data)。与面板数据不同的是,“序贯面板数据”的重要特征在于:
表2-1 序贯面板数据的线性模型结构
(1) id是有序的 (sequential),也具有时间序列特征,如可以引入yi-1, t (自回归), xi-1, t (滞后变量), ui-1, t (移动平均) 等时间序列算子。为此,可以引入一个新变量作为顺序标识,这类似于 (截面) 固定效应。但不同的是,这里是一个设定的约束,而不是待估参数。
(2) 脚标i与t之间是有关系的,yit=y (i, ti),也存在不同频率的转换 (混频)。
(3) i与t的“地位”是相等的,可以交换。比如,表2-1 (以i索引) 完全可以转换为以t索引。
(二) 基本分析框架
以t表示时间,j表示股票种类,考虑单变量 (不妨取对数价格lnp)的情形作为基准模型,如图2-6 (左) 所示,时间序列模型主要是在t-lnp这个切面进行分析。现在我们考虑这个基准模型的扩充:(1) 将lnp这个维度扩充成多维 (多变量v1, v2, …, vk),这便是面板数据结构 (t-i-v1-v2-…-vk)。(2) 固定j,将t这个维度拆解为i与t,其中i与t分别为不同的频率,如i的刻度为天,t的刻度为分钟,如图2-6 (右) 所示。在这种情况下,固定t (如收盘点),在i-lnp这个切面的讨论便是低频时间序列分析;若压缩 (如取平均) 在t-lnp这个平面,则是高频数据日内特征分析;如果考虑整个三维空间,可以进行更细致的分析,比如查看日内某时刻的变动规律、混频分析 (i 为低频取样,t 为高频取样)、双尺度分析 (i与t皆为高频取样,其中i的频率略低) 以及事件序列分析等。我们以下关于“双重视角”的讨论就是在第 (2) 种扩充框架下展开的。
以分钟抽样的高频数据为例,i记录的频次是天,t记录的频次是分钟,这样高频数据可以组织成如表2-2所示的数据库形式 (多变量),表2-3给出了其矩阵形式 (单变量)。注意,通常我们认为超高频数据,t这个维度的刻度不是等分的,而且间隔随机,长度m自然也不尽相同 (可以写作mi)。事实上,高频数据也不是等间隔的,比如以5分钟为采集频率,由于沪深两市连续竞价 (正常交易) 时间为周一至周五每日9: 30~11: 30和13: 00~15: 00 (9: 15~9: 25是集合竞价时间),所以,11:30—13: 00之间的间隔就不再是5分钟了。进一步,拼接起来以时间序列的角度来看,今天的15: 00到明天的9: 30,二者之间的间隔也不是5分钟;周五的15: 00到下周一的9: 30,二者之间的间隔也不是5分钟。更重要的是高频数据还有非同步交易 (non - synchronous trading; asyn-chronous trading) 问题。所以,严格来讲,高频数据简单以时间序列的角度进行分析是不恰当的,至少需要对数据做预先的处理 (此处我们暂且考虑经过处理之后的高频数据)。
表2-2 高频数据的结构 (数据库形式)
表2-3 高频数据的结构 (矩阵形式)
注释:矩阵形式只能显示单变量的情形。
图2-6 单变量基准模型 (左),双重视角 (右)
图2-7 单变量双重视角的三维图示
“i( t) 视角”本质上可以看做是样本的细化,它分析的对象仍然是以天为单位,只是每天的数据更细致了,如可求得每一天的平均收益率、每一天的平均价格,而不仅仅是收盘价。换句话说,以前分析的数据可能只是表2-3中t=m这一列 (如收盘价),而现在分析的数据是n × m这个矩阵。显然,用要比xi, m( m固定,i=1,2…, n) 更稳健。
“t (i) 视角”相当于对“交易日”的重复观测 (分析的对象就是这一天),它关心的是日内的行为特征。然而单纯一天的数据并不能说明问题,因为它可能只是偶然的、随机的个案。为从统计上更科学的反映一天的行为特征,往往需要找出“典型的一天”或“有代表性的一天”,最简单的便是平均,这便是。
如果 (超) 高频数据挖掘的目标主要是为了理解日内行为特征,那么“t(i)视角”(面板数据) 更为可取,特别是超高频数据对随机交易间隔所反映出来的行为特征的理解。注意,超高频数据观测频次t的间距和长度不等,但事实上这并不重要,因为超高频数据分析挖掘的主要是随机交易间隔信息。
如果考虑对价格波动建模,似乎须以“i( t) 视角”( 时间序列) 来看。因为日内价格存在惰性,再加上熔断机制等限制,所以价格在日内的波动本身非常小,而建模的目的是为了对波动做出解释。或者从“t( i) 视角”( 面板数据) 对日内价格波动建模,可能事先需要做一些恰当的变换,将价格波动放大,比如:
f( t) 在t附近的变化可以表示为。我们希望在 t=1和0附近能有较大的值,故设,不妨取,两端积分得,这可以看做是对 t 做了logit变换( logit),它等价于,而这恰是logistic分布函数F( t) =的形式。