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

312 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

Khi thị trường giảm vì chiến tranh: chiến lược nào phù hợp?
09/03/2026
36 lượt đọc

Khi thị trường giảm vì chiến tranh: chiến lược nào phù hợp? C

Những giai đoạn thị trường giảm mạnh do chiến tranh hoặc căng thẳng địa chính trị thường khiến nhà đầu tư rơi vào trạng thái rất khó giao dịch. Tin tức tiêu cực xuất hiện liên tục, tâm lý thị trường thay đổi nhanh và dòng tiền có xu hướng rút khỏi tài sản rủi ro. Trong những thời điểm như vậy, nhiều chiến lược đầu tư truyền thống như “mua và giữ” thường gặp khó khăn vì thị trường không còn tăng ổn định mà chuyển sang trạng thái biến động mạnh.

Cách xây dựng một chiến lược Quant Trading đơn giản trên thị trường chứng khoán Việt Nam
09/03/2026
216 lượt đọc

Cách xây dựng một chiến lược Quant Trading đơn giản trên thị trường chứng khoán Việt Nam C

Phần lớn các chiến lược quant không bắt đầu từ những mô hình toán học phức tạp, mà từ một giả thuyết khá đơn giản về hành vi của thị trường. Quant trading thực chất là quá trình biến những quan sát như vậy thành rule có thể kiểm tra bằng dữ liệu. Trên thị trường chứng khoán Việt Nam, một trong những giả thuyết phổ biến nhất là momentum – tức là những cổ phiếu tăng mạnh trong một khoảng thời gian thường có xu hướng tiếp tục tăng thêm một thời gian nữa vì dòng tiền vẫn đang tập trung vào đó. Điều này có thể thấy khá rõ trong thực tế. Ví dụ trong giai đoạn thị trường tích cực, nhiều cổ phiếu dẫn dắt thường tăng mạnh hơn chỉ số chung.

Bên trong quy trình xây dựng một chiến lược Quant Trading
09/03/2026
132 lượt đọc

Bên trong quy trình xây dựng một chiến lược Quant Trading C

Trong quant trading, dữ liệu không chỉ là nguyên liệu đầu vào mà thực chất là nền tảng quyết định toàn bộ chất lượng của chiến lược. Không giống discretionary trading, nơi trader có thể dựa vào trực giác hoặc kinh nghiệm, quant trading phụ thuộc hoàn toàn vào việc phân tích dữ liệu lịch sử để tìm ra các pattern có thể lặp lại trong tương lai. Những dữ liệu này có thể rất đa dạng: market data truyền thống như giá và khối lượng giao dịch, dữ liệu order book, dữ liệu macro như lãi suất hoặc CPI, thậm chí các dạng alternative data như sentiment từ tin tức hoặc dữ liệu vệ tinh theo dõi hoạt động logistics

Tại sao chiến lược càng đơn giản lại càng sống lâu trong trading
04/03/2026
192 lượt đọc

Tại sao chiến lược càng đơn giản lại càng sống lâu trong trading C

Khi bắt đầu xây dựng một chiến lược trading, đa số mọi người thường bắt đầu từ một ý tưởng rất đơn giản. Ví dụ như: mua khi giá vượt lên trên đường trung bình 50 ngày và bán khi giá rơi xuống dưới. Logic phía sau khá trực quan: khi giá giao dịch cao hơn mức trung bình trong một thời gian dài, có thể thị trường đang hình thành xu hướng tăng.

1. Pairs trading là gì và vì sao nhiều trader thích nó
04/03/2026
165 lượt đọc

1. Pairs trading là gì và vì sao nhiều trader thích nó C

Pairs trading là một trong những ý tưởng đơn giản và dễ hiểu nhất trong thế giới giao dịch định lượng. Ý tưởng cốt lõi là: nếu hai tài sản thường di chuyển gần nhau trong quá khứ nhưng tạm thời tách ra khỏi nhau, thì khả năng cao chúng sẽ quay lại trạng thái cân bằng trước đó. Khi điều đó xảy ra, trader sẽ mua tài sản được xem là “rẻ” và bán tài sản được xem là “đắt”, sau đó chờ khoảng cách giữa chúng thu hẹp lại để đóng vị thế và kiếm lợi nhuận. Điểm hấp dẫn của chiến lược này nằm ở chỗ nó không phụ thuộc quá nhiều vào việc thị trường chung đang tăng hay giảm. Trong lý thuyết, khi bạn long một cổ phiếu và short một cổ phiếu khác trong cùng ngành, các biến động chung của thị trường sẽ phần nào triệt tiêu lẫn nhau. Bạn không cố đoán thị trường sẽ đi lên hay đi xuống; bạn chỉ đặt cược rằng mối quan hệ giữa hai tài sản sẽ quay lại trạng thái bình thường.

Có nên dùng ChatGPT để viết bot trading không?
02/03/2026
204 lượt đọc

Có nên dùng ChatGPT để viết bot trading không? C

Câu hỏi này không nên trả lời theo kiểu cực đoan “có” hoặc “không”. ChatGPT là một công cụ mạnh, nhưng trading không phải bài toán chỉ cần viết code. Nếu nhìn đúng bản chất, ChatGPT có thể rút ngắn thời gian triển khai kỹ thuật xuống còn một phần nhỏ so với trước đây. Nhưng nó không tạo ra lợi thế thống kê, không hiểu cấu trúc thị trường Việt Nam, và không chịu trách nhiệm khi hệ thống của bạn mất tiền. Vấn đề không nằm ở công cụ; vấn đề nằm ở cách sử dụng và mức độ hiểu biết của người vận hành.

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!