定義
CAGR(Compound Annual Growth Rate,年化報酬率)把一段期間的總報酬攤平成「每年複合成長率」,也就是假設資產每年以同一比率複利成長、期末會得到相同總報酬的那個比率。例如 5 年累積報酬 100%,CAGR 約 14.9%。
公式與計算
CAGR = (期末價值 ÷ 期初價值) ^ (1 ÷ 年數) − 1
手算範例:100 萬元投資 5 年變成 150 萬元,CAGR =(150 ÷ 100)^(1/5)− 1 ≈ 8.45%。驗算:1.0845 連乘 5 次約等於 1.5。它低於「總報酬 50% ÷ 5 年=10%」的直覺算法,因為複利假設每年獲利都滾入本金,基數逐年變大,攤下來的固定成長率就比較小。
台股真實實例
同一檔 0050 含息買進持有,換一個回測視窗,CAGR 就是另一個數字:
| 回測視窗 | 0050 含息 CAGR | 來源 |
|---|---|---|
| 2008 至 2026 | 14.8% | 動能策略台股 18 年實測 |
| 2015 至 2026 | 21.3% | 月營收動能選股 11 年回測 |
| 2018 至 2026 | 25.05% | 多因子選股策略教學 |
起點差十年,同一檔 ETF 的年化差了約 10 個百分點。所以比較兩個策略時,必須用同一段視窗與同一組成本假設,否則數字沒有可比性。策略端的實例:複合動能優化版2008 至 2026 年化 36.4%、日夏普 1.18,同視窗 0050 為 14.8%;四因子選股2018 至 2026 年化 29.45%,同視窗 0050 為 25.05%;月營收動能2015 至 2026 年化 50.0%,代價是 -35.6% 的最大回撤。
用 finlab 計算
顯示程式碼
from finlab import data
from finlab.backtest import sim
close = data.get("price:收盤價")
# 範例策略:持有股價創 60 日新高的股票,月頻再平衡
position = close == close.rolling(60).max()
report = sim(position, resample="M")
# 回測報告直接提供年化報酬率
stats = report.get_stats()
print(f"CAGR:{stats['cagr']:.2%}")
# 從權益曲線手算驗證
equity = report.creturn
years = (equity.index[-1] - equity.index[0]).days / 365.25
cagr = (equity.iloc[-1] / equity.iloc[0]) ** (1 / years) - 1
print(f"手算 CAGR:{cagr:.2%}")常見陷阱
CAGR 與平均年報酬是兩回事。 一年 +50%、隔年 −50%,算術平均是 0%,但資產實際只剩 75%,CAGR 約 −13.4%。波動越大,兩者差距越大;用算術平均評估策略會系統性高估績效。
只看 CAGR 不看回撤。 年化 50.0% 的月營收動能策略伴隨 -35.6% 的最大回撤,帳上浮虧三成五時停損出場的人,拿不到那個年化。CAGR 要和最大回撤、夏普比率一起看,才知道報酬是用多少風險換來的。
成本口徑不一致的 CAGR 不能比。 一邊內扣手續費與證交稅、一邊零成本,零成本那邊的年化會虛胖;周轉率越高的策略差距越大,比較前先確認兩邊費用假設相同。
相關詞條與延伸閱讀
- 回測報酬率是怎麼算出來的:從單筆交易、權益曲線到 CAGR 的完整拆解與手算對帳
- 動能策略台股 18 年實測:同一策略逐步優化時,CAGR 與回撤如何連動
- 多因子選股策略教學:年化 29.45% 與 0050 的逐項對照
- 相關詞條:勝率、周轉率、滑價、夏普比率、最大回撤
- 工具:量化交易完整指南與線上回測
本頁僅供教學與研究參考,不構成投資建議。