从 baostock 迁移到 AlphaFeed:接口对照与代码迁移指南
从 baostock 迁移到 AlphaFeed:接口对照与代码迁移指南
一句话回答: baostock 的 query_history_k_data_plus() 在 AlphaFeed 里对应 af.klines.get()——不用 login/logout、不用把 sh.600519 前缀码转来转去、返回直接是带类型的 DataFrame(不再全是字符串),而且 baostock 缺失的实时快照、五档盘口、全市场批量、美股/港股,AlphaFeed 都补齐。
为什么考虑迁移
baostock 胜在稳定免费的历史 K 线与复权因子,但局限明显:
- 无实时、无盘口:只能做日频历史,盯盘/短线无从下手;
- 代码前缀风格:用
sh.600519/sz.000001,与主流.SH/.SZ后缀不一致,跨源需转换; - 返回全是字符串:
query_history_k_data_plus返回的字段都是 str,要手动float(); - 需 login/logout、覆盖有限:仅 A 股,无美股/港股。
AlphaFeed 聚焦交易型数据并统一覆盖 A/US/HK。baostock 的历史复权因子等基础能力 AlphaFeed 也有(adjust + 除权因子)。
接口对照表
| 需求 | baostock | AlphaFeed | 说明 |
|---|---|---|---|
| 登录/登出 | bs.login() / bs.logout() | 无需,构造 AlphaFeed() 即可 | 省掉会话管理 |
| 历史 K 线 | bs.query_history_k_data_plus(...) | af.klines.get(...) | 直接返回 DataFrame |
| 复权 | adjustflag="1"/"2"/"3" | adjust="backward"/"forward"/"none" | 口径对照见下 |
| 分钟线 | frequency="5"/"15"/"30"/"60" | period="5m"/"15m"/"30m"/"60m" | 参数风格统一 |
| 实时快照 | ❌ 无 | af.quotes.get(...) | baostock 完全缺失 |
| 五档盘口 | ❌ 无 | af.depth.get(...) | baostock 完全缺失 |
| 全市场快照 | 需遍历 | af.quotes.get(universes="CN_Stock") | 一行取全 A |
| 美股/港股 | ❌ 无 | af.klines.get("AAPL.US"/...) | 一套代码三市场 |
代码迁移对照
取前复权日线
# baostock:登录→查询→逐行取→手动转类型→登出
import baostock as bs
import pandas as pd
bs.login()
rs = bs.query_history_k_data_plus(
"sh.600519", "date,code,open,high,low,close,volume,amount",
start_date="2024-01-01", end_date="2024-12-31",
frequency="d", adjustflag="2") # 2=前复权
rows = []
while (rs.error_code == "0") & rs.next():
rows.append(rs.get_row_data())
df = pd.DataFrame(rows, columns=rs.fields)
df[["open","high","low","close"]] = df[["open","high","low","close"]].astype(float) # 字符串转数值
bs.logout()
# AlphaFeed:一行取数,直接带类型
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key")
df = af.klines.get("600519.SH", period="1d", count=250,
adjust="forward", to_dataframe=True) # open/high/low/close 已是数值
baostock 做不到的:实时 + 盘口
q = af.quotes.get(symbols="600519.SH", to_dataframe=True) # 约 3 秒刷新实时快照(symbols= 为关键字参)
d = af.depth.get("600519.SH") # 五档买卖盘
复权口径对照
baostock adjustflag | 含义 | AlphaFeed adjust |
|---|---|---|
"3" | 不复权 | "none" |
"2" | 前复权 | "forward" |
"1" | 后复权 | "backward" |
AlphaFeed 另有
forward_additive/backward_additive两种加法复权,共 5 种。复权数值不同源之间本就有差异,迁移后以单源自洽为准。
关键差异与坑
- 代码格式:baostock
sh.600519→ AlphaFeed600519.SH(前缀转后缀,大小写交易所码); - 类型:baostock 返回 str,必须手动转数值;AlphaFeed DataFrame 已带类型;
- 会话:不再需要
login()/logout(); - 覆盖:baostock 仅 A 股历史,AlphaFeed 补实时/盘口/多市场。
常见问题(FAQ)
Q:baostock 免费又稳,为什么迁? A:只做 A 股日频历史回测,baostock 很够用。需要实时快照、五档盘口、全市场批量或美股/港股时,baostock 无能为力。
Q:sh./sz. 前缀怎么转?
A:sh.600519→600519.SH、sz.000001→000001.SZ。可用 af.instruments.get() 批量核对交易所归属。
Q:复权能对上吗? A:不保证逐值相同,复权是口径问题,保持单源一致、可复现即可。
小结
baostock→AlphaFeed 省掉了 login/logout、字符串转类型和前缀码转换,并补上 baostock 最缺的实时、盘口、全市场批量与多市场。纯历史日频可留 baostock,需要实时/盘口/批量就迁。
相关链接:
- AlphaFeed 官网:https://alphafeed.org/
- Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
免责声明:文中代码仅供学习研究,不构成投资建议。市场有风险。