Local EPUB Text
期货的数据
数据其实是量化程序最重要的基础!任何量化交易的策略都离不开数据,用于模拟的数据哪怕是出现一丁点的瑕疵,都会导致模拟的预测结果与真实的交易相差很远,之前无论多么辛苦的计算、多么精妙的算法都毫无用处。相比股票之类的现金工具而言,导致分析期货的交易数据所使用时间序列分析非常复杂的根本原因在于任何一个期货合约的存续期都是有限的。对于任何一种标的资产,如标普500指数、白银、玉米等,任何一个时点都会存在多个到期月份不同的期货合约同时在交易,而且它们的交易价格一般也不会完全相同。所以为了能够在更长的时间尺度上进行模拟并测试交易策略的有效性,我们就必然需要一些更为长期的数据,而这类时间跨度较长的数据并不自然地存在于现实世界中。我们能直接获取的只是一些不连续的时间序列,每组数据对应一只期货合约的整个生命周期,但只能覆盖我们所需的长期数据中的一小部分,因此在实际中需要我们这些交易员和分析师人为地从中构造出有用的长期数据。
如何处理不连续的数据
当一个新的期货合约开始交易时,离该合约的到期日还会有很长的一段时间,而且它的交易程度一般也不会很活跃。实际上,恐怕也很少有人会真心想买卖几年以后才能交割的小麦期货。越接近每个期货合约各自的到期日,它们的流动性就会变得越好。无论是玉米、橙汁、黄金,还是其他的一些标的资产,任一时点在交易的期货合约中只有一个是流动性最好的,而这个合约也是交易度最活跃的那个,我们称之为主力合约[1]。一般来说,它往往就是最快要到期的那个合约,但这也并不是绝对的。此外,流动性向其他合约转移的时机并没有什么规律可循,想准确预测出哪一个合约会成为下一个主力合约是有难度的。但像某些板块的期货合约,如股票指数期货和外汇期货等,不出意外的话,主力合约总是剩余存续期限最短的那个,而且主力合约的转换时机普遍会发生在到期日的当天或者到期日前的一两个交易日内,但那些商品期货合约流动性转换的时机和未来下一个主力合约的选择则根本无从预测。
对于那些只专注于一两个交易品种的人来说,他们就很可能因为过于熟悉这些市场,使得当主要参与者的关注点从一个合约向另外一个合约转移时,能够在第一时间发现这种变化。但对于需要覆盖大量品种的程序化交易员来说,他需要一种可以自动探测主力合约换月的方法。在一名典型的交易员眼中,只有主力合约才是唯一有用的。虽然有的CTA投资经理能从到期日不同合约之间的价差[2]中牟利,但绝大多数常见的期货策略只针对主力合约操作才会有效。
图2-1显示了三个不同交割月的标普500指数期货合约在2011年的持仓量变化情况。标普500指数期货合约的交割月份只有4个,分别是3月、6月、9月和12月,如在3月合约即将到期时,交易量会向6月合约转移,而其他合约在接近其到期日时也会如此。2011年6月合约的到期日为6月16日,而在快要到这一天的时候,6月合约的持仓量开始逐渐下降,而同时9月合约的持仓量则在渐渐增加;从图2-2中可以看出,与此同时6月合约和9月合约的交易量都会突然暴增。大家都知道,持仓量代表市场上现有未平仓的合约手数,也就是某个特定交割月份现在还有多少手被持有的期货合约。如果我们买入开仓一手标普500的期货合约,那么该合约的持仓量就会增加一手;如果把它卖出平仓,持仓量就会减少一手。同样,卖空开仓也会增加一手持仓量,买入平仓则减少一手。
在持仓量向下一个交割月份的合约转移的过程中,之所以会出现交易量同时增加的现象,是因为此时所有人都在忙于向远月展仓——将持有的6月合约平仓,同时在9月合约上建立相同的头寸,这就产生了大量的交易单。虽然标普500指数的期货合约属于不需要实物交割的金融期货,理论上我们可以将其持有到期,但是从这些历史数据的图中可以看出,很少有人会这样做。如果我们的终极目标是保持与持有标的资产(也就是现货,对于标普500的期货合约就是标普500指数)完全相同的头寸,那么我们需要保证展仓交易能够顺利完成,即买入一个合约和卖出另外一个合约的过程必须同时发生。远月合约开仓和当月合约平仓之间的时间差会让价格变化对原本的头寸产生额外的风险。
图2-1 不同月份的期货合约每月持仓量的变化情况
图2-2 合约展仓期间换月合约的交易量会出现骤增
其实寻找从一个合约向其他合约展仓的时机,我们需要的只是一个确定的指标和一种明确的方法。一般来说,人们普遍使用的指标是交易量、持仓量或同时使用两者,而展仓的时机则出现在新合约的交易量或(和)持仓量高于旧合约的时候。有些人在该时机出现的当天就开始展仓了,而有些人要连续保持多日同样的情况后才有所动作。不管怎么做,只要能保证持有的合约是流动性最好的那个合约,并且清楚地知道展期的时机和方法,就不会有太大的问题。
期限结构
期货市场的期限结构或收益率曲线指的是同一个标的物上连续几个交割月份合约的价格所形成的曲线,就像表2-4中燃料油期货(heating oil)不同月份合约的价格在图2-3上所显示的那样。任何一个特定月份的合约与比其晚6个月交割的合约之间的价格差一般都会很大,在所谓的期限结构图上就能很好地显示全部月份合约之间的价格差异。
图2-3 燃料油期货的期限结构
表2-4 燃料油期货的期限结构表
在燃料油期货的例子中,几个连续月份的合约随着交割时间的后延,各自的价格也逐步上升,这是一种正常的现象。有时候期货价格相对现货价格、远月合约相对近月合约出现价格升水,这种随时间倾斜向上的期限结构被称为远期升水(contango)。在另外一些时候,图2-3中的曲线也会随着交割时间的延后而形成一种倾斜向下的形态,这种结构则被称为远期贴水(backwardation)或现货升水。这两个词原本出自伦敦股票交易所在19世纪中期采用的一种股票延迟交收的方式[3],但现在已成为一对拗口的期货专有术语,却能够恰如其分地描述这两种期限结构的具体形态。
如果想知道为什么远月交割的合约一般价格会比较高,我们只要考虑到对冲的持仓成本就很好理解了。对于任何一个头寸,它的公允价格应该等于完全对冲该头寸所需的费用。比如,如果我们卖空开仓了100手一年之后交割的黄金期货合约,那么为了完全对冲这笔交易的风险,我们需要现在从现货市场买入10000盎司(约283千克)的实物黄金,并一直保管到这个期货合约的交割日。首先要知道除了藏在自己家的地窖里,世上恐怕没有什么地方愿意免费存放这些黄金;其次,如果购买黄金所需的现金没有被占用一年,放到任何地方都至少能收到一笔利息。所以,从期货合约卖方的角度来说,他在卖空黄金期货的同时理应买入现货黄金来对冲风险,但是交割的日期距离现在越远,保管黄金的费用及本应获得的利息收入就越高,所以卖出远月合约自然就需要更高的价格来补偿。
而对于金融期货,如股指期货和利率期货,由于不需要储存实物,利率水平就变成影响期限结构形态最主要的因素。也正因为如此,大家一般会看到商品期货的期限结构比金融期货更加陡峭。存储费用越昂贵的商品,存储成本对期限结构的影响就越大。比如天然气由于其昂贵的存储成本,导致其期货合约的价格具有非常严重的远期升水现象。
远期贴水或倾斜向下的期限结构,虽然不像远期升水那么普遍,但也并非绝对不可能出现。季节性因素、利率情况或不正常的仓储状况都有可能造成某种期货发生远期贴水,这种现象尤其是在软商品[4]和易耗损的商品上时有发生。
价差
同一标的物在不同交割月份合约的成交价格总是存在一定的差异,这种差异可以从期限结构上反映出来。在任何时点,黄金期货在同一年交割的4月合约与12月合约就有完全不同的成交价格,而其他期货品种也都是如此。同一年的12月合约的价格一般会高于4月合约的价格,这就是我们前面所提过的远期升水现象,但记住,这种远期升水与市场对黄金未来价格的预期没有任何关系。虽然从表面上看来,12月合约的较高价格反映了市场参与者对未来黄金现货价格上涨的预期,但是事实并非一定如此,大多数情况下对冲成本或者持有成本(carry cost)是造成这种现象的根本原因。只有当我们持有的近月期货合约即将到期并且需要向远月合约展仓时,这两个合约之间的价差才变得非常重要。
图2-4记录了糙米的2012年5月合约和2012年7月合约的价格变化,黑色的实线代表2012年5月合约,灰色的折线代表2012年7月合约。从图2-4中可以看出,7月合约的价格始终高于5月合约的价格。虽然这是一种正常现象,但有时候这种关系会扭转过来,远月合约的价格也会低于近月合约的价格。
图2-4 糙米期货合约的价差变化
导致不同交割月份的合约间存在价格差异的原因我们现在已经非常清楚了,这主要是由对冲成本或者持有费用造成的,但价差为我们带来的麻烦还没有解决。当需要进行较长时间尺度的模拟时,我们发现将两个主力合约的历史价格数据简单地汇总在一起,无法形成一条连续且平滑的时间序列数据。将不同合约的价格数据简单相加时,会在结合部出现一个缺口,而也许与此同时真实市场中的商品价格是不存在缺口的。严格的历史模拟回测需要使用一条连续交易产生的时间序列,只有连续的价格变化反映的才是真实的市场行为,而不一定要求价格本身也是真实的。图2-5中显示的时间序列就是把多个合约的历史价格完全没有经过任何调整、首尾相连地直接放在一起的结果,所选的全部数据都来自曾经的主力合约,每次在当前的合约到期后立即接上最近一个即将到期的合约。在很多期货行情软件中默认使用这种方法来创建完整的历史数据时间序列,比如在路透终端(Reuters)上输入“c1”就会得到按照这种方式创建的“历史行情”。即使没有那些醒目的圆圈,我们也可以轻而易举地在图2-5中直接找到每次滚动展仓发生的时间。这些展仓时出现的价格缺口似乎没有任何规律可循,由于缺口的产生根本不是由当时的市场原因造成的,所以基于这种数据模拟出的结果也自然毫无价值。
图2-5 未经调整的糙米期货时间序列数据
而与图2-5相比,图2-6中的价格曲线看上去就比较正常了。我们注意到在图2-6中无法找到合约展期的痕迹,而那些不真实的价格缺口也消失了。如果看得更仔细一些,我们还会发现两个时间序列中最终的价格虽然是一致的,但在图上x轴最左端的初始价格出现了较大的变化。此外,未经调整的时间序列上的价格最高点为17.3美分,但调整后的价格最高点显示为18美分。经调整后的曲线上任一时点的价格都有可能发生变化——调整后的价格有可能高于调整前的价格,也可能低于调整前的价格,这个差别的大小和正负要取决于该时间点之前所有展期点的价差之和。
图2-6 正确调整后的糙米期货时间序列数据
之所以前后两条时间序列曲线上所有的历史价格会出现差异,是因为我们采用了向前复权的调整方法。在经过向前复权调整的价格图上,时间序列最右端的当前价格是不变的,而之前所有已经到期合约的历史成交价格都需要相应地调整。向前复权的过程中将会关闭过去所有由于展期造成的价格缺口,也就是说,在每次展期的时点都要根据当时出现缺口的大小和方向,向上或向下平移之前所有合约的历史价格,最终才形成了调整后的新时间序列数据。
另外还有几种其他的方法能够实现时间序列的调整,大多数行情软件上都有一些可供选择的方式,但无论采用哪种方式,总体上都不会导致太大的差异。我个人更喜欢根据持仓量选取流动性最好的合约作为主力合约,然后将它们的历史价格整合到同一个时间序列当中,而且在每个展期时点我都会让旧合约的收盘价与新合约的收盘价保持一致,这样一个经过向前复权调整的时间序列不但包含了该期货有史以来的全部价格数据,而且能够保留所有出现过的真实价格缺口。如果比较1985年6月的真实玉米价格与调整后的时间序列上的价格,我们可能会发现两者相差甚远,这是由于从那时候到现在已经出现过不知道多少次因合约展期而引发的价格调整。但无论如何,经过这样的调整之后,真实的价格趋势被完整地保留下来,而且时间序列上的最新价格与市场的当前价格是一致的。
其他调整的方法会涉及诸如采取两个合约的加权平均价格、向后复权以及利用成交量和(或)持仓量选取流动性最好的主力合约等手段。虽然长线策略并不应过于关注这些具体的细节,但是如果我们想多了解一些也并无坏处。如果需要更全面地了解展仓的方法,请参考杰克·施瓦格(Jack Schwager)在1995年出版的《期货交易技术分析》(Schwager on Futures:Technical Analysis)[5]。
[1] 国内期货市场称之为主力合约,以下将沿用这个约定俗成的名称。——译者注
[2] 同一个标的物不同月份的期货合约之间的价格差。——译者注
[3] 在19世纪的伦敦,如果股票的买家希望推迟股票的交收,就需要向卖家支付一笔费用(contango,可能源自continuation、continue或contingent);相反,如果卖家希望推迟交收就向买家支付一笔费用(backwardation,源自backward)。如果到期未完成股票的交收,这笔费用会被相应的交易对手没收。但自从1958年股票期权被广泛使用起,这种交易方式渐渐消失了。——译者注
[4] 软商品是指如咖啡、可可、白糖和水果等可以生长的商品,相对于可以被开采的白银、黄金、铜等被称为硬商品。——译者注
[5] 该书中文版已由清华大学出版社出版,马龙龙等译。——译者注