如何自动监控 AI 算力硬件周期?以英伟达(NVDA)、美光(MU)为例拉取季度毛利率与存货周转天数

2025 年初至 2026 年三季度,AI 算力硬件产业链走出了一轮极具迷惑性的盈利分化:上游 HBM 与 DRAM 存储龙头美光(MU)的单季毛利率从 2025Q1(财报期 FY2025 Q2,截至 2025-02-27)的阶段性低点 36.79% 飙升至 2026Q3(FY2026 Q4,截至 2026-09-03)的 86.76%,累计暴涨 +49.96 个百分点,一举反超中游 AI GPU 霸主英伟达(NVDA)截至最新已披露财季(FY2027 Q2,截至 2026-07-26)74.98% 的毛利率水平;而在同一时段,下游 AI 服务器组装龙头超微电脑(SMCI)的毛利率却在 2025Q4(FY2026 Q2,截至 2025-12-31)一度被挤压至 6.30% 的冰点,直到 2026Q2 才随液冷整机放量修复至 17.47%。

如果只盯单季营收同比增速,投研团队往往会在算力资本开支见顶或上游锁价挤压中游利润率时慢半拍。半导体与算力硬件周期的核心景气度信号,藏在利润表的单季毛利率(grossProfitMargin)与资产负债表及关键指标表的存货周转天数(daysOfInventoryOutstanding,简称 DIO)的联动拐点里。

但要把这套框架写成自动化量化监控脚本,直接拉取原始财报字段会立刻撞上三个工程与会计硬坑:第一,各家硬件大厂的财年截止月完全错位(NVDA 1 月底结账、MU 8 月底或 9 月初结账、SMCI 6 月底结账、AMD 12 月底结账);第二,FMP 单季指标接口的 DIO 采用期末存货 × 90 天口径,与教科书常见的期初期末平均存货口径在扩产备货期存在超过 10 天的系统性偏差;第三,巨额存货跌价准备会瞬间推高单季营业成本(costOfRevenue),在公式分母端制造出“存货周转天数暴跌”的伪去库假象(如 NVDA 在 FY2026 Q1 计提 $4.5B H20 出口管制相关费用时,报告 DIO 表面骤降 -26.88 天,实则期末存货绝对值反而增长了 +12.43%)。

本文基于 F 站(fmpquote.com)配套的企业级数据网关(quote-fmp.com)拉取的 NVDA、MU、AMD、SMCI 四个算力产业链核心标的 2024Q2–2026Q3 共 36 个已结账季度(每家 8 个展示季度 + 1 个前置差分基准季度)实盘数据,完整复盘 AI 硬件周期的上下游传导实证、清洗规则与 Python 自动化监控脚本。


一、 为什么“毛利率 + 存货周转天数(DIO)”是硬件周期的双核心?

半导体与算力硬件兼具高固定晶圆/封测折旧与长供应链备货周期(CoWoS 封装与 HBM 交期往往长达 6–9 个月)两大特征。在需求、库存与定价权的传导链条上,单靠利润表或单靠资产负债表都会产生盲区,必须将单季毛利率环比变化(ΔGM,单位:百分点 pp)、单季存货周转天数环比变化(ΔDIO,单位:天)以及期末存货绝对额环比增速(ΔInv%)组合成库存—盈利六状态判定矩阵:

周期阶段标签判定条件(单季环比 QoQ)产业微观机制解读2024–2026 算力产业链实盘典型样本
⚠️ 减值冲击伪去库(排雷项)ΔGM <= -5.0pp、ΔDIO < 0 但 ΔInv% > 0突发管制或产品滞销引发大额存货跌价准备计入 costOfRevenue,分母膨胀导致计算出的 DIO 失真暴跌NVDA 2025Q1(FY26 Q1)与 AMD 2025Q2(FY25 Q2):出口管制减值令毛利率单季骤降逾 10pp,DIO 表面假摔逾 26 天
🔥 主动去库 / 紧缺提价ΔGM > 0 且 ΔDIO <= 0下游订单消化速度超过产能爬坡,厂商无需大幅堆库存即可提价出货,定价权极强MU 2025Q2–2025Q3 及 2026Q1–2026Q2:毛利率从谷底 36.79% 跃升至 84.56%,DIO 从上季峰值 159.26 天降至 120.47 天
🚀 主动补库 / 景气扩张ΔGM >= -0.5pp 且 ΔDIO > 0新架构(如 Blackwell / Vera Rubin、HBM3E 12H)量产备货或景气上行期,厂商在高毛利护城河下主动扩充晶圆与组件库存NVDA 2026Q1–2026Q2(FY27 Q1–Q2):毛利率稳守 74.93%–74.98%,期末存货连涨至 $31.58B,DIO 升至 118.02 天
❄️ 被动累库 / 降价挤压ΔGM < -0.5pp 且 ΔDIO > 0下游提货放缓或同质化竞争加剧,库存积压在资产负债表上,同时毛利率受折价侵蚀MU 2025Q1(FY25 Q2):传统存储拖累致毛利率探底至 36.79%,DIO 见顶达 159.26 天
⚡ 薄利放量 / 折价去库-5.0pp < ΔGM <= -1.0pp 且 ΔDIO <= -10.0天集中交付放量或让利抢单,营收与出货成本增速远快于存货增速,周转加快但毛利率受挤压SMCI 2025Q4(FY26 Q2):机柜集中交付带动营收环比 +152.7%、DIO 骤降 -33.09 天,但价格战令毛利率跌 -3.02pp 至 6.30%
⚖️ 高位震荡 / 温和消化其余窄幅变动区间(abs(ΔGM) < 1.5pp 且 abs(ΔDIO) < 10天)产品代际切换过渡期或出货节奏季度间平滑阶段,供需与盈利能力处于窄幅平衡带NVDA 2024Q3(GM -0.59pp, DIO -3.29天)、AMD 2026Q1(GM -1.48pp, DIO -2.20天)

表格第一行的“减值冲击伪去库”与第五行的“薄利放量 / 折价去库”是量化监控中最关键的两道分水岭:前者(如 NVDA FY2026 Q1)并非存货实质出清(期末存货反增 +12.43%),主要系大额会计减值撑大分母、将原本 6.4 天的温和波动扭曲放大为 -26.88 天的暴跌假象;后者(如 SMCI FY2026 Q2)则是真出货放量、但以牺牲毛利率换取周转速度。


二、 动手写代码前必须排掉的三大数据口径陷阱

在调用网关接口拼装面板数据之前,我们先用 NVDA、MU、AMD、SMCI 的 36 个季度真实返回报文做一次逐字段验算,把三个最容易导致回测与监控失真的口径细节彻底扒开。

1. 陷阱一:FMP 单季 DIO 的“期末存货 × 90 天”口径 vs 教科书“期初期末均值”口径

在财务分析教科书以及本站 财务指标计算公式全集 的标准定义中,存货周转天数(DIO)通常采用期初与期末平均存货除以日均营业成本。但当我们对 /stable/key-metrics?period=quarter 与 /stable/ratios?period=quarter 返回的 36 个单季样本做逐季精确对账时,实测验算出 FMP 单季接口的底层生产公式全部采用当期期末值 + 90 天单季折算因子(36 季 × 6 项公式共 216 次验算的最大浮点偏差仅为 2.84e-14,在 6 位小数精度下误差为 0):

为什么要特别区分期末口径(DIO_End90)与期初期末均值口径(DIO_Avg90 = ((Inv_t + Inv_{t-1}) / 2) / COGS_t * 90)?因为在算力大厂高速扩产备货期,期末存货单季环比增幅经常超过 +20% 甚至 +30%,两种口径会拉开超过 10 天的差距:

季度与标的结账日(date)当季营业成本 costOfRevenue上季期末存货 Inv_{t-1}当季期末存货 Inv_t(环比)FMP 单季报告值 DIO_End90均值重算口径 DIO_Avg90口径差值(End90 - Avg90)
NVDA FY26 Q22025-07-27$12.890B$11.333B$14.962B(+32.02%)104.47 天91.80 天+12.67 天
NVDA FY26 Q32025-10-26$15.157B$14.962B$19.784B(+32.23%)117.47 天103.16 天+14.31 天
NVDA FY27 Q22026-07-26$24.079B$25.797B$31.575B(+22.40%)118.02 天107.22 天+10.80 天
MU FY26 Q42026-09-03$7.182B$8.567B$10.372B(+21.07%)129.97 天118.67 天+11.31 天
SMCI FY26 Q22025-12-31$11.884B$5.730B$10.595B(+84.91%)80.24 天61.82 天+18.42 天

实盘监控建议双轨并列:DIO_End90 对期末资产负债表最新的备货水位最敏感,适合做先行预警;而 DIO_Avg90 平滑了季末最后几周集中到货的脉冲,适合做跨周期历史分位数比较。


2. 陷阱二:存货减值计入营业成本引发的“分母膨胀伪去库”与还原验算

以 NVDA 2025Q1(财报期 FY2026 Q1,结账日 2025-04-27,SEC 接收时间 acceptedDate: 2025-05-28 16:32:57)为例:当季受定制芯片出口管制政策突变影响,英伟达在营业成本(costOfRevenue)中一次性计提了官方披露高达 $4.5B 的 H20 相关存货跌价准备与采购承诺费用。我们把前后的财务账本拆开看:

完全相同的会计冲击也发生在 AMD 的 2025Q2(FY2025 Q2,结账日 2025-06-28,acceptedDate: 2025-08-05 17:19:03):当季 AMD 营收 $7.685B(环比 +3.32%),但因 MI308 出口管制计提约 $0.8B 存货及相关费用,costOfRevenue 环比跳升 +24.97% 至 $4.626B,单季毛利率从 50.23% 摔至 39.80%(-10.42pp);期末存货从 $6.416B 增加到 $6.677B(+4.07%),报告 DIO 表面从 155.98 天跌至 129.90 天(-26.08 天)。一旦在分母端剔除这 $0.8B 一次性费用,还原后的 DIO 实为 157.06 天(6.677 / (4.626 - 0.800) * 90),较上季 155.98 天反而小幅上升了 +1.08 天!

因此在自动化脚本里,只要识别到 ΔGM <= -5.0pp、ΔDIO < 0 且 ΔInv% > 0 同时成立,必须立即将该季度打标为 ⚠️ 减值冲击伪去库,提醒研究员核查财报附注中的一次性存货计提,严禁将其直接当成经营性周转提速。


3. 陷阱三:非自然年财报季(Non-Calendar Fiscal Year)跨公司错位与 PIT 时间戳

算力产业链上下游公司的财年日历千差万别。如果直接按接口返回的 (fiscalYear, period) 字段做 GROUP BY 横向对比,会把相隔 7 个月的财报硬凑在同一行:

公司代码产业链位置财年结束月份最新已披露财报期财报结账日(date)SEC 申报日(filingDate)SEC 接收时间戳(acceptedDate,美东 ET)中心日映射自然季(date - 45天)
MU上游:HBM / DRAM 存储8 月底 / 9 月初FY2026 Q42026-09-032026-10-092026-10-09 08:21:002026Q3(涵盖 6–8 月经营)
NVDA中游:AI GPU 主芯片1 月底FY2027 Q22026-07-262026-08-262026-08-26 16:36:002026Q2(涵盖 5–7 月经营)
AMD中游:AI 加速卡与 CPU12 月底FY2026 Q22026-06-272026-08-052026-08-04 17:40:012026Q2(涵盖 4–6 月经营)
SMCI下游:AI 液冷服务器整机6 月底FY2026 Q42026-06-302026-08-312026-08-31 14:21:232026Q2(涵盖 4–6 月经营)

工程上最稳健的跨公司日历分桶方法,是利用单季约 90 天的经营跨度:用财报结账日 date 往前推 45 天(date - 45 days),取该季度经营中心日所在的自然年与自然季度作为对齐桶(同时保留原始 date 与 fy_q 供精确溯源):


三、 实盘数据复盘:2024Q3–2026Q3 AI 算力上下游周期传导全账本

我们通过 F 网关(quote-fmp.com)拉取 NVDA、MU、AMD、SMCI 的 利润表 API、资产负债表 API、财务比率 API 与 关键指标 API,将对齐到自然季度后的 32 个展示季度样本(每家最近 8 个季度,首季环比基于第 9 个前置季度计算)汇总如下。

1. 上游存储(MU)与中游 GPU(NVDA)8 季度周期演进对账表

自然季标的原始财报期结账日 date营收 Rev营业成本 COGS期末存货 Inv(环比)毛利率 GM(环比)DIO_End90(DIO_Avg90 / 环比)CCC周期阶段自动判定
2024Q3NVDAFY25 Q32024-10-27$35.08B$8.93B$7.65B(+14.7%)74.56%(-0.59pp)77.17 天(72.24 / -3.29)68.59 天⚖️ 高位震荡/温和消化
2024Q4NVDAFY25 Q42025-01-26$39.33B$10.61B$10.08B(+31.7%)73.03%(-1.53pp)85.52 天(75.23 / +8.35)84.76 天❄️ 被动累库/降价挤压
2025Q1NVDAFY26 Q12025-04-27$44.06B$17.39B$11.33B(+12.4%)60.52%(-12.51pp)58.64 天(55.40 / -26.88)65.91 天⚠️ 减值冲击伪去库
2025Q2NVDAFY26 Q22025-07-27$46.74B$12.89B$14.96B(+32.0%)72.42%(+11.90pp)104.47 天(91.80 / +45.83)94.72 天🚀 主动补库/景气扩张
2025Q3NVDAFY26 Q32025-10-26$57.01B$15.16B$19.78B(+32.2%)73.41%(+0.99pp)117.47 天(103.16 / +13.01)118.98 天🚀 主动补库/景气扩张
2025Q4NVDAFY26 Q42026-01-25$68.13B$17.03B$21.40B(+8.2%)75.00%(+1.59pp)113.08 天(108.81 / -4.39)112.06 天🔥 主动去库/紧缺提价
2026Q1NVDAFY27 Q12026-04-26$81.61B$20.46B$25.80B(+20.5%)74.93%(-0.06pp)113.49 天(103.82 / +0.40)100.76 天🚀 主动补库/景气扩张
2026Q2NVDAFY27 Q22026-07-26$96.22B$24.08B$31.57B(+22.4%)74.98%(+0.04pp)118.02 天(107.22 / +4.53)120.71 天🚀 主动补库/景气扩张
2024Q4MUFY25 Q12024-11-28$8.71B$5.36B$8.71B(-1.9%)38.44%(+3.13pp)146.14 天(147.57 / -13.20)180.54 天🔥 主动去库/紧缺提价
2025Q1MUFY25 Q22025-02-27$8.05B$5.09B$9.01B(+3.5%)36.79%(-1.65pp)159.26 天(156.59 / +13.12)189.81 天❄️ 被动累库/降价挤压
2025Q2MUFY25 Q32025-05-29$9.30B$5.79B$8.73B(-3.1%)37.72%(+0.92pp)135.58 天(137.76 / -23.68)164.70 天🔥 主动去库/紧缺提价
2025Q3MUFY25 Q42025-08-28$11.31B$6.26B$8.36B(-4.3%)44.67%(+6.95pp)120.10 天(122.77 / -15.48)148.77 天🔥 主动去库/紧缺提价
2025Q4MUFY26 Q12025-11-27$13.64B$6.00B$8.21B(-1.8%)56.04%(+11.38pp)123.14 天(124.26 / +3.04)141.89 天🚀 主动补库/景气扩张
2026Q1MUFY26 Q22026-02-26$23.86B$6.11B$8.27B(+0.8%)74.41%(+18.37pp)121.87 天(121.42 / -1.26)137.25 天🔥 主动去库/紧缺提价
2026Q2MUFY26 Q32026-05-28$41.46B$6.40B$8.57B(+3.6%)84.56%(+10.15pp)120.47 天(118.36 / -1.40)136.51 天🔥 主动去库/紧缺提价
2026Q3MUFY26 Q42026-09-03$54.23B$7.18B$10.37B(+21.1%)86.76%(+2.19pp)129.97 天(118.67 / +9.50)145.96 天🚀 主动补库/景气扩张

从这张实盘对账表里,可以清晰读出三条产业量化结论:

  1. 美光(MU)给出了教科书级的“周期右侧确认拐点”信号:在 2025Q1(FY25 Q2),MU 毛利率跌至 36.79%、同时 DIO 冲上 159.26 天(现金转换周期 CCC 高达 189.81 天),属于典型的“毛利率筑底 + DIO 见顶”被动累库极值。紧接着在 2025Q2(FY25 Q3,2025-05-29 结账),MU 的 DIO 单季大幅回落 -23.68 天至 135.58 天,期末库存绝对额下降 -3.1%,毛利率同步企稳回升 +0.92pp 至 37.72%。这一季正是自动化脚本捕捉到的去库提价右侧拐点。从 2025Q1 谷底至 2026Q3(FY26 Q4)跨越 6 个季度间隔,受 HBM 产能售罄并执行锁价长约驱动,MU 单季营收从 $8.053B 跃升至 $54.229B(增至 6.73 倍,累计增幅 +573.40%),而单季营业成本(COGS)因为晶圆厂折旧刚性仅从 $5.090B 温和增至 $7.182B,极强的经营杠杆直接把单季毛利率推高至 86.76%!
  2. 结合 产品分部营收 API 验证营收结构向高价值数据中心集中:拉取 /stable/revenue-product-segmentation?symbol=MU&period=quarter 可见,美光重组四大新事业部并对 FY2025 Q1(2024-11-28)以来的历史分部数据做了同口径追溯重述:仅在 FY2026 Q1(2025-11-27)至 FY2026 Q4(2026-09-03)四个季度内,承载高价值 HBM 与云端内存的云内存事业部(CMBU)单季营收便从 $5.284B 跃升至 $16.283B(+208.16%),核心数据中心事业部(CDBU)从 $2.379B 暴增至 $18.002B(+656.70%),两大 AI 核心分部合计占美光总营收比重已达 63.22%($34.285B / $54.229B,五个分部加总与利润表总营收误差为 0)。
  3. 上游的暴利正在变成中游 NVDA 的成本压力(财报与电话会双重印证):对照看 NVDA,自 FY2027 Q1 起其分部披露由五段合并为 Data Center 与 Edge Computing 两段;从 2025Q4(FY26 Q4)到 2026Q2(FY27 Q2),尽管数据中心分部(Data Center)单季营收从 $62.314B(占总营收 91.47%)飙升至 $89.023B(占总营收 $96.221B 的 92.52%),但单季毛利率却在 75.00% → 74.93% → 74.98% 连续三季横盘。我们在 用 AI Agent 读懂美股财报电话会 中通过 财报电话会议记录 API 提取到了 NVDA CFO Colette Kress 在 2026-08-26(FY2027 Q2)电话会上的两段核心原话:

2. 中游追赶者(AMD)与下游服务器整机(SMCI)8 季度对账表

为了检验监控模型在产业链不同生态位的表现,我们把同期的 AMD 与 SMCI 实盘面板一并列出:

自然季标的原始财报期结账日 date营收 Rev期末存货 Inv(环比)毛利率 GM(环比)DIO_End90(DIO_Avg90 / 环比)CCC周期阶段自动判定
2024Q3AMDFY24 Q32024-09-28$6.82B$5.37B(+7.7%)50.14%(+1.06pp)142.25 天(137.18 / -8.94)171.23 天🔥 主动去库/紧缺提价
2024Q4AMDFY24 Q42024-12-28$7.66B$5.73B(+6.7%)50.69%(+0.55pp)136.67 天(132.38 / -5.58)170.72 天🔥 主动去库/紧缺提价
2025Q1AMDFY25 Q12025-03-29$7.44B$6.42B(+11.9%)50.23%(-0.46pp)155.98 天(147.69 / +19.31)178.41 天🚀 主动补库/景气扩张
2025Q2AMDFY25 Q22025-06-28$7.68B$6.68B(+4.1%)39.80%(-10.42pp)129.90 天(127.36 / -26.08)136.57 天⚠️ 减值冲击伪去库
2025Q3AMDFY25 Q32025-09-27$9.25B$7.31B(+9.5%)51.70%(+11.89pp)147.37 天(140.97 / +17.47)140.58 天🚀 主动补库/景气扩张
2025Q4AMDFY25 Q42025-12-27$10.27B$7.92B(+8.3%)54.30%(+2.61pp)151.89 天(146.07 / +4.51)151.06 天🚀 主动补库/景气扩张
2026Q1AMDFY26 Q12026-03-28$10.25B$8.04B(+1.6%)52.82%(-1.48pp)149.69 天(148.53 / -2.20)146.90 天⚖️ 高位震荡/温和消化
2026Q2AMDFY26 Q22026-06-27$11.54B$8.47B(+5.3%)53.77%(+0.95pp)142.91 天(139.34 / -6.78)109.27 天🔥 主动去库/紧缺提价
2024Q3SMCIFY25 Q12024-09-30$5.94B$4.93B(+13.8%)13.06%(+2.87pp)85.97 天(80.76 / +4.87)98.04 天🚀 主动补库/景气扩张
2024Q4SMCIFY25 Q22024-12-31$5.68B$3.60B(-27.1%)11.80%(-1.26pp)64.63 天(76.62 / -21.34)103.53 天⚡ 薄利放量/折价去库
2025Q1SMCIFY25 Q32025-03-31$4.60B$3.87B(+7.6%)9.57%(-2.23pp)83.74 天(80.77 / +19.11)121.82 天❄️ 被动累库/降价挤压
2025Q2SMCIFY25 Q42025-06-30$5.76B$4.68B(+20.9%)9.45%(-0.12pp)80.81 天(73.81 / -2.93)93.34 天⚖️ 高位震荡/温和消化
2025Q3SMCIFY26 Q12025-09-30$5.02B$5.73B(+22.4%)9.31%(-0.14pp)113.33 天(102.95 / +32.52)133.31 天🚀 主动补库/景气扩张
2025Q4SMCIFY26 Q22025-12-31$12.68B$10.60B(+84.9%)6.30%(-3.02pp)80.24 天(61.82 / -33.09)54.18 天⚡ 薄利放量/折价去库
2026Q1SMCIFY26 Q32026-03-31$10.24B$11.10B(+4.8%)9.95%(+3.65pp)108.33 天(105.86 / +28.09)146.54 天🚀 主动补库/景气扩张
2026Q2SMCIFY26 Q42026-06-30$11.12B$12.90B(+16.1%)17.47%(+7.52pp)126.47 天(117.68 / +18.14)154.01 天🚀 主动补库/景气扩张

对比 AMD 与 SMCI 可以看到产业链上下游营运资金与利润率的分层:


四、 Python 自动化监控实战:一键拉取、日历对齐与周期打标

下面给出完整、零外部重依赖(仅使用 Python 标准库)的自动化监控最小可用脚本。脚本通过 F 网关(https://quote-fmp.com/stable)拉取四大接口,内置 3 次网络异常自动重试、相邻财季连续性校验、date - 45天 自然季分桶、DIO_End90 与 DIO_Avg90 双口径并算以及六状态周期分类器。

运行前请先在终端设置环境变量 export FMP_KEY="你的密钥"(Windows PowerShell 使用 $env:FMP_KEY="你的密钥";尚未获取密钥可在 接口价格与套餐 页面开通):

import json, os, time, urllib.request
from datetime import datetime

BASE_URL, API_KEY = "https://quote-fmp.com/stable", os.environ["FMP_KEY"]


def fmp_get(path: str, **params) -> list[dict]:
    params["apikey"] = API_KEY
    url = f"{BASE_URL}/{path}?" + "&".join(f"{k}={v}" for k, v in params.items())
    for attempt in range(3):
        try:
            req = urllib.request.Request(url, headers={"User-Agent": "fmpquote-cycle/1.0"})
            with urllib.request.urlopen(req, timeout=20) as resp:
                return json.loads(resp.read().decode("utf-8"))
        except Exception:
            if attempt == 2: raise
            time.sleep(1.5 * (attempt + 1))


def to_cal_quarter(date_str: str) -> str:
    mid = datetime.fromordinal(datetime.strptime(date_str, "%Y-%m-%d").toordinal() - 45)
    return f"{mid.year}Q{(mid.month - 1) // 3 + 1}"


def classify_phase(d_gm_pp: float, d_dio: float, d_inv_pct: float) -> str:
    if d_gm_pp <= -5.0 and d_dio < 0 and d_inv_pct > 0: return "⚠️ 减值冲击伪去库"
    if d_gm_pp > 0 and d_dio <= 0: return "🔥 主动去库/紧缺提价"
    if d_gm_pp >= -0.5 and d_dio > 0: return "🚀 主动补库/景气扩张"
    if d_gm_pp < -0.5 and d_dio > 0: return "❄️ 被动累库/降价挤压"
    return "⚡ 薄利放量/折价去库" if (d_gm_pp <= -1.0 and d_dio <= -10.0) else "⚖️ 高位震荡/温和消化"


for sym in ["NVDA", "MU", "AMD", "SMCI"]:
    inc = {r["date"]: r for r in fmp_get("income-statement", symbol=sym, period="quarter", limit=9)}
    bal = {r["date"]: r for r in fmp_get("balance-sheet-statement", symbol=sym, period="quarter", limit=9)}
    rat = {r["date"]: r for r in fmp_get("ratios", symbol=sym, period="quarter", limit=9)}
    km = {r["date"]: r for r in fmp_get("key-metrics", symbol=sym, period="quarter", limit=9)}
    dates = sorted(set(inc) & set(bal) & set(rat) & set(km))
    for d, prev_d in zip(dates[1:], dates[:-1]):
        assert (datetime.strptime(d, "%Y-%m-%d") - datetime.strptime(prev_d, "%Y-%m-%d")).days <= 110, f"缺季告警:{sym} {prev_d}->{d}"
        rev, cogs, inv, prev_inv = inc[d]["revenue"], inc[d]["costOfRevenue"], bal[d]["inventory"], bal[prev_d]["inventory"]
        gm, prev_gm = rat[d]["grossProfitMargin"] * 100, rat[prev_d]["grossProfitMargin"] * 100
        dio, prev_dio = km[d]["daysOfInventoryOutstanding"], km[prev_d]["daysOfInventoryOutstanding"]
        dio_avg90 = ((inv + prev_inv) / 2) / cogs * 90 if cogs else 0.0
        d_gm, d_dio, d_inv = gm - prev_gm, dio - prev_dio, (inv - prev_inv) / prev_inv * 100
        print(f"{sym:4s} | {to_cal_quarter(d)} ({d}) | Rev {rev/1e9:5.2f}B | Inv {inv/1e9:5.2f}B ({d_inv:+5.1f}%) | "
              f"GM {gm:5.2f}% ({d_gm:+6.2f}pp) | DIO {dio:6.2f}d (Avg90 {dio_avg90:6.2f}d) | {classify_phase(d_gm, d_dio, d_inv)}")

脚本包含三项针对实盘数据清洗的保护机制:


五、 常见问答(FAQ)

1. 为什么 /stable/key-metrics-ttm 的 DIO_TTM(如 NVDA 为 150.20 天)会比单季 DIO(118.02 天)高出这么多?

这源于 FMP 滚动十二个月接口(财务比率 TTM API 与 关键指标 TTM API)的底层算法差异。经对四家公司原始数据复算验证:

2. 资产负债表接口里只有总存货 inventory,如何进一步求证“原材料备货”与“产成品积压”?

通用标准化资产负债表(/stable/balance-sheet-statement)按 GAAP 准则汇总披露期末总存货 inventory,单凭毛利率、存货与 DIO 三个指标只能给出周期状态初筛。若在监控中发现某标的触发了 DIO 单季跳升超过 +15 天,下一步应调阅 10-Q/10-K 存货附注(核对 raw materials 原材料、work in process 在产品与 finished goods 产成品的明细占比),或结合 财报电话会议记录 API 检索管理层对备货动机的说明(如前文 NVDA CFO 明确说明 $31.58B 存货系为 Vera Rubin 备货)。

3. 除了 DIO 之外,现金转换周期(CCC)和应付账款周转天数(DPO)能提供什么辅助视角?

CCC = DSO + DIO - DPO 衡量的是企业从支付上游供应商货款到从下游客户收回现金的净垫资周期。在 /stable/key-metrics?period=quarter 中:

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