量化回测框架设计之数据篇(二)

背景介绍

目前的原始行情数据包含Tick、分钟及日线数据(还有一类是逐笔数据,但由于在目前的数据集中占比极小,故不在此处进行讨论),这类数据通常存在着冗余、缺失及错误等不同类型的数据缺陷,这些问题都会对策略的回测造成直接影响,例如,数据的缺失会导致前后行情数据的价格产生直接的跳空,远超过平均水平的单笔盈利或亏损,这样的异常交易将直接破坏交易参数的筛选,为解决前述问题,需对数据库进行全面的清洗,下面就按照清洗的种类分别进行探讨。

1、数据冗余

数据冗余通常包含两类情况,1)一为数据重复,对于行情数据这样的时间序列数据,数据重复通常意味着时间戳重复(逐笔数据除外),若多条数据完全一致,则保留其中之一即可,但若存在不一致的情况,当成交量不一致时,选择距离前后两个周期的成交量(对于Tick数据为累积成交量)均值的较近但大于0的数据行,若过滤后仍存在多条数据,则以(开盘价+收盘价)/2作为平均价格,保留距离最近的数据行,若只存在价格不一致,则仅判断价格情况;2)二为数据多余,例如股票在09:25:00开盘,但在开盘后可能还会有一些跟开盘数据相同的数据发送过来

时间累积成交量买1价买1量卖1价卖1量
2016-08-08 09:25:0339549.032459.04164
2016-08-08 09:26:0339549.032459.04164
2016-08-08 09:28:0339549.032459.04164
2016-08-08 09:29:0339549.032459.04164
2016-08-08 09:30:0044059.02579.03174

收盘后也可能存在类似情况,此外,在非交易时间,还可能存在一些异常数据的残留,此类数据也需一并清除。

2、数据缺失

1)对于分钟和日线数据,由于每日/每年的交易周期是固定的(例如股票分钟数据每日240个,从早上09:30:00至11:30:00,下午13:00:00至15:00:00),同时,还可校验分钟数据的总成交量之和是否位于日成交量*1.1与日成交量*0.9之内,需要注意的是,系统内部的分钟线的合成采用向后对齐,若存在向前对齐的数据需先进行转化(部分万得数据就存在此类问题,外盘数据也可能有相似问题),对于少量残缺直接用空值进行补全,但对于大量缺失的情况,则需记录在清洗日志中,尝试是否能用外部数据进行补全,若不能应进行相应标记;

2)对于Tick数据,只能基于数据在日内的近似连续性进行估计,若出现远高于平均水平的跳空则在日志里进行预警,由人工来判断是否存在数据缺失。

3)此外,对于分钟和Tick的数据,还需进行按日为单位的校验,判断对应日期是否存在分钟及Tick数据,对于股票,可能因停牌造成整日无数据的情况,但对于期货的主力合约(部分品种的非主力合约可能因为流动性不足导致某日完全无数据),理论上所有交易日都应存在数据。

3、数据错误

1)对于日线数据,校验最高价是否大于最低价,并且开盘收盘价是否在最高最低价之内,同时,次日的最高最低价是否满足涨跌停板条件,此外,所有价格数据都应大于0;

2)对于分钟数据,校验其每分钟的收盘价变化率是否在一定阈值范围内,(最高价-开盘价)/开盘价及(最低价-开盘价)/开盘价的比例是否位于一定阈值范围内,同时,在日线数据完成校验的基础上,还需校验所有价格数据是否位于日线的最高价*1.005与最低价*1.005之内,以及开盘价与收盘价与日线是否足够接近;

3)对于Tick数据,校验其每个Tick的最新价变化率是否在一定阈值范围内(理论上此项在数据缺失中已进行过处理),盘口数据是否满足Bid<Ask且最新价与(Bid+Ask)/2之间的距离足够小,同时,还可校验累积成交量是否连续递增,或是在一长段时间内一直未发生过任何变化。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值