Làm thế nào để code và backtest một chiến lược long–short thực sự dùng được?

30/11/2025

486 lượt đọc

1. Long–short thực chất là gì, và mình đang cố kiểm chứng điều gì?

Nếu bỏ hết “mỹ từ” đi, long–short đơn giản là cách tách phần thị trường chung (beta) ra khỏi phần khác biệt do mô hình (alpha). Thay vì chỉ mua những gì mình thích, ta vừa long thứ mình cho là sẽ chạy “tương đối tốt hơn”, vừa short thứ mình cho là sẽ chạy “tương đối kém hơn”, rồi ghép lại thành một danh mục gần như trung hòa với thị trường.

Về mặt logic:

  1. Long: các tài sản có tín hiệu tốt (score cao) – kỳ vọng outperform.
  2. Short: các tài sản có tín hiệu xấu (score thấp) – kỳ vọng underperform.

Ghép hai bên sao cho danh mục ít phụ thuộc vào việc VN-Index hay VN30 tăng / giảm, mà chủ yếu sống bằng chênh lệch giữa “tốt” và “xấu”.

Trong bối cảnh Việt Nam, long–short có vài dạng khả thi:

  1. Long–short trên phái sinh VN30F (dùng nhiều hợp đồng, nhiều kỳ hạn, hoặc nhiều chiến lược khác nhau).
  2. Long rổ cổ phiếu (ví dụ nhóm bank, chứng, hoặc top liquidity) và short VN30F để giảm bớt beta thị trường.

Về lý thuyết có thể long–short cổ phiếu với nhau, nhưng thực tế bị hạn chế khá nhiều bởi cơ chế short.

Ngay từ đầu, khi nói đến “code và backtest long–short”, QM Capital thường tự hỏi ba câu rất cụ thể:

Mô hình có xếp hạng được tài sản không? Nghĩa là nhóm được chọn vào long có thực sự tốt hơn nhóm short, nếu so trên cùng một giai đoạn và cùng điều kiện thị trường.

Khi biến những xếp hạng đó thành danh mục thực sự (có weight, rebalance, phí giao dịch, slippage), đường vốn nhìn ra sao: PnL, Sharpe, max drawdown, turnover?

Nếu đưa ra thế giới thật – với limit về short, margin, fee, thanh khoản – chiến lược còn sống được không, hay chỉ đẹp trên giấy?

Ví dụ: giả sử QM Capital xây một chiến lược long–short trên rổ 30 cổ phiếu thanh khoản nhất HOSE. Signal rất đơn giản: 60-day momentum. Mỗi tuần, hệ thống chọn top 20% cổ phiếu có momentum cao nhất để long, bottom 20% để short, cân bằng vốn hai bên. Sau 5 năm backtest, ta thấy:

  1. Danh mục long trung bình outperform VN-Index 8%/năm.
  2. Danh mục short underperform VN-Index khoảng 4%/năm.
  3. Danh mục long–short (dollar-neutral) cho ra ~12%/năm, Sharpe 1.2.

Nhìn vậy là ổn, nhưng phải nhớ: kết quả này chỉ có ý nghĩa nếu ta chắc rằng dữ liệu không bị “nhìn tương lai”, phí giao dịch được tính đúng, và cấu trúc long–short có thể triển khai trong bối cảnh thật (ví dụ dùng VN30F để hedge thay vì short trực tiếp cổ phiếu). Toàn bộ phần còn lại – code và backtest – thực ra chỉ là cách trả lời cẩn thận cho ba câu hỏi đó.

2. Quy trình code & backtest một chiến lược long–short từ dữ liệu đến PnL

Để không bị lạc trong chi tiết kỹ thuật, có thể chia quy trình thành bốn khối: dữ liệu → signal → danh mục → đánh giá. Mỗi khối nếu làm ẩu một chút thì kết quả cuối cùng sẽ lệch đi khá xa.

(a) Chuẩn bị dữ liệu và universe

Bước đầu tiên thường bị xem nhẹ, nhưng nó quyết định chiến lược có “đứng được” hay không.

Chọn universe: ví dụ top 50 mã thanh khoản nhất HOSE, hoặc rổ VN30 + một số bluechip.

Gom dữ liệu giá dạng OHLCV (open, high, low, close, volume) theo ngày; nếu trade intraday thì là 5-min, 15-min.

Đồng bộ ngày giao dịch, xử lý ngày nghỉ, loại các mã volume quá thấp.

Trong code (Python):

Đưa dữ liệu về dạng ma trận price[date, ticker], volume[date, ticker].

Cẩn thận với survivorship bias: nếu có thể, nên dùng toàn bộ danh sách mã ở từng thời điểm, không chỉ những mã còn sống tới hôm nay.

(b) Xây tín hiệu (signal) và xếp hạng

Long–short thực chất là một bài toán ranking. Với mỗi ngày (hoặc mỗi kỳ rebalance), ta cần một con số score cho mỗi mã.

Ví dụ signal đơn giản:

Momentum: 20-day hoặc 60-day return.

Mean reversion: âm của 5-day return (giảm mạnh có thể bật lại).

Yếu tố cơ bản: kết hợp P/E, P/B, tăng trưởng lợi nhuận, vốn hóa…

Trong code:

Tính signal dạng signal[date, ticker].

Dùng shift(1) để đảm bảo ngày T chỉ dùng thông tin đến T–1, tránh look-ahead bias.

Sau đó:

Loại mã không đủ dữ liệu, thanh khoản kém, bị hạn chế giao dịch.

Xếp hạng theo signal trên từng ngày.

Chọn top X% để long, bottom Y% để short (thường X = Y cho đơn giản).

(c) Từ signal sang portfolio: thiết kế trọng số long–short

Đây là nơi “lý thuyết đẹp” dễ bị vỡ khi gặp thực tế. Ý tưởng căn bản:

Long leg: phân bổ vốn đều cho các mã ở nhóm điểm cao (ví dụ mỗi mã +1/N).

Short leg: phân bổ đều cho các mã ở nhóm điểm thấp (mỗi mã –1/M).

Chuẩn hóa lại để tổng giá trị long ≈ tổng giá trị short → gần dollar-neutral.

Có thể thêm một số ràng buộc:

Giới hạn weight tối đa trên từng mã (ví dụ |weight| ≤ 5% NAV).

Giới hạn theo ngành để tránh một bên full bank, bên kia full thép.

Đặt lịch rebalance: hàng ngày, hàng tuần, hoặc khi tín hiệu thay đổi mạnh.

Nếu dùng VN30F làm công cụ short, cấu trúc sẽ khác một chút: ta long cổ phiếu, sau đó tính beta của rổ long với VN30, rồi short VN30F theo beta đó để giảm bớt rủi ro thị trường.

(d) Backtest: từ weight và return sang PnL

Khi đã có ma trận weight w[date, ticker] và lợi suất r[date, ticker], phần còn lại tương đối thẳng:

Portfolio return ngày T = tổng (w[T–1, ticker] × r[T, ticker]) – phí – slippage.

Cộng dồn để ra equity curve.

Từ đường vốn này, ta tính:

Lợi suất năm hóa, volatility, Sharpe, Sortino.

Max drawdown, thời gian hồi phục, win rate theo ngày / tháng.

Turnover (khối lượng điều chỉnh vị thế mỗi lần rebalance) → từ đó suy ra mức phí thực tế.

Một thói quen tốt là luôn tách long leg và short leg ra xem riêng:

Long leg có alpha dương rõ rệt không?

Short leg có thực sự underperform không, hay chỉ đơn giản là “không làm gì nhiều nhưng tốn phí”?

Ví dụ: trong backtest, QM Capital thấy long leg mang lại +18%/năm, short leg –6%/năm, danh mục long–short khoảng +12%/năm. Nếu sau này môi trường thay đổi, short leg không còn underperform nữa, chiến lược sẽ tụt khá nhanh. Nhìn riêng từng leg giúp thấy rõ rủi ro này.

3. Những bẫy phổ biến

Khi code xong một chiến lược long–short, nhìn đường equity đẹp là cảm giác rất “phê”. Nhưng trước khi tin, mình nên chủ động đi tìm lỗi – nhất là trong bối cảnh thị trường Việt Nam còn nhiều giới hạn về short, thanh khoản, biên độ.

(a) Những bẫy kỹ thuật dễ mắc

Có vài lỗi “kinh điển” mà QM Capital gần như luôn check lại:

Look-ahead bias: dùng dữ liệu của ngày T để quyết định ngày T – ví dụ dùng giá đóng cửa để quyết định lệnh cùng ngày – là lỗi nặng. Mọi input phải là shift(1).

Survivorship bias: chỉ dùng các mã đang niêm yết hiện tại. Những mã đã hủy niêm yết, delist, hoặc bị kiểm soát thường là mã xấu – loại chúng ra khỏi mẫu làm chiến lược trông khỏe hơn thực tế.

Phí và trượt giá (slippage): long–short thường có turnover cao, đặc biệt nếu rebalance mỗi ngày. Nếu để transaction cost = 0, Sharpe nào cũng đẹp. Thực tế phải giả định spread, phí môi giới, và độ trượt tùy theo thanh khoản từng mã.

Giới hạn short: với cổ phiếu Việt Nam, short trực tiếp là câu chuyện khác xa sách giáo khoa. Nếu backtest chiến lược “short 30 mã yếu nhất” mà không mô hình hóa được cơ chế short, thì kết quả chỉ mang tính tham khảo.

(b) Gợi ý áp dụng trong bối cảnh Việt Nam

Trong điều kiện hiện tại, hai hướng khá thực tế:

Long–short trên phái sinh VN30F

Dùng nhiều chiến lược khác nhau (trend following, mean reversion intraday, basis trading…) để tạo nhiều “mini-signal”, sau đó long–short giữa các chiến lược / các kỳ hạn.

Dữ liệu: 1–5 phút, có volumes, order book nếu có.

Lưu ý biên độ, limit up/down, những ngày basis bị méo do roll hợp đồng hoặc tin vĩ mô.

Long stock / short VN30F

Chiến lược stock-picking (value, quality, momentum…) nằm ở leg long; leg short là VN30F để giảm bớt tác động của thị trường chung.

Ví dụ: long rổ 10 mã bank, chứng, tiêu dùng mà model đánh giá tốt; short VN30F với size sao cho beta danh mục về gần 0.

Backtest phải tính cả: phí giao dịch cổ phiếu, phí hợp đồng tương lai, chi phí margin/ ký quỹ.

(c) Cách “vặn vẹo” chiến lược trước khi tin

Sau khi đã có một backtest nhìn ổn, QM Capital thường làm thêm vài bước kiểm tra:

Chạy chiến lược trên các giai đoạn con:

– Bull market (ví dụ 2017, 2020–2021).

– Sideway, hoặc phân hóa mạnh.

– Giai đoạn xấu (2011–2012, 2022...).

Nếu chiến lược chỉ kiếm được tiền trong một giai đoạn rất hẹp, cần hiểu rõ lý do.

Thử thay đổi nhẹ tham số:

– Window 60-day momentum → 40 hoặc 80 ngày.

– Rebalance hàng ngày → 2–3 ngày/lần.

– Thay top/bottom 20% → 10% hoặc 30%.

Nếu chỉ cần chỉnh nhẹ là PnL sụp, khả năng cao là overfit.

Đặt thêm lớp phí / constraint “xấu hơn”:

– Nhân transaction cost lên 1.5–2 lần.

– Cắt 20–30% khối lượng lệnh ở những ngày thanh khoản thấp.

– Giới hạn không được full position khi volatility bùng nổ (risk cap).

Ví dụ: một chiến lược long–short VN30F intraday có Sharpe 2.0 với phí 0.02%/chiều. Khi tăng phí lên 0.04% và giảm 20% khối lượng lệnh ở phiên ATC, Sharpe rơi xuống 0.7. Điều này cho thấy chiến lược đang sống nhờ việc “suýt sít” vào–ra với chi phí cực thấp – khó triển khai nếu không có hạ tầng tương đương backtest.

Cuối cùng, nếu nhìn long–short dưới góc độ hệ thống, nó chỉ là:

Một cơ chế xếp hạng tài sản (hoặc tín hiệu) nhất quán.

Một engine biến ranking thành trọng số, có kiểm soát risk.

Một bộ câu hỏi khó, dùng backtest để trả lời: chiến lược kiếm tiền từ đâu, và khi điều kiện thị trường thay đổi, nó sẽ “đau” ở đâu trước.

Khi trả lời được ba lớp đó một cách trung thực bằng code và dữ liệu, long–short không còn là câu chuyện “nghe rất hedge fund”, mà trở thành một công cụ rất rõ ràng để kiểm soát rủi ro và đo alpha trên thị trường Việt Nam

Chia sẻ bài viết

Đánh giá

Hãy là người đầu tiên nhận xét bài viết này!

Đăng ký nhận tin

Nhập Email để nhận được bản tin mới nhất từ QM Capital.

Bài viết liên quan

Understanding Market Sentiment: Đọc vị thị trường để đưa ra quyết định giao dịch chính xác
21/04/2026
594 lượt đọc

Understanding Market Sentiment: Đọc vị thị trường để đưa ra quyết định giao dịch chính xác C

Trong giao dịch, rất nhiều người dành phần lớn thời gian để học cách đọc biểu đồ, học mô hình nến, học RSI, MACD, Bollinger Bands hay Fibonacci. Những thứ đó đều hữu ích. Nhưng sau một thời gian đủ dài, gần như ai cũng sẽ gặp cùng một vấn đề: biết tín hiệu nhưng vẫn vào sai lệnh, thấy mô hình đúng mà kết quả vẫn không như kỳ vọng. Lý do nằm ở chỗ thị trường không vận hành chỉ bằng kỹ thuật. Thị trường vận hành bằng kỳ vọng, định vị dòng tiền và cảm xúc tập thể. Nói cách khác, nếu chỉ đọc chart mà không đọc được tâm lý thị trường, chúng ta mới chỉ nhìn thấy “hình dạng” của giá, chứ chưa hiểu “động cơ” khiến giá vận động.

Vì sao trader thua không phải vì thiếu kiến thức, mà vì thiếu kỷ luật?
14/04/2026
153 lượt đọc

Vì sao trader thua không phải vì thiếu kiến thức, mà vì thiếu kỷ luật? C

Jesse Livermore là một trong những cái tên kinh điển nhất trong lịch sử trading. Điều khiến ông trở thành huyền thoại không chỉ nằm ở những thương vụ lớn, mà nằm ở cách ông quan sát thị trường và đúc kết ra các nguyên tắc giao dịch vượt thời gian. Dù thị trường ngày nay đã có thuật toán, dữ liệu lớn, phái sinh, margin, HFT và rất nhiều công cụ hiện đại, những bài học của Livermore vẫn còn nguyên giá trị, bởi bản chất sâu nhất của thị trường chưa từng thay đổi: con người vẫn bị chi phối bởi tham lam, sợ hãi, hy vọng và cái tôi.

Trading không phải là đoán đúng, mà là xây dựng lợi thế
14/04/2026
183 lượt đọc

Trading không phải là đoán đúng, mà là xây dựng lợi thế C

Đọc bài review của Steve Burns về cuốn The Man Who Solved the Market: Jim Simons, QM Capital thấy đây không chỉ là câu chuyện về một cá nhân xuất chúng, mà là một cách nhìn rất khác về thị trường tài chính. Jim Simons không bước vào thị trường với tư duy “hôm nay mua mã nào” hay “ngày mai thị trường tăng hay giảm”. Ông bước vào thị trường với niềm tin rằng: trong giá cả có những mẫu hình lặp lại, và nếu có đủ dữ liệu, đủ năng lực toán học, đủ công nghệ và đủ kỷ luật, con người có thể tìm ra lợi thế từ những mẫu hình đó.

Những mô hình nhiều nến đáng chú ý trong giao dịch chứng khoán và phái sinh Việt Nam - Phần 2
14/04/2026
198 lượt đọc

Những mô hình nhiều nến đáng chú ý trong giao dịch chứng khoán và phái sinh Việt Nam - Phần 2 C

Ở Phần 1, chúng ta đã nói về cách hình thành các mô hình giá phổ biến. Sang Phần 2, trọng tâm không còn là “mô hình đó trông như thế nào”, mà là mô hình nào có thể tạo tín hiệu tăng, mô hình nào cảnh báo tín hiệu giảm, và quan trọng hơn là trader nên đọc chúng ra sao trong thực chiến.

Cách hình thành các mô hình giá phổ biến trong phân tích kỹ thuật - Phần I
14/04/2026
237 lượt đọc

Cách hình thành các mô hình giá phổ biến trong phân tích kỹ thuật - Phần I C

Trong phân tích kỹ thuật, mô hình giá không chỉ là những đường kẻ trên biểu đồ. Mỗi mô hình thực chất là một “bản ghi” về tâm lý thị trường: bên mua đang mạnh lên hay yếu đi, bên bán đang phân phối hay mất kiểm soát, dòng tiền đang tích lũy hay rút ra. Khi nhìn một mô hình, điều quan trọng không phải là cố tìm cho giống hình mẫu trong sách, mà là hiểu được câu chuyện cung – cầu đang diễn ra phía sau.

Techniques for Trading Patterns: 4 Kỹ thuật quan trọng trong giao dịch chứng khoán và phái sinh Việt Nam
14/04/2026
210 lượt đọc

Techniques for Trading Patterns: 4 Kỹ thuật quan trọng trong giao dịch chứng khoán và phái sinh Việt Nam C

Trong giao dịch tài chính, đặc biệt là ở thị trường chứng khoán Việt Nam và phái sinh VN30, phần lớn trader thường bắt đầu bằng việc tìm kiếm tín hiệu vào lệnh. Họ học các mô hình giá, đường trung bình, RSI, MACD, Bollinger Bands, volume, nến Nhật và rất nhiều chỉ báo khác. Tuy nhiên, vấn đề không nằm ở việc thiếu tín hiệu. Vấn đề lớn hơn là trader không biết tín hiệu nào đáng tin, vào lệnh ở đâu, sai thì thoát ở đâu, và khi nào nên kiên nhẫn chờ giá điều chỉnh thay vì mua đuổi.

video-image

Truy Cập Miễn Phí Thư Viện Bot Tín Hiệu Giao Dịch Tự Động

Được nghiên cứu và phát triển bởi các chuyên gia từ QMTrade và cộng đồng nhà đầu tư chuyên nghiệp.

Truy cập ngay!