期貨演算法交易策略:5 種類型與各自的回測方法
多數期貨演算法屬於五大類:突破、趨勢跟隨、均值回歸、時段與波動策略。扣除成本後仍站得住腳的類型,是平均每筆損益達到所選合約與K棒週期一買一賣(來回)成本數倍的策略,而且每一類都需要各自的測試設定。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
哪些期貨演算法策略類型在回測中站得住腳?
五大類涵蓋了多數期貨演算法:突破、趨勢跟隨、均值回歸、時段與波動策略。扣除成本後仍站得住腳的,是平均每筆損益達到你所選合約與K棒週期一買一賣(來回)成本數倍的策略。沒有哪一類在所有情況下都能勝出,所以每一類都要依它自己的條件來測試。
期貨演算法是一組寫定的規則,不需要人為逐筆決定,就能判斷何時買賣期貨合約。這五類在持有時間、交易頻率,以及小幅成本變動對它們的傷害程度上各不相同:
- 突破策略是價格離開既定區間時進場的規則,例如前 30 分鐘的最高點或最低點。
- 趨勢跟隨策略是順著已經啟動的走勢方向進場,並持有數日或數週的規則。
- 均值回歸策略是逆著短線走勢進場,價格回到平均值時出場的規則。
- 時段策略是只在選定的時間窗口內交易,其餘時間空手的規則。
- 波動策略是用波動幅度指標來決定交易多少,或是否交易的規則。
一買一賣(來回)成本,是 1 口合約一次進場與一次出場的手續費加滑價。不妨把每一類想成不同的交通工具:卡車和腳踏車都能移動,但你不會用同一張油費單來評斷它們。下面每一種都是程式交易的應用:寫好規則,由電腦照著做。
突破策略如何運作?適合哪些合約?
突破策略在價格離開既定區間時進場,適合交易時段結構清楚、流動性高的指數期貨,例如 5 至 60 分鐘 K 棒的 ES 與 NQ。區間可以是美國現貨時段的前 30 分鐘、前一日的最高與最低點,或最近 N 根 K 棒的通道。
進場恰好發生在市場正在波動的時候,所以成交價是這類回測最脆弱的環節。下一根 K 棒成交是指:在某根 K 棒收盤時看到的訊號,會在下一根 K 棒的開盤成交,絕不會在產生訊號的那個收盤價成交。在快速行情中,掛在區間邊緣的停損單通常會在邊緣之外一個跳動點或更遠處成交。請把回測設為下一根 K 棒成交,並對每次進場加入停損單的滑價。AlphaPrime(Valynox)的回測會對每個候選策略套用手續費、滑價與下一根 K 棒成交,因此突破規則是以它實際會拿到的成交價來測試。
好的突破回測,在稍微更動區間長度(25、30、35 分鐘)時,結果會相近。糟糕的結果則是某一組設定遠遠領先鄰近設定,這通常代表該設定只是擬合了少數幾個大行情日。AlphaPrime 策略生成可以把區間長度設成一段參數範圍,25、30、35 分鐘一起測,哪個設定遠遠領先鄰近設定就看得出來。
趨勢跟隨何時適合 ES、NQ 與 MNQ?
當你能持有數日或數週、用小時線或日線測試,並且負擔得起隔夜保證金時,趨勢跟隨就適合 ES、NQ 與 MNQ。每筆交易的波段幅度大,所以成本的影響比其他類型小,但有三項設定決定測試是否誠實。
- 全時段資料。趨勢部位會持有過夜盤,所以回測需要涵蓋夜盤的K棒,否則隔夜跳空會變成對你有利或不利的免費跳動。
- 轉倉處理。轉倉是連續價格序列從即將到期的合約切換到下一個合約的時點。如果轉倉時的價差沒有調整,趨勢策略可能會記入任何交易者都不可能拿到的盈虧。
- 隔夜保證金。隔夜保證金是交易所與期貨商要求持有 1 口合約跨過當日收盤所需的資金。它比日內保證金高,所以回測中的帳戶必須能撐過最糟的那一天。
MNQ 是 NQ 的十分之一:每指數點 $2,NQ 則是 $20。同樣的規則可以在小帳戶上測試,每口的點數風險只有十分之一,讓隔夜保證金與回撤符合你實際擁有的帳戶。
如何測試均值回歸而不自欺欺人?
均值回歸經常獲勝,但一旦虧損就很大,所以停損是策略的一部分,回測也必須證明結果不是靠少數幾天撐起來的。典型的交易又小又快:在 1 至 15 分鐘的 ES K 棒上,於價格跌破移動平均線時買進,回到平均線出場。只要有一天持續下跌,就可能把許多這類交易的獲利吐回去。
硬停損是在固定距離出場、不論規則怎麼說都會平倉的出場方式。分別用與不用硬停損各跑一次測試:如果沒有停損的版本看起來更好,差異來自少數剛好反彈回來的交易,而下一次不一定還會反彈。
三項檢查能讓均值回歸的測試保持誠實:
- 限價單成交。只有當價格穿越限價單時才算成交,單純碰到該價位不算。
- 剔除最糟的日子。剔除最差的五個交易日與最好的五個交易日後重跑測試。穩健的結果只會小幅變動;脆弱的結果則會正負翻轉。
- 樣本中的崩跌期間。日期範圍內要保留快速下殺的時期。只在平靜年份測試過的策略,等於沒有測試過。
時段策略與波動策略是什麼?如何測試?
時段策略只在選定的窗口內交易,波動策略用波動幅度指標調整部位或過濾交易,兩者都需要以同一個時區設定交易時段,並測試鄰近的設定。常見的窗口是美國現貨開盤後的前兩小時,即美國中部時間 08:30 至 10:30,並在 15:00 現貨收盤前設定出場時間。期貨交易時間工具會以你所在的時區顯示這些交易時段。
時區是最常見的錯誤。如果資料檔以交易所時間標記,而規則卻以你的當地時間撰寫,回測交易的時段就和實單策略不同,結果也就是一個你永遠不會執行的策略。請選定一個時區,把資料轉換一次,所有窗口都用該時區撰寫。
波動策略會使用波動幅度指標,例如 ATR(平均真實波幅),來略過平靜的日子、設定停損距離,或在波幅大時減少交易口數。也要測試所選門檻旁邊的門檻:如果 ATR 大於 20 點有效,而大於 18 或 22 都無效,這個門檻擬合的是雜訊。窗口也一樣:把 08:30–10:00、08:30–10:30 與 08:30–11:00 並排比較。
回測每口該用多少手續費與滑價?
依每跳動點價值,再加上每邊至少一個跳動點的滑價,來設定每口的一買一賣(來回)成本,然後與各策略類型的平均每筆損益比較。在 ES、NQ 與 MNQ 上,一個跳動點是 0.25 指數點;價值在 ES 為 $12.50,NQ 為 $5.00,MNQ 為 $0.50。期貨合約計算器會顯示各合約的跳動點大小、每跳動點價值,以及一筆交易的盈虧。交易所可能調整合約價值;請查閱交易所的合約頁面取得最新規格。
假設範例
某 ES 帳戶每邊手續費 $2.50,一買一賣(來回)為 $5.00。再加上每邊一個跳動點的滑價,合計兩個跳動點,價值 $25.00。每口的一買一賣(來回)成本為 $30.00。一個未扣成本平均每筆損益為 $90 的突破策略,扣除成本後剩 $60。一個未扣成本平均每筆損益為 $300 的趨勢跟隨策略,扣除後剩 $270。一個未扣成本平均每筆損益為 $35 的均值回歸策略,扣除後剩 $5,再多一個跳動點的滑價就會轉為負值。
平均每筆損益最小的類型,也就是日內均值回歸與快速突破,最先轉為負值。請在第一次搜尋執行之前就把成本放進去,因為不計成本排名的搜尋,榜單前段會被這類策略塞滿。
如何在相同資料上比較各策略類型?
公平的比較,是在第一次執行前就固定所有設定,然後依淨損益相對於回撤來排名,而不是看未扣成本的獲利或勝率。回撤是權益從高點下跌到隨後低點的幅度;把淨損益與它相比,獎勵的是不陷入深坑仍能獲利的策略,也不會偏袒剛好交易最頻繁的類型。
- 所有類型都選用同一個合約與同一個K棒週期。
- 選定同一個日期範圍,以及同一個樣本內/樣本外切分。樣本內是用來挑選設定的資料;樣本外是留作檢驗的資料。
- 每次執行都設定相同的手續費、滑價與下一根 K 棒成交。
- 用這些設定執行每一種策略類型。
- 依扣除成本後的淨損益相對於回撤來排名。
- 對排名前段的候選策略做推進分析:在一個窗口重新調整,在下一個窗口測試,反覆進行。
比較的變體越多,最佳者就越容易被機率灌水;Bailey、Borwein、López de Prado 與 Zhu(2014)展示了這種情況發生得有多快。請把樣本外部分留到最後檢驗,並預期勝出者在那裡會損失一些表現。在 AlphaPrime 的策略生成中,每一類的規則、參數範圍與搜尋限制都在搜尋之前設定好,因此每個候選策略都是在相同條件下產生的。
如何用不同的策略類型組成小型投資組合?
兩到三種在不同時間虧損的類型,例如趨勢跟隨與均值回歸,合併後的回撤通常小於各部分之和,而投資組合回測必須檢查每日報酬相關性,以及最糟那一天的總保證金。趨勢跟隨往往在盤整的年份流失,均值回歸往往在趨勢的年份失靈,所以它們的壞時期很少重疊。
相關性是介於 −1 與 +1 之間的數字,說明兩個序列的走勢有多接近;接近零表示它們的每日盈虧大致獨立。請用各策略的每日報酬來計算,而不是用權益曲線,因為兩條上升的曲線看起來永遠相關。接著把每日報酬對齊、相加,並用你單獨檢視每個策略時相同的工具,來衡量合併後的回撤。投資組合回測指南詳細說明了這些步驟。
保證金的檢查很簡單:找出兩個策略同時持有最大部位的那一天,加總每一口合約的隔夜保證金,再與帳戶比較。即使合併後的曲線看起來平滑,只要有一天所需保證金超過帳戶,這個投資組合就無法交易。
如果你使用 AlphaPrime,這代表:為每種策略類型定義各自的規則與參數範圍,以相同的成本、K棒週期與成交設定全部執行,並且先看淨損益相對於回撤的結果,再看其他。再透過平台匯出,把留下來的策略匯出到你的交易平台。
常見問題
哪一種期貨演算法策略類型最適合先測試?
日線或小時線的趨勢跟隨,是最容易正確測試的。交易次數少且持有時間長,所以一個跳動點的滑價幾乎不會改變結果,規則也容易手動檢查。均值回歸與快速突破在成交與停損上需要更仔細處理,等測試設定驗證過後再從它們開始。
我可以在 ES、NQ 與 MNQ 上執行同一個演算法嗎?
可以,但停損與停利要用指數點或 ATR 單位表示,不要用金額,因為一點在 ES 是 $50,NQ 是 $20,MNQ 是 $2。每個合約都要各自測試,因為 NQ 每天的點數波動比 ES 大。MNQ 與 NQ 的跳動點完全同步,所以 NQ 的規則通常可以沿用,只要更改每口的成本。
回測需要多少筆交易才能比較策略類型?
足以讓平均每筆損益不被少數離群值左右。許多交易者希望日內類型至少有幾百筆交易,而交易稀少的趨勢跟隨則要資料所能提供的越多年越好。如果剔除五筆最好的交易就讓結果正負翻轉,樣本就太小,無法比較。
回測期貨演算法一定要有 GPU 嗎?
不需要。同樣的測試也能在 CPU 上執行;顯示卡只會改變大型搜尋所需的時間。AlphaPrime 可在 CPU 或 NVIDIA GPU 上執行,功能相同,速度則取決於處理器或顯示卡、資料長度與研究設定。
回測該用日盤還是全時段資料?
趨勢跟隨與任何會持有隔夜的策略,都要用全時段資料,讓跳空與夜盤走勢都在測試之內。收盤前一定空手的時段策略可以使用日盤K棒,但開盤區間就必須從資料時區中精確的現貨開盤時間開始。
參考資料
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.

