【从零开始vnpy量化投资】七. 接入第三方数据源与定时下载数据

【从零开始vnpy量化投资】七. 接入第三方数据源与定时下载数据

概述

上一节课我们讲解了如何将vnpy的数据库切换为mysql,以方便将数据与软件隔离。这节课我们将以天勤tqsdk为例介绍如何将外部服务商的数据存入mysql最终为vnpy所用。

为什么需要接入第三方数据

不同的数据服务商在数据质量、时效性、费用、接口易用性上差别可能很大,我们需要深入了解各家数据API之间的区别,以及自身策略的需求,最终选择适合自己的数据源。
以笔者为例,由于我使用的策略强烈依赖每日早盘的开盘价,所以我需要在任何时候都能获取准确的开盘价格。这里不得不讲一下vnpy的k线合成机制。vnpy仅在load(N)的时候通过datafeed或数据库查询已有的数据,随后所有实盘运行中产生的k线都由交易所行情服务器推送的tick数据合成而来。这样会导致一个问题,如果数据库中未存储截止当前时刻的k线数据,则必须要使vnpy在9点前启动完毕并接收到交易所的第一条tick,才有可能获得当天的开盘价。一旦vnpy服务在盘中因各种原因重启,此时将遗失当日已经获取到的数据,除非在启动前将当日已产生的数据全部存入数据库中。
另外,想要确保9点前启动完毕并接收第一个tick有时也会出现问题,vnpy的init和start方法都通过多线程异步处理,且完成时间依赖策略自身运行速度,所以为了保证启动start时策略已加载完毕,中间的主线程等待时间一般会配置的较长。笔者曾多次遇到启动后未订阅到合约数据的情况,也就是在开盘后没有收到数据,此时只有立刻重启才可以恢复服务,此时无论是否重启,都已经错过了第一条tick数据。tick数据本身也不是真实的全量数据,仅是交易所所有时刻中某一个时刻的交易切片,也就是为什么我们经常发现自己接受的tick合成出来

猜你喜欢

转载自blog.csdn.net/u011687355/article/details/130259731