跳轉到

一般回測 API 詳細

這一頁聚焦在「日常使用的主流程 API」,也就是:

  • 切商品
  • 切策略
  • 切週期
  • 切時間
  • 編輯參數
  • 取回測 state

狀態型全域概念

一般回測 API 是有全域狀態的,主要包括:

  • ticker
  • current_strategy_name
  • current_timeframe_minutes
  • current_start_time
  • current_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:

  • ticker
  • timeframe_minutes
  • strategy_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:

  • ticker
  • timeframe_minutes
  • strategy_name 可選

用途:

  • 把指定組合參數重置成預設值

6. 取得回測結果

GET /state

用途:

  • 取得目前回測 state
  • 若 cache 中沒有,會直接觸發回測

Query:

  • backtest_id 可選
  • strategy_name 可選

兩種使用方式

A. 讀目前全域狀態

GET /state

B. 單次覆寫策略

GET /state?strategy_name=BollingerATRStrategyV4

這種方式:

  • 不會永久改掉全域策略
  • 只影響這次 /state

回傳內容

state 通常包含:

  • strategy
  • indicators
  • broker
  • data_feed
  • analysis

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:切策略後還共用同一份參數

現在不是。
目前參數已依:

  • ticker
  • timeframe_minutes
  • strategy_name

分開保存。

誤解 C:所有回測子系統都與一般回測一樣完整支援策略維度

不是。
目前 multi_params 那條線仍是需要特別注意的例外。