发布于vn.py社区公众号【vnpy-community】
 

vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee最有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:
https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!
 
原文作者:用Python的交易员 | 发布时间:2020-12-26

 

本周二发布了vn.py的2.1.8版本,本次更新的内容主要是重构了PortfolioManager模块,实现交易策略的实时盈亏统计监控功能。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VNStudio-2.1.8,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/vnstudio-2.1.8.exe

 

重构后的投资组合管理模块(PortfolioManager)

 

PortfolioManager模块最初于2.0.8版本发布,当时主要的定位是为主观类的交易策略(如期货基本面单边和套利策略),提供一个方便的交易业绩跟踪和分析工具。

在2.1.7版本增加了委托来源标识(reference字段)后,所有从vn.py发出的委托请求都可以直接通过该标识来区分其交易来源,如手动交易、算法执行、量化策略等,每个交易来源可以视作一个独立的【投资组合】。

本次2.1.8版本对PortfolioManager模块的重构,将所有委托基于reference字段进行映射和计算,进一步增强了对于投资组合的盈亏统计和分析功能:

description
 
界面整体可以分为左右两部分,左边显示的是当前已有交易组合的信息表:
 
description
 

其中每列的含义如下:

  • 组合名称:委托的来源(reference)

    • 手动交易:ManualTrading
    • CTA策略:CtaStrategy_策略名
    • 价差交易:SpreadTrading_价差名
    • 期权交易:OptionMaster_ElectronicEye/DeltaHedging
    • 算法交易:AlgoTrading_算法编号
    • 脚本策略:ScriptTrader
    • 组合策略:PortfolioStrategy_策略名
  • 本地代码:带交易所后缀的合约代码

  • 开盘仓位:昨日收盘时(今日开盘),组合内该合约的持仓

  • 当前仓位:开盘仓位加上今日成交数量(多头成交 - 空头成交)的结果

  • 交易盈亏:今日所有成交,以成交价格映射到当前最新价的盈亏

  • 持仓盈亏:组合开盘仓位,以昨收盘价映射到当前最新价的盈亏

  • 总盈亏:交易盈亏和持仓盈亏的和

  • 多头成交:组合内该合约今日买开和买平成交数量

  • 空头成交:组合内该合约今日卖开和卖平成交数量

其中交易盈亏(TradingPnl)和持仓盈亏(HoldingPnl)的计算,采用的是期货交易所每日结算时所用的【逐日盯市】(Marking to Market)算法,具体原理可以搜索相关资料学习。

该组件基于QTreeWidget(树形表格)开发,可以很方便的点击最左侧每行的箭头进行折叠和展开,也可以点击顶部的【全部展开】和【全部折叠】按钮进行批量操作,并通过【调整列宽】按钮自动调整表格每列的宽度。

右侧部分显示的是所有成交记录,支持通过右上角的下拉框根据组合进行筛选显示:

description

盈亏数字的更新基于定时逻辑自动计算,计算频率可以通过顶部中间的选项框调整:

description

整体上重构后的PortfolioManager使用非常傻瓜,大部分情况下只要在VN Station的启动界面加载即可,运行策略交易的过程中打开【投资组合】界面,就能实时监控每个策略的当日交易和盈亏情况。

虽然模块中最频繁运行的策略盈亏计算逻辑已经高度优化,实现了和成交数量无关的O(1)时间复杂度,即不会因为成交数量过多而导致计算耗时变长,但终究会有一定的额外开销(百微秒到几毫秒)。对于运行策略交易的程序,总归开销是越低越好,因此推荐刷新频率在不影响使用的情况下可以设的高些(比如30秒才计算一次)。

所有组合的持仓数据数据会在关闭VN Trader时写入缓存文件中,所以不要直接杀进程退出,会丢失数据!在隔日加载时,程序会自动将昨天的总仓位结算到今天的昨仓数据字段中,注意该逻辑对于24小时交易的市场(外盘期货、数字货币)可能不一定合适,后面考虑加入每日定时结算或者手动结算的功能。

如果发现有仓位记录错误,或者策略已经移除的情况,可以用VS Code手动修改缓存文件,修改后再重新启动VN Trader即可。缓存文件位于C:\users\administrator.vntrader\portfolio_manager_data.json。

 

其他更新

 

接口方面

  1. 南华期货NHTD极速接口,包括针对ETF期权的NhStockGateway和针对期货的NhFuturesGateway,该接口只能在【南华云】托管环境中使用,采用UDP通讯协议(行情和交易)替换传统API的TCP通讯协议,达到极致的低延时交易性能;
  2. 国泰君安统一交易网关接口GtjaGateway,行情上基于国君SIP行情API开发(支持TCP、软件组播、FPGA组播等多种行情源),交易上基于国君HFT交易API开发(支持华锐极速、顶点极速、金证集中等多种柜台)。

策略模块

  1. SpreadTrading模块新增灵活价差功能,对比之前的普通价差,能够支持更加灵活的价差计算公式(例如A/B、A-B*C等),同时允许引入不参与交易的定价腿,满足复杂境内外套利价差需要考虑汇率和税率等因素的需求。

 

眨眼之间已经到了2020年底,接下来又要做一年一度的项目总结和明年规划了,有什么想说给vn.py的吐槽或者建议,欢迎在下方留言!!!