熟悉我们的老用户可能知道,米筐自 2017 年开始与 VN.PY 形成战略合作伙伴关系。米筐的“数据”和“策略”解决方案与 VN.PY 的“交易”服务互补,两年多来,我们已经联合为多位用户提供了高性价比的量化投研与交易服务。感兴趣的新朋友可以回顾我们的老帖子《米筐科技和 VN.PY 的战略合作重磅升级》。
为了给各位用户带来更好的产品体验,RQData 相关的答疑功能来了。在这个版块中,我们将提供更好的售前答疑和售后服务,帮助您解决从数据购买到产品应用的技术性问题。欢迎大家在本版块中多多交流~
若您在投研过程中有金融数据需求,米筐的 RQData 产品可为您提供对应的数据服务。RQData 是一个基于 Python 的金融数据工具包,提供丰富整齐的历史数据以及简单高效的 API 接口,免除了您进行数据搜索、清洗的烦恼。
针对期货、商品期权,我们提供了对应的方案,欢迎您点击此处进行体验和购买。
更多下单疑问,您可以在本帖中进行交流。感谢大家的关注~
发布于VeighNa社区公众号【vnpy-community】
原文作者:VeighNa小助手 | 发布时间:2025-06-15
VeighNa 4.0.0 版本新增了面向 AI 量化策略的 vnpy.alpha
模块,为专业量化交易员提供从多因子机器学习(ML)策略研发到实盘交易的一站式解决方案。
在股票多因子策略中,精准的成分股数据至关重要。在 A 股市场,成分股数据不仅能明确投资范围、控制样本特征,还可通过追踪历史成分变动,避免回测中的幸存者偏差。成分股通常流动性较好,可降低实盘执行风险;同时,以指数作为业绩基准,可更客观地评估策略表现。需要注意的是,本文方法主要适用于股票市场,期货等其他资产类别在数据需求和处理流程上有所不同。
本文将演示如何借助迅投研数据服务与 VeighNa,完整下载 A 股指数成分股数据,并实现成分变动跟踪与历史行情获取。
from datetime import datetime # 日期时间处理
from tqdm import tqdm # 进度条显示
from xtquant import xtdata # 迅投研数据API
# vnpy相关模块
from vnpy.trader.database import DB_TZ # 数据库时区
from vnpy.trader.datafeed import get_datafeed # 数据服务接口
from vnpy.trader.constant import Exchange, Interval # 交易所和时间周期常量
from vnpy.trader.object import HistoryRequest # 历史数据请求对象
from vnpy.alpha import AlphaLab, logger # Alpha研究实验室和日志
上述模块涵盖了数据下载、处理与存储的核心功能。其中,xtquant
是迅投研提供的 Python API,而 vnpy.alpha
则是 VeighNa 专为因子策略投研推出的组件。
task_name = "csi300" # 任务名称,用于标识数据文件夹
index_symbol = "000300.SSE" # vnpy格式的指数代码
xt_index_symbol = "000300.SH" # 迅投研格式的指数代码
start_date = "20070101" # 开始日期
end_date = "20231231" # 结束日期
intervals = [
Interval.DAILY, # 设置下载日线数据
]
示例中选取沪深 300 指数(csi300
)作为研究对象,时间范围为 2007 年初至 2023 年底,数据周期为日线。可以按需扩展至其他指数(如中证 500、创业板指等)或其他周期(如分钟线)。
# 创建投研实验室
lab = AlphaLab(f"./lab/{task_name}") # 指定数据文件夹
# 初始化数据服务(迅投研数据服务)
datafeed = get_datafeed() # 获取配置的数据服务
datafeed.init() # 初始化数据服务连接
AlphaLab
是 VeighNa 的因子投研流程管理组件,集成了数据管理、模型训练、信号生成和策略回测等完整环节。此处创建其实例,并指定数据存储目录。
# 下载历史成分股信息
xtdata.download_sector_data() # 下载板块分类数据
xtdata.download_history_data("", "stocklistchange", "", "") # 下载股票列表变更历史
在获取指数板块信息前,需要先执行 download_sector_data
下载板块分类;而获取板块成分股列表前,同样需通过 download_history_data
下载股票列表变更历史。
首次下载耗时较长,请耐心等待。如需查看进度,可在 xtquant
自动创建的 data/log
目录中查看日志,其中会出现 "download done [xxx/xxx]" 等提示。
# 查询交易日历
days = xtdata.get_trading_calendar(market="SZ", start_time=start_date, end_time=end_date)
# 轮询获取指数成分股
index_components = {}
end_datetime = datetime.strptime(end_date, "%Y%m%d")
for i in days:
dt = datetime.strptime(i, "%Y%m%d")
if dt > end_datetime:
continue
# 获取特定日期的指数成分股
xt_symbols = xtdata.get_stock_list_in_sector(xt_index_symbol, i)
# 将迅投研格式转换为vnpy格式
vt_symbols: list = []
for xt_symbol in xt_symbols:
vt_symbol = xt_symbol.replace("SH", "SSE").replace("SZ", "SZSE")
vt_symbols.append(vt_symbol)
# 以日期为键,成分股列表为值,存储在字典中
index_components[dt.strftime("%Y-%m-%d")] = vt_symbols
# 保存到数据中心
lab.save_component_data(index_symbol, index_components)
下载完毕后,先使用 get_trading_calendar
获取交易日历,再对每个交易日调用 get_stock_list_in_sector
取得当天的成分股列表,并将代码从迅投研格式(如 000001.SZ
)转换为 VeighNa 格式(如 000001.SZSE
)。
最终得到的字典以日期为键、成分股列表为值,并通过 save_component_data
存入 AlphaLab 数据中心,为后续因子计算与策略回测奠定基础。
# 加载指数成分股代码
component_symbols = lab.load_component_symbols(index_symbol, start_date, end_date)
调用 load_component_symbols
即可从数据中心加载成分股数据。该方法会在指定日期区间内自动去重,返回所有历史成分股的列表,便于后续行情数据下载。
# 加载指数成分股代码(去重后的所有历史成分股)
component_symbols = lab.load_component_symbols(index_symbol, start_date, end_date)
# 转换时间格式
start = datetime.strptime(start_date, "%Y%m%d")
start.replace(tzinfo=DB_TZ) # 设置时区
end = datetime.strptime(end_date, "%Y%m%d")
end.replace(tzinfo=DB_TZ) # 设置时区
# 除了成分股,还要下载指数数据
task_symbols = component_symbols + [index_symbol]
# 遍历下载数据,使用tqdm显示进度
for vt_symbol in tqdm(task_symbols):
symbol, exchange_str = vt_symbol.split(".") # 分离代码和交易所
for interval in intervals:
# 创建历史数据请求
req = HistoryRequest(
symbol=symbol,
exchange=Exchange(exchange_str),
start=start,
end=end,
interval=interval
)
# 查询历史数据
bars = datafeed.query_bar_history(req)
# 保存数据到数据库
if bars:
lab.save_bar_data(bars)
else:
logger(interval, vt_symbol) # 记录下载失败的情况
拿到成分股列表后,需要进一步下载它们的K线历史行情数据。上述代码将去重后的成分股与指数本身合并为下载任务,并使用 tqdm
展示进度。遍历过程中,通过 query_bar_history
拉取历史行情并存储于 AlphaLab 数据库;若查询失败,则记录日志以便后续排查。
# 添加回测参数配置
for vt_symbol in component_symbols:
lab.add_contract_setting(
vt_symbol,
long_rate=5/10000, # 多头费率:万分之五
short_rate=10/10000, # 空头费率:万分之十
size=1, # 合约乘数:1
pricetick=0.0001, # 价格变动:0.0001
)
为每只成分股配置回测参数。交易成本的合理设置对回测结果的准确性至关重要。本示例在 A 股市场中采用万分之五的多头费率和万分之十的空头费率,综合考虑了佣金、印花税及滑点。
在文章的结尾还是老规矩附上完整的程序代码:
# 加载模块
from datetime import datetime
from tqdm import tqdm
from xtquant import xtdata
from vnpy.trader.database import DB_TZ
from vnpy.trader.datafeed import get_datafeed
from vnpy.trader.constant import Exchange, Interval
from vnpy.trader.object import HistoryRequest
from vnpy.alpha import AlphaLab, logger
# 设置下载参数
task_name = "csi300"
index_symbol = "000300.SSE"
xt_index_symbol = "000300.SH"
start_date = "20070101"
end_date = "20231231"
intervals = [
Interval.DAILY,
]
# 创建投研实验室
lab = AlphaLab(f"./lab/{task_name}") # 指定数据文件夹
# 初始化数据服务(这里配置使用的迅投研)
datafeed = get_datafeed()
datafeed.init()
# 下载历史成分股信息
xtdata.download_sector_data()
xtdata.download_history_data("", "stocklistchange", "", "")
# 查询交易日历
days = xtdata.get_trading_calendar(market="SZ", start_time=start_date, end_time=end_date)
# 轮询获取指数成本股
index_components = {}
end_datetime = datetime.strptime(end_date, "%Y%m%d")
for i in days:
dt = datetime.strptime(i, "%Y%m%d")
if dt > end_datetime:
continue
xt_symbols = xtdata.get_stock_list_in_sector(xt_index_symbol, i)
vt_symbols: list = []
for xt_symbol in xt_symbols:
vt_symbol = xt_symbol.replace("SH", "SSE").replace("SZ", "SZSE")
vt_symbols.append(vt_symbol)
index_components[dt.strftime("%Y-%m-%d")] = vt_symbols
# 保存到数据中心
lab.save_component_data(index_symbol, index_components)
# 加载指数成分股代码
component_symbols = lab.load_component_symbols(index_symbol, start_date, end_date)
# 转换时间格式
start = datetime.strptime(start_date, "%Y%m%d")
start.replace(tzinfo=DB_TZ)
end = datetime.strptime(end_date, "%Y%m%d")
end.replace(tzinfo=DB_TZ)
# 除了成分股,还要下载指数数据
task_symbols = component_symbols + [index_symbol]
# 遍历下载数据
for vt_symbol in tqdm(task_symbols):
symbol, exchange_str = vt_symbol.split(".")
for interval in intervals:
req = HistoryRequest(symbol, Exchange(exchange_str), start, end, interval)
bars = datafeed.query_bar_history(req)
if bars:
lab.save_bar_data(bars)
else:
logger(interval, vt_symbol)
# 添加回测参数配置
for vt_symbol in component_symbols:
lab.add_contract_setting(
vt_symbol,
long_rate=5/10000,
short_rate=10/10000,
size=1,
pricetick=0.0001,
)
本文记录了利用python包管理生态管理工具uv,从源码恢复vnpy的运行环境的全过程。
python包管理生态中存在多种工具,如pip、pip-tools、poetry、conda等,各自具备一定功能。
uv新一代python生态管理工具,它是 Astral 公司推出的一款基于Rust编写的Python包管理工具,旨在成为“Python的 Cargo”。
它提供了快速、可靠且易用的包管理体验,在性能、兼容性和功能上都有出色表现,为 Python项目的开发和管理带来了新的选择。
与其他 Python 中的包管理工具相比,uv 更像是一个全能选手,它的优势在于:
使用uv,也可以像 Node]s 或者 Rust 项目那样方便的管理依赖。
windows上安装uv,在cmd窗口中执行下面命令:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
注意:执行完毕后,会在C:\users\\<用户名称>\.local\bin目录下安装两个文件uv.exe和uvx.exe。
进入cmd或者powershell窗口,输入uv命令应该可以得到如下回应就表示uv已经安装成功了:
如果报告“uv不是内部或外部命令,也不是可运行的程序或批处理文件。”请打开“我的电脑”| “高级系统设置”| “环境变量”| “用户变量”| “Path”,把C:\users\\<用户名称>\.local\bin目录添加进去就可以。
三、下载vnpy 4.0源码
如图所示,从https://www.github.com下载到vnpy-master.zip源代码,解压后包含如下文件和目录:
输入下面的命令,限定python版本3.13,实际安装的是python 3.13.17。
uv python install 3.13
来到vnpy-master源码目录下,输入下面的目录创建虚拟环境目录,当前目录下会多出.venv目录,其中包含虚拟环境的配置文件。
cd d:\vnpy-master
uv venv
这一步是最关键的一步,我是好几天都无法通过这一步,最后在陈总——陈晓优的指导下才通过的。
先把ta-lib二进制包装了,注意这里必须先指明安装的源是https://pypi.vnpy.com。
uv pip install ta-lib --index=https://pypi.vnpy.com
uv pip install . --index=https://pypi.vnpy.com
只有vnpy核心模块是不够的,还需要根据自己的需要安装其他的模块才能够运行实际的交易:
可以合并也可以逐条执行如下命令:
uv add importlib_metadata pymysql
uv add vnpy_ctp vnpy_ctastrategy vnpy_ctabacktester vnpy_datamanager vnpy_mysql vnpy_rqdata
vnpy的源码中包含一个例子,位于example\verghna_trader子目录下,其中的run.py最具代表性,它演示了如何利用已经安装的核心和其他配套模块能够完成功能:
cd d:\vnpy-master\examples\veighna_trader\
uv run run.py
发布于VeighNa社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2025-06-09
截至2025年6月3日,VeighNa(vn.py)项目在Github上收获的Star总数突破30,000(查看Star数据请戳这里的Github仓库),感谢开源社区用户们的长期支持!
VeighNa开发团队会继续坚持【By Traders, For Traders, AI-Powered】的核心理念,为大家带来更加强大和好用的量化交易平台产品!
附上自2015年初在Github上开源以来的Star增长曲线(截图来自Star History网站):
FinRL投研平台学习系列社区活动第四场报名进行中,想要了解强化学习技术(Reinforcement Learning)在量化领域具体应用场景的同学强烈推荐!具体活动内容大纲请见:[2025年第4次社区活动 - 【FinRL投研平台学习系列4】 - 6月28日(上海)
发布于VeighNa社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2025-04-15
自2015年3月发布以来,VeighNa已经走过了作为开源项目的第一个十年。在这段时间里,VeighNa的成长离不开广大社区用户的持续贡献。在此,我们要向VeighNa社区的每一位成员表达最真挚的感谢!
上月底,VeighNa迎来了4.0.0版本的发布,这是VeighNa 4.0大版本的首次更新。此次更新的核心亮点包括全新推出的针对AI量化策略的vnpy.alpha子模块,并将核心支持版本升级至Python 3.13,大幅提升整体性能的同时,还进一步完善了VeighNa的软件工程架构。
鉴于本次更新涉及Python核心支持的升级(从3.10更新至3.13),因此无法通过VeighNa Station的自动更新功能完成升级。用户需要先卸载旧版的VeighNa Studio,然后重新下载并安装VeighNa Studio 4.0.0版本,下载链接:
https://download.vnpy.com/veighna_studio-4.0.0.exe
本次发布中新增了面向AI量化策略的vnpy.alpha模块,为专业量化交易员提供一站式多因子机器学习(ML)策略开发、投研和实盘交易解决方案:
📊dataset - 因子特征工程
💡 model - 预测模型训练
提供标准化的ML模型开发模板,大幅简化模型构建与训练流程
统一API接口设计,支持无缝切换不同算法进行性能对比测试
集成多种主流机器学习算法:
🤖 strategy - 策略投研开发
🔬 lab - 投研流程管理
📖 notebook - 量化投研Demo
vnpy.alpha模块的设计理念受到Qlib项目的启发,在保持易用性的同时提供强大的AI量化能力,特此向Qlib开发团队致以诚挚感谢!
由于截面多因子策略的开发涉及跨学科知识体系——包括金融理论建模、海量数据处理、以及机器学习算法实践,不少社区用户在阅读相关开源代码后仍反馈“无从下手、不知如何系统学习”。如果你也有类似困惑,我们强烈推荐即将于6月举办的2025年第二场小班特训营《机器学习截面多因子策略》,本次特训营将以实战为导向,从零搭建一套完整的机器学习因子策略开发流程,课程大纲及报名信息详见报名公告。
自Guido启动Shannon Plan项目以来,过去数年中每一个Python大版本的迭代都显著提升了解释器的执行性能。因此,在VeighNa 4.0版本中,我们将核心支持升级至最新的Python 3.13,并结合新引入的语言特性,对核心框架的代码进行了重构,以进一步提升系统的运行效率与代码可维护性。
同时,依据《2025年VeighNa项目计划》中所提出的路线,4.0版本也在软件工程层面进行了多项关键性改进,全面优化了项目的架构设计与开发流程,具体包括:
VeighNa 4.0核心框架在升级过程中始终坚持“兼容优先”的原则,尽可能保障现有插件模块的平稳过渡。除涉及C++ API封装的接口模块需进行重编译外,绝大多数功能模块可在无需修改的情况下直接使用。
但由于前述对 Python 3.13 的支持升级以及软件工程层面的结构性调整,部分模块仍需进行适配性更新。目前已完成适配并通过测试的模块包括:
其余模块的适配工作计划将在 4.1.0 版本中完成(预计于2025年5月发布)。与此同时,我们也将清理部分使用量较低、长期无人关注的模块,具体清单和说明可参见GitHub上的相关Issue。
新增
调整
修复
发布于VeighNa社区公众号【vnpy-community】
原文作者:VeighNa小助手 | 发布时间:2025-06-03
去年【社区活动尊享卡】的受欢迎程度大幅超出我们的预期,为了保证每场社区活动的交流质量,尊享卡已经变更为仅对部分专业交易员用户定向提供。对于参加活动较多的同学强烈推荐!购买请扫描二维码添加小助手咨询:
FinRL投研平台学习系列的社区活动迎来第四场,前三场在深圳、上海、成都的活动中,参与者的热情远远超出了我们的预期。今年年初,DeepSeek的现象级爆红使得人工智能(AI)和机器学习(ML)的概念更加深入人心。与此同时,量化领域的从业者们也正积极探索这些技术在投资和交易业务中的应用前景。
这里附上几张之前活动的照片:
列举一下目前整个系列活动计划的四场内容,分别是:
本次活动将于6月28日(周六)下午2:00至5:00在上海举办。普通报名仅支持线下参会,尊享卡持有者和Elite会员可通过线上直播参与。活动具体地址将在微信群中公布,请在报名成功后扫码加入社区活动群,以便获取相关信息!
FinRL的进阶开发应用
a. FinRL-Tutorials项目介绍
i. 基础入门部分
ii. 进阶应用部分
iii. 实践优化部分
b. 基于FinRL的量化投资组合配置
i. Stock Trading v.s. Portfolio Allocation
ii. 相似但不同的任务:Action、Reward、State
iii. Dow 30投资组合实践结果分析
c. 尝试中国A股市场的股票交易
i. 使用tushare下载准备数据
ii. A股交易强化学习任务运行
iii. 对比沪深300指数基准的绩效分析
d. 基于Ensemble Strategy的股票交易
i. 什么是机器学习中的Ensemble Strategy
ii. 和单一RL算法的绩效结果对比
PaperTrading仿真交易
a. 接入Alpaca仿真环境
i. 行情订阅获取
ii. 委托交易执行
b. 整体任务执行流程分解
i. 定义RL仿真交易任务
ii. 基于历史数据训练Agent
iii. Agent仿真环境接入运行
FinRL系列4期内容回顾总结
闭门交流环节
时间:6月28日 14:00-17:00
地点:上海(具体地址后续在微信群中通知)
报名费:99元(Elite会员免费参加)
报名方式:扫描下方二维码报名(报名后请扫码加入社区活动微信群获取参会地址)
作为初学者,面对 vnpy 无所不包、博大精深的丰富内容,试图用图形对 vnpy 的运行流程做一个归纳。
不到之处,还请各位多多指正
发布于VeighNa社区公众号【vnpy-community】
原文作者:用Python的交易员 | 发布时间:2025-05-22
在2025年第一季度收尾的《机器学习研修系列 - 大模型量化AI应用实战》课程中,我们使用VeighNa平台上的量化投研业务作为应用场景和实践案例,结合深入浅出的讲解,帮助学员构建大模型应用开发的完整知识体系。
为了帮助大家更好地吸收课程精华,我们精心制作了这份【知识要点图】:
看完对课程感兴趣的话,请戳【课程传送门】。
本课程同样包含在【VeighNa Elite版】的会员权益范围内,其他会员权益包括:
感兴趣的同学请扫描下方二维码:
安装流程:
打开terminal-注意环境切换成 py37_vnpy,执行以下命令,安装需要的插件
pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
遇到安装失败的可以单独安装:
pip install PyQt5 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
备注:
如果需要在cmd 下使用 py37_vnpy 环境。
打开 CMD
运行: conda activate py37_vnpy
会切换到py37_vnpy环境下
我学Python的目的很明确,就是量化交易。从一开始就有关注vn.py,但我学的是Python3,那时vn.py还处于版本1.x时期,所以只能望vn.py兴叹。
vn.py 2.0出来之后我并没有及时注意,等反应过来已经是2.0.7版。很兴奋,认真研究,并将心得写成《vn.py 2.0.7源代码深入分析》,分享在vn.py社区的经验分享板块。
出于对量化交易的爱好,出于对Python在量化交易中作用的认同,一定程度受vn.py强大功能的鼓舞,我与同事合写了《Python量化交易从入门到实战》一书,对vn.py的讨论是其中很重要的一部分内容。
后续又写了《vn.py 2.1.4源代码深入分析》和《vn.py 2.2.0源代码深入分析》两个文档,感谢各位老师的认可。
vn.py 3.0.0版发布于2022-03-23,这是我一直期待的一个版本,所以它刚一推出,我就立刻开始试用,并着手整理《vn.py 3.0.0源代码深入分析》。夜以继日,终于在前天完成。先发到了书籍的资源群中,接受了两天批评,现分享到此处。
写作本文档的一个主要目的是对vn.py的开源精神做出一点支持,希望本文档能够对大家学习使用vn.py有所帮助。
百度网盘链接:https://pan.baidu.com/s/1cl2MA9hNFhHlxfHM0gGe2A
提取码:s7u6