程式交易系統的 4 個組成與各自的測試方法
程式交易系統有四個組成:資料、訊號、執行與風險。每個組成回答一個問題,各有一項自己的測試。先單獨測試各組成,再帶交易成本與下一根 K 棒成交回測整條鏈,用搜尋沒碰過的資料評分,並依第一筆委託前寫下的上限做實單監控。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
程式交易系統需要哪些組成?
程式交易系統有四個組成:資料、訊號、執行與風險。資料負責準時提供正確的 K 棒;訊號決定何時進出場;執行把訊號變成已知 K 棒上、已知價格的委託;風險決定口數與停止點。先單獨測試各組成,再測整條鏈。
程式交易系統是一組寫好的規則,加上執行這些規則的軟體:讀取價格資料、決定交易、送出委託、限制風險,無須有人逐筆決定。系統像一條鏈,強度取決於最弱的一環。再好的訊號規則,若餵進來的 K 棒遲到,交易的就是已經不存在的價格。委託模組正確但沒有風險規則,會用錯誤的大小送出正確的委託。想先了解這些規則要花多少成本、為什麼多數規則扣除成本後會虧損,請從程式交易的定義與成本讀起。
| 組成 | 回答的問題 | 單獨測試 | 結果不佳的樣子 |
|---|---|---|---|
| 資料 | K 棒正確、準時嗎? | 抽樣比對 K 棒與交易所紀錄;檢查缺口、時區與轉倉日期 | 缺少交易時段、K 棒時間戳記落在錯誤的小時、把轉倉跳空當成真實行情交易 |
| 訊號 | 什麼時候進場、出場? | 單獨帶交易成本回測規則;檢查相鄰設定表現是否相近 | 某一組設定表現好,相鄰設定卻表現差 |
| 執行 | 什麼委託、什麼價格、哪一根 K 棒? | 在同樣的 K 棒上,比對回測成交與模擬交易成交 | 回測在訊號 K 棒收盤價成交;實單晚一根 K 棒成交,價格也更差 |
| 風險 | 幾口?何時停止? | 對照口數與帳戶規模及已驗證的回撤 | 回測視為正常的回撤,在實單中引發追繳保證金 |
訊號部分最受關注,但只是四個之一。它可以是電腦能在 K 棒上評估的任何規則:趨勢跟隨、均值回歸、突破或日曆規則。量化交易策略的四大類型與各自的測試方法說明了不同類型之間,測試有哪些變化。另外三個部分少見於策略說明,卻是多數實單失敗的起點。
四個組成如何建構與連接?
四個組成構成一個在每根 K 棒上執行的迴圈,迴圈內各步驟的順序,決定了回測是否誠實。迴圈從 K 棒收盤開始,到成交後更新部位紀錄結束。每一步只讀取前面步驟產生的內容。
- K 棒 N 收盤。 資料部分收到這根已完成 K 棒的開盤價、最高價、最低價、收盤價與成交量。
- 資料檢查。 系統確認 K 棒準時到達、沒有缺少欄位,並且接在前一根 K 棒之後。
- 在 K 棒 N 上計算訊號。 規則只讀取 K 棒 N 與更早的 K 棒,回傳三種狀態之一:做多、做空,或維持現狀。
- 風險檢查決定口數。 風險部分讀取帳戶規模、目前回撤與未平倉部位,回傳口數,可以是零。
- 送出委託。 執行部分送出該大小的市價單或停損單。
- 在 K 棒 N+1 的開盤價成交,更新部位紀錄。 成交價與時間寫入部位紀錄,下一輪風險檢查會讀取它。
下一根 K 棒成交,是指在一根 K 棒收盤時決定,在下一根 K 棒開盤時成交,讓系統永遠不會用到無法成交的價格。若回測在 K 棒 N 的收盤價決定,又在同一個收盤價成交,就是讀到了未來一根 K 棒。上面迴圈的第 6 步,就是把這一點落實的地方。當沖系統要在第 5 步之前多加一個風險步驟:交易時段收盤前先平倉,而交易時段結束時間取自資料部分,而不是交易者電腦上的時鐘。當沖的定義與扣除成本後的檢驗一文說明,這種強制出場對交易筆數有什麼影響。
部位紀錄是多數初學者省略的部分。它是唯一知道系統實際持有什麼的地方,風險檢查與最後一節的監控都從它讀取。沒有它,斷線後重新啟動,系統的帳戶裡有部位,記憶中卻沒有。
如何帶著貼近實況的交易成本回測整個系統?
回測在歷史 K 棒上重播整個迴圈,每一次評估都計入手續費、滑價與下一根 K 棒成交,而不是最後才加上去。滑價是訊號所用價格與委託實際成交價之間的差。若交易成本只加在最後入選的候選策略身上,搜尋就是用任何帳戶都賺不到的數字替候選策略排名,交易最頻繁的策略也會因為錯誤的原因看起來最好。AlphaPrime(Valynox)在每個候選策略的回測中,都計入手續費與滑價並以下一根 K 棒成交,所以搜尋產生的排名已經是扣除這些成本後的結果。
下面這次執行展示了設定到位後,完整系統的報表長什麼樣子。它測試 NQ 日 K 棒,期間 2019-01-02 至 2025-06-30,多空雙向、一口,每筆交易計入 $20 手續費與 $10 滑價。它以 Bipower Jump Ratio 規則作為唯一的進場與出場,沒有停損、停利或濾網:這是以標準指標建立的替代規則,不是對四個組成結構本身的測試。你看到的是從所試 1,024 個中留下的那一個候選策略,依報酬相對回撤挑選。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。NQ 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $10。
| 數字 | 結果 |
|---|---|
| 淨利(已平倉) | $281,815 |
| 最大回撤 | $62,950 |
| 交易筆數 | 151 |
| 勝率 | 55.63% |
| 獲利因子 | 1.78 |
| 平均每筆 | $1,866.32 |
| 在市場中的時間 | 55.89% |

這份報表有兩點,值得用系統建構者的眼光讀。第一,交易成本設定對 NQ 是貼近實況的:CME 列出 E-mini Nasdaq-100 的最小跳動點為 0.25 指數點,價值 $5.00,所以 $10 的滑價是每筆交易兩個跳動點。交易所可能調整跳動點大小與價值,設定成本前請查最新的合約頁面;免費的期貨合約與損益計算機會顯示主要合約的跳動點大小、每跳動點價值與每點價值。第二,每筆交易計入的 $30 成本,相較於平均每筆損益 $1,866.32,只占一小部分,這代表第一節的平均每筆損益檢驗,通過且還有充裕的餘地。一條毛損益相同、交易筆數卻是十倍的規則,就過不了。
報表沒有顯示的是其他候選策略。留下的那個,是同一段歷史上多次嘗試中的最佳者,而多次嘗試中的最佳者,永遠看起來比一般的好,因為讓它成為最佳的部分原因,是碰巧與這些 K 棒吻合的雜訊。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,這種挑選加成會隨比較的候選數增加而變大,而且即使沒有任何一個候選是人工調過的,勝出者的樣本內數字也會偏高。事後挑出這個候選策略,會讓它的成績偏好看。上面的數字描述的是一條規則在一段歷史上的表現;不是這條規則能賺到的,也不是讀者該預期的。
如何用樣本外與推進分析檢驗?
單次回測無法分辨規律與運氣,所以系統要用搜尋沒碰過的資料評分,先是保留期,再是滾動的推進分析窗口,且通過標準要在看結果前寫好。樣本外資料是搜尋之前先留出、只用來原封不動執行留下的候選策略的那段歷史。推進分析是這樣的測試:在一個窗口上最佳化設定,原封不動地在接著的窗口上執行,往前移動再重複,最後把各測試段接成一條樣本外曲線。Pardo(2008)把這個方法描述為判斷最佳化後的系統曾經是否真能交易、而不只是擬合出來的標準做法。
- 先寫下通過標準。 決定樣本外交易的最低筆數、必須保留下來的樣本內平均每筆損益比例,以及要有幾個推進分析窗口為正。在任何一次樣本外執行之前,先把這三個數字寫下來。
- 保留期只執行一次。 留下的候選策略,以同樣的交易成本與下一根 K 棒成交,原封不動地在搜尋沒看過的區段上執行。對照標準,讀取扣除成本後的平均每筆損益與交易筆數。
- 執行推進分析窗口。 每個窗口在自己的樣本內區段重新最佳化,並在其後的區段測試。數出為正的測試段,並讀取接合後的曲線。
- 接受或淘汰,不改規則。 沒通過的候選策略,只要你一改,就成了新想法,而新想法要用它沒看過的資料評分。
假設性範例
看結果之前,交易者先寫下:至少 100 筆樣本外交易、至少保留樣本內平均每筆損益的 40%、5 個推進分析窗口扣除成本後至少 4 個為正。留下的候選策略,樣本內平均每筆損益為 $300,樣本外平均每筆損益為 $150(120 筆交易),保留了 50%,且筆數足夠。五個窗口中有四個為正。這個候選策略通過三項寫好的測試,原封不動地繼續往下走。若它只有 25 筆交易的 $150,光是交易筆數就會把它退回。
每看一次樣本外結果,就消耗一部分。Harvey 與 Liu(2015)指出,在同一份資料上比較過許多候選策略之後才讀的結果,必須依背後的檢定次數打折,所以保留期只跑一次,且通過標準要事先固定。窗口怎麼切、需要幾個、接合曲線怎麼讀,見推進分析與你當時真能交易到的唯一回測數字。AlphaPrime 的檢驗步驟中,候選策略只要沒過前一關,就停止後面的檢查,所以能走到後段資料的候選策略寥寥無幾。
回測與實單結果有什麼差別?
實單結果與回測不同,原因都能點名、能衡量,所以在上線之前,就把每個落差的預期大小寫下來,而不是事後才發現。回測對成交、資料與運行時間做了假設,實單系統得自己達成。每項假設都有一個衡量方式,告訴你現實離它多遠。
| 落差來源 | 回測的假設 | 實單的情況 | 如何衡量落差 |
|---|---|---|---|
| 成交價 | K 棒 N+1 的開盤價加上固定滑價 | 成交價隨委託大小、時段與消息而變 | 每筆交易的平均實單成交價減回測成交價,以跳動點計 |
| 資料源差異 | 一份乾淨的歷史序列 | 實單資料源與歷史資料供應商在 K 棒收盤時間或所納入的逐筆成交上不同 | 計算同一分鐘內,實單收盤價與歷史收盤價不同的 K 棒數 |
| 遺漏或遲到的 K 棒 | 每根 K 棒都在、且準時 | K 棒遲到,訊號晚一根 K 棒觸發,或根本沒觸發 | 計算回測顯示有、實單系統卻沒執行的訊號數 |
| 斷線與重新啟動 | 系統一直在運行 | 券商或網路中斷;重新啟動後部位紀錄與帳戶不一致 | 計算每月重新啟動次數與受影響的交易 |
| 手續費與滑價漂移 | $20 與兩個跳動點,固定 | 券商調整費用;波動率放大價差 | 每季用對帳單上的實單每筆成本,與設定值比較 |
成交價這一列通常是最大的落差,也最容易衡量。用同樣的 K 棒,把系統與回測並排做模擬交易,得到的實單成交清單,可以逐筆與回測成交清單相減。若平均差距是每邊一個跳動點,而回測假設的是兩個,成本設定偏保守,落差對你有利;若是三個,就提高滑價設定,並在第一口實單之前重新檢驗。演算法交易策略持續有效的檢驗中的五項檢查,也是圍繞同一個想法:測試與帳戶之間的每個差異,都是要衡量的,不是要解釋掉的。
如何監控自動化系統的實單運行?
監控是把實單交易明細與同一批 K 棒的回測交易明細比對,並把實單回撤與依檢驗結果設定的上限比對;成交不一致或回撤越過上限,是停止訊號,不是調整訊號。回測仍在實單 K 棒上並行執行,它是基準。實單系統要在你衡量過的成交落差範圍內,每根 K 棒都與它逐筆吻合,否則就是四個組成中有什麼變了。
三項檢查依固定時程執行:
- 每天:交易明細比對。 對每筆實單交易,找出同一根 K 棒上的回測交易,比對方向、大小與成交價。一個清單有、另一個沒有的交易,指向資料或執行部分。大小不同,指向風險部分或部位紀錄。
- 每週:回撤對照上限。 從權益高點計算實單回撤,與上限比較。免費的最大回撤計算機,可對你貼上的任何權益序列計算最大回撤與恢復情況。
- 每季:成本漂移。 把券商對帳單上每筆交易的手續費與滑價,與回測中的設定比較。
假設性範例
一口系統的檢驗顯示,在保留期與推進分析窗口合計下,最大回撤為 $9,000。上線前,交易者寫下 $13,500 的上限,是該數字的一倍半,因為實單回撤會比測試的更深。第九週,實單回撤達到 $14,100。系統停止。檢討發現,實單資料源收日 K 棒的時間與歷史資料不同,所以有四個訊號晚了一根 K 棒觸發。資料部分修正後再次單獨測試;訊號規則不動。
接下來要做的事就在你自己的系統上,今天就可以做:打開你最近一次回測的交易明細,以及同樣兩週內你的模擬或實單帳戶交易明細,逐根 K 棒對齊,寫下以跳動點計的平均成交差距。這一個數字,告訴你回測的滑價設定是否誠實,也是系統持續交易期間,你要執行的監控的第一列。
常見問題
如何測試程式交易系統?
先單獨測試四個組成:把 K 棒與交易所紀錄比對,帶交易成本回測訊號規則,比對回測成交與模擬成交,並對照口數與帳戶。接著,在每次評估都計入手續費、滑價與下一根 K 棒成交的條件下回測整條鏈,用保留期與推進分析窗口替留下的候選策略評分,通過標準事先寫好,並在第一口實單之前,把它與回測並排做模擬交易。
程式交易平台與程式交易系統有什麼差別?
程式交易平台是執行策略、繪製資料圖表並把委託送到券商的軟體環境。程式交易系統是你在上面執行的整套規則與組成:資料檢查、訊號規則、執行邏輯與風險上限。平台提供工具;系統是你用這些工具建構與測試的東西,同一個系統可以為不止一個平台撰寫。
建構程式交易系統需要寫程式嗎?
不需要。策略生成軟體可以把規則構想與參數範圍變成可測試的策略,並把原始碼匯出到交易平台,所以訊號部分無需撰寫程式即可建構。資料、執行與風險部分仍要在你交易的平台上設定與測試,而本文的測試步驟,不論規則是手寫還是生成的,都適用。
實單前應該模擬交易多久?
久到能收集一份可與回測逐筆比對的成交清單,這取決於系統交易的頻率,而非日曆時間。每天交易的系統,數週就能得到可用的成交樣本;每月只交易數次的系統,需要數個月。模擬期在量測出平均成交差距、並依它調整回測的滑價設定後結束。
參考文獻
- 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.
- Harvey, C. R., & Liu, Y. (2015). Backtesting. The Journal of Portfolio Management, 42(1), 13–28.
- 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

