earnings-recap

使用雅虎财经(Yahoo Finance)数据为任意股票生成一份财报后分析。当用户想回顾财报公布后发生了什么、理解是否超预期/未达预期的结果、查看股价反应,或获取财报要点回顾时使用。触发条件:“AAPL 财报回顾”“TSLA 财报表现如何”“MSFT 财报结果”“NVDA 是否超出预期”“财报后分析”“财报意外(盈余惊喜)”“GOOGL 财报发生了什么”“财报反应”“财报后股价走势”“EPS 超预期还是未达”“营收超预期还是未达”“某某公司的季度业绩”“他们的财报怎么样”“AMZN 昨晚发布了财报”“财报电话会议回顾”,或任何关于公司近期财报结果的请求。只要用户提到过去的某次财报事件(即使只是说“ AAPL 已公布财报”或“他们表现如何”),就使用该技能。

安装

热度:2

下载并解压到你的 skills 目录

复制命令,发送给 OpenClaw 自动安装:

下载并安装这个技能 https://openskills.cc/api/download?slug=himself65-skills-earnings-recap&locale=zh&source=copy
name:earnings-recapdescription:>Triggers:"AAPL earnings recap", "how did TSLA earnings go", "MSFT earnings results",

Earnings Recap Skill

Generates a post-earnings analysis using Yahoo Finance data via yfinance. Covers the actual vs estimated numbers, surprise magnitude, stock price reaction, and financial context — a complete picture of what happened.

Important: Data is for research and educational purposes only. Not financial advice. yfinance is not affiliated with Yahoo, Inc.


Step 1: Ensure yfinance Is Available

Current environment status:

!`python3 -c "import yfinance; print('yfinance ' + yfinance.__version__ + ' installed')" 2>/dev/null || echo "YFINANCE_NOT_INSTALLED"`

If YFINANCE_NOT_INSTALLED, install it:

import subprocess, sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "yfinance"])

If already installed, skip to the next step.


Step 2: Identify the Ticker and Gather Data

Extract the ticker from the user's request. Fetch all relevant post-earnings data in one script.

import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta

ticker = yf.Ticker("AAPL")  # replace with actual ticker

# --- Earnings result ---
earnings_hist = ticker.earnings_history

# --- Financial statements ---
quarterly_income = ticker.quarterly_income_stmt
quarterly_cashflow = ticker.quarterly_cashflow
quarterly_balance = ticker.quarterly_balance_sheet

# --- Price reaction ---
# Get ~30 days of history to capture the reaction window
hist = ticker.history(period="1mo")

# --- Context ---
info = ticker.info
news = ticker.news
recommendations = ticker.recommendations

What to extract

Data SourceKey FieldsPurpose
earnings_historyepsEstimate, epsActual, epsDifference, surprisePercentBeat/miss result
quarterly_income_stmtTotalRevenue, GrossProfit, OperatingIncome, NetIncome, BasicEPSActual financials
history()Close prices around earnings dateStock price reaction
infocurrentPrice, marketCap, forwardPECurrent context
newsRecent headlinesEarnings-related news


Step 3: Determine the Most Recent Earnings

The most recent earnings result is the first row (most recent date) in earnings_history. Use its date to:

  • Identify the earnings date for the price reaction analysis

  • Match to the corresponding quarter in the financial statements

  • Calculate stock price reaction — compare the close before earnings to the next trading day's close (or open, depending on whether earnings were before/after market)
  • Price reaction calculation

    import numpy as np
    
    # Find the earnings date from earnings_history index
    earnings_date = earnings_hist.index[0]  # most recent
    
    # Get daily prices around the earnings date
    hist_extended = ticker.history(start=earnings_date - timedelta(days=5),
                                    end=earnings_date + timedelta(days=5))
    
    # The reaction is typically measured as:
    # - Close on the last trading day before earnings -> Close on the first trading day after
    # Be careful with before/after market reports
    if len(hist_extended) >= 2:
        pre_price = hist_extended['Close'].iloc[0]
        post_price = hist_extended['Close'].iloc[-1]
        reaction_pct = ((post_price - pre_price) / pre_price) * 100

    Note: The exact reaction window depends on when the company reported (before market open vs after close). The price data will reflect this — look for the biggest gap between consecutive closes near the earnings date.


    Step 4: Build the Earnings Recap

    Section 1: Headline Result

    Lead with the key numbers:

  • EPS: Actual vs. Estimate, beat/miss by how much, surprise %

  • Revenue: Actual vs. prior year (from quarterly_income_stmt TotalRevenue)

  • Stock reaction: % move on earnings day
  • Example: "AAPL beat Q3 EPS estimates by 3.7% ($1.40 actual vs $1.35 expected). Revenue grew 5.4% YoY to $94.3B. The stock rose +2.1% on the report."

    Section 2: Earnings vs. Estimates Detail

    MetricEstimateActualSurprise
    EPS$1.35$1.40+$0.05 (+3.7%)

    If the user asked about a specific quarter (not the most recent), look further back in earnings_history.

    Section 3: Quarterly Financial Trends

    Show the last 4 quarters of key metrics from quarterly_income_stmt:

    QuarterRevenueYoY GrowthGross MarginOperating MarginEPS
    Q3 2024$94.3B+5.4%46.2%30.1%$1.40
    Q2 2024$85.8B+4.9%46.0%29.8%$1.33
    Q1 2024$119.6B+2.1%45.9%33.5%$2.18
    Q4 2023$89.5B-0.3%45.2%29.2%$1.26

    Calculate margins from the raw financials:

  • Gross Margin = GrossProfit / TotalRevenue

  • Operating Margin = OperatingIncome / TotalRevenue
  • Section 4: Stock Price Reaction

  • The % move on the earnings day/next session

  • How it compares to the stock's average earnings-day move (calculate the average absolute move from the last 4 earnings dates in earnings_history)

  • Where the stock is now relative to the earnings-day move (has it held, given back gains, extended further?)
  • Section 5: Context & What Changed

    Based on the data, note:

  • Whether margins expanded or compressed vs prior quarter

  • Any notable changes in revenue growth trajectory

  • How the beat/miss compares to the stock's historical pattern (from the full earnings_history)

  • Current analyst sentiment from recommendations if available

  • Step 5: Respond to the User

    Present the recap as a clean, structured summary:

  • Lead with the headline: "AAPL reported Q3 2024 earnings on [date]: Beat EPS by 3.7%, revenue +5.4% YoY."

  • Show the tables for detail

  • Highlight what matters: Was this a meaningful beat or a low-bar situation? Is the trend improving or deteriorating?

  • Keep it factual — present the data, avoid making investment recommendations
  • Caveats to include


  • Yahoo Finance data may not include all details from the earnings call (guidance, segment breakdowns)

  • Revenue estimates are harder to compare precisely — yfinance provides YoY comparison from financial statements

  • Price reaction may be influenced by broader market moves on the same day

  • This is not financial advice

  • Reference Files

  • references/api_reference.md — Detailed yfinance API reference for earnings history and financial statement methods
  • Read the reference file when you need exact method signatures or to handle edge cases in the financial data.