宽客秀

宽客秀

Quant.Show的Web3站点,Archives from quant.show

基于VN.PY的CTA策略入门心得

CTA 策略,即商品交易顾问 (Commodity Trading Advisor,简称 CTA)。一般而言,要求不少于 60%的资产要投资于期货市场。也就是说,假设一家管理期货策略的私募基金有 1 亿元可投资金,至少要有 6000 万作为期货保证金。CTA 策略一直是量化投资领域里面的一块重要组成部分,和股票的量化策略相比,CTA 策略具有更稳定的收益和更小的风险。正是基于 CTA 策略的对冲性及其高频性,让市场的一切波动都会慢慢趋于平滑,也就是说,只要你对冲做的好,基本可以无视大盘。

最近整理了一下 CTA 策略的开发工具。市面上有 TB 或 MC 之类的可编程的交易软件,奈何一方面这些商业软件的价格不菲,另一方面,编程用的所谓的 EasyLanguage 其实非常小众,复杂功能的开发比较麻烦。做了一些比较后,最后还是选定了 VN.PY 作为 CTA 策略的开发平台。本文介绍的是 VN.PY 的入门心得,帮助大家了解 VN.PY 并快速入门,而非策略的开发(策略的开发一本书也写不完。。。)

一、VN.PY 安装#

基于 VN.PY 的 CTA 策略主要依赖于 VNStation 进行,可在官网上下载最新版安装即可。目前的最新版本是 2.5.1。默认安装目录为 C:\vnstudio。注意点如下:
1)VNStation 安装是自带 Python 包的,所以本地不需要事先安装 Python。开发 IDE,比如 VSCode,建议选择该自带 Python 包作为编译器。不建议本地有其他的 Python 环境,最好干干净净地使用 VNStation 一家即可。
2)vnpy 的源代码在 C:\vnstudio\Lib\site-packages\vnpy 目录下可以找到,但是这个源代码和GitHub上的源代码有一些不一样。vnpy 目录下应该是一致的,但是 GitHub 的源代码上还有其他的目录,比如 examples 的目录,其中有很多可以借鉴的源代码是安装包里所不具备的。

二、启动 VNStation#

1、策略代码目录创建
创建 C:\Users [用户名或 Administrator]\strategies 目录,开发完成的策略代码可以放在该目录下。
2、启动 VNStation
启动 VNStation,页面如下所示:
Img

选择【VN Trader Pro】,启动如下页面:

d2b5ca33bd970f64a6301fa75ae2eb22

左侧的底层接口选择【CTP】或者【CTP 测试】。右侧的上层应用主要根据我们的需要选择,一般选择【CTA 自动交易模块】和【CTA 回测研究模块】较多。下方的运行目录,注意和上述【1、策略代码目录创建】的目录保持一致。点击启动即可。补充说明如下:

1)CTP 和 CTP 测试

目前上期技术是支持通过 API 接入看穿式监管的,主要开发语言是 C++。由于 VN.PY 已经在底层帮我们完成这一复杂的任务了,所以我们无需关心该部分内容。但是连接看穿式监管仍然需要账号,既需要测试账号(即 CTP 测试),也需要实盘账号(即 CTP)。我们用测试账号来验证投资策略的正确性,用实盘账号来完成实盘交易。该账号的申请主要通过自身所在的期货公司来申请。申请的步骤可以参考文章《看完这篇,彻底搞定期货穿透式 CTP API》

如果暂时只是想做一下策略的研究,不做实盘交易的情况下,还有一个方法可以获得 CTP 交易账号,那就是 Simnow 的仿真实盘 / 测试账号。如果准备使用 Simnow 账号,要注意以下几点:

  • 底层接口选择的是 CTP,而非 CTP 测试!!
  • SimNow 提供两套环境,其中第一套仿真实盘环境只能在交易时段使用(9:00-15:00),第二套仿真测试环境只能在非交易时段使用(所有其他时间);在非交易时段使用第一套环境时,主界面左下角日志区域没有任何输出信息。在对应时间段不能连接的话,建议先重新登录 VnTrader 尝试验证一下。
  • 第一套环境中又分为三组服务器,据 vn.py 官方建议,只能连接第二和第三组服务器(支持穿透式验证的版本),不能连接第一组;
  • 由于运维方面的原因,SimNow 服务器有时会出现停机维护的情况(2019 年之后尤其频繁),此时只能等待到下一个交易日再尝试。

2)CTA 自动交易模块和 CTA 回测研究模块
顾名思义,前者是 CTA 策略实施,后者是 CTA 策略回测。如果两者都不选择的话,后续启动的页面只能做基于页面的基础买卖操作,而无法使用 CTA 策略交易的功能。

3、CTP 或 CTP 测试连接
进入 VNTrader 的主页面,如下所示:
Img
点击左上角【系统】-【连接 CTP(或连接 CTP 测试)】进行 CTP(或 CTP 测试)的配置:
Img
关于 CTP 或者 CTP 测试的配置,一般期货公司会提供相关的文档。如果是基于 Simnow 的 CTP 配置,可以参考官网介绍,也可以参考文章《国内期货 CTP 配置教程》。Simnow 连接成功后的【日志】窗口的页面如下:
Img

期货公司的连接成功后,可能并没有 Simnow 那么详细,一切以期货公司的认定标准为准。

连接后可确认【持仓】和【资金】窗口的数据是否正确地显示。

连接后也可测试一下是否行情数据正确能够获取,在【交易】窗口 -【代码】处键入合约代码,按回车,看行情窗口是否正确地显示。注意,合约代码是否输入正确,国内 4 家期货交易所的合约命名规则有所区别,vn.py 内部全部采用官方命名,代码是区分大小写的。比如 TF2003、rb2003 这样。

三、CTA 回测和 CTA 策略#

1、VNTrader 的全局配置
在使用【CTA 策略】或【CTA 回测】之前,我们需要先进行数据的准备。因为在策略中,我们既可能需要根据历史数据进行技术指标的计算,也可能在回测中,利用历史数据进行策略的验证。
VNTrader 的数据准备可以用两种方法,一是使用 RQData 数据,二是构建本地数据库服务。前者使用便捷,更为推荐,其具体的使用方法如下:
1)打开【配置】页面
2)配置【全局配置】页面的以下两个项目
Img
注意:此处的 rqdata.username 和 rqdata.password 和 RQData 官网的用户名和密码不是同一回事!!
rqdata.username 固定为:license
rqdata.password 为:(申请 rqdata 后,官网会给一个很长字母的 License)
配置完毕后,启动【功能】-【CTA 回测】,在日志窗口确认 RQData 是否正常连接,如下图所示:
Img
如果不能正常连接且检查无误的情况下,可以尝试通过打开 VN Station prompt 窗口,输入 pip install rqdatac -U 来更新后看一下是否能解决问题。

另外,RQData 中的连续合约数据,提供 88、888、99 等多种类型,以股指期货合约为例,其区别如下:

  • IF88:简单将 IF 股指期货每个主力月份的量价数据进行拼接,未做任何平滑处理,在主力合约换月时数据会有跳空的现象,因此该数据只适合日内 CTA 策略的回测(收盘无持仓)
  • IF888:在 IF88 数据的基础上,当主力合约换月时记录换月的价差金额,并对之前的历史数据全部加上或者减去该价差,进行平滑处理,因此该数据适合隔夜 CTA 策略的回测(收盘有持仓)
  • IF99:由所有可交易品种的数据,以累计持仓量进行加权平均后,得出的指数数据,由于其在现实中不可交易(交易所并不提供指数合约),因此不推荐使用该数据进行回测,可用于某些数据模型的研究

2、CTA 回测
在 VP.PY 中已经预开发了一些经典策略供投资者回测和策略交易,比如 ArtRsi 策略、DualThrust 策略等,初学者可以从使用或修改这些策略开始着手。

启动【功能】-【CTA 回测】,选择策略,输入本地代码(格式为【商品代码。商品交易所】,比如 TF2003.CFFEX)及其他回测条件,点击【开始回测】,回测页面显示如下:
Img
各项回测指标在中间显示,【账户净值】、【净值回测】、【每日盈亏】、【盈亏分布】的图形化页面在右侧显示。
注意:
1)(回测)交易并不一定从开始日期开始,因为 VN.PY 需要有一定的交易日(比如 10 个交易日)的数据作为初始化,该天数内不会有交易数据。此时可通过回测指标的【首个交易日】进行确认。该部分的程序可以参考策略的 on_init 函数中的 self.load_bar (10)。
2)回测页面时并不能对平今仓的手续费进行特别设置(因为平今仓和平隔夜仓的手续相差较大,会影响收益结果)
3)如果中间的回测指标栏无法正确显示的话,可以尝试
i)在全局配置中,改小 font.size
ii)C:\vnstudio\Lib\site-packages\vnpy\app\cta_backtester\ui\widget.py 的 184 行设置为较小值,比如 600。
Img
在【CTA 回测】页面,亦可以进行参数优化。比如说,有个策略有均线缠绕的比较,快速均线的窗口期和慢速均线的窗口期如何设置才能获得最好的收益率或夏普比率,需要进行遍历比较。点击【参数优化】,可以对目标值、快速均线窗口值、慢速均线窗口值进行遍历比较,比较结束后,可点击【优化结果】进行查看。
Img

3、CTA 策略
启动【功能】-【CTA 策略】,确认日志窗口的信息如下:
Img
选择策略,点击【添加策略】,
Img
strategy_name:表示策略名字,可以设任意字符串,比如 demo1
vt_symbol:表示交易代码,格式为【商品代码。商品交易所】,比如 TF2003.CFFEX
其他则根据自己策略的需要设置。
Img
可以看到部分变量,比如 atr_value、atr_ma 等值为 0,这主要是尚未通过历史数据计算,点击【初始化】,完成策略初始化,并对上述需要的值进行赋值。
Img

Img

初始化后,可点击【启动】,启动策略,此时便开始按照策略进行量化交易。

Img

此时即便关闭【CTA 策略】窗口,亦不会关闭策略的执行。

4,策略调试

方法一:cmd 调试

如果要对策略进行调试,则需要通过 VN Studio Prompt 来启动 VN Station。输入命令行:python -m vnstation。如下图所示:

d2b5ca33bd970f64a6301fa75ae2eb22 2

在 vn trader 中选择 CTA 回测模块,选择你要调试的策略,点击开始回测。相应的调试输出(需要根据个人需求自己设定,一般使用 print()函数),会在 cmd 中显示。cmd 显示的就是 python 解释器在运行策略文件时的输出。如此便实现策略调试。

方法二:Jupyter notebook 调试

通过桌面图标启动 vnstation,在弹出的图形界面中选择 Jupyter Notebook。

选择要调试的策略所在的目录为 Jupyter Notebook 的运行目录,即 C:\Users [用户名或 Administrator]\strategies 目录。

在 Jupyter notebook 中 import 被调试的策略,

#%%
from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting
from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import (
AtrRsiStrategy,
)
from datetime import datetime

然后根据你要回测的品种,回测时间起点,回测时间终点,交易佣金,滑点,价格跳动 ,回测资金,依次修改 vt_symbol,interval,start,end,rate,slippage,size,pricetick,capital。 最后设定被调试策略 engine.add_strategy (被调试的策略,{})。

#%%
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2019, 1, 1),
end=datetime(2019, 4, 30),
rate=0.3/10000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
engine.add_strategy(AtrRsiStrategy, {})

运行代码,如果出现错误,可以通过 engine.strategy. 访问策略中的变量来进行排查错误。也可以在策略代码中使用 print () 函数。更详细的 demo 代码可以参考 vnpy-master\examples\cta_backtesting\backtesting_demo.ipynb

四、VN.PY 的相关学习资料#

本文介绍了 VN.PY 的快速入门,显然对于博大精深的 VN.PY 的学习而言仅仅是冰山一角。以下的一些学习资料可以供大家更多地了解 VN.PY。

1、VN.PY 公众号视频教程(付费)
教程名称:《全实战进阶策略 —CTA 策略》。该教程由于是一边操作电脑页面,一边授课,且逐步分解,由易到难,非常适合作为首选学习资料。根据自身的定位(投资家、策略开发者、平台开发者),可以选择性观看不同的章节(该选择需要自己判断)。

2、VN.PY 官网的项目文档
https://www.vnpy.com/docs/cn/index.html
该项目文档由于比较精炼,更适合作为资料查询,对于初学者来说有点难,可以和视频结合看,可方便理解。

3、VN.PY 知乎
https://zhuanlan.zhihu.com/vn-py
这是 VN.PY 作者的知乎频道,胜在不停地更新,可以作为持续的学习资料。

4、VN.PY 蜗牛博客
http://www.snailtoday.com/archives/category/qihuo/vnpy
这是一位大牛的 VN.PY 学习博客,有很多文章可以和 VN.PY 官方文档形成互补,涉及很多 VN.PY 源码的原理,且实战性很强,更多地适合于平台开发者。

5、《Python 量化交易》(张杨飞著)
这本书是基于 VN.PY 的而写的量化交易,优点是非常细致地介绍了 VN.PY 的原理,另外,对于 VN.PY 预开发的一些经典交易策略,进行了详细的金融层面的介绍和说明,弥补了官方资料的不足(官方资料侧重于 Python 的开发方面),缺点是 VN.PY 更新版本的速度也很快,很多书中介绍的和最新版本已经不是非常相符。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。