将量化投资进行到底
提供专业的量化投资解决方案

AlgoPlus量化投资开源框架入门手册(4)合成K线的要点

2019年10月24日提示:这里给出来的只是订阅一个合约合成K线数据的简单例子。订阅多合约时,不适宜在OnRtnDepthMarketData方法中设计耗时计算。最好的作法是用to_dict_raw()方法将pDepthMarketData转为字典并放入队列中,然后在Join方法的轮询中将数据从队列中取出再进行数据分析。

应用AlgoPlus接收行情

源代码:

说明:

1、使用前需要先配置\AlgoPlus\exemplification\account_info.py相关参数。前面已有介绍,不再赘述。请注意订阅列表中的合约是否仍为主力,否则需要将其更改为当前主力。

2、关于MdApi工作原理请参考《CTP期货量化交易API工作流程概述》。

3、第25行的tick_engine是TickEngine类(继承自AlgPlus的MdApi类)的实例。AlgoPlus已经对MdApi工作流程进行了封装。各位老爷们需要做的只是当OnRtnDepthMarketData收到行情时对其处理、分发、保存的工作。

以CSV格式保存行情数据

在上一个例子的基础上,首先需要导入csv库和ApiStruct模块的DepthMarketDataField结构体:

然后对TickEngine改造:

说明:

1、用open创建文件对象时可选择不同的打开模式。

2、一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。

3、pDepthMarketData是一个ctypes结构体实例,可以直接通过字段名取值。to_dict()方法可以将其转为字典。

合成K线数据:

源代码:

说明:

1、当收到新交易日行情时通过86-90行重新初始化,避免开盘前收到的历史数据对第一根K线造成影响。

2、开盘之后启动该程序,初始值会造成第一根K线数据错误。

3、集合竞价Tick算在第一根K线内。

4、将65-70行任意一个条件赋值给72行的is_new_bar,就可以合成对应时间周期的K线。同样适用于非固定时间周期K线。

5、因为有些Tick只是盘口数据发生变化,并没有成交发生,所以98-137行是对该情况的处理,避免重复累加。

6、关于合成K线可深入研究的课题还很多,例如交易时间周期、不定周期、量能周期等等。欢迎大家分享自己的研究成果。

参考

open

https://docs.python.org/zh-cn/3.7/library/functions.html#open

csv

https://docs.python.org/zh-cn/3/library/csv.html

赞(1) 打赏
未经允许不得转载:CTP量化投资技术研究 - AlgoPlus量化投资开源框架 - 将交易进行到底 » AlgoPlus量化投资开源框架入门手册(4)合成K线的要点
分享到: (0)

评论 抢沙发

评论前必须登录!

 

知者不惑,仁者不忧,勇者不惧

你的认可是我们最大的动力!

微信扫一扫打赏