证券交易接口数据交换分析

证券交易接口数据交换分析

 

1证券交易接口数据是指行情、订单、成交、参考数据、盘后数据等的证券交易相关信息,它具有产生量大、对实时性传输要求高的特点.为保证交易信息高可用、可审计,以及处理上的方便,诸如卫星行情等的一些证券交易接口往往采用DBF、XML等格式的文件作为数据交换的格式.但这类文件的信息冗余度较高,影响了传输带宽的有效利用率和传输速度.此外,根据不同的传输协议,接口文件往往需要分成分段来进行传输,接收方必须收齐所有分段才能获得所含的记录信息,若有分段丢失则会引起整个文件的重传,这不仅造成了带宽的浪费,也影响了信息交换的速度.尽管可以通过使用ZIP等通用的压缩工具对接口文件进行压缩来解决信息冗余度高的缺陷,但文件分段拼接等待和丢失重传影响传输速度的问题仍然无法解决.   FAST(FIXAdaptedforStreaming,适流FIX)[1]是一种面向消息数据流的二进制编码方法,它是2005年由全球主要交易所和金融企业联盟组织FPL所提出的、针对证券交易业通行的金融信息消息协议FIX[2]的一套压缩和传输方法.   FAST针对FIX消息的格式设计,在将FIX消息流序列化为字节流的过程中利用消息数据间的逻辑关系来对FIX消息所含的数据字段进行编码,可在FIX消息的基础上获得高达70-80%的压缩率.FAST协议对消息的处理开销很小,一般在数个微秒内即可完成对一条消息的编、解码.此外,FAST还具有简单、易实现的优点,其最新的扩展版本[3]FAST1.2于2009年被提出.   为解决前述现有文件类证券交易接口的问题,本文提出基于扩展FAST的文件类证券交易数据高速交换方法-Fast-File.文件类证券交易接口数据一般由相同格式的多行记录构成,FastFile将接口文件中的每行记录映射为一条消息,使用FAST对每条记录所含的字段逐一进行编解码,这样可通过利用记录之间数据的逻辑联系来降低数据冗余度.由于Fast-File的编码粒度是基于一条记录的,因此即便只是收到编码文件的分段,也可对其进行FAST的解码,从而恢复出所含部分的记录,这可使已收到分段的记录能被快速地传输.本文设计并实现了扩展FAST和FastFile方法,通过实验与多种常用的接口文件格式进行了测试比较,并与几种通用的压缩工具进行了压缩率比较.实验结果表明FastFile除按照每行记录为单位进行编解码,可降低重传外,可大大降低现有文件接口的数据大小:比DBF小约70%、比XML小95%.即使与通用的压缩算法相比,FastFile在数据压缩率上也相当接近,如果FastFile叠加使用通用压缩方法则可以达到更高的压缩率.实验结果验证了FastFile方法的可行性与有效性.   2证券交易接口系统及接口数据   证券交易接口系统主要负责通过卫星和地面网络等各种通信介质在电子交易主机,市场参与者、登记结算单位、外部交易所等外部系统,以及监察、行情分发等周边系统之间进行证券交易服务过程中交易相关信息(也即接口数据)的交换.   对于证券交易所这种集中化的交易方式,电子化交易的发生时间集中、数据密集,在每一交易日内交易所往往能产生数十吉字节的大量接口数据.据估计,全球股票和期权市场日均产生的消息量将从2007年的七十多亿条猛增至2010年的一千两百多亿条[4].考虑到这些数据将被进一步分发到成百上千的内部和外部用户,带宽占用的总量十分地庞大.   众所周知,证券交易接口数据的交换与一般信息通信系统的信息交换不同,对速度具有极高的要求.近年来,国际、国内资本市场获得高速发展,资本流动性急剧增大,随之带来与日俱增的交易量、高频交易的大量使用,都使得降低交易延迟的需求凸现出来.事实上,交易指令延迟时间及运行性能的问题已成为各证券交易所目前最大的技术挑战[5].为此,全球交易所纷纷采取措施降低交易延迟.其中,纳斯达克OMX在2009年以250微秒的交易延迟成为世界上最快的交易所.   由于市场发展水平和技术应用环境不同,各交易所采用了不同的接口实现方式,这包括:文件接口、数据库接口、API程序接口、消息协议接口等.典型的证券交易接口包括开放协议FIX、Euronext的MMTP、Xetra的VALUES、纳斯达克的CTCI、NWII、以及QIX等[6].其中,为保证接口数据的高可用、和/或业务过程的可审计,某些证券交易接口数据往往需要以文件的形式"落地"到外存中进行可持久性存储后再进行发送.同时,为处理上的方便,一般采用TXT、DBF、XML等标准格式的文件来进行存储.以我国的上海证券交易所和深圳证券交易所为例,各自公开的数十种市场参与者接口均使用了基于数据库文件的DBF接口.   然而,DBF、XML、文本等文件格式本身没有考虑对于存储空间的节省,如果若按照这类格式来表示数据,信息的冗余度比较高,在传输时这会导致带宽的有效利用率不高,从而造成浪费,这对于我国带宽资源受限且发展欠均衡的证券市场网络技术条件来说尤为不佳.   其次,在证券交易接口数据传输的过程中,由于传输协议的限制,接口文件往往会被分割成多个分段进行传输.譬如在基于UDP传输协议的网络条件下,往往采用64KB大小来分段文件,在因特网上可能按4k、8k等较小的粒度来进行文件分段,而在局域网上则可能以更大的尺寸来进行分段.但是,按照现有的接口文件的数据交换模式,接收方必须要等到收齐所有文件分段之后,才能进行拼装和验证,从而获得所含的记录信息,这首先会引起等待的时间开销.其次,如果在传输中文件分段丢失,则依据具体实现,会引起对丢失分段甚至所有分段的重传,由这种重传所造成的延迟则可能更大,进一步加重了文件分段带来的延迟问题.   对现有方法冗余度高的一种可能的改进方法如图2.该方法借助ZIP、RAR、ARJ等无损的通用压缩工具来进行文件压缩,降低文件接口数据冗余度,但这仍然无法解决由文件分段传输所带来的延迟问题.   3基于扩展FAST的文件接口数据交换方法   FAST是FPL在1995年提出的、针对FIX消息流的一种压缩和传输方法.FIX消息流消息一般由消息头、消息体和消息尾三部分组成,其中每部分由"tag=value"加分隔符的基本字段格式组成,其中消息尾为两个字节的验证码.FAST针对FIX消息,在将FIX消息流序列化为字节流的过程中,通过"字段编码"和"传输编码"的处理来利用消息数据间的逻辑关系,将字段数据编码为二进制字节流,通过这样的处理可以大大降低字段所含数据的冗余度.譬如对于序号类别的字段来说,可以使用"递增"的规律来总结字段数据的逻辑联系,这样就无需在传输每条消息时都对该字段数据内容进行发送.#p#分页标题#e#   又如,对于ASCII文本表示的整数类型字段,FAST会按照整数的二进制表达形式来进行传输的编码,这样可以提高单位数据的有效信息量.   文件类证券交易接口数据具有结构化高、数据规律性强的特点,通常由几十到数百字节的格式相同或相似的多行记录构成.譬如行情接口文件,其所包括的每条记录包含了证券代码、简称、今开盘价、昨收盘价、买/卖五档价格、最新成交价格等几十个字段.FastFile将接口数据文件中的每行记录映射为一条消息,并为格式相同的记录编制FAST模版,这样可以按照处理FIX消息的方式来处理文件中的记录.对证券交易等实时性要求较强的应用,应尽力而为地加快信息的传输速度,即使丢失分段的数据必须重传才能获得,对已收到的记录也需尽快传送.由于FastFile的编码粒度是基于一条记录的,而且类似于FIX,FastFile的发送方在编码时在每条记录的尾部都加上两字节的检验码,因此即便接收方只是收到接口文件的分段,也可对其进行FAST的解码,从而恢复出该分段所含部分的记录信息.此外,为进一步降低分段的信息冗余度,可选地,FastFile引擎中还可以调用通用的压缩方法来对分段进行压缩,也即FastFile-Z方法.FastFile-Z虽然可以获得少许比FastFile高的压缩率,但也带来了时间处理上的开销,具体应用需要根据业务对时间的要求来考虑使用.   在发送一个接口文件时,FastFile引擎首先初始化一个分段缓冲区,其大小如前所述需要根据具体使用的传输协议预先设定,然后在重置FAST字典的状态以后开始对分段的组段处理:FastFile按行从文件中读入记录、添加校验,再按照模版对记录进行编码,编码后的记录追加到分段缓冲区,如果缓冲区已满或超时,则该分段的组段过程结束,输出组好的分段,如果还有未处理记录则循环进行上述组段过程,直到文件结束.接收方的处理与此对应,不作赘述.   4FastFile基于扩展FAST的文件分段编解码为确保FAST编解码的能够正确进行,FastFile的发送方和接收方必须使用相同的模版集合,而且在编解码时必须保证发送方和接收方模版状态的一致,也即,模版所含字典的字段状态和字段前值的一致.模版状态的一致性机制的实现依赖于具体使用的传输协议:如果传输层是可靠的,则可以使用标准的FAST会话协议[7]来实现;如果传输层不可靠,则不论是发送方编码器还是接收方的解码器,在处理一个分段之前模版的状态都需要被重置,以保证FAST连续编解码的正确.   与FAST对FIX消息编解码的情况类似,FastFile在FAST模版中为每个字段定义字段的数据类型、tag号以及字段的逻辑运算符,从而可以利用FAST极佳的压缩能力来降低数据冗余度.   如前所述,FAST的编解码必须借助于一套FAST模版集来进行.其中,一个模版包括了一系列指令(instruction),指令的顺序与流中数据的顺序一致.如下页图6所示,FastFile的扩展FAST编解码引擎借助一个全静态的模版集结构来表示模版集并进行编解码:对该结构的一次遍历对应FAST对一条消息的一次编码处理或解码处理.其中,使用静态指针来串联属于模版中同一层次的指令的节点.   整数类型的字段用int类型来描述,分为带符号整数类型和无符号类型两种,可使用拷贝(copy)、差值(delta)、缺省(default)、常值(constant)等运算符或无运算符来描述字段数据流的逻辑特性,其中无符号整数还可以使用递增(incre-ment)运算符来描述序号类的字段.   字符串类型的字段用string类型来描述,分为ASCII码字符串和Unicode字符串两种,可使用拷贝、差值、缺省、常值、换尾(tail)等运算符.其中差值运算符适合具有相同子串的字段,换尾操作符适合长度固定,一般只有尾部子串发生变化的字段,比如各种格式的时间.值得注意的是,Unicode子串均为UTF-8类型,适合具有多国语言或不同符号集的字段,为便于与其他特殊字符作区别,Unicode字段的编码需要加上一个无符号整数的长度前导.对无法用这两种字符串表示的无格式数据可以使用byteVector类型来描述.   浮点类字段用decimal的字段类型来表示,编码时分别用带符号的两个整数分别来表示浮点数的底数和指数,这样可使得浮点数的表示范围扩展到ISA所支持的最大位数.浮点类型可使用拷贝、差值、缺省、常值等运算符.   在FAST的最初版本中,除字节向量外的上述几种基本数据类型用停止位实体(StopBitEntity)来编码,其最小的编码单位为字节.为达到更高的压缩率,FPL在最新的FAST扩展版本中增加了短整型、枚举、集合、布尔、位元组等数据类型.其中,短整型用来描述那些表示范围占用空间不超过1个字节的字段.枚举和布尔类型都使用占最少比特的无符号整数来编码.位元组用来将这些最大占用空间不超过1字节的数据类型字段填充到同一个SBE中.上述对字段数据类型的增强使得FAST扩展版本可以达到比FAST1.1更优的压缩效果,多个异构字段的数据甚至只需用1个字节就可以全部表示.   5实现及测试结果   基于标准C实现了FAST扩展协议编解码引擎FASTX和FastFile原型,通过实验对FastFile方法以及多种常用接口的数据尺寸做了比较,还比较了几种编码和压缩方案的数据压缩率.   实验1选取2010年6月10日的沪深股市股本信息数据,剔除少量空字段记录后共1791行记录,每行记录对应一种证券,一条记录包含18个字段,具体为{‘代码’,‘名称’,‘今开’,‘最高’,‘最低’,‘最新’,‘涨跌’,‘涨跌幅’,‘成交量’,‘成交金额’,‘换手率’,‘年初至今涨跌幅’,‘5日涨跌幅’,‘每股收益(TTM)’,‘市盈率(TTM)’,‘市净率(MRQ)’,‘所属行业’,‘时间’},加上检验共19个字段.其中,应用类型包括Ascii字符串、浮点数、64位长无符号整数,无符号整数、Unicode字符串,模版中使用了换尾等操作符,但主要使用差值操作符.#p#分页标题#e#   实验结果如图7所示,其中,DBF文件占493K字节,Ex-cel与之基本相当,Ascii文本文件为200K字节,相对较小,最大的XML超过了3M字节.相较之下,数据格式最小的是113K字节的FastFile,每条记录平均仅占63字节.   实验2选取2010年6月11日的沪市A股上市公司概览数据,剔除少量空字段记录后共832行记录,每行记录对应一种证券,记录格式为{‘证券代码’,‘证券简称’,‘总股本’,‘流通A股’,‘大股东持股数量’,‘大股东持股比例’,‘股东户数’,‘机构持股数量合计’,‘月成交量’,‘月成交额’,‘月收盘价’,‘市盈率(PE)’,‘总市值’,‘每股收益EPS’,‘资产总计’},加上检验共16个字段.实验以未压缩的DBF文件为基准,以相同数据按照不同编码+压缩方案处理后的文件大小来计算数据压缩率,结果如上页图8所示.其中,FastFile处理后每条记录平均为75字节.可以看到的是,FastFile除了具备按照每行的记录进行编解码的特性之外,在数据压缩率上也相当接近于通用的无损压缩算法,如果按照FastFile-Z方法对Fast-File编码文件再行压缩,则压缩率上还可有小幅提高.   6结束语   本文提出一种基于扩展FAST的证券交易接口文件的高速交换方法-FastFile.FastFile抽取接口文件中的每行记录并映射为一条消息,再利用扩展FAST对消息进行编码.由于FastFile是以记录为处理粒度的,因此即使接收方只是收到原始数据文件的部分分段,也可从中解析出记录,这有效地解决了原有方法中接收方必须收齐所有文件分段才能解析内容而影响信息传输速度的问题.同时,利用扩展FAST高效的压缩算法,可大大降低接口数据大小.对于集中式的证券交易来说,FastFile不仅可加快信息的交换速度,而且可以大大节省整个分发网络的带宽资源.   我们设计并实现了扩展FAST协议和FastFile方法,通过实验与多种常用接口格式进行了测试比较,并比较了几种编码和压缩方案.实验结果表明FastFile在按记录编解码的特性外,可大大降低接口数据的信息冗余度,在数据压缩率上也相当接近于通用的压缩算法,如果与通用压缩算法叠加使用,则压缩效果更佳.   由于FastFile需要根据数据的规律抽象出FAST模版,因此适于应用于业务数据结构化程度高、规律性强、数字类数据多,以及对传输速度有较高要求、带宽资源较稀缺的应用场合,也可适当修改后用于数据的备份和保存.