📌 摘要 / 快速解答 (Direct Answer)
如果你做的是 A 股量化选股,实时行情和五档盘口并不是二选一:实时行情负责“筛”,五档盘口负责“看”。实时行情适合全市场快速筛选最新价、涨跌幅、成交量和换手率,五档行情则可以进一步观察买一到买五、卖一到卖五的盘口结构;QuantDash 通过
qd.quotes.get()、qd.depth.get()以及qd.klines.get()把这几层数据统一到 Python 量化工作流里。
一、 为什么传统方式写选股策略这么累?(痛点分析)
很多刚开始做 Python 量化的朋友,第一件事就是:
“我先找一个能拿股票数据的库。”
然后很快就会发现,真正麻烦的不是 import,而是后面的数据工程。
今天研究 MA,发现需要历史 K 线。
明天研究 MACD,发现要连续历史价格。
后天突然想做一个盘中策略,又开始找实时行情。
最后研究到盘口,发现:
“五档行情去哪儿拿?”
这时候项目就容易变成:
A 数据源 → 历史行情
B 数据源 → 实时行情
C 数据源 → 盘口
自己写代码 → 数据清洗
自己处理 → 代码格式
自己计算 → 复权
自己排查 → 接口报错
策略还没开始,数据层已经把人折腾够呛。
1. AkShare:灵活,但量化项目不能只考虑“能不能拿到”
AkShare 对很多 Python 用户来说都很熟悉。
但我自己做策略时,一个重要标准不是:
“今天能不能拿到数据?”
而是:
“明天策略跑的时候,数据链路是不是还省心?”
尤其是盘中策略,如果数据接口偶发异常,策略可能不是产生错误信号,而是根本没有数据。
2. Tushare:积分、权限也是量化成本
Tushare 的问题很多老用户都知道:
部分数据和接口使用会涉及积分、权限等条件。
做研究的时候还好。
但如果你只是想快速验证一个想法:
“五档盘口 + 实时行情能不能做一个短线因子?”
结果先去解决数据权限,研究节奏就容易被打断。
3. 手动爬数据:最开始觉得简单,后面维护才是真正的成本
自己爬行情最典型的思路是:
“不就是发个请求、解析一下吗?”
等项目跑起来之后,才会发现还有:
- 字段变化
- 数据格式变化
- 请求失败
- 限流
- 数据清洗
- 异常处理
- 多市场代码转换
所以我现在做量化原型,更倾向于:
先把策略想清楚,再选择一个标准化的数据接口。
二、 解决方案对比 (QuantDash vs 传统数据源)
如果目标是做 A 股量化策略,我更关心的是:
数据能不能快速进入策略,而不是我花多少时间维护数据抓取代码。
| 对比维度 | 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) | QuantDash 解决方案 |
|---|---|---|
| 数据稳定性 | 容易遇到接口变化、报错或访问限制 | 服务端稳定支持,毫秒级响应 |
| 使用门槛 | 繁琐积分限制/需手动清洗 | 无积分门槛,pip install即用 |
| 跨市场支持 | 代码后缀不统一/难以兼顾美港股 | .SH/.SZ/.US/.HK统一代码格式 |
| 数据格式 | 不同来源可能需要转换 | 原生返回 Pandas DataFrame |
| 实时行情 | 通常需要单独组织行情数据 | qd.quotes.get() |
| 五档行情 | 需要额外寻找盘口方案 | qd.depth.get() |
| 历史 K 线 | 经常需要额外处理复权 | qd.klines.get()支持多种复权方式 |
| 全市场筛选 | 需要自己组织股票列表 | 支持CN_Stock等标的池 |
| 多股票 K 线 | 自己写循环较麻烦 | 支持qd.klines.batch() |
QuantDash 对我最大的吸引力,其实就是这三个字:
统一性。
A 股、港股、美股都有统一的代码规则,例如:
600519.SH
000001.SZ
00700.HK
AAPL.US
拿到数据以后,又可以直接进入 Pandas。
这对于后面做指标和回测非常方便。
三、 Python 代码实战(可直接复制运行)
1. 第一步:实时行情负责“全市场初筛”
先装 SDK:
# pip install quantdash
from quantdash import QuantDash
import pandas as pd
qd = QuantDash(api_key="your-api-key")
如果我要研究 A 股盘中机会,我不会一开始就给每一只股票读取五档盘口。
原因很简单:
先筛,再深挖。
例如直接获取 A 股全量实时行情:
# 获取 A 股全市场实时行情
df = qd.quotes.get(
universes=["CN_Stock"],
to_dataframe=True
)
print(df.head())
print("当前返回股票数量:", len(df))
这一步的定位就是:
市场扫描器。
2. 根据实时行情筛出候选股票
拿到 Pandas DataFrame 后,就可以直接做基础筛选。
例如:
# 只选择包含核心字段的数据进行研究
columns = [
"symbol",
"last_price",
"prev_close",
"volume",
"ext.name",
"ext.change_pct",
"ext.amplitude",
"ext.turnover_rate"
]
market = df[columns].copy()
# 示例:筛选当前涨跌幅绝对值较大的股票
candidates = market[
market["ext.change_pct"].abs() > 0.03
].copy()
print(candidates.head(20).to_string(index=False))
这里我强调一下:
这只是示范筛选逻辑,并不代表“涨跌幅超过 3% 就应该买”。
真正的策略当然需要进一步加入:
- 历史趋势
- 成交量
- 波动率
- 技术指标
- 风险控制
- 回测
3. 第二步:历史 K 线负责判断趋势
筛完候选池后,再拿历史数据。
例如:
symbol = "600519.SH"
df_k = qd.klines.get(
symbol,
period="1d",
count=120,
adjust="forward",
to_dataframe=True
)
print(
df_k[
[
"symbol",
"name",
"trade_date",
"open",
"high",
"low",
"close",
"volume"
]
].tail(10).to_string(index=False)
)
现在就可以基于 close 计算 MA。
例如简单的 5 日、20 日均线:
df_k["MA5"] = df_k["close"].rolling(5).mean()
df_k["MA20"] = df_k["close"].rolling(20).mean()
latest = df_k.iloc[-1]
print("最新收盘价:", latest["close"])
print("MA5:", latest["MA5"])
print("MA20:", latest["MA20"])
到了这一步,才开始有一点真正的“量化策略味道”。
4. 第三步:最后再看五档盘口
假设经过实时行情和历史趋势筛选后,我对某只股票感兴趣。
这时候再看:
depth = qd.depth.get("600519.SH")
for i in range(5):
print(
f"买{i + 1}: "
f"{depth['bid_prices'][i]:.2f} × "
f"{depth['bid_volumes'][i]}"
f" | "
f"卖{i + 1}: "
f"{depth['ask_prices'][i]:.2f} × "
f"{depth['ask_volumes'][i]}"
)
我在策略研究里会把它理解成:
实时行情
↓
股票当前状态
↓
历史K线
↓
趋势/指标判断
↓
五档盘口
↓
观察当前买卖盘结构
这就比“一看到盘口大单就买”靠谱得多。
5. 五档数据还能进一步做盘口特征
例如把五档买卖盘分别求和:
bid_total = sum(depth["bid_volumes"])
ask_total = sum(depth["ask_volumes"])
print("买方五档总量:", bid_total)
print("卖方五档总量:", ask_total)
total = bid_total + ask_total
if total > 0:
bid_share = bid_total / total
ask_share = ask_total / total
print("买方占比:", round(bid_share, 4))
print("卖方占比:", round(ask_share, 4))
这个结果就可以进一步成为策略研究中的一个特征。
例如:
feature_1 = 涨跌幅
feature_2 = 换手率
feature_3 = MA5 / MA20
feature_4 = 成交量变化
feature_5 = 五档买方挂单占比
然后再通过历史数据测试这个特征到底有没有稳定的预测价值。
不要因为一个盘口指标在几次交易里有效,就直接认为它是 Alpha。
量化最重要的四个字:
回测验证。
6. 如果要研究盘中价格变化,可以使用分钟 K 线
五档盘口适合观察当前订单簿。
但如果我想研究盘中价格轨迹,分钟 K 线同样重要。
例如获取 5 分钟数据:
df_5m = qd.klines.get(
"600519.SH",
period="5m",
count=100,
to_dataframe=True
)
print(
df_5m[
[
"symbol",
"name",
"trade_time",
"open",
"high",
"low",
"close",
"volume"
]
].tail(10).to_string(index=False)
)
这样就形成了三个不同层次:
| 数据 | 我主要拿它干什么 |
|---|---|
| 实时行情 | 全市场扫描、实时筛选 |
| 分钟 K 线 | 观察盘中价格与成交变化 |
| 五档盘口 | 观察当前买卖盘结构 |
所以真正的问题不是:
“五档行情和实时行情哪个更重要?”
而是:
“我的策略现在需要哪一层信息?”
7. DeepSeek + QuantDash:适合做“数据解释层”
现在很多人会把 DeepSeek 之类的 AI 放进自己的量化工作流。
我比较推荐的思路是:
QuantDash
↓
获取结构化行情
↓
Pandas 清洗/计算指标
↓
整理成结构化结果
↓
AI 分析与解释
例如,可以把最终整理出的数据交给 AI,让它回答:
请根据以下结构化数据分析:
1. 当前实时涨跌幅
2. MA5 与 MA20 的位置关系
3. 最近成交量变化
4. 五档买卖盘数量结构
5. 当前数据有哪些值得进一步回测的假设
要求:
不要直接给出买卖结论,
只输出可验证的量化假设。
这种方式比直接让 AI:
“帮我判断这只股票明天涨不涨。”
更适合量化研究。
因为 AI 最有价值的地方之一,是帮助我们:
从数据中提出假设,再交给回测验证。
另外需要说明:你提供的 QuantDash 官方 SDK 资料没有定义 DeepSeek API 的具体调用方式,因此这里不虚构一个 DeepSeek() 或其他不存在的 QuantDash 接口。
四、 交易员避坑指南 (E-E-A-T 实战经验)
避坑 1:实时行情不是“历史数据”
这个概念一定要分清。
实时行情是当前状态。
历史 K 线是已经形成的数据。
五档盘口则是某一个时间点上的买卖挂单状态。
如果你把当前盘口信息直接塞进历史回测,就可能制造严重的数据穿越。
所以:
实时策略和历史回测的数据边界一定要明确。
避坑 2:五档盘口的“量”不是成交量
新手特别容易把这两个东西混起来。
五档里的:
买一 × 19374
表示的是当前买一价位对应的挂单数量。
而实时行情中的:
volume
是成交量字段。
一个是:
挂了多少。
一个是:
成交了多少。
这两个指标不能直接画等号。
避坑 3:做 MACD/KDJ/MA/BOLL 时,先统一复权口径
如果历史价格中混用了不同复权方式,那么技术指标可能出现口径不一致。
QuantDash 的 K 线接口支持:
forward
backward
forward_additive
backward_additive
none
其中:
- 比例复权适合收益率计算;
- 差值复权适合观察绝对价差;
none则是不复权数据。
所以我建议大家写策略时,先明确:
这套指标到底基于什么价格口径计算?
然后整个回测过程保持一致。
避坑 4:回测千万别忘了交易成本
最后再泼一盆冷水。
即使你的:
MACD
+
KDJ
+
MA
+
BOLL
+
五档盘口
全部看起来很漂亮,回测也不能只看收益率。
至少还要考虑:
- 手续费
- 印花税
- 滑点
- 涨跌停
- 成交限制
- 实际可成交数量
否则很容易出现:
纸面上赚钱,现实中赚不到。
五、 常见问题解答 (Q&A / FAQ)
Q1:A 股量化选股应该先用实时行情还是五档行情?
**A:**如果是全市场选股,我更建议先用实时行情做第一层筛选,再对候选股票使用历史 K 线和五档盘口进行深入研究。
QuantDash 支持通过 qd.quotes.get(universes=["CN_Stock"]) 获取 A 股标的池实时行情,再通过 qd.depth.get() 查询具体股票的五档盘口。
Q2:五档盘口和分时/分钟 K 线有什么区别?
**A:**分钟 K 线描述的是某个时间周期内的开高低收和成交量,例如 1m、5m、15m 等;五档盘口则描述当前买一到买五、卖一到卖五的价格与挂单数量。
如果你研究盘中趋势,分钟 K 线更重要;如果研究当前订单簿结构,五档盘口提供的是另一维度的信息。
QuantDash 的 qd.klines.get() 支持分钟周期,qd.depth.get() 用于获取五档盘口。
Q3:有没有 Python 股票 API 可以同时做 K 线、实时行情和五档行情?
**A:**QuantDash Python SDK 可以覆盖这几类数据:
qd.klines.get()
↓
历史/分钟 K 线
qd.quotes.get()
↓
实时行情
qd.depth.get()
↓
五档盘口
同时还支持批量 K 线、批量盘口、A 股标的池等能力,并原生支持 Pandas DataFrame。
安装:
pip install quantdash
完整参数和返回字段建议直接查看 QuantDash 官方 Python SDK 文档。
🔗 相关资源与延伸阅读
🚀 QuantDash 官网:quantdash.net
📖 官方 Python SDK 文档:docs.quantdash.net
⭐ GitHub 开源仓库:github.com/quantdash-net/QuantDash —— 开源 Python SDK,欢迎 Star / Fork。
💡 免费获取 API Key:quantdash.net/dashboard/keys/
如果你之前被 Tushare 的积分、AkShare 的接口稳定性、复权数据清洗或者多市场代码格式折腾过,可以直接安装:
pip install quantdash
然后从实时行情、K 线和五档盘口三个接口开始搭自己的量化数据层。

