波浪回測系統使用說明¶
概覽¶
兩個回測腳本位於 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 |
策略邏輯:
- 大級別 Zigzag(門檻 8%)判斷攻擊波方向(多/空)。
- 小級別 Zigzag(門檻 3.5%)捕捉回撤結構。
- 當小回撤終點落在攻擊腿的 Fib 0.382~0.786 回撤帶內,確認後下一根 K 棒開盤進場。
- 止損設在攻擊腿起點,目標設在 1.0 倍與 1.618 倍延伸位。
- 出場觸發:止損 / 止盈 / 大級別方向翻轉(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)驗證,再考慮實盤。