回測的 K 棒內成交:同一根 K 棒先碰停損還是停利?
K 棒只記錄開盤、最高、最低與收盤,所以同一根 K 棒同時碰到停損與停利時,回測無從得知哪一個先成交,只能套用假設。請採悲觀設定(先停損),跳空的委託以開盤價成交,並把悲觀與樂觀結果之間的差距,當成策略有多依賴 K 棒內運氣的衡量。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
回測如何判斷一根 K 棒內是先碰到停損還是停利?
回測中的 K 棒內成交,來自假設,不是資料:一根 K 棒只記錄開盤、最高、最低與收盤,所以同一根 K 棒同時碰到停損與停利時,軟體無從得知哪個先成交。常見的預設是先成交停損。看任何報表之前,先查清楚你的軟體採用哪種假設。
K 棒內成交,是在 K 棒區間內某個價位、而不是在開盤或收盤價成交的委託。停損與停利是最常見的情況:停損是價格到達設定價位就以虧損出場的待成交委託,停利是價格到達設定價位就以獲利出場的待成交委託。把規則放在舊價格上重播,正是回測的意思;軟體每根 K 棒只有四個數字,沒有它們之間的價格路徑紀錄。因此只能從三種成交排序方式中挑一種:
- 悲觀:若兩個價位都落在 K 棒區間內,先成交停損。
- 樂觀:若兩個價位都落在 K 棒區間內,先成交停利。
- 小 K 棒重播:把這根 K 棒拆成同一商品的較小 K 棒,較小 K 棒先碰到哪個價位,就先成交哪個。
本文要證明的主張簡單明瞭:只在樂觀假設下才有效的策略,就是無效的策略。以下說明為何這是正確的標準,以及如何衡量你自己的策略離這個標準有多遠。
為什麼一根 K 棒會同時碰到停損與停利?
只要 K 棒的區間(最低到最高的距離)比停損到停利的距離寬,一根 K 棒就會同時碰到兩個價位。想像一台保全攝影機,每小時只在開始與結束時各拍一次房間,並記下這一小時內任何人到過的最高點與最低點。你知道有人碰過天花板與地板,卻不知道哪個先。
兩個因素使這種情形常見。第一是 K 棒週期:指數期貨一根 30 分鐘 K 棒涵蓋的點數,常比當沖交易人的停損加停利還大,日 K 棒幾乎一定如此。第二是波動率:行情快的日子,同樣的 K 棒週期涵蓋的區間大得多。CFTC 與 SEC 關於 2010 年 5 月 6 日的報告,記載 E-mini S&P 500 的價格在數分鐘內大幅下跌又回升,因此那天下午任何十五分鐘以上的 K 棒,都包含一次完整的來回,而它的四個價格把這一切完全藏起來。同一根 K 棒,在一種假設下會成交多單交易人的停損,在另一種假設下會成交停利。
受影響交易的比例,是可以量測的數字。數出持有部位期間,待成交的停損與停利同時落在區間內的 K 棒數,再除以交易筆數。這個比例接近零的策略,幾乎沒有 K 棒內的問題。這個比例達到全部交易三分之一的策略,在相當程度上是對成交假設下注,下一節說明如何替這個賭注定價。
悲觀還是樂觀:該採用哪種成交假設?
所有決策都採悲觀假設,樂觀假設只用來量測差距。悲觀結果是底線:實單交易的實際順序,只會與它相同或更好。樂觀結果是天花板:實單交易只會與它相同或更差。兩者之間的距離,直接衡量回測有多少依賴 K 棒內的運氣。Pardo(2008)提出一般性的論點:策略評估應建立在保守、貼近現實的假設上,而成交順序正是這個原則有具體開關的地方之一。
| 設定 | K 棒同時碰到兩個價位時 | 實單交易與報表比較 | 所需條件 |
|---|---|---|---|
| 悲觀(先停損) | 以停損價成交停損 | 只會與報表相同或更好 | 無需額外資料 |
| 樂觀(先停利) | 以停利價成交停利 | 只會與報表相同或更差 | 無需額外資料 |
| 小 K 棒重播 | 成交較小 K 棒先碰到的那個價位 | 與報表接近,最小那根 K 棒內除外 | 整段測試期間的較小 K 棒資料 |
假設性範例
多單在 100 進場,停利在上方 8 點的 108,停損在下方 4 點的 96。下一根 K 棒 100 開盤,最高 109、最低 95,101 收盤。悲觀設定成交停損:−4 點。樂觀設定成交停利:+8 點。那半小時的 1 分鐘 K 棒顯示,價格到 95 是在第 7 分鐘,到 109 是在第 22 分鐘,所以小 K 棒重播也成交停損:−4 點。一根 K 棒,紀錄結果擺動 12 點,而且只有重播用到了實際發生什麼的資訊。
一套實用做法:其他全部不變,把策略跑兩次,一次悲觀、一次樂觀,記下各自的淨損益。若悲觀那次在扣除成本後仍為正,且樂觀那次不到它的約兩倍,代表策略的優勢大多不在有歧義的 K 棒裡。若悲觀那次為負、樂觀那次大幅為正,這就是一個靠成交假設的策略,再多其他檢驗也補救不了。
回測如何處理跳空成交?
實際的回測,會把遇到跳空的停損或停利,以下一根 K 棒的開盤價成交,而不是委託價,因為委託價根本沒有成交過。跳空是前一根 K 棒收盤與下一根開盤之間的跳躍,中間沒有任何成交,最常出現在隔夜休市或週末。落在跳空範圍內的停損,由超過它的第一筆成交觸發,也就是開盤價。SEC 關於停損單的投資人公告,針對實際市場也是同一個意思:停損單在到達停損價時變成市價單,行情快速或跳空時,可能在遠離停損價處成交。
假設性範例
第 1 天收盤 500,持有多單,停損在下方 10 點的 490。第 2 天因隔夜消息,開盤 475。正確的成交是開盤價 475,虧損 25 點。若回測以 490 成交,記錄的虧損是 10 點,比任何交易人實際能做到的好 15 點,而且歷史中的每次跳空都重複這項好處。
由此得到兩項結論。第一,只有在市場連續成交經過停損價時,停損才限制得住虧損,所以隔夜部位的成本,再窄的停損也消除不了;評估策略的回撤時,要把這一點算進去。第二,跳空的處理,與每一筆成交的時點相連。在 K 棒收盤算出的訊號,不能在同一個收盤價成交,這是回測中的前視偏誤裡最常見的洩漏,而停損也不能在下一根 K 棒跳過的價位成交。AlphaPrime(Valynox)在其GPU 回測中採用下一根 K 棒成交,並在每次評估內計入手續費與滑價,所以今天收盤的訊號,最早在明天那根 K 棒成交,這是這套紀律的前半。後半是你的成本設定:在跳空或快速行情中成交的停損,滑價比平靜時的限價進場大,而回測裡的交易成本這篇指南,說明如何設定一個同時涵蓋兩者的數字。
什麼是 K 棒放大器(Bar Magnifier),較小的 K 棒何時能決定成交順序?
K 棒放大器縮小 K 棒內的問題,但無法消除。K 棒放大器是回測的一項功能,用同一商品較小的 K 棒(通常是 1 分鐘或逐筆資料)重播每根測試 K 棒,讓價格先到停損還是停利的順序可以讀出來,而不是靠假設。大多數 K 棒,這樣就解決了。在所用的最小 K 棒內,同樣的四個價格問題會回來,這時就套用悲觀或樂觀設定。
- 找出有歧義的 K 棒。一根 30 分鐘的測試 K 棒,區間同時涵蓋待成交的停損與停利。
- 展開它。同樣這 30 分鐘,載入成三十根 1 分鐘 K 棒。
- 逐根往前走。第一根區間碰到任一價位的 1 分鐘 K 棒,就決定成交,以那個價位成交。
- 套用備援假設。若那一根 1 分鐘 K 棒同時碰到兩個價位,就由所選的假設決定,與大 K 棒的處理方式完全相同。
當停損到停利的距離,比較小 K 棒的一般區間寬時,較小的 K 棒就能決定順序。指數期貨的 1 分鐘 K 棒,區間通常只有幾個跳動點;相距 20 個跳動點的停損與停利,幾乎不會同時落在同一根裡,所以重播幾乎解決了所有情況。3 個跳動點的停損,在相當比例的 1 分鐘 K 棒裡仍有歧義,這時只有逐筆資料能再往下走。這個方法有兩項代價:較小 K 棒的資料必須完整涵蓋整段測試期間,不能有缺口;而且每根 K 棒需要多出許多運算,所以搜尋大量候選策略時,無論你用的是什麼處理器或顯示卡,都會跑得比較慢。合理的工作順序,是先用悲觀設定搜尋並排名,再只用較小 K 棒重播入圍者,看它們能取回多少悲觀設定的損失。
K 棒內成交假設,對停損窄的策略影響多大?
停損與停利愈窄,同時碰到兩者的 K 棒愈多,悲觀與樂觀結果的差距愈大,所以停損窄的策略必須在悲觀設定下通過,否則就是沒有通過。在 5 分鐘 K 棒上,離進場兩個跳動點的停損,在交易持有期間會落在大多數 K 棒的區間內;十六個跳動點遠的停損,只會落在少數 K 棒內。因此,成交假設在前一種情況決定了大部分交易,在後一種幾乎不決定任何交易。
假設性範例
一條日內規則,用 5 分鐘 K 棒,分三次測試,停損與停利設在離進場 4、8 與 16 個跳動點,已計入成本。4 個跳動點時,38% 的交易有一根 K 棒同時碰到兩者;悲觀淨損益為 −$1,900,樂觀為 +$6,200,底線與天花板相差 $8,100。8 個跳動點時,17% 的交易有歧義;悲觀 +$900,樂觀 +$3,400。16 個跳動點時,5% 有歧義;悲觀 +$1,500,樂觀 +$1,800。只有 16 個跳動點的版本,結果幾乎不受成交設定影響,而且只有 8 與 16 個跳動點的版本,在底線也是正的。
同樣的效應在期貨之外也會出現。現股的日內停損面臨同樣的四個價格問題,而且每筆成本更高,所以台股現股當沖回測,必須同時採悲觀成交與完整的成本,結果才有意義。要把跳動點距離換成你自己合約的金額,免費的期貨合約與損益計算機會給出每跳動點價值與一筆交易的損益。
相反的情況,是完全沒有待成交停損或停利的規則。當每個進場與出場,都是 K 棒收盤產生訊號、下一根 K 棒開盤成交,就沒有 K 棒內的排序問題:成交價就是開盤價,影響結果的只有開盤價與每筆成本。下面這次回測就是這種情況。它測試 ES 日 K 棒,期間 2019-01-02 至 2025-06-30,多空皆做,一口,只用一條 ATR 通道規則進出場,沒有停損、沒有停利、沒有濾網。這條規則是用標準指標做成的替身(ATR 平均真實區間決定通道寬度),不是本文的主題;放在這裡,是因為它的成交沒有歧義。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。ES 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $25。
| 數字 | 結果 |
|---|---|
| 淨利(已平倉) | $78,397.5 |
| 最大回撤 | $56,087.5 |
| 交易筆數 | 32 |
| 勝率 | 50% |
| 獲利因子 | 1.881 |
| 平均每筆 | $2,449.92 |
| 在場時間 | 95.68% |

這些數字要如實去讀。這是搜尋嘗試 1,024 個之後留下的那一個候選策略,依報酬相對回撤挑出,而事後挑出留下的那一個,會讓它被美化;其他候選策略表現較差,多次嘗試中的最佳者,永遠帶有挑選加成。三十二筆交易是小樣本,$56,087.5 的回撤相對於 $78,397.5 的淨損益,相對獲利而言是相當深的坑。這些都不說明 ATR 通道會賺多少,也不說明讀者能期待什麼。上表確實呈現的,是一份結果只隨開盤價與每筆 $45 成本變動的報表,與上面窄停損的例子形成對比:在那個例子裡,同一條規則的 4 個跳動點版本,視一項設定而定,結果從虧損擺盪到數倍大的獲利。
你的下一步:打開目前策略的設定,記下啟用的是哪種成交假設,只翻轉這一個開關、其他完全不變,跑兩次。把兩個淨損益並排寫下,再數有多少筆交易的 K 棒同時碰到兩個價位。若悲觀那次未通過,或兩個結果的差距超過你事先決定可接受的範圍,就先放寬價位,或把出場改到下一根 K 棒開盤,再重新測試,之後才做其他檢驗步驟。
常見問題
停損與停利在同一根 K 棒都碰到時會怎樣?
回測無法分辨哪個先到,因為 K 棒只記錄開盤、最高、最低與收盤。它套用的是一項設定:悲觀軟體成交停損,樂觀軟體成交停利,有 K 棒放大器的軟體則讀取較小的 K 棒,找出真正的順序。讀任何報表之前,先查這項設定,決策以悲觀設定為準。
回測中的 K 棒放大器是什麼?
K 棒放大器用同一商品較小的 K 棒(例如 1 分鐘 K 棒,位於 30 分鐘 K 棒之內)重播每根測試 K 棒,並成交較小 K 棒先碰到的價位。大多數 K 棒的停損或停利順序,這樣就能解決。在所用的最小 K 棒內,排序假設仍然適用,所以它縮小不確定性而不是消除,而且需要整段期間完整的較小 K 棒資料。
回測如何處理跳空成交?
實際的回測,會把被跳空越過的停損或停利,以下一根 K 棒的開盤價成交,因為委託價沒有成交過。以委託價成交,記錄的是比任何人能得到的更好的交易,而且每次跳空都重複這項好處。因此跳空停損的虧損會大於停損距離,沒有任何停損寬度能限制它。
K 棒內假設會改變回測結果嗎?
會,改變多少,取決於一根 K 棒同時涵蓋停損與停利的頻率。對日內 K 棒上價位離進場只有幾個跳動點的規則,這項假設可決定三分之一以上的交易,並把淨損益從虧損翻成獲利。對價位寬、或在下一根開盤出場且沒有待成交委託的規則,這項假設幾乎不改變任何東西。兩種設定都跑,比較兩個結果,就知道你的策略在哪裡。
References
- Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.
- Staffs of the CFTC and SEC (2010). Findings Regarding the Market Events of May 6, 2010. Report to the Joint Advisory Committee on Emerging Regulatory Issues, September 30, 2010.
- U.S. Securities and Exchange Commission. Stop, Stop-Limit, and Trailing Stop Orders (Investor Bulletin). https://www.investor.gov/introduction-investing/general-resources/news-alerts/alerts-bulletins/investor-bulletins-15

