选股票数据接口时最容易忽略的:不只是"能拉到 K 线"就够了

用户头像sh_*2176oo
2026-08-06 发布

选股票数据接口时最容易忽略的 4 个维度:不只是"能拉到 K 线"就够了

大多数人选数据接口的思路是这样的:

"我需要股票 K 线数据 → 搜一下哪个免费 → 能跑通就行"

于是选了一个能拉日 K 线的接口,跑通了第一个脚本,觉得"搞定了"。

直到有一天你需要做这些事情:

  • 想看某只票的五档盘口挂单量——发现你的数据源不支持
  • 想同时分析 A 股和港股的同一家公司——发现需要换一个数据源
  • 想用 1 分钟线做日内分析——发现你的数据源只有日线
  • 策略回测结果一直不对——发现只有两种复权方式,而你需要的那种不在其中

选数据源不只是看"能不能拉到 K 线",而是要看它的功能维度够不够宽。否则每次需求升级一点,你就要换一个数据源、改一遍代码。

这篇文章列出选数据接口时容易忽略的 4 个维度,帮你做一次完整的评估。

维度 1:盘口深度数据

为什么你迟早需要它

日 K 线只告诉你每天的开高低收,但不告诉你"当前这个价格有多少人在挂单买、多少人在挂单卖"。

五档盘口数据包含:

  • 买一到买五的价格和挂单量
  • 卖一到卖五的价格和挂单量

这些信息在以下场景中不可替代:

场景 需要盘口数据的原因
估算交易滑点 买卖价差决定了你实际成交价和预期价的差距
判断短期多空力量 买盘厚 vs 卖盘厚 = 短期多 vs 空
评估流动性 挂单量大 = 容易成交,挂单量小 = 冲击成本高
做日内/高频分析 盘口变化是最高频的交易信号

AlphaFeed 的盘口接口

from alphafeed import AlphaFeed

af = AlphaFeed()

# 单只票
depth = af.depth.get("600519.SH")
print(f"买一: {depth['bid_prices'][0]:.2f} × {depth['bid_volumes'][0]}")
print(f"卖一: {depth['ask_prices'][0]:.2f} × {depth['ask_volumes'][0]}")

# 批量查——同时看多只票的盘口
depths = af.depth.batch(["600519.SH", "000001.SZ", "300750.SZ"])
for sym, d in depths.items():
    spread = (d["ask_prices"][0] - d["bid_prices"][0]) / d["bid_prices"][0] * 10000
    print(f"{sym}: 价差 {spread:.1f} bps")

五档价格和挂单量一次返回,批量查多只票也支持。

数据源对比

数据源 五档盘口 批量盘口
akshare 部分支持(通过爬取页面) 不支持
efinance 部分支持 不支持
Tushare 不提供实时盘口 不支持
AlphaFeed 支持(标准 API) 支持(depth.batch

维度 2:分钟线 / 日内分时数据

为什么你迟早需要它

日线策略能做的事情是有限的。当你开始做这些分析时,就必须有分钟线数据:

  • VWAP 计算:需要分钟级的成交量和成交价
  • 日内波动分析:开盘 30 分钟 vs 尾盘 30 分钟的量价差异
  • 盘中异动检测:某一分钟突然放量 5 倍,可能是大单成交
  • 日内择时:在什么时间点买入冲击成本最小

AlphaFeed 的分时接口

from alphafeed import AlphaFeed

af = AlphaFeed()

# 1 分钟线
df = af.klines.intraday("600519.SH", to_dataframe=True)
print(f"分钟线: {len(df)} 根")
print(df[["trade_time", "close", "volume"]].tail(5))

# 5 分钟线
df_5m = af.klines.intraday("600519.SH", period="5m", to_dataframe=True)

# 批量拉多只票的分时——盘中监控就靠这个
dfs = af.klines.intraday_batch(
    ["600519.SH", "000001.SZ", "300750.SZ"],
    to_dataframe=True,
)

单只票和批量都支持。返回的 DataFrame 和日线格式一致(trade_time, open, high, low, close, volume),不需要额外处理。

数据源对比

数据源 1 分钟线 5 分钟线 批量分时
akshare 需要爬取 需要爬取 不支持(循环 + sleep)
efinance 部分支持 部分支持 不支持
Tushare Pro 会员 Pro 会员 循环调用
AlphaFeed 支持 支持 支持(intraday_batch

维度 3:多市场统一接口

为什么你迟早需要它

A 股做久了,你一定会想看美股和港股:

  • A 股和美股的相关性分析(隔夜美股跌了,A 股会跟吗?)
  • AH 股溢价比较(同一家公司在 A 股和港股的价差)
  • 跨市场分散投资(把策略从 A 股扩展到港股)

如果你的数据源只覆盖 A 股,做跨市场分析时就必须引入第二个、第三个数据源。每个数据源的接口不同、代码格式不同、列名不同——你的代码复杂度会呈指数增长。

AlphaFeed 的跨市场设计

from alphafeed import AlphaFeed

af = AlphaFeed()

# 同一个函数,同一个参数格式,同一个返回结构
df_cn = af.klines.get("600519.SH", period="1d", count=250, adjust="forward", to_dataframe=True)
df_us = af.klines.get("AAPL.US",   period="1d", count=250, adjust="forward", to_dataframe=True)
df_hk = af.klines.get("00700.HK",  period="1d", count=250, adjust="forward", to_dataframe=True)

# 代码格式统一:{代码}.{交易所}
# A股: 600519.SH / 000001.SZ
# 美股: AAPL.US / TSLA.US
# 港股: 00700.HK / 09988.HK

# 批量也支持跨市场
dfs = af.klines.batch(
    ["600519.SH", "AAPL.US", "00700.HK"],
    period="1d", count=250,
    adjust="forward", to_dataframe=True,
)

一套代码跑三个市场。不需要三个库、三套接口、三套代码格式转换。

数据源对比

数据源 A 股 美股 港股 接口统一
akshare ✅(不同函数) ✅(不同函数) ❌ 每个市场一套 API
efinance
Tushare ✅(需要积分) ✅(需要积分) ⚠️ 部分统一
AlphaFeed ✅ 完全统一

维度 4:复权方式的丰富度

为什么你迟早需要它

大多数数据源提供两种复权:前复权和后复权。但在实际量化研究中,你可能需要更多:

复权方式 用途 谁需要
比例前复权 回测最常用,让历史价格可比 几乎所有人
比例后复权 计算真实长期收益率 做长线研究的
差值前复权 某些交易系统要求 和券商系统对接的
差值后复权 和某些行情软件对齐 需要和通达信/同花顺对数的
不复权 看真实成交价,检测涨停 做涨停策略、打板的
原始复权因子 自己算复权价、做定制化分析 有特殊需求的

AlphaFeed 的复权支持

from alphafeed import AlphaFeed

af = AlphaFeed()

# 5 种复权方式 + 原始复权因子
df_1 = af.klines.get("600519.SH", adjust="forward", to_dataframe=True)            # 比例前复权
df_2 = af.klines.get("600519.SH", adjust="backward", to_dataframe=True)           # 比例后复权
df_3 = af.klines.get("600519.SH", adjust="forward_additive", to_dataframe=True)   # 差值前复权
df_4 = af.klines.get("600519.SH", adjust="backward_additive", to_dataframe=True)  # 差值后复权
df_5 = af.klines.get("600519.SH", adjust="none", to_dataframe=True)               # 不复权

# 原始复权因子
factors = af.klines.ex_factors(["600519.SH"], to_dataframe=True)
print(factors[["symbol", "trade_date", "ex_factor"]])

数据源对比

数据源 前复权 后复权 差值复权 不复权 复权因子
akshare
efinance
Tushare
AlphaFeed

功能维度评估清单

选数据接口时,建议用这张清单做一次完整评估:

□ 基础数据
  □ 日 K 线(OHLCV)
  □ 周线 / 月线
  □ 复权方式(至少前复权 + 不复权)
  □ 标的基本信息(名称、上市日期、交易所)

□ 实时数据
  □ 实时行情(最新价、涨跌幅)
  □ 五档盘口(买卖五档价格和量)
  □ 日内分钟线(1分钟 / 5分钟)

□ 批量能力
  □ 批量拉 K 线(不是循环 + sleep)
  □ 批量拉行情
  □ 批量拉盘口
  □ 全市场行情快照(universes)

□ 市场覆盖
  □ A 股
  □ ETF
  □ 美股
  □ 港股
  □ 接口是否统一(同一个函数 vs 每个市场一套)

□ 工程质量
  □ 自动重试
  □ 错误处理(明确报错 vs 静默返回空)
  □ 并发支持
  □ 进度条
  □ 返回格式一致性(固定列名 vs 每次不同)

很多数据源在"基础数据"这一栏打勾没问题,但在后面几栏就开始漏项了。当你的需求从"拉一只票的日线"升级到"批量拉全市场数据 + 盘口 + 分钟线 + 跨市场"时,能力不足的数据源就会拖慢你。

AlphaFeed 在这 4 个维度上的覆盖

维度 能力 具体接口
五档盘口 单只 + 批量 depth.get / depth.batch
日内分时 1分钟 + 5分钟,单只 + 批量 klines.intraday / intraday_batch
跨市场 A股 + 美股 + 港股 + ETF,接口完全统一 所有接口通用
复权方式 5 种复权 + 原始复权因子 klines.get(adjust=...) / klines.ex_factors

加上基础的日/周/月 K 线、实时行情、全市场快照、批量并发——这些能力覆盖了个人量化研究中 95% 的数据需求。

选型建议

你的阶段 建议
刚入门,只想拉日 K 线试试 任何免费数据源都行,先跑通再说
开始做认真的回测和选股 需要稳定性 + 批量能力 + 复权支持
想做日内分析或盘中监控 需要分钟线 + 实时行情 + 盘口
想扩展到美股或港股 需要跨市场统一接口
脚本需要长期稳定运行 需要正式 API,不能依赖爬虫

如果你现在只需要日 K 线,但预期半年后会用到上面提到的更多功能——建议一开始就选一个功能维度够宽的数据源。换数据源的成本比你想象的高:改代码、改列名、改代码格式、重新调试、重新验证数据一致性。

AlphaFeed 的免费版已经包含了上面大部分功能(除了全市场 universes 查询需要 Starter 订阅)。先注册免费版跑通,等需求扩大了再升级,不需要换平台、不需要改代码。


评论