答读者问是免费文章,不计入专栏中。写作本文使用了62分钟,阅读大概3分钟。
有个读者咨询使用backtrader连接IB进行实盘交易的时候需要注意些什么?由于我使用backtrader只连接过oanda做外汇交易,并且也做期货的量化交易,中间碰到过很多问题,就在这里泛泛而谈一下,做实盘交易的时候需要注意的问题。
数据问题
跟回测一样,数据也是基础,如何处理实时的交易数据,对实盘交易有一定的影响。
数据的获取方式
常见的获取数据的方式可以分为两种,一种是请求响应式,请求一次获取一次数据;一种是订阅全推式,订阅了数据之后,会源源不断的传送数据过来。一般情况下,交易所会提供两种模式供大家选择,使用两种模式,都各有利弊吧,国内做期货交易的,使用订阅全推式的比较多。
优点
缺点
举例说明
可以获取全部的数据,可以根据数据合成不同周期的K线
比较适合用于事件驱动的量化交易框架,每次推过来一个数据,量化交易系统就运行一次,而不用再额外进行时间控制
编写策略逻辑,相对而言,更轻松一些
需要额外对数据进行处理,如果全推过来的是tick数据,而我们是要用5分钟的K线进行交易的话,就需要合成5分钟K线。
全推过来的数据,占了更多的内存,导致可能需要运行一段时间就需要重启策略。
交易所推过来的数据,有可能是交易时间之外的无效的数据,需要特别处理。
就不需要过多举例了,市面上常见的量化框架,好多都是这种模式
优点
缺点
举例说明
# 我在16年、17年最开始做比特币量化交易,就是使用的这种方式实现的,看起来比较low,没有技术含量,但是就是特别简单con = Truewhile con: # 判断现在的时间是否是应该计算交易信号的时间 # 如果是,就获取数据,计算交易信号 # 如果产生了开平仓的信号,就下单交易 # 如果下单了,就观察订单有没有成交 # 如果订单成交了,就进入下一步 # 如果订单没有成交,就撤单,重新下单,监控订单是否成交,直到订单全部成交 # 如果没有产生开平仓信号,就忽略,进入上层逻辑 # 如果不是交易时间,忽略,进入上层逻辑 # 每次循环,固定增加一定的时间,比如0.1秒 time.sleep(0.1)# 这就是一个完整的可以实现量化交易的代码,写起来特别简单。
在需要的时候才调用一次数据,可以节省程序运行的内存。
避免交易时间之外的无效数据(有的交易所在交易时间之外,也有一定的数据)。
可以自由控制计算交易信号的时间
编写量化交易的程序可以比较简单,一般会一点语法就可以实现(当然,也可以很复杂的实现)
本地时间与交易所时间不一致问题(可以计算时间差,进行规避)
请求响应式的优缺点
订阅全推式的优缺点
数据的准确性
一般情况下,从交易所直接获取的数据,准确度应该还是蛮高的;如果是从第三方获取的数据,就需要额外注意。最好的情况是,能够对交易数据做一个简单的验证(不能牺牲速度),分析什么情况下,数据出现了异常,比如乌龙指造成的指数的大涨?
数据的及时性
尽可能采用低延迟的方法获取数据,数据是否及时,直接影响着交易速度。
数据的完整性
如果是请求响应式获取的数据,本身就是市场得到一个切片;如果是订阅全推式的获取数据,从交易所推过来的数据,可能在中途发生丢包的概率相对而言就比较大了,数据就有一定的可能不是完整的。
数据问题是实盘交易的时候需要考虑的第一个问题,需要重视,数据出了问题,就像地基没有打好一样,很容易出各种问题。
注:谈一点关于IB交易的问题,我本身没有用这个做过实盘交易,前几年IB的客户端会每24小时断一次(也不知道现在还是不是这样),需要注意这个问题。
以上纯属胡言乱语,仅供参考。
智慧、心灵、财富,总要有一个在路上,愿我们能在人生的道路上,不断成长、不断成熟~~~
感兴趣可以关注我的专栏:
my_quant_study_note:分享一些关于量化投资、量化交易相关的思考
backtrader量化投资回测与交易:本专栏免费,分享backtrader相关的内容。
量化投资神器-backtrader源码解析-从入门到精通:本专栏目前收费299元,预计更新100篇策略(更新中)+36篇backtrader讲解(已完成)+backtrader源码分析。