- 登录实盘账户
在安装完vnpy1.8.1版本之后,在Pycharm中启动examples/VnTrader/文件夹中的run.py,会出现如下错误:
需要注释掉两处与futuquant相关的代码,
if system == 'Linux': from vnpy.trader.gateway import xtpGateway elif system == 'Windows':
'''
from vnpy.trader.gateway import (femasGateway, xspeedGateway,
futuGateway, secGateway)
''' from vnpy.trader.gateway import (femasGateway, xspeedGateway,
secGateway)
第二处为 if system == 'Windows':
me.addGateway(femasGateway)
me.addGateway(xspeedGateway)
me.addGateway(secGateway)
# me.addGateway(futuGateway)
正常启动,跳出界面。如何连接CTP?进入CTP_connect.json,设置相关参数
实盘的这些参数可以咨询开户期货公司,在vnpy的qq群文件里也会有所有brokers信息的压缩包,打开某个期货公司的文件,结构是这样的,照着填就好了。
启动run.py后,在弹出的界面中的左上角,点击 系统--连接CTP,顺利连接
- 合约订阅
在“合约代码”位置输入想要交易的合约代码,回车键,则会在界面右侧出现该合约的行情信息,就这么简单。
- 策略
策略在vnpy/trader/app/ctaStrategy/strategy 路径下面
找到其中一个,认真学习一下结构。你会发现每个策略是一个:类
这个类是怎么被调用的呢?选择这个类名,右键,然后点击 Find Usages
没找到哪个程序引用了,应该有案例,点击主界面的‘功能’按钮,下拉菜单点击‘CTA策略’,弹出对话框,点击‘加载策略’,发现有个策略案例,双均线策略。
不过,用Find Usages还是没找到这个类在哪里被调用。
好像只有“方法”才能反着查到引用,所以“类”是找不到调用的。找不到就先学习一下这个类的具体内容吧!
DoubleMaStrategy继承了CtaTemplate,又得详细学习CtaTemplate类:
这个类有600多行,慢慢看吧
从 vtObject import VtBarData,需要熟悉vtObject中的内容,主要是行情数据,成交数据等的数据结构
在ctaTemplate.py文件中,出现了@property ,Python内置的@property装饰器就是负责把一个方法变成属性调用的
- 一张图看懂VnTrader的数据流
要快速上手,还是得先清晰的了解vnpy的结构,详见上面的链接原文,下面搬砖过来:
这里也结合图表,以CTP行情Tick为例, 说明下Python部分的数据流的整体步骤(忽略C++封装部分的)。
主动订阅端
- 用户发起调用mainEngine.subscribe函数
- mainEngine.subscribe中调用ctpGateway.subscribe函数
- ctpGateway.subscribe中调用ctpMdApi.subscrbie函数
- ctpMdApi.subscribe中调用C++封装的MdApi.subscribeMarketData函数,将订阅行情的请求最终通过底层C++ CTP API发出
回调推送端
- ctaEngine对象向eventEngine中注册EVENT_TICK类型事件的处理函数句柄ctaEngine.processTickEvent
- C++ CTP API收到Tick推送,自动回调MdApi.onRtnDepthMarketData函数推送行情数据字典data
- MdApi.onRtnDepthMarketData中将data里的数据读取并转化成VtTickData对象,并调用ctpGateway.onTick函数
- ctpGateway.onTick函数将VtTickData对象包装成类型为EVENT_TICK的行情事件对象Event,并调用eventEngine.put函数,放入事件引擎的缓冲队列
- 事件引擎的工作线程,从缓冲队列中读取出最新的行情事件后,根据EVENT_TICK事件类型去查找缓存在内部字典中的处理函数列表,并将事件对象作为入参,遍历调用到列表中的处理函数ctaEngine.processTickEvent
- ctaEngine.processTickEvent中查看Tick的代码vtSymbol,并调用交易该代码合约的策略对象strategy.onTick函数,最终去运行策略中的逻辑
- CTA策略模块
流程搞清楚后就直接上策略吧,也许能行呢?
用Python的交易员:vn.py发布v1.7.1 - CTA策略模块升级版zhuanlan.zhihu.com