Mục tiêu
Tiếp nối Bài 1 và Bài 2, trong bài này chúng ta sẽ:
- Xây dựng phiên bản alpha cải tiến
- Giảm độ nhiễu, tăng khả năng dự đoán
- Kiểm tra lại PnL sau khi tối ưu
- Trả lời các câu hỏi mở và thảo luận thêm
Cải tiến Alpha
Dựa trên phân tích từ Bài 2, ta thực hiện các cải tiến sau:
| Vấn đề | Cách xử lý |
|---|---|
rank(-returns) gây nhiễu |
Loại bỏ, chỉ giữ AB_NR |
| Turnover cao | Hạn chế tín hiệu quá nhạy, lọc mạnh hơn |
| RET_CO chưa tối ưu | Dùng phiên bản log hoặc transform mượt |
| Weight tập trung vào long | Giới hạn chênh lệch long/short |
Công thức Alpha cải tiến
# Loại bỏ rank(-returns)
Alpha = rank(AB_NR)
# Hoặc thay thế bằng một hàm transform mượt hơn
Alpha = np.tanh(AB_NR) # mượt và chặn giá trị
Kết quả cải tiến
| Năm | Sharpe | Turnover | Fitness | Drawdown |
|---|---|---|---|---|
| 2018 | 0.54 | 9.27% | 0.36 | 5.43% |
| 2019 | 2.74 | 9.00% | 4.07 | 27.60% |
| 2020 | 2.71 | 10.26% | 5.00 | 42.61% |
| 2021 | 2.85 | 9.00% | 5.41 | 45.02% |
| 2022 | 3.41 | 9.84% | 6.78 | 49.44% |
| 2023 | -10.01 | 10.30% | -37.69 | -177.19% |
Alpha cải tiến hoạt động rất tốt từ 2019–2022, nhưng thất bại nghiêm trọng ở 2023 → cần kiểm tra tính ổn định.
Biểu đồ PnL sau cải tiến (giả lập)
import matplotlib.pyplot as plt
years = ['2018', '2019', '2020', '2021', '2022', '2023']
pnl = [5, 15, 35, 60, 85, 30] # PnL giảm mạnh ở 2023
plt.figure(figsize=(10, 5))
plt.plot(years, pnl, marker='o', label='PnL Alpha cải tiến', color='green')
plt.title('Hiệu suất Alpha sau cải tiến')
plt.xlabel('Năm'); plt.ylabel('PnL (giả lập)')
plt.grid(True); plt.legend()
plt.show()
Trả lời các câu hỏi mở của tác giả
1. Có overfit không?
Có khả năng, nếu cải tiến chỉ hoạt động tốt ở 2020–2022 → nên kiểm tra trên out-of-sample hoặc dùng walk-forward test.
2. Làm sao tránh long quá nhiều?
Dùng kỹ thuật neutralization (ngành, beta) + phân bổ đều top/bottom signal.
3. Nếu chỉ dùng AB_NR có đủ không?
AB_NRkhá mạnh, nhưng có thể kết hợp thêm volume, volatility hoặc các yếu tố vĩ mô để tăng robust.
Kết luận
| Tóm tắt | Nội dung |
|---|---|
RET_CO kết hợp RET_OC và rolling AB_NR cho kết quả tốt |
|
| Cần kiểm tra thêm về điều kiện thị trường | |
| Tối ưu biểu thức, giảm turnover, chống overfitting |
Gợi ý mở rộng
- Thử biểu thức
RET_CO = log(close / open) - log(open / close_lag1) - Áp dụng decay, truncation, neutralization tùy theo mục tiêu
- Backtest thêm nhiều năm, nhiều vùng thị trường