金融与市场数据
FMP 股票市场 API
通过结构检查、重试、来源时间与授权审查接入 FMP 端点,上线前验证返回结果。
发布日期:2026年4月21日 · QVeris团队制作

核心摘要
结论:如果一个 API 需要覆盖 Quote、Historical Price、Company Fundamentals、News、Calendar 与相关市场数据,FMP 值得进入候选清单。但采购决策应基于任务真正需要的 Endpoint、更新频率、地区、历史范围、调用限制、带宽、许可与复权规则,而不是营销页面上的 Endpoint 数量。
研究、分析、投资组合监控、原型,以及希望通过统一 API 获取广泛金融数据的产品。
Symbol 覆盖、实时权限、公司行动处理、Point-in-time 行为、限流与商业展示许可。
AI Agent 仍需要身份、策略、标准化、证据、审批、重试、可观测性和验收测试。
选择 FMP 前,可在免费股票 API 对比中把它与另外七种方案并列评估。
这份 FMP API 评估适合谁
希望用一个受维护的 API 契约覆盖 Quote、History、Fundamentals、News、Calendar 与 Reference Data。
模型需要标准化记录,并包含来源时间、检索时间、复权模式、验证状态与 Provenance。
需要把每日/每分钟调用、历史范围、覆盖、带宽与许可换算成每个验收任务的成本。
先从当前 Stable API 契约开始
FMP 当前 Quickstart 将 https://financialmodelingprep.com/stable/ 作为 Base URL,并说明 API Key 认证、100 多个 Endpoint,以及常见的 403、429、500。应把 Base URL、认证方式、Timeout 与套餐限制放进配置,而不是散落在 Notebook 与 Prompt 中。
FMP 股票市场 API 数据覆盖图
| 需求 | Stable Endpoint 示例 | 生产前验证 |
|---|---|---|
| 单个 Quote | /quote?symbol=AAPL | 市场状态、时间戳、币种、交易所与权限 |
| 批量 Quote | /batch-quote?symbols=AAPL,MSFT | 批量上限、部分失败、排序与缺失 Symbol |
| 历史 EOD | /historical-price-eod/full?symbol=AAPL | 复权模式、VWAP、修订与日期边界 |
| 分钟 Bar | /historical-chart/1min?symbol=AAPL | 套餐权限、交易时段、时区、延迟与保留期 |
| 基本面 | /income-statement?symbol=AAPL | 期间、申报日、接受日、币种与重述 |
| 事件与新闻 | Calendar 与 News Endpoint | 来源、发布时间、去重与更新周期 |
免费层、付费限制与许可现实
FMP 当前公开 Pricing 页面区分 Personal 与 Commercial Use,并按套餐列出不同的调用频率、历史范围、地区覆盖、带宽与数据集。价格与包装会变化,所以本文不把价格写成长期采购报价;评估当天应保存实际数值和适用协议。
| 问题 | 为什么会影响架构 | 需要保存的证据 |
|---|---|---|
| 每日还是每分钟调用? | 决定 Batch、Cache、Concurrency 与 Backoff。 | 套餐截图、Dashboard Quota 与测试结果 |
| 历史范围多长? | 影响回测、预热任务、存储与迁移。 | 按 Dataset 与 Symbol 记录最早可用数据 |
| 哪些地区和资产? | 美国市场原型无法证明全球生产覆盖。 | 包含交易所、币种和缺失率的 Symbol 清单 |
| 能否展示或再分发? | API 访问本身不等于产品使用权。 | 签署协议与产品用途映射 |
代码:用 cURL 调用 FMP Stable API
curl --fail-with-body \
--connect-timeout 5 \
--max-time 30 \
-H "apikey: ${FMP_API_KEY}" \
"https://financialmodelingprep.com/stable/historical-price-eod/full?symbol=AAPL"使用环境变量,并避免在 Shell History 或截图中暴露 Key。FMP 文档支持 Header 与 Query Parameter 认证;使用 Header 可以避免 Secret 进入 URL。
Python:重试、标准化并保存证据
import hashlib, json, os, random, time
from datetime import datetime, timezone
import requests
BASE_URL = "https://financialmodelingprep.com/stable"
API_KEY = os.environ["FMP_API_KEY"]
def get_eod(symbol: str, attempts: int = 4) -> dict:
url = f"{BASE_URL}/historical-price-eod/full"
headers = {"apikey": API_KEY}
params = {"symbol": symbol}
for attempt in range(attempts):
response = requests.get(
url, headers=headers, params=params, timeout=(5, 25)
)
if response.status_code == 403:
raise RuntimeError("FMP authentication or entitlement rejected")
if response.status_code not in {429, 500, 502, 503, 504}:
response.raise_for_status()
break
if attempt == attempts - 1:
response.raise_for_status()
time.sleep(min(8, 0.5 * (2 ** attempt)) + random.random() / 4)
raw = response.content
rows = response.json()
normalized = [{
"symbol": symbol,
"date": row["date"],
"open": row["open"],
"high": row["high"],
"low": row["low"],
"close": row["close"],
"volume": row["volume"],
"provider": "fmp",
"dataset": "historical_price_eod_full",
} for row in rows]
return {
"records": normalized,
"evidence": {
"retrieved_at": datetime.now(timezone.utc).isoformat(),
"request": {"endpoint": "/historical-price-eod/full", "symbol": symbol},
"status": response.status_code,
"sha256": hashlib.sha256(raw).hexdigest(),
},
}复权价格、时间戳与 Point-in-time 真相
FMP 提供 Full、Non-split-adjusted 与 Dividend-adjusted 历史价格 Endpoint,它们回答不同问题。每个数据集都要记录 Endpoint 与复权模式,不能把复权 Close 与未复权 High/Low 静默拼接。
| 序列 | 适合 | 混用风险 |
|---|---|---|
| 完整历史 EOD | 验证字段语义后的通用 OHLCV 分析 | 未测试就假设复权行为 |
| 未拆股复权 | 观察拆股事件前后的原始价格 | 公司行动附近出现虚假收益跳变 |
| 股息复权 | 方法一致时的总回报分析 | 重复计算现金股息或回测口径不一致 |
- 分别保存事件时间、供应商来源时间、检索时间和处理时间。
- 测试盘前、常规交易、盘后、周末、节假日与夏令时边界。
- 检测重复、区间反转、负成交量、缺失交易日与不可能的 OHLC 关系。
- 保存 Dataset Version 或原始响应 Hash,使 Agent 答案可复现。
数据质量验收契约
dataset: fmp_historical_eod
symbols: 100
window: 2025-01-01..2026-06-30
contract:
required_fields: [symbol, date, open, high, low, close, volume]
adjustment_mode: documented
currency_and_exchange: resolved
duplicate_keys: 0
impossible_ohlc_rows: 0
missing_expected_sessions_pct: "<= 0.25"
stale_quote_rate_pct: "<= 0.50"
p95_latency_ms: "<= 2500"
unsafe_secret_logs: 0
evidence:
raw_hash: required
retrieved_at: required
provider_endpoint: required
validation_result: required阈值应根据工作负载与交易日历确定;上面的数字只是示例,不是通用保证。上线前必须重放冻结的 Symbol/Date 样本,并抽样与权威来源核对。
FMP 数据的生产架构
映射 Issuer、Security、Exchange、Currency、Ticker、CIK 与有效日期,不能只用模糊展示 Symbol 关联。
集中管理 Base URL、Auth、Timeout、Concurrency、Quota、Retry Class 与请求元数据。
转换前记录 Endpoint、安全参数、Status、Retrieval Time、Content Hash、套餐上下文与响应元数据。
转换为 Canonical Schema,附加单位与复权模式,然后拒绝或隔离无效记录。
按 Dataset Freshness 缓存、暴露 Evidence Reference,只让 Agent 使用通过验收的记录。
排查 FMP API 故障
| 现象 | 可能类别 | 安全处理 |
|---|---|---|
403 | Key 缺失、无效或无权限 | 不要盲目重试;检查 Secret 与套餐权限。 |
429 | 频率或 Quota 限制 | 带 Jitter 回退、降低并发、缓存、批量,并在 Deadline 停止。 |
500 | 供应商侧故障 | 限制重试、保存请求证据、降级或切换供应商。 |
| 200 但结果为空 | Symbol、Exchange、Plan、Date 或 Dataset 不匹配 | 把空结果作为类型化结果而不是零;检查身份与覆盖。 |
| 价格断层 | 拆股、股息、币种、Symbol 变化或复权混用 | 隔离记录、检查公司行动,并按统一策略重算。 |
用一个统一任务比较 FMP
| 维度 | FMP | Polygon | Alpha Vantage | Twelve Data |
|---|---|---|---|---|
| 测试任务 | 100 个 Symbol:Quote + 12 个月 EOD + 最新基本面 + 公司行动核对 | |||
| 记录 | 验收率、字段缺失、过期数据、复权不一致、P50/P95、重试、总成本与许可适配 | |||
| 决策 | 根据任务结果与运维负担选择,不宣布通用赢家。 | |||
Endpoint 或供应商变更的迁移清单
- 盘点所有 Endpoint、Caller、Key 位置、Quota、Cache Key、Schema、复权假设与下游消费者。
- 修改 Adapter 前冻结代表性响应与预期标准化记录。
- 以只读 Shadow 模式并行运行新旧路径,对比数值、日期、缺失率、延迟与成本。
- 先对一个低风险 Dataset 做 Canary,保留回滚;证据不完整时阻止写入或 Agent 结论。
- 切换前更新 Runbook、Dashboard、许可记录、Secret Rotation 与数据保留控制。
QVeris 模式:发现、检查、调用,然后验证
当现有 Agent 需要能力层,而不是硬编码供应商 Endpoint 时,QVeris 更合适。Agent 可按意图发现金融能力,检查参数与运行信号,调用所选能力,再把通过验证的证据交给模型推理。
保持边界明确:QVeris 不替代市场数据许可、事实来源、身份策略、验证规则、投资组合逻辑或审批权威。它负责路由能力;业务真相仍由应用负责。
FMP 股票市场 API 常见问题
FMP 提供用于测试的免费 Basic Plan,并有每日调用与带宽限制。应按实际套餐确认 Endpoint、历史、实时覆盖、商业权利与再分发规则。
当前 Quickstart 使用 https://financialmodelingprep.com/stable/。应把它放进配置,避免供应商变化扩散到产品代码。
使用服务端 Secret Manager,不要把 Key 放入浏览器代码、Prompt、Log、截图或提交的 Notebook。
它们回答不同问题。记录 Endpoint 与复权模式,不能在同一收益计算中混用不同序列。
使用带 Jitter 的有限指数退避、降低并发、缓存稳定数据、适当批量,并在 Deadline 停止。
不能从 API Access 推断许可。应确认产品、用户、地区与存储周期对应的展示和再分发条款。
它提供数据,但 Agent 仍需要身份、策略、标准化、验证、证据、重试与可观测性。
QVeris 可路由可发现的金融能力,应用继续负责业务策略、权威记录与验收测试。
官方资料与更新策略
Endpoint、价格、更新频率与许可信息于 2026 年 7 月 31 日根据官方资料核验。采购或上线前应重新检查当前套餐与协议。
档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。
