Profit Factor là gì? Tỷ lệ tổng lãi/tổng lỗ trong backtest
Profit Factor = tổng lãi / tổng lỗ tuyệt đối — chỉ số trade-by-trade phổ biến. Công thức, Python, ngưỡng PF > 1.5 ổn, > 2 tốt, áp dụng cho backtest chiến lược VN30.
Profit Factor (PF) là tổng lãi (gross profit) chia cho tổng lỗ tuyệt đối (gross loss) trong backtest — chỉ số trade-by-trade phổ biến nhất sau Win Rate. PF = 1 nghĩa hoà vốn (chưa tính phí). PF > 1 có lãi, < 1 lỗ.
Khác với Sharpe (return/risk theo period), PF tính trên trade-level: cộng dồn tất cả lệnh thắng vs lệnh thua. Phù hợp đánh giá chiến lược discrete trade (entry/exit rõ ràng) như breakout, mean reversion, pairs trading. Ít phù hợp cho continuous strategies (always-in-market).
1. Định nghĩa & công thức
$$ PF = \frac{\sum_{i: P_i > 0} P_i}{\sum_{i: P_i < 0} |P_i|} $$
Với $P_i$ = profit của trade $i$. Tương đương: $$ PF = \frac{\text{WinRate} \cdot \text{AvgWin}}{(1 - \text{WinRate}) \cdot \text{AvgLoss}} $$
2. Cách tính bằng Python
import numpy as np
def profit_factor(trade_pnls):
"""
trade_pnls: array PnL từng trade (dương=lãi, âm=lỗ)
"""
gross_profit = trade_pnls[trade_pnls > 0].sum()
gross_loss = -trade_pnls[trade_pnls < 0].sum()
return gross_profit / gross_loss if gross_loss > 0 else np.inf
Code mẫu trên là khung tham khảo cho việc tự tính Hệ số lợi nhuận. Khi tích hợp vào hệ thống production, cần thêm: validate input (NaN, length), handle edge cases (zero variance, empty series), unit test cho từng nhánh, và caching khi gọi nhiều lần trên cùng dataset.
3. Khoảng giá trị & cách diễn giải
| Profit Factor | Đánh giá |
|---|---|
| < 1 | Lỗ — không tradable |
| 1 – 1.2 | Marginal — phí ăn hết edge |
| 1.2 – 1.5 | Acceptable — cần xác nhận robust |
| 1.5 – 2.0 | Tốt — phù hợp deploy nhỏ |
| 2.0 – 3.0 | Rất tốt |
| > 3.0 | Đáng nghi — kiểm tra overfit / data leak |
4. Giá trị điển hình theo loại tài sản / chiến lược
| Loại chiến lược | PF realistic |
|---|---|
| Trend following CTA | 1.3 – 1.8 |
| Mean reversion VN30 | 1.4 – 2.0 |
| Pairs trading | 1.5 – 2.5 |
| High-frequency market making | 1.05 – 1.15 (turnover cao) |
| Backtest “đẹp” nghi vấn | thường > 3 |
Lưu ý: bảng giá trị điển hình mang tính tham khảo, dựa trên quy ước cộng đồng quant và sample lịch sử công khai. Giá trị thực tế phụ thuộc dataset, period, và phương pháp tính cụ thể.
5. Bốn cạm bẫy phổ biến khi sử dụng
-
Phụ thuộc số trade: chiến lược 50 trade/năm vs 5 trade/năm có PF khác hẳn — số ít trade noisy.
-
Bị 1 trade outlier dominate: 1 trade lãi to làm PF inflate. Báo cáo PF kèm median trade và max single trade.
-
Không adjust phí: PF gross vs net khác nhau đáng kể với chiến lược turnover cao.
-
Không capture sequence risk: PF = 1.5 đạt được bằng 5 win + 5 loss xen kẽ vs 5 loss đầu + 5 win sau khác hoàn toàn về tâm lý.
6. Khi nào chỉ số này gây hiểu lầm
PF misleading khi: (1) số trade < 30 — noise dominate; (2) outlier 1 trade chiếm > 30% gross profit; (3) chiến lược continuous (PF không define được tốt khi không có discrete trade); (4) PF tính gross không trừ phí.
7. Đặc thù khi áp dụng cho TTCK Việt Nam
Tại VN, phí round-trip ~0.3% (mua 0.15% + bán 0.25% gồm thuế). Chiến lược PF gross 1.5 với avg trade 2% sẽ có PF net ≈ 1.3 (sau phí 0.3% mỗi trade). Do đó nên báo cáo PF cả 2 phiên bản — gross và net of all costs.
8. Các chỉ số liên quan trong cùng hệ thống
Hệ số lợi nhuận (PF) không nên đọc đơn lẻ. Trong báo cáo rủi ro chuyên nghiệp, nó luôn được trình bày cùng các chỉ số bổ sung để cross-check và tránh blindspot. Các chỉ số liên quan đã trình bày trong chuỗi bài này:
9. Tham khảo học thuật
-
Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies. Wiley.
-
Tharp, V. (2006). Trade Your Way to Financial Freedom. McGraw-Hill.
10. Câu hỏi thường gặp
Hệ số lợi nhuận bao nhiêu là tốt? Tham khảo bảng diễn giải ở mục 3. Không có ngưỡng “tốt tuyệt đối” — phụ thuộc loại chiến lược, sample size, và benchmark tham chiếu.
Làm sao tự tính Hệ số lợi nhuận trên danh mục cá nhân? Sử dụng code Python mẫu ở mục 2. Input cần thiết: chuỗi returns hàng phiên (daily) của danh mục, tối thiểu 252 phiên (1 năm) để có ý nghĩa thống kê.
Hệ số lợi nhuận có khác giữa thị trường VN và quốc tế không? Có. Đặc thù VN (biên độ ±7% HOSE, T+2.5, cấm short cơ sở) ảnh hưởng đến cách tính và diễn giải. Chi tiết ở mục 7.
Ghi chú phương pháp: Bài viết tổng hợp định nghĩa, công thức, và quy ước cộng đồng quant cho chỉ số Hệ số lợi nhuận (PF). Các giá trị điển hình mang tính tham khảo, không phải khuyến nghị đầu tư. Người đọc tự kiểm chứng trên dữ liệu của mình trước khi sử dụng cho quyết định vốn thật.
Miễn trừ trách nhiệm: Nội dung mang tính phân tích định lượng, không phải khuyến nghị đầu tư. Nhà đầu tư tự chịu trách nhiệm với quyết định của mình.
Áp dụng vào tài khoản thật?
Mở tài khoản chứng khoán qua mã giới thiệu — nhận tư vấn 1-1, DIAMOND signal VN30 miễn phí 6 tháng, ưu đãi phí giao dịch.
CTCK VPS Securities
- Mã IB: 9836 (mở online 15 phút)
- Phí 0.15% · margin 13%/năm
- + DIAMOND signal VN30 — 6 tháng
- + Tư vấn cơ cấu danh mục 1-1
Gói VIP / DIAMOND
- Tín hiệu VN30 + Midcap hằng phiên
- Backtest 5-15 năm minh bạch
- Báo cáo NAV hằng tháng
- Workshop định lượng hằng tháng
⚠️ Giao dịch chứng khoán có rủi ro mất vốn. Chỉ đầu tư số tiền bạn có thể chịu mất. P.Thai Capital không khuyến nghị mua/bán cụ thể và không bảo lãnh lợi nhuận.
Lý thuyết bài này có thể test trên dữ liệu của bạn:
P.Thai Capital