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

演算法交易策略持續有效的 5 項檢驗

沒有任何規則能永遠有效。演算法交易策略要算持續有效,須在多種市場環境下,樣本外與實單結果都保有樣本內結果的合理比例。依固定順序做五項檢驗,並在看結果前寫下及格標準,是唯一能得知答案的方法。

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

目錄
  1. 演算法交易策略能否持續有效,如何判斷?
  2. 交易策略為什麼會失效?
  3. 交易策略能撐多久?
  4. 樣本外與推進分析檢驗能證明什麼?
  5. 移動參數後,結果還穩定嗎?
  6. 如何知道策略上線後是否仍然有效?
  7. 常見問題
  8. 參考文獻

演算法交易策略能否持續有效,如何判斷?

持續有效的演算法交易策略,是指樣本外與實單結果,在多種市場環境下都保有樣本內結果的合理比例。沒有任何規則能永遠有效。要知道策略是否仍然有效,只能依固定順序做五項檢驗,並在看任何結果之前,先寫下各項的及格標準。

想像一輛車先在平整的賽道上測試,再開上真實道路。賽道成績是樣本內結果,第一趟上路是樣本外結果,日常行駛則是實單交易。樣本內資料,是你用來挑選規則與參數的那段價格歷史;樣本外資料,則是策略在建構期間從未見過的那一段。持續有效,是指換到每種新路面,車速都大致維持;並非指在賽道上創下紀錄。若對這些名詞不熟,請先讀演算法交易是什麼、成本多少;本文其餘部分假設你已知道規則、參數與回測是什麼。

兩條示意權益曲線橫跨樣本內、樣本外與實單階段:持續有效的一條在三段都大致維持相近斜率,另一條在樣本內陡升,樣本外走平,實單轉為下跌 斜率能延續嗎? 兩條示意曲線、三個階段 持續有效 未能持續 樣本內 樣本外 實單 樣本內 樣本外 實單 每次交接後,檢視斜率。 結論:別只信樣本內。
持續有效,是指斜率能撐過每次交接,從樣本內到樣本外再到實單。陡峭的樣本內曲線在第一次交接就走平,正是持續有效的反面。

五項檢驗,依最省時間的順序如下:

  1. 涵蓋的市場環境。在讀任何結果之前,先數測試歷史裡有幾種不同的市場環境。少於三種,其餘檢驗就缺乏可用的依據。
  2. 樣本外。規則不改動,拿到從未見過的資料上執行,量測樣本內平均每筆損益有多少比例保留下來。如何切分樣本內與樣本外資料會詳談切分本身。
  3. 推進分析。沿著歷史重複多次交接,計算有幾個區間維持損益為正。
  4. 參數穩定度。把每個參數上調、下調,確認相鄰數值的表現與所選數值相近。
  5. 實單偏離。上線後,把持續累計的平均每筆損益與回撤,與事先定好的區間相比較。

交易策略為什麼會失效?

交易策略失效有三種不同原因,各自的因應方式也不同:回測結果的一部分是從不存在的雜訊;真實的規律被其他交易人發現並交易殆盡;或是市場結構改變,使規律的成因消失。優勢衰退(edge decay),是指策略的平均每筆損益隨時間從回測水準下滑、趨近於零。區分這三種原因有其必要:第一種代表優勢從未存在,後兩種則代表優勢曾經真實、如今正在縮小。

回測的平均每筆損益是混合物,就像一杯半是果汁、半是水的飲料。果汁是真實的優勢;水則是剛好與那段歷史吻合的雜訊。只有果汁能拿來交易。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,同一段歷史上測試多種變體時,即使完全沒有真實優勢,最佳變體的結果也會被雜訊墊高。試過的候選策略愈多,你留下的那杯裡水的比例愈大。

示意圖:回測的平均每筆損益一部分是真實優勢、一部分是雜訊;實單第 1 年雜訊消失,第 2、3 年交易擁擠與結構改變使真實優勢縮小 只有真實優勢會上線 每年平均每筆損益(示意) 回測 第 1 年 第 2 年 第 3 年 優勢 雜訊 雜訊消失 交易擁擠 結構改變 實單只保留真實優勢。 結論:預期要低於回測。
回測結果中只有真實優勢的部分會進到實單交易,之後交易擁擠與結構改變逐年縮小這一部分。
原因你會看到可行的因應
回測中的雜訊樣本內曲線陡峭;從第一次交接起,樣本外走平或下跌淘汰該候選策略;下次針對同樣的資料量,少測幾種變體
其他交易人造成的擁擠真實但多年逐漸縮小的平均每筆損益;愈多委託追逐相同價格,滑價愈大縮小交易規模、放寬實單區間檢視,並持續尋找下一個規則
市場結構改變交易時段、跳動點大小、參與者或波動率水準改變後,突然出現斷裂停用該策略,或待能說出新成因後再重建

Park 與 Irwin(2007)回顧數十年來的技術性交易規則研究,指出早期資料中被發現有獲利的規則,後期表現往往較弱。這種現象同時符合交易擁擠與雜訊的解釋。因此,對搜尋詞「演算法交易能獲利嗎」,誠實的答案是有條件的:取決於你的回測有多少是果汁。決定散戶演算法交易是否獲利的數字,就是扣除成本後的平均每筆損益,以及它能維持多久。

交易策略能撐多久?

策略的壽命,以歷經的市場環境數衡量,而非日曆年數。因此涵蓋一次崩跌、一段空頭與兩段趨勢的六年歷史,比一路上漲的十年更有說服力。市場環境,是指市場以某種可辨識的方式運作的一段時間,例如穩定趨勢、急跌,或平靜的盤整區間。只見過一種環境的規則,只通過了一場考試,無論那場考試持續了多少年。

計算市場環境,要像飛行員計算不同天氣下的飛行時數,而非總時數。晴空時數對暴風雨幾乎沒有教益。本文回測所用的那斯達克 100 期貨期間,歷史從 2019 年初到 2025 年年中,包含 2019 年上漲、2020 年初快速崩跌與復原、2021 年再度上漲、2022 年一路下跌,以及 2023 年起漲至 2025 年年中。六年半內有五種不同環境,所以這段期間的結果,比同樣結果出現在單一長趨勢上更有意義。

NQ 從 2019 年到 2025 年年中的時間軸,含五種市場環境:2019 年上漲、2020 年崩跌與復原、2021 年上漲、2022 年下跌、2023 年到 2025 年年中上漲;本文回測涵蓋全部五種 六年內五種市場環境 NQ,2019 年至 2025 年年中 歷經的市場環境:5 2019 2020 2021 2022 2023–25 1 2 3 4 5 上漲 崩跌 上漲 下跌 上漲 計算環境數,而非年數。 結論:納入一段會受挫的環境。
策略的年資,以歷經的市場環境數計算。本文稍後使用的 2019 年至 2025 年年中 NQ 歷史,包含五種不同環境。

接著有兩條實務規則。第一,選擇測試起始日時,至少納入一段對該規則不利的市場環境:趨勢跟隨需要一年盤整,均值回歸規則需要一次單邊崩跌。第二,策略若在實單中經歷過測試時從未見過的市場環境,就把該結果視為新的樣本外區塊,用同一個及格標準檢視。以可量測的數字界定市場環境的方法,收錄在市場環境偵測:三種環境與衡量方式;期貨演算法交易策略的五種類型則說明哪一類型容易在哪種環境中吃力。

樣本外與推進分析檢驗能證明什麼?

單一樣本外區塊只能顯示規則是否通過一次未見過的資料;推進分析則把這次交接重複多次,讓你能計算有幾個區間保住了優勢,而不是寄望其中一個做到。推進分析是一種測試:在一段歷史區間上最佳化參數,原封不動地套用到緊接著的下一區間,向前移動並重複,直到串接的測試區間形成單一結果。Pardo(2008)將此描述為衡量最佳化結果有多少能帶進未見資料的標準方法。

單一樣本外區塊如同擲一次硬幣:好結果可能來自好規則,也可能只是好運的一年。五個以上的區間,則把擲硬幣變成計分。若五個區間有四個損益為正,且串接的樣本外平均每筆損益保有樣本內數字的合理比例,證據就是一種規律。若五個只有兩個為正,總和全靠一個幸運區間撐起,證據便只是把單一區塊包裝成多個。

推進分析範例:五個最佳化區間,各接一段較短的測試區間,隨時間向前推移;測試區間串接成單一樣本外結果,5 個區間中有 4 個損益為正 計算區間撐住了幾個 最佳化、測試,共五輪(範例) 最佳化 測試 串接樣本外 區間 損益為正 5 中 4 一個區間是運氣,五個才算統計。 結論:事先定好及格數。
推進分析把單一樣本外區塊變成區間計數。要讀的是串接的測試線與計分卡,而非任何單一區間。

下方表格呈現其中一次執行的結果。AlphaPrime(Valynox)測試 NQ 日 K 棒資料,期間為 2019-01-02 至 2025-06-30,多空皆做,1 口,每筆交易收取 $20 手續費與 $10 滑價。規則是均值回歸半衰期(Mean-Reversion Half-Life)規則,作為唯一的進場與出場條件,沒有停損、停利與濾網。這是以標準指標組成的替代規則,並非本文的主題。搜尋共經過 1,024 個候選策略,留下這一個,依據是報酬相對於回撤。事後挑出保留的候選策略,會讓它的成績顯得偏高:1,024 個中的最佳者帶有選擇加成,是全新候選策略所沒有的;Bailey、Borwein、López de Prado 與 Zhu(2017)指出,看起來最佳的候選策略屬於過度最佳化的機率,會隨比較數量增加而上升。這些數字只是這一個規則在那段歷史上的表現,不代表該規則日後的收益,也不是讀者該預期的結果。

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

數字結果
淨損益(已平倉交易)$208,535
最大回撤$73,565
交易筆數252
勝率56.35%
獲利因子1.407
平均每筆損益$827.52
持倉時間50.5%

請把這張表當成整段期間的摘要,再打開績效報表,找出交接點。六年半內 252 筆交易、勝率 56.35%、獲利因子 1.407,描述的是一個贏的次數略多於輸的規則,每虧損 1 美元大約賺 1.4 美元,且有一半時間持倉。這些數字都無法告訴你斜率有沒有撐過樣本外階段;只有曲線能回答。

找出標示的樣本外區段,將它的斜率與前一段比較。交接前後斜率相近、兩側回撤量級相當,是通過檢驗的樣子;交接日出現明顯轉折,則是未通過的樣子。
找出標示的樣本外區段,將它的斜率與前一段比較。交接前後斜率相近、兩側回撤量級相當,是通過檢驗的樣子;交接日出現明顯轉折,則是未通過的樣子。 NQ · 日線 · 2019-01-02 至 2025-06-30 · CPU 引擎回測

當單一策略通過樣本外檢驗後,推進分析這一步耗時最多,也最能增加信心。在 AlphaPrime 中,推進分析屬於策略檢驗,是固定流程中的一步:及格門檻在搜尋開始前設定,候選策略一旦未通過前面的檢驗,後續檢驗就跳過,所以走到最後一段資料的候選策略極少。串接曲線與區間計數的讀法,詳見推進分析:唯一你本來可以實際交易的回測數字。

移動參數後,結果還穩定嗎?

只在單一參數下有效的規則,描述的是雜訊。因此要測試相鄰數值,只在一大片參數高原的表現相近時才保留策略,並選高原的中心而非峰頂。參數高原,是指相鄰參數的結果在大小與正負上都相近的區域。山頭站得住,是因為往任何方向走一步變化都有限;旗桿則不然,任何一步都是墜落。

檢驗方式是機械式的。取每個最佳化過的參數,例如回看長度或進場門檻,在所選值的上下相鄰數值各執行一次,再向兩側各延伸一步。把結果排成方格,兩個軸各放一個參數,依扣除成本後的平均每筆損益為每格上色。好結果是一大片明亮區域;壞結果是暗色背景中的單一亮格。即使邊緣的格子得分更高,也要選亮區中央的參數,因為中央的值,鄰近數值最相似。

依回看長度與進場門檻繪製的兩張平均每筆損益方格圖:左圖在暗色背景中只有一個亮格,是應淘汰的尖峰;右圖有一大片亮區,是應保留的高原,並標出中心 尋找高原 依回看長度與門檻的平均每筆損益 尖峰:淘汰 高原:保留 單一亮格是雜訊。 結論:選高原中心。
單一參數上的尖峰是雜訊;一整片表現相近的參數高原才是規則。保留高原的中心,而非最高的那一格。

假設性範例

某規則有兩個參數:回看長度 10 到 40 根 K 棒,以及分五級的進場門檻。最佳化器選出回看長度 20、第 3 級,扣除成本後平均每筆損益為 $900。回看長度 18 與 22 時,平均每筆損益是 $100 與 −$50;門檻第 2 級與第 4 級時,則是 $40 與 −$120。這是尖峰,$900 多半是雜訊。第二個規則在回看長度 18 到 30、第 2 到 4 級的所有組合中,平均每筆損益都落在 $400 到 $550 之間。這是高原。應保留的參數是回看長度 24、第 3 級,也就是該區域的中心,即使回看長度 28、第 2 級的得分是 $550。

有兩項改進作法。只用樣本內資料執行方格,讓樣本外區塊保持未動用;並計算你最佳化了幾個參數:三個參數、各有數百筆交易,尚有高原的空間;八個參數卻只用六十筆交易最佳化,幾乎不會有。

如何知道策略上線後是否仍然有效?

上線前先決定:經過一定筆數的交易後,平均每筆損益與回撤必須維持在什麼區間內;在固定間隔把實單數字與推進分析數字比較;策略離開區間時才停用,而非只是某個月虧損就停用。實單偏離,是指策略的實單結果逐漸偏離當初支持交易它的結果。恆溫器不會因為室溫降了一度就關掉暖氣;它在溫度越過事先設定的線時才動作。這個區間就是那條線。

區間來自同一條公式,也就是決定小樣本能漂移多少的那條公式:

預期區間 = 推進分析平均每筆損益 ± 2 × (單筆交易離散度 ÷ √N)

其中,推進分析平均每筆損益是串接樣本外區間扣除成本後的平均每筆損益;單筆交易離散度是個別交易結果通常偏離該平均的幅度(標準差);N 是檢視時點已完成的實單交易筆數;√N 是其平方根。乘以 2,得到一個區間:行為與推進分析結果相符的規則,多數時間都應落在其中。由於區間只隨 N 的平方根縮窄,早期檢視的區間寬、後期檢視的區間窄,因此檢視時點要以交易筆數而非日曆來設定。

範例:實單滾動平均每筆損益在預期區間內游移,區間隨交易筆數增加而縮窄,中心為 300 美元,到第 100 筆檢視時點跌破 0 美元的下限 離開區間即停用 實單平均每筆損益與區間(範例) 100 筆:區間外 $600 $300 $0 越過那條線,就停用它。 結論:上線前先定好區間。
實單偏離,是以上線前定好的區間來判斷。停用的決定,是在排定的檢視時點越過一條線,而非糟糕一個月之後的感覺。

假設性範例

串接的推進分析結果顯示,扣除成本後的平均每筆損益為 $300,單筆交易通常偏離該平均 $1,500。檢視時點設在實單第 50 與第 100 筆。到第 100 筆時,√N 是 10,因此區間半寬為 2 × 1,500 ÷ 10 = $300,區間從 $0 到 $600。實單 100 筆後的平均每筆損益是 −$40,落在區間之外,所以策略停用或退回研究。若實單平均是 $120,就會在區間內,途中某個月虧損也不會改變這個決定。

檢視項目上線前先設定越線時的動作
扣除成本後的平均每筆損益推進分析數字與依公式算出的區間;在第 50、100 筆檢視在檢視時點低於下限:停用或退回研究
最大回撤高於推進分析最大回撤的限額,以美元計任何時候觸及限額:停止交易該策略
每筆滑價回測所用的數字實單滑價持續偏大:以較高成本重算區間

一個實用的習慣,是把每筆實單成交,與規則發出訊號時的價格並排記錄,這樣表中的滑價列就是量測值而非假設值。對第一個策略而言,新手如何建立第一個演算法交易策略中的 30 天路線,正是以這份紀錄收尾。下一步,請拿你現在最信任的策略,數出它測試歷史中的市場環境數,並在下一個檢視時點到來之前,寫下它的平均每筆損益區間與回撤限額。

常見問題

演算法交易能獲利嗎?

有可能,但回測無法定案。問題變成:扣除手續費與滑價後的平均每筆損益,在規則從未見過的資料上、跨越多種市場環境是否仍為正,上線後是否保有該數字的合理比例。通過樣本外、推進分析與參數穩定度檢驗的策略,才有立論基礎;只通過樣本內的,目前還沒有。

什麼是量化績效驗證?

量化績效驗證,是一組檢驗,用來測試策略所報告的績效,在建構它所用的資料之外是否站得住腳。實務上包括:樣本外測試、附損益為正區間計數的推進分析測試、呈現高原而非尖峰的參數方格,以及對照事先固定區間的實單檢視。各項檢驗的及格標準,都在看到結果前寫下。

推進分析應有幾個區間損益為正?

沒有通用的數字,所以要在執行前設定自己的數字並維持不變。許多系統化交易人要求明顯多數的區間損益為正,例如五個中的四個、十個中的七個,同時要求沒有任何單一區間貢獻串接結果的大部分。總和全靠一個區間、其他區間持平的執行,只是名義上通過。

策略實單失效後,應該重新最佳化嗎?

重新最佳化會把實單資料變成樣本內資料,所以要把重新調整後的規則視為新候選策略,而非修復後的舊策略。再度交易前,給它全新的樣本外區塊與全新的推進分析。若實單失敗源自你能指出的結構改變,例如交易時段或跳動點大小的變動,就圍繞新成因重建規則,而不要在舊想法上搜尋新參數。

參考文獻

  • 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.
  • 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.
  • Park, C.-H., & Irwin, S. H. (2007). What Do We Know About the Profitability of Technical Analysis? Journal of Economic Surveys, 21(4), 786–826.
  • Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.