陆续写了几篇关于极星量化的文章,但似乎并没有写清楚如何入门。这里就写一篇全备一点的入门教程,帮大家零基础入门,顺便就是记录点心得。
整个内容分为三个部分:
1、下载安装和简介
2、简单的界面操作
3、常用函数介绍
注:极星量化是基于python的,好歹会点编程才玩的转,不过现用现学也不是不可以。
二、 下载安装和简介
1、下载安装
官网下载链接:http://www.epolestar.info/download?ver=q
需要注意的是要下载的是“极智量化”,而不是极星9.5。
从结构上来说,目前的极智量化是极星9.5+极智量化,因为量化的运行还需要9.5客户端的支持才行,所以安装极智量化的同时就自动安装了9.5客户端。
下载完成后启动安装包就自动安装了,安装路径没得选。
2、程序结构
打开安装目录可以看到主要包含三个文件夹,其中
epolestar:极星9.5的程序目录
equant:量化的目录
Miniconda:python的环境管理
注1:因为使用了miniconda来管理极智量化的python运行环境,所以你不需要额外的去安装python或管理运行环境,不过若你需要使用python的扩展包就要使用miniconda的pip来安装,路径在:
“.\Miniconda\Scripts\pip.exe”
3、简介
1. 极星9.5量化是开源的,所有代码都在equant目录下的src目录,有机会可以再写个源码解析。
2. 极智量化目前是基于9.5的,但不清楚取行情和做交易是否是借用的9.5的通道,还是他自己就能独立做了。反正以后肯定是要独立运作的。
3. 与市面上其他主流量化平台相比,极智量化有三个优点:
1)结合极星9.5,这样在使用量化时可以同步绘制K线图,还可以自定义一些标记、指标线在K线上做分析
2)基于python,这样可扩展性其实很强,很多强大的量化包可以直接使用
3)规定好了代码结构,这个好处是不需要自己去写回调和触发,常用的功能函数(取行、画K线、发委托等)都封装好了,门槛一下又降低许多
其实其他量化平台也都有上述三个特点,但最多只占一两个,三个全齐的目前就只有极智量化。
三、简单的界面操作
1、启动
安装好后,双击“极智量化1.1.0”启动,这时候启动的其实是极星9.5,然后在上方的功能栏中点击“量化>极星量化”启动量化平台。
启动量化后,极星9.5的界面自动跳转到“程序化1”页面。
这里的程序化1、程序化2、程序化3就是策略运行时的K线展示,默认就是显示的“基准合约”,至于啥是基准合约后面再说。
在极星9.5的程序化页面中你可以右键鼠标选取当前运行的策略来做K线的切换,因为你可以同时运行多个策略嘛,那显示哪一个策略的K线是可以选的。
2、极智量化窗口介绍
整个窗口的布局还是比较常规的,右侧的函数介绍和函数检索功能很实用,里面的介绍也很详细。策略文件中有一些示例教程,可以先按个看一遍熟悉下常用的函数。
下方的策略管理可以右键运行的策略进行“启动、停止、删除”操作,另外还有“投资报告、图表展示、属性设置”,因为我没咋用这三个功能就不详细说了。
需要额外说明的是“消息日志”和“报错信息”。
1. 运行日志>用户日志
这里显示的就是LogInfo函数输出的信息了,这个完全由用户自己掌控。
2. 运行日志>信号日志
这里显示的是python运行过程中输出的信息,比如有一个list为空,但你做了个取值的操作list[1],这样的error在python层面,他不会主动报错到“错误信息”里提示你。所以有时候发现运行异常,但没有主动报错信息,可以到这里看看是不是运行过程中有些操作不合法。
3. 运行日志>系统日志
这里显示的是量化平台自己的日志信息,比如现在启动了量化它会有个日志记录,取到了行情会有个记录,取不到也会有记录。比如你合约代码写错了,就是在这个地方提示你“取不到合约”的数据或者“提交合约时发生异常”。所以如果代码运行异常又没有明显的提示,可以到这里看看是不是哪些参数设置错了。
4. 错误信息
这里就是代码中有语法错误,运行不起来会在这里给出提示,而且代码不会继续执行。
综上,除了错误信息外,策略运行过程中还需要关注“信号日志”和“系统日志”,由于量化是一个运行框架(按既定节奏运行固定代码),所以很多内部错误无法抛出来提示。
3、运行一个策略试试
我们运行一个简单的示例策略“AvrHighLow.py”,内容是输出K线最大值和最小值的平均值。
打开策略文件后,点击右上角的“运行”按钮。
此时会先弹出一个“属性”设置窗口,啥也不用管直接点“确定”即可。然后你就会发现界面自动切换到了9.5的“程序化1”页面,但是是空白的啥也没有,然后也没有报错信息。
这时候就需要到运行日志里去看了,你会发现在系统日志中有error信息,原来是合约设置错误,"DCE|F|I|1909"这个合约早就过期了,现在系统里没有这个合约编号,自然是取不到数据的。
我们修改合约编号为“DCE|F|I|2001",再运行下就能看到K线了,并且用户日志中会输出平均值。
四、常用函数介绍
1、触发函数
量化一般包含四个过程:初始化、历史数据处理、即时数据处理、策略结束处理。极智量化使用了四个预设的触发函数来实现这四个过程,分别是:
def initialize(context):
初始化函数,初始化数值、参数或者订阅行情就在这里做
def handle_data(context):
数据处理函数,处理K线数据就是在这里做的,一般是来一个K线数据就触发一次这个函数
def hisover_callback(context):
历史数据结束时触发的函数
def exit_callback(context):
策略结束时触发的函数,手动关闭策略时会触发
2、初始化initialize
一般初始化中就只做行情订阅并设置触发方式,
SetBarInterval 行情订阅
SetTriggerType 触发方式,这里设置的是handle_data的触发方式
需要注意的是,点击运行后弹出的“属性设置”窗口,其实里面的内容与初始化差不多,如果你在初始化里做了设置,就不要在“属性设置”中做重复的设置,系统会使两个设置都生效,比如你在initialize设置了“K线触发”,在“属性设置”窗口又设置了“即时行情触发”,系统会使两个设置都生效,最后的结果是K线和即时行情都会触发handle_data。同理行情订阅也是一个道理。
3、数据处理handle_data
极智量化的数据处理逻辑是这样的,如果你订阅了历史行情,那就先触发历史的数据,接着触发最新的数据。比如订阅了2000根历史K线,同时触发方式为K线触发。那么handle_data这里会先收到2000个历史K线数据,而且这些数据是一个接一个来的,也就是handle_data会先被触发2000次,你可以通过Open、Close等函数获取历史K线的数据。然后每当你订阅的行情有新的K线生成,就会触发一次handle_data,通过Open、Close获取的数据就会包含了最新的K线数据。
4、回测结束处理hisover_callback
如果你订阅了历史数据,那么历史数据会先触发handle_data,当历史数据获取完毕会触发一次hisover_callback函数。所以我一般是这样做,订阅行情时订阅2000个历史K线,但触发设置这里我改为“即时行情触发”。那么历史K线不会触发handle_data,当历史K线获取完毕后在hisover_callback中处理历史数据。
5、策略结束处理exit_callback
手动停止策略时触发,一般用于保存数据什么的。
6、其他常用函数
Open,获取K线上bar的开盘价,返回的是一个数组,最新价可以通过Open[-1]获取
Close,K线上bar的收盘价,与Open类似
HisData,一次性获取所有历史数据,如果在hisover_callback中就是你订阅的历史数据,如果在handle_data中就是订阅的历史数据和已经收到的K线数据
PlotNumeric,在K线上输出一个数值,其实这个可以画指标线,输出的数值连起来就是一个指标线了
PlotBar,绘制一个bar
A_SendOrder,发送一个委托单
DeleteAllOrders,批量撤单
A_OrderStatus,查询委托的状态
7、如何得到合约的编码
比如“DCE|F|I|2001"
DCE是交易所编码
F表明是期货
I是品种编码
2001是合约编码
可以自己拼,如果不知道怎么拼,可以在“属性设置>合约设置>增加>商品代码”中找到所有合约的编码。
8、订阅多个行情的问题
前面的示例就只订阅了一个行情,那如果订阅了两个会发生什么呢?
1)首先9.5的“程序化1”页面只会显示基准合约,也就是你订阅的第一个合约K线。
2)其次像Open、Close这些函数如果不指明合约编号就默认使用“基准合约”。
3)如果你订阅了历史行情,那么不是第一个合约先取完再取第二个,也不是轮流获取,而是随机获取。即一会来几个A合约的K线,一会来几个B合约的K线,随机的。所以对于多行情订阅的情况最好在hisover_callback里处理历史数据。
4)对于实时阶段,两个合约的任何一个行情发生变化都会触发handle_data函数。
5)如果在代码里设置行情就不要在属性设置里再设置了。
五、总结
本文总结了这段时间操作极星9.5量化的一点心得,量化平台里自带的示例教程可以先看看,然后我写了一个画K线的教程和简单止盈的策略,有注释可以参考看下。
自定义套利的K线绘制
https://www.cnblogs.com/cation/p/12181835.html
滚动止盈策略
https://www.cnblogs.com/cation/p/12185279.html
联系客服