7. 回測、實盤與優化:統一入口與不同模式

7.1. 1. 统一入口

用戶通過 **qt.run(op, mode=…, kwargs) 觸發運行。內部會:

  • 將 kwargs 與全局配置合併爲 config(ConfigDict)。

  • 調用 op.run(config, datasource, logger),並傳入 qteasy 的默認 datasource 與 logger。

mode 決定走哪條分支:

  • mode=0:實盤模式,進入 Trader 流程(定時觸發、獲取實時數據、生成信號、下單並記錄)。

  • mode=1:回測模式,構建 Backtester,按 group_timing_table 逐步運行 Operator,模擬成交併輸出資金曲線與績效。

  • mode=2:優化模式,Optimizer 在參數空間搜索,每組參數執行一次回測,按目標函數彙總結果。

  • mode=3/4:追蹤、預測等模式,參見文檔與 API。

因此,同一 Operator 在不同 mode 下複用同一套“按時間步運行策略、混合信號”的機制,差異僅在數據來源與結果處理。

7.2. 2. 配置(config)的作用

config 包含資產池、回測區間、成本參數、資金計劃等,回測/實盤/優化共用同一套配置結構。例如:

  • 資產池、資產類型、回測起止日;

  • 交易成本(費率、最低費用等);

  • 資金投入計劃(invest_cash_amounts 等);

  • 實盤相關(賬戶、Broker 類型等,mode=0 時使用)。

config 由 **qt.run(…, kwargs) 與全局 QT_CONFIG 合併得到,並傳入 op.run(config, …),由 Backtester、Trader、Optimizer 分別讀取所需字段。

7.3. 3. 回测模式(mode=1)

  1. 準備歷史數據:根據 config 中的資產池、回測區間與 Operator 內所有策略的 data_types、window_length,調用 check_and_prepare_backtest_data 等,從 DataSource 拉取並組裝所需歷史數據(含足夠的歷史窗口以覆蓋區間起點)。

  2. 構建 Backtester:傳入 Operator、資產列表、資金計劃、交易價格數據、成本參數等,生成 Backtester 實例。

  3. 分支選擇:若 op.check_dynamic_data() 爲 False(策略不依賴過程數據),則走靜態分支:一次性生成全部信號,再用 Numba 向量化回測;若爲 True(策略使用 get_data('proc.xxx') 或舊式動態數據類型),則走動態分支:按步生成信號、按步模擬成交併更新過程數據,供策略下一步使用。詳見 過程數據(proc.*)與動態回測

  4. 按步運行:按 group_timing_table 的每個時間步,調用 op.run_strategies(steps)(或等價接口),得到每一步的 (signal_type, signal)。

  5. 解析與模擬成交:將信號按 signal_type(PT/PS/VS)解析爲買賣意圖,再通過 backtest_step 等邏輯更新持倉、資金與交割隊列,得到每日資金曲線與交易記錄。

  6. 評價與輸出:對資金曲線與交易記錄做績效評價(如夏普、回撤等),返回給用戶並可選生成報告與圖表。

7.4. 4. 实盘模式(mode=0)

  1. Trader 持有 Operator 與 config,按 run_freqrun_timing 與交易日曆在交易日內的指定時刻觸發任務。

  2. 獲取當前時刻數據:根據策略聲明從 DataSource(或實時接口)獲取當前步所需的數據窗口。

  3. 運行 Operator:在該步調用 Operator 生成信號(與回測相同的 run_strategy 流程)。

  4. 解析並下單:將信號解析爲訂單,交給 Broker 執行(模擬或真實券商接口),並記錄成交與持倉。

7.5. 5. 优化模式(mode=2)

  1. Optimizer 根據策略的 Parameter 定義確定參數空間(如網格、隨機採樣、遺傳算法等)。

  2. 對每組參數:通過 set_parameter 等將參數寫入 Operator,然後執行一次回測(即 mode=1 的流程)。

  3. 根據回測結果計算目標函數(如夏普比、收益回撤比等),彙總所有參數組合的結果。

  4. 輸出較優參數組合及對應回測結果,供用戶選擇。

7.6. 6. 小结

回測、實盤、優化共享“Operator + 按時間步運行”的機制:都是先準備數據與 config,再按 group_timing_table 逐步調用策略並混合信號。差異僅在於:回測使用歷史數據與 Backtester 模擬成交;實盤使用實時數據與 Trader/Broker 執行訂單;優化則多次回測並比較目標函數。更多參數與用法見《使用教程》《回測並評價交易策略》《優化交易策略》與 API 參考。