登陆/注册
当前位置: 主页 > 红移视点 >

VWAP算法模型解析

时间:2012-06-25 12:21

TAG 标签:

——摩尔方德视野:对冲基金,在全球资本市场中已经几度风云涤荡,其独立的对冲交易模式,为资本市场的多元化注入了多种活力。在中国式对冲基金雏形期,外围的历史提供了一个相对清晰的借鉴

 

算法交易(Algorithmic Trading或者Algo Trading)又被称作自动交易(Automated Trading)、系统交易(Systematic Trading)、黑匣交易(Black-box Trading)、机器人交易(Robot Trading),是使用计算机程序按照事先开发好的数学模型确定订单的一种交易方式。这种交易方式属于执行模型的范畴。
 

在量化交易系统中,Alpha模型负责生成动态权重,然后交给组合优化模型生成原始订单,再交给执行模型进行执行。这些原始订单可能是很大额的。
 

Alpha模型的目的是盈利,但它并不知道当前投资组合的具体情况。它所生成的动态权重仅是一个目标百分比而已。组合优化模型掌控投资组合的所有信息,并按照风控部门的要求进行风控管理。一个投资组合可能涉及多个Alpha模型;当一个模型要求买入,而另一个恰好要求卖出相同的股票时,组合优化模型可以自行划账中和指令。


执行模型会根据市场冲击模型和当前市场情况以最优方式,寻找最优的路径,以最有利的大小和价格,把大额原始订单分成小额子订单,在最有利的时机逐步送到市场上,以降低市场冲击、提高执行效率并增强订单的隐秘性。

 
虽然有些执行模型带有Alpha因子,但是一般而言执行模型的目的不是盈利,而是降低交易成本。


在高频交易系统中,Alpha模型、组合优化模型和执行模型“合三而一”,成为一个很难分割的统一整体。


交易量加权平均价格Volume Weighted Average Price (VWAP)以及交易时间加权平均价格Time Weighted Average Price (TWAP)是当今量化交易系统中最常用的一类执行模型。此类算法模型的核心是VWAP算法,而TWAP则是作为VWAP的简化版出现的。VWAP算法不需要市场冲击模型,属于第一代算法交易。


美国的券商常常为对冲基金客户提供直接市场通道(Direct Market Access或者DMA),也就是通过网络API进入券商的系统,并直接以券商的名义向市场下订单。作为DMA系统的一部分,大部分美国券商免费提供VWAP等算法模型。中国国内的券商尚需在这方面迎头赶上。

本文讲解VWAP算法和TWAP算法模型的用途,以及它们是如何确定子单的大小、时机和价格的。本文的例子取自常见的期货,但模型也同样适用于股票和其它证券。

 

1.   VWAP 算法

 

交易量加权平均价格Volume Weighted Average Price (VWAP)是量化交易系统中常用的一个基准(benchmark)。作为一个基准量,VWAP就是一个计算公式,它的定义就是某一确定时段中的总交易金额除以相应的总交易量。作为一个执行策略,VWAP模型的目的就是使得在指定时间段所执行的订单的VWAP值低于或者等于市场上相应时间段的VWAP值。

 
要做到这一点,VWAP模型必须把母单分割成为许多小的子单,并在一个指定的时间段内逐步送出去。这样做的效果就是降低了大单对市场的冲击,改善了执行效果;同时增加了大单的隐秘性。显然,VWAP模型的核心就是如何在市场情况千变万化的情况下,有的放矢地确定子单的大小、价格和发送时间。

VWAP模型做到这一点的关键是使用历史数据和实时市场数据。较为高级的VWAP模型要使用交易所单簿(Order Book)的详细信息,这要求系统能够得到即时的第二级市场数据(Level II Market Data)。这种第二级市场数据在欧美市场非常普遍,但在亚洲市场、即便是香港市场都不容易拿到。笔者对国内A股市场不太了解,但我很怀疑这种数据是否能够轻易拿到,或者是否存在。没有这种数据,就无法谈论市场的微观结构;没有市场的微观结构,所有的执行模型都会不同程度上缩水。

对每一个期货合约都需要一年的历史数据,用以构建平均交易量剖面。模型会使用这个剖面在确定的时间段内生成目标日程。目标日程决定了子单何时发送、大小和价格。所有的子单(最后一个可能除外)都应当是限价单。


VWAP模型对于在几个小时内执行大单的效果最好。在交易量大的市场中,VWAP效果比在流动性差的市场中要好。因为交易量剖面代表了一个典型的交易日,因此模型在“非典型”交易日效果会不那么好;在市场出现重要事件的时候往往效果不那么好。如果订单非常大,譬如超过市场日交易量的1%的话,即便VWAP可以在相当大的程度上改善市场冲击,但市场冲击仍然会以积累的方式改变市场,最终使得模型的效果差于预期。


因为VWAP的基准不是盈利,而是一个VWAP函数,因此市场的逆向移动对最后平均成交价格的影响不在模型的考虑范围之内。

 

用户可以下面方式送进母单:

·市价单:  所有的子单都将是限价单,但价格将建立在市场情况和模型的主动性值的基础上。

·限价单:  所有的子单都将是限价单,但子单的价格必须好于母单限定的价格。


一个设计得好的VWAP模型应该提供一些额外的可调参量,譬如:

·交易量上限:  这个参量可以限制每个子单可以执行的数量占母单数量的百分比。

 

2.   时间参量

因为VWAP模型是在某一个时间段内工作的,因此必须事先给定时间段的起始点和结束点。


在美国股市,交易时段从美国东部时间 9:30 到16:00,而期货的交易根据种类通常分成几个时段,造成逻辑的复杂性。中国香港股市分成数个时段,内地股市和期货市场也类似。从理论上讲应该允许同一VWAP订单涵盖上午时段和下午时段。


时间参量可以完全放入历史交易量剖面中。

 

3.   历史交易量数据剖面


VWAP模型使用历史上平均交易日中的历史交易量数据剖面(Volume Profile)来决定子单的频率、大小和价格。模型假设未来交易日中的成交量非常接近历史上的平均值。这意味着如果某个交易日有某个事件造成股票成交量相对于历史平均值有较大变化的时候,模型的效果会打折扣。

历史数据剖面来自于一段时间(如一年)内某期货的日内成交量。譬如CH0是纽约商品交易所的原油期货,最后交易日为2010年3月12日。在此之前有一个First Notice Date,为2010年2月26日,意义是通知投资人期货快要到期了。
 

模型采取的数据应该截止到这个First Notice Date为止,因为在此日期后面的交易量会大幅度下降,统计涨落攀升,使用这种数据会影响模型效果。


下图是大连商品交易所的玉米期货ACU0,设定的最后交易日是2010年9月14日。中国国内的商品期货虽也有First Notice Date,但这个日期和最后交易日相同,因此没有意义。此时需要设定一个截止日期,譬如可能是到期日前一个星期,以避免采用无效或者低效数据。
 

原油期货每隔3个月到期一次,因此每隔三个月就需要把时间段向前移动三个月,以便适应新加入的期货产品。如果大连的玉米期货每个月到期一次,那么就应该每一个月作一次这样的维护。


历史数据剖面实际上代表一个历史上的典型交易日内交易量的分布函数,而期货不断到期时,系统会不断采用新的数据,典型交易日的定义就不断得到更新。所有的原油期货都可以采用同一个历史数据剖面。


在采集数据时,应当首先删除或者修补坏数据点,这叫做清洗数据。当数据洗干净后,把数据按交易日分开,每个交易日内还要按照5分钟交易时段(或者10分钟、15分钟等)分开。在每个5分钟内,计算交易量的总值,除以全交易日的总量,得到这个交易时段内交易量占全交易日交易量的百分比。然后把所有的交易日内对应的5分钟时段取平均,从而得到一个典型交易日内以5分钟为分辨率的交易量平均分布图。这就是交易量的历史数据剖面。


一个值得推荐的改进是把Block Trade数据排除在外。所谓Block Trade是指较大的成交单。在美国股市一个成交单超过1万股的话就是Block Trade。一个债券单超过20万美元,也属于Block Trade。Block Trade扭曲了市场真正的成交量分布。


下面是芝加哥商品交易所的玉米期货在过去半年中的交易量剖面。横轴上的每一个点代表一个15分钟时间段;纵轴代表某时间段的交易量占当天交易量的百分比。

 

4.   模型的行为

本小节描述模型如何在交易量剖面确定之后,根据剖面提供的历史数据、实时市场情况、母单的实施情况决定确定子单的大小、发送时刻以及价格。

4.1. 接受新订单

下面是一个典型的新订单。订单在10:30生效,在13:00停止,订单大小是500单位. 订单内容应该包括如下内容

·开始时间

·结束时间

·大小

·方向(买或者卖)

·证券代码

·价格(如果是限价订单)

·客户订单号

·可选参量:交易量上限

 
交易量上限可以在模型所计算的基础上,进一步限制子订单的大小。


4.2. 创建目标日程

这个目标日程就是模型在母单生命周期内试图达标的基准。用简单的语言讲,目标日程就是成交量剖面在指定时间段内,按照母单时段进行的切割和局部放大。

首先按照母单制定的时间段,把剖面内对应的时段切割下来,然后重新归一化,使得切割下来的剖面曲线下面的面积重新为1。曲线上任何一点代表那个时间点模型应该已经执行过的订单数量的百分比。

4.3. 发送子单

当到了启动时间之后,模型进入就绪状态,并开始根据目标日程和市场情况计算子单的定时、价格和大小。

在任何一个时刻,市场上不应当有多于一个的子单。如果模型执行速度超过日程要求,那么市场上可能没有子单。如果市场情况使得子单无法执行,模型执行到某一个时刻会发现这一点,并取消子单,重新发出新的子单。

因为计算机需要每隔一段时间就检查某个母单的执行情况,因此需要引入时间格点的概念。

时间格点的位置和大小


当发送子单时,模型会不断察看目标日程上未来的日程安排。那么未来是指当时时刻多久之后呢?这就取决于时间格点的确定。每个时间格点是模型检查日程执行情况,计算和发送子单的时刻。

时间格点的大小不是固定的,而是动态决定的。但格点大小应该有一个缺省值。真实值应当是基于这个缺省值和主动性指标值的一个函数。当主动性指标增高的时候,时间格点变小、变密。换言之,在每一个时间格点,模型会调整随后所有的时间格点的位置和其他属性。

譬如在2:15时,模型实际执行过的订单数量为65%,而日程认为在此时间格点上应已执行过67.5%。这样不难判断应该发送一个子单,大小为母单大小的2.5%。如果母单大小是一千个期货合约,那就意味着子单需要执行25个合约,才能满足日程要求。


如果日程显示模型执行情况落后,那么主动性指标会升高,从而使时间格点变小,执行速度就相应增快,以弥补落后的部分。


交易状态

下面需要确定主动性指标。主动性指标是一个随时间变化而变化的量。主动性指标提高意味着模型会变得更加主动,执行速度会加快。

主动性指标较低的话,模型处于被动状态,发出的子单是被动单,也就是位于买卖差价中线己方一侧,被动地等待市场执行。这样的执行价格一定好于买卖中线价格,执行效果较好。

主动性指标过高会造成模型直接越过买卖差价中线,瞄准单簿上相反方向的限价单进行执行。这样的执行价格一定差于买卖中线价格,执行效果较差。因此过高主动性指标会保证日程的完成,但是会造成执行效果降低。


因此如何合理确定主动性指标的值就意味着在执行日程和执行效果之间做出选择,这也就是VWAP算法的关键。


主动性指标的变化程破浪状。在模型启动之初,指标值为零;然后逐步升高,直到第一个子单被执行完毕。此时指标下降。然后重复着一过程。

模型如果是激活状态的,那么它在任何一个时刻都处在下面三种状态中的某一种上。主动性指标一旦上升至越过某一个事先确定的阈值,或者下降至越过某阈值,就会导致模型从一个状态跃迁到另一个状态。


·观望状态:  当模型执行速度等于或者超过日程时,模型处于此状态。在此状态上的模型不会送出子单。

·被动状态:  当模型仅仅稍微落后于日程时,模型会送出被动单,放在市场己方一侧被动地等待市场的执行。


·主动状态: 当模型执行速度远远落后于日程时,模型会进入主动状态。处于主动状态的模型会送出一定会立刻被执行的限价单,这样做的时候必须清楚了解市场的单簿,直接命中单簿上对方一侧一些订单。模型有可能从被动状态因为子单已经送出但是无法执行进入主动状态,此后需要取消已在市场上的被动限价单,然后送出主动限价单,以弥补日程上落后的部分。


子单大小


子单大小是根据交易状态决定的。子单的大小是根据目标进度和实际执行进度、单簿的即时状况(单簿平均大小)确定的。在计算的时候,建议放入一个小的随机数,以便更彻底地将算法隐秘化。随即变量的大小一般在计算好的量的百分之十左右。

 
单簿平均大小一般是在市场给出过去100个tick过程中或者过去15分钟过程中(哪一个更短就取那一个),将单簿前三层的总订单数量取平均值。

对被动子单,子单大小是下一个时间格点上日程规定的成交量减掉目前已经执行的量,再加上一个随机变量。对美国股票而言,这样得到的数值需要是100的整数,而100称为Lot大小。在不同的交易所Lot大小有所不同,在香港交易所,不同股票Lot的大小有可能不同。


对主动子单,子单大小首先按照被动订单的计算方式计算,然后限定到单簿前三层的总量上。

 
子单价格

 
对于被动单来说,买单放在单簿买单一侧第一层,卖单则放在卖单一侧第一层。如果母单是限价单,那么子单的价格应该好于或者等于母单规定的价格。

对于主动子单来说,应当从单簿对方一侧的第一层开始,进而到第二层、第三层为止,以IOC的方式下单。


IOC要求交易所全部或者部分执行此限价单,如有剩余,则把剩余部分取消掉。

 
子单的执行

当一个子单被执行完毕,或者所在时间格点过期时,模型应当重新计算此时之后的所有时间格点。模型不断重新计算并执行子单,直到整个母单被执行完毕,或者超出母单规定的时限为止。在任何时刻,最多只能有一个子单在市场上。如果子单被拒,或被市场取消、部分取消,模型会重新发送新的子单。


4.4. 第一个子单和最后一个子单的微调

根据笔者的体验,由于客户经常在等待模型启动时变得不耐烦,因此笔者建议把第一个子单启动的时间提前,作为人性化改良的一个尝试。

 
同时,因为VWAP模型失败常常是因为最后一个子单不能按照日程完成。因此笔者建议将最后一个子单稍微提前,并设定成为主动型限价单,甚至可以在时间落后于日程的情况下,把最后一个子单设置成为市价单。


因为最后一个订单非常主动,因此应该有适当的检查措施,或者限制其大小,以保证这不是一个错误的决定。如果一个VWAP订单全程失败,最后以市价单方式一次执行,那将是不可原谅的错误。


这两个微小的改动对主观效果的影响并不小。

 
5.   取消和更换

 
在母单被全部执行完毕之前,用户可以取消或者更换母单。

取消母单导致模型取消子单并中止执行。如果母单刚好全部执行完毕,则需拒绝取消

 
如果母单已经执行的部分超出新母单的更换要求,则需要拒绝更换。如果允许,则模型接受更换、暂停执行,并在已经已经执行部分的基础上重新生成模型参量,并重新启动。

 

6.   TWAP 模型


交易时间加权平均价格The Time Weighted Average Price (TWAP) 模型是把一个母单的数量平均地分配到一个交易时段上。TWAP不考虑交易量的因素。TWAP的基准是交易时段的平均价格,它试图付出比此时段内平均买卖差价小的代价执行一个大订单。

 

从模型的角度来讲,TWAP的工作方式和VWAP非常相像,但有一点非常不同,那就是TWAP的交易量剖面是一个常量,或者说是一条直线。换言之,只要把VWAP模型里的交易量剖面换成一个常数就可以等价于一个TWAP模型。譬如上图就是芝加哥商品交易所的玉米TWAP剖面。


本文所给出的VWAP算法可以通过进一步的调整给出更好的结果。譬如在即时价格劣于VWAP价格的时候延缓执行速度,在即时价格优于VWAP价格时加快速度。此加速度的大小可以通过计算Tick比率决定。


7.   跨日交易

 
本文着重讨论了一个交易日内的VWAP算法,经过修改实际上本算法也可以用于数个交易日的连续交易。唯一需要仔细考虑的就是目标日程的生成需要考虑连续几天的交易量剖面,以及星期一到星期五的周期性变化。

CSI300指数期货的交易量在每个星期不同天里稍有不同,呈现周期性变化。下图显示了从星期一到星期五交易量的周期性变化。数据取自Bloomberg,为2010年4月19日到2010年12月31日之间的。

特别是在跨越星期五和星期一交易时,需要考虑到这一个周期性变化,适当提高星期一的交易量百分比。

一旦目标日程确定了,系统不会觉得多天交易与一天内交易有何不同。闭市期间的交易量剖面为零,实际保证了系统可以自动识别开市和闭市。

------分隔线----------------------------