--- name: stock-analysis description: Analyze a stock ticker with fundamentals, technicals, analyst ratings, and investment thesis. Usage - /stock-analysis TICKER or /stock-analysis TICKER1 TICKER2 for comparison. user_invocable: true model: opus effort: high --- # Stock Analysis > 💡 模型指引:session context **< 100k** → `/model sonnet`;**> 100k** → 先 `/compact` 再 Sonnet,或直接 `/model opus`(長 context 推理品質 Opus 更穩定)。重大決策(>5% 倉位)一律用 Opus。 Generate a standardized research report for one or more stock tickers. ## Step 0: 分析前準備 ### 預設模式(無 `--current`)— 純獨立分析 - **跳過** plan.md、feedback/*.md、持倉、journal 偵測 - 分析不考慮現有倉位或投資計畫,僅基於公開市場數據 - **保留 Step 0e**:Verdict 之前必須完成「核心 thesis / 證偽條件 / 機率分布」三題 ### Step 0.5 (共用): Macro + Earnings + Fundamentals Cache Load 讀以下四份 cache: - `briefing-out/cache/macro-snapshot.json` — 用於 Step 0e 第一性檢查的 macro ground state - `briefing-out/cache/earnings-history.json` — 該 TICKER 的 trailing 8Q beat rate + surprise - `briefing-out/cache/earnings-dates.json` — 該 TICKER 的下次 earnings 日期 - `briefing-out/cache/fundamentals-snapshot.json`(TTL 24h)— TICKER 的三錨點輸入(pe_ratio/peg_ratio/wall_street_target/growth/margins)+ `forward_estimates`(賣方共識 fwdEPS curr_fy/next_fy + EPS 修正動能) 若 TICKER **不在** earnings cache 中(如新標的)→ 跑一次 `python3 tools/earnings_history.py --force`;或標 `(earnings cache miss)`。 fundamentals cache 處理: - TICKER 在 cache 且 mtime < 30h → **使用**,供三錨點估值 + probability agent 1d/1h - TICKER 不在 cache 或 mtime > 30h → **先跑 `python3 tools/fetch_fundamentals.py --ticker TICKER`**(單票 fetch + merge 進 cache,含 A4 `self_valuation`),再讀 cache。**這樣 cache miss/stale 也能取得 A4**,不再直接標 `(self-val N/A)`。Agent 3 仍同批抓 `get_fundamentals_snapshot` + `get_earnings_history` 作即時三錨點交叉(fetch_fundamentals 失敗時的 fallback)。 - 只有 `fetch_fundamentals --ticker` **真的失敗**(EODHD 無資料/token 缺)才標 `(self-val N/A)`。 - `pe_ratio == 0.0 / null` → 丟棄 A1 錨;`peg_ratio == 0.0 / null` → 丟棄 A2 錨,標 `(anchor unavailable)` 這些 cache 資料用於: - Section「Investment Thesis」: 引用 trailing 8Q beat rate 強化/弱化基本面論點 - Section「三錨點公允價」: A1/A2/A3 錨點計算 Fair PE + EV(取代手寫點估計) - Section「Verdict」前呼叫 `probability-honesty-checker` 時,**強制**將 macro + base rate 帶入 prompt(Step 1d、1h、1i 必填) ### `--current` 模式 — 整合持倉與計畫 啟用後執行完整 AGENTS.md Step 0 統一規範(0a → 0b → 0c → 0d → 0e): - 讀 `plan.md` + `feedback/*.md`;了解此標的在計畫中的角色 - 呼叫 `get_account_position` 取即時持倉 - 今日 journal 不存在 → 執行 gap-fill + 變動偵測 + 自動建立 journal - 報告額外輸出「持倉確認」與「配置計畫定位」兩節 --- ## Arguments - Single ticker: `/stock-analysis PLTR` - Multiple tickers for comparison: `/stock-analysis DCO AIR` - With specific focus: `/stock-analysis TEAM options` (include options strategy suggestions) - With portfolio context: `/stock-analysis MU --current` (activates plan.md + positions) - With Codex second opinion: `/stock-analysis MU --codex` or `/stock-analysis MU --2nd` - Combined: `/stock-analysis MU --current --codex` ## Workflow 1. **Parse the ticker(s)** from the arguments 2. **Gather Data** using MCP tools and WebSearch: **Primary: Yahoo Finance MCP** - `mcp__yfinance-advanced__get_stock_info` — fundamentals, analyst targets, margins, PE ratios - `mcp__yfinance-advanced__get_financial_statement` (income_stmt) — revenue, earnings trends - `mcp__yfinance-advanced__get_recommendations` (recommendations) — analyst consensus - `mcp__yfinance-advanced__get_yahoo_finance_news` — recent headlines - `mcp__yfinance-advanced__get_historical_stock_prices` (period=6mo) — price trend **Secondary: SEC EDGAR MCP** (for deeper analysis) - `mcp__sec-edgar-mcp__get_financials` (statement_type="all") — official SEC financial data - `mcp__sec-edgar-mcp__get_insider_transactions` (days=90) — insider buying/selling - `mcp__sec-edgar-mcp__get_recent_filings` (days=60) — recent 8-K, 10-K/Q filings - `mcp__sec-edgar-mcp__get_segment_data` — revenue breakdown by geography/product **Technical: Technical Indicators MCP** - `mcp__technical-mcp__get_technical_indicators` — RSI, MACD, Bollinger Bands, ATR, momentum score, trend - `mcp__technical-mcp__get_support_resistance` — support/resistance levels, 52-week range **Sentiment: EODHD MCP** - `mcp__eodhd-mcp__get_news_sentiment` — news with AI sentiment scores - `mcp__eodhd-mcp__get_sentiment_trend` — 30-day sentiment trajectory **Tertiary: FMP MCP** (free tier, supplementary) - `mcp__fmp-mcp__getStockPeers` — peer companies for comparison - `mcp__fmp-mcp__getCompanyProfile` — company profile (fallback if yfinance incomplete) **Supplementary: WebSearch** (if MCP data is insufficient) - Search: "[TICKER] stock analysis 2026" - Search: "[TICKER] earnings revenue growth" **平行數據收集(Agent 子代理 — subagent_type: "data-collector"):** 使用 Agent tool 平行派遣以下 3 組子代理(每組指定 subagent_type: "data-collector",自動使用 Sonnet 5 純數據收集): - **Agent 1 — Yahoo Finance**(subagent_type: "data-collector"):`get_stock_info` + `get_financial_statement` + `get_recommendations` + `get_yahoo_finance_news` + `get_historical_stock_prices` - **Agent 2 — SEC EDGAR**(subagent_type: "data-collector"):`get_financials`(all)+ `get_insider_transactions`(90d)+ `get_recent_filings`(60d)+ `get_segment_data` - **Agent 3 — Technical + Sentiment + EODHD Fundamentals**(subagent_type: "data-collector"):`get_technical_indicators` + `get_support_resistance` + `get_sentiment_trend` + `get_news_sentiment`(ticker format: TICKER.US);**若 fundamentals cache miss 或 mtime > 30h**,同批加抓 `mcp__eodhd-mcp__get_fundamentals_snapshot(TICKER.US)` + `mcp__eodhd-mcp__get_earnings_history(TICKER.US)`(不額外 round-trip) 多股比較時,為每個 ticker 各派一組 Agent。若 Agent tool 不可用,依序呼叫亦可。 ⚠️ **Agent 失敗 fallback**:若 Agent 3(Technical)回傳空結果或聲稱「沒有 MCP 權限」,主 Claude 直接呼叫 `mcp__technical-mcp__get_technical_indicators` + `mcp__technical-mcp__get_support_resistance` + `mcp__eodhd-mcp__get_sentiment_trend`,絕不跳過技術分析 section。 3. **Check Current Portfolio**(`--current` 模式才執行) - 呼叫 `get_account_position` 確認是否持有此標的 - 若持有,在報告開頭輸出「持倉確認」段落(成本、口數、損益) 4a. **Thesis Ledger 雙向整合(`--current` 或有持倉時執行;新標的分析只做「寫」端)** ### 讀端(consumer)— 了解「上次的論點驗證了沒」 ``` python3 tools/thesis_ledger.py list --ticker TICKER ``` 輸出「📋 {TICKER} 既有 thesis 狀態」段落: ``` | thesis slug | 命題 | 建立 | 狀態 | 上次 resolve 結果 | 公允價 before→after | 價格影響 | 下一步 | |------------|------|------|------|-----------------|---------------------|---------|------| | memory-cycle | DRAM ASP上漲... | 2026-01-10 | pending | — | — | — | 等 Q2財報 | | q1-guide-exec | Q1 guide確認... | 2026-02-01 | passed | AI revenue +6% | $460→$490 | +6.5% | HOLD | ``` 若帳本無此 ticker → 輸出「📋 {TICKER} 帳本:無既有 thesis」 若有 **today-due** thesis(`due` 命令輸出中出現此 ticker)→ 在此段末尾標: `⚠️ 今日到期 thesis:{slug} — 請在本次分析後執行 D2 三桶分解 + resolve` **如果有到期需驗收的 thesis,執行 D2:** - 從本次 Agent 數據抓實際指標(財報數字/分析師 PT/毛利率等) - 照 briefing Step 0.7 邏輯做 passed/failed/partial 三桶分解 - 呼叫 `resolve` 帶結構化旗標(`--fair-value-before` 從上次登錄時的公允價基準取,或從 history 最後一筆取) ### 寫端(producer)— 本次分析的新 thesis 登錄(Verdict 後執行) 凡 Verdict 含**明確時間/事件觸發點**的論點,在輸出末尾登錄: ``` python3 tools/thesis_ledger.py list --ticker TICKER # 先查既有 slug python3 tools/thesis_ledger.py add --ticker TICKER --slug \ --thesis "<可驗證命題>" --falsification "<條件1>" "<條件2>" \ --trigger-type event|date --trigger-date YYYY-MM-DD \ [--event earnings] [--metric "到期要比的指標"] --source stock-analysis \ --ev "" ``` 新增 `--ev` 時同時記錄當下基準公允價(= `fair_value_before` 的基準,日後 resolve 時用) **EV ledger 事前登錄(thesis add 之後緊接執行,機率校準自驗):** ``` python3 tools/ev_ledger.py add --ticker TICKER --slug -ev \ --horizon-days 365 --spot <現價> \ --p-bull XX --p-base XX --p-bear XX \ --fv-bull XXX --fv-base XXX --fv-bear XXX --ev-price XXX \ --source stock-analysis --model <本次模型> --thesis-ref TICKER: \ --priced-in-pct ``` 到期由 briefing `resolve-due` 機械驗價(零判斷);校準統計由 /trade-review 讀。**機率/公允價直接抄機率分布表,不重算**。`--priced-in-pct`(2026-09-14)從 cache 直接抄:= 市場前瞻 PE ÷(目標 PEG × 共識 EPS 成長,成長截斷 5–60%)− 1,正 = 成長已 priced in(`priced_in_note` 有完整算式);**只是登錄變數,不進 EV、不改 Verdict**,/trade-review 用三分位驗「高 priced-in 是否更常 thesis 對但 realized 目的:從 news body + SEC 8-K + 財報逐字稿抽**已量化陳述**,用以補強/修正 thesis 機率分布輸入(Step 0e)。 **反幻覺門檻(必守):** 每個 signal 必須附 `raw_quote`(≤120 字逐字引用);無 quote → 無 signal;只有 narrative → 明寫「無可量化信號(only narrative)」。 **資料管道優先順序:** 1. SEC 8-K(Agent 2 `analyze_8k` / `get_recent_filings` 14d 內)→ `confidence: high` 2. 財報逐字稿(`mcp__fmp-mcp__getEarningsTranscript` 最新一份,取 capex/ASP/wafer/utilization 句)→ `confidence: high`;僅財報後 30 天內 3. EODHD raw news body(`news-articles.json` Step 0.67,或 `mcp__eodhd-mcp__get_news` 即時抓)→ `confidence: medium` 4. FMP segment(`mcp__fmp-mcp__getRevenueProductSegmentation`)→ `confidence: medium`(有數字才算) 5. 來源訊號 cache(`briefing-out/cache/twitter-signals.json`,Step 0.68 同源;Trusted/Core tier → `confidence: medium`,Probation → `confidence: low` 不入 ledger)→ post 全文(裁至 ≤120 字逐字)即 raw_quote 來源;**引用即代表 add-claim**,同一次 `python3 tools/source_credit.py add-claim ...` 登錄該主張 **訊號 record(Claude 輸出,不寫 JSON cache):** ``` metric: wafer_starts / capex / ASP_QoQ / segment_revenue / utilization / ... value: "+8% QoQ"(逐字含單位) direction: up | down | flat ticker, source_url_or_desc, source_type: sec_8k | transcript | news | fmp_segment | twitter | substack | rss date, confidence: high | medium | low raw_quote: "<逐字引用,≤120 字>" ← 無此欄 = 不成立 ``` **Signal → Thesis 轉換後登錄(`confidence ∈ {high, medium}` 且有明確前瞻 trigger):** ``` python3 tools/thesis_ledger.py list --ticker # 先查重 python3 tools/thesis_ledger.py add --ticker --slug \ --thesis "<1句可驗證命題>" \ --falsification "<條件1>" "<條件2>" "<條件3>" \ --trigger-type event|date --trigger-date YYYY-MM-DD \ --event earnings --metric "<到期要比的指標>" \ --source signal-inference \ --ev "signal: , , conf=" ``` `confidence=low` 或純 paraphrase → 在報告文字呈現即可,**不入 ledger**。exit-code-2 碰撞 → 改 slug 或 supersede。 **輸出段落(報告末尾):** ``` ### §4b 訊號擷取 | metric | value | dir | source | confidence | raw_quote(首 80 字) | |--------|-------|-----|--------|------------|----------------------| | wafer_starts | +8% QoQ | up | Reuters/EODHD | medium | "...逐字引用..." | THESIS 候選:[若有 high/medium conf 訊號] - slug: wafer-starts-bit-growth → 已登錄 thesis_ledger [若無] - 無可量化信號(only narrative news,無 SEC 8-K / 逐字稿量化句) ``` 4. **Generate Report** for each ticker: ### Standard Report Format ```markdown ## [TICKER] - [Company Name] ($XX.XX) **Sector:** [sector] | **Market Cap:** $XXB | **Forward PE:** XX.X ### Key Metrics | Metric | Value | |--------|-------| | Revenue (TTM) | $X.XB | | Revenue Growth (YoY) | XX% | | EPS (TTM) | $X.XX | | EPS Growth | XX% | | Forward PE | XX.X | | PEG Ratio | X.XX | | Gross Margin | XX% | | Free Cash Flow | $XM | | Debt/Equity | X.XX | ### Investment Thesis - Bull case (2-3 points) - Bear case (2-3 points) ### Analyst Consensus - Rating: Buy/Hold/Sell - Price Target Range: $XX - $XX - Median Target: $XX (upside/downside %) ### Technical Analysis Use `mcp__technical-mcp__get_technical_indicators` and `mcp__technical-mcp__get_support_resistance`. | Indicator | Value | Signal | |-----------|-------|--------| | RSI (14) | XX.X | 數值列示(不標超買;<30 可標 Oversold) | | MACD | line/signal/histogram | Golden Cross/Death Cross/None | | Bollinger %B | X.XX | Upper/Middle/Lower band | | ATR (normalized) | X.X% | Low/Medium/High volatility | | Momentum Score | XX | -100 to +100 | | Trend | description | | | Volume Ratio | X.XX | Above/Below average | **Support & Resistance:** | Level Type | Price | Distance % | |------------|-------|-----------| | Resistance 1 | $XX.XX | +X.X% | | Support 1 | $XX.XX | -X.X% | | 52W High | $XX.XX | -X.X% | | 52W Low | $XX.XX | +X.X% | **Entry Timing(revision 閘門 — per `feedback/momentum-valuation-symmetry.md`;RSI 過高不進任何判定):** - **estimate 上修中**(`forward_estimates` revisions up ≫ down)的加速領導者:**不否決、不等回檔才給方向** — 強者愈強;starter 倉現在進 + 回檔 GTC ladder + bull call spread 定義風險參與 - **estimate 翻下修/flat + 高倍數**:唯一「不追」的正當情況(均值回歸 edge 只在此成立) - 深跌至支撐 + **revision 未惡化**:洗盤錯殺,加碼機會(RSI < 30 可作超賣佐證);revision 惡化中 → 受損 turnaround,等催化不接刀 - High ATR regime: wider stop-loss needed, consider smaller position - 原則:**revision 定方向,估值只定下手結構與 size**;RSI 僅數值列示,過高側不觸發任何「不追/減碼」判定 - **技術面三態原則(H12,2026-09-17,`feedback/ma-filter-evidence.md`)**:技術指標只描述狀態不產生觸發。報告必列三個狀態:①價是否在 SMA50 與 EMA200 之上(趨勢濾網)②是否布林帶寬擠壓 / 回檔 SMA20(趨勢中低波動整理)③EMA50 5 日斜率(≥2% 強)。**MACD、均線交叉、SAR、通道突破當日只作 fact 列示,不得寫成訊號或進場理由**;5/10/20 日均線與 DEMA/TEMA 不引用 - **revision coverage 分級(引用必附 N)**:分析師數 N≥15 全權重;8–14 半權重(須與 trend/季成長印證);<8 不單獨觸發(改靠 §4b P3 硬數字 + beat rate + guide);上次財報後 >45 天標 stale 降權 ### SEC EDGAR Insights - Insider Trading (90 days): net buying/selling activity - Recent Filings: any material 8-K events, 10-K/Q highlights - Revenue Segments: geographic/product breakdown (if available) ### 市場情緒 (Sentiment) Use `mcp__eodhd-mcp__get_sentiment_trend` and `mcp__eodhd-mcp__get_news_sentiment`. - Sentiment trend: improving / declining / stable (30-day trajectory) - 7-day vs 30-day average sentiment comparison - Recent news headlines with sentiment polarity scores - Flag strongly negative sentiment (< -0.3) as risk factor ### Peer Comparison (FMP) - Top 5 peers by market cap similarity ### Investment Context(獨立分析) - 所屬板塊 / 主題(AI、半導體、SaaS、基建…) - 在同類股中的競爭定位(leader / challenger / niche) - 一般性倉位建議(不參考個人帳戶):進取型 / 穩健型各建議比例 ### 配置計畫定位(`--current` 模式才輸出) - 此標的是否在 plan.md 待建倉/加碼清單中? - 與現有持倉是否重疊? - 計畫建議的進場方式:現股 vs Bull Put Spread vs LEAPS(引用計畫原文) - 建議倉位佔帳戶 % - **桶別建議(必填)**:進場後歸 🔵 信念桶(中低 β + 多年結構 thesis → 讓 run)/ 🟢 認列循環桶(高 β >3 / 純週期 / 純波段 → 系統性 harvest)/ 🟡 L1 On-Deck(thesis 已驗證但等觸發)/ 🔵 L2 Research Pool(thesis 未驗證完)。疑問時歸認列桶 - **機會成本閘門(新倉必答)**:**先過行業濾網——該行業 TAM 是否 GROWING-STRUCTURAL?衰退行業內的相對強者直接不進 bench(垃圾桶尋寶濾網,2026-08-19)**;過濾網後才比:此標的是否**明顯優於目前最弱的在倉名額**?(列出最弱在倉 1-2 檔 revision/動能對比)。組合在 14–18 上緣 → 必須指名砍誰進場(砍一進一,不淨增);相關 beta 門檻最高,去相關 hedge/填缺口門檻較低 - **進場結構(對稱性)**:貼高加速領導者 → starter + 回檔 ladder + bull call spread;支撐區 → GTC 限價階梯 / bull put spread;長期信念 → LEAPS deep ITM delta 0.80–0.88。結尾附可掛的 Firstrade 單(per `feedback/actionable-firstrade-orders.md`) ### 第一性檢查(必填,在 Verdict 之前) - **核心 thesis:** [1 句可驗證命題,非 narrative] - **證偽條件:** [2-3 個 falsifiable 觀察點 — 量化指標 / 事件 / 時程] **三錨點 Fair PE 計算(D1,必做):** | 錨點 | 值 | 說明 | |------|----|------| | A1 市場 PE | EODHD `pe_ratio` | 0.0/null → N/A | | A2 PEG 錨 | `peg_ratio × growth%`(AI龍頭 PEG基準=1.5,其餘=1.0) | 0.0/null → N/A | | A3 分析師錨 | `wall_street_target ÷ fwdEPS`;fwdEPS 優先 `forward_estimates.curr_fy.eps_avg`(真實共識)→ `next_fy.eps_avg` → `eps_ttm×(1+growth)` 近似 | 任一缺 → N/A | | **A4 自建錨(分歧)** | `self_valuation.own_target_price`(cache miss/stale 已由 `fetch_fundamentals.py --ticker` 補抓)| `unavailable`(真失敗才)→ `(self-val N/A)`;`low` → `⚠️低信心`;**A4 不進 median,不進 EV — 僅做分歧 flag** | - **基準 Fair PE** = median(A1, A2, A3)(A4 排除在外);**樂觀** = max × 1.25(上限 current_PE × 1.25);**悲觀** = min × 0.70 - **FwdEPS 情境**:基準=analyst 共識 fwdEPS(`forward_estimates.curr_fy.eps_avg`,缺則 next_fy,再缺才用 `eps_ttm×(1+growth)` 近似;cache `self_valuation.a3_fwdeps_source` 已標來源);樂觀=基準×(1+min(avg_surprise%,15%));悲觀=基準×(1−5%/10%) - **EPS 修正動能**:`forward_estimates` 另帶 `eps_revision_30d_pct` + `revisions_up/down_30d`,30 日共識上修=guidance 偏正領先訊號,供 thesis/P3 引用(非估值輸入) - stock-analysis 單股深度**每次都做 DCF 交叉**,改用**自建 `tools/simple_dcf.py`**(FMP free tier 無 getDCFValuation):把 Agent 1 yfinance 已抓的數字餵進去—— ```bash python3 tools/simple_dcf.py --fcf --shares \ --cash --debt --growth [--wacc 0.10] [--terminal 0.03] ``` 回 `intrinsic_value_per_share`。FCF≤0 → 工具自動回 N/A(標 `DCF 不適用(FCF 為負)`)。**DCF 僅 sanity flag,不進 EV**;高成長股 terminal 佔比常 >70%(工具會回 `terminal_pct_of_ev`),偏離大時註明「假設敏感、參考性低」。FMP getDCFValuation 僅作備援(通常 402)。 - **機率分布:** | 情境 | 機率 | FwdEPS | A1 | A2 | A3 | Fair PE | 公允價 | |------|------|--------|-----|-----|-----|---------|--------| | 樂觀 | XX% | $X | XX | XX | XX | XX(max×1.25) | $XXX | | 基準 | XX% | $X | — | — | — | XX(median) | $XXX | | 悲觀 | XX% | $X | XX | XX | XX | XX(min×0.70) | $XXX | Expected value = Σ(機率 × 公允價) = $XXX → vs 現價 $XXX:±X% DCF 交叉(`simple_dcf.py` 自建,必做):`DCF: $XXX vs 基準公允 $XXX(差 ±X%);terminal 佔 EV X%`(FCF<0 → `DCF 不適用`) - **A4 自建分歧(必顯示):** - A4 目標價:`$XXX`(信心:`ok` / `⚠️低信心` / `(self-val N/A)`) - A4 vs A3:`(A4 − A3) / A3 = ±X%` - 解讀(|分歧| > 20% 才說): - A4 > A3 + 20%:「我的營收/利潤推估較 Street 樂觀 — 檢查是否有市場未定價的成長催化」 - A4 < A3 − 20%:「我的推估較 Street 保守 — 分析師可能過樂觀,注意下修風險」 - |分歧| ≤ 20%:「自建估值與 Street 大致吻合」 - **Note**:A4vsA3 分歧隔離「EPS/盈利觀」差異(倍數相同),不混入估值倍數變動。 ### Verdict One of: Strong Buy / Buy / Hold / Sell / Avoid With 1-2 sentence rationale,明確說 Verdict conditional on thesis 成立的機率。 ``` 5. **If comparing multiple tickers**, add a comparison table at the end: | Metric | TICKER1 | TICKER2 | |--------|---------|---------| With a clear recommendation on which to prefer. --- ## Step 6: Codex 第二意見(opt-in) **僅當 arguments 含 `--codex` 或 `--2nd` 時執行。** ### B1. 獨立第一性分析(預設,independent first-principles) **核心原則:Codex 不看 Claude 的結論**,只給 raw data,讓它獨立跑 Step 0e。Claude 與 Codex 兩個獨立輸出並排比較,真實共識 = 高信心,真實分歧 = 值得深入。 **🔴 Prompt 中性化要求**(詳見 `feedback/codex-prompt-neutrality.md`): raw data 必須是 fact 數值,**不能** 是 derived label。技術面只給 RSI 純數字、MACD 三個 line/signal/histogram 數值、價格 vs SMA 百分比、6-12 週區間,**不寫**: - trend 分類(strong_uptrend / weak_downtrend / consolidation) - status 分類(overbought / oversold / neutral) - momentum_score(這已是 derived score,改寫成「N 個交易日累計漲跌 X%」) - 「弱勢」「強勢」「拋物線」「打底」等敘事標籤 讓 Codex 自己跑 indicator interpretation,從 raw 數值推導結論。**用戶 push back 後重做時,新 prompt 必須完全去除舊 framing**,不能寫「之前判斷 X,請重新評估」。 呼叫 Codex(**用 AGENTS.md「Codex 呼叫方式」的 `codex exec` CLI;勿用 codex:codex-rescue subagent / `/codex:rescue`,會卡 superpowers preamble**),prompt 首行加強制 no-tool 指令,模板: ``` 我是一名美股投資人,使用 Level 2 options + Spread 的 margin 帳戶。 請對 [TICKER] 個股,**完全獨立**執行 Step 0e 第一性分析 — 不要受任何先前結論或 framing 影響,這是一份獨立第二意見。 **Raw data(只給 fact 數值,無 derived label):** **估值(純數字 — 三錨點原始值,讓 Codex 自行推導 Fair PE):** - 現價:$XXX - Trailing PE:XX / Forward PE:XX / PEG:X.X / P/S:X.X / EV/EBITDA:XX - Forward EPS:$X.XX / FY 估算 EPS:$X.XX - 分析師 median PT:$XXX - EODHD earnings base rate:N/8 beat, avg_surprise X.X%(或 unreliable-low-base) - Market Cap:$XXB **最近財報(fact,含日期):** - 報告日:YYYY-MM-DD([已過 X 天 / 即將公佈]) - Revenue:$XXX M(YoY +X.X%,QoQ +X.X%) - EPS:$X.XX(YoY +X.X%) - 公司 guide / 分析師 estimate revision **Quarterly 軌跡(最近 4-6 季 raw 數字):** - Q[N] [date]:Revenue $XXX M / EPS $X.XX - ... **Margins(最近一季 vs 前一季):** - Gross:XX.X% / Operating:XX.X% / Net:XX.X% / FCF:XX.X% **資產負債:** Cash $XB / Debt $XB / Net cash position $XB / Quick ratio X.X **分析師共識:** [N] strong buy / [N] buy / [N] hold / [N] sell / [N] strong sell;median PT $XXX;high $XXX / low $XXX **內部人交易(90 天):** [N] 筆 Form 4,[X 筆 buy / X 筆 sell],金額摘要 — 不寫「警訊」「正常」分類 **技術面(fact only,不分類):** - RSI(14):XX.X(純數字,不標 OB/oversold) - MACD:line X.XX / signal X.XX / histogram X.XX(不標 bullish/bearish) - 價 vs SMA20:X.X% / 價 vs SMA50:X.X% / 價 vs SMA200:X.X% - ATR normalized:X.X% - 6 週價格區間:低 $XXX → 高 $XXX → 現 $XXX - 距 52W 高:X.X% / 距 52W 低:X.X% - 主要 supports:$XXX / $XXX / $XXX - 主要 resistances:$XXX / $XXX **Sentiment(30 天 raw):** 平均 X.XX / 7d 平均 X.XX / 今日 X.XX(新聞量 N 篇) **近期催化(事實 timeline):** 財報日、產業事件、guidance update 等(不寫評語) **配置上下文:**(`--current` 模式才填入)已持有 X 股 @ avg $X / 未持有;若無 --current 則省略此行 **請輸出:** 1. **核心 thesis**(1 句可驗證命題,falsifiable,非 narrative) 2. **證偽條件**(2-3 個 falsifiable 觀察點 — 量化指標 / 事件 / 時程) 3. **機率分布表(三錨點 Fair PE,自行推導不依賴 Claude 的計算):** 先導出你自己的三錨點: - A1 = Trailing PE(市場隱含) - A2 = PEG × growth%(成長合理倍數;AI 龍頭 PEG=1.5,其餘=1.0) - A3 = 分析師 median PT ÷ fwdEPS(賣方共識隱含) - base = median(A1,A2,A3);bull = max × 1.25(上限 current_PE × 1.25);bear = min × 0.70 | 情境 | 機率 | FwdEPS | Fair PE(推導方式) | 公允價 | |------|------|--------|-----------------|--------| | 樂觀 | XX% | $X | XX(A?錨 × 1.25) | $XXX | | 基準 | XX% | $X | XX(median) | $XXX | | 悲觀 | XX% | $X | XX(A?錨 × 0.70) | $XXX | Expected Value = Σ(機率 × 公允價) = $XXX → vs 現價 $XXX:±X% 4. **Verdict**(1 句):Strong Buy / Buy / Hold / Sell / Avoid,並說明 conditional 在什麼前提。 5. **加分題:用戶持倉建議**(持有 / 加碼 / 減碼 / 出清?加碼/停損觸發點?) **規則:** - 機率分布必須 sum 到 100% - Verdict 必須有可量化條件 - 不假設 Claude 已說過什麼 - 用客觀數據與你自己的 mental model 從 raw 數值自行 derive interpretation - 若 ticker 在 ±48h earnings window,特別考慮「earnings sell-on-news」vs「thesis 破裂」的根因區分 請以繁體中文回覆,控制在 700 字內。 --effort high --fresh ``` ### 輸出整合 ``` ## 🤖 Codex 第二意見(獨立第一性分析) ### Codex 獨立輸出 **核心 thesis:** [Codex 的 thesis] **證偽條件:** [Codex 列的條件] **機率分布:** | 情境 | 機率 | EPS | PE | 公允價 | |------|------|-----|-----|--------| | 樂觀 | XX% | ... | ... | $XXX | | 基準 | XX% | ... | ... | $XXX | | 悲觀 | XX% | ... | ... | $XXX | **Codex EV:** $XXX vs 現價 $XXX → ±X% **Codex Verdict:** [...] --- ### 並排比較:Claude vs Codex(獨立輸出) | 維度 | Claude | Codex | 一致性 | |------|--------|-------|--------| | 核心 thesis | [Claude] | [Codex] | 一致 / 部分 / 顯著 | | 證偽條件數 | N | N | — | | 機率分布(樂/基/悲)| XX/XX/XX | XX/XX/XX | 差異 | | Expected Value | $XXX | $XXX | 差 ±X% | | 現價 vs EV | ±X% | ±X% | — | | Verdict | [Claude] | [Codex] | 同 / 異 | **真實共識**(兩邊獨立都認同):[1-2 條 — 高信心結論] **真實分歧**(兩邊獨立得出不同結論):[1-3 條 — 值得深入] **整合建議:** [基於真實共識給出最終行動,明示不確定性來源] ``` ### 進階:`--codex-adversarial`(opt-in 壓力測試) 僅當 arguments 含 `--codex-adversarial` 或 `--codex-adv` 時,**追加**對立面審查段落(攻擊 thesis、找 bug)。預設 `--codex` 不執行。 ``` [追加段落 — 只在 --codex-adversarial 時觸發] 請對 Claude 的 [TICKER] 結論進行對立面審查 — 攻擊 thesis、找最弱假設、提出 dissenting verdict。 [Claude 完整 thesis + verdict + technical analysis] 請以繁體中文回覆。 ``` > 若 Codex 失敗 → 輸出 `⚠️ Codex 不可用:[error],跳過第二意見`,繼續正常輸出。 --- ## Output Language Use Traditional Chinese (繁體中文) for all text output. ## 存檔 + HTML 生成 報告完成後: 1. 使用 Write tool 把完整 markdown 寫到 `briefing-out/stock-analysis--YYYY-MM-DD.md` 2. 執行: ```bash python3 tools/generate_html.py stock-analysis briefing-out/stock-analysis--YYYY-MM-DD.md --push ``` 成功時印出網頁連結,失敗(repo 尚未建立)時印警告並繼續。