定義
勝率(Win Rate)是獲利交易筆數佔總交易筆數的比例。它描述賺錢的頻率,沒有描述賺錢的幅度;賠時賠很多、賺時賺很少的策略,勝率很高也可能賠錢,判斷策略必須把勝率與賺賠比一起看。
公式與計算
勝率 = 獲利交易筆數 ÷ 總交易筆數
手算範例:10 筆交易有 6 筆獲利,勝率 60%。要判斷賺不賺錢得再算期望值:若平均每筆獲利 5%、平均每筆虧損 10%,期望值= 60% × 5% − 40% × 10% = −1%,勝率六成仍是期望值為負的虧錢策略。反過來,勝率 40% 但平均賺 15%、平均賠 5%,期望值= 40% × 15% − 60% × 5% = +3%,長期反而是賺的。
台股真實實例
- 年化 33.9% 的投信買超+營收動能策略,1,317 筆交易的勝率只有 52.7%,只比丟銅板高一點:報酬來自賺的時候賺得夠多,而非把勝率做高。
- 董監改選行情選股法近 10 年出現 46 次訊號,勝率 82%、持有 3 個月平均獲利 15%、中位數 11%。高勝率的事件型策略存在,但 46 次屬於小樣本,統計可信度低於上千筆交易的策略。
- 停損不一定改善勝率:ATR 移動停損台股實測把勝率從 42.8% 壓到 36.5%、年化報酬從 8.0% 變成 -3.6%,一批「先跌後漲」的交易被停損截斷成確定虧損。
- 網傳「紅包行情勝率 80%」,用 2016 至 2025 十年資料實算只有 60%(6/10 年上漲)。聽到勝率數字,先問樣本期間與統計方式。
用 finlab 計算
顯示程式碼
from finlab import data
from finlab.backtest import sim
rev = data.get("monthly_revenue:當月營收")
# 範例策略:月營收動能前 10 名,月頻再平衡
score = rev.average(3) / rev.average(12)
position = score.is_largest(10)
report = sim(position, resample="M")
# 回測統計直接提供勝率
stats = report.get_stats()
print(f"勝率:{stats['win_ratio']:.1%}")
# 從逐筆交易驗證:return 欄位大於 0 的比例
trades = report.trades.dropna(subset=["return"])
win_rate = (trades["return"] > 0).mean()
print(f"逐筆驗證:{win_rate:.1%},共 {len(trades)} 筆交易")常見陷阱
高勝率不等於賺錢。 勝率 70% 的策略若做對只小賺、做錯就大賠,長期照樣是輸的;回測是什麼把這列為最容易踩的觀念坑之一。評估策略時把勝率、平均賺賠比、期望值三個數字一起攤開,缺一不可。
小樣本的勝率不可信。 46 次訊號的 82% 與 1,317 筆的 52.7%,統計意義完全不同;一年只觸發幾次的策略,勝率的隨機波動非常大,幾次好運就能把數字墊高,不能直接外推未來。
相關詞條與延伸閱讀
- 回測是什麼:勝率與賺賠比為什麼要綁在一起判讀
- MAE / MFE 分析:從逐筆交易拆解獲利與虧損交易的結構
- 法人跟單術:勝率 52.7% 仍能年化 33.9% 的完整回測
- 相關詞條:CAGR、周轉率、滑價、最大回撤、回測
- 工具:股票選股完整指南
本頁僅供教學與研究參考,不構成投資建議。