Backtest đúng cách: Tránh overfitting và lookahead bias
2025-06-01 — Admin
Backtest là bước không thể thiếu khi phát triển chiến lược giao dịch định lượng. Tuy nhiên, nếu không cẩn thận, bạn rất dễ mắc phải các sai lầm khiến kết quả backtest không phản ánh thực tế. Bài viết này sẽ giúp bạn nhận diện và tránh các bẫy phổ biến.
1. Những sai lầm phổ biến khi backtest chiến lược
- Overfitting: Tối ưu quá mức cho dữ liệu quá khứ, mô hình không hiệu quả với dữ liệu mới.
- Lookahead bias: Sử dụng thông tin tương lai trong quá trình backtest mà thực tế không thể biết trước.
- Data snooping: Thử nghiệm quá nhiều chiến lược trên cùng một tập dữ liệu, dẫn đến kết quả ảo.
- Survivorship bias: Chỉ xét các cổ phiếu còn tồn tại, bỏ qua những mã đã bị loại khỏi thị trường.
2. Tránh overfitting và lookahead bias
- Chỉ sử dụng dữ liệu có thể biết tại thời điểm ra quyết định.
- Không dùng giá đóng cửa ngày hôm nay để quyết định giao dịch trong ngày đó.
- Đơn giản hóa mô hình, tránh quá nhiều tham số.
- Sử dụng tập kiểm tra (out-of-sample) để đánh giá mô hình.
Ví dụ lookahead bias:
# Sai: sử dụng giá đóng cửa ngày mai để ra quyết định hôm nay
signal = (df['Close'].shift(-1) > df['Close'])
3. Cross-validation trong dữ liệu tài chính
Khác với dữ liệu thông thường, dữ liệu tài chính có tính chuỗi thời gian (time series), không thể xáo trộn ngẫu nhiên. Kỹ thuật cross-validation phù hợp là TimeSeriesSplit:
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_index, test_index in tscv.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Huấn luyện và đánh giá mô hình
4. Walk-forward analysis – mô phỏng giao dịch thực tế
Walk-forward analysis là kỹ thuật kiểm tra mô hình bằng cách liên tục huấn luyện trên dữ liệu quá khứ và kiểm tra trên dữ liệu tương lai gần, giống như giao dịch thực tế:
window = 252 # 1 năm giao dịch
step = 21 # 1 tháng giao dịch
for start in range(0, len(df) - window, step):
train = df.iloc[start:start+window]
test = df.iloc[start+window:start+window+step]
# Huấn luyện trên train, kiểm tra trên test
Tổng kết
- Luôn kiểm tra kỹ các bẫy overfitting, lookahead bias khi backtest.
- Sử dụng cross-validation phù hợp cho dữ liệu chuỗi thời gian.
- Walk-forward analysis giúp mô phỏng sát thực tế nhất.
Chúc bạn backtest thành công và xây dựng chiến lược hiệu quả!