系統架構¶
本專案目前是一個單一後端入口 + 多模組回測核心 + 外部資料 adapter + DB repository 的結構。
架構總覽¶
flowchart LR
UI[前端 / 文件 / 儀表板] --> API[FastAPI app.py]
API --> Quote[Quote Adapters]
API --> PM[ParameterManager]
API --> DB[Repository / SQLAlchemy]
API --> Core[Backtest Core]
Core --> Strategy[Strategies]
Core --> Broker[FuturesBroker]
Core --> Analysis[Analytics]
主要模組¶
app.py¶
這是目前的後端 composition root,也就是:
- API 路由入口
- 全域狀態容器
- quote adapter 注入點
- 回測 orchestration 中心
- 最佳化任務與訓練功能的整合入口
換句話說,app.py 不只是 router,它同時承擔了:
- application service
- runtime state
- 回測流程協調器
src/strategy/¶
策略實作與策略註冊中心:
base_strategy.pystrategy_registry.pybollinger_atr_strategy.pybollinger_atr_strategy_v2.pybollinger_atr_strategy_v3.pybollinger_atr_strategy_v4.pybollinger_atr_strategy_opt.pyma_cross_strategy.py
這一層決定:
- 使用哪個策略類別
- 該策略需要什麼參數
- 每根 K 棒來時如何更新訊號
src/trade/¶
回測核心:
tradebot.pybroker.py
其中:
BacktestBot管理回測主迴圈FuturesBroker管理持倉、保證金、成交與損益
src/type.py¶
底層型別:
OHLCVDataFeedIndicatorStore
它定義了策略和回測引擎共同依賴的資料結構。
src/quote/¶
外部資料來源 adapter:
shioaji_quote.pydatabento_quote.py
這些 adapter 的責任是把外部 API 的資料轉成內部可接受的 DataFrame 結構,再交給資料流工具轉為 DataFeed。
src/datafeed/¶
utils.py 是 adapter 與回測核心的橋樑:
aggregate_dataframe()data_feed_from_dataframe()data_feed_from_dataframe_with_timeframe()
src/api/db/¶
資料庫層:
config.py:決定 SQLite / PostgreSQLengine.py:建立 SQLAlchemy engine / sessionorm_models.py:資料表結構repository.py:DB access 封裝
src/analytics/¶
分析層:
backtest_analysis.pyuniversal_analyzer.py
前者偏 API / 最佳化共用的輕量統計,後者偏離線分析與報表。
目前的資料持久化邊界¶
記憶體¶
CacheManager.cache- 一般回測 state cache
- 多區段回測 cache
JSON 檔¶
backtest_history.json
DB¶
strategy_paramstraining_param_rangestrading_notesbacktest_segmentsoptimization_tasksoptimization_saved_results
重要架構觀察¶
1. app.py 偏胖¶
目前很多邏輯都還在 app.py:
- 全域狀態
- API
- 回測 orchestration
- 最佳化執行
- 訓練 / 備註 / 歷史紀錄
如果未來要重構,第一步通常會是把這些流程拆成 service layer。
2. 一般回測與舊回測腳本共存¶
目前專案內有兩條路徑:
- 新主流程:
app.py + strategy_registry + param_manager - 舊流程:
simple_backtest.py + multi_period_backtest.py
因此文件與重構時要分清楚:
- 哪些 API 已 strategy-aware
- 哪些舊腳本仍是歷史包袱
3. 文件要以實作為準¶
專案內已有部分舊 Markdown 文件,但其中有一些內容已與現況不同。
這份文件站以目前程式碼為主要規格來源。