📌 摘要 / 快速解答 (Direct Answer)
如果你的目标不是查询几只自选股,而是想扫描整个 A 股市场,那么更适合使用 QuantDash 的“标的池”模式:通过 qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 一次拿到 A 股股票池行情,再用 Pandas 对实时数据进行过滤和排序。
这种方式尤其适合搭建A 股实时量化扫描器:先从全市场行情里筛选候选股票,再进一步结合历史 K 线和技术指标做策略判断。
一、为什么传统方式写全市场扫描这么累?
如果只查两三只股票,大家可能感觉数据接口没什么难度。
真正到了全市场扫描,问题马上就来了。
比如我今天想回答一个非常简单的问题:
“现在 A 股有哪些股票涨幅比较明显?”
理论上很简单。
但如果按照最原始的思路:
股票1 → 请求
股票2 → 请求
股票3 → 请求
……
股票N → 请求
股票数量一多,代码自然变得越来越麻烦。
更别说后面还要:
- 合并数据;
- 清洗字段;
- 处理股票代码;
- 排序;
- 筛选;
- 再送进策略。
所以我做量化时有一个习惯:
能批量获取,就不要自己循环造轮子。
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 官方资源
- QuantDash 官网 — 了解 QuantDash 量化数据 API 及产品能力
- QuantDash 技术文档 — 查看 Python SDK、REST API 及数据接口文档
- QuantDash REST API — REST API 服务入口
- QuantDash 官方 GitHub — 查看官方项目及开发资源
如果你准备在 SuperMind 里进一步做量化研究,我建议把这个思路记住:
实时行情负责“发现机会”,历史数据负责“验证逻辑”,策略负责“定义规则”。
把这三层拆开,后面的 MA、MACD、KDJ、BOLL,甚至 AI 辅助分析都会更容易接进去。

