VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 回測與檢驗

推進最佳化怎麼設定:視窗、切法與參數

決定推進最佳化的幾個設定:每輪留多少樣本外(常見切法是 20%,也是 AlphaPrime 的預設)、視窗怎麼滾、效率怎麼看,以及哪些設定錯誤會讓測試作弊。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. 樣本內和樣本外要怎麼切?
  2. 滾動視窗怎麼往前走?
  3. 推進效率告訴你什麼?
  4. 推進最佳化抓得到什麼、抓不到什麼?
  5. 哪些設定錯誤會毀掉推進測試?
  6. 在 AlphaPrime 裡怎麼設定推進分析?
  7. 常見問題

推進最佳化說穿了就是幾個設定,這頁一個一個講。想知道為什麼一次回測不夠,先看推進分析。這裡只講實作:最佳化在一段歷史上調參數,這組參數原封不動拿到下一段交易,你只看那些沒看過的片段接起來的結果。

整個概念就這樣。其他都是在設定視窗,讓測試沒辦法作弊。

樣本內和樣本外要怎麼切?

樣本內是最佳化可以看的部分,樣本外是它不准看的部分。參數在樣本內那一段挑好、凍結,然後拿緊接在後的樣本外那一段打分數。

常見切法是每一輪把 20% 留作樣本外,這也是 AlphaPrime(Valynox)的出廠設定。測試段越短,重新調參的次數越多,也越接近實際上線時的做法。

要數交易筆數,不是數年數。一個每月只交易兩次的策略,五年大約只給最佳化 120 筆交易去擬合,3 個月的測試段大概只有六筆。六筆跟擲硬幣差不多。

滾動視窗怎麼往前走?

視窗每次剛好往前移一個測試段,所以測試段會頭尾相接,沒有空隙也不重疊。第二輪丟掉最舊的一段,把第一輪測過的那段納入,再測下一段。

每一輪往前移一個測試段:每輪在樣本內調參,在緊接其後的樣本外測試,再往前移一段的長度;只有樣本外片段會接起來評估 每輪往前移一段 滾動視窗,20% 樣本外 IS OOS 只把樣本外接起來 看接起來那條曲線
藍色是樣本內(調參),紫色是樣本外(測試)。

滾動視窗長度固定,會忘掉舊資料。錨定視窗起點固定不動,長度一直增加。

做期貨當沖我偏向滾動。2015 年的 ES 和 2022 年的 ES 根本是兩種動物,錨定視窗會一直讓已經不存在的市場對今天的參數投票。錨定比較適合慢策略,每一筆交易都用得上的那種。

推進效率告訴你什麼?

推進效率(WFE)是策略到了沒看過的資料上,還保留多少樣本內的獲利速度,用百分比表示。接近 100% 是好的,接近零代表最佳化大多在擬合雜訊。

我的看法,很多人不會同意:WFE 是第二個要看的數字,不是第一個。一個測試段碰上一天異常大行情,就能單獨把它推過 100%。我先看賺錢的輪數比例。樣本內那段本身虧錢的輪次也沒有真正的效率可言,虧損除以虧損會變成正數,但沒有任何意義。

推進最佳化抓得到什麼、抓不到什麼?

它抓得到只在某一段時間有效的參數,曲線擬合大多長這樣:一個 14 跳的停損在 2017 到 2019 年完美,之後完全沒用。推進最佳化每輪重新挑停損,逼它在新資料上證明自己。

2026-10-15 我們用 RTX 3060 Ti、出廠設定、保守成本、1 口做了一次保留資料測試。ES 60 分鐘線上,通過基本篩選的 250 支策略有 126 支也通過推進分析。在 2022-10 起保留的資料上,通過推進分析的策略有 91% 賺錢,沒通過的是 53%。台指期 60 分鐘線則是 85% 對 66%。兩段保留期都是上漲市場(ES 約 +116%,台指期約 +29%),所以重點是兩組之間的差距。

它抓不到的是理由選錯的規則。比如你看到 2020 年 RSI 每次碰 30 ES 就反彈,於是照這個做了策略。推進最佳化只會在這條看著答案選出來的規則裡,重新調 RSI 的水位。

跑 300 次推進分析、留下通過的那一次也一樣。你只是把推進分析本身最佳化了。

它也不是最後一關。後面還有用交易清單做的蒙地卡羅回測,以及交易策略穩健性測試裡的檢查。下一關可以用免費的蒙地卡羅模擬器,貼上交易清單就能看回撤可能有多深。

哪些設定錯誤會毀掉推進測試?

  • 視窗太短。樣本內只有 25 筆交易,最佳化能學到的只有雜訊。如果測試段裝不下 10 到 20 筆交易,就拉長它或改用較慢的週期。
  • 拿樣本外重新調參。某個測試段不好看,你就放寬參數範圍重跑,那一段從此就變成樣本內了。我認為這是做推進分析時最常見的自欺方式。
  • 單位搞混。250 個交易日大約一年,250 個日曆日大約八個月。我們做 AlphaPrime 設定頁時吃過這個虧:用百分比輸入的視窗長度被當成 K 棒數,跑回來的是另一個研究。現在每個長度欄位都標明單位。
  • 沒算成本。不含手續費和滑價的結果,最會美化交易頻繁的策略。請看怎麼把交易成本算進去。

在 AlphaPrime 裡怎麼設定推進分析?

在 AlphaPrime 裡,推進分析有自己的 Walk-forward 分頁。出廠設定:

設定出廠值
視窗移動方式滾動(可選錨定)
視窗單位區間百分比(可選交易日或 K 棒數)
每輪樣本外比例(OoS % of Run)20%
輪數(Runs)10
最佳化目標淨利/最大回撤
參數搜尋原值 ±30%,10 步
每個視窗的測試數最多 5,000 次,固定種子,重跑結果相同
視窗結束時的未平倉部位平倉
視窗邊界對齊交易時段

預設會重新調門檻、進場參數、指標週期和停損/停利。移動停損和持有根數出場要自己勾選,因為每一項都會讓參數格倍增。

我最想推薦的是推進矩陣(WFM)。它對每一種每輪樣本外比例(10% 到 30%)與輪數(5 到 30)的組合都跑一次完整推進分析,再找一塊 3×3 的相鄰格子,其中至少 7 格通過。在 20%、10 輪通過,到 15% 或 25% 就死掉?你找到的是一個視窗長度,不是策略。

矩陣每一格都是幾百次回測,這時候 GPU 回測就不只是有了比較好。

第一次用?先維持出廠的 20% 和 10 輪,相信結果之前先跑矩陣。如果差一格就通過和失敗互換,先搞清楚原因再上線。我到現在還沒有好答案的問題是:一個策略在每種設定都通過,但只因為整段測試期都在漲。

常見問題

推進最佳化和推進分析是同一件事嗎?

多數人混著用。嚴格講,最佳化是每個視窗裡的重新調參,推進分析是整個測試,包含評估結果。

每個樣本外視窗要有多少筆交易?

我希望每個測試段至少 10 到 20 筆,樣本內要有好幾倍。再少的話,一筆運氣好的交易就決定這個視窗通不通過。

該用滾動還是錨定?

經常交易的當沖策略用滾動,因為它會丟掉舊的市場行為。交易少的慢策略用錨定。拿不定主意?兩個都跑,看結論會不會變。