台指夜盤愈來愈難賺?你的策略沒死,是「流動性斷層」把它掐死了
回測賺錢、實盤虧損?問題多半不在策略,而在你從未量測的夜盤流動性結構。
凌晨一點半,你的機器人下了一口台指期夜盤市價單。回測告訴你這筆交易期望值是正的。
成交了。滑價四檔。
你沒感覺,因為你在睡覺。但這四檔,就是你整個策略的死亡原因。
很多人把夜盤虧錢歸咎於「策略失效」或「市場變聰明了」。我以前也這樣想,直到我把成交明細拉出來逐筆檢視——策略訊號的勝率跟回測幾乎一樣,賠的全是執行層。說白了,輸的不是 Alpha,是 Microstructure。
先講一個很多人沒意識到的事實:台指期夜盤的成交量結構跟日盤是兩個世界。日盤有造市商、有法人、有一大堆散戶的限價單掛在五檔裡,價差通常一到兩檔。夜盤呢?深度薄得像紙。指數跳一下,整本 order book 可能直接被抽掉——這就是我要講的「流動性斷層」。
斷層不是「流動性比較少」這麼溫和的概念。它是非線性的。平常可能還好,但一碰到美股開盤前半小時、或鮑爾講話、或輝達財報(你的策略剛好最想在這種時候進場,對吧?這不是很諷刺嗎),掛單瞬間消失,你的停損市價單直接穿過三、五個價位才找到對手方。
回測為什麼抓不到?因為大部分人用 K 線收盤價成交的假設在跑回測。Backtrader 預設就是這樣。你在回測裡永遠以「這根 K 棒的收盤價」進場,實盤卻是在下一根 K 棒的流動性沙漠裡成交。這其實是一種隱性的 look-ahead bias,只是教科書比較少提。
那怎麼辦?幾個我實際做過的修正:
在 Backtrader 裡把 cheat-on-open 關掉,然後自己寫 fill logic:用下一根 K 棒的開盤價加一個「流動性懲罰滑價」成交。夜盤時段這個懲罰我設到 2 到 3 tick,聽起來很粗暴,但寧可回測難看,也不要實盤難看。
用 Shioaji 或 Fugle 的即時報價,把夜盤各時段的實際 bid-ask spread 和五檔深度記錄下來,建立自己的「流動性日曆」。你會發現晚上十點半到十一點半幾乎是死水,凌晨三點半到五點(美股尾盤)反而有量。策略的進出場時段就照這個調——不是照你的方便調。
限價單加 ICEBERG。夜盤絕對不要裸市價單,沒有例外。你的停損也應該觸價後轉限價、設一個可忍受的最大滑價,寧可斷頭失敗重掛,也不要無底洞式成交。
還有一個更根本的問題:如果你的策略 Sharpe 有 1.5,但平均每筆交易毛利只有 15 點,夜盤來回 6 到 8 tick 的摩擦成本會直接把你的期望值吃掉超過一半。這種策略在日盤活得好好的,搬到夜盤就是慢性自殺。先算損益兩平的摩擦門檻,再談策略好不好。
我最後留一個問題給你:你的回測報表裡,有沒有任何一個欄位叫做「假設滑價」?如果沒有,那份報表告訴你的東西,比你想的少很多。