Curiosity #1 — Nhà đầu tư cá nhân có thể “vibe-code” một rổ cổ phiếu tốt hơn thị trường Việt Nam?

2026-07-25 · VI · English

Trong bài này

Curiosity #1 — một câu hỏi tôi đi kiểm chứng thật, thay vì ngồi tranh luận suông.

Mua “cả thị trường”, tức VN-Index, là ôm luôn hàng trăm doanh nghiệp, tốt xấu lẫn lộn. Nếu một người bình thường, không quỹ, không sàn riêng, chỉ có cái laptop và ít dòng code viết cùng AI, tự ghép một rổ theo vài quy tắc máy móc về quy mô và thanh khoản, liệu có hơn được cách ôm hết cả thị trường?

Tôi dựng nó rồi cho chạy lại mười một năm lịch sử. Kết quả làm tôi hơi bất ngờ, và phần đáng giá nhất lại đúng là phần mà phần lớn các bài backtest lặng lẽ giấu đi.

Vì sao tôi bận tâm câu hỏi này

Với tiền bạc, đa số chúng ta chọn một trong hai đường: mua quỹ chỉ số để ôm cả thị trường, hoặc chọn cổ phiếu theo cảm tính. Một rổ cổ phiếu, tức danh sách ngắn và có chủ đích những mã đáng để mắt tới, là bước đi đầu tiên của bất cứ ai muốn làm nghiêm túc hơn. Nếu một bộ lọc đơn giản và minh bạch vẫn bám kịp thị trường, đó là điều đáng biết. Nếu nó không bám kịp, càng đáng biết. Tôi muốn sự thật chứ không muốn một câu chuyện hay.

Tôi đã làm gì

Ý tưởng đơn giản thôi: xếp mọi doanh nghiệp vào vài hạng, những mã lớn nhất và giao dịch sôi nhất nằm trên, phần còn lại nằm dưới, theo một bộ quy tắc vốn hóa và thanh khoản minh bạch (quy tắc chi tiết nằm ở phần sau). Rồi nắm cả ba hạng đầu, tính theo tỷ trọng vốn hóa, y như một quỹ chỉ số thu gọn. Mỗi năm tái cơ cấu danh mục hai lần. Cuối cùng cho chạy lại suốt 2015 đến 2025.

Tôi tự đặt hai lời hứa để khỏi tự lừa mình:

  • Chấm mỗi doanh nghiệp bằng đúng những gì biết được ở thời điểm đó, tuyệt đối không mượn con mắt của người đã biết trước kết cục.
  • Đo cái rổ và đo thị trường bằng cùng một thước đo. Chỗ nào không thể đo cùng một thước đo thì tôi nói thẳng, kèm mức lệch chừng bao nhiêu.

Và tôi làm tất cả ở góc bàn ăn nhà mình, không cần cái terminal tiền tỉ nào. Có một điều đã khác so với lần chạy đầu tiên: cái rổ đã lớn. Giờ nó là một chỉ số xây dựng theo bộ quy tắc, tôi gọi là CDX, tính lại mỗi ngày theo bộ quy tắc đã chốt cứng. Mọi con số bên dưới đều lấy từ chuỗi chính thức đó, không phải từ bản nháp đầu tay của tôi.

Trọn mười một năm: tăng nhiều hơn, rơi nhẹ hơn

Tăng trưởng 2015–2025 Tăng trưởng kép hằng năm Sụt giảm tối đa
Rổ CDX (ba hạng đầu) +317,44% +13,87% −41,46%
VN-Index (thị trường) +227,05% +11,37% −45,26%
VN30 (nhóm blue-chip) +237,50% +11,69% −48,14%

Một lưu ý về cách đo: cả ba chuỗi đều là chỉ số giá, không chuỗi nào cộng thêm cổ tức. Điều này đã được kiểm chứng trực tiếp trên 5.265 ngày chốt quyền cổ tức tiền mặt, nên đây là phép so sánh cùng một mặt bằng và phần chênh lệch là thật.

Tăng trưởng của ₫100 từ 2015 đến 2025 trên chuỗi ngày chính thức: rổ CDX kết thúc gần ₫417,44, thị trường gần ₫327,05, nhóm blue-chip gần ₫337,50 — các đường bám sát nhau phần lớn thời gian, riêng ở đáy 2022 rổ lún nông hơn.

Nó tăng nhiều hơn cả hai thước đo tham chiếu, và mức sụt giảm tối đa của nó cũng là nhẹ nhất trong ba. Vậy là bộ lọc có tác dụng thật? Gần như thế. Nhưng bảng từng năm mới kể đủ câu chuyện.

Từng năm một: thắng nhiều năm hơn thua

Năm CDX VN-Index VN30
2015 +9,78% +6,12% −1,01%
2016 +10,73% +14,82% +5,48%
2017 +60,22% +48,03% +55,29%
2018 −3,53% −9,32% −12,36%
2019 +7,34% +7,67% +2,82%
2020 +20,22% +14,87% +21,81%
2021 +36,86% +35,73% +43,42%
2022 −33,36% −32,78% −34,55%
2023 +13,66% +12,20% +12,56%
2024 +22,81% +12,11% +18,85%
2025 +35,24% +40,87% +51,00%

Chẳng có bữa trưa nào miễn phí. Cái rổ thua đậm thị trường ở 2016, thua rõ ở 2025 và thua sát nút ở 2019; còn trong cú sập 2022 thì nó rơi chẳng nhẹ hơn ai. Cái nó làm được là thắng nhiều năm hơn thua, hơn thị trường 7 trên 11 năm và hơn nhóm blue-chip VN30 8 trên 11, mà không dính một năm thảm họa nào của riêng mình.

Còn 2026, tính đến 23/7: CDX −4,64%, VN-Index −4,77%, VN30 −9,13%. Một năm tới giờ vẫn đỏ với tất cả. Tôi kể ra vì thành thật đáng giá hơn đẹp mặt.

Lợi thế đến từ đâu: rơi ít hơn lúc thị trường xuống

Nhìn kỹ thì CDX không thắng bằng cách tăng mạnh hơn lúc thị trường lên, mà bằng cách rơi ít hơn lúc thị trường xuống. Những ngày VN30 tăng, CDX chỉ ăn khoảng 90,8% phần tăng ấy; những ngày VN30 giảm, CDX chỉ chịu 87,9% phần giảm. Nhường một chút lúc lên, né được nhiều hơn một chút lúc xuống, lặp lại suốt một thập kỷ — toàn bộ lợi thế nằm ở đó.

Nhưng một khẳng định phòng thủ thì phải báo cả những lúc nó không phòng thủ được, và năm 2026 tới giờ đúng là một lúc như vậy: CDX đã rơi −17,12% từ đỉnh, còn VN30 rơi −16,96% — tức là tệ hơn một chút. Một năm chưa trọn không phải phán quyết, nhưng cũng không phải thứ tôi được phép lặng lẽ bỏ đi.

Và đây là chỗ tôi tự phản bác mình, trước khi bạn phải làm việc đó. Nếu chỉ giữ nhóm lớn nhất, rổ chỉ đạt +9,99% mỗi năm, tức là thua VN30. Lợi thế chỉ hiện ra khi rổ mở rộng ra đủ ba hạng, thành +13,87%. Nói cho thật rõ: phương pháp này không chọn cổ phiếu lớn giỏi hơn chỉ số, nó không hề giỏi hơn. Lợi thế đến từ độ rộng, không phải từ tài chọn lựa.

Phần trung thực: khoảng cách nào là thật, khoảng cách nào chưa chắc

Tính cả chặng, CDX hơn VN-Index 2,50 điểm phần trăm mỗi năm (13,87% so với 11,37%). Nhưng con số đó đo từ đúng một mẫu — mười một năm — nên nó có sai số. Kể cả khi trừ hao sai số ấy, khoảng cách vẫn nằm trên số 0. Muốn nói “thật ra chẳng có khoảng cách nào, chỉ là may thôi” thì rất khó.

Với VN30 thì khác hẳn: khoảng cách là 2,18 điểm phần trăm mỗi năm, nhưng trừ hao sai số xong, nó có thể bằng 0. Nói thẳng ra: CDX vượt được thị trường chung, còn với nhóm blue-chip thì chưa đủ sức thuyết phục.

Còn đây là điều làm yếu chính lập luận của tôi, nhưng vẫn phải nói ra: cái kết luận “khó quy cho may rủi” ấy phụ thuộc vào cách dựng chỉ số. Bản dựng cũ, chạy trên dữ liệu tuần và không chặn trần tỷ trọng, cho khoảng cách nhỏ hơn — và ở đó, cả hai thước đo tham chiếu đều có thể bằng 0. Khoảng cách luôn dương ở mọi cách dựng; riêng mức chắc chắn thì không. Nên tôi nói cả hai, chứ không chỉ nói cách dựng có lợi cho mình. (Con số cụ thể nằm ở cuối bài, mục “Các con số được tính thế nào”.)

Còn một câu hỏi nữa mà bạn đọc tinh ý sẽ hỏi ngay: sao lại bắt đầu từ 2015? Lý do là số cổ phiếu lưu hành trước đó mới chỉ ở mức tham khảo. Nhưng để bạn khỏi phải tin lời tôi: ba năm bị cắt ra ấy, chạy trên chính dữ liệu tôi tin ít hơn, vẫn cho kết quả y hệt — CDX 13,79% mỗi năm so với 11,33% của thị trường. Việc cắt bỏ chúng không phải là thứ làm con số đẹp lên.

Vậy nên tôi sẽ không nói với bạn rằng “cái này thắng thị trường” như một chuyện đã chứng minh. Tôi nói điều nhỏ hơn nhưng thật hơn:

Trong thập kỷ này, cái rổ theo kịp thị trường và nhỉnh hơn đôi chút, đồng thời đi qua khúc tệ nhất êm hơn đôi chút. Phần nhỉnh ấy là tài năng thật hay chỉ là may mắn của riêng thập kỷ này, một thập kỷ không đủ sức trả lời.

Cái đáy nông hơn mới là chỗ tôi dám tựa vào: −41,46% ở điểm sâu nhất, so với −45,26% của thị trường và −48,14% của nhóm blue-chip. Vẫn lời dặn cũ, một thập kỷ đáy nông hơn cũng chỉ là bằng chứng mỏng chứ không phải lời hứa. Nhưng cái hố nông hơn để bò lên vẫn là thứ lợi thế tôi muốn giữ, hơn là một con số lợi nhuận bóng bẩy.

Ai định chạy lại bằng giá tuần thì lưu ý: dữ liệu ngày nhìn thấy những cái đáy giữa tuần mà chuỗi tuần đã làm mượt mất. Trên lưới tuần, mọi con số sụt giảm tối đa ở đây sẽ trông nhẹ đi chừng một tới ba điểm, còn thứ tự giữa ba đường thì không đổi.

Phép thử này bỏ qua điều gì

Hai chỉ số không dựng giống nhau. Theo phương pháp luận HOSE công bố, VN30 cân theo tỷ lệ cổ phiếu tự do chuyển nhượng — tức chỉ phần thực sự mua bán được; còn CDX cân trên toàn bộ vốn hóa, kèm mức trần 10% mỗi mã. Đây là khác biệt thật, và tôi nói ra thay vì hiệu chỉnh cho đẹp.

Chi phí giao dịch bị bỏ ngoài ở cả ba phía. Rổ nào cũng phải trả phí khi đảo danh mục, và không con số nào ở đây trừ khoản đó.

Chỉ số có mốc gốc từ 2012 để chuỗi liền không đứt, nhưng tôi chỉ khẳng định trên 2015–2025. Số cổ phiếu lưu hành trước 2015 mới chỉ ở mức tham khảo, mà chính con số đó quyết định vốn hóa, rồi vốn hóa quyết định ai vào hạng nào và với tỷ trọng bao nhiêu. Và đây là một bài nghiên cứu, không phải thứ bạn mua được.

Một công ty được xếp hạng thế nào

Không phân tích cơ bản, không ý kiến, không câu chuyện nào về doanh nghiệp. Mỗi ngày giao dịch, mọi cổ phiếu được chấm điểm trên ba thứ rất khó tô vẽ: vốn hóa thị trường, thanh khoản và vòng quay cổ phiếu, và phải qua đủ cả ba, theo đúng thứ tự:

  1. Vốn hóa thị trườngvốn hóa = giá hôm đó × số cổ phiếu thực có trên hồ sơ hôm đó (số cổ phần có ngày tháng hẳn hoi, đã trừ cổ phiếu quỹ, tuyệt đối không lấy con số của hôm nay chiếu ngược về quá khứ). Xếp mọi doanh nghiệp theo vốn hóa rồi lấy dần từ trên xuống, tới khi phủ đủ ngưỡng phần trăm tổng giá trị thị trường.
  2. Thanh khoảnbình quân 252 phiên của (giá × khối lượng). Trong số vừa lọc, giữ lại những mã mà tiền thật sự đổi chủ, ngày này qua ngày khác.
  3. Vòng quay cổ phiếubình quân 252 phiên của (khối lượng ÷ số cổ phiếu lưu hành). Trong số đó, giữ những mã có cổ phiếu thật sự luân chuyển, thay vì nằm im một chỗ.

Ba hạng thực chất là cùng một bộ lọc, siết dần ngưỡng. Và vì cổ phiếu phải qua cửa quy mô trước tiên, ngưỡng càng nhỏ thì câu lạc bộ càng khắt khe, càng ít thành viên:

Hạng Ngưỡng vốn hóa · thanh khoản · vòng quay Nó là gì
L1 top 80% ở cả ba lõi blue-chip, lớn nhất và thanh khoản nhất
L2 top 90% (và chưa nằm ở L1) vành kế tiếp, các tên lớn và đều đặn
L3 top 95% (và chưa nằm ở L1 / L2) vành đai giao dịch được, rộng nhất
L4 không qua nổi ngưỡng 95% chưa đủ chuẩn giao dịch, để ngoài

“Top 80%” nghĩa là: những mã lớn nhất cộng lại chiếm 80% tổng vốn hóa thị trường, đồng thời nằm trong top 80% về thanh khoản và về vòng quay cổ phiếu. Sang L2 và L3 thì nới cả ba lên 90%, rồi 95%.

Mỗi cổ phiếu chỉ rơi vào đúng một hạng. Bản thân danh mục chỉ được tái cơ cấu mỗi năm hai lần, vào phiên giao dịch đầu tiên của tháng 1 và tháng 7, đọc bảng hạng đã chốt của ngày hôm trước — tuyệt đối không nhìn trước — rồi giữ nguyên cho tới kỳ sau. Bài này nắm cả L1 + L2 + L3, không riêng mỗi lõi blue-chip.

Vì sao một chữ “có thể” vẫn đáng thời gian của bạn

Một chữ “có thể” thành thật vẫn hơn một lời chắc nịch mà sai. Thứ tôi đưa bạn không phải phím hàng, mà là một phương pháp viết ra đầy đủ, dựng lên để né ba cái bẫy khiến phần lớn bài backtest tự chế lừa chính người dựng ra nó:

  • Giả vờ đã biết trước ai thắng, tức lấy danh sách cổ phiếu tốt của hôm nay đi “dự đoán” quá khứ. (Ở đây chỉ dùng những gì biết được tại thời điểm đó.)
  • Đếm một năm đẹp tới hai lần, kiểu cộng chồng lấn cẩu thả. (Ở đây là một chuỗi duy nhất, mỗi biến động đếm đúng một lần.)
  • Đem hai thứ khác thước đo ra so sánh với nhau khi đứng cạnh thị trường. (Ở đây cả ba chuỗi đều là chỉ số giá — điều đã được kiểm chứng bằng đo đạc chứ không phải giả định.)

Mọi quy tắc đều viết trắng ra ở trên: ngưỡng chính xác, các mức bình quân, ngày tái cơ cấu danh mục, giới hạn tỷ trọng. Tôi viết ra không phải để mời bạn ngồi dựng lại — số cổ phiếu lưu hành theo từng thời điểm vốn không sẵn có miễn phí, nên dù muốn bạn cũng khó làm — mà để bạn thấy đúng những gì tôi đã làm, và bắt lỗi nếu logic có chỗ sai.

Riêng bộ quy tắc ấy thì tôi có kiểm: dựng lại từ một nguồn giá độc lập, nó cho ra 99,18% số mã trùng đúng hạng. Không phải 100%, vì nguồn giá khác nhau đẩy vài mã qua lại đúng chỗ ngưỡng. Nói cách khác, những gì viết ở trên đúng là bộ quy tắc tạo ra chỉ số này, chứ không phải một bản mô tả cho đẹp.

Vậy, người thường có “vibe-code” nổi một rổ cổ phiếu tốt hơn không?

Được, nhưng “tốt hơn” ở đây không đồng nghĩa với giàu hơn.

Phần lợi nhuận nhỉnh hơn vượt được thị trường chung nhưng chưa vượt nổi nhóm blue-chip, nên tôi chưa gọi nó là một lợi thế đã chứng minh. Thứ trụ lại chắc chắn hơn là một bộ lọc máy móc và minh bạch: nó cắt thị trường xuống còn những mã đủ lớn và đủ thanh khoản để giao dịch, suốt cả kỳ không bắt người nắm giữ trả giá bằng lợi nhuận, lại đi qua các cú sập êm hơn một chút.

Nên ý kiến của tôi gọn thế này: hãy dùng nó làm bước lọc đầu tiên, đừng dùng như một lời hứa. Nó trả lời câu “nên nhìn vào những mã nào”, chứ không trả lời “mua gì, bán lúc nào” — mà phần sau mới là hệ thống thật sự.

Và điều gì sẽ làm tôi đổi ý: đem nó sang một thị trường khác hoặc một thập kỷ khác, nếu cái đáy nông hơn biến mất thì tôi sẽ nói thẳng rằng nó chưa bao giờ có thật.

Câu hỏi kế tiếp, sau khi đã biết độ rộng mới là thứ gánh phần nặng: vì sao nó gánh được, và liệu còn gánh được bao lâu? Đó là Curiosity kế tiếp.

Giải nghĩa — tôi dùng các từ theo nghĩa nào

  • Hạng (tier)Mỗi ngày giao dịch, doanh nghiệp được chấm điểm chỉ bằng vốn hóa thị trường, thanh khoản và vòng quay cổ phiếu, không bao giờ bằng phân tích cơ bản. L1 là lõi blue-chip, L2 và L3 mở rộng dần ra vành đai giao dịch được, L4 để ngoài; bài này nắm L1–L3.
  • CDXChỉ số xây dựng theo bộ quy tắc, gồm các hạng L1–L3, tính theo tỷ trọng vốn hóa, tái cơ cấu danh mục vào tháng 1 và tháng 7, giới hạn mỗi mã ở 10%, tính lại hằng ngày.
  • Rổ cổ phiếu (stock pool)Danh sách rút gọn những mã bạn thật sự cân nhắc, tức lớp lọc đầu tiên trước mọi chuyện mua bán.
  • Tỷ trọng theo vốn hóa thị trường (cap-weighted)Tỷ trọng mỗi mã tương ứng với vốn hóa của nó, giống đa số quỹ chỉ số: doanh nghiệp càng lớn thì tỷ trọng càng cao.
  • Tái cơ cấu danh mục (rebalance)Rà soát và ấn định lại cổ phiếu thành phần cùng tỷ trọng theo lịch định sẵn, ở đây là phiên đầu tháng 1 và tháng 7. Đây chính là việc HOSE vẫn làm định kỳ với rổ VN30.
  • Dữ liệu tại thời điểm (point-in-time)Chỉ dùng dữ liệu đã có vào đúng lúc đó, không nhìn lại bằng con mắt hôm nay. Nhờ vậy phép thử tránh được hai lỗi kinh điển: nhìn trước (look-ahead) và thiên lệch sống sót (survivorship bias).
  • Mức sụt giảm tối đa (maximum drawdown)Mức giảm sâu nhất từ một đỉnh xuống đáy kế tiếp, tức nỗi đau lớn nhất mà người nắm giữ phải chịu.
  • Lợi suất giá và lợi suất tổng thu nhập (price-return / total-return)Lợi suất giá chỉ tính biến động giá, còn lợi suất tổng thu nhập cộng thêm cổ tức. Cả CDX, VN-Index và VN30 đều là chỉ số giá, nên chúng so được trực tiếp với nhau.
  • Khoảng tin cậy (confidence interval)Một con số đo từ mẫu thì luôn kèm sai số; khoảng tin cậy là dải giá trị mà con số thật nhiều khả năng nằm trong đó. Dải nằm hẳn trên số 0 thì khó giải thích bằng may rủi; dải vắt qua số 0 thì “chẳng có gì cả” vẫn là một khả năng.
  • VN-Index / VN30Chỉ số toàn thị trường và chỉ số 30 doanh nghiệp vốn hóa lớn nhất, hai thước đo tham chiếu của bài này.

Các con số được tính thế nào

Cùng một luật ở mọi phía, và chỗ duy nhất hai phía khác nhau thì tôi nói rõ:

  • Tỷ trọngTỷ trọng mỗi mã là vốn hóa của nó chia cho tổng vốn hóa cả rổ, nhưng không mã nào được vượt 10%; phần vượt chia lại cho các mã còn lại.
  • Nắm giữGiữa hai kỳ tái cơ cấu, danh mục giữ nguyên và chỉ số chỉ biến động theo giá. Đến mỗi kỳ, chỉ số được nối liền bằng hệ số chia (divisor) để mức chỉ số không nhảy bậc khi cổ phiếu thành phần thay đổi. Nếu chỗ nối này bị làm sai, chỉ số sẽ được cộng thêm lợi nhuận "chùa" ở mỗi kỳ. Tôi đã kiểm: gộp cả 22 ngày tái cơ cấu trong mười một năm, phần chênh so với VN-Index là −1,3% — âm, chứ không dương. Nói cách khác, không một phần nào của con số +317,44% đến từ những ngày đảo rổ.
  • Tăng trưởng 2015–2025Mức chỉ số ngày cuối kỳ chia cho mức chỉ số ngày đầu kỳ, rồi trừ 1; kỳ chạy từ 31/12/2014 đến 31/12/2025. Với CDX: 607,15 ÷ 145,44 − 1 ≈ +317,44%.
  • Tăng trưởng kép hằng năm (CAGR)Nếu suốt mười một năm, năm nào cũng tăng đúng một mức như nhau, thì mức đó phải là 13,87% mới ra được +317,44%. Thực tế không năm nào đúng bằng con số đó (2022 giảm −33,36%, 2017 tăng +60,22%): đây là mức đã san phẳng, dùng thay trung bình cộng vì trung bình cộng thổi phồng mỗi khi có năm thua lỗ.
  • Sụt giảm tối đaMức giảm sâu nhất từ một đỉnh xuống đáy kế tiếp trong kỳ, tính trên giá đóng cửa theo ngày.
  • Sai số của khoảng cáchKhoảng cách được đo bằng bootstrap: lấy mẫu lại 2.000 lần theo khối 20 ngày, trên lợi suất ngày ghép cặp của cả hai chuỗi. Dải 95% thu được — so với VN-Index là [+0,60, +4,72] điểm phần trăm mỗi năm, không chứa số 0; so với VN30 là [−1,85, +5,90], có chứa số 0. Một cách ước lượng khác cho 2,26 và 1,97 điểm phần trăm, kết luận không đổi.
  • Cùng một mặt bằng, đã kiểm chứngChuỗi giá điều chỉnh mà CDX dùng có xử lý chia tách và cổ phiếu thưởng, nhưng không cộng lại cổ tức tiền mặt; đo trên 5.265 ngày chốt quyền cho thấy giá điều chỉnh không hề nhảy bậc. Vậy nên cả ba chuỗi đều là chỉ số giá và không cần khấu trừ gì khỏi khoảng cách.

Nhật ký sửa đổi

Bản chốt: 26/07/2026, 11:24 (giờ Việt Nam, UTC+7). Trước mốc này bài vẫn đang được hoàn thiện, trong đó có một chú thích sai trên biểu đồ, ghi rằng CDX có cộng lại cổ tức, đã được sửa. Từ mốc chốt trở đi, mọi thay đổi ảnh hưởng tới người đọc đều ghi lại ở đây, kèm ngày giờ. Bài đã đăng thì tôi không sửa lặng lẽ.

Curiosity #2 hỏi hạng nào gánh phần nặng — sắc hơn thì tốt hơn, hay rộng hơn? Bài đó đang tới.