前言:12/23 的意外發現
在 12/23 的例行數據同步中,我發現了一個嚴重的問題:中國(CN)與日本(JP)股市的數據完整度大幅下降。經過分析,主因是 GitHub Actions 的出口 IP 請求過於頻繁,觸發了 Yahoo Finance 的流量防護(Rate Limit),導致大量數據抓取失敗。
為了確保「動能矩陣分析」的準確性,我針對數據管線(Data Pipeline)進行了架構優化。
專案程式碼


1. 智慧時效檢查(TTL Cache)
原本的系統是「只要檔案存在就跳過」,這會導致數據無法即時更新。新版本引入了 1 小時過期機制:
- 自動過期判斷:系統會檢查本地 CSV 檔案的最後修改時間。若檔案超過 1 小時,則判定數據已過時,強迫重新下載。
- 兼顧效率與安全:在一小時內重複執行,系統會秒速完成(約 1 分鐘);若超過一小時,則會抓取最新行情。這有效降低了被封鎖 IP 的風險。
2. 數據健康度儀表板(Health Dashboard)
我們不再盲目相信下載結果。現在每個市場下載結束後,都會回傳精確的統計數據:
- 應收標的總數:完整追蹤該交易所的所有掛牌普通股。
- 成功率百分比:直觀顯示今日數據的覆蓋率(例如 99.74%)。
- 異常預警:若成功率低於閥值,系統會在報表中發出提示。
3. 專業級 Email 報表升級
通知模組 notifier.py 現在能產生更專業的 HTML 報表:
- 視覺化面板:報表頂部新增數據統計欄位。
- 圖表內嵌(Inline Graphics):利用 CID 技術將九張報酬分布矩陣圖直接顯示在郵件中,不需額外開啟附件。
- 台北時區修正:所有報告時間均已統一轉換為 台北時間 (UTC+8)。
4. 進階技巧:手動強制刷新(Manual Purge)
雖然系統有 1 小時的智慧檢查,但若在盤中遇到突發事件想要「立刻」看到最新分析,GitHub Actions 的 Caches 管理界面就是你的「手動按鈕」。

操作邏輯:
- 刪除快取:點擊條目右側的「垃圾桶」圖示,清除特定市場的記憶。
- 重新執行:再次啟動 Workflow,系統會因為找不到舊檔案而無視 1 小時規則,直接從交易所抓取最即時的報價。
結語
從 12/23 的失效經驗中,我學會了在自動化系統中「數據品質監控」與「抓取邏輯」同樣重要。現在,這套系統不僅跑得快,而且跑得更有底氣。
這次的系統更新主要源於 12/23 在執行數據同步時的一個重大發現:當天中國股市(CN-SHARE)與日本股市(JP-SHARE)的數據完整度大幅下降,部分標的因為連線頻率過高被伺服器阻斷。
為了確保動能分析矩陣的準確性,我針對數據管線進行了 v2.0 的架構優化。



