Portfolio Briefing
SkillDev toolsDaily portfolio briefing with 3 tiers: /briefing (quick ~1min), /briefing full (~3min), /briefing deep (~5min). Replaces daily-briefing.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Portfolio Briefing skill
What this skill tells your AI
The instructions your AI receives, as published by patricksudo/fadacai-portfolio in .agents/skills/briefing/SKILL.md and read by ahel’s review.
三層結構的每日投資組合簡報,取代原 /daily-briefing。
Arguments
/briefing→ Quick(~1 分鐘)/briefing full→ Quick + Full(~3 分鐘)/briefing deep→ Quick + Full + Deep(~5 分鐘)/briefing telegram→ Telegram Push Tier(~2-3 分鐘)— 盤中推送專用,不跑 Phase 1-3
--send 旗標
任何 tier 加上 --send 會在 tier 執行完後:
- 把完整 briefing markdown 寫到
briefing-out/YYYY-MM-DD-full.md(Write tool) - 把 Telegram 格式純文字寫到
briefing-out/YYYY-MM-DD-telegram.txt(Write tool) - 呼叫
python3 tools/send_briefing.py YYYY-MM-DD(Bash tool)推送至 Telegram + Email- send_briefing.py 內部自動呼叫
generate_html.py,push HTML 到 reports repo,並在 Telegram 訊息末加上網頁連結
- send_briefing.py 內部自動呼叫
briefing telegram 沒有 --send 時:只寫 briefing-out/ 兩個檔案,不發送。
若需手動生成 HTML(不發送):python3 tools/generate_html.py briefing YYYY-MM-DD [--push]
執行模型建議
/briefing(quick)→ Sonnet 5(純彙整;session 已長則先/compact)/briefing telegram→ Sonnet 5(每日 launchd 自動推送,成本敏感,固定 Sonnet;週五--codex另走 gpt-5.5)/briefing full→ Opus 5.5(中等綜合 + Verdict;Phase 2 subagent 已外包 Sonnet 5)/briefing deep→ Opus 5.5(深度合成 + Codex 整合 + 機率/EV)
切換方式:/model sonnet、/model opus 或 /model fable 後執行 skill。
Step 0: 配置同步 & 倉位偵測
執行 AGENTS.md 的 Step 0 統一規範(0a → 0b → 0c → 0d → 0e)。
- 讀
plan.md+feedback/*.md(必做) - 呼叫
get_account_position取即時持倉 - 今日 journal 不存在 → 執行 gap-fill + 變動偵測 + 自動建立 journal
- 若偵測到的變動對應 plan.md 待辦項 → 在 Phase 1 Step 1 標記
- 0e 第一性原理紀律:在 Quick Take 之前必須完成「市場主題 thesis / 證偽條件 / 機率分布」三題(見 AGENTS.md 0e)
Step 0.5: Macro Snapshot Load(所有 Phase / Tier 共用)
讀 cache(不打 API,所有數據由 tools/fetch_macro.py 預載到 briefing-out/cache/macro-snapshot.json):
Read briefing-out/cache/macro-snapshot.json
判定:
status == "ok"或"partial"且 cache mtime < 36h → 使用,在 Quick Take 區前顯示 1 行:📊 Macro: Fed {fed_funds}% | 2s10s {value} ({regime}) | HY OAS {value} ({regime}, pct {pct_1y}%) | VIX {value} ({regime}) | regime: {regime_tag}status == "skipped"(FRED key 缺失)→ 顯示⚠️ Macro snapshot unavailable (FRED_API_KEY not set)並跳過- mtime > 36h → 顯示
⚠️ Macro snapshot stale ({mtime_hours}h old)仍使用但標記
將 5 個 series + regime_tag 內容餵給 Step 0e 與後續呼叫的 probability-honesty-checker agent(其 Step 1i 必須收到此資料)。
Step 0.55: Leading Indicators Load(所有 Phase / Tier 共用)
讀 cache(不打 API,由 tools/fetch_leading.py 預載,TTL 20h;配置 research/leading-config.json):
Read briefing-out/cache/leading-indicators.json
判定(逐 block,不整檔否決):
- 頂層
status == "ok"或"partial"且 mtime < 36h → 使用;partial時只跳過status ∉ {"ok","partial","warming_up"}的 block,各標⚠️ {block} unavailable - block
status == "carried_forward"→ 使用但標(前日值 {data_as_of}) - 頂層
status == "skipped"/ 檔案缺失 → 顯示⚠️ Leading indicators unavailable,跳過所有相關段落;Deep tier 強制刷新:uv run --directory tools python3 tools/fetch_leading.py --force後重讀;Quick/Full/Telegram 標旗即續 blocks.revision_delta某 archive 窗available == false→ 顯示⏳ archive-diff {窗} warming up({available_from} 起可用),該窗不產生 archive decel 旗標。vendor 7d 曲線法(Fundamentals Data Feed 的vendor_*欄位)自首日可用:decel_tickers為兩法 union,decel_tickers_archive/decel_tickers_vendor分列(/trade-review 各驗命中率);vendor_book給 7d vs 30d 上修寬度對比blocks.tw_monthly各檔history_months < 2→ accel/轉負 flags 為 null 不判定,僅列數字
在 📊 Macro 行下方顯示 1 行 🚦 儀表(所有 tier 一致,欄位缺失以 — 填):
🚦 先行: HY {delta_5d_bps:+}bp/5d ({velocity_flag}) | VIX期限 {ratio} ({term_flag}) | 半導體寬度 {pct_above_50dma}%>50DMA ({breadth_flag}) | 記憶體報價 {memory.n_hits}則/功率 {power.n_hits}則 | 台股月營收 {data_month} {最強檔 YoY%或 —}
🔁 輪動相關儀表(2026-09-14 新增,display-only,H8 影子): 讀 briefing-out/cache/rotation-corr.json(tools/rotation_corr.py,runner 每日預跑、archive 凍結;手動 briefing 時 uv run --directory tools python3 tools/rotation_corr.py),在 🚦 儀表行下方原樣貼其 banner(例:🔁 輪動相關: 軟體~半導體 20d ρ +0.17(不顯著,基準 +0.22) | regime-shift: 無顯著變化)。措辭鐵則:ρ 的形容只准用工具給的三種(正相關 / 負相關 / 不顯著)——「負相關」只在 95% CI 上界 <0 時存在;regime_shifts 為空就寫「無顯著變化」,不得用「感覺軟體硬體在對做」之類敘事補位。有 regime-shift 時進 Key Alerts 一行、不觸發任何加減碼;由 /trade-review 驗 H8(旗標後 10 日兩籃相對報酬 ≥5pp 才算有資訊量)。
gauges 另帶兩個 FMP 免費層儀表(不進一行 banner,供 full/deep 段落與 Key Alerts 引用):
treasury(10Y/2Y/3M/30Y + 2s10s/3m10y spread)— plan「10Y <4.35 再加滿」類閘門的即時對照semis_industry_pe(半導體行業 PE 日頻 + Δ5d/Δ20d + 100 日分位)— 估值溫度計:與 revision 寬度並讀可分離「估值壓縮 vs 基本面惡化」(PE 大跌 + revision 寬度不動 = 純 de-rating)
紀律(同影子訊號 A4,記錄不阻擋): 本 cache 所有旗標為 display-only + Key Alerts 標旗,不得單獨觸發任何加減碼/harvest/否決;由 /trade-review 跑滿 ≥2 期驗命中率後才可討論升級硬閘門。
質性訊號 theta(2026-08-19 起,資訊有時間衰減): 凡引用 pricing_watch excerpt 或 cross-read leader 訊號作 prior,必附訊號 age(來源日 → 今日,格式 (N 天前));age > 14 天 → 標 🕒 stale,降為背景不作 prior(同 revision >45d stale 的質性版——每組資訊過一定時間就被 fully price-in)。來源日缺失 → 標 (age unknown) 並降權。
這份 cache 用於:
- 本步 🚦 儀表行(所有 tier)
- Section 4.6 財報 Cross-Read 排序(leaders → followers 讀序)
- Section 5 強訊號對稱分類
🟠 decel標註與 Section 12.5 飛輪檢查 revision 轉折佐證 - Section 6 Key Alerts 的 regime-break / pricing 反轉 / 台股轉負 / book_decel 旗標
- §9.5(Deep)訊號擷取的 pricing_watch 預過濾新聞(excerpt 即 raw_quote 候選)
- Telegram T1
↳ read-through子行、T5 🚦 alerts、T8a/T8b 🚦 區塊
Step 0.6: Earnings History Load(所有 Phase / Tier 共用)
讀 cache(由 tools/earnings_history.py 預載):
Read briefing-out/cache/earnings-history.json
Read briefing-out/cache/earnings-dates.json
判定:
status == "ok"→ 使用,後續 Section 4.5 與 Telegram tier earnings 區直接引用status == "skipped"/ mtime stale → 標記⚠️ Earnings cache stale但仍使用最後一份
這兩份資料用於:
- Section 4.5 Earnings Calendar 表格的
Trailing 8Q beat/avg surprise欄位 - Telegram tier
📅 Earnings This Week加 beat rate 標註 probability-honesty-checkerStep 1d「Base rate」備選來源(EODHD fundamentals-snapshot 為首選)
Step 0.65: Fundamentals Snapshot Load(所有 Tier 共用,cache-only)
讀 cache(由 tools/fetch_fundamentals.py 預載,TTL 24h):
Read briefing-out/cache/fundamentals-snapshot.json
判定:
status == "ok"且 mtime < 30h → 使用,供估值區塊、probability-honesty-checker 1d/1h 使用status == "skipped"/ mtime > 30h / 缺失 → 標記⚠️ Fundamentals cache stale/missing;Deep tier 強制派 subagent 刷新,Quick/Telegram 標旗但繼續
EODHD 資料缺口處理(必守):
highlights.pe_ratio == 0.0或peg_ratio == 0.0→ 丟棄該三錨點錨,標(anchor unavailable),不進 Fair PE 計算avg_surprise_pct對低基期股(EPS estimate ≤$0.10)可能失真 → beat 次數可信,avg% 在機率計算中標(unreliable-low-base)並拉寬區間
Cache-miss fallback / Deep 強制刷新:
Agent(subagent_type="data-collector",
prompt: "對以下全部持倉(TICKER.US 格式)呼叫 mcp__eodhd-mcp__get_fundamentals_snapshot 與
mcp__eodhd-mcp__get_earnings_history,回傳 dict {ticker: {snapshot:{...}, base_rate:{...}}},
不分析不合成。")
Deep tier 每次必跑(強制刷新);Quick/Full 僅在 cache miss 時派。
這份 cache 用於:
- Section 8.5(Full/Deep) 三錨點估值表(A1 pe_ratio / A2 PEG / A3 分析師隱含 PE)
- Quick Take 下方「💰 估值快訊」(一行,最便宜/最貴持倉 vs 公允價)
probability-honesty-checkerStep 1d(beat base-rate 首選來源)與 Step 1h(quarterly growth → fundamental intact X/Y)- D2 thesis-impact 推理:
fair_value_before/after重算從同一 cache 取三錨點輸入
Step 0.67: News Articles Load(所有 Tier 共用,cache-only)
讀 cache(由 tools/fetch_news.py 預載,TTL 6h):
Read briefing-out/cache/news-articles.json
判定:
status == "ok"且 mtime < 8h 且"content" in fields_available→ 使用,P3 信號擷取(Deep tier §9.5)可讀 bodystatus == "ok"但"content" not in fields_available→ 有限使用(只有 headline+sentiment,P3 只能做 headline 掃描,標⚠️ news body 不可用)status == "skipped"/ mtime > 8h / 缺失 → 標記⚠️ News cache stale/missing,Quick/Full/Telegram 略過 P3 信號擷取,Deep tier 繼續(P3 降級為僅 SEC/逐字稿)- Quick / Full / Telegram tier:不讀 body,不做信號擷取;news cache 僅供 Deep tier §9.5 使用
Step 0.66: 現任事實 Load(所有 Tier 共用)
Read research/facts-current.json。寫到 Fed 主席、財長、CEO 等現任職位時以此為準(2026-09 起 Fed 主席 = Kevin Warsh/華許);不在檔內的人名不確定就寫職稱。stale_terms 內的字樣寫出來 hook 會擋。
Step 0.68: 來源訊號 Load(所有 Tier 共用,cache-only)
讀 cache(由 tools/fetch_twitter.py 預載,TTL 20h;配置私有 research/source-config.json,schema 範例見 docs/source-config.example.json):
Read briefing-out/cache/twitter-signals.json
判定:
status == "ok"或"partial"且 mtime < 24h → 使用;"partial"標 ⚠️(部分帳號讀取失敗,仍用已讀到的貼文)budget_exhausted == true→ 標 💸(本輪 X API 讀取額度用盡),仍用已讀到的部分status == "skipped"(無X_BEARER_TOKEN或x_fetch.enabled=false)/ mtime > 24h / 缺失 → 顯示⚠️ 來源訊號 unavailable,跳過 §9.6 與相關 Key Alerts / Telegram 段落
單則貼文 date 距今 > 14 天 → 標 🕒 stale,降為背景不作 prior(同 Step 0.55 質性訊號 theta 規則)。
紀律(display-only,同 A4 影子 / R18 / 先行指標):
- Tier(
probation/trusted/core)完全由tools/source_credit.py tiers機械算出,Claude 不得手動升降 - Probation 來源只能出現在 §9.6(Deep tier 陳列),不得作 Key Alerts / Telegram 引用來源,不得作任何 prior
bias == "talks-book"來源(source-config,目前 @BillAckman / Pershing Square,2026-09-16 用戶觀察「他說很可怕時通常持有部位」):陳列其任何主張時,必附一行 13F 對照——讀briefing-out/cache/agenda-13f.json(tools/agenda_check.py,runner 預載,TTL 7 天):「13F {期別} 前 10:{前 3 名+%};本則{點名持倉 / 看空且有 put / 無關}」。同向 = agenda 揭露,不是預測,不得作 prior;source_credit.py add-claim時--note帶agenda=same|none,命中率分組看- Trusted 可作 medium confidence prior、可進 Key Alerts 🐦 行、可進 Telegram T3.5/T8a/T8b
- Core 額外可提作試單候選背景(仍須過 R14 持有期閘 / R15 回檔熔斷 / R18 財報窗禁令等既有硬閘門,不繞過)
- 驗滿 ≥2 期
/trade-review前,來源訊號不得單獨改變任何 Verdict / 加減碼建議,只作背景與記錄 - 引用即 add-claim:凡在 briefing 任何段落引用某則貼文的主張支持判斷,同一次必須
python3 tools/source_credit.py add-claim ...登錄該主張;未登錄的引用不算數(同旗標紀律「講了要記」)
這份 cache 用於:
- Section 6 Key Alerts 🐦 行(Trusted+、48h、has_number)
- §9.6(Deep)來源訊號陳列表 + 信用帳統計
- Telegram T3.5 / T8a / T8b 🐦 區塊
Step 0.7: Thesis Ledger 驗收 & 逾期掃描(所有 Tier 共用)
帳本 = research/thesis-ledger.json,工具 = tools/thesis_ledger.py(去重/碰撞/到期/過期/統計全在程式層,Claude 不手改 JSON)。
1. 取得今日到期清單(同時自動 expire sweep):
python3 tools/thesis_ledger.py due
python3 tools/ev_ledger.py resolve-due # EV 分布到期機械驗價(零判斷,自動抓價/淨值標記),輸出直接列在 briefing
python3 tools/source_credit.py resolve-due # 來源信用帳 view claim 到期機械驗價(同上;fact claim 只列不猜,見 2b)
回傳 {due:[...], expired:[...]}。expired 是工具自動把「逾期 >30 天未驗收」轉掉的,當作無結果。
2. 對每筆 due thesis 驗收:
- 讀該筆
trigger.metric→ 知道要抓什麼(財報營收/ASP/毛利率、板塊 ETF、價格…) - 用既有 MCP(yfinance /
earnings_history.pycache / technical 等)抓實際數字 - 對照
thesis+falsification判定passed/failed/partial - 抓不到新數(event 觸發但財報還沒出)→ 用
reschedule把觸發日往後推、維持 pending,絕不猜 verdict:python3 tools/thesis_ledger.py reschedule --id <id> --to YYYY-MM-DD --reason "財報未出" - 有結論 → 先做 D2 三桶股價影響分解,再呼叫
resolve帶結構化旗標:- passed:用財報後新數字重算 D1 三錨點(
pe_ratio × fwd_eps各情境) →fair_value_after;price_impact_pct = (after−before)/before - failed:同上但用惡化輸入(成長減速/砍 guide) →
fair_value_after下修 - partial:拆分 thesis 成分 vs 倍數/價格成分 →
impact_decomp = "thesis +X%(基本面)/multiple −Z%(re-rate)=net −W%"
python3 tools/thesis_ledger.py resolve --id <id> --verdict passed|failed|partial \ --actual "實際數字" --note "判讀" --next-action "由此推出的操作" \ --fair-value-before <float> --fair-value-after <float> \ --price-impact-pct <float> --impact-decomp "thesis +X%/multiple −Z%=net −W%"fair_value_before/after取自 Step 0.65 fundamentals cache 的三錨點計算;全部選填,有數就帶。 - passed:用財報後新數字重算 D1 三錨點(
2b. facts_due 驗收流程(來源信用帳,fact 型主張)
source_credit.py resolve-due 只自動驗 view 型主張(用價格算超額 α);fact 型主張只列不猜,due 回傳 facts_due 供人工核對:
- 找官方證據(財報 / 8-K / 公司公告 / 官方數據)核對該筆
claim的metric/value - hit:方向對且
|actual−value|/|value| ≤ 0.5;partial:方向對但超幅;miss:方向錯;找不到對照數字 → 留pending不猜 - 有結論才
resolve:python3 tools/source_credit.py resolve --id <id> --verdict hit|partial|miss --actual "<官方數字+出處>" --confirm-date <YYYY-MM-DD> - 只列一行,不改變任何建議(同 A4 影子紀律):
無到期 fact 則略過此行。🐦 來源驗收:{source_id}@{tier} {ticker} {claim 摘要} → {verdict}
3.(已除役 2026-07-30) 舊 naked-call-watchlist 3 閘門檢查已移除 —— 該清單為 6/5 反應式閘門時代產物(方法論 6/13 已被預掛 GTC 買梯取代),檔案歸檔至 research/archive/。樂透機會由 Section 11.5 掃描 + 價格警報器承接,不再每日讀舊清單。
4. 輸出「📋 thesis 驗收」區塊(接在 Key Alerts 後 / Quick Take 前):
## 📋 thesis 驗收
| thesis | 命題 | 實際 | verdict | 公允價 before→after | 價格影響 | → actionable |
|--------|------|------|---------|---------------------|---------|-------------|
| MU:memory-cycle | DRAM 漲價毛利率>40% | ASP +8%、毛利率42% | ✅ passed | $320→$370 | +15.6% | HOLD,加碼門檻 $XXX |
(無到期項則略過此區塊;「公允價 before→after」和「價格影響」欄只在 resolve 時填,reschedule 留空)
⏳ 逾期未驗收已歸檔:[expired 清單,若有]
驗收結果直接餵 actionable:passed → 強化/HOLD/加碼(含新公允價上修幅度);failed → 汰弱/減碼(含公允價下修多少);partial → 分解 thesis vs multiple 成分後決定操作。resolve --next-action 寫的就是下一步行動,併入 Key Alerts / 行動項。
5. SA 量化榜整合(2026-07-25 用戶指定):
- 到期提醒:ledger 有
MARKET:sa-quant-scan-*due(或research/sa-quant-scans/最新快照 >35 天)→ Key Alerts 加一行📋 SA 量化榜掃描到期:請貼最新 screener(條件凍結),與 {最新快照日期} 基準 diff;未到期不輸出。 - 輔助訊號引用:判讀持倉/bench 名字時可引用最新快照的 quant 排名/verdict(標註快照日期,如「SA quant #1 @07-24」);快照 >35 天視為 stale 不引用。
- 管線與鐵則見 plan.md「SA 量化榜掃描機制」:榜單是儀表板非方向盤——掉榜 = revision 覆查警報(最高價值),quant 高分 ≠ 買進(必過 headroom/coverage/mandate/結構四濾網)。
Step 0.75: 影子訊號 & 交易檢討到期(所有 Tier 共用)
launchd 路徑下 tools/briefing_runner.sh 已預取此兩項;手動執行 briefing 時才需自己跑(重跑安全,有去重):
python3 tools/shadow_signals.py flag # A4 高估旗標,記錄不阻擋
python3 tools/trade_ledger.py snapshot-orders # 在掛單快照(歸因 ground truth)
python3 tools/position_guard.py --sync-alerts --render-plan # 持倉守門(2026-09-02 P3):R14 天數/R23 arm+警報同步/R8 GTC 缺口/>10%/檔數/財報窗/桶別缺口 → 渲染 plan.md 標記區;exit 2 = 有缺口 → 缺口逐條進 Key Alerts(不得省略)
python3 tools/trade_ledger.py orders # 讀回:死單 + 不在 plan 的在掛單
python3 tools/rule_stats.py ledger-audit --check # 規則帳本一致性;launchd 路徑 runner 已預跑(失敗直接推 Telegram),手動 briefing 才需自己跑;exit 2 → 違規逐條進 Key Alerts
1. A4 高估旗標(🟣 影子模式)
flag 回傳 A4vsA3 ≤ −35% 且 self_valuation.confidence == ok 的持倉。在 Key Alerts 加一行:
🟣 A4 高估旗標(影子,不阻擋):{ticker} A4vsA3 −X%|{ticker} −Y% — 記錄中,滿 30 天由 /trade-review 計分
這一行只做記錄,不得據此改變任何建議。 A4 依 AGENTS.md 0e 仍不進 median、不進 EV。跑滿 2 期檢討才決定是否升為硬閘門(見 feedback/RULES-LEDGER.md R3)。
無旗標則整段省略。
2. 在掛單快照 + 死單偵測
snapshot-orders 每個交易日都必須跑,累積訂單登記表——這是往後把成交歸因到「系統決策 vs 自主決策」的唯一可靠來源。券商 order_status 只回在掛單,成交/取消後即消失,斷一天就有一天的成交永久無法歸因。
掛單 >30 天未成交 → Key Alerts 加一行:
⚠️ 死單:{order_id} {買/賣} {ticker} {N}股 @${price}(掛 D 天)→ 重新定價或撤單
python3 tools/trade_ledger.py orders 另會標出不在 plan.md 的在掛單(plan 與券商實況脫節),一併列出。
3. 未結旗標(🔴 本書最貴的漏口,優先於其他所有 alert)
python3 tools/trade_ledger.py flags
量測結論(2026-07-25):吃掉最多回撤的機制是「已標記惡化但沒有強制出場」,自警示以來 −$6,333。 成因是旗標只活在 briefing 散文裡:TSLA 與 ON 的 thesis-ledger history 都是 0 筆,沒有任何東西在數延後次數,所以每天把同一個警示當新的重述一次。
輸出規則:
forced_action_required非空 → Key Alerts 第一行,格式:🔴 強制決定:{id} 已延後 {n} 次|自警示 {days} 天累積 −$X → 減碼 1/3 或明文撤旗(附理由)overdue非空 →⚠️ 旗標逾期:{id}(deadline {date},逾 {n} 天)post_flag_fills.buys > 0→⚠️ {ticker} 在警示後仍加碼 {n} 股({dates}),損益 $X
開旗紀律(強制,這是修好漏口的關鍵): 凡在 briefing / journal 寫下 ⚠️ / 降桶候選 / 勿再向下加碼 / thesis 蒙塵 / 待覆判 的部位,同一次必須開旗:
python3 tools/trade_ledger.py flag --ticker <T> --slug <kebab> \
--reason "<警示內容>" --deadline <YYYY-MM-DD 決定到期日>
延後不是免費的,必須走 defer(會計次):
python3 tools/trade_ledger.py defer --id <id> --to <新日期> --reason "<為何還不決定>"
第 3 次延後自動轉 forced → 減碼 1/3 或明文撤旗。撤旗也要走 resolve-flag --action withdrawn --note "<為何警示不成立>"。
反例存證:TSLA 7/01 標降桶候選,7/08 再提、7/09「不砍改收租」(用 PMCC 取代決定)、7/13 ledger 記 on-track,最後 −52.7% / −$6,399。若當時有此機制,7/13 就會被強制處理(標的 $425 vs 現在 $313)。
4. thesis 中途證偽掃描(不等觸發日)
python3 tools/thesis_ledger.py recheck --long-drift-only --limit 5
Step 0.7 的 due 只在觸發日驗收;recheck 補的是中間那段。列出「已過天數」最長的 5 筆,各問一句:證偽條件裡有沒有現在就看得到的已經成立?
- 成立 → 立刻
resolve --verdict failed,不等觸發日,並進 Key Alerts actionable - 前提完好 → 不輸出(避免每日噪音)
quick / telegram tier 只掃前 3 筆;full / deep 掃全部長飄移筆數。
5. 檢討/review 週期到期(機械,2026-09-14 改為工具)
python3 tools/review_due.py # exit 2 = 有到期;同時寫 briefing-out/cache/review-due.json
涵蓋三項:/trade-review(14 天,>21 天 🔴)、/portfolio-review(30 天,>45 天 🔴)、SA 量化榜掃描(35 天,>50 天 🔴;日期取 research/sa-quant-scans/*.md 檔名,非 mtime)。exit 2 → 工具輸出的每一行原樣進 Key Alerts,且進 Telegram「今日待辦」🎯(不得省略、不得只放 full.md)。 launchd 路徑下 briefing_runner.sh 已預跑並在到期時直接推 Telegram(不經模型),手動 briefing 才需自己跑。
2026-09-14 教訓:本條原為純散文規則,telegram tier 在上次檢討後第 16 天直接略過——規則活在散文裡就會被跳過,和旗標紀律同一課。
briefing 不代跑 /trade-review——歸因需要逐筆判斷決策來源,要用戶在場;但到期提醒本身不可依賴模型記得。
Phase 1: Quick(永遠執行)
1. Trade Journal Auto
若 Step 0b 偵測到倉位變化,輸出差異表:
## ⚡ 倉位變動(vs 上次快照 YYYY-MM-DD)
| 類型 | 操作 | 標的 | 變化 | 計畫對應 |
無變動則顯示「倉位無變化」。
2. Daily Snapshot
日期: YYYY-MM-DD
組合市值: $XXX,XXX (日變動: +/- $X,XXX / +/- X.XX%)
總損益: +/- $X,XXX (+/- X.XX%)
持倉: XX 檔股票 + XX 個選擇權合約
3. Today's Movers
全持倉依日漲跌%排序:
| 標的 | 股數 | 現價 | 日漲跌% | 市值 | 總損益% |
+2% 或 -2% 標記。
4. Options Status
4a. 無現股標的價格確認:
比對選擇權持倉的 underlying ticker vs 現股持倉。若 underlying 沒有對應現股(如 CRWD、DDOG、GOOGL、LRCX、TSLA、TEAM),
使用 mcp__technical-mcp__get_batch_indicators 或 mcp__yfinance-advanced__get_stock_info 取得該標的目前現股價格。
在 Options Status 表格中加入「標的現價」和「距 Strike %」欄位,方便判斷 ITM/OTM 狀態。
4b. Options 總覽表:
| 合約 | 方向 | 到期日 | 剩餘天數 | 標的現價 | 距Strike% | 損益% | 狀態 |
⚠️ 標記剩餘 <14 天的合約。
4.5 Earnings Calendar Check(Technical Snapshot 前必做)
為何必要: 持倉 ticker 在 ±48h 內若有財報,technical signal(trend / momentum / RSI)會被 earnings reaction 主導,不是結構性訊號。直接套「弱勢持續 → 減碼」會在 fundamental beat 後賣在低點(PLTR 5/5 案例)。
資料來源:Step 0.6 已預載 briefing-out/cache/earnings-dates.json + earnings-history.json,直接從 cache 取,不再呼叫 MCP(若 cache 缺失或 ticker 不在,才 fallback mcp__fmp-mcp__getEarningsCalendar)。
執行步驟:
-
從 cache 列出未來 7 天內、或過去 48h 內有財報的持倉 ticker
-
對 earnings window(±48h)內的 ticker,在 Step 5 Technical Snapshot 表格的「標的」欄位前綴 ⚠️
-
對 earnings window 內的 ticker:
- 不執行「弱勢持續 → 減碼」等自動規則
- actionable 改寫為「等 N+1 個交易日 settle 再判斷結構」
- 若強行給建議,必須先 confirm fundamental 數字(revenue / EPS / guide)方向,不能只看 price action
- 豁免(R9 修訂 2026-08-04):財報後、預登錄的基本面 gate 行動(guide/backlog/book-to-bill 印出即執行,如 PWR 7/30 型補滿)不受 +48h 限制;被停用的只有技術訊號與即興 price-action 動作
-
輸出格式(必須含 base rate):
| 標的 | 日期 | 時機 | 距 earnings | Trailing 8Q beat | Avg surprise % | 狀態 | |------|------|------|------------|-----------------|---------------|------| | NVDA | 2026-05-20 | AMC | 2d | 8/8 (100%) | +6.3% | 🔴 window 內 | | AVGO | 2026-06-03 | AMC | 16d | 7/8 (87.5%) | +3.4% | 觀察中 |Trailing 8Q beat與Avg surprise %從earnings-history.json的beat_count/total與avg_surprise_pct直接讀。 -
若 cache
status≠"ok"或 ticker 不在 cache → 該欄填(unavailable),並在輸出末尾加註⚠️ N tickers 缺 earnings cache(請手動 python3 tools/earnings_history.py --force) -
財報叢集曝險(book 級檢查,必做):
- 計算「未來 7 個日曆日內有財報的持倉」合計佔組合 %(權重從 Step 0b 持倉算)
- 表格後固定輸出一行:
📊 財報叢集:未來 7 日窗內持倉合計 X%(N 檔) - > 20% → 🔴 叢集警示(進 Key Alerts):提示 ① 該窗內 Swing Risk 🔴 / 梯級到價的認列桶倉位提前 harvest(財報前落袋,不賭 binary)② 暫停對同窗 ticker 新增曝險(現股與選擇權皆是,選擇權本有 ±48h 禁令)——此即 R18(影子計分中):每次實際擋下一個想做的加碼,同一次執行
python3 tools/shadow_signals.py block --ticker XXX --price <當時價> --size <USD> --note "<理由+財報窗>"(見feedback/earnings-reaction-window.mdC 段)③ 窗內合計曝險與各檔 beat rate 一併列出供判斷 - 10–20% → 🟡 資訊性標註,不強制動作
-
財報後 7 項體檢(20 秒 checkbox,2026-08-19 起,源
research/隨手筆記59-棋局思維-earnings-cycle.md): 對過去 7 日內已發財報的持倉,各輸出一行機械 scorecard(資料源:8-K/press release + guide;缺項標?不猜):{ticker} 7-check: Rev✅ EPS✅ RevGuide⬆️ EPSGuide➡️ Margin⬆️ Pricing✅ TAM✅ → 6/7七項 = Revenue beat / EPS beat / Rev guide raised / EPS guide raised / Margin expansion / Pricing power / TAM growing-structural。
- ≥6/7 → 「體檢過」:作 thesis resolve 與 R9 預登錄 gate 行動的快速依據
- ≤3/7 → 「體檢弱」:進 Key Alerts、該倉列入下次 review 覆判(不自動賣,仍走根因分類)
- Pricing power / TAM 兩項可引用最近一次 call 的既有判讀(附訊號 age);guide 兩項權重高於本季 beat 兩項(Numbers lag:本季數字是上季 guide 的兌現,會動股價的是還沒發布的數字)
詳見
feedback/earnings-reaction-window.md與feedback/weak-signal-root-cause.md
4.6 財報 Cross-Read(先行者 → 後行者讀序)
資料:Step 0.55 earnings_crossread.chains(鏈定義 research/leading-config.json,日期由 fetcher 解析,不打 API)。
規則:
- 只展開
active == true的鏈(leader 過去 10 日已發或未來 7 日將發、或 TSMC 月營收窗 8–12 日);無 active 鏈 → 一行「本期無 active cross-read 鏈」 - leader 已發(
reported_within_10d):從 news cache(Step 0.67)/ pricing_watch 摘 1 句硬數字(capex guide / bit 出貨 / book-to-bill / backlog…),須逐字 quote ≤120 字,無 quote → 標「已發,硬數字未見」(同 §9.5 反幻覺門檻);方向標 ↑/↓/→ 作為 followers 的 prior news_onlyleader(SK海力士/三星/Infineon):無排程日期,靠 pricing_watch 承接,有相符 item 才列,附recurrence提示- 禁:leader 結果不得直接轉成 follower 買賣指令 — 只更新 prior;行動仍走各自 gate(earnings window ±48h 禁令、revision 閘門不變)
| 鏈 | Leader(日期/狀態) | 讀什麼 | Followers(財報日) | Leader 訊號(quote) |
|---|---|---|---|---|
| hyperscaler_capex | GOOGL 7/22 ✅ / META 7/29 | capex guide | NVDA 8/26, COHR 8/12… | capex ↑ "…"(來源) |
5. Technical Snapshot
使用 mcp__technical-mcp__get_batch_indicators 取得全持倉技術指標。
欄位順序(依決策權重排列):
| 標的 | 現價 | 趨勢 | MACD | 量能比 | 動能分 | RSI |
- 趨勢:strong_uptrend / mild_uptrend / consolidation / pullback / weak_downtrend / strong_downtrend
- MACD:顯示 crossover 狀態(golden_cross / death_cross / none)——fact 列示,不作訊號、不加 emoji 暗示方向(H12:金叉 3.65% = 死叉 4.01% = 基準);狀態欄改看 >SMA50&EMA200 / 擠壓 / EMA50 斜率(guard
above_sma50/above_ema200/bb_squeeze/ema50_slope5_pct) - 量能比:volume_ratio(>1.5 爆量 / <0.7 縮量)
- 動能分:momentum_score(-100 ~ +100)
- RSI:僅數值列示。RSI 過高不觸發任何警示/標籤/動作(2026-07-01 用戶定調:強者愈強,超買非賣出理由;反轉偵測交給 revision 閘門)。RSI < 30 可作超賣參考
複合訊號標記規則(必須多指標同時觸發 + 無 earnings window):
| 標記 | 觸發條件 |
|---|---|
| 🔴 弱勢持續 | downtrend + momentum_score < -30(不是機會,是落刀) |
| ⚠️ 動能背離 | uptrend + momentum_score 轉負 OR death_cross(趨勢未破但動能轉弱) |
| 🚀 強勢確認 | golden_cross + strong_uptrend + volume_ratio > 1.2 |
| ⚠️ earnings window | 過去/未來 48h 有財報 → 以上規則一律不套用,標記 wait N+1d |
舊「🔴 拋物線警示(RSI>75)」「🟡 留意(RSI>70)」已於 2026-07-01 移除 — RSI 過高類標籤是飛輪/對稱性規則之前的遺留,一律不再產生。
根因分類規則(看到弱勢/強勢訊號必做):
對任一 weak_down / strong_down / momentum < -20 訊號,先回答根因再行動:
- 過去 48h 有財報?→ (b) earnings reaction → HOLD wait
- 同板塊 ETF 也弱?→ (c) sector rotation → 評估板塊配置
- fundamental 數據惡化?(revenue growth 連 2 季減速 / guide 下修)→ (a) thesis 破裂 → 可執行汰弱
- 以上皆否 → (d) noise → 忽略
只有 (a) 才執行「汰弱留強」減碼。詳見 feedback/weak-signal-root-cause.md
強訊號對稱分類(看到貼高/大漲訊號必做 — per feedback/momentum-valuation-symmetry.md;RSI 過高不是輸入):
對任一貼 52W 高 / 單日大漲 / 已漲多訊號,先查 revision 方向再行動:
- estimate 上修中(revisions up ≫ down / eps_revision_30d_pct > 0)+ 成長加速?→ 加速領導者:在倉讓它 run、不 trim(強者愈強;認列桶仍按梯級停利級距走);新資金不否決,改 starter + 回檔 ladder + bull call spread 定義風險
⚠️ revision 引用必附 coverage:分析師數 N≥15 全權重;8–14 半權重(須與 trend/季成長印證);<8 不單獨觸發加減碼;上次財報後 >45 天的 revision 標 stale 降權(per
feedback/momentum-valuation-symmetry.md規則 6)
🟠 revision decel(Step 0.55 cache 旗標,影子驗證中):該股在
revision_delta.decel_tickers中(上修仍為正但 7d/30d 動能顯著縮減)→ 在該股行尾標🟠 decel。只標記不改結論:不因此提前 harvest、不否決加碼、不進 EV;連同book_decel記入 Section 6 Key Alerts,由 /trade-review 驗命中率。warming_up→ 本標註完全不出現。
- estimate 翻下修/flat + 高倍數?→ 峰值 harvest 候選:認列桶列入 harvest 清單(這才是「賣強」的正當時機)
- weak_downtrend 反彈 + momentum 低 + 無 revision 支撐?→ 受損 turnaround:等催化驗收,不接刀(今天綠 ≠ 領導力)
禁:把「超買/太貴/已漲多/RSI 高」單獨當在倉 trim 或新倉否決理由 — 只影響下手結構(分批/spread),永不影響方向。賣出仍須過 (a)/(b)/(c) trim 閘門(feedback/position-concentration.md)。
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 140
- Forks
- 12
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
briefing-patricksudo- Source
- github.com/patricksudo/fadacai-portfolio