【零基础】极星9.5量化入门一:自定义套利的K线绘制
一、前言:
本人对期货其实不太懂,只是会写一点python,有一些错漏之处还请各位指正。
极星客户端默认自带了很多套利合约,比如JD2001-JD2005,还提供了K线图。对于自定义的套利,比如JD2001-JD2002,就只有闪电图。但是有时候我们又想分析下自定义套利的K线走势,做一些指标分析。利用极星9.5的量化功能可以很方便做到这一点。
二、思路
整个思路简单直接
1、订阅行情:需要哪些合约的行情用SetBarInterval函数先订阅好(量化窗口默认会显示订阅的第一个品种K线)
2、读取各合约的开盘价、最新价、最高价、最低价
3、A合约各种价减去B合约各种价就是套利合约AB的价格
AB套利的开盘价=A开盘价-B开盘价
AB最新价=A最新价-B最新价
AB最高价=A最高价-B最高价
AB最低价=A最低价-B最低价
(注意:这里的最高价和最低价肯定是不对的,这里简化一下而已,因为各项指标是以最新价来算的,所以就先这样吧)
4)绘制K线图,使用PlotBar绘制K线柱,使用PlotStickLine绘制K线上的线段,需要注意开盘价高于最新价表明价格下跌,要用绿色。开盘价低于最新价表明价格上涨,要用红色。不涨不跌我们用蓝色表示(因为没有白色可选)
实际过程中遇到的主要问题是:
1、如果同时订阅了合约A和合约B,bar来的时机是随机的,也就是一会来个A的bar,一会来一个B的bar,所以在handle_data中是无法按一个个bar顺序处理历史K线的
2、所以考虑在hisover_callback中通过HisData函数一次读取所有历史K线数据,这时候又有个问题,那就是触发hisover_callback时历史K线已经接收完毕,直接绘制K先会发现起始位置在基准合约K线的末尾,还好PlotBar函数可以指定起始位置的偏移。
3、一切就绪后发现个更大的问题,那就是AB合约即使各种设置都一致,最后得到的K线数据是不一样的,因为临近交割期有些合约会缺少数据,这时还好发现HisData可以返回历史K线中bar的时间信息,这样通过时间信息就可以把两个合约的数据对齐了。对齐后,只处理两个合约都有数据的情况,某一个没有数据则直接跳过不处理。
三、实操
极星9.5量化版的下载和基本使用就不说了,这里直接开始解析代码,文末附完整代码的下载方式。
1、设置全局参数
通过全局参数的方法我们就可以在代码运行前方便的修改需要处理的合约和一些参数。
2、订阅行情
在初始化函数里通过SetBarInterval()函数订阅行情,其中的M表示K线周期是以“分钟”为单位,具体的还支持“T分笔”、“D日线”。
使用SetTriggerType()函数设置触发方式,这里设置的是K线触发,即每当更新一个K线数据就触发一次handle_data()函数。可选的还有1 即时行情触发;2 交易数据触发;3 间隔固定时间触发;4 指定时刻触发。实际上这个案例里触不触发的不重要,因为我们只处理历史数据。
3)获取并处理数据
这里使用HisData一次获取所有的K线数据,我们将open、close、high、low、time数据分别放到list中
然后对比两个合约K先的time数据,如果time一致就处理,不一致就跳过。这里的方法是遍历A合约的timeList,然后找B合约中是否有对应的时间,有的话找到其索引值i2,通过i2来找到该时间对应的K线数据。
最后根据计算出来的open、close、haigh、low绘制自定义套利合约的K线。需要注意这里需要先计算一个偏移值,与基准合约的K线对齐。其次需要注意除了bar柱还得绘制线段。
最后,我还利用talib包计算了MA5、MA10、BOLL指标并绘制了相应的指标线。最终效果如下:
上方是基准合约的K线,下方就是自定义套利的K线。
完整代码:https://share.weiyun.com/5Dctvp3