Skip to content

feat: 預測追蹤系統(Issue #2)#8

Merged
cablate merged 5 commits intomasterfrom
feat/prediction-tracker
Apr 10, 2026
Merged

feat: 預測追蹤系統(Issue #2)#8
cablate merged 5 commits intomasterfrom
feat/prediction-tracker

Conversation

@cablate
Copy link
Copy Markdown
Owner

@cablate cablate commented Apr 10, 2026

Summary

  • 新增預測追蹤系統,自動記錄巴逆逆提及的標的並追蹤 5 個交易日表現
  • LLM 分析後自動記錄預測到 SQLite,每日 15:00 排程更新 OHLC
  • 勝敗在查詢時判定(非寫入時),支援多維度回測分析

新增模組

模組 說明
db.ts SQLite 連線(better-sqlite3)、WAL 模式、自動 schema migration
stock-map.ts 台股名稱→代碼映射(2230 檔,完全匹配→包含匹配→反向包含)
stock-price.ts TWSE 即時報價(盤中)+ FinMind OHLC(盤後歷史)
tracker.ts recordPredictions() + updateTracking() + getStats()
data/tw-stock-list.json 2230 檔台股代碼映射表(政府開放資料)

追蹤邏輯

  • 一律追蹤 5 個交易日,完整記錄每天 OHLC + 漲跌幅(close/high/low)
  • 勝敗查詢時決定:系統只負責記錄,不在寫入時判定
  • supersede 機制:同股票新預測出現 → 舊預測標記 superseded + next_prediction_id 串接
  • 基準價格以貼文時間為準(非爬取時間),支援歷史回測

Status 狀態機

tracking → completed(5 天結束)| superseded(被新預測覆蓋)| unmappable(無法映射股票代碼)

錯誤處理

  • db.ts:目錄自動建立 + migrate 成功後才設全域變數
  • stock-price.ts:TWSE/FinMind 皆有 AbortSignal.timeout(10s/15s)
  • tracker.ts:三層 try/catch(DB 開啟、OHLC 查詢、交易寫入)
  • index.ts:tracker 包在 try/catch,壞掉不影響 FB→LLM→Telegram 主流程

Commits

  • ea87ef9 feat: 預測追蹤系統 Phase 1
  • dabeb0f fix: 修正 FinMind API base URL
  • ec63354 refactor: 追蹤邏輯改版 — 5 天完整記錄 + supersede 機制
  • c24df10 fix: 強化錯誤處理與防禦性程式碼
  • beea534 fix: 基準價格改以貼文時間為準,支援歷史回測

Test plan

  • npx tsc --noEmit 編譯通過
  • 手動執行確認 recordPredictions 寫入 SQLite
  • 確認 15:00 排程 updateTracking 正常抓 OHLC
  • 確認 supersede 機制:同股票新預測覆蓋舊預測
  • 確認 tracker 錯誤不影響主流程

cablate and others added 5 commits April 10, 2026 19:01
- db.ts:SQLite 連線(better-sqlite3)、WAL 模式、自動 migration
- stock-map.ts:台股名稱→代碼映射(2230 檔上市+上櫃)
- stock-price.ts:TWSE 即時報價 + FinMind OHLC 歷史資料
- tracker.ts:recordPredictions(LLM 分析後記錄)+ updateTracking(每日判定)
- index.ts:分析後自動記錄預測 + 15:00 追蹤更新排程
- Dockerfile:加 build-essential(native 編譯)+ data/ 目錄
- data/tw-stock-list.json:台股代碼映射表(政府開放資料)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
api.web.finmindtrade.com → api.finmindtrade.com(經實測驗證)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
設計變更:
- 資料記錄與勝敗判定分離,系統只記錄 5 天 OHLC,勝敗查詢時決定
- 移除 realized/expired 狀態,改為 tracking → completed(5天)| superseded
- 同股票新預測進來 → 舊的 superseded + next_prediction_id 串聯
- price_snapshots 新增 day_number(有資料的交易日序號)
- change_pct_extreme 拆為 change_pct_high + change_pct_low(兩個方向都記錄)
- predictions 移除 realized_at/days_to_realize/peak_change_pct,新增 completed_at/next_prediction_id

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- db.ts: 建立 DB 前先 mkdirSync,migrate 成功後才設定全域變數
- stock-price.ts: TWSE/FinMind fetch 加入 AbortSignal.timeout 防止無限等待
- tracker.ts: updateTracking 加入三層 try/catch(DB 開啟、OHLC 查詢、交易寫入)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
getBasePrice 新增 postTimestamp 參數,根據貼文發佈日期查詢
對應交易日收盤價,而非爬取當下的即時價格。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cablate cablate changed the title feat: 預測追蹤系統 Phase 1 feat: 預測追蹤系統(Issue #2) Apr 10, 2026
@cablate cablate merged commit b273b76 into master Apr 10, 2026
3 checks passed
@cablate cablate deleted the feat/prediction-tracker branch April 10, 2026 12:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant