有一个读者付费咨询了一个问题:
请问在请求实时交易数据后,是否可以持续实时地获得“特定周期”的K线呢?比如发起请求指令后,每五分钟更新一次5min的k线值?
目前,IB不提供简单的持续获取特定周期的K线数据(5秒钟K线除外,可以直接调用IBApi.EWrapper.realtimeBar进行实现),其他周期的数据需要自己合成或者定时调用。
方法一:定时调用K线
这是相对简单,也是比较low的一种方式,计算具体的时间,每隔5分钟调用一下最新的历史的K线数据,这样做,实现起来比较简单,但是也有一些需要注意的问题,比如本地时间和服务器时间的差距,程序运行的速度,获取数据的速度等问题。
对于中长期的交易策略来看,使用这种方法造成的影响应该微乎其微。2017年我在okcoin上写数字货币的策略就是用的定时调用K线数据,计算具体的指标,然后交易的方式实现的。现在看起来确实挺简单的。
方法二:订阅5秒钟K线去合成具体周期的K线
由于IB上订阅的5秒钟K线是实时推送的,每隔5秒钟来一次,这样可以把过去5分钟的5秒钟K线数据合成一个5分钟的K线数据进行使用。
需要额外注意合成K线的时间节点怎么处理,比如在10:00:00的时候,最近的一个5秒钟K线还没有收到,该如何处理?
结合实际的运行,采用合理的方法。
方法三:订阅tick数据合成具体的K线
这种方法和订阅5秒钟K线合成更大周期的K线具有类似之处,但是实际运行起来,更加的精确一些,时间误差可能只差一个250ms这样的间隔。用5秒钟K线,理论上可能会差5秒。但是要考虑到IB对于数据调用的限制,以及相关数据的价格。
方法四:使用别的数据源
听说一些在IB上做程序化交易的投资者并不使用IB自己的数据,而是使用别的数据厂商生产的数据。如果别的数据厂商价格便宜,数据质量好,而且能够提供5分钟K线数据的订阅,那就很好啦,省的自己去写一些方法去实现了。
推荐先找一找有没有其他合适的数据厂商,然后尝试使用tick数据或者5秒钟数据合成具体的K线。