開發歷程 / Development Log

CLAUDE.md「Create Step-by-Step Checkpoints」逐步推進,每個 checkpoint 完成後 commit。 每步都記錄:完成內容、驗證方式。

#主題完成內容驗證
1專案骨架CLAUDE.md、README、.gitignore.env.example、docker-compose、後端 Dockerfile/pyproject檔案就緒、commit
2後端核心schemasconfigdbBroker 抽象(ccxt + paper)、registry、markets APIapp 匯入 OK;ccxt 路徑正確(外網被擋→fail-loud 502)
3指標與策略ta 指標包裝 + MA交叉 / RSI 策略11 測試(交叉、超買賣、防呆)
4紙上引擎 + 風控/組合modelsriskportfolio、共用 execution、orders API + DB22 測試(撮合、風控、組合、HTTP)
5AI 層claude_clientsignal_agent(結構化輸出)、/api/ai/signal25 測試(mock 離線映射/夾擠)
6工作流引擎圖 schema、節點、拓撲執行、循環偵測、workflows API30 測試(端對端下單、hold、循環)
7前端Next.js:K線、AI訊號、React Flow 編輯器、組合/訂單、/api/configtsc 乾淨 + production build 成功
8回測策略 registry、逐根回測引擎、/api/backtest、前端面板 + 權益曲線35 測試
9更多策略 + 比較MACD、布林通道、/api/backtest/compare、前端通用參數 + 比較表43 測試
10排程自動執行Schedule 模型、APScheduler 服務、/api/schedules、前端 Save + 排程面板49 測試
11參數最佳化網格搜尋 optimize/api/backtest/optimize、前端 Optimize + 套用最佳53 測試
文件技術文件 + 使用說明書docs/(本目錄)、前端 /manual 圖文並茂頁面tsc + build
12通知notifications/(站內 + webhook)、成交自動通知、/api/notifications、前端 NotificationsPanel58 測試
13券商骨架 + 台美股離線資料元大 / Firstrade live 骨架(fail loud)、CSV 匯入(/api/markets/import)、CsvDataBroker 讓台股/美股離線回測與紙上交易、前端市場選擇 + 匯入面板63 測試
14紙上帳戶持久化PaperAccount/PaperPosition 資料表、trading/paper_store.pyPaperBroker 載入/儲存、/api/orders/paper/reset、前端 Reset 鈕66 測試
15停損/停利risk_exit 工作流節點(依持倉均價與現價判斷停損/停利→sell)、前端節點70 測試

v2 (依 docs/PRD-v2.md,Phase 0:金融正確性與安全地基)

基準幣別 = TWD;本期實作範圍 = Phase 0 (M0.1–M0.7)。Phase 0 全綠前禁止 live

#里程碑完成內容驗證
M0.1交易成本模型trading/costs.py(CostModel/FillCost,依 MarketKind:crypto bps、台股手續費+證交稅僅賣出、美股費率+最低收費、共同滑價);config.py 8 個 COST_* 設定 + .env.example;brokers/paper.pybacktest/engine.py 每筆成交套用成本(Tradegross_pnl/cost,pnl 改為淨額);api/backtest.py/optimize.py 傳入 market。成本預設 ON。81 測試(新增 test_costs.py 11 項:費率/賣出稅/折讓/最低收費/滑價/env 覆寫/fail-loud/紙上淨額恆等式/回測淨額恆等式/高換手淨<毛);既有受影響的零成本斷言已更新為含費精確值
M0.2修正成交時點(消除前視偏差)backtest/engine.py 改用 pending-action 狀態機:訊號以資料 ≤ close[i] 決策、成交於 open[i+1];最後一根訊號不開新倉;權益於 close[i] 標記;docstring 寫明成交慣例。83 測試(新增 2 項:成交價 == open[i+1]close[i]、末根訊號不開倉);既有「獲利回合」測試改用誠實 next-bar 成交下仍獲利的價格序列
M0.3回測指標擴充新增 backtest/metrics.py(純函式:periods_per_year、Sharpe/Sortino/Calmar、profit_factorcagrmax_consecutive_losses 等);BacktestResultcagr/annualized_volatility/sharpe/sortino/calmar/profit_factor/avg_win/avg_loss/exposure_pct/max_consecutive_losses/turnover;run_backtesttimeframe/risk_free_rate,迴圈追蹤曝險與成交名目;configbacktest_risk_free_rate;api/optimize 串接 timeframe93 測試(新增 test_metrics.py 9 項手算對照 Sharpe/Sortino/PF/CAGR/Calmar/PPY + 1 項回測指標齊備)
M0.4Optimizer 樣本外/Walk-forward(消除過擬合)新增 backtest/validation.py walk_forward(anchored/rolling 多折、selection_score);grid_searchsplit 模式(同時算 IS+OOS、揭露落差、依風險調整後 OOS Sharpe 排序);api/backtest + 前端 BacktestPanel 串接並顯示 IS↔OOS 落差。並行 subagent 開發(Wave 1),PR #13。103 測試(新增 test_validation.py 4 + test_optimize.py +6,含 test_overfit_combo_does_not_rank_first)
M0.5部位感知 + 冪等下單 + 修現貨部位上限目標部位語意重寫 _run_order;OrderRecord.client_order_id + sha1(run_id:node_id) 冪等鍵(排程傳每-tick 穩定 run_id);CcxtBroker.get_positions() 由餘額合成現貨部位;RiskGuard 改以現價市值判斷部位上限。並行 subagent 開發(Wave 1),PR #14。100 測試(新增 7:連續 buy ≤1 筆、同 run_id 1 筆、現貨超上限拒絕等)
M0.7存取鎖定 + 金鑰權限api/deps.py require_api_token 全域套用 /api/*(/health 開放,空 token=開放+警告);configapi_token/api_cors_origins(移除 "*");前端帶 bearer;安全文件(幣安關提領/綁 IP/分鑰)。並行 subagent 開發(Wave 1),PR #12。99 測試(新增 test_auth.py 6)
(wrap-up)Wave 1 整合 + CAGR 加固三條並行分支合併後完整套件 116 測試綠;metrics.cagr 改以 log 空間 + 夾擠避免短樣本年化 OverflowError;task-backlog/development-log 集中勾選 M0.4/M0.5/M0.7;.gitignore.claude/116 測試(含 CAGR 短樣本不溢位 1 項)
M0.6投組級風控 + Kill switch新增 marketdata/fx.py(FxConverter,靜態匯率換 TWD、缺率 fail-loud)、trading/runtime_state.py + models.RuntimeFlag(kill switch/halted/day-start equity/當日單數)、trading/risk.py PortfolioGuard(四閘以 TWD 計,任一觸發擋進場、永遠放行出場,單日虧損觸發設 halted)、api/risk.py(status/kill-switch/resume,掛 auth)、execute_order 接線。Wave 2 subagent,PR #16。128 測試(新增 test_risk_portfolio.py 11:每閘拒 buy + halt/kill 放行 sell + FxConverter)
M0.8Phase 0 完成定義新增 docs/go-live-checklist.md(DB 遷移/存取/金鑰/成本/風控+kill switch 實測/OOS/範圍/小額起步);tests/conftest.py 改為 session 起始 drop+create,讓測試 DB 決定性(消除 schema 漂移與當日單數累積)。Phase 0(M0.1–M0.8)全數完成。128 測試(連跑多次穩定)

v2 Phase 1 / 2(並行 Wave 4)

#里程碑完成內容驗證
M1.4開盤行事曆 gating + cron新增 marketdata/calendar.py is_market_open(台股 09:00–13:30 Asia/Taipei、美股 09:30–16:00 ET、皆排除週末/內建假日,crypto 永遠開;dt naive 視為 UTC);Schedule.respect_market_hours/cron;scheduler 收盤跳過(skipped: market closed、非 error、不寫 RunLog)+ cron/interval + max_instances=1/coalesce/misfire_grace_timeWave 4 subagent,PR #18。142 測試(calendar 10 + scheduler 4;含 03:00 台北跳過驗收)
M2.1邏輯/組合節點NodeTypecondition/combine/branch;_first_signal_only_signal(多 Signal fail loud,終結靜默丟棄);combine AND/OR/weighted 合併;前端三節點。Wave 4 subagent,PR #19。138 測試(新增 10:各 combine 模式 + 多 Signal 進 order 報錯 + condition)
M1.3FIFO 損益帳本新增 trading/ledger.py(FifoLedger FIFO 沖銷、逐筆已實現損益、CostModel 計費用/證交稅)、models.Lot/RealizedPnLapi/ledger.py(報表 + 報稅 CSV,掛 auth);接線 execute_order(冪等 skip 後、僅實際成交);賣超已記錄 lots 時消耗現有並發 warning(不擋出場)。Wave 4 subagent,PR #20。135 測試(新增 7:毛額 650 恆等式 + 含費/證交稅 + 部分沖銷 + oversell + 整合 + 冪等不重複)
(整合)Wave 4 合併驗證三條並行分支(M1.3/M1.4/M2.1)合併後完整套件綠、連跑穩定;task-backlog/development-log 集中勾選。159 測試(連跑多次穩定)

Infra / AWS GitHub Actions 部署紀錄

日期主題完成內容驗證 / 狀態
2026-06-19AWS production deploy pipelinePR #24 建立並合併 GitHub Actions CI + production deploy workflow、Terraform bootstrap/prod stacks、ECS Fargate + ECR + ALB + RDS PostgreSQL + Secrets Manager、frontend/backend production Docker path、docs/deployment/aws.md;部署區域從 ap-southeast-2 改為 ap-east-2;bwtseng.com 已註冊但第一版仍用 ALB DNS。本機驗證:backend 190 passed, 1 warning;frontend build pass;Terraform bootstrap/prod validate pass;workflow YAML parse pass;Docker backend/frontend build pass。PR #24 CI pass 後 merge。
2026-06-19AWS bootstrap + first deploy使用 AWS SSO profile AdministratorAccess-334317074103ap-east-2 bootstrap Terraform state bucket、DynamoDB lock table、GitHub OIDC deploy role;設定 GitHub production environment secrets(AWS_DEPLOY_ROLE_ARN,TF_STATE_BUCKET,TF_LOCK_TABLE,AWS_ACCOUNT_ID,API_TOKEN,NEXT_PUBLIC_API_TOKEN);首次 production deploy 成功建立 ALB/ECS/RDS/VPC/ECR/Secrets。修正 Terraform 1.8.5 不認得 ap-east-2 的 S3 backend 問題:PR #25 升級 workflow 到 Terraform 1.15.6 並合併。Deploy run 27822493926 成功;ALB 曾為 ai-trade-flow-prod-alb-1029134024.ap-east-2.elb.amazonaws.com;/health200 OK {"status":"ok"};backend/frontend ECS 皆 running 1/1。
2026-06-19停止 AWS 付費資源依成本控制要求關閉 production runtime:先將 backend/frontend ECS services scale 到 0,再 destroy Terraform prod stack;臨時解除 RDS prevent_destroy 並刪除 RDS;刪除 ALB、NAT Gateway/EIP、ECS services/cluster、VPC/subnets/security groups、CloudWatch log groups、Secrets Manager app secrets;ECR repos 因含 image 改用 AWS CLI delete-repository --force 刪除,再從 Terraform state 移除殘留。驗證:RDS NOT_FOUND;ALB NOT_FOUND;NAT 無 active/deleting;ECR NOT_FOUND;ECS cluster INACTIVE;VPC tag 查詢無結果;Secrets Manager 無 ai-trade-flow-prod/*;prod Terraform state 為空。保留 bootstrap 資源(S3 state bucket、DynamoDB lock table、GitHub OIDC role/provider)以便日後重啟部署。GitHub Deploy Production workflow 已手動 disable,避免 push main 自動重建付費資源。

v2 前端完成(策略室 UI + 文件中心)

後端 spec-based 策略室(api/strategies.pystrategies/spec.pyai/strategy_agent.py)已存在且 190 測試綠; 本波補齊前端缺口,使「策略室 / 交易室功能都齊備、技術文件上網頁」。分支 feature/strategy-room-and-docs-web

#主題完成內容驗證
FE.1策略室前端將原本的 placeholder strategy-lab 改為 DESIGN.md 規格的完整策略室:AI 設計對話(左,cyan)+ 生成策略面板(rendered Python + 可調參數表)+ 策略庫卡片(載入 / 回測 / 刪除)。新增 lib/api.ts 策略庫型別與方法、components/strategy/{DesignChat,GeneratedStrategy,StrategyLibrary,StrategyLab}tsc 乾淨、next build 通過;dogfood 確認設計面板、策略庫列表、單支回測端到端可用(無 console error);修正 win_rate 顯示(後端已是百分比,勿再 ×100)。
FE.2文件中心上網頁新增 /docs:系統功能詳細說明(策略室 / 交易室 / 跨領域能力,AI 標記)+ 9 篇技術文件(架構 / 功能 / 營運)以 markdown 渲染。content/docs/ 提交入庫並由 scripts/sync-docs.mjs(predev/prebuild)自 repo docs/ 同步,因 Docker frontend build context 只含 frontend/react-markdown+remark-gfm,on-brand components map。next build/docs 與 9 篇 /docs/[slug] 預渲染為靜態 HTML(SSG,適配 standalone);dogfood hub + 內文 on-brand 渲染。
FE.3策略室 → 交易室 接通交易室回測面板的策略下拉新增「策略庫」optgroup,可直接回測策略室設計的已存策略(走 /api/strategies/{id}/backtest,預設參數);Optimize 維持內建策略限定。dogfood:選策略庫策略 → Run → 權益曲線 + 指標正確顯示。

UX 大改版(PR #37)

前端體驗全面翻修:即時線圖、回測重做、導覽中文化、策略室→回測→工作流串接。分支 feat/ux-overhaul-charts-backtest

#主題完成內容驗證
UX.1介面體驗翻修共用 PriceChart(輪詢即時/增量/十字準星/買賣點/均線疊圖)+ 語言層(lib/labels.ts+<Term>);市場頁即時看盤(ticker 列、AI 訊號疊圖、台股離線標示、URL 持久化);回測重做(操作引導兩段式、日期區間回測、K 線疊買賣點、指標分級+解讀、統一結果分頁);導覽中英副標+策略庫入樹+首頁三步引導+全站中文化;策略室→回測→工作流串接。後端新增 get_ohlcv_range(ccxt 分頁/CSV 篩選,fail-loud)+ 4+1 回測端點與 markets OHLCV 的 start/end後端 238 tests 綠;前端 tsc+next build 綠;端到端視覺驗證(Playwright);多階段 code review 抓到並修掉跨檔 token bug、overlay runtime crash、以及策略庫策略日期區間被靜默忽略的 fail-loud bug。

設計原則落實(對照 CLAUDE.md)

  • Simplicity First:先做 crypto+紙上一條完整切片,再水平擴充。
  • Surgical Changes:重構策略 registry 時只動相關處。
  • Fail Loud:缺資料/外部錯誤/風控違規一律明確回報。
  • Business-Logic Tests:53 項皆驗證真實行為。
  • Checkpoints:每步 commit 並記錄(本表)。
  • Match Codebase Style:後端 snake_case、前端慣用 React/TS。

尚未實作(規劃中)

  • 真實券商:台股 元大證券、美股 元大複委託 / Firstrade(需金鑰 + 外網;Firstrade 無官方 API)。
  • 使用者驗證 / 多使用者、雲端部署強化、訊號通知。