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.
Connect ahel once, and every AI you use reads what you have installed.
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 4.6(純彙整;session 已長則先/compact)/briefing telegram→ Sonnet 4.6(每日 launchd 自動推送,成本敏感,固定 Sonnet;週五--codex另走 gpt-5.5)/briefing full→ Opus 4.8(中等綜合 + Verdict;Phase 2 subagent 已外包 Sonnet 4.6)/briefing deep→ Opus 4.8(深度合成 + 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%或 —}
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.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
- 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. 交易檢討到期提醒
讀 research/last-trade-review.txt(單行日期)。距今 >14 天(或檔案不存在)→ Key Alerts 加一行:
📋 交易檢討已到期(上次 YYYY-MM-DD,D 天前)→ 執行 /trade-review
未到期不輸出。briefing 不代跑檢討——歸因需要逐筆判斷決策來源,要用戶在場。
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)
- 量能比: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)。
6. Key Alerts
只在觸發時顯示(無則跳過整個 section):
- 單日跌 > 5%
- 總虧 > 15%
- 單一持倉 > 8% 組合(過度集中;>10% 🔴 紅線)
- 財報 < 3 天(用已知財報日歷)
- 選擇權 < 14 天到期
- Swing Risk:認列桶肥利潤(>+40%)+ 高 β + revision 轉折/題材降溫,且無對應落袋掛單 →
🔴 Swing Risk 未處理(附建議可掛單) - 梯級停利到價/缺口:認列桶倉位觸及下一梯級(+30/+60/+100/每+50pp)而無對應 GTC 掛單,或存量累計減碼低於級距應達比例 →
🟡 梯級缺口(附補掛單,perfeedback/tiered-profit-taking.md) - 財報叢集:未來 7 日財報窗內持倉合計 >20% →
🔴 叢集曝險 X%(見 Section 4.5 step 6) - 現金滯留:現金 >15–20% 且無 GTC 掛單覆蓋、無 dry powder 理由 →
🔴 飛輪滲漏 - 🚦 Regime break(Step 0.55,display-only):credit
widening_fast(HY OAS Δ5d ≥ +25bp 或 Δ20d ≥ +50bp)/ VIX 期限inverted(^VIX/^VIX3M ≥ 1.0)/ 半導體寬度divergence_flag(SMH 距 52w 高 <5% 且寬度 <50%)→ 各 1 行附數字,不觸發自動動作 - 記憶體/功率報價反轉:pricing_watch 出現合約價轉跌 / lead time 縮短 / 砍單類 quote →
🚦 pricing 反轉候選(附逐字 excerpt + 對應 thesis slug,如 MU:memory-supply-response-2027) - 台股月營收轉負:tw_monthly 任一檔
turned_negative == true→🔴 需求證偽候選:{名} 月營收 YoY 轉負 → 提前檢討 ON/DIOD,不等財報 - Revision book decel:
book_decel == true→🟠 revision 動能減速(寬度 {breadth_pos_pct}%,7d {momentum_7d_pp}pp);book_rollover == true→ 升🔴 revision 寬度跌破 50% - 🔴 回檔行為熔斷(R15):讀
briefing-out/cache/account-metrics.json→equity.circuit_breaker_active == true(帳戶自峰回落 >10%)→ 固定顯示🔴 回檔熔斷生效中(峰 {peak_date} −{current_drawdown_pct}%):信念桶禁淨減碼;清倉/降桶決定強制隔夜(寫理由過根因分類,次日確認);僅機械單(梯級 harvest/旗標 forced/既掛 GTC)照常(規則feedback/holding-period-discipline.md;cache 缺失 → 跳過不猜) - 🐦 來源訊號:Step 0.68 cache 中 tier ∈ {trusted, core} 且
has_number == true且貼文 48h 內 →🐦 {ticker} {source_id}@{tier}:{claim 摘要}("{raw_quote 節錄}");每檔最多 1 行、全 Key Alerts 最多 3 行;Probation 不得出現於此(僅 §9.6);display-only,不改變任何建議
7. 計畫進度 Quick
- 近期待辦狀態(✅🔄⏳)
- 今日是否有計畫中的觸發條件被滿足(RSI 破 30、MACD 金叉等)
- 即將到期的選擇權 vs 計畫中的關鍵日期
8. Quick Take
🔒 強制:機率分布必須呼叫 probability-honesty-checker agent
寫出機率分布 / EV 之前必須執行:
Agent(
subagent_type: "probability-honesty-checker",
description: "Briefing quick take EV check",
prompt: """
計算當前組合 7 日 horizon 機率分布與 EV。
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 139
- Forks
- 12
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
briefing- Source
- github.com/patricksudo/fadacai-portfolio