Trang chủBlogPhân Tích Thị TrườngMarket Bubble có thể được lượng hóa bằng dữ liệu nào thay vì chỉ nói “giá đang quá cao”?
Market Bubble có thể được lượng hóa bằng dữ liệu nào thay vì chỉ nói “giá đang quá cao”?
Phân Tích Thị Trường

Market Bubble có thể được lượng hóa bằng dữ liệu nào thay vì chỉ nói “giá đang quá cao”?

Market Bubble

Ngọc Hải LươngNgọc Hải Lương
16/8/2026
9 phút phút đọc
20 lượt xem

Phần 1. Bong bóng không chỉ là giá cao, mà là nhiều dấu hiệu đầu cơ cùng xuất hiện

Khi thị trường tăng mạnh, rất dễ xuất hiện nhận định “bong bóng rồi”. Nhưng giá tăng cao chưa chắc là bong bóng. Một thị trường khỏe vẫn có thể tiếp tục tăng trong thời gian dài. Điều đáng quan tâm hơn là thị trường có đang xuất hiện đồng thời nhiều dấu hiệu đầu cơ cực đoan hay không: giá tăng ngày càng nhanh, khoảng cách với xu hướng dài hạn quá lớn, thanh khoản bùng nổ, số lượng cổ phiếu tăng nóng tăng mạnh và sau đó breadth bắt đầu suy yếu.

db09b5d9-641a-4cb1-bfed-1ea881e7f3f0.png


Biến đầu tiên có thể theo dõi là tốc độ tăng giá. VN-Index tăng 20% trong một năm khác hoàn toàn với tăng 20% chỉ trong hai tháng. Nếu tốc độ tăng gần đây lớn hơn nhiều so với tốc độ trung hạn, thị trường đang có dấu hiệu acceleration. Có thể đo đơn giản bằng:

ret_20 = close.pct_change(20)
ret_60 = close.pct_change(60)
acceleration = ret_20 - ret_60 / 3

Ví dụ 60 phiên qua VN-Index tăng 15%, tương đương khoảng 5% cho mỗi 20 phiên, nhưng riêng 20 phiên gần nhất tăng 12%. Điều này cho thấy tốc độ tăng đang tăng lên rõ rệt. Một thị trường tăng đều thường khác khá nhiều với giai đoạn giá bắt đầu tăng theo dạng parabolic.
Biến thứ hai là khoảng cách với MA200:

ma200 = close.rolling(200).mean()
distance_ma200 = close / ma200 - 1

Nếu VN-Index chỉ cao hơn MA200 khoảng 5–10%, thị trường có thể đơn giản đang trong một uptrend bình thường. Nhưng nếu khoảng cách lên 25–30%, đồng thời giá vẫn tăng nhanh, mức độ nóng đã khác đáng kể. Distance MA200 không phải tín hiệu bán, nhưng nó cho biết giá đã rời khá xa mức xu hướng dài hạn.
Biến thứ ba là thanh khoản. Có thể so giá trị giao dịch 20 phiên gần nhất với trung bình một năm:

turnover_20 = turnover.rolling(20).mean()
turnover_252 = turnover.rolling(252).mean()
turnover_ratio = turnover_20 / turnover_252

Nếu turnover ratio bằng 1.8, thanh khoản hiện tại cao hơn khoảng 80% so với trung bình một năm. Giá tăng mạnh đồng thời thanh khoản bùng nổ thường cho thấy dòng tiền đầu cơ tham gia nhiều hơn.
Biến thứ tư là Market Breadth. Nếu VN-Index tăng và 80% cổ phiếu nằm trên MA50, xu hướng đang có sự tham gia rộng. Nhưng nếu VN-Index tiếp tục lập đỉnh trong khi tỷ lệ cổ phiếu trên MA50 giảm từ 80% xuống 70%, rồi 60%, thì chỉ số vẫn mạnh nhưng ngày càng ít cổ phiếu thực sự khỏe. Đây là một dấu hiệu đáng chú ý hơn nhiều so với việc chỉ nhìn điểm số VN-Index.
Với thị trường Việt Nam có thể thêm tỷ lệ mã tăng trần:

limit_up_ratio = number_limit_up / number_traded_stocks

Nếu bình thường chỉ 1–2% cổ phiếu tăng trần nhưng trong một giai đoạn liên tục có 8–10%, đặc biệt tập trung ở nhóm small-cap hoặc cổ phiếu đầu cơ, mức độ speculative activity đã tăng đáng kể.
Như vậy một hệ thống đơn giản chỉ cần năm nhóm dữ liệu: Price Acceleration, Distance MA200, Turnover, Breadth và Limit-up Activity. Chỉ riêng năm biến này đã mô tả mức độ nóng của thị trường tốt hơn nhiều so với việc chỉ nói “P/E cao” hay “RSI quá mua”.

Phần 2. Gom các dấu hiệu thành một Speculation Score

Vấn đề là năm biến trên có đơn vị khác nhau nên không thể cộng trực tiếp. Một cách đơn giản là chuyển từng biến thành percentile lịch sử. Percentile 95 nghĩa là mức hiện tại cao hơn 95% số quan sát trong giai đoạn lịch sử dùng để so sánh.
Ví dụ:

Price Acceleration    92
Distance MA200        95
Turnover              88
Breadth               74
Limit-up Activity     91

Sau đó lấy trung bình:

speculation_score = (
    acceleration_pct
    + distance_pct
    + turnover_pct
    + breadth_pct
    + limit_up_pct
) / 5

Kết quả được đưa về thang 0–100. Có thể hiểu tương đối đơn giản: dưới 60 là trạng thái bình thường, 60–80 là thị trường bắt đầu nóng, 80–90 là đầu cơ mạnh và trên 90 là trạng thái rất cực đoan so với lịch sử.
Điểm quan trọng là Score 90 không có nghĩa ngày mai thị trường giảm. Một thị trường đang rất nóng vẫn có thể tiếp tục tăng thêm nhiều tuần. Speculation Score nên được hiểu giống một đồng hồ đo nhiệt độ hơn là tín hiệu Buy/Sell.
Ví dụ VN-Index đang tăng mạnh, Price Acceleration ở percentile 93, Distance MA200 ở 96, Turnover ở 91 và Limit-up Activity ở 94. Khi đó Speculation Score có thể quanh 90–92. Kết luận hợp lý không phải “thị trường sắp tạo đỉnh”, mà là “mức độ đầu cơ hiện tại đang nằm trong vùng rất hiếm của lịch sử”.
Để kiểm tra Score có thực sự có giá trị hay không, cần quay lại dữ liệu lịch sử. Có thể tính return 20 và 60 phiên tiếp theo:

df["future_20d"] = df["close"].shift(-20) / df["close"] - 1
df["future_60d"] = df["close"].shift(-60) / df["close"] - 1

Sau đó chia dữ liệu thành các nhóm Score dưới 60, từ 60–80, 80–90 và trên 90. Không nên chỉ nhìn lợi nhuận trung bình. Những chỉ số quan trọng hơn là xác suất xuất hiện drawdown lớn, Max Drawdown trung bình, Worst 5% Drawdown và xác suất thị trường giảm trên 10% hoặc 15%.
Ví dụ dữ liệu có thể cho kết quả minh họa như sau:

Score < 60
Xác suất drawdown >10%: 12%
Score 60–80
Xác suất drawdown >10%: 18%
Score 80–90
Xác suất drawdown >10%: 27%
Score > 90
Xác suất drawdown >10%: 41%

Điểm đáng chú ý là future return trung bình chưa chắc chuyển sang âm ngay khi Score cao. Thị trường speculative vẫn có thể tiếp tục tăng. Nhưng phần downside của distribution bắt đầu xấu đi. Đây mới là giá trị thực tế của Speculation Score: không phải dự báo chính xác đỉnh, mà đo xem tail risk có đang tăng nhanh hay không.
Một điểm đặc biệt đáng theo dõi là Score cao nhưng Breadth bắt đầu giảm. Ví dụ VN-Index tiếp tục tạo đỉnh mới, Turnover rất cao, Distance MA200 nằm trong vùng cực đoan nhưng tỷ lệ cổ phiếu trên MA50 giảm từ 82% xuống 75%, 67% rồi 58%. Có thể hiểu rất đơn giản là chỉ số vẫn tăng nhưng “đội hình phía sau” đang yếu dần.
Có thể tạo một rule nghiên cứu:

late_stage = (
    (speculation_score > 85)
    & (breadth_slope < 0)
)

Trạng thái này không phải lệnh bán tự động, nhưng có thể được coi là dấu hiệu thị trường đang bước sang một giai đoạn muộn hơn của chu kỳ đầu cơ.

Phần 3. Ứng dụng vào đầu tư và quản trị danh mục

Speculation Score có giá trị nhất khi được dùng để thay đổi cách quản trị rủi ro chứ không phải cố đoán đúng ngày tạo đỉnh. Khi Score còn thấp, portfolio có thể hoạt động bình thường. Khi Score tăng lên, mức độ thận trọng có thể tăng theo.
Ví dụ một framework minh họa:

Score < 60
Exposure bình thường
Score 60–80
Hạn chế chasing, theo dõi breadth
Score 80–90
Giảm margin, giảm concentration
Score > 90
Ưu tiên liquidity, giảm vị thế đầu cơ

Các mức trên không phải quy tắc cố định. Chúng phải được backtest trên dữ liệu thực tế. Logic quan trọng hơn là khi mức độ đầu cơ của thị trường tăng lên, portfolio không nên tiếp tục tăng leverage và concentration giống như ở trạng thái bình thường.
Một nghiên cứu rất phù hợp với VN-Index là lấy các đỉnh lớn trong lịch sử rồi nhìn ngược lại 3–6 tháng trước đó. Có thể đặt:

T-120
T-90
T-60
T-30
T0 = đỉnh thị trường

Tại mỗi mốc, lưu Price Acceleration, Distance MA200, Turnover, Breadth, Limit-up Ratio và Speculation Score. Sau đó xem các biến thường thay đổi theo trình tự nào.
Một pattern giả định có thể là: giai đoạn đầu breadth mở rộng, sau đó momentum tăng, thanh khoản bắt đầu bùng nổ, giá đi xa MA200, số mã đầu cơ tăng nhanh và cuối cùng breadth bắt đầu thu hẹp dù VN-Index vẫn tiếp tục tăng. Nếu pattern này lặp lại ở nhiều chu kỳ, nó mới thực sự có giá trị.
Một dashboard thực tế thậm chí chỉ cần sáu chỉ số:

Price Acceleration    91
Distance MA200        95
Turnover              88
Breadth               72
Limit-up Activity     93
Speculation Score     88/100

Bên cạnh là biểu đồ VN-Index và Speculation Score theo thời gian, đánh dấu những giai đoạn sau đó thị trường xuất hiện drawdown trên 10%, 15% hoặc 20%. Sau vài chu kỳ thị trường, dữ liệu sẽ cho biết Score có thực sự hữu ích hay không.
Nếu Score liên tục tăng trước những giai đoạn tail risk lớn, nó có thể trở thành một biến quản trị portfolio. Nếu không có sự khác biệt đáng kể giữa Score cao và Score thấp, nên bỏ hoặc thiết kế lại chỉ báo thay vì cố giữ một mô hình chỉ vì câu chuyện nghe hợp lý.
Điểm cốt lõi là bong bóng không chỉ là giá cao. Một trạng thái đáng chú ý hơn thường xuất hiện khi giá tăng ngày càng nhanh, đi quá xa xu hướng dài hạn, thanh khoản bùng nổ, đầu cơ lan rộng và sau đó breadth bắt đầu suy yếu.
Thay vì nói “thị trường có vẻ bong bóng”, có thể diễn đạt bằng dữ liệu rõ hơn: mức độ đầu cơ hiện đang nằm trong top 10% lịch sử, giá cách rất xa MA200, turnover ở vùng cực cao và breadth đã bắt đầu suy yếu.
Như vậy Market Bubble không cần được dự báo bằng một lời khẳng định. Nó có thể được theo dõi như một trạng thái rủi ro đang tăng dần trong dữ liệu.