vnpy怎么创建策略并回测_一步一步学vnpy

本文介绍了如何在VNPy中创建和回测CTA策略。首先,讲解了如何启动VNPy,连接CTP实盘账户,并订阅合约。接着,深入学习了VNPy的策略结构,特别是`DoubleMaStrategy`和`CtaTemplate`。文章详细描述了VNPy数据流的过程,并提供了CTA策略模块的学习路径。通过一个具体的策略案例`strategyBollChannel.py`,引导读者理解策略的编写。此外,还探讨了手动下单功能的实现,以及配置文件、计时器设置和回测过程中的问题与解决方案。最后,展示了如何通过UI控制策略的初始化和启动状态。
摘要由CSDN通过智能技术生成
  • 登录实盘账户

在安装完vnpy1.8.1版本之后,在Pycharm中启动examples/VnTrader/文件夹中的run.py,会出现如下错误:

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

ff46c664713c70e694dc9ccd2ab5146f.png

实盘的这些参数可以咨询开户期货公司,在vnpy的qq群文件里也会有所有brokers信息的压缩包,打开某个期货公司的文件,结构是这样的,照着填就好了。

81c2f5390e2dcad0b51ee6047c4aa42a.png

启动run.py后,在弹出的界面中的左上角,点击 系统--连接CTP,顺利连接

  • 合约订阅

a1a873d615de1f7cde890104496f3ced.png

在“合约代码”位置输入想要交易的合约代码,回车键,则会在界面右侧出现该合约的行情信息,就这么简单。

8a51b9fcd116e61d7d04f58532b81c25.png
  • 策略

策略在vnpy/trader/app/ctaStrategy/strategy 路径下面

f340890c704d6811ab1acf2de9f199ff.png

找到其中一个,认真学习一下结构。你会发现每个策略是一个:类

ae353f100f7d8935f8e6a495f8400b47.png

这个类是怎么被调用的呢?选择这个类名,右键,然后点击 Find Usages

bff3c3bac9ead1bc6ff8facd1e49064f.png

没找到哪个程序引用了,应该有案例,点击主界面的‘功能’按钮,下拉菜单点击‘CTA策略’,弹出对话框,点击‘加载策略’,发现有个策略案例,双均线策略。

69ee26c442771068ea1942a478c57e60.png

不过,用Find Usages还是没找到这个类在哪里被调用。

188ca1bcc20d7b912254dd0a4c75ad0f.png

好像只有“方法”才能反着查到引用,所以“类”是找不到调用的。找不到就先学习一下这个类的具体内容吧!

DoubleMaStrategy继承了CtaTemplate,又得详细学习CtaTemplate类:

44b5431ffe9b4df46e89627eddde2100.png

这个类有600多行,慢慢看吧

69b932206b8fd0c159edb45c395ad2fb.png

从 vtObject import VtBarData,需要熟悉vtObject中的内容,主要是行情数据,成交数据等的数据结构

ee53b7bef8fb9d969f2854c73f22699e.png

在ctaTemplate.py文件中,出现了@property ,Python内置的@property装饰器就是负责把一个方法变成属性调用的

  • 一张图看懂VnTrader的数据流
用Python的交易员:一张图看懂VnTrader的数据流​zhuanlan.zhihu.com
c3ee8b88cec301f050b9bedc9d92fac4.png

要快速上手,还是得先清晰的了解vnpy的结构,详见上面的链接原文,下面搬砖过来:

033c1caab40183d92ca33766e7eb1dfe.png

这里也结合图表,以CTP行情Tick为例, 说明下Python部分的数据流的整体步骤(忽略C++封装部分的)。

主动订阅端

  1. 用户发起调用mainEngine.subscribe函数
  2. mainEngine.subscribe中调用ctpGateway.subscribe函数
  3. ctpGateway.subscribe中调用ctpMdApi.subscrbie函数
  4. ctpMdApi.subscribe中调用C++封装的MdApi.subscribeMarketData函数,将订阅行情的请求最终通过底层C++ CTP API发出

回调推送端

  1. ctaEngine对象向eventEngine中注册EVENT_TICK类型事件的处理函数句柄ctaEngine.processTickEvent
  2. C++ CTP API收到Tick推送,自动回调MdApi.onRtnDepthMarketData函数推送行情数据字典data
  3. MdApi.onRtnDepthMarketData中将data里的数据读取并转化成VtTickData对象,并调用ctpGateway.onTick函数
  4. ctpGateway.onTick函数将VtTickData对象包装成类型为EVENT_TICK的行情事件对象Event,并调用eventEngine.put函数,放入事件引擎的缓冲队列
  5. 事件引擎的工作线程,从缓冲队列中读取出最新的行情事件后,根据EVENT_TICK事件类型去查找缓存在内部字典中的处理函数列表,并将事件对象作为入参,遍历调用到列表中的处理函数ctaEngine.processTickEvent
  6. ctaEngine.processTickEvent中查看Tick的代码vtSymbol,并调用交易该代码合约的策略对象strategy.onTick函数,最终去运行策略中的逻辑
  • CTA策略模块

流程搞清楚后就直接上策略吧,也许能行呢?

用Python的交易员:vn.py发布v1.7.1 - CTA策略模块升级版​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值