发布于VeighNa社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2026-10-11
本周发布了VeighNa的4.5.0版本,本次更新的主要内容是大幅优化多因子策略模块中时序算子的计算性能,同时重构了因子和信号的绩效分析实现。

对于已经安装了VeighNa Studio 4.0版本的用户,可以使用快速更新功能完成自动升级。对于没有安装的用户,请下载VeighNa Studio-4.5.0,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/veighna_studio-4.5.0.exe

 

时序算子性能优化

 

4.5.0重写了多因子策略模块vnpy.alpha中的6个时序算子:ts_mean、ts_std、ts_rank、ts_argmax、ts_argmin和ts_quantile。旧版统一基于Polars的rolling_map实现,每个窗口都要回调一次Python,导致了显著的数据来回复制开销。

新版中,ts_mean、ts_std和ts_rank改为按合约向量化计算,ts_quantile改用Polars原生的rolling_quantile,ts_argmax和ts_argmin改为按合约拆分后直接对数据切片计算(不再经过rolling_map的逐窗口调用),从而尽可能发挥Polars底层计算引擎的性能优势。

Alpha 158中有70个因子用到这些算子(ma、std、rank、qtlu、qtld、imax、imin等),新版本优化后prepare_data的特征计算会快很多。

在300只股票、每只2000根K线(共60万行)的数据上,窗口为20时单个算子的耗时对比如下:

description

窗口取60时,ts_rank和ts_quantile仍有百倍以上的提升,ts_mean和ts_std在40多倍,ts_argmax和ts_argmin保持在15倍左右。

注意:cs_rank改为返回当日截面上的百分位排名,取值在0到1之间,4.4.0返回的是从1开始的名次。Alpha 101已实现的82个因子中有62个用到cs_rank,升级后需要重新计算数据集。

 

因子和信号绩效分析

此前因子和信号绩效分析依赖alphalens-reloaded,许多用户容易根据报错提示直接安装alphalens(不兼容的老版本)导致出错,且matplotlib绘制的图表效果也不够理想。

4.5.0中去掉了这个依赖,改为参考Alphalens分析框架的计算逻辑在vnpy.alpha内部重新实现,图表改用Plotly绘制。调用方式不变:

dataset.show_feature_performance("ma_20")
dataset.show_signal_performance(signal)

完整页面如下图所示:

description

 

CHANGELOG

 

新增

  1. vnpy_ctabacktester的回测配置按策略名分组保存,切换策略时自动恢复;没有历史配置时回到界面初始值

调整

  1. 交易接口、功能模块、数据库和数据服务补充公开接口文档与类型注解,增加离线测试并纳入持续集成
  2. vnpy.alpha的cs_rank改为横截面百分位排名
  3. 重构vnpy.alpha的因子和信号绩效分析,移除alphalens-reloaded
  4. vnpy.alpha回测增加fill_price参数,新增vwap撮合模式支持
  5. 标签周期解析支持ts_delay的任意价格字段
  6. 重构vnpy.alpha的ts_mean、ts_std、ts_rank、ts_argmax、ts_argmin、ts_quantile函数,大幅优化性能
  7. vnpy_polygon改名为vnpy_massive,通过Massive REST获取美股K线
  8. vnpy_mini更新API至1.7.7、交易API至1.7.7
  9. vnpy_tap更新API至9.3.1.11、交易API至9.3.9.18
  10. vnpy_ctp增加登录时的ProductInfo产品信息传参支持
  11. vnpy_ctp的MdApi.subscribeMarketData支持一次传入合约列表
  12. vnpy_ctp的纯ASCII字符串的编码转换不再走GBK
  13. vnpy_ib更新API至10.45.1

修复

  1. 修复界面时间列点击无法排序的问题(TimeCell写入时间戳)
  2. 修复vnpy.alpha的ta_rsi、ta_atr在多合约数据上串算的问题,改为按合约分别计算
  3. 修复BarGenerator.update_tick,最高价和最低价只反映相对上一笔Tick的变化
  4. 修复RPC的主题过滤,并保持心跳,避免发布套接字卡住
  5. vnpy_ctp在init、join、exit、release期间释放GIL,避免退出死锁
  6. vnpy_ctp行情毫秒不足三位时补零
  7. vnpy_ctp确保本地SUBMITTING先于该笔柜台回报入队
  8. vnpy_femas修正委托时间字段名
  9. vnpy_rohon补上Windows运行库,并修正Linux rpath
  10. vnpy_sqlite读取时把带时区的查询起止时间转成朴素时间
  11. vnpy_questdb将空的database.host和localhost改为127.0.0.1,避免Windows上连接超时
  12. vnpy_tushare日线下载使用trade_date
  13. vnpy_tushare分钟和小时数据满页后按最早时间再向前翻页,避免重复请求同一页
  14. vnpy_xt将深圳创业板合约识别为股票
  15. vnpy_portfoliostrategy的分钟K线按完整分钟切片