高频交易数据如何产生和处理?

证监会主席易会满出席第60届世界交易所联合会(WFE)会员大会时表示:在成熟市场,量化交易、高频交易比较普遍,在增强市场流动性、提升定价效率的同时,也容易引发交易趋同、波动加剧、有违市场公平等问题 。
万物均有一体两面 。高频交易作为当前常见的交易策略,需要较强的技术手段和较大的资金投入,同时也面临着监管制度趋严的现状 。伴随着高频量化交易的快速发展,非凸科技致力于为量化机构提供适应新时代科技发展、符合国内实际情况的高频量化交易系统 。
Tips:敲黑板:高频交易、低延时交易、程序化交易、算法交易,有什么不同?
高频交易:是一种高速度、高频次的交易方式,通过预设的计算机算法实现,具有低隔夜持仓、高报撤单频率、高换手率等特点 。操作上体现了以下几种显著特征:
1.使用高速和复杂的计算机程序来生成、传递、执行命令;
2.直连交易所的数据通道;
3.设立和清算头寸的时限很短;
4.大量发送和取消委托订单;
5.收盘时不留头寸 。
低延时交易:要求整个交易链条上的所有环节,都尽量缩短时间间隔 。对低延迟交易技术的掌握程度也是专业机构与普通投资者的差距所在 。
区别:高频交易不等同于低延时交易,有些策略每天需要产生大量的交易,如篮子交易,换仓交易等,并不靠速度取胜,不靠低延时盈利 。而有些策略需要低延时,通过监控市场变化发现交易机会立即执行,但每天交易机会非常少,交易频次很低,也不属于高频范畴 。
程序化交易:通过既定程序或特定软件,自动生成或执行交易指令的交易行为 。
区别:高频交易的特点要求交易必然由机器程序化完成,因为人工下单的速度无法实现这些高频策略,但程序化交易不只适用于高频策略,低频策略同样可以使用程序化实现 。
算法交易:交易员在二级市场交易时采用的一种自动化交易方式,专注于订单的执行过程,根据数学模型,统计数据等多方面的信息,通过预先设计好的算法进行下单 。
区别:算法交易并非一种赚钱的策略,而是在大额交易,篮子交易,回购交易等不同应用场景下,优化订单的执行过程,隐藏交易意图,减少冲击成本 。
对于传统的人工交易来说,由于操作速度掣肘,交易的频率在10分钟以上,常见的分钟级k线或是日线等就足够作为判断交易的依据 。随着通信和计算机技术的发展,量化交易可达到的交易频率远远超过从前,而对于高频量化交易,其交易速度可达到微秒甚至纳秒级 。
像所有的数学模型一样,数据是测试、应用模型的基础 。高频量化交易也离不开高频的市场数据 。本文首先介绍订单簿以及价格产生的机理,之后介绍交易所数据的特征,最后介绍实际生产中怎么对数据做预处理 。
1. 订单簿和价格的产生
一件商品的价格是由供需双方决定的 。价格高也好、低也好,只要双方互相认可,这个价格就是合理的 。在二级市场上也有买卖的双方,投资标的的价格就是双方成交的价格 。在商场或者菜市上,买家可以货比三家寻求最优 。在证券、期货的市场上不能这么随意,为了规范交易行为,订单簿(order book)产生了 。
订单簿是交易所记录多空订单的电子系统,订单簿上记录了当前所有交易委托的报价和数量,行情软件上面的盘口深度就是订单簿在某一时刻的显示 。图1是某股票某一时间的盘口深度,买盘按价格从高到低、卖盘按价格从低到高分为若干档,买一价和卖一价分别为10.88、10.89元 。当有订单成交时,成交价格就会成为当下的最新市场价格 。价格是由成交的订单决定的,而订单如何成交则由订单簿的撮合机制决定,各个交易所的撮合机制和算法都有所不同 。通常而言撮合服从价格优先、时间优先的规则,即同样交易方向是按照价格排队,同样交易价格是按照时间排队 。
图1. 某股票盘口深度 。纵轴表示价格,横轴表示订单量 。
2. 交易所数据:Tick到Bar
订单簿中每有一笔交易成交,价格就会发生变化,因此在市场上,价格的变化是不间断发生的 。原则上交易所应该实时地返回最新行情,其中包括最新的买盘卖盘以及成交情况,这就是所谓的Tick数据 。理想的Tick数据要像流水一样保存所有交易信息,对于我国市场,证券交易所用3秒的最小周期返回行情数据和订单数据,以大约一百毫秒的周期返回成交数据,这些截面数据即level-2行情 。
最为人熟知的k线是由level-1行情生成的,k线通常以OHLC四价的形式作图,线上的一个点也被称作一个Bar 。打开行情软件、财经网站,上面提供的价格都是k线 。通常分时k线图中最小的时间窗口是5分钟,如果一直盯盘,可以看到价格在当前5分钟内持续变化,这些变化即Tick数据的变化 。直到5分钟窗口的最后一刻,价格固定,k线进入下一个5分钟 。
从Tick到Bar数据,就是以低频对高频数据重采样 。选择需要的k线时间窗口,将交易期间的Tick数据按照给定的窗口分组,计算得到每个窗口中的开盘价、最高价、最低价、收盘价,这样就得到Bar数据,完成了level-2到level-1行情数据的转换,如图2所示 。不同策略的交易频率不同,根据策略的特性,可以将高频的Tick数据转换成不同频率的Bar数据使用 。
图2. 某股票行情数据片段 。A图为3秒周期的Tick数据,B图为重新聚合得到的分钟级Bar数据(颜色含义与国内市场相反) 。
3. 高频数据的预处理
从交易所返回的数据是需要处理的 。对于一些流动性较差的股票,行情更新的时间要到6秒或更长,原始数据在时间上不是等间距排列的 。非等间距的时间序列在数学上是个难题,目前主流仍是等间距时间序列的处理 。因此,股票数据预处理主要是在时间上以3秒对齐行情数据 。
Tick行情数据通常包含的字段有时间戳、股票代码、最近成交价以及10档买卖量价 。原始数据中有可能出现不同行的数据有相同的时间戳,这一般发生在集合竞价期间 。首先要对重复时间戳的数据进行去重,由于行情数据是截面数据,因此去重只需要保留最后出现的数据即可 。
成交数据的字段有时间戳、股票代码、成交价、成交量、换手率、买卖方向等 。成交数据的更新时间在百毫秒的水平,时间戳的间隔很不规律,且时间戳重复的数据众多 。处理成交数据时,要根据买卖方向对买单、卖单分组,分组后把时间戳转换到最近的3秒标准时间上,再将时间戳相同的数据累加 。
只考虑连续竞价期间的行情,3秒的采样周期下,每日应有4800个数据点 。实际上重聚合后的数据点只会少于4800个,需要补全 。数据补全的过程中要仔细处理缺失值 。数据中有两类,一类是存量性数据,比如盘口深度和价格,当数据缺失时只需要取过去最近的值填补就好;一类是瞬时性数据,比如当下成交量等,数据缺失意味着当下没有成交,对缺失值补0即可 。
4. 数据中的细节处理
数据的预处理主要就是去重、重采样、填补缺失值 。在实际工作中,有些细节需要仔细考虑,以免影响后续使用 。最重要就是熟悉数据接口的说明 。由于各家数据服务商的接口不同,返回的数据类型也不同,比如时间戳,有的是ISO标准时间,有的则是特定格式的整形数值;还有价格,有的接口直接返回浮点数,有的去掉小数点返回整型 。不同类型的数据有不同的优势,比如时间字段,数值型的时间戳可以提高数据查询和处理速度,在筛选特定时间的行情数据
时,利用python或MATLAB中独有的矩阵查询方法可以快速实现 。如果时间格式是Unix时间,在对时间做运算时也比较简单,因为数值上是连续的 。如果时间格式是以93001的数值表示9:30:01,在对时间就近取整时则要考虑60秒与60分钟进位的情形 。对于