【从零开始vnpy量化投资】三. 手动安装vnpy环境

【从零开始vnpy量化投资】三. 手动安装vnpy环境

概述

本章的主要内容是使用conda创建独立的python运行环境,再将vnpy安装到conda的环境中,以便开发时访问和编辑源码以及为后续部署到其他操作系统做准备。

为什么需要重新安装vnpy

在第一课的内容中,我们使用了vnpy官方提供的windows客户端进行安装。安装的方式比较黑箱,几乎不需要任何额外的配置,此方式适合第一次接触vnpy的新人,可以快速对vnpy的功能有一个初步的了解。但当我们着手进行策略开发时,你会发现vnpy客户端并不是一个专业的代码开发工具,它需要链接外部开发工具来进行编辑和运行代码。早期版本的vnpy使用jupyter来编辑代码,新版本的jupyter需要访问本机上安装的vscode。这里笔者推荐大家使用PyCharm来进行开发,pycharm有免费的社区版本,以及专业的个人付费版。如果条件允许,后期建议大家使用专业付费版,因为付费版提供了使用SSH访问外部运行环境的功能,这对我们后期开发可以提供一定的便利。当然社区版也完全可以满足需求,区别是需要在开发机上要安装一个vnpy环境。
重新使用python环境管理工具来安装vnpy的第二个原因,是为了后期实盘做准备。在刚开始进行模拟盘或实盘投资的时候,出于成本和开发便利性的考虑,仅使用一台windows个人电脑即可满足需求。但当系统稳定以后,为了避免个人电脑和家庭环境的故障,我们需要将系统部署到更加稳定的云服务器上。大部分云服务器使用Linux系统,且缺乏图形化操作界面,不适合使用windows客户端方式进行安装。所以我们需要通过纯命令行的方式掌握系统的安装与维护。

正式开始

安装conda

conda是一个python环境管理软件,如果读者在python2时代就开始接触python,那就一定会对python的环境管理有深刻的印象。
在python早期发展的过程中,从python2升级到python3是一个非常令人头疼的问题,从基础语法到各种组件,几乎所有环节都存在不兼容的现象。第三方组件自身不同版本之间也经常互相不兼容,这种现象在vnpy中也存在。大部分原因是软件的发展需要对核心组件进行更高层次的抽象,而早期版本可能尚未达到这种复杂程度。
如果读者有一些python编程经验,或可能正在使用python开发其他软件,此软件依赖的组件版本可能与vnpy版本不一致。这就要求我们将两个软件的开发环境独立部署。如不使用conda,则需要用户自行在电脑上安装两个python编译器,由于使用命令行方式访问python需要涉及环境变量配置等操作,这即使对专业开发者也是一个比较多余的手动维护工作。
conda的出现解决了以上问题,conda可以自行创建新的python环境,只需要使用简单的命令就可以快速切换环境。

下载conda安装包

如果直接使用搜索引擎搜索conda,可能会搜到好几个不同的名字,如anaconda和miniconda。miniconda是conda的基础安装版本,anaconda则同时包含了一些常用的python包的版本,如numpy、pandas等数学和矩阵运算相关的组件。这里我们使用miniconda即可,这样可以确保新安装的环境尽可能简洁,避免自带组件版本与vnpy冲突导致的问题。
下载地址:https://docs.conda.io/en/latest/miniconda.html
vnpy目前使用的python版本为3.7,所以我们下载python37的miniconda即可。这里我们以windows个人电脑为例,Linux版本将在移植云服务器时单独介绍。近期有读者反映官网已无3.7版本的conda下载,经验证更高版本的也不影响,可直接使用最新版本的安装包进行安装。
在这里插入图片描述

windows安装过程比较简单,按照提示操作即可。

在这里插入图片描述

这里使用默认选项即可,这样的话,conda安装powershell来操作conda环境。
在这里插入图片描述

安装完成以后,在windows搜索栏输入anaconda,即可访问conda的powershell
在这里插入图片描述

powershell界面如下
在这里插入图片描述

配置conda镜像源

conda默认的镜像源在国外,下载安装包会非常慢,且容易断线,我们将镜像源配置为国内的清华镜像源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
conda config --set show_channel_urls yes

创建vnpy环境

创建的环境默认会放在conda安装目录的envs对应的名称目录下,以环境名python37、安装目录D:\soft\miniconda为例,所有python相关的包都会安装在D:\soft\miniconda\envs\python37\Lib\site-packages下面。后面我们针对vnpy进行定制化改造的时候,修改这个目录下面的对应代码文件即可。

#创建名为vnpy的环境,python版本为3.7
conda create -n vnpy python=3.7  

#切换到新建的vnpy环境
conda activate vnpy

#查看当前环境中安装过的python包及其版本
conda list

在这里插入图片描述

下载vnpy源码

接下来我们需要下载vnpy的源码,并将其安装到conda中。笔者这里习惯使用vnpy2.8.0版本的代码,如果读者使用其他版本,需要注意部分组件api的差异。如笔者早期曾使用2.3.0版本,即与2.8.0版本存在较大差异。
下载地址:https://gitee.com/vnpy/vnpy/tree/2.8.0
点击下载zip,解压到本地目录,如D:\soft\vnpy_source_code
在这里插入图片描述

解压后如图:
在这里插入图片描述

安装vnpy

vnpy官方提供了几个不同操作系统的安装脚本,windows为install.bat。我们先打开这个文件,看一下都有哪些步骤,方便我们使用conda来按照对应步骤执行。
点击https://gitee.com/vnpy/vnpy/blob/2.8.0/install.bat 查看安装脚本
在这里插入图片描述

# Upgrade pip & setuptools
pip install --upgrade pip setuptools
# Install prebuild wheel
pip install https://pip.vnpy.com/colletion/TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl
# Install Python Modules
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# Install vn.py
pip install .

我们在conda中首先进入源码所在目录,然后分别执行脚本中的命令。命令已稍作修改,可直接在conda中使用pip安装。

D:
cd .\soft\vnpy_source_code\vnpy-2.8.0\

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个步骤耗时可能会比较久,因为要安装大量vnpy依赖的组件。
如果中途某个组件因为网络下载失败了,可以重复执行当前命令再次尝试安装。如网络频繁断开,推荐使用以下命令,手动指定pip国内数据源。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

在这里插入图片描述

全部安装成功后输出如下:
在这里插入图片描述

最后一步执行pip install . 将vnpy安装到环境中即可。注意这里install后面有一个点号“.”,代表当前目录。
在这里插入图片描述
在这里插入图片描述

再次执行conda list,查看vnpy是否安装成功
在这里插入图片描述

到这里,vnpy环境基本安装成功。下面我们去下载pycharm并配置这个环境用于开发测试。

下载pycharm

下载地址:https://www.jetbrains.com.cn/pycharm/download/#section=windows
下载community社区版,按照提示进行安装即可。
在这里插入图片描述

安装完成后,打开pycharm新建一个空项目。选择已经存在的编译器地址,类型为conda。点击配置按钮进行环境选择。
在这里插入图片描述

选择我们新建的vnpy环境的python应用程序作为当前环境的编译器。可勾选使当前环境对所有项目可用,不过我们基本只需要这个项目即可。点击ok。
在这里插入图片描述

最终效果如图,第一次创建后pycharm需要扫描整个环境的代码,便于在编码阶段提示代码是否合法。等待环境编译结束。
在这里插入图片描述
在这里插入图片描述

验证环境

点击File->Settings->Project Interpreter. 查看pycharm使用的环境是否为vnpy环境,且已经安装vnpy。
在这里插入图片描述
在这里插入图片描述

使用python代码访问vnpy功能

新建文件cta_backtesting_util.py。输入如下代码。代码下载地址:
https://github.com/dz8235462/new_vnpy_project/blob/main/03_install_vnpy_into_conda/cta_backtesting_util.py
【经读者提醒,此代码仅可以在连接mysql数据库时运行,使用默认sqlite时会出现查询参数错误的问题,读者可能需要修改入参start和end的类型。或建议各位先阅读第六章将数据库切换到mysql再继续后续的学习】

import numpy as np
import pandas as pd
from vnpy_ctastrategy.backtesting import BacktestingEngine
from vnpy.trader.constant import Interval, Offset, Direction
from vnpy_ctastrategy.strategies.double_ma_strategy import DoubleMaStrategy


def main():
    start = pd.to_datetime("20200406",
                           format='%Y%m%d %H:%M:%S.%f').tz_localize("Asia/Shanghai")

    end = pd.to_datetime("20230101",
                         format='%Y%m%d %H:%M:%S.%f').tz_localize("Asia/Shanghai")
    # 创建引擎,设置回测模式
    engine = BacktestingEngine()
    engine.log_output = True
    # 配置引擎参数
    original_capital = 1000000
    engine.set_parameters(vt_symbol="rb9999.SHFE",
                          start=start,
                          end=end,
                          interval=Interval.MINUTE,
                          slippage=1,  #
                          rate=0.25 / 10000,
                          size=10,
                          pricetick=1,
                          capital=original_capital)
    engine.add_strategy(DoubleMaStrategy, {
        'fast_window': 30.0, 'slow_window': 80
    })
    engine.load_data()
    engine.run_backtesting()
    df1 = engine.calculate_result()
    engine.calculate_statistics()
    # 计算单次开仓平仓收益百分比
    trades = engine.get_all_trades()
    engine.show_chart()
    engine.clear_data()


if __name__ == '__main__':
    main()

根据第一课已经下载过的数据,我们再次运行相同的合约进行回测。日志输出如下,且最后会弹出浏览器用于绘制收益曲线。截图如下,由图片和日志我们对比一下第一节课时使用客户端进行回测的结果来看,两次结果基本一致,也就代表我们已经可以通过代码来使用vnpy的功能,不再需要借助官方的客户端了。
注意事项:由于这里没有手动指定vnpy的运行目录,所以是使用默认目录。如果第一节课选择运行目录的时候使用了非默认目录,建议将此目录下的.vntrader目录完整复制到用户目录下,或使用默认目录重新下载数据。
下一节课我们就可以开始尝试编写自己的第一个策略。
在这里插入图片描述

日志输出

D:\soft\miniconda\envs\vnpy\python.exe E:/py_workspace_dz/new_vnpy_project1/03_install_vnpy_into_conda/cta_backtesting_util.py
2023-04-10 13:45:18.114024 开始加载历史数据
2023-04-10 13:45:18.114024 加载进度:# [0%]
2023-04-10 13:45:19.409886 加载进度:## [10%]
2023-04-10 13:45:20.769092 加载进度:### [20%]
2023-04-10 13:45:22.198380 加载进度:#### [30%]
2023-04-10 13:45:23.545140 加载进度:##### [40%]
2023-04-10 13:45:25.083724 加载进度:###### [50%]
2023-04-10 13:45:26.480763 加载进度:####### [60%]
2023-04-10 13:45:27.957196 加载进度:######## [70%]
2023-04-10 13:45:29.339796 加载进度:######### [80%]
2023-04-10 13:45:30.845257 加载进度:########## [90%]
2023-04-10 13:45:31.256154 历史数据加载完成,数据量:210586
2023-04-10 13:45:31.280159 策略初始化完成
2023-04-10 13:45:31.280159 开始回放历史数据
2023-04-10 13:45:31.563685 回放进度:= [0%]
2023-04-10 13:45:31.837757 回放进度:== [10%]
2023-04-10 13:45:32.104744 回放进度:=== [20%]
2023-04-10 13:45:32.392733 回放进度:==== [30%]
2023-04-10 13:45:32.683727 回放进度:===== [40%]
2023-04-10 13:45:32.982717 回放进度:====== [50%]
2023-04-10 13:45:33.281288 回放进度:======= [60%]
2023-04-10 13:45:33.580361 回放进度:======== [70%]
2023-04-10 13:45:33.875665 回放进度:========= [80%]
2023-04-10 13:45:34.173660 回放进度:========== [90%]
2023-04-10 13:45:34.173660 回放进度:=========== [100%]
2023-04-10 13:45:34.173660 历史数据回放结束
2023-04-10 13:45:34.176563 开始计算逐日盯市盈亏
2023-04-10 13:45:34.190560 逐日盯市盈亏计算完成
2023-04-10 13:45:34.190560 开始计算策略统计指标
2023-04-10 13:45:34.199560 ------------------------------
2023-04-10 13:45:34.199560 首个交易日: 2020-04-21
2023-04-10 13:45:34.199560 最后交易日: 2022-10-24
2023-04-10 13:45:34.199560 总交易日: 608
2023-04-10 13:45:34.199560 盈利交易日: 274
2023-04-10 13:45:34.199560 亏损交易日: 334
2023-04-10 13:45:34.199560 起始资金: 1,000,000.00
2023-04-10 13:45:34.199560 结束资金: 997,978.65
2023-04-10 13:45:34.199560 总收益率: -0.20%
2023-04-10 13:45:34.199560 年化收益: -0.08%
2023-04-10 13:45:34.199560 最大回撤: -26,510.50
2023-04-10 13:45:34.199560 百分比最大回撤: -2.62%
2023-04-10 13:45:34.199560 最长回撤天数: 246
2023-04-10 13:45:34.199560 总盈亏: -2,021.35
2023-04-10 13:45:34.199560 总手续费: 6,381.35
2023-04-10 13:45:34.199560 总滑点: 57,850.00
2023-04-10 13:45:34.199560 总成交金额: 255,254,170.00
2023-04-10 13:45:34.199560 总成交笔数: 5785
2023-04-10 13:45:34.199560 日均盈亏: -3.32
2023-04-10 13:45:34.199560 日均手续费: 10.50
2023-04-10 13:45:34.199560 日均滑点: 95.15
2023-04-10 13:45:34.199560 日均成交金额: 419,825.94
2023-04-10 13:45:34.199560 日均成交笔数: 9.514802631578947
2023-04-10 13:45:34.199560 日均收益率: -0.00%
2023-04-10 13:45:34.199560 收益标准差: 0.08%
2023-04-10 13:45:34.199560 Sharpe Ratio: -0.07
2023-04-10 13:45:34.199560 收益回撤比: -0.08
2023-04-10 13:45:34.199560 策略统计指标计算完成

Process finished with exit code 0

第一节课客户端回测结果对比:

在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔落凡尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值