Jun.
AI BLOG
2026-09-17AI 日誌

不再輪流換策略,讓五套做法同時上場比賽的AI炒股實驗

不再輪流換策略,讓五套做法同時上場比賽的AI炒股實驗 封面
封面由跨專案自動彙整流程生成。

這幾天主要在整理一個讓AI用虛擬資金操作股票的實驗,把原本輪流切換策略的做法,改成讓好幾套做法同時上場公平比賽,過程中也抓出兩個會讓自動化系統誤判資料的小問題。

讓AI用假錢天天自動下單,才看得出它是不是真的比較會賺

這個專案是一套讓AI每天自己判斷要不要買賣股票的系統,但用的是虛擬資金,不會真的花到錢,目的是想知道AI做的判斷,到底有沒有比死板的固定規則更好。系統會在每個工作天的傍晚自動跑一次,AI看過當天的股價資料後,決定要買什麼、賣什麼,全部記在一本模擬的帳本裡。

因為是每天自動跑、不需要人盯著,中間也順手加了一塊「任務看板」,把目前做到哪、驗證過什麼、還沒做完的事都寫下來,這樣換一個新的工作階段接手時,不用重新看過所有對話紀錄。

note技術細節:自動化排程與任務追蹤
  • automation/run_daily_agent.ps1 以 --model claude-sonnet-5 固定模型,避免跟著全域預設模型漂移
  • 以 Windows 排程 QuantTrading-DailyRun 在平日 18:30 執行,headless 模式搭配工具白名單,跑完自動 commit paper/ 但不 push
  • docs/task.md 記錄任務狀態、驗證證據、部署步驟與決策,供跨工作階段接續

系統曾經用昨天下午的價格假裝是今天收盤,沒人發現

自動化系統每天要抓當天的股價資料才能做判斷,但中間發現一個問題:系統會把稍早抓到的資料快取起來重複使用,結果有時候用的其實是同一天稍早、還沒收盤前的舊資料,等於拿一個還沒結束的價格當成當天的最終結果來判斷。這種錯不會跳出警告,系統照樣正常運作,只是判斷的依據悄悄地錯了。

另外還有一個日誌變成亂碼看不懂的問題,原因是寫紀錄的方式跟系統的文字編碼對不上,兩種不同的文字格式混在一起,打開紀錄檔完全看不懂內容,等於出了狀況也查不出原因。

自動化系統最怕的,是它出錯的時候看起來一切正常。任何靠時間點觸發的資料抓取,都該多問一句:這個資料是不是真的更新到我以為的那個時間點了。

note技術細節:快取時效與日誌編碼
  • a1e5eaf:快取只有在晚於平日 17:40 的 FinMind 收盤資料發布時間點之後抓取,才視為有效,避免沿用同日稍早的舊快取
  • 992f67a:PowerShell 5.1 的輸出重導向會寫成 UTF-16,與其他部分混用編碼,導致自動化 git log 亂碼,已改為統一寫 UTF-8

不再輪流換策略,讓五套做法同時上場才公平

一開始這套系統是用一個策略在跑,覺得哪個版本比較好就換上去,但這樣沒辦法真正比較誰好誰壞,因為同一個時間點只有一個在跑,不同版本經歷的市場狀況也不一樣。後來明確了實驗真正要驗證的問題:AI的判斷方式,到底能不能贏過單純照規則走的做法。

決定是讓五套做法同時上場,各自拿到相同的虛擬本金,同時開始、同時記帳,彼此獨立不互相干擾,這樣才能公平比較。每一套做法還額外配一個「只照固定規則走」的對照組,用來當作最基本的比較基準。研究範圍也收斂到台股、美股跟期貨,原本提過的日股、韓股只是舉例,不會真的去研究。

flowchart LR
    a[以前:策略輪流上場,同一時間只有一個在跑] --> b[現在:五套做法同時開戶,各自用虛擬資金公平較量]

想公平比較兩種做法誰比較好,最容易被忽略的前提是「同時間、同條件」,只要有一方是輪流上場、一方是持續在跑,比較出來的結果就沒有意義。

note技術細節:五路資金分倉與成本模型
  • 帳本拆成 core、v1、v2、v3、v4 五個資金池,各 NT$100k,TWD/USD 現金分開記
  • 原本的 ai sleeve 透過 run_daily.py migrate 遷移成 v1,不改寫歷史紀錄,報酬率採時間加權計算
  • 美股交易成本比照凱基複委託計算,含手續費、SEC/FINRA 規費與 30% 股息扣繳
  • 916933c:每日結果額外寫一份對外摘要 paper/public/<日期>.json 供作品集網站使用,內部筆記不外流

接下來

  • 五套策略同場競賽的實際成效,尚未驗證,需要累積更多天的紀錄才看得出差異
  • 快取時效與日誌編碼修好後是否還有其他資料誤判的死角,尚未驗證

本篇由跨專案自動彙整產生,素材為 2026-09-16 之後 2 個專案的提交紀錄與 0 則知識投遞。

回到 AI BLOG