MultiCharts 細部回測:K棒內成交在哪開、結果差多少
MultiCharts 細部回測在 Format Strategies → Properties → Backtesting 分頁開啟,用 1 分 K 或 Tick 資料補出每根 K 棒內的價格路徑,讓同一根 K 棒內同時碰到停損與停利的交易算得出先後。結果差多少,取決於策略有多少筆交易在同一根 K 棒內進出。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
MultiCharts 細部回測是什麼?為什麼一般回測的成交價會騙人?
MultiCharts 細部回測(Bar Magnifier)是在 Format Strategies → Properties → Backtesting 分頁開啟的功能:用更細的資料(1 分 K 或 Tick)補出每根 K 棒內的價格路徑,讓同一根 K 棒內同時碰到停損與停利的交易算得出先後。結果差多少,取決於策略有多少筆交易在同一根 K 棒內進出。
一般回測是只用每根 K 棒的開盤、最高、最低、收盤四個價格來決定成交的回測。這四個價格像一趟車程的起點、終點、最高速和最低速:你知道車子 8 點出發、9 點到達,卻不知道它中途先經過哪裡。一根 60 分 K 內,價格可能先跌到最低再漲到最高,也可能先漲後跌,兩條路徑畫出來是同一根 K 棒。
停損是價格走到不利方向的某個價位時,自動出場認賠的單;停利是價格走到有利方向的某個價位時,自動出場獲利的單。只要這兩個價位都落在同一根 K 棒的高低點之間,平台就得決定哪一張先成交。沒有 K 棒內的資料,它只能用一條假設的路徑;假設跟真實路徑不同時,回測算出的那筆交易就是錯的。各家平台對這件事的處理方式不同,本文只談 MultiCharts。
細部回測要開哪裡?Bar Magnifier 設定步驟
Bar Magnifier 在策略屬性的 Backtesting 分頁裡,勾選後選一個細部解析度,再重新計算策略就會生效。MultiCharts 的中文介面譯名會隨版本不同,下面每一步都附英文原名,對照英文找比較不會走錯。
- 在圖表上開啟 Format Strategies(格式化策略)。圖表右鍵選單或 Format 選單都找得到;先確認要測的策略已經套在這張圖上。
- 按 Properties(屬性)。這裡是整張圖的策略屬性,不是單一訊號的輸入參數。
- 切到 Backtesting(回測)分頁。同一個分頁裡還有手續費、滑價和初始資金等設定,這些照原本的值不要動,才能比較開與不開的差別。
- 勾選 Use Bar Magnifier 並選擇細部解析度。常見的選項是 1 分鐘、1 秒或 1 Tick。解析度越細,判定越接近真實順序,需要的資料也越多(下一節說明)。
- 按確定後對圖表執行 Recalculate(重新計算策略)。重新計算之後再打開 Strategy Performance Report(策略績效報告),和未開啟前存下的報告對照。
兩個容易混淆的地方。第一,Bar Magnifier 只影響「成交價怎麼判定」,策略的訊號仍在 K 棒收盤時計算;要讓訊號在棒內隨時計算,是另一個叫 Intra-bar Order Generation(棒內下單)的設定,兩者可以分開開關。第二,細部資料是 MultiCharts 從同一個資料來源另外載入同一個商品、同一段期間的更細資料,不是從原本的 K 棒推算出來,所以資料來源必須真的有這段細資料。
停損停利在同一根 K 棒怎麼算?
不開細部回測時,MultiCharts 只能依內建的假設決定停損和停利哪張先成交;開了之後,它依細部資料顯示的真實先後判定,同一筆交易的結果可能因此從賺變賠,或從賠變賺。兩種算法的規則完全一樣,差的只是「價格先碰到哪一條線」這個事實。
| 情況 | 不開 Bar Magnifier | 開 Bar Magnifier |
|---|---|---|
| 棒內只碰到停損或只碰到停利 | 照碰到的那張單成交 | 結果相同 |
| 棒內同時碰到停損與停利 | 依平台假設的路徑決定先後 | 依細部資料的真實先後決定 |
| 進場與出場在同一根 K 棒 | 整根棒的順序都是假設 | 進場後的路徑依細部資料判定 |
| 出場在下一根或更後面的 K 棒 | 不受影響 | 不受影響 |
假設範例
一支 NQ 的 60 分 K 策略,在 18,000 點做多,停損 20 點(17,980)、停利 40 點(18,040),兩張單都掛在同一根 K 棒內。這根 K 棒的最低是 17,975、最高是 18,045,所以兩個價位都被碰到了。不開 Bar Magnifier,平台依假設先成交停損,這筆記為 −20 點;開了 Bar Magnifier,1 分鐘資料顯示價格先漲到 18,045 再回落,停利先成交,這筆記為 +40 點。同一根 K 棒、同樣的單,相差 60 點。以 NQ 每點 20 美元計算,是 1,200 美元的差距,還沒算手續費和滑價。
範例裡用到的每點 20 美元、最小跳動 0.25 點(5 美元)來自 CME 的 E-mini Nasdaq-100 合約規格;交易所可能調整這些值,查最新規格以 CME 的合約頁為準,或用期貨合約計算器換算點數與金額。停損的距離越近、停利的距離越近,兩個價位同時落在一根 K 棒內的機率就越高,所以短停損的日內策略受這件事的影響最大;停損型式怎麼選,見期貨策略的停損設計。
細部回測需要什麼 Tick 資料?速度會慢多少?
細部回測需要同一個商品、同一段期間、比圖表 K 棒更細的資料,回測時間大致隨每根 K 棒被切成幾段而增加,實際快慢取決於處理器與資料量。一根 60 分 K 用 1 分鐘資料補路徑,平台要多讀 60 根小 K 棒;用 Tick 資料,要讀的筆數依市場成交量而定,遠多於 60。
| 細部解析度 | 需要的資料 | 一根 60 分 K 要多讀多少 | 還剩下的不確定 |
|---|---|---|---|
| 1 分鐘 | 同一段期間的 1 分 K | 60 根 | 停損與停利落在同一根 1 分 K 內時,仍是假設 |
| 1 秒 | 同一段期間的秒 K | 約三千六百根(60 分 × 60 秒) | 同一秒內的順序仍是假設 |
| 1 Tick | 逐筆成交資料 | 依成交量而定,遠多於 60 | 幾乎沒有,但資料最大、檔案最難完整 |
實際做法分三步。第一,先確認資料來源的細部資料涵蓋整段回測期間:中間缺一段,那段的 K 棒就補不出路徑。第二,先把圖表的回測期間縮短到一、兩個月試跑,記下花的時間,再按比例放大到全期間;處理器、記憶體和資料筆數不同,同一個設定在兩台電腦上的時間可能差很多。第三,先用 1 分鐘跑一次看結果有沒有變,有變再決定是否換成 Tick;大多數日內策略的差距在 1 分鐘解析度就已經看得出來。細部資料本身的品質也要檢查,缺漏和錯誤的 Tick 會直接寫進成交價,回測資料品質一文列了檢查項目。
開細部回測結果差多少?怎麼比較
差多少沒有通用的答案,唯一可靠的做法是同一支策略開與不開各跑一次,逐筆對照;差距會集中在同一根 K 棒內同時碰到停損與停利的那些交易。下面先說比較的方法,再用本文的 NQ 日線回測說明哪一類策略理論上幾乎不受影響。
- 不開 Bar Magnifier 跑一次,把 Strategy Performance Report 的交易清單匯出存檔。
- 只改 Use Bar Magnifier 這一個設定,其他手續費、滑價、資料期間全部不動,再跑一次並匯出。
- 以進場時間對齊兩份清單,標出出場價不同的筆數。出場在後面 K 棒的交易兩邊應該一樣;不一樣,代表改到的不只這個設定。
- 對照三個數字:交易筆數、淨利、同根 K 棒出場的筆數。同根 K 棒出場的筆數佔總筆數的比例,就是這支策略對 K 棒內順序的依賴程度。
為了說明哪種策略不太受影響,這裡放一個 AlphaPrime (Valynox) 的真實回測。這次搜尋測的是 NQ 日線、2019-01-02 到 2025-06-30、多空雙向、一口,規則是標準差通道做為唯一的進出場條件,沒有停損、沒有停利、沒有濾網,在次根 K 棒開盤成交。它是用標準指標組成的代用規則,不是細部回測本身的測試;表中是搜尋嘗試的 1,024 個候選中,依報酬對回撤留下的一個,事後挑出留下的那個會美化結果,所以這些數字不代表這個規則或這個指標賺了這些錢,也不是讀者可以預期的結果。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。
| 項目 | 結果 |
|---|---|
| 淨利(已平倉) | $116,360 |
| 最大回撤 | $110,535 |
| 交易筆數 | 35 |
| 勝率 | 54.29% |
| 獲利因子 | 1.487 |
| 平均每筆 | $3,324.57 |
| 在場時間 | 95.01% |

推理如下。這個規則只有一張市價單在次根 K 棒開盤成交,棒內沒有任何掛著等待觸發的價位,所以 Bar Magnifier 要判定的「哪張單先碰到」這個問題根本不存在;35 筆交易、95.01% 的在場時間也說明每筆交易都跨越許多個交易日。把它匯入 MultiCharts 後開與不開細部回測,成交價理論上不會改變。但這是推理,不是開與不開的實測對照;要確認,仍是上面的四個步驟。AlphaPrime 的回測本來就以次根 K 棒成交、每筆計入手續費與滑價,所以它的交易清單可以直接拿來當第一份對照用的清單。
反過來說,如果你在 MultiCharts 裡替這類規則加上固定點數的停損和停利,它就立刻變成會受 Bar Magnifier 影響的策略,加完之後要重新做一次開與不開的對照。Pardo(2008)談策略評估時反覆強調的也是這一點:回測模擬的成交假設要和實際下單的方式一致,否則數字再好也沒有意義。
從 AlphaPrime 匯出 PowerLanguage 原始碼到 MultiCharts 之後,先核對的順序是:資料期間與 K 棒週期是否相同、Backtesting 分頁的手續費與滑價是否與匯出時一致、成交是否同樣設在次根 K 棒、交易筆數是否相同,最後才看淨利。匯出與匯入的每一步見把策略匯入 MultiCharts 並對照回測,逐項核對的清單見從產生的策略到 MultiCharts 的 PowerLanguage 對照清單;AlphaPrime 支援的其他匯出平台列在平台匯出頁。
下一步:挑一支你現在正在跑、有停損也有停利的日內策略,在 MultiCharts 裡用最近兩個月的資料,不開和開 1 分鐘 Bar Magnifier 各跑一次,數一數出場價不同的筆數佔總筆數的比例。這個比例就是你該不該把細部回測設成預設值的答案。
常見問答
細部回測需要什麼 Tick 資料?
需要同一個商品、同一段回測期間、比圖表 K 棒更細的資料,由資料來源另外提供,MultiCharts 不會從原本的 K 棒推算出來。解析度可以選 1 分鐘、1 秒或 1 Tick;1 分鐘資料最容易取得也最小,Tick 資料判定最準但筆數依成交量而定,檔案最大。先確認細部資料涵蓋整段期間,中間缺一段的 K 棒就補不出路徑。
開了 Bar Magnifier 結果就一定正確嗎?
它只把成交順序的判定從假設換成細部資料顯示的順序,剩下的不確定取決於解析度。用 1 分鐘資料時,停損和停利落在同一根 1 分 K 內仍要靠假設;用 Tick 資料幾乎沒有這個問題。手續費、滑價、次根 K 棒成交這些設定不會因為開了 Bar Magnifier 而變正確,仍要自己設好。
細部回測和 Intra-bar Order Generation 一樣嗎?
不一樣。Bar Magnifier 只改變「已經送出的單在棒內哪個價位先成交」的判定,訊號仍在 K 棒收盤計算。Intra-bar Order Generation 是讓策略在棒內隨時計算訊號並下單的設定,兩者在不同的地方開關,可以只開其中一個。
日線策略也需要開細部回測嗎?
看策略有沒有在棒內會被觸發的價位。日線策略如果只在次日開盤用市價進出、沒有停損停利,棒內沒有任何待觸發的單,細部回測理論上不會改變成交價。日線策略如果掛了停損或停利,一根日 K 的高低點範圍很大,兩個價位同時被碰到的機會反而更高,就需要開啟並對照。
參考文獻
- CME Group. E-mini Nasdaq-100 Futures contract specifications (contract size $20 × index, minimum tick 0.25 index points = $5.00). cmegroup.com/markets/equities/nasdaq/e-mini-nasdaq-100.contractSpecs.html
- Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.
- 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.

