2026年八月22日 · 研究

為什麼你的回測掛單需要時鐘

為什麼你的回測掛單需要時鐘

策略在 10:00 送出一筆限價單。訊號在 10:03 改變。回測在 10:04 悄悄換掉訂單,接著在 10:05 計入成交。在模擬交易中,原始訂單可能還掛在交易所。如果原單成交時替代單也還在執行,策略就有 2 筆訂單,但持倉模型卻假裝只有 1 筆。

掛單需要各自的狀態與時鐘。回測應知道每筆訂單何時送出、何時可以取消、取消是否已送達交易所,以及成交與取消競速時會發生什麼事。3 種常見的簡化做法會抹去這些細節。

錯誤 1:把新訊號當成立即取消

許多回測會在每根 K 棒重新計算目標持倉,接著用最新訊號要求的內容覆寫掛單。這會讓訂單在策略改變主意的當下消失。實際交易所並非如此運作。取消請求需要時間,交易所處理前訂單仍可能成交。

假設有一筆 100 股、價格為 $50.00 的買進限價單。10:03 訊號轉弱,因此策略送出取消請求。10:03:00.080 訂單成交 60 股;取消請求在 10:03:00.110 獲確認。剩下的 40 股遭取消,但此時持倉已包含 60 股。若以 K 棒為單位的回測在 10:03 刪除訂單,可能會回報 0 股。若假設訂單立即取消,卻仍記錄之後的成交,就憑空捏造了反方向的曝險。

明確追蹤訂單生命週期:已送出、已確認、部分成交、取消待處理、已取消或全數成交。取消確認前發生的成交仍須保留。若採用粗略的 K 棒模擬,當兩個事件可能在同一根 K 棒內發生時,應選定並說明保守的事件排序規則。

錯誤 2:讓掛單永不過期

根據 10:00 訊號訂價的限價單,即使訊號沒有明確的出場規則,也可能逐漸過時。委託簿會變動,波動度會改變,市場對該商品的估值也可能偏移。然而,若模擬器讓訂單一直有效直到成交,幾個月後發生的成交也可能被歸功於早已不復存在的交易論點。

設定符合策略的訂單有效時間政策。1 分鐘訊號可能採用 30 秒到期;每日再平衡則可能讓訂單持續有效至收盤。這些是策略選擇,沒有放諸四海皆準的預設值。如果策略每根 K 棒都重新訂價,就應模擬取消與替代的流程,而不是讓訂單瞬間跳到新價格。

訂單政策常見用途回測問題
立即成交或取消取得可用流動性後停止送出時可能成交多少?
短效期執行時間窗短的快速訊號價格回到該價位時,訂單是否仍有效?
有效至交易時段結束緩慢再平衡或收盤競價需求交易所是否真的支援這種有效時間?

錯誤 3:把每次觸價都算成成交

如果 K 線的最低價觸及買進限價,訂單不一定真的成交。前面可能還有其他委託排隊、該價格的成交量可能很少,或那筆短暫的成交紀錄可能發生在訂單送達之前。過時的訂單模型常把這 3 種錯誤全都混在一起:讓訂單有效太久、假設它排在隊伍最前面,再把每次觸價都算成全數成交。

至少要避免訂單到達前就成交,並將模擬成交數量限制在該限價上合理的成交量範圍內。若策略受排隊位置影響,請使用逐筆成交與委託簿資料,或採用刻意保守的排隊模型。以觸價判定成交仍可用於初步篩選,但要標示為偏樂觀的近似值,並與更嚴格的假設比較。

一項實用的稽核方式:記錄每筆訂單的建立時間、有效期間、取消請求與確認時間、成交時間、成交數量及剩餘數量。接著重播幾筆訊號反轉前後的交易。如果你無法說明每筆訂單成交時為何仍然有效,就得改善回測的成交筆數估算。

模擬你打算拿來做模擬交易的訂單

訂單狀態將策略意圖與實際曝險連結起來。持倉應隨成交而變動,而不是依目標持倉或取消請求改變。替代訂單應留下可稽核的紀錄,部分成交也應延續到下一次決策。這讓回測更加繁瑣,但也能讓模擬交易的比較更有意義:兩套系統在執行結果上的差異,都能找到明確原因。

訂單模型有不確定性時,就應在結果中保留這份不確定性。測試短效期與長效期訂單、調整取消延遲,並呈現績效有多少仰賴樂觀的排隊假設。策略本身或許沒有問題,但它看似存在的優勢,也可能只是來自一筆實盤系統早在數小時前就會取消的訂單。

訂單管理回測執行模擬交易
← 所有文章