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

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions