Skip to content

[建議擴充] 加入 7D/14D 後驗追蹤(time-series)+ 事後復盤,提升情緒/風險報告品質 #2

@phenomenoner

Description

@phenomenoner

先說明:這是一個「建議擴充方向」的提案(非立即要改現有行為)。我注意到本專案目前能產出市場情緒立場與風險等級,但這些輸出尚未被結構化保存,也缺少 7/14 天後的後驗追蹤與復盤,因此很難:

  • 衡量分析品質是否真的在變好
  • 校準信心(避免過度自信)
  • 系統化累積「常見漏風險」清單

此 repo 目前沒有 Discussions,所以先用 Issue 把想法整理上來,供 owner 參考;如果方向認同,我也願意再把它拆成小步驟貢獻 PR。


背景 / 動機(為什麼值得做)

本專案的核心價值不是「單次看起來像真的報告」,而是「報告有立場 + 可追蹤 + 可復盤」。

如果每次任務都會輸出:

  • 情緒立場(看多/看空/中性)
  • 風險等級(低/中/高)
  • 以及若干關鍵論點

那麼它本質上就是一筆「可回測的預測」。加入 time-series / follow-up 層後,才能把結果變成長期可改進的系統,而不是一次性的文字生成。


建議 MVP:Prediction Ledger + 7D/14D Follow-up + Post-mortem

MVP 目標

  • 台股示範(ticker 例如 2330.TW
  • horizon:7 天與 14 天
  • 產出仍是研究/風控報告(不產生交易指令、不自動下單)

(1) 任務結束落地「可追蹤預測」到本地 SQLite(或 DuckDB)

建議新增一個小型 ledger DB(例如 quant_python_ai.sqlite),把每次任務的「立場/評判」存成結構化資料。

最小 schema(可再精簡):

-- 每次 run(可用於 prompt/model 版本追溯)
CREATE TABLE runs (
  run_id TEXT PRIMARY KEY,
  created_at TEXT NOT NULL,
  user_query TEXT NOT NULL,
  model_id TEXT NOT NULL,
  provider TEXT NULL,
  prompt_version TEXT NULL
);

-- 研究來源(UNTRUSTED)
CREATE TABLE sources (
  source_id INTEGER PRIMARY KEY AUTOINCREMENT,
  run_id TEXT NOT NULL,
  idx INTEGER NOT NULL,           -- 對應 [來源#] 的 #
  title TEXT,
  url TEXT,
  published_date TEXT,
  snippet TEXT,
  content_hash TEXT,
  FOREIGN KEY(run_id) REFERENCES runs(run_id)
);

-- 報告的可回測預測
CREATE TABLE predictions (
  prediction_id TEXT PRIMARY KEY,
  run_id TEXT NOT NULL,
  asset TEXT NOT NULL,            -- 2330.TW
  horizon_days INTEGER NOT NULL,  -- 7 或 14
  sentiment TEXT NOT NULL,        -- bullish/bearish/neutral
  confidence REAL NOT NULL,       -- 0~1(若不想做可先固定 0.5)
  risk_level TEXT NOT NULL,       -- low/med/high
  key_claims_json TEXT NOT NULL,  -- 每條 claim 要帶 [來源#]
  watchlist_triggers_json TEXT NULL,
  due_at TEXT NOT NULL,
  created_at TEXT NOT NULL,
  FOREIGN KEY(run_id) REFERENCES runs(run_id)
);

-- 到期後的 outcome
CREATE TABLE outcomes (
  outcome_id TEXT PRIMARY KEY,
  prediction_id TEXT NOT NULL,
  evaluated_at TEXT NOT NULL,
  start_price REAL,
  end_price REAL,
  return_pct REAL,
  max_drawdown_pct REAL,
  direction_correct INTEGER,
  notes_md TEXT,
  FOREIGN KEY(prediction_id) REFERENCES predictions(prediction_id)
);

(2) 到期自動 Follow-up(7D/14D)

新增一個非互動命令(方便排程),例如:

  • python -m quant_python_ai.followup --due

行為:

  • 找出 due_at <= now 且尚未評估的 predictions
  • 取得該資產在 7D/14D 的價格序列
  • 計算:return_pctmax_drawdown_pct(MVP 先有這兩個就夠)

價格資料來源建議做成介面:

  • MVP 先用 yfinance(台股 ticker 常見 2330.TW 格式)
  • 未來可換成 twstock/FinMind/券商 API(不綁死)

(3) Post-mortem:把「漏掉的風險」變成下一次的 checklist

Follow-up 產出除了數值,也建議有一段簡短的 post-mortem(可選用 LLM,但要控制成本):

  • 這次波動/回撤主因可能是什麼?(引用新來源、或標註「資料不足」)
  • 當初報告是否有提到這種風險?
  • 建議新增/強化哪一條風險檢查項目(checklist item)

這能把「事後知道」轉成「下次會記得問」。


為什麼不是直接做 RL(rationale,精簡版)

在研究型 agent 上,先建立 可回測紀錄 + 後驗評分,通常比一開始做重型 RL 更:

  • 便宜
  • 可控
  • 可 audit

有了 outcomes 後,後續再做:

  • confidence 校準(reliability curve)
  • prompt/model routing(bandit)
  • 或生成多候選答案再 rerank
    才有「學習訊號」。

安全與定位(避免誤用)

  • 外部新聞/網頁一律視為 UNTRUSTED(避免 prompt injection)
  • 本功能不提供交易指令、不得自動下單;只做研究與風險報告品質提升

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions