2026年八月16日 · 回測

為什麼多數回測都在說謊,以及修正它們的四個成本項目

為什麼多數回測都在說謊,以及修正它們的四個成本項目

先從數字開始,因為數字本身就是全部的論點。在主流永續合約交易所吃單來回一趟,光手續費就要付掉名目本金的 0.10%。在多方擁擠的行情裡,資金費率一年可以吃掉你10-30%。而一張相對於盤口深度過大的市價單,除了價差之外還要再付上平方根定律的衝擊成本。至於那種讀到「昨天資料的今日修正版」的回測,等於憑空多出每年好幾個百分點、實際上從不存在的優勢。

0.10%每筆交易的來回吃單成本
0.15%我們要求的單筆最低優勢
4多數回測略過的成本項目

真正令人意外的是第一個數字。不是因為它大,而是因為它對交易頻率的殺傷力。每個人聽到「要算手續費」都會點頭,然後轉頭就去測一個一天交易四十次的策略。來回 0.10%、一天四十趟,等於每天燒掉名目本金的 4%。中型市值的永續合約上,沒有任何訊號能跨過這道門檻。這個策略離可行差得遠了,但那份沒算手續費的回測卻說它天才無比。

手續費是篩子,不是打折

多數人腦中的模型是:手續費只是把曲線往下刮一層,形狀不變、位置略低。這是錯的。手續費是一道頻率篩選器。它會徹底抹掉同一個優勢的高頻版本,卻幾乎不碰慢速版本。當我們的流程開始逐交易所套用真實的 maker/taker 費率表之後,陣亡的策略並不是那些爛點子——而是交易太頻繁的好點子。修正方式通常是拉長時間框架,而不是換一個更好的訊號。現在只要平均單筆報酬低於名目本金的 0.15%,我們就直接放棄,因為扣掉雙邊成本後根本沒有東西可以複利。

資金費率是一種有記憶的持倉稅

永續合約每小時或每八小時結算一次資金費率,而且它不是雜訊:它在結構上,恰好和動能系統想做的那些交易高度相關。當所有人都做多時,資金費率為正,而你的多頭動能部位正在付這筆錢。少了資金費率累計的回測,會系統性地美化永續合約上的順勢策略。我們是用很難堪的方式學到這件事的——一整個系列的資金費率套利策略被自動放棄,只因為引擎根本沒有把它們設計要收割的那筆資金費率入帳。訊號沒問題,是帳算漏了。

衝擊成本隨你部位大小的平方根成長

以 K 棒為基礎的回測有個客氣的虛構:你會在收盤價成交。對小單來說這大致成立。但只要規模稍有意義,公認的模型就是——衝擊成本隨訂單相對於成交量的規模的平方根成長,而且不會回來。我們把平方根定律的衝擊估計折進每一筆成交,也折進權益曲線本身。它最要命的地方,剛好也是最不方便面對的地方:容量。一個策略在 $50k 規模下可能真的賺錢,到了 $5M 就結構性地不賺錢,而只有把衝擊納入的曲線才看得出那條界線在哪。

前視偏誤藏在資料裡,不在程式碼裡

沒有人會寫 if tomorrow_close > today_close: buy()。前視偏誤是從資料管線裡偷渡進來的:新聞情緒用發布時間而非攝取時間打上時戳;資金費率用它涵蓋的期間、而不是你實際知道它的時點去 join;把「當前」的標的宇宙套用到歷史(倖存者偏差);用修正後的經濟數據取代當時真正打進市場的那個數字。我們的規則是全面 point-in-time:每一份輔助資料序列,都用我們當時可能知道它的時點打上時戳,而回測只能讀到那個奈秒當下已經存在的東西。

檢驗一份回測的標準,不是曲線有沒有往上走。而是同一份程式碼、餵進同樣的即時訊號,能不能產生同樣的交易——而你只能靠每天、永無止盡地核對,才會知道答案。

最後這句話是真的在跑的流程,不是口號。我們每天把每個模擬交易策略的時間窗重播進回測引擎,然後逐筆比對交易差異。當模擬盤和重播對不上,其中一邊在說謊,而說謊的通常是某項成本或某個時戳。上面那四個成本項目,只不過是最早騙到我們的那幾個而已。

回測手續費資金費率市場衝擊誠實
← 所有文章