在上一篇文章中介绍了一个‘如何利用vn.py记录指数行情?’的思路,本文将介绍‘如何用vn.py动态选择某一品种的主力合约’。感谢‘图扬量化’在「维恩的派」论坛内的分享!
主力合约
所谓主力合约指的是成交量最大的合约。因为它是市场上最活跃的合约,所有投机者基本上都在参与这个合约。也有说法是主力合约是持仓量最大的合约,因为通常来讲,持仓量最大的合约也是成交量最大的合约。
交易逻辑
如果策略是根据各品种加权指数来进行多空决策,再通过跟踪指数的方式来进行实际交易,这里就存在一个按持仓量比例映射交易合约头寸的问题,大多数情况下,一个品种的主力合约及次主力合约会占据绝大部分持仓权重,所以我们一般关心主力和次主力合约就够了。
设计思路
1. 在每次软件启动时,从交易服务器一次性获取所有期货合约信息(CtpGateway类的onRspQryInstrument 处理该查询),并推送至dataEngine,在dataEngine的processContractEvent方法中,将其存储于一个字典当中(保存到文件以便每次重启软件可用,仅当合约有变化时,如最近月合约到期,最远月合约生效,该字典才会被更新); 2. 从该字典中可获取所关注品种的当前所有有效合约,全部订阅; 3. 在dataEngine中的updateTick(处理订阅合约的tick推送的方法)中,将同品种所有合约的tick推送保存于另一个字典中,并在此时实时按照持仓量从大到小排序,这样按顺序取对应的合约就是主力、次主力等等了。如需显示于GUI,将其tick信息推送至上层就ok了。
备注
效果展示
(可进入论坛查看更清晰的效果图。)
基于python的开源交易平台开发框架。截止目前,vn.py项目在Github上的Star已经达到5563,量化交易类开源项目第1,量化类项目第3(1、2依旧分别是Zipline和TuShare)。
项目官网:http://www.vnpy.org
论坛地址:www.vnpie.com
知乎专栏:https://zhuanlan.zhihu.com/vn-py
Developed by Traders,
for Traders