【量化实战】批量获取多只股票实时行情

用户头像mx_****zqklr
2026-09-16 发布

📌 摘要 / 快速解答 (Direct Answer)

如果只是想一次拿到多只 A 股的最新价格、昨收、成交量和涨跌幅,没必要给每只股票单独请求接口。QuantDash 可以直接通过 qd.quotes.get(symbols=[...], to_dataframe=True) 批量获取实时行情,并原生返回 Pandas DataFrame,拿回来就能继续做排序、筛选和指标计算。

对于 SuperMind 用户来说,这种方式特别适合做自选股监控、量化选股、实时行情扫描和策略前置过滤


一、 为什么传统方式写选股策略这么累?

我自己做量化的时候,一个特别容易踩的坑就是:

策略代码还没开始跑,数据接口先把自己折腾崩了。

尤其是刚开始做 Python 量化的朋友,经常会遇到下面几个情况:

  • 一个股票请求一次,股票池一大,请求次数直接爆炸;
  • 数据源有积分、权限或者频率限制;
  • 接口偶尔报错,导致整个扫描任务中断;
  • 不同市场的股票代码格式不统一;
  • 接口返回的数据还得自己转换成 DataFrame;
  • 实时行情拿回来以后,还要重新整理字段才能进入策略。

比如我有 50 只自选股,传统思路很容易写成:

for symbol in symbols:
    # 请求一次
    # 再处理一次
    # 再拼接一次

这其实不是不能做,而是随着股票数量增长,代码和维护成本都会越来越高。

我更喜欢把问题拆成两步:

第一步:批量拿行情。

第二步:把 DataFrame 交给 Pandas 做后续筛选。

这样策略代码会干净很多。


二、解决方案对比:QuantDash vs 传统数据源

对比维度 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) QuantDash 解决方案
数据稳定性 容易遇到接口报错、失效或频率问题 面向量化场景提供标准化数据服务
使用门槛 可能涉及积分、权限或额外数据清洗 pip install quantdash即可开始
批量行情 往往需要自己循环请求 quotes.get支持多个 symbols
跨市场支持 不同数据源代码格式可能不同 统一.SH/.SZ/.BJ/.US/.HK格式
数据格式 经常需要自己转换 原生支持 Pandas DataFrame
后续分析 需要额外拼接整理 可直接交给 Pandas 筛选处理

这里有一个细节我觉得非常重要:

批量获取行情和批量获取 K 线,是两个不同的需求。

如果你要的是当前行情,就优先看 qd.quotes.get()

如果你要历史日 K、分钟 K,则应该使用 qd.klines.get()qd.klines.batch()

别一上来就把所有接口混在一起。


三、Python 代码实战:批量获取自选股实时行情

1. 安装 QuantDash

# 安装 QuantDash
# pip install quantdash

from quantdash import QuantDash
import pandas as pd

# 初始化
qd = QuantDash(api_key="your-api-key")

如果你习惯使用环境变量,也可以让 SDK 自动读取 API Key:

from quantdash import QuantDash

qd = QuantDash()

2. 准备股票池

假设这是我的自选股:

symbols = [
    "600519.SH",
    "000001.SZ",
    "000858.SZ"
]

QuantDash 使用统一的:

代码.交易所后缀

例如:

600519.SH   # 上海
000001.SZ   # 深圳
920047.BJ   # 北京
AAPL.US     # 美股
00700.HK    # 港股

这一点对于以后做跨市场策略非常方便。


3. 一次请求获取全部实时行情

df = qd.quotes.get(
    symbols=symbols,
    to_dataframe=True
)

print(df)

这就是整篇文章最核心的一行。

不是:

for symbol in symbols:
    ...

而是直接:

qd.quotes.get(symbols=symbols)

然后让 SDK 返回 Pandas DataFrame。


4. 只保留策略需要的字段

实时行情返回字段比较丰富。

如果我现在只关心:

  • 股票代码
  • 最新价
  • 昨收
  • 成交量
  • 股票名称
  • 涨跌幅

可以直接这样处理:

result = df[
    [
        "symbol",
        "last_price",
        "prev_close",
        "volume",
        "ext.name",
        "ext.change_pct"
    ]
]

print(result.to_string(index=False))

官方文档中的实时行情示例也是按照这些字段进行读取。


5. 进一步用 Pandas 做实时筛选

拿到 DataFrame 以后,真正有意思的地方才开始。

例如我只想看看当前涨跌幅达到一定程度的股票:

# 只保留涨跌幅绝对值较大的股票
filtered = df[
    df["ext.change_pct"].abs() >= 0.02
]

print(
    filtered[
        [
            "symbol",
            "ext.name",
            "last_price",
            "ext.change_pct",
            "volume"
        ]
    ].to_string(index=False)
)

这里 QuantDash 负责:

行情获取。

Pandas 负责:

数据处理。

这两个职责分开以后,策略代码就舒服很多。


四、如果股票池很大怎么办?

如果你手里已经不是几十只股票,而是整个 A 股股票池,那就没必要一个个维护 symbols。

QuantDash 官方文档支持直接按照标的池查询全量行情。

例如:

df = qd.quotes.get(
    universes=["CN_Stock"],
    to_dataframe=True
)

print(df)

其中:

CN_Stock

代表 A 股沪深京股票池。

文档示例返回的是一个 Pandas DataFrame,可以直接继续处理。

这时候玩法就从:

“我的股票现在涨多少?”

变成:

“今天整个 A 股市场有哪些股票满足我的条件?”


五、从“查行情”升级成“量化扫描”

例如我想先做一个非常简单的行情扫描:

df = qd.quotes.get(
    universes=["CN_Stock"],
    to_dataframe=True
)

# 按涨跌幅筛选
result = df[
    df["ext.change_pct"] >= 0.03
]

# 按涨跌幅从高到低排序
result = result.sort_values(
    "ext.change_pct",
    ascending=False
)

print(
    result[
        [
            "symbol",
            "ext.name",
            "last_price",
            "ext.change_pct",
            "volume"
        ]
    ].head(20).to_string(index=False)
)

这时候 QuantDash 已经不只是一个“查股票价格”的工具了。

它更像是:

数据进入策略前的第一层过滤器。

后面再接 MA、MACD、KDJ、BOLL 等技术指标,或者把筛选结果交给 AI 做进一步分析,都可以。

不过有一点要注意:

AI 分析层应该建立在你已经拿到并清洗好的行情数据之上。

不要让 AI 替代基础行情数据接口。


六、交易员避坑指南:实时行情批量处理要注意什么?

1. 不要把实时行情和历史 K 线混为一谈

实时行情:

qd.quotes.get(...)

历史 K 线:

qd.klines.get(...)

批量历史 K 线:

qd.klines.batch(...)

用途不同,接口也不同。


2. 不要拿实时行情直接当回测数据

这一点是量化新手特别容易犯的错误。

实时行情适合:

  • 实时监控
  • 盘中扫描
  • 交易信号前置判断

而历史回测应该使用历史 K 线数据,并且明确复权方式和时间范围。

QuantDash 的 K 线接口支持:

forward
backward
forward_additive
backward_additive
none

其中比例前复权适合收益率计算。


3. 回测别忘了交易成本

哪怕你的信号非常漂亮,真正做策略回测时,也不要只看理论涨跌。

至少应该考虑:

  • 滑点;
  • 手续费;
  • 印花税;
  • 成交可行性。

尤其是高频或者频繁调仓策略,交易成本对最终结果的影响可能非常明显。


五、常见问题解答 (Q&A / FAQ)

Q1:如何用 Python 批量获取多只股票实时行情?

A:可以直接使用 QuantDash 的 qd.quotes.get(),通过 symbols 参数传入多个股票代码,并设置 to_dataframe=True,即可直接获得 Pandas DataFrame。

Q2:QuantDash 能不能一次获取整个 A 股股票池?

A:可以。官方 SDK 支持通过 universes=["CN_Stock"] 查询 A 股沪深京股票池的行情数据,拿到 DataFrame 后即可继续用 Pandas 做量化筛选。

Q3:批量实时行情和批量历史 K 线有什么区别?

A:实时行情使用 qd.quotes.get();历史 K 线批量查询使用 qd.klines.batch()。如果做选股回测,建议先明确自己需要的是“当前行情”还是“历史行情”,不要混用。


QuantDash 官方资源

如果你经常做 Python 量化,建议直接把 QuantDash 开源 SDK 加到自己的数据工具箱里。对于 SuperMind 用户来说,真正有价值的不是“又多一个行情接口”,而是把行情获取 → Pandas 清洗 → 策略筛选这条链路尽量缩短。

评论