股票資料裡的官方收盤價看起來跟其他價格沒兩樣。時間戳是美東 16:00:00,一個數字,隨時可以成交。日頻訊號盯著它。再平衡打在它上面。研究代理會把它當成掛在委託簿上、等著你的報價。
收盤是集合競價,不是報價。它是必須在截止時間前被接受的 on-close 委託撮合後的價格。如果回測在那裡成交、卻沒有加入那場批次,它拿走的是一筆你根本不會參與的成交。
把 16:00 的撮合當成市價單來成交
常見捷徑是:在收盤時或收盤前一刻算出訊號,用官方收盤價成交,時間戳打上 16:00。在 AAPL 平靜的星期二,這個謊言只差幾分錢。在主宰日頻再平衡帳本的那些日子,這就是整筆交易。
在 16:00:00.000,收盤撮合正在跑,或剛跑完。你那時送出的可立即成交委託不會進那場撮合。它會落到剩下的東西裡:剩餘的揭示掛單、一筆零股、ARCA 或 Nasdaq 的盤後時段。那筆成交可能跟官方收盤價差 2 分錢,也可能差 40 個基點,而且是另一個流動性池。在 Russell 成分股調整、月底、或三重巫日星期五,收盤往往佔當日成交量的兩位數比例。那才是流動性。你不在其中。
我們曾在模擬交易裡誤打誤撞踩過這件事。一次參數微調落在 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 股剩餘量當成單筆委託成交 |
| 把下一筆開盤當成「更安全」的收盤 | 開盤撮合模型,外加隔夜跳空 | 另一套策略,仍然是集合競價,仍然錯過了 |
誠實的分界其實很小。要嘛研究契約說我們在收盤裡,那委託就是 on-close,時間戳打在 NYSE 的 15:50 之前或 Nasdaq 的 15:55 之前,規模對齊預期收盤量,若是 LOC 則允許到期未成交。要嘛我們不在收盤裡,那盤後或下一筆開盤就是一項具名政策、自有其集合競價,權益曲線也不再掛著 16:00 的標籤。
我們現在會讓沒有在該交易所截止時間內掛著 on-close 委託、卻把官方收盤價入帳的回測失敗。這已經砍掉一些漂亮的日頻訊號曲線。那些曲線從來就不能在它們宣稱的價格上執行。
← 所有文章


