VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 商品與交易時段

當沖與波段交易回測:差異與原因

同一條規則的當沖版與波段版是兩個策略。兩者需要不同的交易時段設定、跳空處理與保證金假設,交易筆數也差異很大,因此應各自測試,並依測試前寫好的規則,以扣除成本後的每筆損益比較。

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

目錄
  1. 策略改為每日收盤前平倉、不再隔夜持有,回測有哪些不同?
  2. 當沖回測要如何模擬時段結束前的出場?
  3. 波段回測需要考慮隔夜跳空與夜盤嗎?
  4. 兩種版本的保證金與持有成本有何不同?
  5. 為什麼當沖策略的交易筆數較多?筆數多是否讓結果更可靠?
  6. 同一條突破規則的當沖版或波段版,該保留哪一個?
  7. 常見問題
  8. References

策略改為每日收盤前平倉、不再隔夜持有,回測有哪些不同?

當沖與波段交易回測有五處設定不同:出場規則、載入的 K 棒資料、停損跨越跳空時的成交方式、每口合約背後的保證金,以及交易筆數。兩者應視為不同策略,各用各的設定回測,再以扣除成本後的每筆損益比較。

當沖(日內交易)是在交易時段結束前把所有部位平倉的交易方式,因此不會有任何一口合約持有過隔夜休市。波段交易則讓部位持有數日或數週,由規則本身出場,而不是由時鐘決定。同一個進場訊號可以同時用於兩種方式,但一旦決定交易能否撐過收盤,回測中幾乎所有後續環節都會跟著改變。只切換「日終平倉」的開關,就把結果稱為「波段版」,等於測了一個策略,卻誤認為另一個。

設定項目當沖版波段版
出場規則收盤前強制出場,加上策略本身的出場僅依規則出場,可能在數日後
載入資料日盤盤中 K 棒全時段盤中 K 棒或日 K 棒
跳空處理交易時段內無跳空;停損在接近設定價處成交停損可能在下一次開盤遠離設定價成交
假設保證金期貨商當沖保證金持有的每一夜都適用交易所原始保證金
年交易筆數數百數十
同一規則的當沖版與波段版,五項設定比較:出場在收盤前或依規則,資料為日盤 K 棒或全時段或日 K 棒,跳空為無或在開盤成交,保證金為當沖保證金或原始保證金,年交易筆數為數百或數十 當沖與波段:五項差異 同一進場,兩種策略 當沖 波段 出場 收盤前 依規則 資料 日盤 全時段或日 K 跳空 無 開盤成交 保證金 當沖 原始 年交易數 數百 數十
兩個版本有五項設定選擇不同,不只是出場時間。表中每一列都是回測設定裡獨立的決定。

大多數五類期貨演算法交易策略都能做成這兩種版本,其中趨勢追蹤規則一旦每天收盤強制出場,表現會大不相同。如果你還在挑第一條規則,30 天打造第一個演算法交易策略的路線建議選定一種持有方式,並在整個第一個專案中固定不變,因為中途更換等於重新開始研究。

當沖回測要如何模擬時段結束前的出場?

當沖策略回測需要一筆明確的出場:委託下在策略最後能交易的那根 K 棒,於下一根 K 棒成交,時間落在實單所用收盤前的幾分鐘。交易時段與出場同樣重要。ES 這類美國指數期貨在平日幾乎全天交易,每天僅有短暫休市,但許多當沖交易人只做現貨股市時段,也就是美國中部時間上午 8:30 至下午 3:00。若回測用一個時段、交易人實際用另一個,強制出場的價格就不同,整份交易明細也跟著改變。交易所可能調整時段,請查看交易所的合約頁面,或使用期貨現在有開盤嗎?,它會以你所在的時區顯示各時段。

次棒執行(next-bar execution)是指在訊號出現的那根 K 棒下單,於下一根 K 棒的開盤價成交,因為訊號 K 棒的收盤價要等該棒結束才知道。用在時段結束前出場時,這個細節容易出錯:

  1. 先決定出場時間。寫成時段內的明確時鐘時間,例如收盤前 10 分鐘,而不是「最後一根 K 棒」。
  2. 找出在該時間之前開盤的最後一根 K 棒。用 5 分鐘 K 棒、下午 3:00 收盤時,下午 2:50 出場代表委託下在 2:50 收盤的 K 棒,於 2:50 開盤的 K 棒成交。
  3. 確認成交的 K 棒仍在交易時段內。若委託下在當天最後一根 K 棒,「下一根 K 棒」就是明天的開盤,部位在你不知不覺中已持有過夜。
  4. 出場與其他交易一樣計入成本。收盤前的市價單會有滑價;對流動性高的合約,每邊一個跳動點是合理的起始假設。
  5. 確認出場 K 棒之後沒有任何進場。規則若在下午 2:55 再進場、3:00 出場,又是另一個策略。
一個交易日的時間軸,使用 5 分鐘 K 棒:強制出場委託下在 2:50 收盤的 K 棒,於收盤前的下一根 K 棒成交;以委託 K 棒自身收盤價成交,被標示為無法交易的價格 在能成交的 K 棒出場 範例:5 分鐘 K 棒,2:50 出場 委託 成交 無法成交的價格 開盤 2:50 收盤 同一根收盤價並非真實成交 結論:下一根 K 棒、時段內成交
強制出場必須落在策略能交易的 K 棒上,並在下一根 K 棒成交。以同一根 K 棒的收盤價出場,用的是交易人不可能拿到的價格。

交易時段、出場時間與成交 K 棒定好之後,其餘盤中工作依照如何建立並測試當沖演算法的步驟進行。由於強制出場位於你定義的交易時段內,AlphaPrime(Valynox)GPU 回測會對這筆出場計入手續費與滑價,並於下一根 K 棒成交,與候選策略中的其他委託一致。

波段回測需要考慮隔夜跳空與夜盤嗎?

需要:期貨波段交易回測必須決定夜盤 K 棒是否納入資料,也必須讓停損在跳空後以第一個可成交價成交,而不是以停損價成交。隔夜跳空是前一個時段最後價格與下一個時段第一個價格之差,產生於市場休市或流動性偏低之時。停損單設在昨日收盤價下方,若開盤直接落在其下,並不能提供保護;成交價就是開盤價,多出來的虧損要記入回測。

夜盤的決定要先做,因為它改變「隔夜」的意思。以台指期為例,依 TAIFEX 合約頁面,日盤為台灣時間上午 8:45 至下午 1:45,夜盤為下午 3:00 至次日上午 5:00(交易所可能調整這些時段)。持有過夜的波段策略會面對兩種情況:

  • 納入夜盤 K 棒。停損可在夜間以接近設定價的價格觸發,但夜盤流動性較低,滑價應設得比日盤高。此時的跳空是夜盤收盤到日盤開盤之間的缺口,通常較小。
  • 排除夜盤 K 棒,或僅用日 K 棒。回測每天只看到一次從收盤到開盤的跳空,缺口內的所有停損都以開盤價成交。這是較簡單也較嚴苛的模型;若交易人不盯盤也不交易夜盤,這就是正確的模型。
一筆多單的兩根日 K 棒,中間有一個停損:第一根收在停損上方,下一根開在停損下方,因此真實成交價是開盤價,而非簡化回測假設的停損價,兩者之間的缺口是額外虧損 跳空會跳過停損 多單示意圖 額外虧損 停損 假設成交價 實際成交價 被跳過的停損以開盤價成交 結論:波段回測要模擬跳空成交
市場開在停損之外時,合理的成交價是開盤價。兩支箭頭之間的陰影缺口,是簡化回測永遠不會記錄的虧損。

無論選哪一種情況,實單帳戶都必須處於同一種情況。以僅含日盤的 K 棒回測、卻持有過夜,並在實單中使用夜盤停損,所呈現的回撤會與交易人實際經歷的不同。資料面的取捨,詳見期貨回測的日盤與全時段 K 棒。規則面則要確認回測引擎讓跳空穿越的停損在開盤價成交;若以停損價成交,波段版的回撤就被低估,而從未面對這種跳空的當沖版,相比之下會比實際更差。

兩種版本的保證金與持有成本有何不同?

隔夜部位每口須備足交易所的原始保證金,且每一夜都承擔跳空風險;當沖部位則依期貨商允許的較低當沖保證金運作,因此能撐過回測回撤的帳戶規模,兩個版本並不相同。原始保證金是交易所對收盤後仍持有的部位,每口要求的押金。當沖保證金是期貨商可能提供的較小押金,適用於收盤前已平倉的部位;是否提供由期貨商決定,也可能在短時間內取消。

項目當沖版波段版
每口保證金期貨商當沖保證金,較低交易所原始保證金,較高,每晚重新檢查
由誰設定期貨商交易所,期貨商可另加
每筆暴露時間數分鐘至數小時,限於同一時段數日,包含期間的每個夜晚與週末
單筆最大虧損受盤中波動範圍與滑價所限可能超出停損,幅度為一次跳空的大小
回測估算用的帳戶規模當沖保證金加當沖版的回撤原始保證金加波段版的回撤,再加跳空預留
一口合約,僅示意相對大小:當沖版使用期貨商設定的較低當沖保證金,只在單一時段內承擔風險;波段版使用交易所設定的較高原始保證金,且暴露時數多得多,包含夜間 隔夜成本更高 一口,僅示意相對大小 保證金 持有時數 期貨商 交易所 時段內 含夜間 當沖 波段 當沖 波段 隔夜多佔保證金與時數 結論:波段以原始保證金估算
隔夜持有每口需要更多保證金,也有多得多的時數暴露在外,包括形成跳空的時段。當沖版不會遇到第二列的情況。

實際影響在部位大小。同一條權益曲線,對照較小的當沖保證金會得出較多口數;對照原始保證金加跳空預留,則得出少得多的口數。以當沖保證金估算部位的波段回測,是持有的第一晚就會失效的計畫。保證金如何把回測回撤轉成所需帳戶規模,詳見期貨槓桿與保證金如何改變回測回撤。保證金要求由交易所與期貨商設定,並隨波動率變動,估算任一版本之前,請先從交易所合約頁面取得最新數字。

持有成本是第二項差異。期貨的波段部位不像融資買股那樣需支付資金利息,但會遇到轉倉:跨越轉倉持有的交易,必須從舊合約出場、再進入新合約,等於多出兩次成交,各有手續費與滑價。當沖版從不需要轉倉。波段回測要把轉倉當成成本計入,否則波段版會得到實單中並不存在的小優勢。

為什麼當沖策略的交易筆數較多?筆數多是否讓結果更可靠?

規則必須在收盤前平倉,持有時間只有數小時,因此同樣的歷史資料中,完成的交易筆數遠多於持有數日的波段版;筆數越多,平均每筆損益與回撤數字的不確定性就越小。這裡的可靠度是狹義的:指幾筆交易不同時,平均每筆損益會偏移多少。它不代表策略更好。每筆優勢極小的當沖版可以量得相當精確,卻仍輸給成本。

波段這一側,從真實報表不難看出。下方這次回測出自 AlphaPrime 的引擎,使用 ES 日 K 棒,期間為 2019-01-02 至 2025-06-30,多空皆做,一口,每筆交易都計入手續費與滑價。測試的是一條替代規則,以標準差條件作為唯一的進場與出場,沒有停損、停利或濾網,並不是本文其餘部分討論的突破規則。它也是搜尋在嘗試的 1,024 個候選中留下的唯一一個,依報酬相對回撤挑選。事後挑出留下的那一個,數字會偏好看:這些數字只顯示該候選在這段歷史上的表現,不代表這條規則能賺多少,也不是讀者該預期的結果。

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

指標結果
淨利(已平倉)$51,142.5
最大回撤$15,520
交易筆數151
勝率59.6%
獲利因子1.436
平均每筆$338.69
在場時間14.83%
比較交易筆數與期間長度。持有過夜的日 K 棒規則,數年內只完成少數交易,因此摘要中的其他數字都建立在小樣本上。
比較交易筆數與期間長度。持有過夜的日 K 棒規則,數年內只完成少數交易,因此摘要中的其他數字都建立在小樣本上。 ES · 日 K · 2019-01-02 至 2025-06-30 · CPU 引擎回測

六年半完成 151 筆交易,等於每月只有幾筆。類似想法以 5 分鐘 K 棒做成的盤中版本,每天強制平倉,在同樣的歷史上通常每週會完成數筆交易。筆數之所以重要,在於平均值的行為方式。值得記住的公式只有一條:

平均每筆損益的不確定性 = 單筆損益的離散度 ÷ √N

這裡的單筆損益的離散度,是個別交易結果通常偏離平均值多遠(即標準差),N 是已完成的交易筆數,√N 是其平方根。平方根增長緩慢,所以要把不確定性減半,需要四倍的交易筆數。

假設性範例

假設單筆交易結果通常偏離平均 $600,扣除成本後的平均每筆損益為 $90。150 筆交易時,不確定性約為 $600 ÷ 12.2 ≈ $49,因此真實平均可能接近 $40,也可能接近 $140。600 筆時約為 $600 ÷ 24.5 ≈ $24。2,400 筆時約為 $600 ÷ 49 ≈ $12。交易筆數每增加四倍,圍繞同一個 $90 的區間就減半。

假設性範例:平均每筆損益 90 美元,不確定性區間在 150 筆時約為正負 49 美元,筆數為四倍時為 24 美元,為十六倍時為 12 美元,因為區間等於單筆損益的離散度除以交易筆數的平方根 交易數 4 倍,區間減半 假設性範例:同樣的平均每筆 $90 150 筆 ±49 美元 4 倍筆數 ±24 美元 16 倍筆數 ±12 美元 平均 $90 區間 = 單筆離散度 ÷ √N 結論:減半需 4 倍交易數
平均每筆損益的不確定性,隨交易筆數的平方根縮小:筆數四倍,區間減半。

由此得出兩點提醒。第一,當沖版的大量交易,每筆都有成本,而成本占一段小得多的每筆毛損益的比例大得多,所以它的精確度,往往是對一個接近零的數字的精確度。第二,若波段版是眾多候選中最好的一個,小樣本的問題會更嚴重:Bailey、Borwein、López de Prado 與 Zhu(2014)指出,嘗試的變體越多,要從運氣中分辨出最佳者,所需的歷史就越長。因此波段版需要更長的歷史、能產生更多樣本外(OOS)交易的推進分析設計,或更嚴格的採用規則。

同一條突破規則的當沖版或波段版,該保留哪一個?

把突破規則跑兩次,一次是時段結束前出場的當沖版,一次是續抱的波段版,然後保留通過測試前就已寫好的規則的版本,而不是淨損益較大的版本。突破規則是指價格升破最近 N 根 K 棒的最高價(或跌破最低價)時進場,理念是新的極值會開啟一段行情。兩個版本使用相同的進場;當沖版加上強制出場,波段版加上依規則的出場,例如收盤回到通道內。

事先寫好的規則應列明數字與門檻。比較兩個版本時,可用以下一組:

  1. 平均每筆毛損益至少為一買一賣成本的三倍。這能保護結果,免受事後證明過於樂觀的滑價估計影響。
  2. 最大回撤須在預定帳戶承受範圍內,並以該版本實際需要的保證金計算:當沖版用當沖保證金,波段版用原始保證金加跳空預留。
  3. 完成足夠的交易筆數,使上一節的不確定性區間不會觸及零。
  4. 交易人願意承擔的隔夜暴露。無法盯夜盤的交易人,應把每個隔夜部位視為睡眠的代價,而不只是一個數字。

假設性範例

項目當沖版波段版
年交易筆數48040
平均每筆毛損益$80$365
一買一賣成本$45$45
扣成本後平均每筆損益$35$320
成本占平均每筆毛損益的比例56%12%
最大回撤$6,000$14,000
五年淨損益$84,000$64,000
隔夜暴露無每筆交易
通過事先寫好的規則?未通過:毛損益不到成本的三倍通過,但帳戶需備有 $14,000 加原始保證金

當沖版淨損益較大、曲線較平滑,卻通不過第一項測試:毛優勢 $80 不到 $45 一買一賣成本的兩倍,滑價稍微增加就會吃掉大半。波段版通過了成本檢驗,接著要評估交易人能否一年持有 40 個隔夜部位,並承受較大的回撤。

假設性突破規則的兩種測試:當沖版每年 480 筆交易,扣成本後每筆 35 美元,成本占 56%,回撤較小,沒有隔夜暴露,未通過事先寫好的規則;波段版 40 筆交易,每筆 320 美元,成本占 12%,回撤約為 2.3 倍,每筆交易都持有過夜,通過 依每筆比較 假設性突破規則,兩種版本 當沖 波段 年交易筆數 480 40 扣成本後 $35 $320 成本占比 56% 12% 最大回撤 較小 2.3 倍大 隔夜 無 每筆都有 通過規則? 未通過 通過
同一條突破規則以兩種方式測試,得到兩份必須以扣成本後每筆損益比較的報表。只看淨損益,會選中未通過的那個版本。

注意,兩個版本並非互相抵銷的對手。帳戶規模夠大、又能承受跳空的交易人,可以跑波段版;想每晚不留倉的交易人,可以繼續尋找毛優勢能通過成本檢驗的當沖規則。兩者都不該做的,是先依淨損益挑選,再調整通過規則去配合勝出者。

下一步:取一條你已有的突破規則,把上面四項門檻寫在紙上;接著以日盤 K 棒執行當沖版,並在收盤前十分鐘強制出場,再以全時段或日 K 棒執行波段版,讓跳空穿越的停損以開盤價成交。把兩份結果填入表格,比較哪一個通過你在看結果之前寫好的規則。

常見問題

當沖回測與波段回測有何不同?

當沖回測強制每個部位在收盤前平倉,使用日盤 K 棒,不會遇到隔夜跳空,並可依期貨商當沖保證金估算部位。波段回測讓規則在數日後才出場,必須決定資料是否含夜盤 K 棒,必須讓跳空穿越的停損在下一次開盤成交,並依交易所原始保證金估算部位。同一個進場訊號,在兩者中產生不同的交易明細、回撤與成本結構。

波段策略回測需要考慮隔夜跳空嗎?

需要。市場開在停損價之外時,合理的成交價是開盤價,停損與開盤之間的差額是實際的虧損。以停損價成交這類停損的回測,會低估波段版的回撤。也要決定資料是否含夜盤 K 棒,因為這會改變跳空的位置與通常的大小。

為什麼當沖策略的交易筆數較多?

因為必須在收盤前平倉,每筆交易只能持續一個時段的一部分,所以同樣的歷史中,完成的交易筆數遠多於持有數日的規則。筆數較多,使平均每筆損益與回撤數字的不確定性較小,因為不確定性隨交易筆數的平方根縮小。這並不讓優勢變大;當沖版每筆毛損益較小,成本因此占較大比例。

同一策略的當沖版與波段版,哪個比較好?

沒有哪一個全面勝出。以測試前寫好的規則比較:平均每筆毛損益對一買一賣成本、最大回撤對各版本所需的帳戶規模、足以信任平均值的交易筆數,以及交易人是否願意持倉過夜。保留通過規則的版本,不要先依淨損益挑選再調整規則。

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.
  • Taiwan Futures Exchange. Mini-TAIEX Futures. https://www.taifex.com.tw/enl/eng2/mTX