360 Secure SkillHub
360 安全技能中心

Earnings and Financial Release Countdown

核心功能:自动将公司名解析为股票代码,获取下一期财报日期,设置每日定时提醒,在财报前1-2周开始推送股票价格及基本面简报,财报当日发送最终简报并自动取消提醒。典型场景:用户需跟踪多市场个股财报,提前获取每日动态。输入为自然语言请求,输出为提醒设置确认及每日简报,可自定义提前时长与提醒时间。

youpele52
youpele52
热度 24.30
最近更新 2026-05-27 08:39:03
分类:自动化依赖:代码执行 / MCP 服务 / 内部调用大模型 / 第三方 API应用场景:财务 / 任务管理 / 日程安排 / 自动化脚本 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add earnings-countdown
Metadata
name
earnings-countdown
description
Set up a daily earnings countdown reminder for a stock. Resolves company name to ticker, fetches the next earnings date, and creates a daily cron reminder via remind-me that runs stock-price-checker-pro and stock-fundamentals every day starting 1–2 weeks before earnings. Triggers: earnings reminder, earnings countdown, notify me before earnings, remind me about earnings, earnings alert.
homepage
https://finance.yahoo.com
metadata
{"clawdbot":{"emoji":"🔔","requires":{"bins":["uv","openclaw"]}}}

Skill: Earnings Countdown

When to use

  • User wants a daily reminder leading up to a company's next earnings release.
  • User says "notify me 1 week before NVIDIA earnings every day at 10 AM".
  • User says "set up an earnings countdown for Apple".
  • User says "remind me daily before Tesla's financial release".
  • User wants to track an upcoming earnings event with daily price + fundamentals updates.

When NOT to use

  • User just wants the current stock price → use stock-price-checker-pro
  • User just wants fundamentals → use stock-fundamentals
  • User wants a generic reminder (not earnings-related) → use remind-me
  • User wants a full research report right now → use equity-research
  • User wants to check the earnings date without scheduling → use stock-price-checker-pro

Overview

This skill orchestrates three sub-skills to create a proactive earnings countdown:

  1. Resolve company name → ticker (LLM agent maps it, same approach as stock-price-checker-pro)
  2. Fetch the next earnings date via the local Python script
  3. Create a daily cron reminder via remind-me that fires every day at the specified time, running stock-price-checker-pro + stock-fundamentals and delivering a countdown briefing

Conversation Flow

Step 1 — Resolve the company name to a ticker

Map the user's company name to its ticker symbol. Use the same approach as stock-price-checker-pro: the LLM agent resolves common company names to their Yahoo Finance tickers.

Company Ticker
NVIDIA NVDA
Apple AAPL
Tesla TSLA
Microsoft MSFT
Amazon AMZN
Google / Alphabet GOOGL
Meta / Facebook META
Rheinmetall RHM.DE
SAP SAP.DE
ASML ASML.AS
Shell SHEL.L

If unsure, ask: "Just to confirm — that's the ticker <TICKER>, right?"

Step 2 — Collect lead time and notification time

Ask the user two questions. Apply defaults if they do not specify.

Question Default Options
How many weeks before earnings? 1 week (7 days) 1 or 2 weeks
At what time? (with timezone) 10 AM CET (Europe/Paris) Any time in any timezone

Examples of user input and how to parse it:

  • "1 week, 9 AM New York time" → lead_days=7, hour=9, minute=0, tz=America/New_York
  • "2 weeks, 8 AM London" → lead_days=14, hour=8, minute=0, tz=Europe/London
  • "just use defaults" → lead_days=7, hour=10, minute=0, tz=Europe/Paris
  • (no lead time or time given) → apply defaults, confirm with user

Always confirm before proceeding. Summarise:

Got it! Here's what I'll set up: 📊 Company: NVIDIA (NVDA) 📅 Lead time: 1 week before earnings ⏰ Time: 10:00 AM CET (Europe/Paris) 🔔 Delivery: Daily countdown briefing to this chat

Shall I go ahead?

Step 3 — Fetch the next earnings date

uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py <TICKER>

The command outputs:

Ticker: NVDA
Company: NVIDIA Corporation
Next Earnings Date: 2026-06-15

If the output contains Error:, report the error to the user and stop.

Step 4 — Compute the reminder schedule

From the script output, compute:

  • reminder_start_date = Next Earnings Date − lead_days (7 or 14)
  • cron_expression = cron:<minute> <hour> * * * (daily at the specified time in the user's timezone)
    • e.g. 10 AM → cron:0 10 * * *
    • e.g. 9:30 AM → cron:30 9 * * *

⚠️ If reminder_start_date is today or in the past, start the daily reminders today (the cron will fire at the next occurrence of the specified time). Mention this to the user:

The earnings date is close — reminders will start today at 10 AM CET.

⚠️ If reminder_start_date is after the earnings date (earnings are very soon), tell the user:

The earnings date is less than your chosen lead time away. Daily reminders may not be useful. Do you still want to proceed?

⚠️ If the earnings date is today, say:

Earnings are today! Would you like me to run a full briefing now instead of scheduling a reminder?

Step 5 — Create the daily cron reminder via remind-me

The cron message must contain clear instructions for the agent that fires it each day. The message tells the agent to:

  1. Check if today is on or after the earnings date
  2. If so: send a final "Earnings day!" message, run stock-price-checker-pro + stock-fundamentals, and cancel this reminder
  3. If not: compute days remaining, run stock-price-checker-pro + stock-fundamentals, and send a countdown briefing

Use the remind-me create command:

uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
  "<TICKER> Earnings Countdown - Daily <HH:MM>" \
  "📊 <TICKER> (<COMPANY>) Earnings Countdown. Next earnings date: <EARNINGS_DATE_ISO>.\n\nIf today is on or after <EARNINGS_DATE_ISO>:\n1. Say '🔔 <COMPANY> (<TICKER>) earnings are TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py <TICKER>\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py <TICKER>\n4. Send a comprehensive earnings-day briefing with price, fundamentals, and a quick take.\n5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name '<TICKER> Earnings Countdown - Daily <HH:MM>'\n\nIf today is before <EARNINGS_DATE_ISO>:\n1. Compute days_remaining = days between today and <EARNINGS_DATE_ISO>\n2. Say '🔔 <COMPANY> (<TICKER>) earnings in {days_remaining} days — briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py <TICKER>\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py <TICKER>\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
  "cron:<MINUTE> <HOUR> * * *" \
  "<channel>" \
  "<chatId>" \
  "tz:<IANA timezone>"

⚠️ Critical: Channel, chatId, and timezone resolution follow the same rules as remind-me (see its SKILL.md). Auto-detect from session context. The timezone passed here (tz:<IANA>) must match the one resolved in Step 2.

Step 6 — Confirm completion

After the cron is created, report back:

✅ Done! Your earnings countdown is set up: 📊 () 📅 Earnings date: <EARNINGS_DATE_ISO> ⏰ Daily briefing at: HH:MM <TIMEZONE_LABEL> 🔁 Starting: <REMINDER_START_DATE_ISO> (<DAYS_UNTIL_START> days from now) 📱 Delivered to: This chat


Commands

Fetch the next earnings date

uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py <TICKER>

Examples

# US stocks
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py NVDA
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py AAPL
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py TSLA

# European stocks
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py RHM.DE
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py SAP.DE
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py ASML.AS

Output

The script returns three lines:

Ticker: <SYMBOL>
Company: <COMPANY_NAME>
Next Earnings Date: <YYYY-MM-DD>

Or an error:

Error: <message>

Full Walkthrough

Example — NVIDIA with 1 week lead time, 10 AM CET (all defaults)

User: "Set up an earnings countdown for NVIDIA"

  1. Resolve ticker: NVIDIA → NVDA
  2. Apply defaults: 1 week, 10 AM CET → lead_days=7, hour=10, minute=0, tz=Europe/Paris
  3. Confirm with user (include timezone line), user says yes
  4. Run script:
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py NVDA

Output:

Ticker: NVDA
Company: NVIDIA Corporation
Next Earnings Date: 2026-06-15
  1. Compute schedule:

    • earnings_date = 2026-06-15
    • reminder_start = 2026-06-08 (7 days before)
    • cron = cron:0 10 * * *
    • days_until_start = compute from today
  2. Create cron:

uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
  "NVDA Earnings Countdown - Daily 10:00" \
  "📊 NVDA (NVIDIA Corporation) Earnings Countdown. Next earnings date: 2026-06-15.\n\nIf today is on or after 2026-06-15:\n1. Say '🔔 NVIDIA Corporation (NVDA) earnings are TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\n4. Send a comprehensive earnings-day briefing with price, fundamentals, and a quick take.\n5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name 'NVDA Earnings Countdown - Daily 10:00'\n\nIf today is before 2026-06-15:\n1. Compute days_remaining = days between today and 2026-06-15\n2. Say '🔔 NVIDIA Corporation (NVDA) earnings in {days_remaining} days — briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
  "cron:0 10 * * *" \
  "telegram" \
  "<chatId>" \
  "tz:Europe/Paris"
  1. Confirm completion.

Example — Apple with 2 weeks lead time, 9 AM New York time

User: "Notify me 2 weeks before Apple earnings every day at 9 AM New York time"

  1. Resolve ticker: Apple → AAPL
  2. Parse: lead_days=14, hour=9, minute=0, tz=America/New_York
  3. Confirm, user says yes
  4. Run script:
uv run /root/.openclaw/workspace/skills/earnings-countdown/src/main.py AAPL
  1. Compute: cron = cron:0 9 * * *, tz=America/New_York
  2. Create cron (same pattern as above, with AAPL details and America/New_York timezone)
  3. Confirm completion.

Ticker Format Reference

Market Format Example
US stocks Plain AAPL, NVDA
German stocks .DE suffix RHM.DE, SAP.DE
UK stocks .L suffix SHEL.L, BP.L
Dutch stocks .AS suffix ASML.AS
Japanese .T suffix 7203.T
Korean .KS suffix 005930.KS

Notes

  • uv run reads the inline # /// script dependency block in main.py and auto-installs yfinance in an isolated environment — no pip install or venv setup needed.
  • Company name → ticker resolution is done by the LLM agent, following the same pattern as stock-price-checker-pro.
  • Channel, chatId, and timezone are always auto-detected from session context — never ask the user for these.
  • Timezone resolution follows remind-me's 3-tier system (message → USER.md → ask user).
  • The daily cron message tells the agent to run stock-price-checker-pro and stock-fundamentals and synthesize a briefing.
  • The cron auto-cancels on earnings day after delivering the final briefing.
  • If no earnings date is found, the skill reports the error and stops — no cron is created.
  • Do NOT use the shell wrapper pattern — call uv run src/main.py directly as shown above.
  • Do NOT use web search or curl to fetch earnings dates — always use this script.