2026年十一月12日 · 執行

你的回測在官方收盤價成交了。你從未進入那場集合競價。

你的回測在官方收盤價成交了。你從未進入那場集合競價。

股票資料裡的官方收盤價看起來跟其他價格沒兩樣。時間戳是美東 16:00:00,一個數字,隨時可以成交。日頻訊號盯著它。再平衡打在它上面。研究代理會把它當成掛在委託簿上、等著你的報價。

收盤是集合競價,不是報價。它是必須在截止時間前被接受的 on-close 委託撮合後的價格。如果回測在那裡成交、卻沒有加入那場批次,它拿走的是一筆你根本不會參與的成交。

把 16:00 的撮合當成市價單來成交

常見捷徑是:在收盤時或收盤前一刻算出訊號,用官方收盤價成交,時間戳打上 16:00。在 AAPL 平靜的星期二,這個謊言只差幾分錢。在主宰日頻再平衡帳本的那些日子,這就是整筆交易。

在 16:00:00.000,收盤撮合正在跑,或剛跑完。你那時送出的可立即成交委託不會進那場撮合。它會落到剩下的東西裡:剩餘的揭示掛單、一筆零股、ARCA 或 Nasdaq 的盤後時段。那筆成交可能跟官方收盤價差 2 分錢,也可能差 40 個基點,而且是另一個流動性池。在 Russell 成分股調整、月底、或三重巫日星期五,收盤往往佔當日成交量的兩位數比例。那才是流動性。你不在其中。

3:50NYSE on-close 截止時間(ET)
3:55Nasdaq 收盤撮合截止時間(ET)
~10%大型股收盤時段的典型成交量佔比

我們曾在模擬交易裡誤打誤撞踩過這件事。一次參數微調落在 15:48。回測還是用官方收盤價把每檔股票成交。OMS 在 16:00:03 送出普通市價單,因為根本沒人把 MOC 接進系統。盤後成交、幾筆拒單,以及相對資料檔 19 個基點的缺口,發生在資料檔顯示我們對收到收盤持平的那天。策略沒壞。壞的是成交規則。

我仍把 15:49 想成一個具體的地方。有人正在改權重。另一個人在看時鐘。截止時間不在乎你們誰才是對的。

MOC 才是真正要求那場撮合的委託,而且連 MOC 都不是承諾。暫停交易、LULD 暫停、競價取消、一檔從未開盤的標的:你可能在 16:00 帳面持平,手上卻有一筆還在工作、然後失效的 on-close。LOC 被允許完全不成交。如果撮合價是 $40.12、你的限價是 $40.00,你什麼都沒拿到。大量回測照樣把收盤價入帳。

更糟的是,有些供應商資料檔存的是綜合收盤價,從未在任何單一交易所印出。你無法加入綜合收盤。如果策略本來會送 NYSE MOC,真正要緊的成交是 NYSE 的撮合價,而且是那場競價會吸收的數量。

把最後一筆常規時段成交稱為收盤價

有些管線原則上拒絕官方收盤價,改拿 16:00 前最後一筆 SIP 成交,因為那筆成交至少「發生過」。在超大型股上,最後一筆與官方收盤價常常只差 1 或 2 分錢,你不會注意到。在中型股上,最後一筆成交可能是 15:59:51 的 200 股,是誰吃掉剩餘揭示掛單就簽誰的名。2 秒後的官方收盤價是 100 萬股的撮合,價格不同。

指數、ETF 申購籃,以及每一筆 MOC 再平衡,交易的都是撮合價。你的回測交易的是剩餘量。而且最後一筆成交並不附帶你的數量。如果那筆成交是 400 股、你的單筆委託是 5,000 股,你沒拿到那個價格。你拿到的只是碰巧排在最後的時間戳。

我看過一份中型股資料,最後一筆成交與官方收盤價在再平衡星期四差了 28 分錢。用最後一筆的回測看起來更「有微結構意識」。它只是另一個更薄的市場,而且仍假設我們可以成為那 200 股。

為求保守,把成交滑到隔日開盤

第三種迴避出現在程式碼審查的註解裡:別假設我們能交易收盤,所以用下一筆開盤成交。聽起來很成熟。它打造的是另一套策略。

收盤對收盤的訊號若在下一筆開盤執行,已經吃掉了隔夜跳空。對很多股票因子來說,那段跳空是你以為自己掌握的走勢裡很大一塊。用開盤成交並不會讓回測變謹慎。它把 P&L 搬到你本來沒打算交易的時段,還把你丟進一場你同樣沒建模的開盤集合競價。

紙面上,這場殘骸很容易誤讀。回測的每日 P&L 仍然對得上訊號。模擬帳本卻扛了一夜的指數跳空,外加一早上的開盤撮合滑價。然後大家開始爭論執行缺口,但其實老實的說法是:兩套系統做的根本不是同一筆交易。

可是開盤也是集合競價。如果你錯過了昨天的截止時間,你不會自動拿到乾淨的 9:30 最後一筆。你拿到的是 MOO/LOO 機制、失衡量,以及跳空。把那叫做保守的收盤成交,只是在一則高尚的註解底下,藏了第二場沒建模的撮合。

你入帳的成交交易所實際需要的殘骸長什麼樣子
官方收盤價,沒有委託類型在該交易所截止時間前被接受的 MOC 或 LOC盤後成交、一筆拒單,或沒有任何交易所承作的綜合價格
16:00 前最後一筆 SIP 成交一筆你本來可以參與、且數量是你規模的交易把 200 股剩餘量當成單筆委託成交
把下一筆開盤當成「更安全」的收盤開盤撮合模型,外加隔夜跳空另一套策略,仍然是集合競價,仍然錯過了
如果模擬帳戶不能送 MOC 或 LOC,回測就不能拿官方收盤價。改成交規則。不要用 16:00 的市價單去近似那場撮合。

誠實的分界其實很小。要嘛研究契約說我們在收盤裡,那委託就是 on-close,時間戳打在 NYSE 的 15:50 之前或 Nasdaq 的 15:55 之前,規模對齊預期收盤量,若是 LOC 則允許到期未成交。要嘛我們不在收盤裡,那盤後或下一筆開盤就是一項具名政策、自有其集合競價,權益曲線也不再掛著 16:00 的標籤。

我們現在會讓沒有在該交易所截止時間內掛著 on-close 委託、卻把官方收盤價入帳的回測失敗。這已經砍掉一些漂亮的日頻訊號曲線。那些曲線從來就不能在它們宣稱的價格上執行。

回測市場微結構股票收盤集合競價執行
← 所有文章