QVeris
股票数据开发指南

选择适合应用的
免费延迟股票报价 API

接入免费行情数据接口前,先比较 15 分钟延迟、报价时间、报价字段、
请求频率限制和数据使用许可。

Hand-drawn free delayed stock quotes API workflow from ticker symbol to price, bid and ask, volume, timestamp, and free-tier checks

核心摘要

适合原型验证

免费延迟股票报价 API 通常足以满足产品演示、个人仪表盘、课程作业和低访问量研究工具的需求。

核对报价时间

“实时”没有统一定义。务必核对交易所、报价时间、交易时段,并确认接口返回的是实时报价还是延迟报价。

明确报价口径

最新成交价、买卖报价中间价、买一价、卖一价和前收盘价代表不同含义。每个产品场景都应明确采用哪一种价格。

针对调用限额优化

缓存重复请求;接口允许时,批量查询多个股票代码;同时保留数据服务商适配层,以便日后切换服务商。

延迟报价适合用于解释市场而不是直接参与交易的产品,例如教学页面、上市公司信息页、低频投资组合摘要、内部原型,以及不依赖最近数秒行情的研究。它不应直接触发订单、承诺可成交价格、计算时效敏感的风险,或在未对齐时间戳时与实时行情比较。“延迟 15 分钟”描述的是数据何时可以发布,每秒轮询一次也不会让底层报价变得更新。

延迟股票报价应包含哪些字段

仅有股票代码和单一价格数值远远不够。可靠的应用还需要完整的行情信息,才能正确理解该价格的含义,并避免混用统计口径不一致的数据。

数据应包含的字段用途常见误区
最新报价价格、报价时间、币种、交易所、交易时段自选股列表与报价快照误将延迟数据当作实时数据
买一价与卖一价买一价、卖一价、买一量、卖一量、报价时间展示买卖价差与流动性误将过时报价当作成交数据
交易时段信息市场状态、前收盘价、涨跌额、涨跌幅正确展示当日涨跌混用正常交易时段与盘前、盘后时段
证券代码基础信息标准证券代码、证券名称、证券类型、所属市场、交易状态搜索与校验混淆不同交易所使用的相同证券代码
延迟政策延迟时长、适用场所、资产范围、交易时段例外判断报价何时可以展示假定所有场所的延迟时长完全一致
时间链路市场事件时间、服务商发布时间、获取时间、时区展示报价年龄并验证延迟把 API 响应时间误当成报价发生时间
价格类型买价、卖价、中间价、最近符合条件的成交价、官方或前收盘价准确标注向用户展示的数值把所有返回数值都称为“股票价格”
展示状态数据时点、延迟标识、开休市状态、陈旧阈值防止用户误以为具备实时交易时效只在提示框或条款页面中说明延迟

“免费”和“延迟”究竟意味着什么

请求频率与每日配额

将服务商公布的调用额度换算为实际负载:证券代码数量 × 刷新次数 × 用户数。即使每日配额看似充足,严格的每分钟突发请求上限仍可能导致调用失败。

延迟报价或日终数据

免费行情可能存在延迟、仅提供日终数据,或对常规交易时段以外的行情覆盖有限。界面中应明确标注报价时间和延迟情况,避免让用户误以为这些报价具备实时交易所需的时效性。

延迟与陈旧不是一回事

一条报价即使按规定延迟 15 分钟,也可能因为证券长期未成交、市场休市或数据源停止更新而更旧。因此,应同时记录规定延迟和实际报价年龄。

交易场所覆盖决定报价含义

确认报价来自综合行情、单一交易所、另类交易场所,还是服务商聚合结果。单场所的延迟最新成交价,可能与全市场延迟参考价不同。

面向用户的披露不可省略

核对署名要求、延迟说明用语、展示位置及哪些用户有权查看,并把数据时点和延迟状态直接放在价格旁边,不能只写在法律条款中。

日终数据是另一种产品

收盘后发布的每日收盘价并不等于持续滚动的延迟报价。应分别在交易时段和收盘后测试,让应用能够区分延迟盘中价、官方收盘价和前收盘价。

如何可靠集成免费延迟股票报价 API

统一内部数据模型

将各数据服务商特有的响应映射到自己的 Quote、Bar 和 Instrument 模型。保留原始响应载荷用于排错,但不要让服务商字段名散布在产品代码中。

按数据更新频率设置缓存

日终历史行情应设置远长于盘中报价的缓存时间。制定明确的数据时效规则,并合并并发的相同请求,以免过快耗尽免费调用额度。

写入存储前校验数据

拒绝时间戳不成立、价格为负、币种不一致、K 线重复或时区偏移意外变化的数据,并记录数据服务商和数据获取时间。

明确建模不同报价

将买价、卖价、最新成交价、官方收盘价、前收盘价、来源场所、事件时间、延迟类别、服务商发布时间和获取时间分别保存,不能都塞进一个通用价格字段。

让刷新与缓存匹配延迟周期

以高于数据发布时间的频率轮询只会浪费配额。应按证券和价格类型缓存到下一条数据可能发布的时刻,同时为失败重试设置更短且独立的策略。

如实呈现各种状态

界面应明确显示延迟、数据时点、市场休市、报价陈旧、暂不可用和覆盖不完整等状态,不能给缓存价格配上刚刷新页面的时间。

阻断交易执行路径

在代码和制度上把延迟行情服务与订单路由、时效敏感提醒分开,避免后续功能误把低成本展示行情用于交易决策。

测试关键时间边界

验证开盘、提前收盘、常规收盘、夏令时切换、停牌,以及延迟事件恰好可以发布的时刻,并把事件时间与预期发布时间对照。

代码示例:区分规定延迟与行情异常陈旧

下面的校验器将四个时点分开处理:市场事件何时发生、延迟报价何时具备发布资格、服务商何时发布,以及应用何时获取。陈旧阈值只是在市场开市期间使用的产品规则,并不意味着每只证券都必须持续成交。

from datetime import datetime, timedelta

def parse_time(value: str) -> datetime:
    return datetime.fromisoformat(value.replace("Z", "+00:00"))

def classify_delayed_quote(quote: dict, now: datetime,
                           stale_after_minutes: int = 5) -> dict:
    event_time = parse_time(quote["event_time"])
    release_time = parse_time(quote["provider_release_time"])
    retrieved_at = parse_time(quote["retrieved_at"])
    delay = timedelta(minutes=quote["delay_minutes"])
    eligible_at = event_time + delay

    if quote["price"] <= 0:
        return {"status": "invalid", "reason": "non_positive_price"}
    if not event_time <= release_time <= retrieved_at <= now:
        return {"status": "invalid", "reason": "timestamp_order"}
    if release_time < eligible_at:
        return {"status": "invalid", "reason": "released_before_eligible"}

    quote_age = now - event_time
    allowed_age = delay + timedelta(minutes=stale_after_minutes)
    if quote.get("market_status") == "open" and quote_age > allowed_age:
        return {"status": "stale", "age_seconds": int(quote_age.total_seconds())}

    return {
        "status": "usable_delayed",
        "eligible_at": eligible_at.isoformat(),
        "age_seconds": int(quote_age.total_seconds()),
    }

测试状态,不能只测试价格。若事件发生于 14:30Z,规定延迟 15 分钟,服务商于 14:45Z 发布,应用在 14:45:02Z 获取,这是一条有效的延迟报价。若市场仍在交易,同一事件到 14:55Z 才返回,在五分钟宽限规则下就应标记为陈旧。市场已休市或证券停牌时,应如实展示相应状态,而不是虚构一条更“新”的价格。

何时用 QVeris 查找延迟报价工具

QVeris 可帮助开发者和智能体查找并评估具备金融数据调用能力的工具,以便在接入应用前比较各工具能够返回哪些数据。

  • 查找支持报价、OHLCV、历史价格、证券代码查询和公司行为数据的工具。
  • 在通过代码或智能体调用工具前,核对工具的输入参数与返回结果。
  • 将数据服务商的选择与应用内部的标准化数据模型解耦。

QVeris 可帮助应用按字段、证券、接入条件和公开限制筛选报价能力,但延迟披露、时间链路、交易场所解释、缓存时机、陈旧状态政策、许可合规,以及信息展示与交易执行的隔离,仍由应用方负责。

常见问题

能免费获取实时股票价格吗?

有时可以,但不同服务覆盖的市场和交易所有所不同,数据使用权限与延迟情况也各不相同。不要只看“实时”标签,还应核对报价时间和数据许可条款。

可以一次请求多只股票的报价吗?

部分 API 支持批量查询股票代码,另一些则每次只能查询一只股票。既要核对单次批量查询的股票数量上限,也要确认每只股票会占用多少免费额度。

“延迟 15 分钟”具体是什么意思?

通常表示符合条件的市场事件,要在事件发生后的规定延迟期结束后才能发布。不同场所、时段、字段和政策可能不同,因此必须查看延迟类别和时间戳说明。

延迟报价可以用于交易吗?

它不应驱动时效敏感的下单决策,也不能代表可成交价格。在清楚展示延迟的前提下,可用于教学、信息展示和低频分析。

为什么延迟报价会比 15 分钟更旧?

证券可能长期未成交,市场可能已经休市或停牌,某字段可能只在成交时更新,数据源也可能陈旧。应同时检查事件时间、规定延迟、发布时间和市场状态。

延迟价格应该怎样标注?

应展示价格类型、“延迟”状态、必要的数据来源或覆盖范围,以及按市场时区表示的数据时点。标识应紧邻价格,不能只放在页脚。

外部参考链接

选择适合应用的 免费延迟股票报价 API | QVeris Guides