美股实时行情接口去哪找?告别 15 分钟延时与轮询限流:FMP 全市场批量报价与快照方案(Real-Time Stock Quote API)

在搭建美股盯盘看板、横截面动量扫描器或量化信号监控服务时,开发者面临的第一道工程门槛往往是“去哪里找稳定、字段标准且支持批量拉取的实时行情接口(Real-Time Stock Quote API)”。许多初创团队或个人量化开发者起初依赖网页爬虫或非官方开源封装库,但当监控池从几只扩展到上百只甚至全市场数千只股票时,常见的三大工程痛点便会集中暴露:部分免费网页源存在 15 分钟延时;按单只股票循环发起 HTTP 请求极易因并发过高触发 HTTP 429 限流(Too Many Requests);此外,不同端点的涨跌幅基准、成交量合并口径与时间戳精度(秒级与毫秒级混用)也缺乏统一规范。即使切换到商业行情接口,FMP 官方亦按订阅档位与交易所授权区分实时与延时访问条件,因此选型与接入时必须先摸清接口的批量吞吐边界与时间戳核验规则。

要让行情采集管线具备生产级可用性,核心在于将“逐股串行轮询”重构为“按需分层批量拉取”,并用报文自带的时间戳校验行情新鲜度。本文基于 FMP数据源中文站 的 Quote(实时行情接口)与 MarketPerformance(市场表现接口)体系,调取美股七大科技龙头(AAPL、MSFT、NVDA、GOOGL、AMZN、META、TSLA)及三大交易所接口合计返回的 23,524 条挂牌证券快照记录(本次取数时间为美东时间 2026-11-09 02:03 盘前休市时段,常规行情快照对应 2026-11-06 16:00:01 EST 收盘定盘状态),从接口分层选型、字段级口径验算、HTTP 响应体传输字节实测到多周期涨跌幅对齐,提供一套可复核的美股报价接入方案。


找美股实时行情接口时,为什么免费爬虫和单股轮询撑不起上百只股票的实盘监控?

在设计行情采集架构前,需要先算清网络往返开销(RTT)、配额消耗与数据新鲜度校验这三笔工程账:

  1. 单股轮询的请求放大效应与配额消耗:假设策略池监控标普 500 成分股(500 只),每 10 秒刷新一次盘面价格。若调用单股查询接口,每轮需发起 500 次独立 HTTP 请求,每分钟高达 3,000 次请求——即便使用线程池并发,TLS 握手开销与网关的每分钟请求配额(RPM)限制也会迅速成为瓶颈。改用支持多代码拼接的批量报价接口(本次实测单次传入 100 只纳斯达克活跃股票代码可一次正常返回 100 条完整记录),1 次 HTTP 请求即可拉回上百只股票的完整快照,请求次数直接下降两个数量级(具体调用频率仍需在所选套餐的 RPM 与流量配额规则内规划)。
  2. 跨日涨跌幅与日内涨跌幅的口径错位:部分行情源容易混淆“相对昨收涨跌幅”与“当日开盘至收盘的日内涨跌幅”。在隔夜跳空剧烈的财报季,若未核清涨跌幅分母是前一日收盘价(previousClose)还是当日开盘价(open),盘中动量选股器会产生方向完全相反的错误信号。
  3. 响应载荷(Payload)精简与时间戳新鲜度校验的权衡:高频轮询模块有时只需 symbol、price、change、volume 4 个极简字段以降低解析开销;而投研看板则需要同时展示 52 周高低点(yearHigh / yearLow)、50 日与 200 日均线(priceAvg50 / priceAvg200)、实时总市值(marketCap)以及报价时间戳(timestamp)。需特别注意:4 字段精简报价与交易所全量快照均不含 timestamp 字段,HTTP 请求成功的时间只能代表收到响应的本地时刻,不能证明价格产生的撮合时刻;在实盘监控中,应结合完整报价的 timestamp 与交易所开闭市状态判断数据新鲜度。

针对上述场景,FMP /stable/ 架构将实时行情拆解为单股完整/精简报价、多股自定义批量报价、交易所全量快照、跨品种批量报价(ETF/指数)以及盘后报价与最新盘后成交五层矩阵。下表汇总了核心实时行情接口的调用路径、传参方式与实盘返回规模(数据快照截至 2026-11-06 收盘定盘):

表 1:FMP /stable/ 实时行情与全市场快照接口选型矩阵

接口分类与名称/stable/ 请求路径与传参示例单条字段数实盘返回条数 / 载荷特征适用工程场景
单股完整报价Stock Quote(股票报价接口,/stable/quote?symbol=AAPL)17 个1 条完整快照(含 timestamp、均线、市值、昨收、52 周高低)个股详情页展示、带时间戳的新鲜度校验与估值联动
单股精简报价Stock Quote Short(精简报价接口,/stable/quote-short?symbol=AAPL)4 个仅含 symbol、price、change、volume(无 timestamp)已知交易时段内的轻量级单股价格与成交量读取
多股批量完整报价Stock Batch Quote(股票批量报价接口,/stable/batch-quote?symbols=AAPL,MSFT,NVDA)17 个7 股未压缩响应体 3,117 B(网关 gzip 传输 938 B);100 股 gzip 传输 9,405 B自选股池(数十至数百只)盘中看板、因子监控与时间戳核验
多股批量精简报价Stock Batch Quote Short(股票批量精简报价接口,/stable/batch-quote-short?symbols=AAPL,MSFT)4 个7 股响应体 671 B(未触发 gzip,较完整版 gzip 省 28.46%);100 股 gzip 1,812 B(省 80.73%)数百只标的池高频轮询现价与成交量、节省带宽配额
交易所全量报价Exchange Stock Quotes(交易所全量报价接口,/stable/batch-exchange-quote?exchange=NASDAQ)4 个单次返回整个交易所(NASDAQ 14,649 条、NYSE 4,673 条、AMEX 4,202 条,无 timestamp)全市场横截面扫描、异动初筛(需配合完整报价复核时间戳)
多周期涨跌幅快照Stock Price Change(股价涨跌接口,/stable/stock-price-change?symbol=AAPL)12 个含 1D、5D、1M、3M、6M、ytd、1Y、3Y、5Y、10Y、max 共 11 个周期键动量因子打分、多周期相对强弱(RS)看板
ETF / 指数全量报价ETF Price Quotes(ETF实时报价接口,/stable/batch-etf-quotes) · Full Index Quotes(全指数报价接口,/stable/batch-index-quotes)4 个单次拉回全量 ETF(15,954 条)或全球核心指数(428 条,含 ^GSPC、^IXIC、^VIX)宏观大类资产监控、行业 ETF 资金热度跟踪
盘后报价与最新成交Aftermarket Quote(盘后报价接口) · Aftermarket Trade(盘后逐笔成交接口) · Batch Aftermarket Quote(盘后批量报价接口) · Batch Aftermarket Trade(盘后批量成交接口)报价 7 个 / 成交 4 个报价含一档盘口 bidPrice、askPrice、bidSize、askSize;成交返回每个代码最新 1 条盘后成交(含毫秒级 timestamp)财报夜盘前盘后跳空监控、盘口买卖价差(Spread)分析

合格的股票实时报价接口(Stock Quote vs Stock Quote Short)应该包含哪些核心价格与市值字段?

在接入具体行情端点时,开发者首先需要摸清返回 JSON 的字段结构、数学勾稽关系与 HTTP 响应体传输开销。我们调用 /stable/quote?symbol=AAPL 与 /stable/quote-short?symbol=AAPL,对比两者在 2026-11-06 美股常规交易收盘定盘时刻(Unix 时间戳 1793998801,对应美东时间 2026-11-06 16:00:01 EST)的真实返回报文:

// 1. 完整报价:GET https://quote-fmp.com/stable/quote?symbol=AAPL(共 17 个字段)
[
  {
    "symbol": "AAPL", "name": "Apple Inc.", "exchange": "NASDAQ",
    "price": 342.37, "change": -1.8, "changePercentage": -0.523,
    "open": 338.73, "dayLow": 338.3, "dayHigh": 345.79, "previousClose": 344.17,
    "yearLow": 243.42, "yearHigh": 355.38, "priceAvg50": 336.0138, "priceAvg200": 298.8052,
    "volume": 44703806, "marketCap": 4996616254000, "timestamp": 1793998801
  }
]

// 2. 精简报价:GET https://quote-fmp.com/stable/quote-short?symbol=AAPL(共 4 个字段)
[
  { "symbol": "AAPL", "price": 342.37, "change": -1.8, "volume": 44703806 }
]

针对上述字段结构,工程落地时有 4 项关键口径与传输事实 需要核准:

  1. 实时报价的 changePercentage 是相对昨收的跨日口径:在实时报价接口(/stable/quote 与 /stable/batch-quote)中,涨跌额 change 与涨跌幅 changePercentage 以昨收价 previousClose 为基准计算跨日变动。以 AAPL 为例:change = price - previousClose = 342.37 - 344.17 = -1.80 美元,changePercentage = (-1.80 ÷ 344.17) × 100% = -0.52300%(接口返回 -0.523)。
  2. 历史日线的 change / changePercent 是日内口径,与实时报价跨日口径方向可能相反:在历史日线接口 Stock Price and Volume Data(日线完整行情接口,/stable/historical-price-eod/full)中,近似字段 change 与 changePercent 计算的是当日收盘减当日开盘(close - open)的日内实体涨跌。在 2026-11-06 当天,AAPL 低开于 338.73 美元、收于 342.37 美元,因此历史日线接口返回的 change 为 +3.64 美元、changePercent 为 +1.07%;同理,NVDA 当日高开低走收于 186.64 美元,相对昨收 181.60 美元真实跨日涨幅为 +2.78%(报价接口 changePercentage = 2.77533),而日线接口基于日内开盘价 191.10 美元算出的 changePercent 却显示 -2.33%(注:因实时快照与日线定盘聚合源存在微小差异,两接口在部分标的的 open、dayLow、dayHigh 上存在分角级差异,如 MSFT 报价接口 open 为 525.00 美元、日线为 525.69 美元,NVDA 报价接口 open 为 191.14 美元、日线为 191.10 美元,但两者的 close/price 与 volume 均一致)。结论:盯盘展示跨日涨跌应读取实时报价的 changePercentage;做历史日线回测算日收益率则需用相邻交易日 close[t] / close[t-1] - 1 自算。
  3. 内置均线(priceAvg50 / priceAvg200)与 timestamp 新鲜度判据:完整报价直接随报文返回 50 日均价 priceAvg50、200 日均价 priceAvg200 以及 52 周最高价 yearHigh 与最低价 yearLow。单次报价请求即可算出 AAPL 当前股价相对 50 日均线的乖离率 (342.37 ÷ 336.0138 - 1) × 100% = +1.89%。同时,生产系统应展示报价 timestamp 并与当前美东时间对比:闭市或盘前期间保留上个常规交易时段收盘时间戳(如 16:00:01 EST)属正常现象;若在常规交易时段(09:30~16:00 ET)内发现 timestamp 滞后超过业务允许阈值,则应标记行情陈旧告警。
  4. 精简报价(quote-short / batch-quote-short)的 HTTP 响应体传输节省受网关 gzip 阈值影响:在本次七大科技股(7 只标的)实测中,两者的 price、change、volume 数值完全相等。从响应体字节数看,/stable/batch-quote 未压缩原始响应体为 3,117 字节,/stable/batch-quote-short 为 671 字节(未压缩体积缩减 78.47%;若按本地 Python json.dumps() 默认序列化字符串长度计则分别为 2,597 字节与 515 字节,缩减 80.17%)。但在 HTTP 响应体传输中,网关 Nginx 配置了 gzip_min_length 1024(满 1,024 字节起压):7 只标的的 batch-quote 被压缩至 938 字节,而 671 字节的 batch-quote-short 因低于 1,024 字节起压阈值而直接以原文字节传输,因此 7 只小样本下的 HTTP 响应体传输字节仅节省 28.46%(1 - 671 ÷ 938)。当监控池扩大到 100 只活跃纳斯达克标的 时,两者均超过起压阈值并触发 gzip 压缩,未压缩响应体从 43,654 字节 降至 9,326 字节(缩减 78.64%),gzip 压缩后的 HTTP 响应体传输字节则从 9,405 字节 降至 1,812 字节,传输节省率达到 80.73%。本次 7 股与 100 股样本的 HTTP 响应体传输节省率分别为 28.46% 和 80.73%,实际工程中应结合实测响应体大小与是否需要 timestamp 校验新鲜度来选择端点。

如何用 1 次请求替代上千次轮询?批量报价(Stock Batch Quote)与交易所全量快照(Exchange Stock Quotes)吞吐实测

当监控范围从单只股票扩大到自定义股票池乃至全美股市场时,应根据标的数量级选择 /stable/batch-quote 或 /stable/batch-exchange-quote。

1. 自定义股票池(数十至数百只):调用 /stable/batch-quote 一次获取完整盘面

对于核心持仓池或行业龙头池,将多个股票代码以英文逗号拼接传入 symbols 参数(如 ?symbols=AAPL,MSFT,NVDA,GOOGL,AMZN,META,TSLA),即可在单次 HTTP 往返中拿到全部标的的 17 个完整字段。下表列示了美股七大科技龙头在 2026-11-06 收盘定盘时刻的 /stable/batch-quote 实盘返回值,其中包含最新价(price)、昨收价(previousClose)、跨日涨跌额(change)、跨日涨跌幅(changePercentage)、当日开盘/高低区间(open / dayLow / dayHigh)、50 日/200 日均线(priceAvg50 / priceAvg200)以及总市值(marketCap):

表 2:美股七大科技龙头 /stable/batch-quote 实盘快照对账表(快照截至 2026-11-06 收盘)

股票代码最新价 / 昨收价(美元)跨日涨跌额 / 涨跌幅当日开盘 / 最低 ~ 最高(美元)当日成交量(万股)50 日 / 200 日均线(美元)52 周最低 ~ 最高(美元)实时总市值(万亿美元)
AAPL342.37 / 344.17-1.80 / -0.52%338.73 / 338.30 ~ 345.794,470.38336.01 / 298.81243.42 ~ 355.384.997
MSFT530.61 / 535.93-5.32 / -0.99%525.00 / 524.61 ~ 538.302,695.64516.65 / 439.85349.20 ~ 559.153.940
NVDA186.64 / 181.60+5.04 / +2.78%191.14 / 185.22 ~ 194.9018,021.23219.81 / 204.67164.27 ~ 243.374.498
GOOGL284.78 / 282.57+2.21 / +0.78%284.85 / 284.60 ~ 290.493,634.59332.93 / 339.51270.70 ~ 408.613.472
AMZN259.30 / 260.21-0.91 / -0.35%259.81 / 258.53 ~ 264.184,257.15253.95 / 243.94196.00 ~ 287.202.804
META610.15 / 605.08+5.07 / +0.84%607.28 / 606.82 ~ 625.551,570.55674.92 / 631.94520.26 ~ 779.821.560
TSLA358.22 / 343.69+14.53 / +4.23%348.92 / 347.60 ~ 363.843,673.04372.14 / 383.87297.38 ~ 498.831.416

2. 全市场横截面扫描(23,524 条记录):3 次请求拉取三大交易所快照及异动榜单补充

如果策略需要对美股主板市场进行横截面异动初筛(如按当日成交量或涨跌额过滤候选标的),可调用 /stable/batch-exchange-quote?exchange=<交易所代码>。在本次实测中,3 次 HTTP 请求合计返回美股三大交易所参数下的 23,524 条证券快照记录(不含 OTC 场外市场):

去重与分类过滤注意事项:上述三大交易所返回的 23,524 条记录中已包含在三大交易所挂牌的 5,408 只 ETF(其中 AMEX 含 3,719 只、NASDAQ 含 1,586 只、NYSE 含 103 只),与 /stable/batch-etf-quotes 返回的全球 15,954 条 ETF 记录存在交集,因此两个端点的记录数不可直接相加;若策略需构建普通股池,应关联公司概况数据(如单股 /stable/profile 或全市场批量接口 Company Profile Bulk(公司概况批量接口,/stable/profile-bulk))先按 isEtf=false、isFund=false、isActivelyTrading=true 排除 ETF、基金及非活跃标的,再结合证券类型剔除权证、优先股与单元证券。

此外,若只需直接获取全市场当日极值榜单,可另行调用 MarketPerformance(市场表现接口)下的 Biggest Stock Gainers(涨幅榜接口,/stable/biggest-gainers)、Biggest Stock Losers(跌幅榜接口,/stable/biggest-losers)与 Top Traded Stocks(成交活跃榜接口,/stable/most-actives),每个接口默认返回排名前 50 只标的(注意榜单接口中的涨跌幅字段名写作 changesPercentage,比标准报价接口的 changePercentage 多一个复数字母,解析字典时需留意区分)。


盯盘看板里的多周期涨跌幅(1D / 5D / YTD / 1Y)怎么免手算直接对齐?(Stock Price Change)

在制作行业监控周报或动量选股看板时,研究员常需要并列展示每只股票的近 5 日、近 1 个月、近 3 个月、年初至今(YTD)及近 1 年累计涨跌幅。若靠本地拉取几百只股票的数年日线自行切片计算,不仅需要处理节假日交易日对齐,还会消耗大量请求。

直接调用 /stable/stock-price-change?symbol=AAPL,MSFT,NVDA,GOOGL,AMZN,META,TSLA,即可一次性拿回全部 7 只股票在 11 个标准时间跨度上的预计算累计涨跌幅百分比(JSON 键名依次为 1D、5D、1M、3M、6M、ytd、1Y、3Y、5Y、10Y、max):

// GET https://quote-fmp.com/stable/stock-price-change?symbol=AAPL,NVDA(节选 2 只展示字段结构)
[
  {
    "symbol": "AAPL",
    "1D": -0.523, "5D": 0.23421261, "1M": 1.70212, "3M": 9.26818, "6M": 16.72235,
    "ytd": 25.93614, "1Y": 27.07197, "3Y": 87.69256, "5Y": 127.02075, "10Y": 1135.10101, "max": 266647.17569
  },
  {
    "symbol": "NVDA",
    "1D": 2.77533, "5D": -8.28501, "1M": -18.59735, "3M": -16.66369, "6M": -13.27138,
    "ytd": 0.07506702, "1Y": -6.23461, "3Y": 297.52929, "5Y": 508.74103, "10Y": 10565.14286, "max": 454931.95024
  }
]

对比上方 JSON 与 /stable/batch-quote 原始响应可以验证:/stable/stock-price-change 中的当日涨跌幅键(1D)与 /stable/batch-quote 中的 changePercentage 字段在本次核验的全部 7 只样本上精确到小数点后 5 位完全一致(如 AAPL 同为 -0.523、MSFT 同为 -0.99267、NVDA 同为 2.77533、GOOGL 同为 0.78211、AMZN 同为 -0.34972、META 同为 0.83791、TSLA 同为 4.22765)。

为展示如何将“实时批量报价 + 多周期动量涨跌幅 + 全市场交易所快照统计”融合进同一套生产脚本,下面给出完整可运行的 Python 监控代码(49 行)。代码中内置了针对 HTTP 429 的指数退避重试,并对缺失报价或缺失字段严格保留 None 与 MISSING_QUOTE 状态标记,避免将缺失动量数据伪装成 0.0% 零收益,也不会因单只异常代码中断整批处理:

import os, time, requests
from datetime import datetime
from zoneinfo import ZoneInfo

# Linux/macOS: export FMP_KEY="your_api_key_here"
# Windows PowerShell: $env:FMP_KEY="your_api_key_here" (Windows 若缺时区库请先执行 pip install tzdata)
API_KEY, BASE = os.environ["FMP_KEY"], "https://quote-fmp.com/stable"
MAG7 = ["AAPL", "MSFT", "NVDA", "GOOGL", "AMZN", "META", "TSLA"]

def get_json(path, **params):
    for attempt in range(3):
        r = requests.get(f"{BASE}/{path}", params={**params, "apikey": API_KEY}, timeout=25)
        if r.status_code == 429 and attempt < 2:
            time.sleep(2 ** attempt)
            continue
        r.raise_for_status()
        return r.json()

def audit_realtime_quotes(symbols):
    et_tz = ZoneInfo("America/New_York")
    sym_str = ",".join(symbols)
    quotes = {x["symbol"]: x for x in get_json("batch-quote", symbols=sym_str) if "symbol" in x}
    changes = {x["symbol"]: x for x in get_json("stock-price-change", symbol=sym_str) if "symbol" in x}
    rows = []
    for s in symbols:
        q, c = quotes.get(s), changes.get(s, {})
        if not q or q.get("price") is None:
            rows.append({"symbol": s, "status": "MISSING_QUOTE"})
            continue
        price, sma50, ts = q["price"], q.get("priceAvg50"), q.get("timestamp")
        rows.append({
            "symbol": s,
            "price": price,
            "prev_close": q.get("previousClose"),
            "chg_1d_pct": round(q["changePercentage"], 2) if q.get("changePercentage") is not None else None,
            "ret_5d_pct": round(c["5D"], 2) if c.get("5D") is not None else None,
            "ret_ytd_pct": round(c["ytd"], 2) if c.get("ytd") is not None else None,
            "ret_1y_pct": round(c["1Y"], 2) if c.get("1Y") is not None else None,
            "mcap_T": round(q["marketCap"] / 1e12, 3) if q.get("marketCap") is not None else None,
            "vs_sma50_pct": round((price / sma50 - 1.0) * 100.0, 2) if sma50 else None,
            "time_et": datetime.fromtimestamp(ts, et_tz).strftime("%Y-%m-%d %H:%M:%S") if ts else None,
        })
    return rows

if __name__ == "__main__":
    for row in audit_realtime_quotes(MAG7):
        print(row)
    ex_counts = {ex: len(get_json("batch-exchange-quote", exchange=ex)) for ex in ("NASDAQ", "NYSE", "AMEX")}
    print({"exchange_snapshot_counts": ex_counts, "total": sum(ex_counts.values())})

结合 /stable/stock-price-change 接口原始响应与上述脚本输出整理如下,下表汇总了七大科技龙头的多周期累计涨跌幅(涵盖 1D、5D、1M、3M、6M、ytd、1Y、3Y、5Y)以及最新价相对 50 日均线(priceAvg50)的乖离幅度(数据快照截至 2026-11-06):

表 3:美股七大科技龙头多周期涨跌幅与均线乖离率对账表(快照截至 2026-11-06)

股票代码当日 / 近 5 日 (1D / 5D)近 1 月 / 3 月 (1M / 3M)近 6 月 (6M)年初至今 (ytd)近 1 年 (1Y)近 3 年 / 5 年 (3Y / 5Y)较 50 日均线乖离
AAPL-0.52% / +0.23%+1.70% / +9.27%+16.72%+25.94%+27.07%+87.69% / +127.02%+1.89%
MSFT-0.99% / -2.41%-0.83% / +6.12%+27.82%+9.72%+4.86%+47.11% / +57.94%+2.70%
NVDA+2.78% / -8.29%-18.60% / -16.66%-13.27%+0.08%-6.23%+297.53% / +508.74%-15.09%
GOOGL+0.78% / +0.45%-19.02% / -19.62%-28.95%-9.02%-1.83%+118.66% / +91.23%-14.46%
AMZN-0.35% / -2.08%-1.19% / -5.53%-4.91%+12.34%+4.39%+84.42% / +45.01%+2.11%
META+0.84% / -4.84%-15.10% / +3.05%+0.09%-7.57%-3.42%+90.34% / +81.93%-9.60%
TSLA+4.23% / -5.68%-6.40% / +9.02%-16.37%-20.35%-19.54%+70.60% / +5.00%-3.74%

常见问题(FAQ):实时行情时间戳转换、市值字段(marketCap)口径与高频轮询有哪些避坑要点?

1. 常规报价接口与盘后接口的 timestamp 时间戳精度为什么差了 1000 倍?盘后成交字段有哪些空值注意项?

在 FMP /stable/ 实时行情体系中,常规报价接口(/stable/quote、/stable/batch-quote)的 timestamp 为 10 位 Unix 秒级整数(例如本次快照中 AAPL 的 timestamp 为 1793998801,对应 UTC 时间 2026-11-06 21:00:01、美东冬令时 2026-11-06 16:00:01 EST 收盘定盘时刻,即北京时间次日凌晨 05:00:01);而单股与批量盘前盘后接口(/stable/aftermarket-quote、/stable/aftermarket-trade、/stable/batch-aftermarket-quote、/stable/batch-aftermarket-trade)的 timestamp 均为 13 位 Unix 毫秒级整数(如 NVDA 盘后报价时间戳 1794013202000,除以 1000 后对应美东时间 2026-11-06 20:00:02 EST 盘后结束时刻)。工程代码中若需兼容两类接口,可先判断 ts_sec = ts / 1000.0 if ts > 1e11 else ts,再传入 datetime.fromtimestamp(ts_sec, ZoneInfo("America/New_York"))。此外,/stable/aftermarket-trade 与 /stable/batch-aftermarket-trade 返回的是每个代码最新 1 条盘后成交快照(而非历史逐笔成交全流水),且部分记录的成交量字段 tradeSize 可能为 null(如本次实测 NVDA 最新盘后成交 price: 188.7001, tradeSize: null),解析时应做好空值判断。

2. 报价接口里的实时总市值(marketCap)是用哪套股本算的?多类别股(GOOGL/GOOG、BRK-A/BRK-B)与财季股本为什么会有差异?

交叉核验 /stable/batch-quote、Company Profile Data(公司概况接口,/stable/profile)与 Company Share Float & Liquidity(流通股与流动性接口,/stable/shares-float)可见:在本次核验的 10 个样本中,实时报价与公司概况的 marketCap 与 price × outstandingShares(接口记录的当前总股本)高度吻合(其中 9 个样本 round(marketCap ÷ price) 与 outstandingShares 完全相等,如 AAPL 的 4,996,616,254,000 ÷ 342.37 = 14,594,200,000 股、NVDA 的 4,498,024,000,000 ÷ 186.64 = 24,100,000,000 股;仅 BRK-B 因折算取整相差 5 股即约 2,854.55 美元,相对 1.22 万亿美元市值偏差约 2.3e-9)。工程使用时需注意两处股本口径差异:

3. 什么时候该用 REST 批量报价轮询(/stable/batch-quote),什么时候该切到 WebSocket 实时流?

按刷新频率与标的数量分流:若策略为分钟级、5 分钟级或日内定时任务(如每 30 秒刷新一次 100 只自选股看板,或每 5 分钟扫描一次三大交易所全量快照),直接使用 /stable/batch-quote 或 /stable/batch-exchange-quote 的 HTTP 批量轮询更为稳健,无需维护长连接状态机;若策略需要秒级捕捉单只或数十只高流动性标的的盘口跳动,则应切换至 Websockets(WebSocket 实时流接口)建立长连接订阅。如需在本地跑通上述实时批量报价与全市场快照脚本,可前往 快速接入指南 免费申领 Ultimate 全接口试用密钥,或查阅 定价与会员套餐 了解详情。

登录后可领取FMP Ultimate档15天试用 Key,覆盖全量接口。免费试用 15 天 →