定義
周轉率(Turnover)衡量一段時間內投資組合換股的頻率,年化周轉率 200% 約等於整個組合換過 2 次。周轉率越高,手續費、證交稅與滑價吃掉的報酬越多,它決定一個策略「回測賺的錢,實單還剩多少」。
公式與計算
常用單邊口徑:每次再平衡時,把所有持股權重變化的絕對值加總、除以 2(買進與賣出各算一邊),再把各期加總成年化。
手算範例:100 萬元的組合每月換股時賣出 25 萬、買進 25 萬,單月單邊周轉 25%;十二個月都如此,年化單邊周轉率約 300%,等於整個組合一年換了 3 次。
台股真實實例
低周轉與高周轉策略對成本的敏感度天差地別。回測報酬率拆解用同一段視窗(2018 至 2026)實測兩套策略、各跑三檔手續費率:
| 策略(年化報酬 CAGR) | 年單邊換手 | 手續費 6 折 | 牌價 0.1425% | 雙倍費率 |
|---|---|---|---|---|
| 市值前 5 等權 | 約 85.5% | 22.48% | 22.31% | 21.91% |
| 60 日動能前 5 等權 | 約 786.5% | 22.37% | 21.24% | 18.45% |
低周轉策略從打折到雙倍費率只差 0.57 個百分點,高周轉策略同樣的變化掉了 3.92 個百分點。另外兩個實例:ATR 移動停損實測把單邊年化換手從 6.0 倍推高到 10.0 倍,多出的換手粗估一年多吃約 0.8 個百分點;四因子月頻策略把單邊成本假設從 0% 拉到 0.5%,年化從 32.25% 掉到 22.64%。
用 finlab 計算
顯示程式碼
from finlab import data
from finlab.backtest import sim
close = data.get("price:收盤價")
# 範例策略:60 日動能前 10 名,月頻再平衡
momentum = close / close.shift(60) - 1
position = momentum.is_largest(10)
report = sim(position, resample="M")
# 用月底持股權重的變化估算單邊周轉率
weights = position.astype(float)
weights = weights.div(weights.sum(axis=1), axis=0)
monthly = weights.resample("M").last()
one_way = (monthly.diff().abs().sum(axis=1) / 2).dropna()
print(f"月均單邊周轉率:{one_way.mean():.1%}")
print(f"年化單邊周轉率:{one_way.mean() * 12:.1%}")常見陷阱
高周轉可以活,前提是訊號付得起成本。 動能前 5 策略年換手約 786.5%,在牌價費率下仍有 21.24% 的年化;真正危險的是沒扣成本就下結論,高周轉策略沒扣成本的回測,排名可能整個翻盤。回測時把費率設成自己的券商方案,把換手率當成本槓桿來管理。
月頻再平衡不等於整組砍掉重買。 finlab 的 sim() 只對實際買賣的差額計收費稅,連續留在名單內的股票只有權重微調的部分被收費,低換手策略的實際成本遠低於「每月來回一趟」的粗估;反過來說,疊加停損、停利等規則會實質推高換手,成本要重新評估。
相關詞條與延伸閱讀
- 回測報酬率是怎麼算出來的:費率敏感度與周轉率的完整實測與手算對帳
- 量化交易的缺點與風險:交易成本如何複利侵蝕高周轉策略
- 回測的流動性風險分析:換手之外,成交量夠不夠也要驗證
- 相關詞條:滑價、CAGR、勝率、回測
- 工具:程式交易完整指南
本頁僅供教學與研究參考,不構成投資建議。