一般回測 API 詳細¶
這一頁聚焦在「日常使用的主流程 API」,也就是:
- 切商品
- 切策略
- 切週期
- 切時間
- 編輯參數
- 取回測 state
狀態型全域概念¶
一般回測 API 是有全域狀態的,主要包括:
tickercurrent_strategy_namecurrent_timeframe_minutescurrent_start_timecurrent_end_time
因此很多 API 的語意是「改目前這一組全域狀態」,不是純函數式設計。
1. 可用策略¶
GET /strategy_list¶
用途:
- 取得目前 UI / 一般 API 允許顯示與使用的策略清單
回傳內容:
- 由
strategy_registry.py的 allowlist / blocklist 決定
前端建議:
- 不要自己硬寫策略清單
- 一律先讀這支 API 再渲染下拉選單
2. 目前策略¶
GET /get_strategy¶
用途:
- 讀取目前全域策略
POST /set_strategy¶
Request body:
{
"strategy_name": "BollingerATRStrategyV4"
}
行為:
- 若策略不存在:
400 - 若策略存在但未開放顯示:
400 - 成功後會更新
current_strategy_name
3. 商品與時間設定¶
POST /set_ticker¶
Request body:
{
"new_ticker": "TXFR1"
}
作用:
- 修改目前商品
- 若目前時間範圍有效,會嘗試重跑回測
POST /set_timeframe¶
Request body:
{
"timeframe_minutes": 5
}
注意:
- 現在允許任意合理整數分鐘,不再只限
1/5/15/30/60 - 目前文件中採用的範圍驗證是
1 ~ 10080
POST /set_time_range¶
Request body:
{
"start_time": "2025-01-01 00:00:00",
"end_time": "2025-06-30 23:59:59"
}
行為:
- 更新目前時間範圍
- 若快取中已有相同
(ticker, timeframe, params, strategy)結果,可能直接沿用 - 否則會嘗試觸發回測
4. 參數讀寫¶
GET /get_params¶
用途:
- 取得「目前商品 + 目前週期 + 目前策略」那一組參數
POST /set_params¶
Request body:
{
"init_window": 25,
"std": 2.0,
"k": 3
}
用途:
- 更新「目前商品 + 目前週期 + 目前策略」的參數
注意:
- 這支 API 沒有
strategy_name - 它永遠跟著
current_strategy_name
5. 指定組合參數讀寫¶
如果你不是單純維護目前頁面的全域狀態,而是要直接指定某一組 (ticker, timeframe, strategy),請用以下 API。
GET /get_params_for_combination¶
Query:
tickertimeframe_minutesstrategy_name可選
若 strategy_name 省略:
- 會使用目前全域策略
POST /set_params_for_combination¶
Request body:
{
"ticker": "TXFR1",
"timeframe_minutes": 5,
"strategy_name": "BollingerATRStrategyV3",
"params": {
"init_window": 30,
"std": 2.2
}
}
POST /reset_params_for_combination¶
Query:
tickertimeframe_minutesstrategy_name可選
用途:
- 把指定組合參數重置成預設值
6. 取得回測結果¶
GET /state¶
用途:
- 取得目前回測 state
- 若 cache 中沒有,會直接觸發回測
Query:
backtest_id可選strategy_name可選
兩種使用方式¶
A. 讀目前全域狀態¶
GET /state
B. 單次覆寫策略¶
GET /state?strategy_name=BollingerATRStrategyV4
這種方式:
- 不會永久改掉全域策略
- 只影響這次
/state
回傳內容¶
state 通常包含:
strategyindicatorsbrokerdata_feedanalysis
7. Backfill¶
POST /backfill¶
用途:
- 用「目前全域商品 + 目前全域時間範圍 + 目前全域週期 + 目前全域策略」重跑回測
注意:
- 它不會自己另外指定策略
- 會跟著目前選好的
current_strategy_name
8. 歷史紀錄相關¶
GET /backtest_history¶
取得一般回測的歷史摘要。
GET /backtest_result/{record_id}¶
取得某次回測結果。
注意:
- 舊歷史紀錄若沒有
strategy_name,目前有相容邏輯 - 新紀錄已會帶
strategy_name
9. 建議前端主流程¶
GET /strategy_list
GET /get_strategy
GET /ticker_list
GET /get_timeframe
GET /get_params
使用者修改:
POST /set_strategy
POST /set_ticker
POST /set_timeframe
POST /set_time_range
POST /set_params
最後:
GET /state
10. 常見誤解¶
誤解 A:set_params 可以改任意策略¶
不行。
set_params 改的是「目前全域策略」那一組參數。
誤解 B:切策略後還共用同一份參數¶
現在不是。
目前參數已依:
tickertimeframe_minutesstrategy_name
分開保存。
誤解 C:所有回測子系統都與一般回測一樣完整支援策略維度¶
不是。
目前 multi_params 那條線仍是需要特別注意的例外。