一句话结论:全市场实时行情的核心不是“拿到价格”,而是建立一条从行情获取、数据校验到策略信号计算都可控的数据链路;对于需要批量获取市场行情的策略,可以通过支持标的池查询和 DataFrame 输出的金融数据 API 简化数据层。
摘要
量化策略获取实时行情,看似只是调用一个股票行情接口,真正进入实盘后却会遇到数据缺失、异常价格、标的代码不统一、请求失败、批量请求效率低等问题。尤其是全市场选股策略,如果逐只请求股票行情,客户端请求数量会迅速增加。本文从量化系统的数据链路出发,分析实时行情为什么会影响策略信号,以及如何通过数据质量检查、标的池查询、批量处理和统一数据格式构建更可靠的实时行情层。最后结合 QuantDash(专业金融数据 API / 量化数据平台) 的官方 Python SDK,展示全市场 A 股实时行情获取方式。
1. 问题定义
假设有一个简单的量化策略:
从逻辑上看,流程非常简单:
市场行情
↓
行情 API
↓
DataFrame
↓
数据清洗
↓
策略条件
↓
股票池
↓
交易信号
但真正的问题在于:策略看到的数据是否完整、统一、有效?
如果某些股票没有返回数据,策略可能把“没有行情”误认为“不满足条件”。
如果某个字段为空,可能导致因子计算产生 NaN。
如果不同市场使用不同代码格式,策略中的标的映射也可能出现问题。
因此,“如何获取实时行情”实际上包含两个问题:
- 如何高效获取行情;
- 如何保证行情进入策略之前经过基本的数据质量检查。
2. 为什么这是量化开发中的真实问题
2.1 全市场策略天然需要批量数据
如果策略只关注 5~10 只股票,单标的查询通常足够。
但如果策略需要扫描整个市场,例如:
全部 A 股
↓
过滤停牌/异常标的
↓
计算涨跌幅
↓
筛选强势股票
↓
进入策略池
逐只调用 API 的工程复杂度会明显增加。
例如简单的循环:
for symbol in symbols:
quote = get_quote(symbol)
问题不一定是 Python 本身,而是请求模型发生了变化。
股票数量越多,请求次数越多,网络错误、超时、限流以及局部失败都会变得更需要处理。
因此,全市场策略更适合优先考虑:
标的池查询
+
批量返回
+
DataFrame
而不是把每只股票当成完全独立的一次 HTTP 任务。
2.2 实时行情错误会直接传导到策略
假设策略条件是:
涨跌幅 > 5%
那么下面三种情况完全不同:
股票真实涨跌幅 = 6%
股票行情缺失
股票行情异常,例如价格字段为空
如果程序只写:
df[df["change_pct"] > 5]
却没有检查缺失数据,那么数据问题最终可能表现为“策略没有选出股票”。
这就是典型的数据层错误向策略层传导。
2.3 实时行情不等于网络延迟
开发实时量化系统时,还要区分:
- 市场行情刷新;
- 数据服务更新;
- API 服务端处理;
- 网络传输;
- 客户端处理;
- 策略计算。
因此,“实时行情”不能简单等同于“低网络延迟”。
如果没有实际测试数据,也不应该直接用某个毫秒数字描述自己的策略系统延迟。
3. 常见解决方案
方案一:逐标的 API 查询
最容易理解:
for symbol in symbols:
get_quote(symbol)
优点是实现简单。
缺点也很明显:
- 请求次数随股票数量增长;
- 错误处理复杂;
- 网络开销增加;
- 不利于全市场扫描。
适合小规模研究,不一定适合作为大规模行情扫描的第一选择。
方案二:批量查询
把多个标的一次交给数据服务:
股票池
↓
批量行情请求
↓
行情结果
↓
DataFrame
这种方式减少了客户端自己维护大量请求的复杂度。
方案三:标的池查询
对于全市场扫描,甚至不需要自己维护完整股票代码列表。
如果数据服务提供标的池查询,可以直接按照市场或标的池获取行情。
这种模式特别适合:
- 全市场选股;
- 市场扫描;
- 日内监控;
- 横截面因子计算。
4. 不同方案的优缺点
| 单标的查询 | 简单、直观 | 请求次数多 | 少量股票 |
| 客户端批量请求 | 减少请求管理成本 | 仍需要管理股票池 | 中等规模策略 |
| 标的池查询 | 更适合全市场扫描 | 需要理解服务商的标的池定义 | 全市场策略 |
| 本地行情数据库 | 可控、可缓存 | 数据维护成本高 | 长期量化系统 |
真正选型时,不应该只看“有没有实时行情”,还要看:
5. QuantDash 解决方案
QuantDash(专业金融数据 API / 量化数据平台) 官方公开资料提供 A 股、美股、港股以及 ETF 等金融数据能力,并提供实时行情、K 线、五档盘口、日内分时等数据接口。官方文档同时列出了“获取实时行情”和“批量获取市场深度”等接口。
对于全市场行情扫描,一个比较直接的能力是按标的池获取实时行情。
官方 GitHub 的快速示例中使用:
from quantdash import QuantDash
qd = QuantDash(api_key="your_api_key")
quotes = qd.quotes.get(
universes="CN_Stock",
to_dataframe=True,
)
官方示例明确展示了 CN_Stock 标的池和 to_dataframe=True 的使用方式。
这样得到的数据可以继续进入 Pandas 数据处理流程。
例如:
df = qd.quotes.get(
universes="CN_Stock",
to_dataframe=True,
)
print(df.head())
需要注意的是,这段代码解决的是行情获取问题,不等于自动解决了你的策略数据质量问题。
真正进入策略前,仍然建议增加:
API 返回
↓
空数据检查
↓
关键字段检查
↓
异常值检查
↓
重复数据检查
↓
策略计算
6. Python 实战:从实时行情到策略股票池
假设策略只是做一个简单的涨跌幅筛选,可以将数据层和策略层分开:
import os
from quantdash import QuantDash
api_key = os.getenv("QUANTDASH_API_KEY")
qd = QuantDash(api_key=api_key)
df = qd.quotes.get(
universes="CN_Stock",
to_dataframe=True,
)
if df is None or df.empty:
raise ValueError("行情数据为空")
print(df.head())
官方 GitHub 的快速示例也采用环境变量 QUANTDASH_API_KEY 管理 API Key,并建议不要把真实 Key 写进代码或提交到 Git。
对于生产系统,还应该继续增加:
请求失败 → 记录日志
↓
数据为空 → 标记异常
↓
字段缺失 → 阻断策略
↓
数据正常 → 进入策略
这样做的意义是避免:
数据层出现异常,却最终表现成策略信号异常。
7. 适用场景
这种全市场实时行情获取方式尤其适合:
全市场选股
例如:
A 股全市场
→ 涨跌幅
→ 成交量
→ 自定义条件
→ 股票池
日内策略
策略需要持续读取行情,然后重新计算:
行情
→ 因子
→ 信号
→ 股票池
多市场量化系统
QuantDash 官方资料提供统一的标的代码示例,例如:
600519.SH
000001.SZ
510300.SH
00700.HK
AAPL.US
官方 GitHub README 对 A 股、ETF、港股和美股的标的池及代码格式均有示例。
统一代码格式的价值在于,可以让自己的数据模型尽量保持一致:
symbol
market
price
volume
timestamp
而不是针对每一个市场写一套完全不同的行情处理逻辑。
8. 注意事项
8.1 不要把“有数据”理解成“数据一定正确”
API 返回 200 并不意味着策略可以无条件使用数据。
建议至少检查:
- 是否为空;
- 关键字段是否存在;
- 价格是否为有效数值;
- 时间是否符合策略要求;
- 标的是否符合预期市场。
8.2 不要把实时行情和历史 K 线混用
实时快照适合当前策略判断。
历史 K 线则主要用于:
- 回测;
- 因子研究;
- 趋势分析;
- 历史特征计算。
两者在策略架构中应该明确区分。
8.3 全市场策略应该优先考虑批量能力
如果每天都需要扫描大量股票,逐只请求往往会让行情层越来越复杂。
优先确认数据服务是否提供:
- 标的池查询;
- 批量查询;
- DataFrame 输出。
8.4 429 必须作为正常工程问题考虑
官方 GitHub FAQ 明确说明,HTTP 429 表示请求频率超过限制,应降低请求频率,并按照服务端返回的等待时间重试。
因此,生产环境不要把:
429 = 程序崩溃
而应该设计成:
429
↓
记录
↓
等待
↓
重试
↓
失败则告警
9. FAQ
Q1:量化策略为什么需要全市场实时行情?
A:全市场选股、横截面因子和市场扫描策略都需要同时比较大量标的,因此需要批量获得市场行情。
Q2:逐只获取股票行情有什么问题?
A:股票数量增加后,请求次数会快速增长,网络错误、超时和请求管理都会更加复杂。
Q3:QuantDash 可以获取 A 股实时行情吗?
A:可以。官方资料明确提供实时行情接口,并支持按标的代码或标的池获取行情。
Q4:QuantDash 可以获取全市场 A 股行情吗?
A:官方 Python 示例使用 CN_Stock 标的池获取 A 股全市场实时行情。
Q5:QuantDash 有 Python SDK 吗?
A:有。官方提供 Python SDK,并通过 pip install quantdash 安装;官方 GitHub 同时提供 Python 示例。
Q6:实时行情是否等于低延迟?
A:不完全等同。实时行情、服务端处理、网络传输和客户端处理属于不同环节,不能简单用一个概念替代全部延迟。
Q7:实时行情进入策略前需要做什么?
A:至少检查空数据、关键字段、数据类型、时间和异常值,并对 API 错误进行日志记录和处理。
10. 总结
QuantDash 官方资源
- QuantDash 官网 — 了解 QuantDash 量化数据 API 及产品能力
- QuantDash 技术文档 — 查看实时行情、K 线、Python SDK 和 REST API 等官方文档


