重構指南¶
這一頁不是教你怎麼「改幾個檔案」,而是站在架構層面說:
- 如果今天要重做這個系統
- 哪些概念一定要保留
- 哪些邊界應該先畫清楚
- 哪些是目前的技術債
先講結論¶
如果要重構這個專案,最好的思路不是從 API 開始,而是從核心模型開始。
建議依序拆解:
- 市場資料模型
- 回測執行模型
- 策略介面
- 參數系統
- 分析系統
- 任務系統
- API / UI
你真正要保留的核心概念¶
1. 資料核心¶
必須保留:
OHLCVDataFeedIndicatorStore
這三者是策略與回測引擎的共同語言。
2. 執行核心¶
必須保留:
BacktestBotBrokerStrategy
可簡化成:
DataFeed -> Strategy -> Orders -> Broker -> State
3. 結果核心¶
必須保留:
- state
- order history
- analysis metrics
因為:
- 一般回測
- 最佳化
- 訓練
- 報表
其實都圍繞這些結果資料。
現在的技術債在哪裡¶
1. app.py 太胖¶
它現在同時做:
- API
- 全域狀態
- 回測 orchestration
- task 管理
- 訓練管理
- 備註管理
重構時應優先拆成:
services/backtest_service.pyservices/optimization_service.pyservices/training_service.pyservices/notes_service.py
2. 全域狀態過多¶
目前有:
tickercurrent_strategy_namecurrent_timeframe_minutescurrent_start_timecurrent_end_time
這對單人操作很方便,但對:
- 測試
- 多使用者
- 多 session
- 正式部署
都不太友善。
重構時建議:
- 把這些改成 request-scoped input
- 或做成可持久化的 user/session state
3. 舊路徑與新路徑共存¶
目前存在:
- 新主流程:
app.py + strategy_registry + param_manager - 舊流程:
simple_backtest.py + multi_period_backtest.py
若要重構,應先決定:
- 哪條是正式主路
- 哪條是待淘汰 / 待重寫
4. migration 不正式¶
正式重構後,建議:
- 導入 Alembic
- 所有 schema 變更版本化
如果今天重做,我建議的目錄結構¶
src/
domain/
market_data.py
strategy.py
broker.py
backtest.py
analysis.py
infrastructure/
quote/
shioaji_provider.py
databento_provider.py
db/
models.py
repository.py
migrations/
application/
backtest_service.py
optimization_service.py
training_service.py
notes_service.py
interfaces/
api/
routes/
schemas/
Quote Adapter 應該先正式化¶
目前 quote adapter 是隱性規格。
重構時建議第一批抽象出:
QuoteProviderget_data(ticker, start_time, end_time) -> pd.DataFrame
並明確規範 DataFrame 欄位。
策略系統應該拆三層¶
以 Bollinger 系列來說,重構時建議拆成:
1. 指標層¶
- 布林帶計算
- TEMA
- slope
- ATR
2. 訊號狀態機層¶
- 做多 / 做空型態形成
- 進場條件
- 觀望 / squeeze
- 截斷與重置
3. 交易決策層¶
- 開倉
- 平倉
- 反手
- 止損
- 中線停利 / 止損
這樣會比把所有邏輯都塞在單一策略 class 中更容易測試。
參數系統的重構原則¶
現在已經做對的一件事是:
- 參數依
(ticker, timeframe, strategy_name)隔離
未來重構時,應保留這個原則。
可以再加強的地方是:
- 參數 schema 與實際策略欄位自動對齊
- 每個策略獨立 schema
- 參數版本化
任務系統的重構原則¶
最佳化任務目前很實用,但仍是同步執行 API。
若要正式化,建議:
- API 只負責建立任務
- 真正執行改成 background worker
- 進度與結果查詢保留
也就是拆成:
task createtask enqueuetask executetask query
什麼是這個系統最值得保留的¶
如果你最後真的整套重做,最值得保留的是:
- 明確的策略註冊中心
DataFeed/OHLCV的資料核心- 參數依策略隔離
- 最佳化結果查詢與分頁
- 前端可用的策略清單控制
什麼是最值得優先重寫的¶
如果只能先重寫一部分,我會排序:
app.pyservice 化- quote adapter 正式 interface 化
multi_params與主流程統一策略維度- migration 正式化
- 啟動副作用移除
最後建議¶
若你的目標是「任何人看完文件都能重做出來」,那最重要的不是一開始就把每支 API 記滿,而是把以下三件事講清楚:
- 資料怎麼流
- 狀態怎麼變
- 模組邊界在哪裡
這份文件站目前已經把這三件事作為主軸。
之後若要再往更完整的規格文件前進,最值得補的是:
- 策略逐條邏輯規格
- API request/response 全量範例
- DB schema 與 migration 版本史