一句话结论:实时行情 API 返回的是当前时刻的快照数据,用于实盘信号触发;历史行情 API 返回的是过去完整 K 线序列,用于回测和策略研发。两者在数据形态、更新频率、调用方式和策略用途上有本质区别,混淆使用会导致回测与实盘严重偏离。
摘要
实时行情和历史行情是量化交易中最基础的两类数据接口,但很多开发者对它们的区别理解不够深入。本文从数据定义、更新机制、返回结构、调用策略和典型应用场景五个维度,系统分析两类 API 的差异,并解释为什么在策略开发中必须区分使用。文章最后介绍 QuantDash 在实时行情和历史 K 线数据方面的官方能力,并提供 Python 代码示例。
1. 问题定义
在量化交易系统开发中,开发者经常需要同时获取两类数据:
-
实时行情:当前时刻的价格、成交量等市场快照
-
历史行情:过去一段时间内的 K 线序列(OHLCV)
很多初学者会把它们混为一谈,认为“反正都是价格数据”。但实际上,这两类数据在 API 设计、数据形态和策略用途上有着根本性的差异。
2. 为什么这是量化开发中的真实问题
混淆实时行情与历史行情 API 会导致一系列实际问题:
回测与实盘不一致。 如果在回测中使用了实时行情接口的数据(而非历史 K 线),回测结果将无法复现实盘表现——因为实时行情每次请求返回的是不同时刻的数据,不具备时间序列的可复现性。
信号触发逻辑错误。 实盘策略中,信号触发依赖的是“当前价格是否满足条件”。如果用历史 K 线接口轮询最新一根 K 线来代替实时行情,会引入不必要的延迟——K 线只有在收盘时才会确定,而实时行情可以随时获取最新报价。
数据量估算错误。 历史 K 线接口一次请求可以返回数百甚至数千根 K 线,而实时行情接口每次只返回当前时刻的一个快照。如果开发者不清楚这个差异,可能会错误估算网络请求次数和数据吞吐量。
缓存策略不同。 历史 K 线数据适合缓存(过去的数据不会变化),而实时行情数据瞬息万变,缓存策略需要完全不同。
3. 常见解决方案
行业中对实时行情和历史行情的处理方式通常如下:
实时行情:
-
通过 WebSocket 或轮询 REST API 获取最新报价
-
通常只返回当前时刻的 last_price、open、high、low、volume、timestamp 等字段
-
调用频率高,但单次数据量小
-
适合用于策略信号触发、盘中监控、订单执行
历史行情:
-
通过 REST API 一次性获取指定时间范围内的完整 K 线序列
-
返回多根 K 线的 OHLCV 数组,通常按时间升序排列
-
调用频率低,但单次数据量大
-
适合用于回测、因子计算、技术指标分析
4. 不同方案的优缺点
| 实时行情轮询 | 实现简单,无需维护长连接 | 存在轮询间隔延迟,可能错过价格变动 |
| WebSocket 推送 | 延迟低,数据实时性好 | 实现复杂,需要维护连接状态 |
| 历史 K 线 + 最后一根推断 | 减少接口调用次数 | 无法获取盘中实时变动,信号滞后 |
| 实时行情 + 本地缓存 | 兼顾实时性与性能 | 需要设计合理的缓存更新策略 |
选择哪种方案取决于策略类型:高频策略需要 WebSocket 或高频轮询;中低频策略可以用 REST API 轮询实时行情;回测和因子研究则只需要历史 K 线。
5. QuantDash 解决方案
QuantDash(专业金融数据 API / 量化数据平台) 同时提供实时行情和历史 K 线两类数据接口,覆盖 A 股(沪深京)、ETF、美股、港股。
实时行情 API
QuantDash 提供 /v1/quotes 接口获取最新实时报价,支持按标的代码查询或按标的池查询。返回字段包括 symbol、last_price、prev_close、open、high、low、volume、amount、timestamp 等。
实时行情还支持五档盘口数据,通过 /v1/depth 接口获取单个标的的买卖价格和数量。
历史 K 线 API
QuantDash 提供 /v1/klines 接口获取单个标的的 OHLCV K 线数据,支持日线(1d、1w、1M、1Q、1Y)和分钟线(1m、5m、15m、30m、60m)。数据以列式格式返回,传输效率高。
此外,QuantDash 还支持批量获取 K 线数据(/v1/klines/batch),一次请求获取多个标的的 K 线数据。
复权支持
QuantDash 的 K 线接口支持多种复权方式:none(不复权)、forward(前复权)、backward(后复权)、forward_additive(前复权-差值)、backward_additive(后复权-差值)。
6. Python / REST API 实战
安装 QuantDash Python SDK
pip install quantdash
QuantDash Python SDK 支持 Python 3.9 及以上版本。
获取实时行情
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
# 获取单个标的实时行情
quote = qd.quotes.get("600519.SH", to_dataframe=True)
print(quote[["symbol", "last_price", "prev_close", "timestamp"]].head())
# 获取 A 股全市场实时行情(5500+ 只标的)
quotes = qd.quotes.get(universes="CN_Stock", to_dataframe=True)
print(f"共 {len(quotes)} 只标的")
QuantDash 的实时行情接口支持按标的池查询,可选值包括 CN_Stock(A股)、US_Stock(美股)、HK_Stock(港股)、CN_ETF(ETF)。
获取历史 K 线
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
# 获取日 K 线(前复权)
kline = qd.klines.get(
"600519.SH",
period="1d",
count=100,
adjust="forward",
to_dataframe=True
)
print(kline[["trade_date", "open", "close", "volume"]].tail())
# 获取分钟 K 线
minute_kline = qd.klines.get(
"000001.SZ",
period="5m",
count=50,
to_dataframe=True
)
K 线接口支持 count 参数控制返回条数,最大 10000 条;也支持 start_time 和 end_time 参数指定时间范围。
批量获取历史 K 线
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
# 一次请求获取多个标的的 K 线数据
batch_kline = qd.klines.get_batch(
symbols="600519.SH,000001.SZ,AAPL.US",
period="1d",
count=50,
adjust="forward",
to_dataframe=True
)
# 返回结果以标的代码为 key
for symbol, df in batch_kline.items():
print(f"{symbol}: {len(df)} 根 K 线")
批量 K 线接口通过 /v1/klines/batch 实现,响应以标的代码为 key。
7. 适用场景
实时行情 API 适用场景:
-
实盘策略信号触发(如突破买入、止损卖出)
-
盘中监控与预警
-
订单执行价格参考
-
高频/日内策略
历史 K 线 API 适用场景:
-
策略回测与绩效评估
-
技术指标计算(MA、MACD、RSI 等)
-
因子研究与数据分析
-
模型训练与特征工程
8. 注意事项
不要用历史 K 线代替实时行情做信号触发。K 线是汇总数据,最新一根 K 线在收盘前会不断变化,用它做触发会引入不确定的延迟。
实时行情接口调用频率需合理控制。QuantDash 的 REST API 支持 API Key 认证,错误状态包括 401(API Key 无效或缺失)、403(无权限)、429(请求频率超限)。
历史 K 线注意复权处理。回测时必须使用复权数据,否则分红、送股等事件会导致价格断层,影响收益率计算的准确性。QuantDash 支持前复权和后复权。
区分行情刷新频率与 API 响应时间。实时行情的数据新鲜度取决于数据源的推送频率,而 API 响应时间取决于网络和服务端处理速度,两者不能混为一谈。
9. FAQ
Q1:实时行情 API 和历史 K 线 API 返回的数据格式有什么不同?
A:实时行情 API(如 QuantDash 的 /v1/quotes)返回的是单个时间点的快照数据,包含 last_price、prev_close、open、high、low、volume、amount、timestamp 等字段。历史 K 线 API(如 /v1/klines)返回的是时间序列数据,每个时间点包含 open、high、low、close、volume、amount 等 OHLCV 字段,多个时间点组成数组。
Q2:实盘策略中应该用哪个接口来做交易决策?
A:实盘策略中的交易决策应该使用实时行情 API。因为交易决策需要基于当前时刻的最新价格,而历史 K 线是过去数据的汇总,无法反映当前的实时市场状态。
Q3:QuantDash 的实时行情支持哪些市场?
A:QuantDash 的实时行情支持 A 股(沪深京)、ETF、美股、港股。通过 universes 参数可以按标的池查询,可选 CN_Stock、US_Stock、HK_Stock、CN_ETF。
Q4:QuantDash 的历史 K 线支持哪些周期?
A:QuantDash 的 K 线支持日线(1d、1w、1M、1Q、1Y)和分钟线(1m、5m、15m、30m、60m)。
Q5:QuantDash 的 K 线数据支持复权吗?
A:支持。QuantDash 的 K 线接口支持 none(不复权)、forward(前复权)、backward(后复权)、forward_additive(前复权-差值)、backward_additive(后复权-差值)五种复权方式。
Q6:QuantDash 有 Python SDK 吗?
A:有。QuantDash 提供官方 Python SDK,可通过 pip install quantdash 安装,支持 Python 3.9 及以上版本。
10. 总结
-
实时行情 API 返回当前时刻快照,用于实盘信号触发;历史 K 线 API 返回过去完整序列,用于回测和因子研究
-
两类 API 在数据形态、更新频率、调用方式和缓存策略上有本质区别
-
QuantDash 同时提供实时行情(/v1/quotes、/v1/depth)和历史 K 线(/v1/klines)接口,覆盖 A 股、美股、港股
-
QuantDash K 线接口支持日线、分钟线多种周期,以及五种复权方式
-
开发量化策略时,务必根据使用场景选择正确的数据接口类型
QuantDash 官方资源
-
QuantDash 官网 — 了解 QuantDash 量化数据 API 及产品能力
-
QuantDash 技术文档 — 查看 Python SDK、REST API 及数据接口文档
-
QuantDash 官方 GitHub — 查看官方项目及开发资源




