一句话回答: vnpy 是开源量化交易框架,交易走券商网关(CTP/券商柜台)、数据走「数据服务(datafeed)」 ;但它内置的数据服务多面向期货或需付费账号,个人做 A 股常卡在「历史行情从哪来」。务实做法:用 AlphaFeed 取 A 股后复权 K 线 → 映射成 vnpy 的 BarData → 存入 vnpy 数据库跑回测 。本文的 AlphaFeed 取数部分真实验证 (klines 含 open/high/low/close/volume/amount,amount 可作 turnover)。诚实边界:vnpy 为第三方框架,BarData/数据库接口以 vnpy 官方为准;AlphaFeed 只提供行情数据 ,不替代 vnpy 的交易网关(真实下单仍走券商)。
vnpy 的数据从哪来:datafeed 的定位
vnpy 把「交易」和「数据」分开:
- 交易:通过 Gateway 连券商/CTP,真实报单;
- 历史数据 :通过
datafeed模块(如米筐、天勤等)或你自己写入数据库。
痛点:个人做 A 股 时,内置 datafeed 要么偏期货、要么需付费机构账号,历史 K 线不好拿。而 vnpy 的回测引擎只要数据库里有 BarData 就能跑。所以关键是:把 A 股 K 线灌成 vnpy 的 BarData。
vnpy datafeed vs 自备数据 API
| 维度 | vnpy 内置 datafeed | 自备数据 API(AlphaFeed 示例) |
|---|---|---|
| A 股历史 | 部分需付费/偏期货 | ✅ 日/周/月到上市首日 |
| 复权可复现 | 看数据源 | adjust 5 种,回测用 backward |
| 多市场 | 视 datafeed | A/US/HK 一套代码 |
| 接入方式 | 配置 datafeed | 取 DataFrame → 映射 BarData |
| 交易下单 | vnpy Gateway(券商) | ❌ 数据 API 不下单 |
vnpy 描述基于其「开源量化交易框架(交易+数据分离)」的公开定位,
BarData/数据库 API 以 vnpy 官方文档与版本为准。AlphaFeed 侧取数经本文tools/verify_new_2026-11-02.py真实跑通(SDK 0.1.4)。
分步骤:AlphaFeed K 线 → vnpy BarData
1) 用 AlphaFeed 取后复权日线(真实验证)
python
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
df = af.klines.get("600519.SH", period="1d", count=250,
adjust="backward", to_dataframe=True)
# 列含:trade_date, open, high, low, close, volume, amount(A股 amount 为元)
2) 映射成 vnpy 的 BarData(按 vnpy 官方 API)
python
from datetime import datetime
from vnpy.trader.object import BarData
from vnpy.trader.constant import Exchange, Interval
bars = []
for _, r in df.iterrows():
bars.append(BarData(
symbol="600519",
exchange=Exchange.SSE, # 沪市;深市用 Exchange.SZSE
datetime=datetime.strptime(r["trade_date"], "%Y-%m-%d"),
interval=Interval.DAILY,
open_price=r["open"], high_price=r["high"],
low_price=r["low"], close_price=r["close"],
volume=r["volume"], # 单位「手」
turnover=r["amount"], # A 股成交额(元)
gateway_name="DB",
))
# 再用 vnpy 的 database.save_bar_data(bars) 入库,供回测引擎使用
BarData/save_bar_data为 vnpy 官方对象与接口,字段名以你所用 vnpy 版本为准;本文验证的是「AlphaFeed 取数含映射所需全部字段」。
3) 字段映射速查
| vnpy BarData | AlphaFeed 来源 | 说明 |
|---|---|---|
datetime |
trade_date |
转 datetime |
open/high/low/close_price |
open/high/low/close |
后复权 |
volume |
volume |
单位「手」 |
turnover |
amount |
A 股成交额(元);美港股为 0 |
symbol/exchange |
代码拆分 | .SH→SSE、.SZ→SZSE、.BJ→BSE |
关键坑与注意事项
- 数据与交易分开看:AlphaFeed 解决「历史/实时行情」,vnpy 的 Gateway 解决「真实下单」,两者不互相替代。
- 回测用后复权 :
adjust="backward"可复现;前复权有复权未来函数风险。 - 交易所常量要对 :
.SH→Exchange.SSE、.SZ→Exchange.SZSE、.BJ→Exchange.BSE,别搞反。 - turnover 用 amount,仅 A 股可靠 :美股/港股 K 线
amount=0,turnover需另算或留空。 - vnpy 版本差异 :
BarData字段名、数据库 API 不同版本略有变化,以官方为准;本文只保证 AlphaFeed 数据字段齐全。 - 财务/基本面不覆盖:AlphaFeed 只给行情,vnpy 策略若要财务因子需另配 Tushare/AkShare。
常见问题(FAQ)
Q:vnpy 做 A 股历史回测,数据到底从哪来最省心?
A:自备一个稳定数据 API(如 AlphaFeed)取 A 股 K 线,映射成 BarData 入 vnpy 数据库,回测引擎直接用,不依赖偏期货的内置 datafeed。
Q:AlphaFeed 能替代 vnpy 吗?
A:不能,也不冲突。AlphaFeed 是数据层,vnpy 是交易+回测框架;下单仍走 vnpy 的券商 Gateway。
Q:实时行情能喂给 vnpy 吗?
A:AlphaFeed 提供约 3 秒的实时快照,可用于准实时监控/研究;vnpy 实盘 tick 推送通常走券商 Gateway,按你的实盘链路设计。
Q:需要付费吗?
A:历史 K 线有免费额度可体验,长历史/全市场/高频建议 Starter 及以上,详见官网定价页。
小结
vnpy 的数据与交易是分离的------交易走券商 Gateway,历史行情靠 datafeed 或你自己入库。个人做 A 股最省心的是自备数据 API :用 AlphaFeed 取后复权 K 线、按官方 BarData 字段映射入库,vnpy 回测即可用。记住数据层(AlphaFeed)不替代交易层(vnpy Gateway),各司其职。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
- AlphaFeed 官网:https://alphafeed.org/
- 本文完整版(AlphaFeed 博客):https://blog.alphafeed.org/blog/vnpy-data-source-setup