Mean Reversion với Bollinger Band: Khung định lượng cho TTCK Việt Nam
Chiến lược mean reversion sử dụng Bollinger Band 20,2 cho VN30. Công thức, pseudocode Python, backtest assumptions, khi nào áp dụng và 5 cạm bẫy phổ biến.
Mean reversion là giả định cốt lõi của một nhánh lớn trong giao dịch định lượng: khi giá lệch xa khỏi giá trị “công bằng” (fair value), xác suất cao nó sẽ quay lại. Khác với trend following, mean reversion sinh lời từ biến động ngắn hạn chứ không phải xu hướng dài.
Trên TTCK Việt Nam, mean reversion phù hợp với cổ phiếu vốn hóa lớn, thanh khoản cao (VN30) trong giai đoạn thị trường đi ngang (sideway). Nó kém hiệu quả khi thị trường có trend mạnh — đó là lý do hệ thống cần regime filter trước khi kích hoạt tín hiệu.
1. Định nghĩa & cơ sở lý thuyết
Bollinger Band định nghĩa 3 đường trên 1 chuỗi giá $P_t$: $$ \begin{aligned} MA_n &= \frac{1}{n}\sum_{i=t-n+1}^{t} P_i \ \sigma_n &= \sqrt{\frac{1}{n}\sum_{i=t-n+1}^{t}(P_i - MA_n)^2} \ BB_{upper} &= MA_n + k \cdot \sigma_n \ BB_{lower} &= MA_n - k \cdot \sigma_n \end{aligned} $$
Với tham số mặc định Bollinger gốc: $n=20$, $k=2$. Vùng giá nằm ngoài $[BB_{lower}, BB_{upper}]$ chiếm xấp xỉ 5% phân phối nếu $P_t$ gaussian — trong thực tế tỷ lệ này thường cao hơn vì fat tail.
Trong đó:
- $P_t$ là giá đóng cửa tại thời điểm $t$
- $MA_n$ là trung bình trượt window $n$
- $\sigma_n$ là độ lệch chuẩn rolling
- Các tham số khác diễn giải trong bảng tham số bên dưới
2. Pseudocode triển khai
def mean_reversion_signal(prices, n=20, k=2.0, regime_filter=True):
"""
prices: pd.Series giá đóng cửa
n, k: tham số Bollinger Band
regime_filter: chỉ trade khi ADX(14) < 20 (sideway)
Trả về Series tín hiệu trong {-1, 0, +1}
"""
ma = prices.rolling(n).mean()
sd = prices.rolling(n).std()
upper = ma + k * sd
lower = ma - k * sd
signal = pd.Series(0, index=prices.index)
signal[prices < lower] = +1 # giá thủng band dưới → mua
signal[prices > upper] = -1 # giá vượt band trên → bán
if regime_filter:
adx = compute_adx(prices, n=14)
signal[adx >= 20] = 0 # tắt tín hiệu khi có trend
return signal
Code mẫu trên là khung tham khảo — triển khai production cần thêm: validate input, handle NaN, log signal, hook vào execution engine (REST API qua TCBS/SSI/Vndirect), và unit test cho từng nhánh logic.
3. Tham số & khoảng walk-forward
| Tham số | Mặc định | Khoảng walk-forward | Ghi chú |
|---|---|---|---|
Lookback n |
20 | 10 – 40 | Ngắn hơn → tín hiệu nhiễu, dài hơn → trễ |
Số σ k |
2.0 | 1.5 – 3.0 | k cao → ít trade, hit rate cao hơn |
| ADX threshold | 20 | 15 – 30 | Lọc regime trend |
| Holding period | 5 phiên | 3 – 10 | Thoát khi giá chạm MA_n |
Lưu ý về walk-forward optimization: không nên fix tham số “tốt nhất” trên toàn bộ lịch sử. Quy trình chuẩn là rolling window — fit tham số trên 252 phiên gần nhất, áp dụng 63 phiên tiếp theo (tỷ lệ ~80/20), sau đó shift cửa sổ. Báo cáo distribution của Sharpe, max DD, Calmar trên các fold thay vì 1 con số tổng.
4. Đặc thù thị trường Việt Nam
Trên VN30, đặc thù biên độ ±7% HOSE và T+2.5 settlement ảnh hưởng trực tiếp:
- Biên độ chặn pha đảo chiều cực mạnh trong 1 phiên — band có thể bị “kẹt” ở giá trần/sàn.
- T+2.5 không cho phép short cổ phiếu cơ sở → tín hiệu
signal = -1chỉ áp dụng được trên VN30F1M (phái sinh) hoặc dùng để thoát vị thế long. - Phí giao dịch round-trip ~0.3% (mua 0.15% + bán 0.25% gồm thuế) — chiến lược cần edge ≥ 0.5%/trade mới có lời ròng.
5. Năm cạm bẫy phổ biến khi áp dụng
-
Trend nuốt mean reversion: giai đoạn 2020 H2 và 2021 Q1, VN-Index trend mạnh → mean reversion lệnh short trên VN30F1M thua liên tiếp. Regime filter là bắt buộc.
-
Optimization bias: dễ overfit
nvàktrên backtest. Walk-forward với window 252 phiên giúp ước lượng hiệu năng thực. -
Survivorship bias: backtest VN30 hiện tại bỏ qua các mã từng trong index rồi bị loại. Sử dụng VN30 historical constituents để tránh.
-
Slippage with thin liquidity: midcap có spread 0.3-0.5% — ăn hết edge mean reversion ngắn hạn.
-
Earnings shock: tín hiệu mean reversion vô hiệu khi gặp tin bất thường (ĐHCĐ, BCTC) — exclude trade quanh ngày công bố.
6. Khi nào nên dùng — khi nào không
✅ Nên dùng khi
- Thị trường đi ngang (ADX < 20), volatility ổn định
- Cổ phiếu vốn hóa lớn, thanh khoản > 5 tỷ/ngày
- Có cơ chế stop-loss cứng: thoát nếu giá lệch thêm 1σ sau entry
❌ Không nên dùng khi
- Trend mạnh (ADX > 25) — band breakout có ý nghĩa khác (continuation)
- Biến động cực đoan (sự kiện vĩ mô, công bố Fed, BCTC quý) — chiến lược không pricing được news shock
- Cổ phiếu thanh khoản thấp — slippage ăn hết edge
7. Vị trí trong hệ thống chiến lược định lượng
Chiến lược “Hồi quy về trung bình” không hoạt động độc lập — trong portfolio định lượng đa chiến lược, nó được kết hợp với các chiến lược khác để tận dụng correlation thấp giữa các họ tín hiệu (mean reversion ↔ trend following thường có correlation âm trong giai đoạn sideway).
Các chiến lược liên quan đã trình bày trong chuỗi bài này:
8. Tham khảo học thuật
-
Bollinger, J. (2001). Bollinger on Bollinger Bands. McGraw-Hill.
-
Lo, A. & MacKinlay, A. C. (1988). Stock market prices do not follow random walks. Review of Financial Studies, 1(1).
-
Khandani, A. & Lo, A. (2007). What happened to the quants in August 2007? Journal of Investment Management.
Ghi chú phương pháp: Bài viết tổng hợp khung định lượng trên cơ sở lý thuyết và quy ước cộng đồng quant. Các giả định về phí giao dịch, slippage, regime filter là giả định mô hình — kết quả backtest thực tế phụ thuộc dataset, universe, và cách xử lý survivorship bias. Người đọc tự kiểm chứng bằng dữ liệu của mình trước khi triển khai 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:
Câu hỏi đi sâu chủ đề này
Khi nào chiến lược Mean Reversion Bollinger Band kém hiệu quả nhất trên TTCK Việt Nam và dấu hiệu nhận biết là gì?
Chiến lược này kém hiệu quả nhất khi thị trường hoặc cổ phiếu mục tiêu có xu hướng mạnh (uptrend hoặc downtrend) và không có ý định hồi về. Dấu hiệu nhận biết rõ ràng là khi chỉ số VN-Index, VN30, hoặc giá cổ phiếu cụ thể (như HPG, FPT) có chuỗi nến dài đồng màu, thanh khoản tăng đột biến, và chỉ báo ADX(14) vượt ngưỡng 30-40, cho thấy xu hướng đang chiếm ưu thế. Giá có thể liên tục bám sát dải trên (uptrend) hoặc dải dưới (downtrend) của Bollinger Band mà không có xu hướng quay đầu về đường MA trung tâm. Ví dụ: giai đoạn VN-Index tăng mạnh cuối 2020 – đầu 2021, hoặc sụt giảm mạnh tháng 4-5/2022. Nếu cố gắng "bắt đáy" hoặc "bắt đỉnh" theo tín hiệu Mean Reversion trong những giai đoạn này, nhà đầu tư sẽ gặp thua lỗ lớn do giá tiếp tục di chuyển theo xu hướng chính.
Ngoài ADX < 20, có chỉ báo nào khác hiệu quả để lọc trạng thái thị trường (regime filter) cho chiến lược Mean Reversion Bollinger Band trên VN30 không?
Hoàn toàn có. Bên cạnh ADX < 20 để xác định thị trường sideway, bạn có thể cân nhắc các regime filter khác. Một phương pháp là sử dụng ATR (Average True Range): Thị trường đi ngang thường có biến động thấp, do đó khi ATR(14) của VN30 hoặc cổ phiếu cụ thể (như STB, VPB) xuống dưới một ngưỡng nhất định (ví dụ 1.5% giá trung bình 20 phiên), đó có thể là dấu hiệu thị trường đang sideway. Một cách khác là theo dõi khoảng cách giữa các đường trung bình động: Khi MA ngắn hạn (ví dụ MA(20)) và MA dài hạn (ví dụ MA(50)) của VN30 nằm sát nhau, giao cắt liên tục hoặc song song trong một biên độ hẹp, cho thấy thị trường thiếu động lực xu hướng. Quan trọng là bạn cần backtest với dữ liệu TTCK Việt Nam để tìm ra ngưỡng và chỉ báo phù hợp nhất với danh mục của mình.
Đặc thù về biên độ giao dịch (±7% HOSE) và cơ chế T+2.5 trên TTCK Việt Nam ảnh hưởng thế nào đến chiến lược Mean Reversion Bollinger Band?
Đặc thù của TTCK Việt Nam đòi hỏi sự điều chỉnh nhất định. Biên độ giao dịch ±7% trên HOSE có thể làm tín hiệu Mean Reversion bị "kẹt". Nếu giá chạm sàn 7% khi tín hiệu mua xuất hiện (dưới BB_lower) nhưng không hồi phục ngay mà tiếp tục giảm phiên sau đó, chiến lược cần có quản lý rủi ro chặt chẽ (stop-loss) và cân nhắc thanh khoản. Cơ chế T+2.5 tạo ra rủi ro nắm giữ qua đêm (overnight risk) và hạn chế khả năng thoát lệnh nhanh chóng. Nếu bạn mua khi giá chạm BB_lower và kỳ vọng hồi phục trong T+1, T+2 nhưng thị trường tiếp tục giảm mạnh (ví dụ VN30 giảm 3-4 phiên liên tục), bạn không thể cắt lỗ ngay lập tức. Điều này buộc phải có chiến lược quản lý vị thế (position sizing) thận trọng hơn, có thể giảm quy mô lệnh hoặc ưu tiên các tín hiệu mạnh hơn trên các mã thanh khoản cao (như VCB, VIC) để đảm bảo khả năng khớp lệnh khi cần.
Các nhà đầu tư cá nhân tại Việt Nam thường mắc phải những sai lầm nào khi áp dụng chiến lược Mean Reversion Bollinger Band?
Một trong những sai lầm phổ biến nhất mà các nhà đầu tư cá nhân tại Việt Nam hay mắc phải là bỏ qua regime filter. Họ thường cố gắng áp dụng Mean Reversion khi thị trường có xu hướng mạnh (uptrend hoặc downtrend) mà không lọc trạng thái. Ví dụ: mua cổ phiếu HPG khi giá giảm liên tục và thủng BB_lower trong giai đoạn thị trường downtrend mạnh (như tháng 4-5/2022) với kỳ vọng "giá rẻ sẽ hồi về", nhưng thực tế giá lại tiếp tục giảm sâu, gây ra thua lỗ lớn. Sai lầm thứ hai là không có điểm cắt lỗ (stop-loss) rõ ràng. Khi giá đi ngược lại kỳ vọng và vượt xa dải Bollinger Band theo một xu hướng mạnh, NĐT cá nhân thường gồng lỗ với hy vọng giá sẽ hồi, dẫn đến thiệt hại nặng nề. Thay vào đó, cần có ngưỡng cắt lỗ được định lượng rõ ràng, ví dụ khi giá đóng cửa dưới BB_lower 1.5 lần độ lệch chuẩn.
P.Thai Capital