- 登录实盘账户
在安装完vnpy1.8.1版本之后,在Pycharm中启动examples/VnTrader/文件夹中的run.py,会出现如下错误:
![89a351abd4485b4a682d6dba2307df6f.png](https://img-blog.csdnimg.cn/img_convert/89a351abd4485b4a682d6dba2307df6f.png)
需要注释掉两处与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,设置相关参数
![88040f3f9dfdbbbda7c2cff704c4eaf3.png](https://img-blog.csdnimg.cn/img_convert/88040f3f9dfdbbbda7c2cff704c4eaf3.png)
![ff46c664713c70e694dc9ccd2ab5146f.png](https://img-blog.csdnimg.cn/img_convert/ff46c664713c70e694dc9ccd2ab5146f.png)
实盘的这些参数可以咨询开户期货公司,在vnpy的qq群文件里也会有所有brokers信息的压缩包,打开某个期货公司的文件,结构是这样的,照着填就好了。
![81c2f5390e2dcad0b51ee6047c4aa42a.png](https://img-blog.csdnimg.cn/img_convert/81c2f5390e2dcad0b51ee6047c4aa42a.png)
启动run.py后,在弹出的界面中的左上角,点击 系统--连接CTP,顺利连接
- 合约订阅
![a1a873d615de1f7cde890104496f3ced.png](https://img-blog.csdnimg.cn/img_convert/a1a873d615de1f7cde890104496f3ced.png)
在“合约代码”位置输入想要交易的合约代码,回车键,则会在界面右侧出现该合约的行情信息,就这么简单。
![8a51b9fcd116e61d7d04f58532b81c25.png](https://img-blog.csdnimg.cn/img_convert/8a51b9fcd116e61d7d04f58532b81c25.png)
- 策略
策略在vnpy/trader/app/ctaStrategy/strategy 路径下面
![f340890c704d6811ab1acf2de9f199ff.png](https://img-blog.csdnimg.cn/img_convert/f340890c704d6811ab1acf2de9f199ff.png)
找到其中一个,认真学习一下结构。你会发现每个策略是一个:类
![ae353f100f7d8935f8e6a495f8400b47.png](https://img-blog.csdnimg.cn/img_convert/ae353f100f7d8935f8e6a495f8400b47.png)
这个类是怎么被调用的呢?选择这个类名,右键,然后点击 Find Usages
![bff3c3bac9ead1bc6ff8facd1e49064f.png](https://img-blog.csdnimg.cn/img_convert/bff3c3bac9ead1bc6ff8facd1e49064f.png)
没找到哪个程序引用了,应该有案例,点击主界面的‘功能’按钮,下拉菜单点击‘CTA策略’,弹出对话框,点击‘加载策略’,发现有个策略案例,双均线策略。
![69ee26c442771068ea1942a478c57e60.png](https://img-blog.csdnimg.cn/img_convert/69ee26c442771068ea1942a478c57e60.png)
不过,用Find Usages还是没找到这个类在哪里被调用。
![188ca1bcc20d7b912254dd0a4c75ad0f.png](https://img-blog.csdnimg.cn/img_convert/188ca1bcc20d7b912254dd0a4c75ad0f.png)
好像只有“方法”才能反着查到引用,所以“类”是找不到调用的。找不到就先学习一下这个类的具体内容吧!
DoubleMaStrategy继承了CtaTemplate,又得详细学习CtaTemplate类:
![44b5431ffe9b4df46e89627eddde2100.png](https://img-blog.csdnimg.cn/img_convert/44b5431ffe9b4df46e89627eddde2100.png)
这个类有600多行,慢慢看吧
![69b932206b8fd0c159edb45c395ad2fb.png](https://img-blog.csdnimg.cn/img_convert/69b932206b8fd0c159edb45c395ad2fb.png)
从 vtObject import VtBarData,需要熟悉vtObject中的内容,主要是行情数据,成交数据等的数据结构
![ee53b7bef8fb9d969f2854c73f22699e.png](https://img-blog.csdnimg.cn/img_convert/ee53b7bef8fb9d969f2854c73f22699e.png)
在ctaTemplate.py文件中,出现了@property ,Python内置的@property装饰器就是负责把一个方法变成属性调用的
- 一张图看懂VnTrader的数据流
![c3ee8b88cec301f050b9bedc9d92fac4.png](https://img-blog.csdnimg.cn/img_convert/c3ee8b88cec301f050b9bedc9d92fac4.png)
要快速上手,还是得先清晰的了解vnpy的结构,详见上面的链接原文,下面搬砖过来:
![033c1caab40183d92ca33766e7eb1dfe.png](https://img-blog.csdnimg.cn/img_convert/033c1caab40183d92ca33766e7eb1dfe.png)
这里也结合图表,以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