Time-Series Momentum 12-1: Chiến lược momentum định lượng cho VN
Time-series momentum 12-1 áp dụng cho TTCK Việt Nam. Công thức, pseudocode, backtest assumptions, so sánh với cross-sectional momentum và 4 cạm bẫy thực thi.
Time-series momentum (TSMOM) — công bố bởi Moskowitz, Ooi & Pedersen (2012) — là một trong những anomalies dai dẳng nhất qua nhiều thị trường và nhiều thập kỷ. Nguyên tắc đơn giản: mua tài sản đã tăng trong 12 tháng qua, bán tài sản đã giảm, lookback bỏ tháng gần nhất để tránh hiệu ứng đảo chiều ngắn hạn.
Khác với cross-sectional momentum (so sánh giữa các mã), TSMOM xét mỗi mã độc lập: chỉ cần return 12-1 dương → long, âm → short (hoặc thoát). Trên TTCK VN, TSMOM phù hợp với danh mục đa cổ phiếu rebalance hàng tháng, kết hợp inverse-vol để cân bằng rủi ro.
1. Định nghĩa & cơ sở lý thuyết
Tín hiệu TSMOM 12-1 cho mã $i$ tại tháng $t$: $$ sig_{i,t} = \text{sign}\left(\frac{P_{i,t-1}}{P_{i,t-12}} - 1\right) $$
Trọng số inverse-volatility: $$ w_{i,t} = sig_{i,t} \cdot \frac{\sigma_{target}}{\sigma_{i,t}} $$ với $\sigma_{i,t}$ là volatility ex-ante (rolling 36 tháng), $\sigma_{target}$ thường set 10-15%/năm.
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 tsmom_signal(prices_monthly, lookback=12, skip=1, vol_target=0.10):
"""
prices_monthly: DataFrame giá đóng cửa cuối tháng, columns = mã
lookback=12, skip=1 → return từ t-12 đến t-1 (bỏ tháng gần nhất)
vol_target: ex-ante annual vol target để scale position
"""
ret_12_1 = prices_monthly.shift(skip) / prices_monthly.shift(lookback) - 1
signal = np.sign(ret_12_1)
# ex-ante vol từ daily returns 36 tháng gần nhất
monthly_ret = prices_monthly.pct_change()
ex_ante_vol = monthly_ret.rolling(36).std() * np.sqrt(12)
weights = signal * (vol_target / ex_ante_vol)
weights = weights.clip(-2, 2) # cap leverage
return weights
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 (tháng) | 12 | 6 – 18 | 12 cân bằng nhất theo paper Moskowitz et al. |
| Skip (tháng) | 1 | 0 – 2 | Skip tháng gần nhất tránh short-term reversal |
| Vol target | 10%/năm | 8 – 15% | Cho danh mục đa tài sản; cổ phiếu đơn lẻ cao hơn |
| Rebalance | Tháng | Tuần / Tháng | Tháng giảm chi phí, tuần tăng phản ứng |
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 VN, áp dụng TSMOM cần lưu ý:
- T+2.5 + cấm short cơ sở → tín hiệu
sig = -1chỉ thoát vị thế, không bán khống được. Có thể short qua VN30F1M. - Universe dao động: VN30 review 6 tháng/lần — phải dùng historical constituents, không phải VN30 hiện tại.
- Liquidity floor: nên giới hạn universe ở các mã có ADV (giá trị giao dịch trung bình) > 30 tỷ VND/ngày để đảm bảo thực thi.
- Rebalance friction: phí + thuế round-trip ~0.3% × turnover. TSMOM monthly có turnover trung bình 60-80%/tháng → drag ~0.2%/tháng.
5. Năm cạm bẫy phổ biến khi áp dụng
-
Crash risk: TSMOM bị ‘momentum crash’ khi thị trường đảo chiều mạnh từ bear sang bull (Daniel & Moskowitz, 2016). Long các mã đã rớt nhiều nhất sẽ ngược chiều TSMOM signal khi rebound.
-
Look-ahead bias trong vol estimation: nếu dùng cùng dữ liệu để compute return và vol → biased. Tách rõ in-sample / out-of-sample.
-
Universe bias: backtest trên VN30 hiện tại = survivorship bias. Phải tái tạo universe theo từng kỳ review.
-
Tax timing: tại VN, mỗi lệnh bán chịu thuế 0.1% — TSMOM monthly chịu drag thuế ~1-2%/năm.
6. Khi nào nên dùng — khi nào không
✅ Nên dùng khi
- Danh mục đa cổ phiếu (≥ 10 mã), rebalance hàng tháng
- Có cơ chế risk parity / inverse-vol weighting
- Kết hợp với drawdown control: cắt exposure khi danh mục mất ≥ 10% từ peak
❌ Không nên dùng khi
- Single-name trading (TSMOM là chiến lược danh mục, không phải tín hiệu cá nhân)
- Vốn nhỏ < 500tr (không diversify đủ → variance cao)
- Giai đoạn mean-reverting cực đoan (post-crash recovery)
7. Vị trí trong hệ thống chiến lược định lượng
Chiến lược “Quán tính giá 12-1” 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
-
Moskowitz, T., Ooi, Y., Pedersen, L. (2012). Time series momentum. Journal of Financial Economics, 104(2).
-
Daniel, K., Moskowitz, T. (2016). Momentum crashes. Journal of Financial Economics, 122(2).
-
Asness, C., Frazzini, A., Israel, R., Moskowitz, T. (2014). Fact, fiction and momentum investing. Journal of Portfolio 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 thì chiến lược Time-Series Momentum 12-1 kém hiệu quả hoặc không nên áp dụng cho TTCK Việt Nam?
Time-Series Momentum 12-1 kém hiệu quả nhất trong các thị trường đi ngang (sideway) hoặc có độ nhiễu cao (choppy market) kéo dài. Nguyên nhân là khi giá cổ phiếu không có xu hướng rõ ràng trong 12 tháng, hoặc liên tục đảo chiều trong ngắn hạn, tín hiệu TSMOM sẽ trở nên không nhất quán, dẫn đến các lệnh mua-bán liên tục và thua lỗ do phí giao dịch cùng với slippage. Ví dụ, nếu VN-Index tích lũy quanh vùng 1100-1200 điểm trong 6-9 tháng với các nhịp tăng/giảm nhẹ, TSMOM có thể tạo ra tín hiệu sai lệch. Ngoài ra, trong giai đoạn thị trường có biến động quá lớn, chiến lược này cũng cần được điều chỉnh trọng số inverse-volatility phù hợp, nếu không có thể dẫn đến rủi ro tập trung quá mức vào các tài sản biến động cao.
Điểm khác biệt cốt lõi giữa Time-Series Momentum (TSMOM) 12-1 và Cross-Sectional Momentum (CSMOM) khi áp dụng tại Việt Nam là gì?
Điểm khác biệt cơ bản nhất là cách tạo tín hiệu và xác định vị thế. TSMOM (như 12-1) đánh giá hiệu suất của *mỗi tài sản độc lập* so với chính nó trong quá khứ. Nếu lợi suất 12-1 tháng của một mã cổ phiếu (ví dụ VCB) dương, TSMOM sẽ tạo tín hiệu mua/giữ. Ngược lại, CSMOM so sánh hiệu suất của các tài sản *với nhau* trong một vũ trụ nhất định (ví dụ VN30). CSMOM sẽ chọn ra N mã có hiệu suất tốt nhất trong vũ trụ đó, bất kể hiệu suất tuyệt đối của chúng là dương hay âm. Ví dụ, trong một thị trường đi xuống, TSMOM có thể không nắm giữ bất kỳ cổ phiếu nào nếu tất cả đều có lợi suất 12-1 âm, trong khi CSMOM vẫn sẽ chọn ra các mã "ít tệ nhất" để nắm giữ.
Việc áp dụng Time-Series Momentum trên sàn HOSE với cơ chế T+2.5 và biên độ giao dịch ±7% cần lưu ý gì để tối ưu hiệu suất?
Với cơ chế T+2.5 và biên độ ±7% trên HOSE, việc rebalance hàng tháng (như TSMOM 12-1) là phù hợp vì nó tránh được các rắc rối thanh toán nếu rebalance quá thường xuyên. Tuy nhiên, cần chú ý đến slippage và khả năng khớp lệnh. Khi thị trường có biến động mạnh, một cổ phiếu có thể nhanh chóng chạm trần/sàn ±7%, khiến việc thực thi lệnh với khối lượng lớn tại giá mong muốn trở nên khó khăn. Điều này đặc biệt đúng với các mã có thanh khoản thấp trong rổ VN30. Do đó, việc đặt lệnh cần cân nhắc kỹ khối lượng và có thể cần chia nhỏ lệnh, hoặc sử dụng lệnh giới hạn (limit order) thay vì lệnh thị trường (market order) để tránh giá khớp bất lợi, ngay cả khi rebalance monthly.
Những sai lầm phổ biến nào mà nhà đầu tư cá nhân tại Việt Nam thường mắc phải khi cố gắng tự triển khai Time-Series Momentum?
Nhà đầu tư cá nhân tại Việt Nam thường gặp phải 3 sai lầm chính. *Thứ nhất*, chất lượng dữ liệu: việc thu thập dữ liệu giá lịch sử chính xác, đã điều chỉnh cổ tức, chia tách là thách thức lớn. Dữ liệu không đúng sẽ dẫn đến tín hiệu sai lệch. *Thứ hai*, bỏ qua chi phí giao dịch: các khoản phí môi giới (thường 0.15-0.3% một chiều) và thuế cùng với slippage có thể bào mòn đáng kể lợi nhuận của chiến lược, đặc biệt khi danh mục có vòng quay cao hoặc khối lượng giao dịch lớn. *Thứ ba*, không tính toán volatility đúng cách: việc sử dụng ex-ante volatility để cân bằng rủi ro (như trong công thức inverse-volatility weighting) đòi hỏi dữ liệu đủ dài (rolling 36 tháng daily returns) và không thể ước lượng chính xác với dữ liệu ngắn hạn hoặc chỉ dùng monthly returns, dẫn đến trọng số không tối ưu.
P.Thai Capital