策略在 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 種錯誤全都混在一起:讓訂單有效太久、假設它排在隊伍最前面,再把每次觸價都算成全數成交。
至少要避免訂單到達前就成交,並將模擬成交數量限制在該限價上合理的成交量範圍內。若策略受排隊位置影響,請使用逐筆成交與委託簿資料,或採用刻意保守的排隊模型。以觸價判定成交仍可用於初步篩選,但要標示為偏樂觀的近似值,並與更嚴格的假設比較。
一項實用的稽核方式:記錄每筆訂單的建立時間、有效期間、取消請求與確認時間、成交時間、成交數量及剩餘數量。接著重播幾筆訊號反轉前後的交易。如果你無法說明每筆訂單成交時為何仍然有效,就得改善回測的成交筆數估算。
模擬你打算拿來做模擬交易的訂單
訂單狀態將策略意圖與實際曝險連結起來。持倉應隨成交而變動,而不是依目標持倉或取消請求改變。替代訂單應留下可稽核的紀錄,部分成交也應延續到下一次決策。這讓回測更加繁瑣,但也能讓模擬交易的比較更有意義:兩套系統在執行結果上的差異,都能找到明確原因。
訂單模型有不確定性時,就應在結果中保留這份不確定性。測試短效期與長效期訂單、調整取消延遲,並呈現績效有多少仰賴樂觀的排隊假設。策略本身或許沒有問題,但它看似存在的優勢,也可能只是來自一筆實盤系統早在數小時前就會取消的訂單。
← 所有文章


