Weekly Recap VN30 — Tuần 20/2026 (15/05/2026)

TL;DR: Tuần 20 ghi nhận sự phân hóa mạnh trong VN30 khi GAS bứt phá gần 20% trong khi dòng tiền nội địa kết thúc tuần ở trạng thái bán ròng — áp lực mua chỉ còn 34.7%.


Data

NhómĐiểm nổi bật
Top tăng tuầnGAS +19.68%, PLX +12.23%, GVR +5.74%
Top giảm tuầnVRE -5.29%, VHM -3.66%, MSN -3.37%
Dòng tiền nội địaÁp lực mua 34.7% (bán mạnh)
RSI overbought (≥70)0/30 cổ phiếu
RSI oversold (≤30)0/30 cổ phiếu
Sector dẫn đầu hôm nayNăng lượng +6.42%, KL 84 tỷ

Analysis

1. Năng lượng làm chủ tuần — GAS và PLX kéo cả nhóm

Không có cách nào đọc tuần này mà bỏ qua cặp đôi GAS–PLX. GAS đóng cửa tại 89,400 với mức tăng +19.68% trong 5 phiên — đây là mức tăng tuần mạnh nhất trong rổ VN30. PLX theo sau với +12.23%, đóng cửa tại 42,200.

Ở phiên cuối tuần, sector Năng lượng ghi nhận dòng tiền +6.42% với khối lượng 84 tỷ đồng và toàn bộ 2/2 cổ phiếu trong nhóm đều tăng. Đây là tín hiệu dòng tiền tập trung có chủ đích, không phải mức tăng nhờ thị trường chung kéo theo.

Điểm đáng chú ý: dù tăng mạnh suốt tuần, RSI của cả GAS lẫn PLX đều ghi nhận ở mức 50 — vùng trung tính. Điều này cho thấy đà tăng diễn ra từ vùng giá thấp hơn và chưa tích lũy đủ áp lực để kéo RSI vào vùng quá mua.

2. Dòng tiền nội địa: tín hiệu thận trọng

Chỉ số quan trọng nhất phiên cuối tuần không phải là giá — mà là áp lực mua chỉ đạt 34.7%, tức là gần 2/3 giao dịch nội địa nghiêng về phía bán. Đây là mức cho thấy bên bán đang kiểm soát hoàn toàn phiên.

Khi nhìn vào sector flow cùng ngày, Ngân hàng — nhóm chiếm khối lượng giao dịch lớn nhất với 487 tỷ đồng — chỉ có 3/13 cổ phiếu tăng và sector này giảm -0.56%. Đây là dấu hiệu cho thấy dòng tiền không ủng hộ nhóm trụ, dù thanh khoản vẫn ở mức cao.

Tài chính (-0.71%, 0/1 tăng) và Ngân hàng cùng mang sắc đỏ trong khi chỉ hai sector nhỏ hơn là Năng lượng và Nông nghiệp giữ sắc xanh. Sự chênh lệch về khối lượng giữa Ngân hàng (487 tỷ) và Năng lượng (84 tỷ) cho thấy áp lực bán đang tập trung đúng vào nhóm blue-chip thanh khoản cao nhất.

3. Phía giảm: bất động sản và tiêu dùng chịu áp lực

Nhóm giảm tuần gồm VRE (-5.29%, close 34,000), VHM (-3.66%, close 158,000), và hai cổ phiếu tiêu dùng là MSN (-3.37%, close 77,500) và MWG (-3.07%, close 82,000). HPG giảm -2.93% đóng cửa tại 26,550 hoàn thiện top 5 giảm.

VRE dẫn đầu mức giảm với -5.29% — đây là mức giảm tuần đáng kể trong bối cảnh toàn bộ VN30 không có cổ phiếu nào ở vùng oversold (RSI ≤ 30). Nói cách khác, đà giảm hiện tại chưa đưa các cổ phiếu này vào vùng kỹ thuật cần chú ý đặc biệt.

4. RSI distribution: thị trường ở vùng trung tính tuyệt đối

Một điểm đáng ghi nhận từ Lotus AI: 0/30 cổ phiếu trong VN30 ở vùng overbought (RSI ≥ 70) và 0/30 cổ phiếu ở vùng oversold (RSI ≤ 30). Toàn bộ rổ đang giao dịch ở vùng RSI trung tính — và khi tất cả các mã đều báo HOLD, thị trường thực sự đang chờ một tín hiệu rõ ràng hơn từ dòng tiền hoặc từ tin tức vĩ mô.

Phân phối RSI như thế này không phải tín hiệu trung lập vô nghĩa — đây là dấu hiệu thị trường đang trong giai đoạn tích lũy sau một đợt điều chỉnh hoặc chuẩn bị cho một pha biến động mới.


3 Takeaway

Takeaway 1 — Năng lượng là cohort thắng tuần rõ ràng nhất.

GAS tăng +19.68% và PLX tăng +12.23% trong 5 phiên; sector Năng lượng cũng dẫn đầu dòng tiền phiên cuối với +6.42%. Hai tín hiệu này cùng hướng và củng cố lẫn nhau.

Takeaway 2 — Áp lực mua 34.7% là cảnh báo dòng tiền ngắn hạn.

Ngưỡng này thấp hơn đáng kể so với trạng thái cân bằng 50/50; đặc biệt khi nhóm Ngân hàng — sector chiếm 487 tỷ khối lượng — chỉ có 3/13 mã tăng trong phiên cuối tuần.

Takeaway 3 — Không có cổ phiếu nào trong trạng thái kỹ thuật cực đoan.

0/30 mã ở RSI ≥ 70 hoặc ≤ 30, nghĩa là data kỹ thuật hiện tại không tạo ra tín hiệu entry/exit rõ ràng cho bất kỳ cổ phiếu nào trong rổ VN30.


Reproducible

Tự verify các số liệu trong bài bằng lotusmarket:

pip install lotusmarket==0.5.0
from lotusmarket import MarketData, SectorFlow

# Kiểm tra top movers tuần 20/2026
md = MarketData()
weekly = md.get_weekly_movers(index="VN30", week=20, year=2026)
print(weekly[["ticker", "weekly_return", "close", "rsi", "signal"]])

# Kiểm tra sector flow phiên 15/05/2026
sf = SectorFlow()
flow = sf.get_daily(date="2026-05-15", top_n=5)
print(flow[["sector", "change_pct", "volume_bn", "stocks_up"]])

Hoặc dùng CLI:

lmcli weekly-recap --index VN30 --week 20 --year 2026
lmcli sector-flow --date 2026-05-15 --top 5

Disclaimer: Bài viết mang tính phân tích data, không phải lời khuyên đầu tư.


Thích bài này? ⭐ Star repo · 💬 Subscribe Telegram để nhận daily report · 📡 RSS feed