跳轉到

波浪回測系統使用說明

概覽

兩個回測腳本位於 D:\Claude\strategy\scripts\wave\

腳本 用途 資料來源
wave_backtest_v2.py Daily K 線,雙度 Zigzag,無前瞻偏差 台指期日線 Parquet(2019~2026)
wave_backtest_mtf_v2.py 日線設定攻擊波方向 + 盤中(5m/15m/60m)Fib 進場 日線 + 1 分K Parquet

執行方式

前置條件:工作目錄必須切換至 D:\Claude\strategy(腳本內部使用相對路徑 import),且中文輸出需設定編碼。

wave_backtest_v2.py(日線回測)

Set-Location 'D:\Claude\strategy'
$env:PYTHONIOENCODING = 'utf-8'
& 'C:\Users\User\anaconda3\python.exe' -X utf8 scripts/wave/wave_backtest_v2.py --both
參數 說明 預設
--variant A 純結構確認(Zigzag 幾何)
--variant B 結構 + 進場日 K 棒方向確認
--both 同時跑 A 和 B,方便對比
--years N 回測年數(從最新日期往回算) 7

策略邏輯

  1. 大級別 Zigzag(門檻 8%)判斷攻擊波方向(多/空)。
  2. 小級別 Zigzag(門檻 3.5%)捕捉回撤結構。
  3. 當小回撤終點落在攻擊腿的 Fib 0.382~0.786 回撤帶內,確認後下一根 K 棒開盤進場。
  4. 止損設在攻擊腿起點,目標設在 1.0 倍與 1.618 倍延伸位。
  5. 出場觸發:止損 / 止盈 / 大級別方向翻轉(flip)。

Variant B 額外要求:進場日 K 棒與交易方向一致(多單需紅 K 且收盤位置 ≥ 0.5;空單需黑 K 且收盤位置 ≤ 0.5)。


wave_backtest_mtf_v2.py(MTF 回測)

Set-Location 'D:\Claude\strategy'
$env:PYTHONIOENCODING = 'utf-8'
& 'C:\Users\User\anaconda3\python.exe' -X utf8 scripts/wave/wave_backtest_mtf_v2.py --all-tf
參數 說明 預設
--entry-tf 5m 僅跑 5 分鐘進場 TF
--entry-tf 15m 僅跑 15 分鐘進場 TF
--entry-tf 60m 僅跑 60 分鐘進場 TF
--all-tf 同時跑 5m / 15m / 60m

策略邏輯

  • 日線 Zigzag(完整 7 年歷史)提供每日攻擊波方向(bias)。Bias 使用當天之前的已收盤日K,無前瞻。
  • 盤中 TF 只在 bias 方向尋找 Fib 回撤進場機會(variant B:同時需 K 棒確認)。
  • 進場 TF 小級別門檻依時框自動調整:5m=0.6%,15m=1.0%,60m=1.8%。
  • 出場觸發:止損 / 止盈 / 日線 bias 翻轉。

最新回測結果(2026-06-13)

wave_backtest_v2.py — 日線

資料範圍:2019-01-02 → 2026-05-21 | 回測期間:2019-05-21 → 2026-05-21(1703 根日K)

指標 Variant A(純結構) Variant B(結構+K棒)
交易次數 30(多 21 / 空 9) 23(多 17 / 空 6)
勝率 53.3%(16W / 14L) 60.9%(14W / 9L)
多單勝率 57.1% 64.7%
空單勝率 44.4% 50.0%
總損益 +6,784 pts(NT$ +1,356,800) +9,032 pts(NT$ +1,806,400)
買進持有基準 +30,986 pts +30,986 pts
獲利因子 (PF) 1.55 2.19
平均獲利 +1,189.0 pts +1,189.0 pts
平均虧損 -874.3 pts -846.0 pts
平均持有 32.1 天 28.4 天
Sharpe 3.03 5.27
最大回撤 5,833 pts 5,318 pts
出場:止損 / 止盈 / 翻轉 5 / 16 / 9 4 / 15 / 4

警告(Sharpe):A=3.03、B=5.27 均超過 2。回測樣本 30/23 筆,7 年;需排除以下偏差後才能信任:(1) 參數選擇在樣本內(8%/3.5% 門檻是否反覆調過?)、(2) Fib 帶 0.382~0.786 範圍有多少自由度、(3) 日線資料起點 2019 為牛市主升段。建議做 walk-forward 或 Monte Carlo permutation 再評估。


wave_backtest_mtf_v2.py — 盤中 MTF

資料範圍:1 分K 約 2025-06-29 → 2026-06-05(僅約 1 年)

指標 5m 進場 15m 進場 60m 進場
交易次數 47(多 44 / 空 3) 14(多 14 / 空 0) 4(多 4 / 空 0)
勝率 61.7% 64.3% 100.0%
多單勝率 63.6% 64.3% 100.0%
空單勝率 33.3%
總損益 +2,708 pts(NT$ +541,600) +259 pts(NT$ +51,800) +4,370 pts(NT$ +874,000)
買進持有基準 +23,024 pts +22,996 pts +22,996 pts
獲利因子 (PF) 1.39 1.07 inf
平均獲利 +333.9 pts +450.3 pts +1,092.5 pts
平均虧損 -387.4 pts -758.8 pts 0 pts
平均持有 41.9 小時 83.8 小時 353.8 小時
Sharpe 2.29 0.45 29.62
最大回撤 1,153 pts 2,348 pts 0 pts
出場:止損 / 止盈 / 翻轉 16 / 31 / 0 5 / 9 / 0 0 / 4 / 0

警告(60m):4 筆交易、Sharpe 29.62、MDD 0 — 樣本量嚴重不足,無任何統計意義,數字不可用於策略評估。

警告(MTF 樣本期):盤中資料僅涵蓋約 1 年(2025-06 → 2026-06),且恰逢台股多頭期(多空比嚴重失衡:5m 多/空 = 44/3),空單表現無法評估。


策略邏輯摘要

雙度 Zigzag

同一份 OHLCV 計算兩組 Zigzag: - 大級別(日線 8%、盤中依 TF):識別主要攻擊波與回調浪,決定交易方向。 - 小級別(日線 3.5%、盤中依 TF):在攻擊波方向內捕捉次級回撤,找進場時機。

Fib 回撤帶進場

進場條件:當小級別 pivot 確認,且該回撤幅度落在攻擊腿的 0.382~0.786 Fibonacci 回撤區間,下一根 K 棒開盤進場(t+1 執行,無前瞻)。

風險管理

  • 止損:攻擊腿起點(浪的起源點)
  • 止盈一:攻擊腿幅度的 1.0 倍延伸(波浪等幅)
  • 止盈二:1.618 倍延伸(黃金比例延伸)
  • 動態出場:大級別方向翻轉(flip)時,下一根 K 棒開盤強制平倉

注意事項

  • 執行目錄:必須在 D:\Claude\strategy 下執行,腳本內部用 sys.path.insert 插入兩層父目錄,若工作目錄不對會 ImportError。
  • Python 路徑:使用 C:\Users\User\anaconda3\python.exe,不可用 conda activate 後的 python(環境不同)。
  • 中文編碼:PowerShell 下需 $env:PYTHONIOENCODING = 'utf-8' 搭配 -X utf8,否則中文輸出亂碼(注意 PowerShell 變數設定語法:$env:VAR = 'value',不是 :VAR = 'value')。
  • 盤中資料範圍:1 分K 僅涵蓋約 1 年(2025-06 → 2026-06),MTF 回測期短、空單樣本極少,結果僅能評估進場時機品質,不能評估策略長期穩健性。
  • 完整測試套件:381 tests passed(執行 pytest 於策略根目錄確認)。
  • 高 Sharpe 警示:日線 Variant B Sharpe 5.27 遠超過 2,應優先做樣本外(walk-forward)驗證,再考慮實盤。

相關頁面