史上最详细的VNpy入门教程,从图文安装教程到手搓策略一步到位
前几天发了一篇《想做量化?强烈推荐这8款顶级开源项目,干货拉满!》文章,结果好多人跑过来让写一篇关于VNpy的教程,作为最宠粉的花姐必须安排!😎
本教程是VNpy4.0最新版本的教程
VNpy到底是个啥?
简单点说,VNpy 就是中国量化圈里“量化交易框架界的天花板”之一。
它开源、全套中文文档、支持股票、期货、期权,还能搞高频、CTA、事件驱动、甚至量化投研模型——关键!最强的是它可以和券商打通,做到真正的交易,而不是纸上谈兵!
如何安装VNpy
VNpy官方很贴心,已经给出了详细的安装教程可以参考以下链接:
https://www.vnpy.com/docs/cn/index.html
不过说句实话,安装文档坑很多,估计是老早以前写的一直没更新。
这里强调几个比较关键的点:
以下教程适用于Windows电脑,Linux和Mac仅供参考(因为花姐用的就是Windows)
1. Python环境
这里就要吐槽几句了,官方建议一定要用Python 3.10 64位环境(注意必须是64位版本)
花姐就按照官方建议被坑了,装了半天,各种捣鼓,也没搞定。后来用了官方的一键安装包,发现官方用的是Python3.13.2版本。于是我回过头来用Python3.13.2的虚拟环境重新通过源码方式安装了下,分分钟搞定!!!
2. 安装方式
官方给了2种安装方式
✅ 路线1:懒人安装包——用官方打包的安装器(推荐)
VNpy团队直接提供了一整套打包好的安装程序,下载完了动动鼠标就搞定,一套带界面、带策略编辑器、带回测引擎的全家桶,图形界面都有了,你再不会,那真不是技术的问题……
✅ 路线2:手动打造——源码安装
这里花姐会多说几句,下载源码时记得从Gitee下载,GitHub国内经常访问不了。当然有条件的还是从GitHub下载最好
老手可以直接:
git clone https://github.com/vnpy/vnpy.git
cd vnpy
新手推荐下载好源码然后解压,进入到vnpy目录然后执行以下操作。
在安装时最好创建个Python的虚拟环境,不然我怕VNpy安装好了,你的其它程序反而挂了
激活你的Python虚拟环境,然后运行
install.bat
这部分可以忽略 begin
如果你是用的官方推荐Python 3.10等了一会以后,相信99%的朋友会遇到这个错误,这是ta-lib没有安装成功。
如果你电脑上已经安装了C++编译环境是不会出现这个错误的。一种方法是安装C++编译环境,直接上网搜索下教程很多花姐就不写了。第二种方法是直接下载ta_lib-0.6.3-cp310-cp310-win_amd64.whl
这个编译好的ta-lib,然后通过
pip install ta_lib-0.6.3-cp310-cp310-win_amd64.whl
来安装,安装ta-lib以后,接下来继续执行install.bat
就可以了
不知道怎么安装ta-lib的可以参考花姐的这篇文章
《史上最强量化工具库 Ta-Lib 从入门到精通,一篇文章就够了》
这部分可以忽略 end
接下来找到 ***vnpyexamplesveighna_trader
执行python run.py
会打开这个页面,但是一般会报错 ModuleNotFoundError: No module named 'vnpy_ctp'
直接通过pip install 对应的module name
即可
如果你是Python3.10到这里安装 vnpy_ctp
估计大多数也会报错,主要原因还是电脑里没有安装c++编译器,所以想自己折腾的C++编译环境一定要装好。Python3.13.2不会出现这些问题。
要想执行python run.py
先安装以下模块:
pip install vnpy_ctp vnpy_ctastrategy vnpy_ctabacktester vnpy_datamanager importlib_metadata vnpy_sqlite
运行成功以后如下图
这里给出一份VNpy需要安装的其它模块,可以根据需要自行安装:
vnpy_rest
vnpy_websocket
vnpy_ctp
vnpy_ctptest
vnpy_xtp
vnpy_tts
vnpy_rohon
vnpy_mini
vnpy_sopt
vnpy_uft
vnpy_esunny
vnpy_comstar
vnpy_ib
vnpy_tap
vnpy_da
vnpy_femas
vnpy_ost
vnpy_tora
vnpy_hft
vnpy_sec
vnpy_hts
vnpy_ctastrategy
vnpy_ctabacktester
vnpy_riskmanager
vnpy_datamanager
vnpy_webtrader
vnpy_spreadtrading
vnpy_datarecorder
vnpy_chartwizard
vnpy_optionmaster
vnpy_algotrading
vnpy_scripttrader
vnpy_portfoliomanager
vnpy_portfoliostrategy
vnpy_paperaccount
vnpy_excelrtd
vnpy_rpcservice
vnpy_sqlite
vnpy_mysql
vnpy_postgresql
vnpy_mongodb
vnpy_influxdb
vnpy_dolphindb
vnpy_leveldb
vnpy_rqdata
vnpy_tushare
vnpy_tqsdk
vnpy_udata
vnpy_tinysoft
vnpy_ifind
vnpy_wind
自己安装真的很麻烦,会劝退很多人,VNpy本身学习路线就比较陡峭,所以:
推荐还是直接安装官方提供的一键安装包最省心。
写个策略走遍流程
接下来带大家走一遍如何自己写一个双均线策略的流程,估计大部分人会选择官方出的一键安装包,所以以下教程均基于一键安装包来完成。
顺便说一句,一键安装包本质上是官方把python环境和需要用到的大部分包给你打包起来了,就不需要我们
pip install
了,有点像Anaconda,会给你的环境默认安装许多有用的包。本质上就是一个装了Vnpy包的python环境。
双均线大家都很熟,这里就不赘述了。
1. 运行环境
在电脑桌面找到VeighNa Station
双击运行
第一次打开需要登录,有帐号的直接登录,没有的注册一个
2. 配置行情数据源
这里以tushare为例,官方安装包里没有默认安装对应获取tushare数据的包,需要安装下
如果你把官方安装包的python已经配置到环境变量了,那么直接运行
pip install vnpy-tushare
有时候你不想改系统设置,又想短时间用一下,你可以临时加个环境变量用:
set PATH=C:你的Python路径;%PATH%
# 比如我的vnpy安装到了H:programvnpy 就执行
set PATH=H:programvnpy;%PATH%
# 然后执行
pip install vnpy-tushare
vnpy-tushare安装好以后,在VeighNa Station找到交易按钮然后点击,然后勾选CtaBacktester,修改运行目录,比如:H:huajie_pythonvnpy_demo
,最后点击启动即可
在打开的页面点击配置
红框中的datafeed.name
和datafeed.username
按照花姐填的来填,datafeed.password
改成你在tushare平台里的token,配置好重启下软件就可以了
3. 写个策略
我们在运行目录(比如H:huajie_pythonvnpy_demo
)新建一个strategies文件夹,然后把自己写的策略放进去就可以被VeighNa Station读到了
进入到CTA回测页面
点击重载策略
就可以在交易策略下拉框看到我们刚刚写的策略了
这是官方给的双均线策略示例代码,可以在这个基础上修改
from vnpy_ctastrategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)
class ADemo(CtaTemplate):
""""""
author = "官方"
fast_window = 10
slow_window = 20
fast_ma0 = 0.0
fast_ma1 = 0.0
slow_ma0 = 0.0
slow_ma1 = 0.0
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma0", "fast_ma1", "slow_ma0", "slow_ma1"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.bg = BarGenerator(self.on_bar)
self.am = ArrayManager()
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(10)
def on_start(self):
"""
Callback when strategy is started.
"""
self.write_log("策略启动")
self.put_event()
def on_stop(self):
"""
Callback when strategy is stopped.
"""
self.write_log("策略停止")
self.put_event()
def on_tick(self, tick: TickData):
"""
Callback of new tick data update.
"""
self.bg.update_tick(tick)
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
self.cancel_all()
am = self.am
am.update_bar(bar)
if not am.inited:
return
fast_ma = am.sma(self.fast_window, array=True)
self.fast_ma0 = fast_ma[-1]
self.fast_ma1 = fast_ma[-2]
slow_ma = am.sma(self.slow_window, array=True)
self.slow_ma0 = slow_ma[-1]
self.slow_ma1 = slow_ma[-2]
cross_over = self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1
cross_below = self.fast_ma0 < self.slow_ma0 and self.fast_ma1 > self.slow_ma1
if cross_over:
if self.pos == 0:
self.buy(bar.close_price, 1)
elif self.pos < 0:
self.cover(bar.close_price, 1)
self.buy(bar.close_price, 1)
elif cross_below:
if self.pos == 0:
self.short(bar.close_price, 1)
elif self.pos > 0:
self.sell(bar.close_price, 1)
self.short(bar.close_price, 1)
self.put_event()
def on_order(self, order: OrderData):
"""
Callback of new order data update.
"""
pass
def on_trade(self, trade: TradeData):
"""
Callback of new trade data update.
"""
self.put_event()
def on_stop_order(self, stop_order: StopOrder):
"""
Callback of stop order update.
"""
pass
4. 回测
点击回测,然后把这些参数配置下
在这里插入图片描述
很快回测结果就出来了
从安装到实现你的一个vnpy策略花姐已经带大家走通了。如果喜欢记得点个推荐。
暂无评论内容