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

自動交易策略:值得測試的 3 個期貨範例

值得在期貨上測試的自動交易策略,是電腦可獨立執行的完整書面規則:突破、均值回歸與趨勢跟隨各一條,各有明確的進場、出場與部位大小。以含成本的回測評分,依固定順序檢驗,最後才匯出到你的交易平台。

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

目錄
  1. 什麼是自動交易策略?
  2. 期貨上哪三種策略類型值得測試?
  3. 自動交易策略有效嗎?一次 NQ 回測的結果
  4. 哪些策略類型最容易自動化?
  5. 自動化之前,怎麼測試策略?
  6. 測試過的策略要怎麼搬到你的平台?
  7. 常見問題
  8. References

什麼是自動交易策略?

值得在期貨上測試的自動交易策略,是電腦可獨立執行的規則:突破規則、均值回歸規則與趨勢跟隨規則,各有明確的進場、出場與部位大小。先用計入手續費與滑價的回測評分,只有通過一組固定檢驗的規則,才允許送出實單委託。

自動交易策略是一套完整的書面規則,電腦在新的價格資料上執行,循環之中沒有人為決策。想想恆溫器:它讀取一個數字,對照設定值,開啟或關閉暖氣,每一次都不需要人決定。交易規則的運作方式相同。K 棒收盤時,程式檢查條件,在下一根 K 棒送出委託,並監看出場。只要有任何一步需要人看圖判斷,這個策略就還不算自動化;更重要的是,回測也無法評分,因為回測複製不了那個判斷。演算法交易是什麼,以及為何多數規則會虧損從更大的範圍說明,這個循環在整個流程中的位置。

自動交易策略是封閉的循環:K 棒收盤,規則檢查條件,下一根 K 棒送出委託,出場規則監看部位,循環中任何地方都沒有人做決策 循環中無人決策 例:收盤高於 20 根 K 棒高點 K 棒收盤 規則檢查 送出委託 出場監看 無人介入 沒有任何步驟需要人。 結論:每條規則都要寫明確。
自動交易策略是從 K 棒資料到委託單的封閉循環,其中沒有任何一步由人決定。

這帶來一個適用於任何策略構想的簡單檢驗:進場、出場與部位大小,能否各用一句話寫出,並讓兩位不同的程式設計師寫出相同的程式?「收盤高於過去 20 日的最高價時買進」通過;「趨勢看起來強時買進」不通過。若無法把策略說到這麼明確,就不要自動化:你無法測試它,也不會知道它何時失效。

期貨上哪三種策略類型值得測試?

突破、均值回歸與趨勢跟隨,是最適合自動化的三大類,因為每一類都有一句話寫得出的進場、一句話寫得出的出場,以及已知會讓它失效的行情。知道規則在哪裡失效,與知道它在哪裡有效同樣重要:這讓你知道壞月份該是什麼樣子,進而分辨正常虧損與策略壞掉。

突破策略是這樣的規則:價格離開已在其中停留一段固定 K 棒數的區間時進場。均值回歸是這樣的規則:價格偏離近期均價異常遠時進場,回到該均價時出場。趨勢跟隨是這樣的規則:順著長期均線的方向持有部位,均線轉向時反向或出場。下表與下圖以四個要點比較三者,這四點決定它們自動化後的行為。

突破均值回歸趨勢跟隨
進場觸發價格脫離區間價格遠離均線長期均線轉向
出場反向突破或時間上限回到均線均線轉回
一般持有時間數小時至數日數小時數週
失效情境平靜的橫盤市場強勢單向趨勢來回震盪的市場
日 K 棒每年交易筆數數十筆數十筆寥寥數筆
每種策略類型都有適合它的行情,也有讓它失效的行情:突破在趨勢中有效、在平靜的區間中失效,均值回歸在區間中有效、在強勢趨勢中失效,趨勢跟隨在趨勢中有效、在來回震盪的市場中失效 各類型都有弱勢行情 哪種行情適合,哪種行情失效 區間 趨勢 震盪 突破 失效 有效 – 均值回歸 有效 失效 – 趨勢跟隨 – 有效 失效 在弱勢行情虧損屬正常。 結論:放棄前先看行情。
三大類在觸發條件、出場、持有時間與失效條件上各不相同。失效欄告訴你,正常的壞時期是什麼模樣。

以下各給一個明確的版本,寫成回測可以評分的形式。這些是通用的教科書規則,不是各類型唯一的寫法。

  1. 突破(通道):收盤高於前 20 根 K 棒的最高價時,在下一根 K 棒買進;收盤低於前 10 根 K 棒的最低價時出場。做空則將規則反向對稱。一口。
  2. 均值回歸(價格帶):收盤低於其 20 根 K 棒均線兩個標準差以上時,在下一根 K 棒買進;收盤重新穿越該均線向上時出場。做空反向對稱。一口。
  3. 趨勢跟隨(雙均線):50 根 K 棒均線在 200 根 K 棒均線之上時做多,在其下時做空;下一次交叉即出場。一口。

持有時間這一列說明了,為什麼成本對這幾類的衝擊差異這麼大。在日內 K 棒上持有數小時的均值回歸規則,屬於當沖,每筆的優勢微薄,成本因此決定結果;當沖是什麼:含成本測試一文演算了這道算術。日 K 棒上的趨勢規則持有數週,較少付出成本,但交易筆數少,使回測難以判斷。想看更多規則類型及其回測設定,請見期貨演算法交易策略的五種類型。

自動交易策略有效嗎?一次 NQ 回測的結果

回測告訴你的是規則在過去價格上、扣除成本後的表現,不是它將來會賺多少;這裡的結果是約一千次嘗試中留下的一個候選策略,數字因這次篩選而被美化,只能當作檢驗的起點。「有沒有效」沒有是或否的答案。你能做的是:量出規則扣除成本後的表現,再測試這個結果有多少能在規則從未見過的資料上保留下來。

下面這次執行出自 AlphaPrime(Valynox)的研究引擎。它在 NQ(E-mini Nasdaq-100 期貨)日 K 棒上,自 2019-01-02 至 2025-06-30,多空皆做、一口,每筆交易計 $20 手續費與 $10 滑價。規則是以標準指標組成的替身,並非上面三個範例之一:以 CCI 規則作為唯一的進場與出場,不設停損、停利或濾網。搜尋嘗試了約一千個參數候選,依報酬相對回撤留下這一個。事後挑出留下的候選策略會美化它:一千次嘗試中的最佳者,看起來總是比規則應得的更好,這正是 Bailey、Borwein、López de Prado 與 Zhu(2014)所描述的效應。不論 CCI 或這條規則,都不是靠本身「賺到」這筆錢,讀者也不該預期如此。

來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。

項目結果
淨損益(已平倉交易)$192,105
最大回撤$71,325
交易筆數168
勝率58.93%
獲利因子1.423
平均每筆損益$1,143.48
在市場內時間56.02%

先看回撤,再看獲利。最大回撤是帳戶權益從高點跌到下一個低點、再創新高之前的最大跌幅。這裡是 $71,325 對 $192,105 的淨損益,而回撤才是你會實際熬過的數字,當下也無從知道曲線會不會回復。獲利因子是總獲利除以總虧損;1.423 代表每虧損一美元,獲利單約帶進 1.4 美元。約六年半的 168 筆交易,樣本不大:這種規模的樣本,只要幾筆交易改變,每筆平均值就會大幅移動。$10 滑價相當於 NQ 的兩個跳動點;NQ 一個跳動點為 0.25 指數點,價值 $5.00,一整點價值 $20(CME Group 合約規格)。交易所不時調整合約數值,因此在設定你自己回測的成本之前,請先查交易所的合約頁面,或使用列出跳動點大小與每跳動點價值的期貨合約與損益計算機。

請看權益曲線的形狀,而不是終點:回撤期有多深、持續多久,以及標示的樣本外分界線之後,斜率是否與之前相似。
請看權益曲線的形狀,而不是終點:回撤期有多深、持續多久,以及標示的樣本外分界線之後,斜率是否與之前相似。 NQ · 日線 · 2019-01-02 至 2025-06-30 · CPU 引擎回測
請成對閱讀摘要:淨損益對最大回撤,獲利因子對交易筆數。由少數交易得出的結果,可信度低於由大量交易得出的同一個結果。
請成對閱讀摘要:淨損益對最大回撤,獲利因子對交易筆數。由少數交易得出的結果,可信度低於由大量交易得出的同一個結果。 NQ · 日線 · 2019-01-02 至 2025-06-30 · CPU 引擎回測

哪些策略類型最容易自動化?

最適合自動化的候選策略,在收盤時決定、參數少、交易筆數足以衡量,且平均每筆損益是一買一賣成本的數倍;需要看圖解讀,或在 K 棒中途做決定的策略,最難誠實地自動化。「誠實地」是關鍵。幾乎任何東西都能寫成程式,問題在於程式在實單交易中的表現,是否與回測時一樣。

五項特徵比較:容易自動化的規則在收盤時動作、使用 2 到 4 個參數、有數百筆交易、成本之上的餘裕大、依規則出場;難以自動化的規則在 K 棒中途動作、使用 8 個以上參數、交易不足 30 筆、成本餘裕薄、憑感覺出場 自動化的難易差別 五項特徵並列對照 易自動化 難自動化 收盤時決定 2–4 個參數 數百筆交易 遠高於成本 依規則出場 K 棒中途決定 8 個以上參數 不足 30 筆 僅略高於成本 憑感覺出場
五項特徵,區分出實單表現會與測試相同的策略,和不會相同的策略。

每項特徵背後都有原因。

  • 在收盤時決定。回測只有在 K 棒結束時才知道收盤價。在收盤時動作、並於下一根 K 棒開盤成交的規則,用的是自己本來能成交的價格。在 K 棒內「價格觸及某個價位時」動作的規則,得猜那根 K 棒內事件的先後順序,而這個猜測通常偏樂觀。
  • 兩到四個參數。每個參數都是搜尋可以轉動、用來擬合雜訊的旋鈕。上述 NQ 回測的 168 筆交易,撐得起幾個參數,撐不起八個。
  • 數百筆交易。由 30 筆交易算出的平均值,只要兩筆交易改變,就可能大幅移動。日 K 棒上的趨勢規則是這裡三大類中最難的,因為它產生的交易筆數太少;下一節介紹的推進分析視窗,能從同一段歷史產生更多樣本外交易,有助於解決這點。
  • 平均每筆損益是一買一賣成本的數倍。滑價是回測假設的價格,與市場實際給你的價格之間的差距。若平均每筆損益只勉強蓋過成本,滑價稍微上升,策略就會轉為虧損。
  • 出場由規則定義。「覺得不對勁時」出場,無法測試,也無法寫成程式。每個出場都必須是對價格、時間或部位本身的條件。

假設性範例

同一口合約上的兩條日內規則,毛平均每筆損益都是 $45。規則 A 每天交易一次;規則 B 每天交易六次。手續費與規費每一買一賣為 $5,滑價為每邊一個跳動點、合計 $10,所以一買一賣的成本是 $15。兩條規則扣除成本後,每筆都留下 $30,是成本的兩倍。現在把滑價加倍到每一買一賣 $20:成本升至 $25,兩條規則每筆各留下 $20。兩者仍然通過,但餘裕有限,且規則 B 付出這筆成本的次數是規則 A 的六倍,滑價再上升時,它先受傷。毛平均每筆損益只有 $20 的規則,在第一步就會失敗。

同樣這五項特徵,也是從零建立日內規則的檢查清單;如何建立並測試當沖演算法的逐步做法,把它們用在於同一個交易時段內開倉與平倉的規則上。

自動化之前,怎麼測試策略?

依照在看任何結果之前就寫下的固定順序執行檢驗:第一次回測就計入成本與下一根 K 棒成交、樣本內(IS)與樣本外(OOS)切分、推進分析視窗、穩健性檢驗,以及最後一段未動用的資料;全部通過的策略,才進入自動化。順序之所以重要,是因為成本低的檢驗會及早淘汰大多數候選策略,成本高的最後一段資料,才只用在極少數策略上。

  1. 第一次回測就計入手續費、滑價與下一根 K 棒成交。不計成本就為候選策略排名的搜尋,偏愛交易筆數多、每筆金額細小的規則;事後再加上成本,大多數入圍者就被淘汰。
  2. 依時間切開歷史。在較早的 70 至 80%(樣本內)上最佳化,再把規則原封不動地跑在較晚的一段(樣本外)。事先決定樣本內平均每筆損益必須保留多少。
  3. 執行推進分析視窗。推進分析是這樣的測試:在一個視窗上最佳化參數,原封不動地用在下一個視窗,再往前移動並重複,使串接起來的樣本外各段,成為只由資料出現之前選定的參數所構成的單一結果。Pardo(2008)詳細說明了這個方法與視窗的選擇;推進分析:你本可實際交易的那一個回測數字一文則說明如何解讀串接後的曲線。
  4. 執行穩健性檢驗。把滑價加倍,改用相鄰的參數設定,剔除五筆最大的獲利單。只在某一組設定下有效、或只靠幾筆交易才有效的規則,描述的只是雜訊。
  5. 最後一段未動用的資料,只測試一次。把最近幾個月的資料排除在每一次研究之外。看第二次,就會讓這段資料變成最佳化用的資料。
  6. 自動化。只有通過每一步的規則,才會走到這一格。
依固定順序的六項檢查:含成本的回測、樣本內與樣本外切分、推進分析視窗、穩健性檢驗、最後一段未動用的資料,然後自動化;前五步任何一步失敗,規則就被淘汰 六項檢查,依此順序 任一項未過,規則退回 1 2 3 4 5 6 含成本回測 樣本內/外切分 推進分析視窗 穩健性檢驗 最終保留期 自動化 淘汰
回測與自動化之間的固定檢查順序。任何一步失敗,策略都是退回,絕不往前。

就上述 NQ 回測而言,這表示上一節的結果,只是一個候選策略的步驟 1 輸出。步驟 2 至 5 仍然必須進行,而大規模搜尋留下的候選策略,多數會在步驟 2 至 4 之間失敗。這不令人失望;這是流程在做它的工作。另一種做法,是用實單帳戶發現同樣的事。

測試過的策略要怎麼搬到你的平台?

把明確的規則匯出成你平台的原始碼,在平台上以相同的交易時段、K 棒週期與成本載入,把平台的交易明細與研究報表逐筆比對,模擬交易至少經過一次轉倉,之後才切換到實單。每一步都是關卡:只有當該步驟被解釋清楚,策略才往前走。

  1. 為選定的平台匯出原始碼。程式碼必須是你已檢驗過的那條規則,參數值相同,而不是憑記憶重寫的版本。
  2. 以相同設定載入平台圖表。相同的合約、相同的交易時段、相同的 K 棒週期、相同的手續費與滑價、相同的起始日期。光是交易時段不同,就會改變 K 棒,進而改變每一個訊號。
  3. 比對交易明細。把平台的交易與研究報表的交易,依日期與方向對齊。資料商、轉倉日或四捨五入造成的小差異在預期之內;要做的是解釋每個差異,而不是消除每個差異。無法解釋的差異,指向某項不相符的設定。
  4. 模擬交易至少經過一次轉倉。實單自動化的多數問題出現在轉倉:部位必須移到新合約,策略的指標也必須正確讀取新的序列。
  5. 以預定口數切換到實單。口數來自已檢驗的回撤與你的帳戶規模,在第一筆實單之前就決定,不在一週表現好之後調高。
實單前的兩道關卡:匯出與設定完成後,交易明細比對與經過轉倉的模擬交易都必須通過;任何無法解釋的差距,都會讓策略退回設定,而不是往前進入實單交易 實單前兩道關卡 未過就退回,不往前走 關卡 1 關卡 2 設定 比對 模擬轉倉 實單 有無法解釋的差異?回到設定 實單前先解釋每項差異。 結論:轉倉測試不可省。
從匯出的程式碼到實單,以交易明細比對與模擬交易期間作為關卡。

步驟 1 是研究工具與交易平台相接之處。候選策略通過上一節的檢查後,AlphaPrime 會把它的規則寫成 MultiCharts(PowerLanguage)、TradingView(Pine Script v6)、TradeStation(EasyLanguage)、NinjaTrader(NinjaScript)、MetaTrader 4(MQL4)與 MetaTrader 5(MQL5)的原始碼,讓你在步驟 2 載入的程式碼,就是經過測試的那條規則,而不是手工另打的第二個版本;平台匯出頁面列出支援的平台,以及每種匯出包含的內容。無論程式碼由什麼工具產生,步驟 3 都由你完成。載入匯出的策略,在與研究報表相同的期間上執行,並數出交易筆數。若筆數不同,先找出能解釋差異的設定,再進行任何一根 K 棒的模擬交易。

常見問題

期貨上最好的自動交易策略是什麼?

最好的候選策略,是你能寫成明確規則、並以含成本回測評分的那些:突破、均值回歸與趨勢跟隨,是最容易做到這點的三大類。「最好」不是固定的規則清單,因為在某個商品與 K 棒週期上通過檢驗的規則,換到另一個可能失敗。評判每條規則,要看它在扣除成本後的樣本外與推進分析測試中留下什麼,而不是看單次回測的亮眼數字。

自動交易策略能在我不盯盤時運作嗎?

規則無需判斷即可執行,但設定仍需在已知的時間點留意:轉倉、提早收盤的交易所假日、資料來源中斷與保證金調整。模擬交易至少經過一次轉倉,能在動用真錢之前,讓你看到策略在這些時間點的表現。與其盯著每根 K 棒,不如規劃每日簡短檢查部位與成交。

自動化策略之前,回測需要多少筆交易?

足以讓幾筆交易改變時,平均每筆損益不會大幅移動。不少系統化交易人以整段測試達到數百筆為目標,並把不足約 30 筆視為線索,而非結論。平均值的不確定性隨交易筆數的平方根縮小,所以筆數增為四倍,不確定性減半。若單一段歷史的交易筆數太少,推進分析視窗能從同一份資料產生更多樣本外交易。

測試過的策略可以自動化到 MultiCharts、TradingView 或 NinjaTrader 嗎?

可以,前提是規則能寫成該平台語言的原始碼,並在平台自己的資料上執行。常見做法是匯出明確的規則,以相同的交易時段、K 棒週期與成本載入,在模擬交易之前,先把交易明細與研究報表比對。AlphaPrime 把策略原始碼匯出到 MultiCharts、TradingView、TradeStation、NinjaTrader、MetaTrader 4 與 MetaTrader 5。

References

  • 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.
  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.
  • CME Group. E-mini Nasdaq-100 Futures Contract Specs. https://www.cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html