背景介绍
目前回测中报单模式可分为普通限价下单、拆单限价下单(TWAP及VWAP)及智能优化下单(只限定报单量,由算法自动根据当前市场状态优化报单价格),普通限价下单主要用于普通的策略回测,拆单限价下单更多用于策略扩大规模时的容量测试,智能优化下单更多地是与策略本身解耦,单独进行测试,并在实盘中选择是否使用。实际交易中,我们看到的总是当前时间切片之前的盘口行情,以该盘口显示的对手价报单很可能因为网络延迟等原因导致无法成交(但部分情况也可能导致产生正滑点),如何用历史数据设计出更为契合实盘的成交方式便是交易模块需要解决的核心问题之一,其中,历史数据可分为Tick数据,分钟数据及日线数据三大类,对不同类型的数据在回测时的成交情况需分别讨论。
1、Tick数据成交
普通限价下单与拆单限价下单都是以限价单进行报单,指定所需的报单数量(拆单限价下单会将原始单拆为几个子单分别处理,每个子单都是一个普通限价单),并在一定时间后撤单,在该时间段内需判断出成交的数量,由于商品期货的主流行情为一档行情,因此目前仅讨论一档行情的情况,存在两类通用算法:
1.1、直接以盘口量累计成交
考虑延迟的情况,从下一个Tick开始算起,以买单为例,若接下来的卖一价小于等于报单买价,则将不同卖一价上最大盘口量进行累计,按照一定比例计入成交,当卖一价大于报单买价后将重启累积算法,并保留之前累积值,最终将累积值序列相加则得到总累积可成交量,下面,就用具体案例来说明此类算法:
时间 | 买1价 | 买1量 | 卖1价 | 卖1量 |
---|---|---|---|---|
2016-08-01 09:30:03 | 9.19 | 91 | 9.20 | 126 |
2016-08-01 09:30:06 | 9.19 | 75 | 9.20 | 114 |
2016-08-01 09:30:09 | 9.19 | 65 | 9.20 | 167 |
2016-08-01 09:30:12 | 9.18 | 23 | 9.19 | 68 |
2016-08-01 09:30:15 | 9.19 | 56 | 9.20 | 106 |
2016-08-01 09:30:18 | 9.20 | 69 | 9.21 | 48 |
2016-08-01 09:30:21 | 9.19 | 59 | 9.20 | 80 |
2016-08-01 09:30:24 | 9.19 | 23 | 9.20 | 151 |
假定买入信号触发在2016-08-01 09:30:03,限定以买入价为9.20,挂单时长为6个Tick,则根据上述算法,可成交累积数量=(167+68)+80=315手,其中168与68都是满足限价并且盘口量最大的值,80则是价格上涨突破9.20后又下跌至限价范围后出现的累积可成交量,并按一定比例计入实际可成交数量(如假定比例为0.25,则实际可成交数量约为79手)。
1.2、直接以成交量累计成交
以两个Tick之间产生的成交量按照一定比例计入累积成交量,该比例由两个Tick盘口的最高价及最低价确定,若是买单则计算出除最低价外满足限价的价格数量占最高最低价之间总数量的比例作为该比例,反之则计算除最高价外满足限价的价格数量占最高最低价之间总数量的比例作为该比例,仍以9.20买入的报单为例进行说明:
时间 | 累计成交量 | 买1价 | 买1量 | 卖1价 | 卖1量 |
---|---|---|---|---|---|
2016-08-01 09:47:21 | 18656 | 9.19 | 79 | 9.20 | 61 |
2016-08-01 09:47:24 | 18931 | 9.16 | 47 | 9.18 | 105 |
a)上述两个Tick间的最高最低价分别为9.20与9.16,价格数量为9.16,9.17,9.18,9.19,9.20共五个,排除9.17最低价,剩余四个价格均小于等于买入限价9.20,故比例=4/5=0.8,将(18931-18656)*0.8=220手计入累积可成交量;
时间 | 累计成交量 | 买1价 | 买1量 | 卖1价 | 卖1量 |
---|---|---|---|---|---|
2016-08-01 09:49:12 | 21245 | 9.19 | 51 | 9.20 | 35 |
2016-08-01 09:49:15 | 21363 | 9.19 | 64 | 9.20 | 88 |
b)一般的,若盘口不变,则该比例为0.5,即将成交量的一半计入累积可成交量。
2、分钟数据成交
分钟数据的限价单报单方式与Tick数据类似,成交量估算方法类似Tick数据的算法二,以下一分钟起每分钟的最高最低价作为价格范围,以价格最小变动单位为基准将该范围拆分为N段,计算满足限价的价格在该范围中的比例,将该分钟的成交量乘以该比例的0.5(之所以还要乘0.5是由于成交通常发生在ASK和BID上,而我们仅会在对手价方向上成交,不会参与排队)计入累积可成交量,最后再以一定的比例将其转化为实际可成交量。
3、日线数据成交
日线数据通常不会成为成交判别的数据轴,若存在日线策略需要以开盘价或收盘价进场的情况,则需转化为分钟数据,若希望在整日以均匀的成交进场,可近似以成交额除以成交量计算出当日均价,上浮N个最小变动单位作为成交价格,以当日成交量的一定比例作为可成交量,从而近似估算出成交情况。
网友评论