回測裡的交易成本:手續費、滑價與平均每筆交易
很多回測看起來不錯的策略,每筆交易的優勢其實比進出一次的成本還小。從第一次回測就把成本放進去,再拿來和平均每筆交易比較。
AlphaPrime 團隊 ·
多數回測都低估的成本
沒有計入成本的回測,量到的只是策略抓到的價格波動。真實帳戶的每一次進場、出場都要付錢。這個差距每筆不大,一年下來就很可觀,而且交易次數越多,差距越大。
常見的結果是:交易越頻繁的策略,扣成本前看起來最好,扣完反而最差。因為這類策略每筆賺的幅度最小,交易次數又最多。
要計入哪些成本
- 手續費與交易所費用,按口數或股數計算,進場和出場都要收。期貨除了券商手續費,還要加上交易所、結算和主管機關的規費。
- 滑價,也就是回測假設的價格和實際成交價之間的差距。市價單和停損單的成交價通常比觸發價差,尤其在消息公布前後和開盤時。
- 買賣價差,如果你的資料用的是中價或最新成交價,但實際交易要用買價或賣價成交。
- 融資或轉倉(展期)成本,適用於跨交易時段持有的部位,視情況計入。
成本要以來回一趟(進場加出場)計算,單位也要和回測結果一致,這樣才能直接比較。
平均每筆交易檢驗
最簡單又實用的檢查:拿扣成本前的平均每筆交易,和來回一趟的成本比一比。
舉個假設的例子。某個微型指數期貨策略,10,000 筆交易的成本前損益是 $16,000,等於每筆 $1.60。如果來回一趟的手續費和規費是 $1.00,平均滑價是每邊一跳、一跳價值 $0.50,來回成本就是 $2.00。扣掉成本後,這個策略每筆大約虧 $0.40,即使扣成本前的回測看起來很漂亮。
| 每筆 | 10,000 筆 | |
|---|---|---|
| 成本前損益 | $1.60 | $16,000 |
| 手續費與規費 | −$1.00 | −$10,000 |
| 滑價(每邊一跳) | −$1.00 | −$10,000 |
| 淨損益 | −$0.40 | −$4,000 |
常見的經驗法則是,扣成本前的平均每筆交易,應該是來回成本的好幾倍,這樣滑價稍微變大時,優勢才不會被吃光。至於要幾倍,得看你對成本估計有多大把握,要自己判斷。
老實估計滑價
- 如果有實單紀錄,就用自己的成交價。把成交價和回測會用的訊號價格拿來比較。
- 沒有實單紀錄時,流動性好的期貨用市價單或停損單,至少先抓每邊一跳;流動性較差的合約,或在波動大的時段進場,要抓更多。
- 壓力測試:把滑價加倍再跑一次回測。如果策略就此失效,表示它靠的是便宜的成交成本。
- 限價單可以減少滑價,但不一定會成交。假設價格一碰到、限價單就全部成交的回測,結果是偏樂觀的。
成交假設也很重要
成本不只是各種費用。如果回測在K 棒收盤時做決定,又用同一根K 棒的收盤價成交,用的就是一個實際上買賣不到的價格。對於在K 棒收盤時做決定的策略,改在下一根K 棒執行(有時稱為 N+1 執行)比較貼近實際。
搜尋時就計入成本,不要事後才加
如果策略生成器在排名候選策略時不計成本,就會偏好交易次數多、每筆賺很少的策略,因為這類策略的曲線看起來最平滑。等到最後才加上成本,入圍的策略大多會被刷掉,前面搜尋的時間等於白費。從第一次執行就把合理的成本放進搜尋設定,排名才會反映你真正能交易的結果。這樣也能減少過度最佳化,因為成本最先刷掉的,正是那些由雜訊造成的高頻型態。
AlphaPrime 在這裡能幫上什麼
AlphaPrime 的GPU 回測涵蓋手續費與滑價、N+1 執行和交易時段,讓成本和成交時間點從一開始就是搜尋的一部分,而不是事後才補。績效報表會顯示權益曲線、回撤和每一筆交易。

