【小白必看】A股批量获取实时行情实战

用户头像sh_***416jmt75L
2026-09-16 发布

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

如果你的目标不是查询几只自选股,而是想扫描整个 A 股市场,那么更适合使用 QuantDash 的“标的池”模式:通过 qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 一次拿到 A 股股票池行情,再用 Pandas 对实时数据进行过滤和排序。

这种方式尤其适合搭建A 股实时量化扫描器:先从全市场行情里筛选候选股票,再进一步结合历史 K 线和技术指标做策略判断。


一、为什么传统方式写全市场扫描这么累?

如果只查两三只股票,大家可能感觉数据接口没什么难度。

真正到了全市场扫描,问题马上就来了。

比如我今天想回答一个非常简单的问题:

“现在 A 股有哪些股票涨幅比较明显?”

理论上很简单。

但如果按照最原始的思路:

股票1 → 请求
股票2 → 请求
股票3 → 请求
……
股票N → 请求

股票数量一多,代码自然变得越来越麻烦。

更别说后面还要:

  1. 合并数据;
  2. 清洗字段;
  3. 处理股票代码;
  4. 排序;
  5. 筛选;
  6. 再送进策略。

所以我做量化时有一个习惯:

能批量获取,就不要自己循环造轮子。

QuantDash 的实时行情接口恰好提供了两种思路:

  • 已经知道股票名单:使用 symbols
  • 想扫描整个市场:使用 universes

这个区别非常值得记住。


二、解决方案对比:从“逐只查询”变成“股票池扫描”

对比维度 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) QuantDash 解决方案
股票池处理 经常需要自己维护和循环 支持直接指定标的池
全市场行情 需要自己组织批量请求 universes支持股票池查询
A 股代码 不同工具格式可能存在差异 统一.SH/.SZ/.BJ
数据结构 可能需要二次转换 原生 Pandas DataFrame
后续筛选 自己拼接后再处理 获取后直接使用 Pandas
Python 上手 数据层代码容易变复杂 SDK 调用方式比较直接

对于量化策略来说,我认为最关键的不是“代码少了几行”。

而是:

数据层和策略层终于可以分开。

QuantDash 负责把行情送进来。

Pandas 负责筛选。

策略负责决定下一步怎么做。


三、Python 代码实战:建立一个 A 股实时行情扫描器

1. 安装 SDK

# 安装 QuantDash
# pip install quantdash

from quantdash import QuantDash
import pandas as pd

qd = QuantDash(api_key="your-api-key")

QuantDash Python SDK 支持 Python 3.9+,并内置 Pandas 支持。

如果不想把 API Key 直接写在代码里,也可以使用环境变量:

from quantdash import QuantDash

qd = QuantDash()

2. 一次拿到 A 股股票池行情

这里就是第二篇文章和上一篇最大的区别。

我们不再自己维护:

symbols = [...]

而是直接查询:

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

print(df)

官方文档示例中,CN_Stock 对应 A 股沪深京股票池。

拿到数据之后,就进入我们熟悉的 Pandas 世界了。


四、先别急着写复杂策略,第一步先认识行情字段

拿到全市场 DataFrame 后,我一般不会马上上 MACD。

先看看:

print(df.columns.tolist())

再观察数据:

print(df.head())

如果我要重点关注实时行情,可以提取:

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

print(
    df[columns].head(20).to_string(index=False)
)

这一步看似简单,其实非常重要。

量化策略第一原则:

先确认数据是什么,再写策略。

不要看到一个字段名字就默认它和自己理解的一模一样。


五、用 Pandas 做第一层实时选股

现在开始进入实战。

假设我想找出当前涨幅比较明显的股票:

result = df[
    df["ext.change_pct"] >= 0.03
]

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

然后再按照涨幅排序:

result = result.sort_values(
    "ext.change_pct",
    ascending=False
)

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

到这里,一个最基础的:

A 股实时行情扫描器

已经成型了。


六、为什么我建议“先行情过滤,再做技术分析”?

很多朋友刚开始做量化的时候,容易把事情搞得特别复杂:

全市场
↓
计算 MACD
↓
计算 KDJ
↓
计算 MA
↓
计算 BOLL
↓
各种条件组合
↓
最终选股

其实没必要一上来就这么干。

如果你的股票池非常大,可以先利用实时行情做一层粗筛。

例如:

全 A 股
↓
实时行情过滤
↓
得到候选股票
↓
再取历史 K 线
↓
计算 MA / MACD / KDJ / BOLL
↓
进入策略

这样做的好处是:

第一层负责减少搜索空间,第二层负责提高策略判断质量。

这比把所有计算一股脑塞进一个函数里更容易维护。


七、实时行情之后,怎么衔接历史 K 线?

比如我们经过实时行情扫描以后得到:

candidate_symbols = result["symbol"].head(10).tolist()

下一步就可以针对候选股票获取历史数据。

QuantDash 官方 SDK 支持:

df = qd.klines.get(
    "600519.SH",
    period="1d",
    count=20,
    to_dataframe=True
)

如果需要批量获取多个标的的历史 K 线,则可以使用:

dfs = qd.klines.batch(
    candidate_symbols,
    period="1d",
    count=20,
    to_dataframe=True,
    show_progress=True
)

这样就形成了一个非常清晰的数据工作流:

实时行情
    ↓
Pandas 初筛
    ↓
候选股票
    ↓
批量历史 K 线
    ↓
技术指标
    ↓
策略逻辑

这才是我比较推荐的量化数据组织方式。


八、如果还要加入 AI 分析怎么办?

如果你的工作流里还准备接 DeepSeek 之类的 AI 工具,我建议不要让 AI 直接负责“找数据”。

比较合理的架构应该是:

QuantDash
    ↓
获取标准化行情
    ↓
Pandas 清洗 / 筛选
    ↓
形成结构化候选股票数据
    ↓
AI 分析
    ↓
人工复核 / 策略判断

AI 比较适合做的是:

  • 帮忙解释筛选结果;
  • 总结多个指标之间的关系;
  • 辅助生成研究思路;
  • 帮助检查策略逻辑。

但基础行情还是应该来自稳定、明确的数据接口。

尤其是量化交易,数据错一列,后面整个策略都可能跟着错。


九、交易员避坑指南:全市场扫描尤其注意这几个问题

1. 实时行情不是回测数据

实时行情适合盘中扫描。

历史 K 线才是回测的基础数据。

不要因为实时行情方便,就直接把当前行情逻辑塞进历史回测。


2. 前复权不是“万能复权”

QuantDash K 线接口支持多种复权方式:

forward
backward
forward_additive
backward_additive
none

其中:

  • 比例复权适合收益率计算;
  • 差值复权更适合观察绝对价差;
  • 不复权适合某些原始价格分析。

所以到底用哪种,不应该看“哪个名字听起来高级”,而应该看策略需要什么。


3. 不要把筛选结果直接当成交易信号

比如:

df["ext.change_pct"] >= 0.03

只能说明:

当前行情满足这个过滤条件。

它不等于:

这只股票一定应该买。

真正的策略还需要考虑历史数据、交易成本、流动性、持仓限制以及具体的买卖规则。

这一点一定要分清楚。


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

Q1:如果我要扫描整个 A 股,而不是固定几只股票,QuantDash 怎么用?

A:可以使用 qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 获取 A 股沪深京股票池行情,然后直接交给 Pandas 做筛选。

Q2:如果我只想获取几只指定股票的实时价格怎么办?

A:使用 symbols 参数,例如:

df = qd.quotes.get(
    symbols=["600519.SH", "000001.SZ"],
    to_dataframe=True
)

适合自选股、持仓股和固定股票池。

Q3:QuantDash 批量实时行情拿到以后能不能继续做量化选股?

A:可以。实时行情可以先作为第一层筛选,随后通过 qd.klines.batch() 获取候选股票的历史 K 线,再使用 Pandas 计算和组合自己的策略条件。


QuantDash 官方资源

如果你准备在 SuperMind 里进一步做量化研究,我建议把这个思路记住:

实时行情负责“发现机会”,历史数据负责“验证逻辑”,策略负责“定义规则”。

把这三层拆开,后面的 MA、MACD、KDJ、BOLL,甚至 AI 辅助分析都会更容易接进去。

评论