mcpField
E
earnings-preview-single

earnings-preview-single

github.com/anthropics数据与数据库40.9k1.8k 次安装今天更新
代码仓库

关于 earnings-preview-single

用于生成单家公司业绩预览报告的 Skill,输出独立 HTML 文件。它为股票研究规定了数据来源、分阶段采集、计算核验和引用链接要求。

主要功能

  1. 01单家公司业绩预览
  2. 02生成适合打印的 HTML 报告
  3. 03仅使用 Kensho Grounding MCP 和 S&P Global MCP
  4. 04分阶段研究并保存中间数据
  5. 05核验计算、引语和引用

适用场景

  1. 01准备公司的下一期业绩预览
  2. 02比较上市同业的估值和收益
  3. 03制作带来源链接的股票研究报告

MCP 相关

限定仅使用 Kensho Grounding MCP 的 search 和 S&P Global MCP 的 kfinance,并规定通过工具获取公司、业绩电话会、价格、预估及同业数据的流程。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/anthropics/financial-services --skill earnings-preview-single

安装后在 Claude Code 中输入/earnings-preview-single确认已加载。

附带文件LICENSEreport-template.md

详细介绍

单公司财报前瞻

为单家公司生成一份简洁、专业的股票研究财报前瞻。输出为一个自包含的 HTML 文件,目标打印长度为 4-5 页。报告数据密集、图表丰富,叙述紧凑、直击要点。

数据来源(零例外): 唯一允许的数据来源是 Kensho Grounding MCP(search)和 S&P Global MCP(kfinance)。绝对不得使用任何其他工具、数据来源或任何形式的网络访问。具体而言:

  • 不要使用 WebSearch、WebFetch、web_search、brave_search、google_search 或任何网络/互联网搜索工具——即使 Kensho 响应缓慢、没有返回结果或暂时不可用。
  • 不要使用任何浏览器、URL 抓取或网络工具。
  • 如果 Kensho Grounding 对某个查询没有返回结果,请尝试改写查询,或在报告中注明“数据不可用”。绝不能退而使用网络搜索作为替代方案。
  • 报告中的每一条信息都必须可追溯到一次 kfinance MCP 函数调用或一次 Kensho search 调用。如果无法追溯到这两者之一,就不得出现在报告中。

关键规则: 在撰写报告的任何部分之前,你必须完成所有研究和数据收集(阶段 1-5)。

中间文件: 所有来自 MCP 工具调用的原始数据都必须在每次工具调用返回后立即写入 /tmp/earnings-preview/ 中的文件——在进入下一次调用之前。这可以保护数据免受上下文窗口压缩的影响。不要仅将数据保存在内存中。在阶段 1 开始时,运行 mkdir -p /tmp/earnings-preview 创建该目录。在生成 HTML 报告之前(阶段 7),你必须使用 cat 命令将所有中间文件读回上下文。这些文件——而不是你对早前对话的记忆——是报告中每个数字、引文和来源 URL 的唯一事实来源。如果你跳过读取文件,报告必然会出现错误。

财季规则: 绝不要根据日历报告日期推断财季。许多公司采用非标准财年(例如,沃尔玛的财年于 1 月 31 日结束,因此 2026 年 2 月的报告对应的是 Q4 FY2026,而不是 Q4 2025 或 Q1 2026)。始终使用 get_next_earnings_from_identifiers 或 get_earnings_from_identifiers 返回的财报电话会议名称中所陈述的财季和财年(例如,“Walmart Q4 FY2026 Earnings Call”表示该季度为 Q4 FY2026)。在报告标题、页眉、表格及所有引用中逐字使用该表述。如果会议名称有歧义,请与 get_financial_line_item_from_identifiers 的期间标签进行交叉核对。

篇幅规则: 报告必须简洁。打印时目标为 4-5 页。不要写长篇多段叙述。使用紧凑、有力的要点。每句话都必须有其价值。如果能用更少的词表达,就用更少的词。

逐字引用规则: 在 <blockquote> 标签中引用管理层言论时,文本必须从电话会议记录中逐字复制——一字不差,包括填充词和句子片段。不要转述、重新排列、合并来自记录不同部分的句子或“整理”引文。如果你无法在记录中找到确切的措辞,就不要将其作为直接引述呈现。相反,请用你自己的叙述语气转述,不使用 blockquote 格式(例如,“管理层指出数据中心需求依然显著”)。每个 blockquote 都必须是逐字、可复制粘贴的摘录,并可与电话会议记录核实。 计算完整性规则: 对于任何多步骤计算(由年度指引推导的隐含季度数字、LTM P/E、同比增速、分部同比变化),必须明确写出每一步,并在将中间结果用于下一步之前进行验证。如果你写出 A + B + C = X,请先验证 X 在算术上正确,再将 X 用于后续公式。如果附录中显示的合计不等于其列出的各项之和,则报告有误。如有疑问,请从原始数据重新计算,而不要复用之前计算出的中间结果。

比率命名规则: 所有估值比率必须明确标注为 LTM(最近十二个月)或 NTM(未来十二个月)。绝不要使用 "trailing" 或 "forward" —— 始终使用 LTM 或 NTM。LTM 比率使用最近 4 个已报告季度的总和。NTM 比率使用来自 get_consensus_estimates_from_identifiers 的未来 4 个季度一致预期均值 EPS 估计之和 —— 而不是单一的年度数字。LTM 和 NTM P/E 都必须在竞争对手比较表中计算并展示。

超链接规则(严格执行): 报告中的每一项陈述 —— 无论是数值还是非数值 —— 都必须用 <a href="#ref-N" class="data-ref"> 超链接包裹,指向附录中对应的条目。这不是可选项。报告中的每一个数字都必须是可点击的链接。 这包括:收入数字、EPS、利润率、增长率、市值、P/E 比率、股票回报、目标价、分部收入,以及任何其他财务指标。它还包括来自电话会议记录或 Kensho 搜索的定性陈述。如果你将其作为事实陈述,就必须链接到来源。为每一项唯一陈述分配一个顺序引用 ID(ref-1、ref-2 等)。超链接样式较为低调 —— 海军蓝色,无下划线,悬停时显示点状下划线。不要在报告正文中写出任何未用 <a> 标签包裹的数字。 示例:写 <a href="#ref-1" class="data-ref">$152.3B</a>,绝不要将 $152.3B 写成纯文本。


阶段 1:公司概况与设置

  1. 从 $ARGUMENTS 中解析单个公司股票代码(去除空白)。
  2. 运行 mkdir -p /tmp/earnings-preview 以创建工作目录。
  3. 调用 get_latest() 以建立当前报告期上下文。
  4. 调用 get_info_from_identifiers —— 记录市值、行业。
  5. 调用 get_company_summary_from_identifiers —— 记录业务描述。
  6. 调用 get_next_earnings_from_identifiers —— 记录即将到来的财报日期和财季名称。

立即写入 /tmp/earnings-preview/company-info.txt:

TICKER: [ticker]
COMPANY: [full name]
INDUSTRY: [industry]
MARKET_CAP: [value] (as of [date])
NEXT_EARNINGS_DATE: [date]
NEXT_EARNINGS_QUARTER: [Q# FY#### exactly as returned by API]
BUSINESS_DESCRIPTION: [2-3 sentence summary]

阶段 2:财报电话会议记录分析(强制 —— 在写作前完成)

  1. 调用 get_latest_earnings_from_identifiers 以获取最近一次已完成的财报电话会议的 key_dev_id。
  2. 针对该会议记录调用 get_transcript_from_key_dev_id。
  3. 立即写入 /tmp/earnings-preview/transcript-extracts.txt,包含以下部分。趁会议记录仍在上下文中时写入此文件 —— 不要等待:
TRANSCRIPT_SOURCE: [Call Name, e.g., "Q3 2025 Earnings Call"]
KEY_DEV_ID: [key_dev_id]
CALL_DATE: [date]
FISCAL_QUARTER: [Q# FY####]

=== VERBATIM QUOTES (copy-paste exactly — do NOT paraphrase) ===
QUOTE_1: "[exact text from transcript]"
SPEAKER_1: [Name], [Title]
CONTEXT_1: [1 sentence on where this appeared — prepared remarks or Q&A]

QUOTE_2: "[exact text from transcript]"
SPEAKER_2: [Name], [Title]
CONTEXT_2: [context]

QUOTE_3: "[exact text from transcript]"
SPEAKER_3: [Name], [Title]
CONTEXT_3: [context]

QUOTE_4: "[exact text from transcript]"
SPEAKER_4: [Name], [Title]
CONTEXT_4: [context]

=== GUIDANCE (quantitative only) ===
- [metric]: [range or point estimate as stated by management]
- [metric]: [range or point estimate]

=== KEY DRIVERS ===
- [driver 1 with supporting data point]
- [driver 2 with supporting data point]
- [driver 3 with supporting data point]

=== HEADWINDS & RISKS ===
- [risk 1 with quantification if available]
- [risk 2]

=== ANALYST Q&A THEMES ===
- [theme 1: what analysts pushed on]
- [theme 2]
- [theme 3]

=== SYNTHESIS: THEMES TO WATCH NEXT QUARTER ===
- [theme 1]
- [theme 2]
- [theme 3]

第 3 阶段:竞争对手分析

  1. 调用 get_competitors_from_identifiers,设置 competitor_source="all"。
  2. 选择 5-7 个最相关的公开竞争对手。
  3. 对于该公司以及所有选定的竞争对手,收集:
    • get_prices_from_identifiers,设置 periodicity="day",最近 12 个月
    • get_financial_line_item_from_identifiers,用于 diluted_eps,period_type="quarterly",num_periods=8
    • get_capitalization_from_identifiers,设置 capitalization="market_cap"(最新)
    • get_consensus_estimates_from_identifiers,设置 period_type="quarterly",num_periods_forward=4 — 这会返回未来 4 个季度的共识平均 EPS 预测,将其相加即可计算 NTM EPS

每次工具调用返回后,立即将原始数据追加到相应的中间文件:

写入 /tmp/earnings-preview/prices.csv — 每行对应一个(ticker,date,close)。包含 source 列,填入确切的 MCP 函数调用。先写入标的公司的价格,然后在获取每个竞争对手的数据时依次写入:

ticker,date,close,source
D,2025-02-19,55.67,get_prices_from_identifiers(identifier='D',periodicity='day')
D,2025-02-20,55.82,get_prices_from_identifiers(identifier='D',periodicity='day')
...
DUK,2025-02-19,111.79,get_prices_from_identifiers(identifier='DUK',periodicity='day')
...

注意:来自单次调用的所有行的 source 值都相同 — 在每一行都写入它,以便始终可用。

写入 /tmp/earnings-preview/peer-eps.csv — 每行对应一个(ticker,period,eps)。在每次 diluted_eps 调用后立即写入:

ticker,period,diluted_eps,source
D,Q4 2024,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...
DUK,Q4 2024,1.52,get_financial_line_item_from_identifiers(identifier='DUK',line_item='diluted_eps',period_type='quarterly')
...

写入 /tmp/earnings-preview/peer-market-caps.csv — 每行对应一个 ticker。在每次 market_cap 调用后立即写入:

ticker,market_cap,retrieval_date,source
D,55900000000,2026-02-19,get_capitalization_from_identifiers(identifier='D',capitalization='market_cap')
DUK,98300000000,2026-02-19,get_capitalization_from_identifiers(identifier='DUK',capitalization='market_cap')
...

写入 /tmp/earnings-preview/consensus-eps.csv — 每行对应一个(ticker,period,共识平均 EPS)。在每次 get_consensus_estimates_from_identifiers 调用后立即写入:

ticker,period,consensus_mean_eps,num_estimates,source
D,Q4 2025,0.88,12,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q1 2026,0.72,10,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q2 2026,0.91,9,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
D,Q3 2026,1.05,8,get_consensus_estimates_from_identifiers(identifier='D',period_type='quarterly',num_periods_forward=4)
DUK,Q4 2025,1.48,14,get_consensus_estimates_from_identifiers(identifier='DUK',period_type='quarterly',num_periods_forward=4)
...
  1. 暂时不要计算 P/E 或回报率。 原始数据现在已在磁盘上。计算在第 6 阶段(验证)进行,从这些文件中读取。

日期一致性规则(股票回报率): 在计算比较性股票回报率(YTD %、1 年 %、30 天 %、90 天 %)时,所有 ticker 必须使用完全相同的起始日期和结束日期。在将所有价格数据写入 prices.csv 后,找出所有 ticker 数据中都出现的第一个交易日期,并将其作为共同基准日期。不要为不同 ticker 使用不同的基准日期(例如,标的公司用 2 月 19 日,竞争对手用 2 月 28 日)。如果某个 ticker 的数据起始时间晚于其他 ticker,则对所有计算使用第一个重叠日期。在附录中为每项回报率计算注明共同基准日期。

P/E 货币规则(LTM P/E): 在计算每家公司 LTM P/E 时,使用该公司来自 peer-eps.csv 的最近 4 个已报告季度 — 而不是对所有公司统一应用固定的日历窗口。如果某个竞争对手已经报告了 2025 年 Q4,而标的公司仅报告到 2025 年 Q3,则该竞争对手的 LTM EPS 应包含 2025 年 Q4。检查每家公司的最近报告期,并为每家公司使用最近 4 个周期。在附录中注明每次 P/E 计算使用了哪 4 个季度。

市值日期戳: 在报告市值时,使用 peer-market-caps.csv 中的 retrieval_date。如果它与报告日期不同,请在附录中注明。


阶段 4:新闻、预期与行业情报(通过 Kensho Grounding)

针对以下每个类别运行这些 search 查询。不得跳过任何一项。

关键 — 记录来源 URL: 每个 Kensho search 结果都包含底层文章、报告或数据页面的来源 URL。你必须在每条发现旁边记录该 URL。

每次 search 调用后,立即将结果追加到 /tmp/earnings-preview/kensho-findings.txt,使用以下格式。不要等到所有搜索完成——每次搜索后立即写入:

=== SEARCH: "[query used]" ===
DATE_RUN: [today's date]
CATEGORY: [estimates|analyst_ratings|risks|news|sector]

FINDING_1: [key finding or excerpt]
URL_1: [source URL from search result]
SOURCE_1: [publication name, date if available]

FINDING_2: [key finding or excerpt]
URL_2: [source URL]
SOURCE_2: [publication name, date]

[...continue for all relevant results from this search...]

盈利预期与分析师情绪:

  1. search 查询 "[TICKER] earnings estimates consensus EPS revenue upcoming quarter"
    • 记录:共识 EPS、共识营收、过去 90 天的预期修正方向。
    • 立即追加到 kensho-findings.txt。
  2. search 查询 "[TICKER] analyst ratings price target upgrades downgrades"
    • 记录:近期上调/下调评级、目标价区间、看多/看空论点摘要。
    • 立即追加到 kensho-findings.txt。
  3. search 查询 "[TICKER] risks bear case concerns investors"
    • 记录:关键争议点、看空论据、即将发布的财报的摆动因素。
    • 立即追加到 kensho-findings.txt。

近期新闻(强制要求 — 不得跳过): 4. search 查询 "[TICKER] [company name] recent news developments"

  • 记录:过去 60 天内的重大新闻——并购、产品发布、高管变动、监管行动、合作、法律进展、关税,或任何可能影响即将发布的财报或前瞻指引的事件。
  • 对每条新闻,注明日期、标题、潜在盈利影响。
  • 立即追加到 kensho-findings.txt。

行业背景: 5. search 查询 "[company industry/sector] sector outlook trends"

  • 记录:行业层面的顺风/逆风、宏观数据、竞争动态。
  • 立即追加到 kensho-findings.txt。

阶段 5:财务数据收集

季度财务数据(最近 8 个季度): 使用 get_financial_line_item_from_identifiers,设置 period_type="quarterly"、num_periods=8,针对: revenue、gross_profit、operating_income、ebitda、net_income、diluted_eps

每次行项目调用返回后,立即追加到 /tmp/earnings-preview/financials.csv。按返回的原始值原样写入——此时不要四舍五入或换算。包含 source 列,其中写明确切的 MCP 函数调用和参数:

ticker,period,line_item,value,source
D,Q4 2024,revenue,3941000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q1 2025,revenue,3400000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q2 2025,revenue,4076000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q3 2025,revenue,3810000000,get_financial_line_item_from_identifiers(identifier='D',line_item='revenue',period_type='quarterly')
D,Q4 2024,diluted_eps,1.09,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
D,Q1 2025,diluted_eps,-0.11,get_financial_line_item_from_identifiers(identifier='D',line_item='diluted_eps',period_type='quarterly')
...

此时不要计算利润率或增长率。 仅写入原始数据。计算在阶段 6 进行。

分部数据:

  • get_segments_from_identifiers,设置 segment_type="business"、period_type="quarterly"、num_periods=8
  • 你需要 8 个季度(而非 4 个),以便拥有用于同比比较的去年同期季度。要计算 2025 年 Q3 的同比,你需要 2024 年 Q3——也就是往前第 5 个季度。如果 API 响应中不包含去年同期的分部数据,不要估算或捏造。在报告中注明 "y/y not available"。

立即写入 /tmp/earnings-preview/segments.csv:

ticker,period,segment_name,revenue,source
D,Q3 2024,Dominion Energy Virginia,2762000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Dominion Energy South Carolina,848000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2024,Contracted Energy,260000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy Virginia,3311000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Dominion Energy South Carolina,945000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
D,Q3 2025,Contracted Energy,297000000,get_segments_from_identifiers(identifier='D',segment_type='business',period_type='quarterly')
...

盈利历史(用于股票图表标注):

  • get_earnings_from_identifiers——收集 12 个月价格窗口内的过往财报日期。
  • 立即写入 /tmp/earnings-preview/earnings-dates.csv:
ticker,earnings_date,call_name,source
D,2025-05-02,Q1 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-08-01,Q2 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
D,2025-10-31,Q3 2025 Earnings Call,get_earnings_from_identifiers(identifier='D')
...

第 6 阶段:验证与计算(强制 — 不得跳过)

在生成报告之前,重新读取所有中间文件,并基于干净的数据进行计算。此阶段通过基于文件而非压缩的对话上下文来工作,从而确保数据完整性。

  1. 使用 bash cat 命令读取所有中间文件:

    • cat /tmp/earnings-preview/company-info.txt
    • cat /tmp/earnings-preview/transcript-extracts.txt
    • cat /tmp/earnings-preview/financials.csv
    • cat /tmp/earnings-preview/segments.csv
    • cat /tmp/earnings-preview/prices.csv
    • cat /tmp/earnings-preview/peer-eps.csv
    • cat /tmp/earnings-preview/peer-market-caps.csv
    • cat /tmp/earnings-preview/consensus-eps.csv
    • cat /tmp/earnings-preview/kensho-findings.txt
    • cat /tmp/earnings-preview/earnings-dates.csv
  2. 基于当前上下文中的原始数据计算衍生指标:

    • 毛利率 % = gross_profit / revenue(按季度)
    • 营业利润率 % = operating_income / revenue(按季度)
    • 营收同比增速 % =(当前季度营收 - 去年同期营收)/ 去年同期营收
    • EPS 同比增速 % = 同样的逻辑;若基数为负,则使用 "n.m."
    • 分部同比增速 % = 按名称匹配到去年同期的分部;若缺失,则注明 "y/y not available"
    • 各公司 LTM 市盈率 = 最新价格 / 最近 4 个季度 EPS 之和(使用 peer-eps.csv 检查每个股票代码有哪些 4 个季度可用)
    • 各公司 NTM 市盈率 = 最新价格 / NTM EPS,其中 NTM EPS = 来自 consensus-eps.csv 的未来 4 个季度共识平均 EPS 估计值之和。将每个股票代码的全部 4 个季度的 consensus_mean_eps 值相加。若某同行可用的前瞻季度少于 4 个,则将 NTM 市盈率标记为 "n/a"。在附录中注明相加的是哪 4 个季度。
    • 股票回报率(年初至今、1 年、30 天、90 天)= 在 prices.csv 中找到所有股票代码共同的第一个日期,然后从该日期计算回报率
  3. 交叉核对:

    • 验证每个分部同比在 segments.csv 中都有对应的实际上年行。若无,则标记为 "y/y not available"。
    • 验证所有股票代码的股票回报率基准日期完全一致。
    • 通过重新汇总各组成部分来验证任何多步计算(例如,LTM EPS 之和与 4 个季度值一致)。
    • 验证 transcript-extracts.txt 中的所有逐字引用均为精确复制粘贴(而非改写)。
  4. 写入 /tmp/earnings-preview/calculations.csv,包含所有衍生值:

ticker,metric,value,formula,components
D,gross_margin_Q3_2025,32.5%,gross_profit/revenue,"gross_profit=1238100000,revenue=3810000000"
D,revenue_yoy_Q3_2025,+9.3%,(Q3_2025-Q3_2024)/Q3_2024,"Q3_2025=3810000000,Q3_2024=3486000000"
D,ltm_pe,24.2x,price/ltm_eps,"price=65.46,ltm_eps=2.70,quarters=Q4_2024+Q1_2025+Q2_2025+Q3_2025"
D,ntm_pe,18.5x,price/ntm_eps,"price=65.46,ntm_eps=3.56,quarters=Q4_2025(0.88)+Q1_2026(0.72)+Q2_2026(0.91)+Q3_2026(1.05),source=get_consensus_estimates_from_identifiers"
D,yoy_return,+17.6%,(end-start)/start,"end=65.46,start=55.67,base_date=2025-02-19"
DUK,yoy_return,+13.0%,(end-start)/start,"end=126.32,start=111.79,base_date=2025-02-19"
...

此文件将成为报告中所有数字的唯一事实来源。


阶段 7:生成 HTML 报告

停止 — 在编写任何 HTML 之前,你必须读取所有中间文件。这是阻塞性前置条件。

这不是可选项。你必须将下面每条 cat 命令作为单独的 bash 工具调用运行(不要合并为一次调用)。这能确保每个文件的内容都被单独加载并在对话中可见。不要将它们合并为一条命令。不要跳过任何文件。

逐条运行这些命令,每次一条,每条作为独立的 bash 调用:

  1. cat /tmp/earnings-preview/company-info.txt
  2. cat /tmp/earnings-preview/transcript-extracts.txt
  3. cat /tmp/earnings-preview/financials.csv
  4. cat /tmp/earnings-preview/segments.csv
  5. cat /tmp/earnings-preview/prices.csv
  6. cat /tmp/earnings-preview/peer-eps.csv
  7. cat /tmp/earnings-preview/peer-market-caps.csv
  8. cat /tmp/earnings-preview/consensus-eps.csv
  9. cat /tmp/earnings-preview/kensho-findings.txt
  10. cat /tmp/earnings-preview/earnings-dates.csv
  11. cat /tmp/earnings-preview/calculations.csv

读取所有文件后,你必须向用户打印一条摘要消息,列出每个文件及其状态。请严格使用以下格式:

--- DATA FILE VERIFICATION ---
1. company-info.txt        ✓ loaded ([N] lines)
2. transcript-extracts.txt ✓ loaded ([N] lines)
3. financials.csv          ✓ loaded ([N] rows)
4. segments.csv            ✓ loaded ([N] rows)
5. prices.csv              ✓ loaded ([N] rows)
6. peer-eps.csv            ✓ loaded ([N] rows)
7. peer-market-caps.csv    ✓ loaded ([N] rows)
8. consensus-eps.csv       ✓ loaded ([N] rows)
9. kensho-findings.txt     ✓ loaded ([N] lines)
10. earnings-dates.csv     ✓ loaded ([N] rows)
11. calculations.csv       ✓ loaded ([N] rows)

All intermediate data files loaded successfully.
Generating report using file data as the single source of truth.
---

如果任何文件缺失或为空,请停止并告知用户哪个文件失败。不要在数据缺失的情况下继续生成报告。

HTML 报告中的每个数字、引文、来源 URL 和 MCP 函数调用引用都必须来自这些文件 — 而不是来自你对先前对话轮次的记忆。 这些文件是唯一可信来源。先前的对话上下文可能已被压缩或摘要,如果依赖它,将会包含错误。如果某个数据点不在这些文件中,它就不应出现在报告中。

有关完整的 HTML 模板、CSS 和 Chart.js 配置,请参阅 report-template.md。

强制要求 — 使用模板辅助函数绘制图表: report-template.md 提供了预构建、已调试的 Chart.js 辅助函数。你必须使用这些确切的函数来创建图表。不要编写自定义的内联 Chart.js 代码。这些辅助函数包括:

  • createRevEpsChart(canvasId, labels, revenueData, epsData, revLabel) — 用于图 1
  • createMarginChart(canvasId, labels, grossMargins, opMargins) — 用于图 2
  • createRevGrowthChart(canvasId, labels, growthData) — 用于图 3
  • createAnnotatedPriceChart(canvasId, labels, prices, earningsDates, ticker) — 用于图 5
  • createCompPerfChart(canvasId, labels, datasets) — 用于图 6
  • createPEChart(canvasId, companies) — 用于图 7

每个图表调用都必须放在其自己的 <script> 标签中,并包裹在 try-catch 块内。这能确保某个图表的 bug 不会阻止其他图表渲染。示例:

<script>
try {
  createRevEpsChart('chart-rev-eps', [...], [...], [...], 'Revenue ($B)');
} catch(e) { console.error('Figure 1 error:', e); }
</script>
<script>
try {
  createMarginChart('chart-margins', [...], [...], [...]);
} catch(e) { console.error('Figure 2 error:', e); }
</script>
报告结构(共 4-5 页)

报告分为两部分:叙述(第 1-2 页)和图表(第 3-5 页)。请保持两者紧密结合。


AI 免责声明(强制要求 — 必须出现在 3 个位置): 你必须在报告 HTML 中包含以下免责声明文本。这不是可选项 — 没有它报告就不完整:

"Analysis is AI-generated — please confirm all outputs"

它必须恰好出现在以下 3 个位置:

  1. 页眉横幅 — 紧接封面标题之前,作为居中的黄色横幅:<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div>
  2. 页脚 — 位于 page-footer div 内,作为醒目的黄色横幅:<div class="footer-disclaimer">Analysis is AI-generated — please confirm all outputs</div>
  3. 附录 — 作为附录部分的第一行,位于表格之前:<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div>

第 1 页:封面与论点

  • AI 免责声明横幅(黄色,居中 —— 见上文 AI DISCLAIMER 规则)
  • 页眉:公司名称(股票代码)| 行业 | 报告日期
  • 标题:主题式,针对该季度的具体内容(例如 "Walmart Inc. (WMT) Q4 FY2026 Earnings Preview: Holiday Harvest — Can Furner's First Print Confirm the $1T Thesis?")
  • 核心论点(最多 2-3 个简短段落,配要点列表):
    • 用 1-2 句话说明我们对本次财报的预期
    • 4-6 个要点,涵盖:我们的 EPS 预期 vs 市场一致预期、指引预期、需关注的关键指标、可能推动股价变化的因素、关键争论点
    • 保持直接且有观点 —— 明确表态,不要对所有事情都含糊其辞
  • 管理层关键发言,取自最近一次财报电话会议,在相关处融入叙述。不要将其放在单独的小标题下。自然地将它们整合为支持你论点要点的证据。格式为缩进引用块。

第 2 页:预期、主题与新闻

  • 一致预期表(单一表格,标注为图表):

    • 列:Metric | Consensus | Our Estimate | y/y Change
    • 行:Revenue、EPS、Gross Margin、Operating Income,以及 2-3 个重要的公司特定 KPI(例如,同店销售、电商增长、会员收入 —— 只要是华尔街关注 THIS 公司的指标)
    • 颜色编码严格机械化: 如果 y/y 变化值为负,使用 class="neg"(红色)。如果为正,使用 class="pos"(绿色)。如果为零或 N/A,使用 class="neutral"。数字的符号决定类别 —— 不要基于解读进行覆盖。 -1.1% 永远是红色,即使降幅很小。
    • 这是唯一的指引/预期部分。不要在其他地方重复预期数据。
  • 超出核心 EPS 的关键指标(要点列表,3-5 项):

    • 除了 EPS 数字之外,将决定本季度好坏的特定指标
    • 对于每个指标:该指标是什么、一致预期/管理层预期是什么、为什么重要
    • 要具体:"Walmart Connect ad revenue growth (consensus ~30% y/y, 3Q was 33%)"
  • 值得关注的主题(3-5 个要点):

    • 针对即将发布的报告的前瞻性事项
    • 管理层需要实现什么、什么可能带来惊喜、空头关注什么
    • 每个主题:最多 1-2 句话
  • 近期新闻与动态(3-5 个要点):

    • 过去 60 天的重要新闻,每条一行
    • 日期 + 标题 + 简要影响评估
    • 仅包含可能影响即将发布的财报或指引的事项

第 3-5 页:图表(所有图表和表格)

所有图表按顺序编号。每个图表都有标题和来源行。

  • Figure 1: Quarterly Revenue & Diluted EPS — 柱状/折线组合图,8 个季度
  • Figure 2: Margin Trends (Gross & Operating %) — 双折线图,8 个季度
  • Figure 3: Revenue Growth y/y % — 柱状图,带绿色/红色条件着色。仅包含当期和去年同期数据都存在的季度(通常是从获取的 8 个季度中最近的 4 个季度)。不要包含无法计算 y/y 的季度 —— 图表应有 4 根柱子,而不是 8 根。
  • Figure 4: Business Segment Revenue — 表格:Segment | Latest Q Rev ($M) | % of Total | y/y Change
  • Figure 5: 1-Year Stock Price with Earnings Dates — 价格折线图,在财报日期处带有垂直注释线,并标注季度和财报后 1 日涨跌幅
  • Figure 6: Stock Performance vs. Competitors (Indexed to 100) — 多折线图,主体公司为粗实线,竞争对手为较细虚线
  • Figure 7: LTM P/E vs. Competitors — 水平柱状图,主体公司以海军蓝高亮
  • Figure 8: Competitor Comparison Table — Ticker | Company | Mkt Cap | LTM P/E | NTM P/E | YTD % | 1-Yr %

附录:数据来源与计算(强制要求 —— 不要跳过或省略)

附录必须以 AI 免责声明横幅开头:<div class="ai-disclaimer">Analysis is AI-generated — please confirm all outputs</div> 报告的最后一页 MUST 包含一个附录表格,用于记录报告中引用的每一项主张——无论是数值还是非数值。报告中正文出现的每一个数字都必须在该附录中有一行对应,并且报告正文中的每一个此类数字都必须是可点击的 <a href="#ref-N"> 超链接,点击后可滚动到其附录行。 如果报告中的某个数字没有指向附录的超链接,则该报告不完整。

  • 表格列:Ref # | Fact | Value | Source & Derivation

  • Ref #:与报告正文中超链接锚点匹配的顺序 ID(ref-1、ref-2 等)。每一行都有一个 id="ref-N" 属性,以便超链接滚动到该行。

  • Fact:人类可读的标签(例如 "Q3 FY2026 Revenue"、"LTM P/E — WMT"、"Management flagged tariff headwinds"、"Barclays upgraded to Overweight")

  • Value:报告中显示的精确数值(例如 "$152.3B"、"24.5%"、"28.1x")。对于非数值事实,留空或写 "N/A"。

  • Source & Derivation:这是关键列。每一行都必须有具体、详细的来源——而不仅仅是一个标签。 严格遵守以下规则:

    对于来自 S&P Capital IQ 的原始财务数据(revenue、EPS、gross profit、operating income、net income、EBITDA、prices、market cap 等):

    • 说明所使用的 MCP 函数及其关键参数。格式:S&P Capital IQ — [function_name](identifier='[TICKER]', line_item='[item]', period_type='[type]', period='[Q# FY####]')
    • 示例:
      • S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='revenue', period_type='quarterly', period='Q3 FY2026')
      • S&P Capital IQ — get_financial_line_item_from_identifiers(identifier='WMT', line_item='diluted_eps', period_type='quarterly', period='Q3 FY2026')
      • S&P Capital IQ — get_prices_from_identifiers(identifier='WMT', periodicity='day')
      • S&P Capital IQ — get_capitalization_from_identifiers(identifier='WMT', capitalization='market_cap')
    • 不要只写没有细节的 "S&P Capital IQ"。 读者必须确切知道哪个工具调用中的哪个数据点产生了这个数字。

    对于计算值(margins、growth rates、P/E、returns、y/y changes):

    • 显示带有超链接组成部分的完整公式——每个组成部分都必须是一个指回该原始数据点附录行的 <a href="#ref-N"> 链接。这一点至关重要:读者必须能够从计算值点击到其每一个输入。
    • 示例:Gross Margin = <a href='#ref-5'>Gross Profit $37.2B</a> / <a href='#ref-1'>Revenue $152.3B</a> = 24.4%. Source: S&P Capital IQ (calculated)
    • 示例:LTM P/E = <a href='#ref-20'>Price $172.35</a> / (<a href='#ref-8'>Q1 EPS $1.47</a> + <a href='#ref-9'>Q2 EPS $1.84</a> + <a href='#ref-10'>Q3 EPS $1.53</a> + <a href='#ref-11'>Q4 EPS $1.80</a>) = $172.35 / $6.64 = 25.9x
    • 示例:Revenue y/y growth = (<a href='#ref-12'>Q3 FY26 Rev $165.8B</a> - <a href='#ref-3'>Q3 FY25 Rev $160.8B</a>) / <a href='#ref-3'>Q3 FY25 Rev $160.8B</a> = +3.1%
    • 每个公式组成部分都必须是可点击的超链接。 不要使用纯文本数字编写公式。

    对于来自电话会议记录的主张(引述、管理层评论、指引):

    • 写出电话会议记录中的逐字摘录句子。
    • 通过完整名称和用于获取该记录的电话会议记录的 key_dev_id 进行引用。
    • 格式:"[verbatim quote]" — [Speaker], [Title]. Source: [Q# FY#### Earnings Call Transcript] (key_dev_id: [ID])
    • 示例:"We expect comp sales growth of 3-4% in Q4" — CEO John Furner. Source: Q3 FY2026 Earnings Call Transcript (key_dev_id: 12345678) 针对 Kensho Grounding 搜索结果(新闻、分析师评级、一致预期):
    • 写下搜索结果中的关键发现或摘录。
    • 必须:附上来源 URL,即 Kensho search 工具返回的 URL,作为可点击的 <a href="[URL]" target="_blank"> 超链接。这是最重要的部分——读者必须能够点击跳转到原始来源。
    • 格式:"[发现/摘录]" — <a href="[URL]" target="_blank">[来源标题或出版物]</a>. 查询:search("[使用的查询]")
    • 示例:"Barclays upgraded WMT to Overweight with $210 price target on Jan 15, 2026." — <a href="https://www.investing.com/news/barclays-upgrades-wmt" target="_blank">Investing.com, Jan 15 2026</a>. 查询:search("WMT analyst ratings price target upgrades downgrades")
    • 如果某个结果未返回 URL,请写 "Source URL not available",并仍然附上搜索查询。

完整性检查: 在最终确定报告之前,扫描报告正文中的每一个数字。如果有任何数字未包裹在 <a href="#ref-N" class="data-ref"> 中,请修复。如果任何附录行的 Source & Derivation 只是一个裸标签,例如 "S&P Capital IQ",而没有函数调用细节,请修复。如果任何计算值的公式缺少带超链接的组成部分,请修复。如果任何源自 Kensho 的说法缺少来源 URL,请修复。

按章节对附录行进行分组(Financials、Valuation、Estimates & Consensus、Transcript Claims、News & Analyst Commentary、Stock Performance),并使用小标题。使用较小的字号(10-11px)。


第 8 阶段:输出

  1. 将完整的 HTML 文件写入当前工作目录中的 earnings-preview-[TICKER]-YYYY-MM-DD.html。
  2. 在浏览器中打开它:open earnings-preview-[TICKER]-YYYY-MM-DD.html
  3. 告知用户文件已创建,并总结关键发现。

写作指南

  • 禁止使用 EMOJI:报告中任何地方都不要使用 emoji。这是一份专业研究报告。
  • 简洁:目标为 4-5 个打印页。每一句话都必须有分量。尽可能使用项目符号,而不是段落。如果某个章节显得过长,就删减。
  • 数字要具体:"$52.4B revenue, up 5.2% y/y",而不是 "strong revenue growth"。
  • 给出观点:这是财报前瞻,不是摘要。说明你预期什么、什么重要,以及为什么。要有立场,但用数据支撑。
  • 管理层引语不带标题:将最近一次电话会议中的 3-4 条关键管理层引语作为块引用直接融入叙述。不要创建 "Key Management Quotes" 章节标题——让它们作为支撑证据自然流动。
  • 专业语气:卖方股票研究风格——分析性、直接、数据驱动。
  • 图表必须使用真实数据:每个图表都填入实际的 MCP 数据。绝不捏造。
  • 竞争者背景:相对于同行来构建估值框架。如果不知道同行交易在 20x 或 35x,25x P/E 毫无意义。
  • 带超链接的说法:每一个事实性说法——无论数字还是定性——都必须是链接到其附录条目的 <a class="data-ref"> 标签。数字:<a href="#ref-1" class="data-ref">$152.3B</a>。定性:<a href="#ref-25" class="data-ref">management flagged tariff headwinds as the primary margin risk</a>。任何事实都不应在附录中没有可追溯来源的情况下出现。

评论

支持 Markdown