投資 · 2026.10.06 · 4 min · 更新於 2026.10.26
回測結果可信嗎?TradingView 回撤低估、偷看未來等五個回測陷阱
回測跑出漂亮數字,不代表策略真的有用。整理我做策略研究時踩過的坑:TradingView 最大回撤低估、沒有隨機對照組、資料沒洗、樣本太短、偷看未來,以及各自怎麼避開。
閱讀設定
TradingView 報表說 00631L 配 Hull 144 的最大回撤是 23.5%,我用每日淨值重算,約 40%。
這陣子回測了不少策略,寫策略本身沒花多少時間,大部分時間都在確認數字有沒有算對。好幾次結論差點整個反過來,看起來有優勢的策略,其實比亂進場還差。
我現在的檢查順序是:資料先洗過,回撤自己算,跟單純抱著和隨機進場各比一次,樣本太少的不算數,最後用重播確認沒有偷看未來。有一關過不了就不採用。

TradingView 低估最大回撤
TradingView 策略報表上的最大回撤,只算跌破進場價的浮虧,不算持倉中獲利吐回去的那段。
假設一筆單從 100 漲到 150,再跌回 110 出場。帳上從 150 到 110 是很實在的回撤,但沒跌破進場價 100,報表就不算。趨勢策略常常抱上去又吐回一大段,差距會很大。
我遇到的兩個例子:00631L 配 Hull 144(週期 144 的 Hull 移動平均線),報表 23.5%,重算約 40%;BTC 日線趨勢策略,報表 28.7%,重算 62.1%。
拿報表數字去比,擇時策略會看起來比單純抱著安全很多。

做法是把每天收盤的權益算出來,從高點往下算:
def max_drawdown(equity):
peak, mdd = equity[0], 0.0
for v in equity:
peak = max(peak, v)
mdd = max(mdd, 1 - v / peak)
return mdd
隨機進場對照組
這個坑我錯了最多次。
小停損配大目標這種賺賠比結構,在有漂移的市場裡,就算亂進場也會跑出正的期望值。所以策略賺錢,不代表規則本身有優勢,可能只是市場本身的漂移。
我把一套台股的裸 K 型態策略寫成規則回測,2020 到 2023 年跑出毛(未扣成本)+0.005R。R 是以停損距離當一單位的報酬。
同一批交易只把進場時點打散重跑,隨機基準線是 +0.124R。照規則做,比亂做還差。完整過程在裸K交易法的 1026 檔台股回測。
對照組的做法是保留每一筆的方向、停損 % 和目標 %,只把進場時點換成同一檔裡的隨機位置,再跑同一套回測引擎:
for st in real_setups:
j = rng.randrange(warmup, len(df) - 2) # 同一檔內隨機挑一根
px = float(df["close"].iloc[j])
stop_pct = abs(st.entry - st.stop) / st.entry
tgt_pct = abs(st.target - st.entry) / st.entry
fake.append(TradeSetup(j, st.side, px,
px * (1 - st.side * stop_pct),
px * (1 + st.side * tgt_pct)))
隨機要跑 10 次以上,取平均和標準差。高出基準線 1 到 2 個標準差算雜訊,每多試一個版本,門檻就要再提高。
對照組本身也會出錯。基準線要跟被比較的區間同期間算:我那次全期間基準線是 +0.049R,2020 到 2023 那段卻是 +0.124R。拿全期間的去比,負的結果就會變成正的。
改了進場條件,留下來的交易的停損與目標分布也會跟著變,所以每個版本都要配自己的基準線。

資料先洗:分割與倖存者偏差
Yahoo 的 00631L 在 2015 年以前沒做分割調整,某一天會出現假的單日跌 95%。
00631L 在 2026 年 3 月 31 日又一拆二十二,證交所給的是原始價格。我用證交所的個股日成交資訊自己還原:前一天收盤除以當天的參考價,比值大於 1.5 就當成分割,把之前的價格往回除。那次算出來剛好是 22 倍。
少一天也會出事。Yahoo 在 2026 年 9 月 22 日是空值,HMA 少一根 K 棒就跟 TradingView 對不上,後來改用證交所的 STOCK_DAY。
另一個是倖存者偏差:幣安 705 個 USDT 交易對裡,有 212 個已經下架。只抓還在交易的幣,結果會好看得不真實。
還有股息。0050 從 2015 年到現在只看股價年化 17.7%,含息再投入是 21.4%,比較時兩邊要都含息或都不含。
樣本太短,獲利因子亂跳
TradingView 的 Basic 方案只能用圖表上可載入的範圍回測。
我測 BTC 時,獲利因子(總獲利除以總虧損)最高的是 15 分 K 的 6.90,但只回測得到約 2 個月、2 輪交易,樣本夠的只有日線。細節在TradingView 串幣安自動下單的 BTC 日線策略。
網路上的績效報告也一樣。一份台指期 15 分 K 年化 146% 的報告,我照同邏輯自己寫,樣本內(用來調參數的那段資料)年化 +152%,盲測(沒看過的資料)-35%。
那份報告只涵蓋約 14 個月,短期間的報酬一年化就被放大了。
用 Bar Replay 抓偷看未來
有些指標會重繪(repainting),或用到 K 棒還沒收完時拿不到的資料。這種指標的歷史回測很準,實盤就對不上。
我用 TradingView 的 Bar Replay 逐根重播,看即時出來的訊號跟歷史回測是不是同一批。BTC 日線那套重播了 229 根 K 棒,訊號完全一致。
再用自己寫的離線模擬器對帳,60 筆交易的進出場時間全部對上。指標看不到原始碼的時候,這是少數能確認它沒偷看未來的方法。

工程
TradingView webhook 串幣安自動下單:BTC 日線策略的 relay 與交易所端停損
一套 BTC 日線策略從回測調參做到幣安自動下單:只有日線樣本夠、調回測殼比調指標有用,relay 照目標部位對齊而不是照指令下單,停損掛在交易所端。
留言
載入留言中…