研究 · 系統

可重現的 Walk-Forward 回測器

為系統化交易研究提供跨語言對等性、市況分段與穩健性壓力測試。

以 Python 與 Rust 實作的研究級回測器。跨語言對等性用來偵測實作差異,研究控制涵蓋 walk-forward 測試、真實成本與穩健性。程式碼以 Apache 2.0 開源。隨附範例無須下載即可執行;150,000 根 K 棒的基準另有可重現的資料配方。

即將推出

SSRN 工作論文

審查中,尚未發布。

GitHub 原始碼

github.com/DaruFinance/quant-research-framework-rs

摘要

完整 walk-forward 執行

Rust 7.20 秒 · Python 112.37 秒

一批 150,000 根 K 棒涵蓋 10 個固定配置與 28 個 walk-forward 視窗。在此單次觀測中 Rust 快 15.61 倍,且緩衝寫入修正前後的 Rust 帳本完全一致。

相同執行工作

4 個引擎 · 各 20,137 筆交易

獨立的固定事件測試,以相同 long-only 訂單比較 QRF Rust、QRF Python、Backtesting.py 與 vectorbt。交易時序與價格吻合,正規化 P&L 差距在 7.28e-12 內。

對等性

差異會成為測試失敗

比較兩者輸出可揭露移植錯誤,但不證明可獲利的 edge,也不能排除兩者共有的錯誤。

這是什麼

多數開源回測器提供執行迴圈,卻把研究紀律留給使用者:如何分開樣本內與樣本外資料、指標是否偷看未來、結果在手續費、滑價與資金費後如何改變。這個框架把控制放入引擎,包含 walk-forward 最佳化、市況分段、真實性設定與五種穩健性情境。交易帳本不變量會阻止策略交易尚未收盤的 K 棒。

同一份規格以 Python 與 Rust 實作,再逐點比較。這層對等性可偵測跨實作差異,不能建立獲利 edge,也不能防止雙方共有的錯誤。下列圖表分開呈現歷史研究輸出與 2026 年 9 月效能量測。

各部分如何組合

資料經由共享指標核心進入策略合約,該合約每根 K 棒回傳一個訊號。執行核心套用成本,walk-forward 調度器再重新最佳化並前向測試每個視窗。最後,對等性框架比較兩個實作的指標帳本。

Fig. 1:系統架構。Python 參考實作與 Rust 移植版本實作相同規格,再由對等性框架比較指標帳本。

內建的 Walk-Forward

每次迭代在滾動的樣本內視窗最佳化、在下一個樣本外子視窗測試,接著向前移動。沒有任何視窗會在用於擬合的觀測值上評分。

Fig. 2:滾動 walk-forward 架構。樣本內視窗(IS,長度 L_IS)會在每次樣本外測試(OOS,長度 V)之前向前移動。

一次執行會產生什麼

本節的歷史範例使用隨附的 SOL/USDT 1h EMA 交叉策略。它產生最佳化的樣本內與樣本外報告、五種穩健性情境與 18 個滾動 walk-forward 視窗。這些圖屬於該範例,並非後面的 150,000 根 K 棒效能測試。

這個範例虧損,反而讓控制更容易檢查:每個輸出顯示弱策略在哪裡失敗,而不是把它變成交易建議。

最佳化策略的樣本外權益曲線,疊加四種穩健性情境,全部低於起始餘額。
Fig. 3:歷史 SOL/USDT 範例。最佳化樣本外權益與四個穩健性疊圖;費用與滑價壓力加深虧損。

在歷史範例中,拼接的 walk-forward 曲線曾上升。程序不保證這個結果:每個樣本內視窗會在下一次樣本外測試前選出新的 lookback,因此仍需要彙總與去膨脹檢查。

上升的滾動 walk-forward 權益曲線,含穩健性疊圖及標示的第一個樣本內邊界。
Fig. 4:歷史 SOL/USDT 範例。滾動 walk-forward 權益含相同穩健性疊圖;每個視窗只在其前面的樣本內資料上擬合。

它輸出的指標

此範例在計入成本後,最佳化的樣本外 Sharpe 為 -2.91。

最佳化樣本內 + 樣本外報告
  IS-opt  (LB 47) | Trades: 118   ROI: $-735.77     PF: 0.61   Sharpe: -2.69   MaxDD: $804.82
 OOS-opt  (LB 47) | Trades: 755   ROI: $-2,077.85   PF: 0.81   Sharpe: -2.91   MaxDD: $2,258.93

穩健性掃描在四種擾動下重新執行最佳化基線。滑價衝擊是最差情況,延後一根 K 棒進場的變化較小;兩者的差距記錄策略無法控制之假設的敏感性。

穩健性掃描(樣本外)
 Baseline OOS | ROI: $-2,077.85   PF: 0.81   Sharpe: -2.91   MaxDD: $2,258.93
     ENT OOS | ROI: $-1,623.33   PF: 0.84   Sharpe: -2.30   MaxDD: $1,809.32   entry drift +1 bar
     FEE OOS | ROI: $-2,832.73   PF: 0.74   Sharpe: -3.99   MaxDD: $2,876.37   fees x2
     SLI OOS | ROI: $-4,303.79   PF: 0.64   Sharpe: -6.11   MaxDD: $4,346.15   slippage shock
 ENT+IND OOS | ROI: $-1,629.68   PF: 0.85   Sharpe: -2.29   MaxDD: $1,875.23   drift + indicator jitter

滾動報告逐一呈現視窗。W01 在樣本外賺取 $899.57,但後續視窗與彙總結果才決定策略是否通過評估。

walk-forward 視窗(18 個中的 W01)
 Running Walk-Forward Windows
  W01 IS  (LB 47) | Trades: 118   ROI: $308.25   PF: 1.14   Sharpe:  0.63   MaxDD: $448.35
 W01 OOS  (LB 47) | Trades:  92   ROI: $899.57   PF: 1.57   Sharpe:  1.95   MaxDD: $243.77
  ...   W02 through W18 each re-optimise on the rolling in-sample window
        and forward-test the next window on data they never saw   ...

三種 Monte Carlo 模式

佇列會明確標出抽樣規則。交易排列會在不放回的情況下重排已完成的報酬。交易重抽樣會放回抽取。K 棒排列會重建 OHLCV 路徑,接著在每條路徑上重新產生訊號,並重新執行固定的策略與參數組合。每個選定模式各自產生結果,K 棒模式不會由一般交易報酬 API 觸發。

K 棒排列成本很高:預設的 500 次執行代表數百次完整回測。隨附 EMA 策略在兩個套件中都使用儲存庫的 Rust worker;自訂 Python 策略則使用明確的 Python callback 路徑。

Consistency 是 Daniel Gatto 的自訂最佳化分數示例,不是標準金融指標。使用者可在程式碼中以自己的分數取代其計算方式與目標指標對照表。

Fig. 5:三種獨立的 Monte Carlo 工作負載。選擇模式即可查看抽樣內容、重跑內容及寫出的產物。

以兩種方式量測效能

第一個面板量測 150,000 根真實 BTCUSDT 現貨 30 分鐘 K 棒的完整 walk-forward 批次:5 個策略家族各有 2 個固定 lookback,跨 28 個樣本外視窗。第二個以固定訂單事件,在 4 個引擎上隔離共同的執行合約。兩者回答不同問題,其倍率不能互換。 基準方法、原始結果與資料配方.

Fig. 6:兩種不同 150,000 根 K 棒工作負載的觀測牆鐘與峰值 RSS。每個引擎在同一 WSL 主機的新程序中執行一次;未重設 OS 與程式庫快取。

跨語言對等性

下方的歷史對等性紀錄涵蓋 3 個配置介面的 210 個確定性核心指標點。它與新的 10 配置基準不同:其完整 walk-forward 指標最大差距為 6.66e-14,而相同執行帳本在時序、方向、價格與正規化數量上吻合。

Fig. 7:歷史對等性紀錄。預設、市況加 walk-forward 與外匯介面的 210 個確定性核心指標點都在 1e-3 內;最大觀測偏差約為 5e-5。

比較方式

其他回測器也有各項能力。這個專案把它們結合,並讓研究控制可強制執行,而非可選慣例。

完整功能清單

PBO 與 DSR 位於清單最前方,因為它們用來判斷最佳化結果是否值得進一步研究。下列標示會區分核心流程、選用報告、獨立 API 與選用套件。

複製並檢查隨附範例

下列命令使用儲存庫隨附的樣本資料,無須 API 金鑰或下載。150,000 根 K 棒效能基準是獨立的,採用基準文件連結的可重現資料配方。

隨附策略用來展示管線,並非宣稱可交易 edge。扣除成本後的樣本外虧損顯示引擎會揭露弱策略,而非掩蓋它。

引用

隨附論文正在 SSRN 審查。發布前,請從儲存庫引用此框架。

另請參閱

閱讀策略內置換檢定,了解此回測器支援的選擇方法,接著查看Research Review,其中有以 walk-forward 與去膨脹感知評估為核心的獨立重現。