穩健度測試:先試著打破策略,再決定要不要信它
穩健度測試就是故意去動真正的策略不該在意的東西,留下撐得住的。只過一項測試證明不了什麼:同一條 NQ 突破規則九組鄰近參數全部賺錢,17 個市場卻有 12 個虧損,所以決定要綜合多項測試,及格線事先定好。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
什麼是交易策略的穩健度測試?
穩健度測試就是故意去動那些真正的策略不該在意的東西(鄰近參數、成本、市場、交易時段、精確價格),留下動了還撐得住的策略。只過一項測試證明不了什麼:同一條 NQ 突破規則,九組鄰近參數全部賺錢,換到 17 個市場卻有 12 個虧損。
橋樑檢測員不會開一台車過橋就說這座橋安全。他會加上比平常車流更重的載重,從不同方向施力,看哪裡會變形。單次回測就是那一台車,穩健度測試就是多加的載重:動參數、拉高成本、換市場、砍掉某些時段、換一份資料,策略還站得住才留下來。目標不是找回測最漂亮的策略,是找你打不倒的策略。
這件事比二十年前更要緊,原因在搜尋。軟體替你試幾千種規則組合時,總有某個組合碰巧貼合某段歷史的怪癖,而回測最漂亮的就是它。大規模搜尋本來就會產出這種怪癖,不是例外。回測過度最佳化研究解釋了為什麼一大堆回測裡最好的那個通常被高估。穩健度測試是實務上的對策:它不問最好的回測有多好,只問把造出這個結果的條件打亂之後,會發生什麼事。
整篇文章用同一個實測例子貫穿。規則是 NQ 60 分鐘 K 棒的做多突破:收盤價向上突破前 N 根 K 棒的最高價就進場,收盤價跌破 M 根簡單移動平均線就出場,N = 20、M = 50。資料期間 2018-09 至 2026-10,固定一口,單邊手續費 $14.75(含 2.5 個額外跳動點),再加 1 個跳動點的滑價。兩組結果都來自 AlphaPrime(Valynox)的代管回測,2026-10-31 執行,完整表格在後面各節。
- 鄰近參數:以 N = 20 / M = 50 為中心的 3×3 網格,九格的淨損益全部是正的。
- 其他市場:同一條規則、同一段期間,17 個期貨市場裡 5 個收在零以上,其餘 12 個收在零以下。
同一條規則、同樣的日期、同樣的成本模型。一項測試說「很穩」,下一項卻說「只是對著一張圖配出來的」。交易者如果看完參數網格就收手,等於相信了一條下一項測試就拆穿的規則。所以才要跑一整組測試,每一項的及格線事先寫好,然後合起來看。
怎麼測試交易策略穩不穩健?
每一項穩健度測試都是衝著一種假訊號去的,所以要跑一整組,哪一項都取代不了另一項。假訊號是指回測結果不是來自價格裡可重複的型態,而是別的東西:過度最佳化的參數、薄到付不起交易成本的優勢、一張剛好好看的圖、日曆上的巧合、五個特別好的交易日、某家資料商特有的精確價格、只有回頭看才有效的選擇流程,或是碰巧很順的交易順序。下表列出每項測試動了什麼、抓哪種假訊號、怎樣算過。
| 測試 | 動了什麼 | 抓哪種假訊號 | 怎樣算過 |
|---|---|---|---|
| 微調參數 | 每個數值輸入都往上往下移,所有組合重跑 | 過度最佳化的尖峰:一個甜蜜點,旁邊都賠錢 | 多數鄰近參數仍然賺錢;選定的數值落在一大片區域內 |
| 提高成本 | 每趟來回加手續費或滑價,逐級加碼 | 優勢比買賣價差還薄 | 成本拉到實際來回成本的數倍,淨損益仍為正 |
| 換市場 | 同一條規則換到相關商品,各用各的成本 | 只貼合一張圖的規則 | 多數相關市場仍然賺錢;最差的相關市場也沒有慘賠 |
| 切時段與期間 | 依星期、小時、年度、日盤夜盤拆開交易 | 日曆上的巧合 | 沒有哪一塊獨自撐起全部獲利 |
| 拿掉最大獲利單 | 刪掉最大的五筆獲利交易 | 五個好交易日 | 權益曲線仍然上升 |
| 加資料雜訊 | 同一條規則跑第二家資料商的 K 棒 | 依賴精確價格 | 兩份交易明細大致相同 |
| 推進分析 | 在一段視窗上調參數,原封不動用到下一段,重複下去 | 選擇流程往前走就失效 | 串起來的樣本外曲線,還保有樣本內結果相當的比例 |
| 交易的蒙地卡羅 | 把交易順序重新洗牌或重抽樣很多次 | 運氣好的交易順序 | 在選定信賴水準下的回撤,帳戶扛得住 |
其中兩項測的是流程,不是規則本身。推進分析是在一段資料視窗上調參數,原封不動用到下一段視窗,再往前推重複做,專抓那種要看得到答案才有效的選參數方式。蒙地卡羅回測是把策略自己的交易重新洗牌或重抽樣很多次,看同一批交易可能走出多大範圍的權益曲線與回撤,專抓靠幸運順序走出來的平滑曲線。這兩項都不動市場、成本或資料,所以排在清單最後,不是最前面。
每項測試都要有夠多的交易筆數才有意義。沒有精確門檻,但低於大約一百筆,測到的就開始是雜訊而不是策略:只有四十筆時,拿掉最好的五筆就少了八分之一的樣本,按星期切開每天只剩八筆。十年只出六十筆交易的規則還不到做穩健度測試的時候,它需要更長的歷史,或更短的 K 棒週期。
什麼是參數高原?
參數高原是一片參數區域,選定數值的鄰近值都保有大部分結果;尖峰則是一個最好的格子被虧損的格子包圍。高原才是真實型態的樣子,因為價格裡的型態不會在回看 20 根時打開、18 根時關掉。尖峰是過度最佳化的樣子,搜尋找到的只是剛好對上某段歷史雜訊的那個數值。
想像一座山丘和一根旗竿。站在山丘上,往哪走一步高度都只變一點點;站在旗竿頂上,走一步就摔下去。參數網格告訴你腳下是哪一種。實務上的結論是:參數要挑山丘中間,不要挑最高點。最高點還是有一部分運氣,而中間是市場稍微漂移時損失最小的位置。
下面的實測網格,就是真實回測裡高原的樣子。規則是第一節的 NQ 60 分鐘突破。N 是突破回看的 K 棒數,取 10、20、40;M 是出場均線的長度,取 20、50、100。每個組合都用相同的手續費加 1 個跳動點的滑價,跑同一批 K 棒,固定一口,只做多。
來源:AlphaPrime 代管回測(ap_backtest 連接器),2026-10-31 執行
| 突破 K 棒數 N / 出場均線 M | 淨損益 | 獲利因子 | 最大回撤 | 交易筆數 |
|---|---|---|---|---|
| 10 / 20 | $48,670 | 1.032 | $87,896 | 1,440 |
| 10 / 50 | $239,010 | 1.197 | $87,157 | 950 |
| 10 / 100 | $497,678 | 1.606 | $68,590 | 625 |
| 20 / 20 | $44,300 | 1.042 | $91,663 | 990 |
| 20 / 50 | $137,145 | 1.135 | $82,636 | 709 |
| 20 / 100 | $376,032 | 1.517 | $56,452 | 513 |
| 40 / 20 | $116,712 | 1.171 | $63,560 | 714 |
| 40 / 50 | $234,981 | 1.345 | $54,995 | 461 |
| 40 / 100 | $325,720 | 1.555 | $51,062 | 369 |

這張網格依序看三件事:
- 賺錢的格子佔多少。九格全部為正。這就是這項測試的及格標準,也是它真正在意的唯一數字。選定的 20 / 50 不是最好的格子,以淨損益排序,它在九格的中間偏下,這沒有問題。這項測試問的是周圍健不健康,不是你有沒有挑到最高點。
- 形狀。每一列都是出場均線越長,賺得越多、交易越少:20 / 20 用 990 筆交易賺 $44,300,20 / 100 用 513 筆賺 $376,032。這是斜坡,不是尖峰。斜坡告訴你型態往哪個方向走,也會誘使你去追。不要因為 100 是這張網格的頂點就搬過去;網格停在 100,就看不出 150 會怎樣,面對斜坡該做的是把網格放大,不是跳到邊緣。
- 最弱的格子。10 / 20 與 20 / 20 的獲利因子是 1.032 與 1.042。獲利因子是總獲利除以總虧損,所以這兩格賺的只比賠的多一點點。它們過了賺賠這關,但也告訴你,短出場均線正是這條規則單薄的地方。
這片高原要算數,有一個條件:它已經計入手續費加 1 個跳動點的滑價。零成本跑出來的網格,幾乎任何交易頻繁的規則都會有一片又寬又舒服的高原,因為那些小而頻繁的交易看起來都不用錢;一計入實際成交成本,高原就縮小甚至消失。AlphaPrime 的回測每次評估都計入手續費與滑價,並以下一根 K 棒成交,所以它跑出來的網格已經扣掉成本;不管哪個工具,只要網格是零成本跑的,相信它的高原之前都要先過下一節的成本壓力測試。
策略該撐得住多少額外滑價?
策略在獲利歸零前能吃下的額外成本,就等於它的平均每筆損益,所以成本壓力測試問的其實是:這條規則有幾個跳動點的安全邊際。滑價是回測假設的價格和真實委託成交價之間的差距,也是多數回測最容易低估的成本,因為它看委託類型、交易時段,還有你下單那天的市場氣氛。重點不是你的滑價估得準不準,而是估錯多少策略才會失效。
算法只要一條公式:損益兩平的每趟額外成本 = 淨損益 ÷ 交易筆數。左邊是讓淨損益歸零的每筆額外費用。淨損益是已扣掉既有成本的回測結果,交易筆數是賺到這筆錢所做的來回次數。算出來就是平均每筆損益:每筆交易都要多付這筆成本,所以能把獲利吃光的額外成本,就等於每筆賺的錢。
來源:AlphaPrime 代管回測(ap_backtest 連接器),2026-10-31 執行
| 每次來回的額外成本 | 扣除後的淨損益 |
|---|---|
| $0 | $137,145 |
| $50 | $101,695 |
| $100 | $66,245 |
| $150 | $30,795 |
| $200 | −$4,656 |
這條規則在 709 筆交易中平均每筆 $193,因此這就是獲利消失前它能承受的額外成本。
表格就是你該預期的那條直線。每多 $50 就少掉同樣多的獲利,因為 709 筆交易每筆都多付 $50;直線在 $150 與 $200 之間穿過零,正好落在平均每筆 $193 算出來的位置。所以損益兩平點根本不用跑壓力表也知道,只要看平均每筆損益;回測中的交易成本一文教你怎麼把這個數字拿去和實際付出的來回成本比。
這條規則過得了成本壓力,靠的是平均每筆換算成跳動點夠大。依 CME 的契約規格,NQ 一個跳動點是 $5.00,所以每趟多 $200 就是四十個跳動點,等於單邊多二十個跳動點的滑價,遠超過流動性好的 NQ 市價單平常會遇到的。對照一條平均每筆只有三、四個跳動點的 ES 日內規則:滑價從單邊一個跳動點變成兩個,每趟就多兩個跳動點,光這一步就吃掉一半以上的平均每筆損益。這種規則會死在這關,死在測試裡總比死在帳戶裡好。交易所可能調整跳動點與契約條款,你測哪個市場,就去查那個市場的交易所契約頁面。
及格線要在看結果之前定好,用實際來回成本的倍數來定,不要用固定金額,這樣換市場也適用。常見寫法是「來回成本加倍還要賺錢」,或「實際估計之外,單邊再多一個跳動點還要賺錢」。以 NQ 這條規則來說,這次回測的實際成本是單邊手續費 $14.75(含 2.5 個額外跳動點),再加 1 個跳動點的滑價,規則撐得住的遠超過兩倍,所以過關。這項測試不會告訴你實際估計準不準,它告訴你估錯了還有多少空間。
策略應該在其他市場也有效嗎?
規則應該在相關市場上還是賺錢,不是在隨便哪個市場都賺;實測也說明了為什麼這是最難過的一關:同一條規則過了所有鄰近參數,17 個市場卻只有 5 個收在零以上。這項測試的邏輯是,規則如果抓到價格走勢的某種共通特性,例如突破後容易延續,那麼在走勢相近的市場上應該也賺錢,只是賺多賺少會因為跳動點價值和成本不同而有差。只在發現它的那張圖上有效的規則,就是對著那張圖配出來的。
「相關」指的是和規則所依賴的行為相同的市場。以 NQ 突破規則來說,ES、YM、RTY 是最明顯的親戚:四個都是美國股價指數期貨,交易時段相同,對同樣的消息起反應。黃金和白銀是趨勢規則合理的第二圈。穀物、債券、外匯可以用來測它是不是通用的趨勢規則,但在這些市場失敗,意義比在 ES 失敗弱。下面這次回測把 N = 20 / M = 50 的規則原封不動跑過代管回測的全部 17 個市場,每個市場各用自己的手續費與滑價。
來源:AlphaPrime 代管回測(ap_backtest 連接器),2026-10-31 執行
| 市場 | 淨損益 | 獲利因子 |
|---|---|---|
| GC | $230,186 | 1.421 |
| NQ | $137,145 | 1.135 |
| SI | $97,864 | 1.115 |
| YM | $47,108 | 1.118 |
| ES | $17,401 | 1.030 |
| ZS | −$27,815 | 0.845 |
| CL | −$28,360 | 0.936 |
| 6J | −$33,160 | 0.758 |
| 6E | −$36,970 | 0.772 |
| NG | −$50,692 | 0.870 |
| 6B | −$51,967 | 0.623 |
| ZC | −$52,144 | 0.537 |
| ZW | −$56,423 | 0.666 |
| RTY | −$59,780 | 0.849 |
| ZN | −$80,205 | 0.464 |
| HG | −$83,396 | 0.802 |
| ZB | −$156,490 | 0.508 |
在 17 個市場中,有 5 個市場收在零以上。
從最近的親戚一圈一圈往外看。股價指數期貨裡,ES 和 YM 還是賺,RTY 轉虧;ES 的 $17,401、獲利因子 1.030 很接近零,成本估計稍微不同就可能翻負。黃金是這次回測最強的市場,遠遠贏過 NQ 本身,白銀也收在零以上。債券、穀物、外匯、能源和銅全部虧損,其中債券的獲利因子最低:ZB −$156,490(0.508),ZN −$80,205(0.464)。這條規則只做多,市場在這段期間得有上漲才賺得到,這也是同一條做多突破在這張表上差這麼多的原因之一。
這次回測說明這條規則不是通用的趨勢規則,連在自己的家族裡也不可靠:你會拿來做 NQ、YM、ES 的規則,和任何市場都能做的規則,是兩回事。它沒有回答做空版本、不同 K 棒週期或不同出場會不會改變結論,因為這些都沒跑。它也說不出 GC 和 SI 為什麼賺;兩個金屬市場上的一次結果,是繼續研究的線索,不是結論。
這項測試的及格線分兩部分,都要先寫下來:多少比例的相關市場必須賺錢,以及相關市場最多能賠到哪裡。規則在最弱的親戚上小賠一點,還是可能過;在大多數同家族市場上都賠,原始市場再漂亮也不及格。大規模搜尋出來的規則,最常見的結果就是死在這裡,所以這項要排在昂貴的測試之前。
策略該撐過哪些交易時段、期間與資料變動?
按星期、小時、年度與交易時段把交易切開,拿掉最大的五筆獲利,再用第二家資料商的 K 棒重跑一次;靠某個星期幾、五個好交易日或某家資料商精確價格得來的結果,從來就不是優勢。這些測試不動規則本身,動的是你算哪些交易,或規則看到哪些價格,而真正的型態不該在意這兩件事。
切割測試直接用手上現成的交易明細,不需要另外跑回測。照這個順序做:
- 按年度。把淨損益按日曆年拆開。趨勢規則有一兩個虧損年度很正常;但只靠一個賺錢年度撐起全部結果,就是期間上的意外,通常是某一段強趨勢造成的。
- 按星期。按進場日是星期幾分組。如果某一天佔了大部分獲利,其他天持平或虧損,規則找到的就是日曆上的怪癖,這種怪癖很少重演。
- 按小時。把日內交易按進場的小時分組。只在現貨開盤後第一個小時賺錢的規則不算錯,但它已經不是你測的那條規則,應該改寫成開盤規則,再重測一次。
- 按盤別。有夜盤的市場,把日盤進場和夜盤進場的交易分開。在全時段 K 棒上找到、卻只有夜盤賺錢的規則,靠的是流動性稀薄的時段,那裡滑價最差;期貨回測中的夜盤一文談拿掉夜盤 K 棒後會有什麼變化。
- 拿掉最大的五筆獲利。刪掉最大的五筆獲利交易,重畫權益曲線。只能留一項檢查的話,就留這項。曲線一旦變平,這策略就從來沒有優勢,它只是有五個好交易日。
假設範例
兩個策略在同樣的十年都交出 400 筆交易、$80,000 淨損益。第一個策略最大的五筆獲利加起來 $12,000,拿掉後淨損益 $68,000,曲線還在往上,平均每筆從 $200 掉到 $172。第二個策略最大的五筆獲利加起來 $75,000,拿掉後 395 筆交易只剩 $5,000,每筆約 $13,滑價稍微變一下就沒了。帳面數字一樣,卻是兩個不同的策略。第二個就是五個好交易日。
資料測試性質不同,它動的是輸入,不是輸出。同一個契約,兩家資料商的 K 棒很少完全一樣:有的用不同報價來源組 K 棒,有的 K 棒時間切點不同,有的換月日期差一天。差異通常只是這裡那裡一個跳動點,但一條寫死精確價格的規則會把這一個跳動點變成不同的交易。「收盤價向上穿越 20 根高點」在收盤高一個跳動點時觸發,低一個跳動點時就沒動靜。A 資料商有這筆交易,B 資料商沒有,從那根 K 棒起,兩條權益曲線就不再是同一個策略。
這項測試做法簡單,但要手動。同一條規則原封不動,拿第二家資料商同期間的 K 棒重跑一次。兩份交易明細按進場時間排好並排,數出只出現在其中一份的交易。穩健的規則跑出來的交易大致相同,只有邊緣少數差異,兩次的淨損益也落在相近範圍。脆弱的規則從第一次不一致開始就各走各的,兩個淨損益幾乎沒有關係。及格線比照鄰近參數:如果你要求多數鄰近參數仍然賺錢,那第二個資料來源也要賺錢,而且多數交易要一致。只有一個資料來源的話,最接近的替代做法是對手上的資料做回測資料品質檢查,因為壞價和位移的時間戳記,造成的脆弱訊號跟資料商差異是同一類。
穩健度測試該按什麼順序跑?
先跑參數網格和成本壓力,它們便宜又淘汰最多候選策略,接著是多市場與時段切割,再來才是推進分析與蒙地卡羅,候選策略碰到第一條沒過的及格線就停。順序要緊,因為這些測試的代價差很多。參數網格只是多跑幾次回測;多市場是每個市場跑一次;切割測試完全不用新回測;推進分析每個視窗都要完整最佳化一次,可能要跑上數百次;交易的蒙地卡羅又便宜了,但只有對前面全過關的策略才有意義。把推進分析的時間花在參數網格幾秒鐘就能淘汰的候選策略上,是策略研究最常見的浪費。
- 參數網格。及格線:多少比例的鄰近參數必須賺錢。淘汰過度最佳化的尖峰,這是搜尋產出的假策略裡最大的一群。
- 成本壓力。及格線:規則要撐得住的每趟額外成本,用實際來回成本的倍數來寫。淘汰單薄的優勢,這是第二大的一群。
- 多市場。及格線:多少比例的相關市場必須賺錢,以及相關市場最多能賠到哪裡。淘汰只貼合一張圖的規則。
- 時段與期間切割,再拿掉最大獲利。及格線:沒有哪一塊獨自撐起結果,拿掉最好的五筆後曲線還在往上。淘汰日曆巧合和只靠五個好交易日的策略。
- 推進分析。及格線:串起來的樣本外曲線保有一定比例的樣本內結果,而且多數視窗為正。淘汰只有回頭看才有效的選擇流程;推進最佳化說明談視窗怎麼選,樣本內與樣本外一文談要留多少資料。
- 交易的蒙地卡羅。及格線:在選定信賴水準下的回撤,是你要交易的帳戶扛得住的。淘汰靠幸運順序走出來的平滑曲線;免費的蒙地卡羅模擬器可以從貼上的交易結果清單算出回撤範圍。
碰線就停,才讓這個順序划算。沒過參數及格線的候選策略直接出局,不再花任何資源;走到推進分析的候選策略,已經證明有高原、有成本緩衝、有一整個市場家族,交易明細也不靠那五天。AlphaPrime 的策略檢驗依序對照你設定的門檻,候選策略沒過其中一道就停在那裡,所以推進分析和後面的檢查只跑過得了前面便宜測試的倖存者,就是上圖的那個漏斗。
有兩個習慣讓這個漏斗不會自欺。第一,及格線在第一個候選策略開跑前就寫好,之後不動;看過結果才調的及格線,只是另一個結果,不是測試。第二,記下每一關進來和出去的候選策略數量,這個數字本身就是資訊:十個裡有九個倒在參數網格,代表生成設定一直在產出過度最佳化的策略,要修的是上游的搜尋,不是測試。策略生成中的過度配適一文談這種時候搜尋要改什麼。
穩健度測試沒過,代表什麼?
沒過會告訴你抓到的是哪一種假策略,也告訴你搜尋該繼續;過了只是把機率縮小一點。參數網格沒過,是搜尋找到了尖峰;成本壓力沒過,是型態是真的但小到付不起成本;多市場沒過,是規則只學會了一張圖;拿掉最大獲利沒過,是那段歷史只有五個好交易日。每次失敗都指向一個具體弱點,比一句含糊的「沒用」有用多了,也告訴你下一輪搜尋前該改什麼。過關告訴你的就少了。它只說這一種假訊號不在,僅此而已,每項都過的候選策略仍可能只是碰巧活下來的假策略。
過關證明不了多少,原因在背後的搜尋。夠多的策略跑過夠多的測試,總有些垃圾會碰巧全部過關,因為一千個候選策略做十項檢查本身還是搜尋,只是改成搜尋過得了檢查的候選策略。Sullivan、Timmermann 與 White 在一世紀的道瓊資料上重跑了幾千條技術交易規則,指出最好的規則必須對照它所來自的搜尋規模來判斷,而且最好規則的優勢在樣本之後的十年並沒有延續。White 的 Reality Check 是這個想法的統計形式:把試過的所有模型都算進去後,檢驗其中最好的那個是否還贏過基準。Bailey 與共同作者再往前一步,估計樣本內看起來最好的設定,在樣本外輸給中位數設定的機率,試驗次數一多,除非有東西限制搜尋,這個機率就很高。穩健度測試除不掉這個問題;它減少的是候選策略數量,所以在倖存者之間的搜尋比在原始回測之間的搜尋小。
倖存者之後表現如何,唯一有實測的例子是一次 ES 與台指期的回測。保留期是歷史末端的一段 K 棒,完全排除在研究之外,生成和推進分析都看不到。
2026-10-15 以 RTX 3060 Ti 實跑,出廠設定、保守成本、固定 1 口。ES 2014-01 至 2026-09(保留期自 2022-10);台指期 2015-10 至 2025-03(保留期自 2022-04)。生成和推進分析時,保留期的 K 棒完全不在資料庫裡。
- ES 60 分鐘:評估約一千支,250 支通過基本條件,126 支通過推進分析。在保留期,通過推進分析的有 91% 獲利,沒通過的是 53%。
- 台指期 60 分鐘:評估約一千支,306 支通過基本條件,168 支通過推進分析。在保留期,通過推進分析的有 85% 獲利,沒通過的是 66%。
看這次回測要看差距,不是通過比例。兩段保留期都是上漲行情,ES 約 +116%,台指期約 +29%;市場漲超過一倍的時候,帶多頭偏向的垃圾也會賺錢。所以 ES 沒過推進分析的策略有超過一半在保留期還是賺錢:是市場把它們抬上去的。單看 91% 不能證明推進分析找到了真策略;91% 和 53% 的差距才是證據,因為兩組都被同一個市場抬高,只有通過的那組被抬得更高。台指期也一樣:85% 對 66%,漲幅較小,差距也較小。
這次回測顯示,在這兩個市場、這兩段保留期,通過一項穩健度測試的策略,在沒看過的資料上賺錢的比例高於沒通過的。它沒有告訴你任何單一策略接下來會怎樣,也沒告訴你賺了多少,而且它只用推進分析當過濾條件:參數網格和多市場檢查會不會把差距拉大,還沒有測過。過去某段保留期裡賺錢策略的比例,講的是過濾方法,不是你帳戶的預測。
所以最後的決定從來不是一項測試、一個數字。它是你第一次開跑前寫好的那組及格線,依序套用,候選策略碰到第一條沒過的就停,倖存者再對照它來自多大的搜尋來解讀。走完這個漏斗的策略,得到的不是「它有效」這麼大的結論,只是「我試過的都打不倒它」。回測最多只能給你這些,但已經比網格裡最好的那次回測值錢得多。
常見問題
什麼是交易策略的穩健度測試?
穩健度測試是在改動一些不該太影響結果的東西之後重跑策略:鄰近參數、更高的成本、相關市場、不同時段或期間,以及稍有不同的價格資料。每種改動抓的是不同的假訊號。全部改動之後還保有大部分優勢的策略,比較可能建立在真實型態上,而不是某段歷史的怪癖。
推進分析算穩健度測試嗎?
算。它檢查你選參數的方式,在最佳化視窗之後的資料上還有沒有效,所以測的是選擇流程,不是規則本身。它不測其他市場、更高的成本或第二個資料來源,所以要和這些檢查放在同一組;它是最昂貴的測試,應該排在比較便宜的檢查之後。
交易筆數要多少,穩健度測試才有意義?
沒有精確數字,但低於大約一百筆時,多數結果都是雜訊。只有四十筆時,拿掉最好的五筆就少了八分之一的樣本,按星期切開每天只剩八筆。交易太少的規則需要更長的歷史或更短的 K 棒週期,測試才說得出東西。
參數高原和尖峰差在哪?
高原是一片區域,鄰近的參數值都保有大部分結果,這才是真實型態的樣子,因為價格裡的型態不會在回看期從 20 改成 18 時就失效。尖峰是一個最好的格子被虧損的格子包圍,這是過度最佳化的樣子。參數要挑高原中間,不要挑最高點。
每項穩健度測試都過了,策略就是真的嗎?
不是。全部過關只表示它們要抓的那幾種假訊號都沒出現;候選策略一多,總有些垃圾會碰巧每項都過。倖存者要對照它來自多大的搜尋來看,過關的意義是可以小部位上場、繼續追蹤,不是證明。
參考文獻
- Sullivan, R., Timmermann, A., & White, H. (1999). Data-Snooping, Technical Trading Rule Performance, and the Bootstrap. The Journal of Finance, 54(5), 1647–1691.
- White, H. (2000). A Reality Check for Data Snooping. Econometrica, 68(5), 1097–1126.
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.
- CME Group. E-mini Nasdaq-100 Futures contract specifications (contract size $20 × index, minimum tick 0.25 index points = $5.00). cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html

