本節合併 Ch18「選對價格序列」、Ch19「測試與最適化」、Ch20「績效評估」。三章的共同主題:回測結果幾乎一定高估未來,能不能誠實面對這件事,決定系統交易者的成敗

選擇正確的價格序列#

期貨合約壽命短,回測時必須處理「跨合約」的問題。常見四種選擇:

序列優點缺點
個別合約真實多數市場流動性不足 6 個月,長期方法做不到
近月期貨反映歷史價位換月跳空使損益完全失真
固定遠期(perpetual)無換月跳空不對應任何真實合約,無法反映時間價值消逝
連續期貨(spread-adjusted)精準反映實際交易者損益歷史價位失真,可能出現負值

系統測試必須使用連續期貨。任何說「用 perpetual 來避免失真」的,是「地球是平的」等級的錯誤。

唯一例外:純短線(look-back ≤ 5 ~ 6 個月)系統可考慮個別合約。

連續期貨不可用於百分比計算。需要百分比時,分子用連續期貨計算的價差,分母用近月價格。

實作要點:

  • 換月日不必等到最後交易日;實物交割合約最後幾週常受技術扭曲,建議提前 N 天滾倉(如 20 天)。
  • 滾倉日要與你實際操作習慣一致
  • 不同資料商可能用不同方法構建「continuous」序列,下單前必須與資料商確認方法、合約與滾倉日。

系統測試的基本概念#

  • 系統:一組產生訊號的規則。
  • 參數(parameter):可自由設定的值,會改變訊號時機。
  • 參數組(parameter set):一組特定參數值的組合。
  • 參數類型
    • 連續:例如百分比,需要設定步距。
    • 離散:例如天數,整數值。
    • 代碼:用編號代表分類規則的選項,本身無大小意義。
    • 固定/非最適化:在大型系統中,部分參數固定不參與最適化,避免組合爆炸。

實務上,不必跑遍所有可能組合。先用稀疏網格(如 N = 10, 20, …, 100),找到表現好的區域再細化即可。

「精挑範例」的陷阱#

作者親身經歷:1983 年雜誌舉了「6 日均線交叉系統」用 1980 瑞士法郎的範例,年報酬 287%。他自己擴大測試後:

  • 1976 至 1983 年,瑞士法郎只賺 $20,473,扣掉 1980 年只賺 $3,238。
  • 25 個市場中 19 個虧損,13 個年虧 > $3,000/口,5 個年虧 > $6,000/口。
  • 重新在 2005-2015 年期間測試 31 個市場,只有 9 個賺錢,整體十年累計虧 −$940,612。

Figure 19.1: Major Trending Phase as Unrepresentative Sample

教訓:不要從單一範例推論系統表現。要評估系統,必須在長時間、多市場、無事後諸葛的條件下測試。

真實假設的兩大類#

1. 交易成本#

  • 手續費只是一部分;滑價(理論成交價 vs 實際成交價)才是大魔王
  • 假設「以收盤中價成交」並不真實:買單常成交在收盤上端、賣單常在下端。
  • 兩種處理方式:
    • 用「最差成交價」假設(例如買單以收盤上端成交)。
    • 把每筆交易成本拉高到遠超實際手續費(例如每邊 $25/單)。後者更通用

2. 漲跌停日#

  • 自動化系統預設訊號當下成交,但漲跌停被鎖死時實際上根本進不去
  • 一根漲跌停可能直接吃掉幾千美元損益(書中以 2011 年 9 月玉米為例:漲跌停翌日跳空 41.25¢,每口 $2,062.5)。

Figure 19.2: Wide Gap between Signal Price and Actual Entry: Limit Days

最適化的選擇標準#

最適化要看四件事:

  • 百分比報酬(不要用絕對金額)。
  • 風險衡量(除了報酬,必須看波動/回撤)。
  • 參數穩定性:找一塊「廣大的好區域」,不要找單一耀眼點。
  • 時間穩定性:報酬不能集中在少數年份。

同一系統內不同參數組的優化,多用簡單的報酬/風險比(Sharpe、Gain-to-Pain)就夠;跨系統比較才需要顯式檢查多重指標。

最適化的真相:被嚴重高估#

作者跑了 9 個 N 值(20, 30, …, 100)的突破系統,比較「過去 8 年最佳參數」與「後續 2 年的排名」,結果:

  • 各市場逐一最適化幾乎沒有任何預測力
  • 跨投資組合最適化僅在「找出過去最差的參數會繼續是未來最差」時有效——而這是因為 N = 20 在所有期間都是次優極端值,與排名本身無關。
  • 不管前期最佳的參數有多耀眼,幾乎無法在後續期間維持最佳

五個關鍵結論:

  1. 任何系統都能透過最適化做出漂亮的歷史績效;如果做不到,反向操作就是印鈔機。
  2. 最適化永遠會高估系統未來表現,通常高估非常多。永遠不要用最適化結果來評估系統。
  3. 多數系統最適化對未來幾乎沒幫助。
  4. 最適化最多用來「劃界線」——排除明顯次優的參數區間;微調最適化是浪費時間。
  5. 複雜的最適化程序與簡單的一樣有用(前提是真有用)。

怎麼做才算「測試」而非「擬合」#

作者推薦兩種做法:

盲樣模擬(Blind Simulation)#

用較早的資料最適化,用後續資料測試所選參數。模擬期與最適化期絕對不可重疊

全參數平均#

事先列好所有要測的參數組,跑完之後取所有參數組的平均作為系統未來表現的代理。等同「擲飛鏢選參數」的期望值。

廣告中的「simulated results」常常其實是「optimized results」的代名詞。看到這個詞要立刻警覺,它的可信度應與你想投入的金額成正比——零

模擬結果被扭曲的七種方式#

  1. 精挑範例:25 市場 × 15 年 × 100 參數 = 37,500 組結果,找一組漂亮的不難。
  2. 廚房水槽法:事後加規則去處理過去的虧損段。
  3. 忽略風險:以「保證金的倍數」算報酬,把風險藏起來。
  4. 跳過虧損訊號:圖上只標賺錢的訊號。
  5. 無限制最適化:測試的參數組越多,事後最佳化的「歷史報酬」越驚人。
  6. 不真實的交易成本:忽略滑價。
  7. 直接造假:偽造紀錄。

多市場系統測試與負面結果#

  • 好系統理應在大多數活躍市場(85% 以上)獲利。
  • 不同市場波動度差異大;事先決定資金配置與口數,再進行測試。
  • 系統在某些市場表現特別差時,不要急著放棄——分析原因常能找到改進點。
  • 但若系統在多數市場與多數參數都表現糟糕到驚人,反向操作可能就是好系統——只是要注意,這時的虧損若主要來自手續費與滑價,反向後依然虧。

建構與測試系統的十步驟#

  1. 取得回測所需資料(連續期貨)。
  2. 定義系統概念。
  3. 寫出規則程式。
  4. 選一小組市場與少數年份。
  5. 對該子集跑訊號。
  6. 檢查訊號與預期是否一致——通常會發現程式錯誤或規則漏洞。
  7. 修正後重跑、比對訊號變化,確保沒有副作用。
  8. 在完整資料庫與全部參數組上跑(先確定交易組合)。
  9. 以全參數平均或盲樣模擬評估表現,不要看最佳參數
  10. 與一個基準系統(如均線交叉、簡單突破)的同期表現比較。

多數系統創意會在第 10 步陣亡。設計出真正有用的系統,比多數人想的難得多。

系統交易的 16 條觀察#

挑出最重要的幾條:

  • 順勢系統的「定義趨勢」方法可能是最不重要的部分;修正規則(過濾、確認、加碼、停損)才是關鍵
  • 簡單為德。
  • 跨市場的真正理由,除了風險分散,還有「避免錯過任何一段大行情」——大行情常是整年績效的關鍵。
  • 同樣資金充足,多系統 + 多參數的組合勝過單一最適化系統。
  • 最適化的價值被高估。
  • 別用最適化結果評估系統。
  • 真正成功系統的共同特徵:少數市場有大幅獲利年、極少出現大幅虧損年——核心仍是「讓利潤奔跑、嚴控虧損」這句老話。
  • 不要避開高波動市場,最賺錢的常常就是最波動的
  • 系統表現有時更多反映「市場狀態」而非系統本身——比較時要設基準。

Figure 19.3: Trading Results Reflect Market, Not System

如何評估歷史績效#

「報酬無法單獨衡量好壞,必須與風險比。」——作者類比:兩家網站都報旅館 300 與 250,沒寫貨幣單位就無法比較。

Figure 20.1: Two Paths to Return

風險調整後報酬指標#

作者整理了七種主流指標:

指標計算特性
Sharpe Ratio(平均超額報酬) / 標準差最常用;懲罰上行波動;負值無意義
Sortino Ratio(複利超額報酬) / 下行偏差只懲罰下行;用複利報酬;不可與 Sharpe 直接比較
SDR Sharpe Ratio同 Sortino,但下行偏差乘 √2可與 Sharpe 直接比較;建議取代 Sortino
Gain-to-Pain Ratio (GPR)Σ 正報酬 / |Σ 負報酬|損失按比例懲罰;不對「集中或分散」差別待遇
Tail Ratio上 p% 平均 / |下 p% 平均|凸顯極端事件的方向性偏斜
MAR / Calmar Ratio年複利報酬 / 最大回撤直觀但只看一個事件,統計顯著性不足;MAR 對歷史較長的人不利
Return Retracement Ratio (RRR)報酬 / 平均最大回撤結合「下行」與「集中度」,又不被單一事件決定

負的 Sharpe 完全沒意義——當分子是負值時,標準差越大反而 Sharpe 越「好」,會給出與直覺完全相反的結論。

Figure 20.3: Which Manager Is Riskier?

作者個人建議:以 SDR Sharpe 為主,加上 Tail Ratio 看極端事件,再用 RRR 衡量回撤特性。MAR/Calmar 可作為輔助。

視覺化工具:NAV 圖#

NAV(Net Asset Value)圖把 $1,000 的複利成長視覺化:

  • 單一最有資訊量的圖表——同時顯示報酬與風險(回撤幅度與頻率一目了然)。
  • 注意視覺錯覺:固定縱軸的長期 NAV 圖會讓「相同百分比波動」在後段看起來變大。用 log 縱軸比較公平。

Figure 20.4: How Has Performance Changed over Time?

Figure 20.5: Log Scale