发布于vn.py社区公众号【vnpy-community】
《30天解锁Python量化开发》课程已经更新过半(至25集),计划在9月底全部更新完毕,通过概念讲解和实践操作结合的方式,加上vn.py框架内部代码细节的梳理学习,来帮助你快速掌握Python量化开发能力,详情请戳。
原文作者:用Python的交易员 | 发布时间:2020-09-20
本周末发布了vn.py的2.1.6版本,本次更新的内容主要是增加了PaperAccount本地模拟交易模块,以及优化了CtaBacktester模块的回测记录K线图表显示功能。
和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VNStudio-2.1.6,体验一键安装的量化交易Python发行版,下载链接:
https://download.vnpy.com/vnstudio-2.1.6.exe
本地模拟交易模块(PaperAccount)
该模块在vn.py社区是呼声已久,主要为了解决目前各类需要依赖服务端功能的仿真交易账户的问题,例如:
SimNow的CTP仿真环境,从2019年之后稳定性就逐渐变差,时不时会出现宕机连不上,或者和实盘行情出现较大的偏差;
截至目前,国内期权方面始终没有类似SimNow能提供实盘行情撮合的仿真环境:
- 期货期权用的交易所大仿真环境需要有用户报单才有行情(类似实盘的独立环境);
- ETF期权用的经纪商自建仿真环境,存在着行情延时和不根据盘口\撮合****等问题;
对于上述这类问题,最简单的解决方案就是直接在交易客户端内部提供一套本地化的模拟交易环境,同时基于实盘行情的盘口数据进行委托撮合,也就是我们全新的PaperAccount本地模拟交易模块。
该模块在使用上非常傻瓜,首先在VN Station中加载PaperAccount模块,以及想要进行模拟交易的接口。
启动VN Trader后,连接登录交易接口。点击菜单栏的【帮助】->【合约查询】,在弹出的对话框中直接点击右上角的【查询】按钮,可以发现所有合约的交易接口列均显示为PAPER。
此时所有合约的交易委托和撤单请求均已被PaperAccount模块接管,不会再发往实盘服务器,可以放心大胆的进行各种交易测试了。
关闭合约信息对话框,回到主界面先订阅某一合约的行情(注意一定要订阅),再进行常规的下单和撤单操作。
这里列出PaperAccount模块在使用中的一些业务逻辑要点:
支持的委托类型(不支持的类型会被拒单):
- 限价单;
- 市价单;
- 停止单;
委托撮合规则采用到价成交模式,以买入委托为例:
- 限价单:当盘口卖1价ask_price_1小于等于委托价格,则成交;
- 停止单:当盘口卖1价ask_price_1大于等于委托价格,则成交;
委托成交时不考虑盘口挂单量,一次性全部成交;
成交后,先推送委托状态更新OrderData,再推送成交信息TradeData,和实盘交易中的顺序一致;
委托成交后,模块会自动记录相应的持仓信息PositionData:
- 根据合约本身的持仓模式(多空仓 vs 净仓位)信息,维护对应的持仓信息;
- 开仓成交时,采用加权平均计算更新持仓成本价;
- 平仓成交时,持仓成本价不变;
- 多空仓模式下,挂出平仓委托后会冻结相应的持仓数量,可用数量不足时会拒单;
- 持仓的盈亏会基于持仓成本价和最新成交价定时计算(默认频率1秒);
数据的持久化保存:
- 成交数据和委托数据不保存,关闭VN Trader后即消失;
- 持仓数据会在有变化时立即写入硬盘文件,重启VN Trader登录交易接口后即可看到(要收到相应的合约信息)。
点击菜单栏的【功能】->【模拟交易】,在打开的对话框中可以对PaperAccount模块的功能进行若干配置:
- 成交滑点:用于影响市价单和停止单成交时,成交价格相对于盘口价格的滑点跳数;
- 计算频率:多少秒执行一次持仓盈亏计算更新,如果持仓较多时发现程序卡顿,建议尝试调低频率;
- 立即撮合:默认情况下,用户发出的委托需要等到下一个TICK盘口推送才会撮合(模拟实盘情景),对于TICK推送频率较低的不活跃合约可以勾选该选项,委托后会立即基于当前的最新TICK盘口撮合;
- 清空所有持仓按钮,顾名思义用于把所有本地持仓数据一键清空。
PaperAccount模块同样也可以配合vn.py内部的所有其他策略应用模块一起使用(如CtaStrategy、SpreadTrading等),从而实现完全本地化的量化策略仿真交易测试。
CTA回测结果K线图增强
先来看一眼新的CtaBacktester回测K线图:
图表中各个组成部分的功能看最下方的说明就行。这次修改的版本,整体上参考了TB和文华的回测图表显示风格,尽管我个人不太喜欢这种配色,但是社区里大部分用户似乎都属于【看久后已经习惯了】,所以还是满足大部分人的需求吧。
买卖交易结果的配对,采用了v1.0版本中CTA回测盈亏统计曾经提供的【逐笔对冲】逻辑,可以比较精确的显示出策略每次开平仓交易的结果。
其他更新
接口方面:
- 升级重构了宽睿证券极速柜台的接口OesGateway,一方面改为基于其C++版本封装(之前基于C版本),另一方面增加了对ETF期权业务的支持;
文档方面:
- 更新了官网的文档目录,可以直接通过这里访问;
- 新增OptionMaster、PortfolioStrategy和DataManager模块的文档。
9月26日社区线下活动:CTA策略复杂交易算法实现
内容:
CTA策略复杂交易算法:
a.回调函数细节:
i. on_tick的K线合成
ii. on_order的推送时机
iii. on_trade的持仓更新
b. CTA交易中的算法状态机
c. 替换频繁cancel_all模式的停止单d. 盘口连续挂单的交易执行逻辑
e. 实现一个策略内的TWAP算法
K线图表绘制回测买卖记录
a.成交的逐笔对冲统计模式
b. vnpy.chart模块的图层开发
c. 实现买卖记录连线图层
报名请扫描下方二维码: