如果你想起测试交易策略,可能第一件需要的事情就是历史数据。的确,你可以不需要测试,直接上线实盘交易,但是这对我们来说听上去这非常非常危险!比如当年的骑士资本就是不小心把自己的内部测试做市系统的程序发布了出去,不停发送买、卖单去cross,以至于出现了巨大的亏损
或许你会对自己说“这不是很难啊 – 就是拿到数据然后把数据加入数据库中。” 我们也希望这件事情如此简单!
Ricequant上面有洗刷了10年的中国A股和美股20年+的历史数据,我们倾向于认为我们是股票历史数据处理的专家!空口无凭,所以,如何可以得到准确的历史数据呢?
最基本的核心部分,当然是 价格。你使用的价格多久更新?每日?每小时?每分钟?Ricequant是每日的历史数据,马上上线每分钟的历史数据。你的数据的价格中是否有空缺?你可能并不需要每一个tick的交易数据,但是你缺失越多的数据意味着你的数据源更需要被质疑
你的数据是否具备生存偏差?如果你仔细分析今天的股票交易,你会发现他们全部打包起来的收益表现会比你所看到、阅读到的全市场收益表现要好很多。原因比较简单:如果你只分析今天交易的股票,你剔除掉了所有失败的公司!你不能仅仅分析幸存者,你需要分析所有都被交易的。
当你使用你处理的数据的时候,你还会惦记着节假日吗?你还会惦记着某些股票被停牌交易吗?
复杂的分红机制:事实上分红有至少四个日期需要考虑进来,好的数据是分红包含着这四个日期并且在回测引擎中使用到来调整仓位的,也是我们的做法
- 方案实施公布日:这一天你可以知道分红将会在以后的某个日子里被派发,如果你的策略想监控着这样的事件,可以提前布局买入。
- 股权登记日:在股权登记日这一天收盘时仍持有或买进该公司的股票的投资者可以享有此次股息分红。如果你错过了,就没有分红了噢!
- 除权除息日:股权登记日的下一个交易日即是除权除息日,该日证券交易所会计算出股票的除权除息价,以作为投资者在除权除息日开盘的参考。从这一天开始股价会做变动
- 股息到帐日 :现金股息划拨到投资者资金账户的日期。OK,现在你终于拿到分红现金了,可以用于再投资了!
接着会有更加烦恼和复杂的事情:股票拆分,逆向分割,并购等事件。如果一个股票发生了拆分,那么股票价格和交易量都会变化很大。当公司合并的时候,一个股票代码停止了交易,然而他们的价值合并了。每年会发生各种这些事件,如果你忽略掉他们,你的策略和算法将会发生一些乱七八糟的现象。
下面是一个苹果股票出现拆分的现象,而红色曲线是我们做了前拆分处理以后的数据,但是把分红一并加入前拆分复权计算是不合理的,不代表在任何时候享受到分红,分红需要考虑到买入和卖出时机。那么价格就平滑了,只有这样才能让量化策略顺利回测并得到正确的收益和风险计算。
我们参考了大量的一系列paper得出的最佳回测量化策略计算方式。
然后让我们看下国内的一些其他软件的神奇的前复权价格为负现象:
这个在Ricequant是经过大量的数据校验后从未发现的情况。
Ricequant非常努力地为他的用户移除掉数据方面的复杂度。当你使用Ricequant的回测引擎的时候,所有的这些难题都在我们的云端后台默默地运行着。当我们的回测引擎使用前复权价格的时候,意味着拆分等事件都已经调整进去价格以及交易量,也意味着你可以忽略掉这些事件对策略的影响,他们都被自动调整到各种数据中。
我们热爱开源软件,也应用着硅谷最流行的jenkins自动化运行和管理着数据处理工作,让计算机每天定时、准确无误地处理各种事件对价格和交易量的预先处理和洗刷,一旦出问题立刻会自动发邮件通知我们第一时间处理。
我们曾经做过一系列测试,把我们系统处理的美股数据(分红数据只有Nasdaq是最准的,为此我们专门写了爬虫去Nasdaq每天爬分红和拆分数据)进行回测,使用同样的算法,所有数据结果和Quantopian几乎一模一样。
我们非常努力地想提供给我们用户简单、准确的工具让他们摆脱这些不必要的烦恼,更加专注在自己的思路上开发最让人惊叹的策略和研究!
Ricequant 量化策略社区 429907369 有想交流的 大家可以加这个群,注明自己身份,我们共同进步~~
~~