P.Thai Capital P.Thai Capital Journal

Time-Series Momentum 12-1: Chiến lược momentum định lượng cho VN

QUANT STRATEGY · TREND / MOMENTUM Quán tính giá 12-1 Time-Series Momentum (12-1) Họ chiến lược Trend / Momentum Khung phân tích Định lượng / Backtest Áp dụng cho VN30 / VN30F1M

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 đó:

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 ý:

5. Năm cạm bẫy phổ biến khi áp dụng

  1. 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.

  2. 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.

  3. Universe bias: backtest trên VN30 hiện tại = survivorship bias. Phải tái tạo universe theo từng kỳ review.

  4. 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

❌ Không nên dùng khi

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


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.

Miễn trừ trách nhiệm: Nội dung là phân tích định lượng dựa trên dữ liệu lịch sử, mang tính tham khảo. KHÔNG phải khuyến nghị mua/bán. Giao dịch có rủi ro, kết quả backtest không đảm bảo hiệu suất tương lai. Nhà đầu tư tự chịu trách nhiệm cho quyết định của mình.
FAQ · Câu hỏi thường gặp

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.