VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 策略生成

期貨演算法交易策略:5 種類型與各自的回測方法

多數期貨演算法屬於五大類:突破、趨勢跟隨、均值回歸、時段與波動策略。扣除成本後仍站得住腳的類型,是平均每筆損益達到所選合約與K棒週期一買一賣(來回)成本數倍的策略,而且每一類都需要各自的測試設定。

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

目錄
  1. 哪些期貨演算法策略類型在回測中站得住腳?
  2. 突破策略如何運作?適合哪些合約?
  3. 趨勢跟隨何時適合 ES、NQ 與 MNQ?
  4. 如何測試均值回歸而不自欺欺人?
  5. 時段策略與波動策略是什麼?如何測試?
  6. 回測每口該用多少手續費與滑價?
  7. 如何在相同資料上比較各策略類型?
  8. 如何用不同的策略類型組成小型投資組合?
  9. 常見問題
  10. 參考資料

哪些期貨演算法策略類型在回測中站得住腳?

五大類涵蓋了多數期貨演算法:突破、趨勢跟隨、均值回歸、時段與波動策略。扣除成本後仍站得住腳的,是平均每筆損益達到你所選合約與K棒週期一買一賣(來回)成本數倍的策略。沒有哪一類在所有情況下都能勝出,所以每一類都要依它自己的條件來測試。

期貨演算法是一組寫定的規則,不需要人為逐筆決定,就能判斷何時買賣期貨合約。這五類在持有時間、交易頻率,以及小幅成本變動對它們的傷害程度上各不相同:

  • 突破策略是價格離開既定區間時進場的規則,例如前 30 分鐘的最高點或最低點。
  • 趨勢跟隨策略是順著已經啟動的走勢方向進場,並持有數日或數週的規則。
  • 均值回歸策略是逆著短線走勢進場,價格回到平均值時出場的規則。
  • 時段策略是只在選定的時間窗口內交易,其餘時間空手的規則。
  • 波動策略是用波動幅度指標來決定交易多少,或是否交易的規則。

一買一賣(來回)成本,是 1 口合約一次進場與一次出場的手續費加滑價。不妨把每一類想成不同的交通工具:卡車和腳踏車都能移動,但你不會用同一張油費單來評斷它們。下面每一種都是程式交易的應用:寫好規則,由電腦照著做。

五種期貨策略類型比較:突破策略使用 5 至 60 分鐘 K 棒,成本敏感度中等;順勢策略使用 1 小時或日 K 棒,成本敏感度低;均值回歸策略使用 1 至 15 分鐘 K 棒,成本敏感度高;時段與波動率策略的成本敏感度不一 五種類型,五種設定 K 棒週期與成本敏感度 類型 K 棒 成本衝擊 突破 5–60 分 中 順勢 1 小時、1 日 低 均值回歸 1–15 分 高 時段 日內 不一 波動率 不限 不一 沒有一種測試設定通用。 所以:依類型設定 K 棒與成本。
五大類在持有時間、K棒週期與成本敏感度上各不相同,所以每一類都需要自己的測試設定。

突破策略如何運作?適合哪些合約?

突破策略在價格離開既定區間時進場,適合交易時段結構清楚、流動性高的指數期貨,例如 5 至 60 分鐘 K 棒的 ES 與 NQ。區間可以是美國現貨時段的前 30 分鐘、前一日的最高與最低點,或最近 N 根 K 棒的通道。

進場恰好發生在市場正在波動的時候,所以成交價是這類回測最脆弱的環節。下一根 K 棒成交是指:在某根 K 棒收盤時看到的訊號,會在下一根 K 棒的開盤成交,絕不會在產生訊號的那個收盤價成交。在快速行情中,掛在區間邊緣的停損單通常會在邊緣之外一個跳動點或更遠處成交。請把回測設為下一根 K 棒成交,並對每次進場加入停損單的滑價。AlphaPrime(Valynox)的回測會對每個候選策略套用手續費、滑價與下一根 K 棒成交,因此突破規則是以它實際會拿到的成交價來測試。

突破:K 棒在區間內交易,訊號 K 棒收盤高於區間高點,成交發生在下一根 K 棒、區間邊緣之上,停損設在區間內 突破單成交在邊緣之外 收盤出訊號,下一根 K 棒成交 訊號 成交 區間高點 停損 實際成交價在區間邊緣之外。 所以:以下一根 K 棒成交並計入滑價來回測。
突破在區間被突破後的下一根 K 棒觸發:成交價落在區間邊緣之上,停損則在區間之內。

好的突破回測,在稍微更動區間長度(25、30、35 分鐘)時,結果會相近。糟糕的結果則是某一組設定遠遠領先鄰近設定,這通常代表該設定只是擬合了少數幾個大行情日。AlphaPrime 策略生成可以把區間長度設成一段參數範圍,25、30、35 分鐘一起測,哪個設定遠遠領先鄰近設定就看得出來。

趨勢跟隨何時適合 ES、NQ 與 MNQ?

當你能持有數日或數週、用小時線或日線測試,並且負擔得起隔夜保證金時,趨勢跟隨就適合 ES、NQ 與 MNQ。每筆交易的波段幅度大,所以成本的影響比其他類型小,但有三項設定決定測試是否誠實。

  1. 全時段資料。趨勢部位會持有過夜盤,所以回測需要涵蓋夜盤的K棒,否則隔夜跳空會變成對你有利或不利的免費跳動。
  2. 轉倉處理。轉倉是連續價格序列從即將到期的合約切換到下一個合約的時點。如果轉倉時的價差沒有調整,趨勢策略可能會記入任何交易者都不可能拿到的盈虧。
  3. 隔夜保證金。隔夜保證金是交易所與期貨商要求持有 1 口合約跨過當日收盤所需的資金。它比日內保證金高,所以回測中的帳戶必須能撐過最糟的那一天。

MNQ 是 NQ 的十分之一:每指數點 $2,NQ 則是 $20。同樣的規則可以在小帳戶上測試,每口的點數風險只有十分之一,讓隔夜保證金與回撤符合你實際擁有的帳戶。

如何測試均值回歸而不自欺欺人?

均值回歸經常獲勝,但一旦虧損就很大,所以停損是策略的一部分,回測也必須證明結果不是靠少數幾天撐起來的。典型的交易又小又快:在 1 至 15 分鐘的 ES K 棒上,於價格跌破移動平均線時買進,回到平均線出場。只要有一天持續下跌,就可能把許多這類交易的獲利吐回去。

硬停損是在固定距離出場、不論規則怎麼說都會平倉的出場方式。分別用與不用硬停損各跑一次測試:如果沒有停損的版本看起來更好,差異來自少數剛好反彈回來的交易,而下一次不一定還會反彈。

同樣的均值回歸交易,有無硬性停損的差異:八次小額獲利,接著一個趨勢日,有停損時虧損被限制住,沒有停損則虧損大得多 停損就是策略 相同交易,有無停損 小額獲利 硬性停損 虧損受限 無停損 虧損擴大 沒有停損,一天就抹去獲利。 所以:一律用硬性停損測試。
許多小幅回到平均值的走勢,之後出現一個趨勢日:硬停損決定那一筆虧損會有多大。

三項檢查能讓均值回歸的測試保持誠實:

  1. 限價單成交。只有當價格穿越限價單時才算成交,單純碰到該價位不算。
  2. 剔除最糟的日子。剔除最差的五個交易日與最好的五個交易日後重跑測試。穩健的結果只會小幅變動;脆弱的結果則會正負翻轉。
  3. 樣本中的崩跌期間。日期範圍內要保留快速下殺的時期。只在平靜年份測試過的策略,等於沒有測試過。

時段策略與波動策略是什麼?如何測試?

時段策略只在選定的窗口內交易,波動策略用波動幅度指標調整部位或過濾交易,兩者都需要以同一個時區設定交易時段,並測試鄰近的設定。常見的窗口是美國現貨開盤後的前兩小時,即美國中部時間 08:30 至 10:30,並在 15:00 現貨收盤前設定出場時間。期貨交易時間工具會以你所在的時區顯示這些交易時段。

時區是最常見的錯誤。如果資料檔以交易所時間標記,而規則卻以你的當地時間撰寫,回測交易的時段就和實單策略不同,結果也就是一個你永遠不會執行的策略。請選定一個時區,把資料轉換一次,所有窗口都用該時區撰寫。

ES 現貨日盤,中部時間 08:30 至 15:00:策略只在 08:30 至 10:30 交易,其餘時間空手,所有時間皆採用同一時區 一個時段,一個時區 ES 日盤:只交易此時段 時間皆為 CT 交易 空手 08:30 10:30 15:00 時區混用會交易錯時段。 所以:資料一次轉成同一時區。
時段窗口是 ES 交易時段中的一小段,並置於單一時區,讓回測交易的時段與實單一致。

波動策略會使用波動幅度指標,例如 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,再多一個跳動點的滑價就會轉為負值。

假設 ES 一買一賣成本 30 美元,從各類策略的平均每筆損益中扣除:趨勢策略 300 美元留下 270 美元,突破策略 90 美元留下 60 美元,均值回歸 35 美元僅留下 5 美元 成本決定誰能存活 ES 平均每筆損益,一買一賣 $30 保留淨額 成本 $30 示意 趨勢 $270 突破 $60 均值回歸 $5 均值回歸僅留下 $5。 所以:第一次搜尋前就要加入成本。
同樣的一買一賣(來回)成本,佔各類型平均每筆損益的比例不同,所以成本決定了哪些類型在哪個合約上能存活。

平均每筆損益最小的類型,也就是日內均值回歸與快速突破,最先轉為負值。請在第一次搜尋執行之前就把成本放進去,因為不計成本排名的搜尋,榜單前段會被這類策略塞滿。

如何在相同資料上比較各策略類型?

公平的比較,是在第一次執行前就固定所有設定,然後依淨損益相對於回撤來排名,而不是看未扣成本的獲利或勝率。回撤是權益從高點下跌到隨後低點的幅度;把淨損益與它相比,獎勵的是不陷入深坑仍能獲利的策略,也不會偏袒剛好交易最頻繁的類型。

  1. 所有類型都選用同一個合約與同一個K棒週期。
  2. 選定同一個日期範圍,以及同一個樣本內/樣本外切分。樣本內是用來挑選設定的資料;樣本外是留作檢驗的資料。
  3. 每次執行都設定相同的手續費、滑價與下一根 K 棒成交。
  4. 用這些設定執行每一種策略類型。
  5. 依扣除成本後的淨損益相對於回撤來排名。
  6. 對排名前段的候選策略做推進分析:在一個窗口重新調整,在下一個窗口測試,反覆進行。
公平比較三步驟:固定所有設定、執行每種策略類型、依淨損益相對回撤排名;更改任何設定就要回到第一步 先固定,最後排名 成本、K 棒、資料全都一致 1 2 3 固定所有設定 執行每種類型 依淨損益÷回撤排名 改了設定?重來。 設定一改,比較就失準。 所以:首次執行前先鎖定設定。
先固定所有設定,讓所有類型都在這組設定上執行,然後再排名。看到結果後才更動設定,比較就得重新開始。

比較的變體越多,最佳者就越容易被機率灌水;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.