收盤價回測的陷阱
用收盤價回測,是量化策略開發裡最常見、也最容易被忽視的陷阱。
收盤價是一個事後才知道的數字。
這句話聽起來是廢話,但在回測框架裡,它的殺傷力是靜默的。你的訊號在K棒收盤時觸發,你的成交也在同一根K棒的收盤價執行,這在邏輯上意味著你在價格確定的那一刻同時知道訊號、同時完成交易。現實中這不可能發生。即使是最快的系統,也需要時間去接收數據、計算訊號、下單、撮合。你用收盤價成交的每一筆回測交易,本質上都帶著一點點未來函數的味道。
收盤價的特殊性
收盤價在很多市場,尤其是股票,是一個撮合機制下的特殊成交價,並非是連續競價的結果,收盤集合競價的成交量可以很大,但那個價格是在特定時間窗口內所有掛單的均衡點。你的策略如果倉位規模不小,你的訂單本身就會影響那個均衡,你不是在觀察市場,你是市場的一部分。回測裡你是價格接受者,實盤你可能已經是價格移動者。
滑價的非線性特性
更麻煩的是滑價的非線性特性。
很多回測框架允許你設定一個固定滑價,比如每筆交易扣0.05%。這個數字在小倉位、高流動性標的上或許合理,但一旦換到中小型股、或者策略訊號集中在特定時段,滑價的分佈會變得非常不對稱。虧損的交易往往滑價更大,因為你在急著出場的時候,對手方知道你急。訂單流是有資訊含量的,這叫做逆向選擇成本,你的回測沒有這個,但實盤的對手方有。
更嚴謹的做法:下一根K棒開盤價
比較簡單的做法,是在回測設計階段就強迫自己用「下一根K棒開盤價成交」的邏輯。
這樣做會讓你的回測結果變醜,夏普比率會下降,勝率可能也會掉。但這個醜是真實的醜,是你真正能預期的績效範圍。如果一個策略在這個更嚴格的假設下仍然有正期望值,它才值得你花時間去做進一步的參數優化和風險管理設計。
策略敏感度的警訊
延伸一步來說,如果你的策略對成交價格非常敏感,也就是說,用收盤價和用下一根開盤價的結果差異很大,這本身就是一個警訊,說明這個策略的超額收益非常薄,稍微一點執行摩擦就會把它磨光。這類策略在實盤裡幾乎沒有生存空間,除非你有足夠的執行優勢去壓縮滑價。
實盤執行優化方向
實盤執行的優化方向,我認為有幾條路可以走。
- 一是改善訂單執行方式,用時間加權或成交量加權的方式拆單,減少單筆大額訂單對市場的衝擊。
- 二是在策略設計階段就把流動性篩選做進去,只交易在你的倉位規模下、成交量足夠吸收的標的。
- 三是對訊號做延遲測試,主動測試訊號在延遲一個或兩個週期後的衰減速度,如果衰減很快,說明這個訊號的時效性強,對執行成本的容忍度就低。
原文出處:voltima_quant (@voltima_quant) 於 Threads · 查看原文

