Cổ phiếu P/E thấp gần đáy 52 tuần
Lọc đúng cổ phiếu P/E thấp gần đáy 52 tuần, xếp hạng theo khoảng cách đến đáy và xem dữ liệu cho biết chúng thường tạo đáy mới sau đó bao nhiêu lần.
Cổ phiếu có P/E thấp và đang gần mức thấp nhất trong 52 tuần nằm ở giao điểm của hai bộ lọc rất khác nhau: hệ số lợi nhuận quá khứ thấp và giá đang ở gần đáy của chính biên độ một năm. Bộ lọc dưới đây nêu cả hai điều kiện bằng các con số có thể sao chép, xếp hạng các cổ phiếu còn lại theo khoảng cách đến mức thấp và hiển thị truy vấn bên dưới mỗi bảng. Cần lưu ý ngay từ đầu: danh sách được xây dựng theo cách này thường tập hợp các cổ phiếu đang giảm mạnh không kém gì các cơ hội giá rẻ, và phần sau sẽ giải thích phép tính đằng sau bộ lọc.
Thế nào là gần mức thấp nhất trong 52 tuần
Mức thấp nhất trong 52 tuần là giá thấp nhất mà một cổ phiếu từng được giao dịch trong một năm gần nhất. Khoảng cách đến mức thấp được chuyển thành tỷ lệ phần trăm bằng cách lấy giá đóng cửa gần nhất chia cho mức thấp nhất trong 52 tuần rồi trừ đi một. Một cổ phiếu đóng cửa ở mức 55, trong khi mức thấp nhất trong 52 tuần là 50, đang cao hơn đáy 10%. Đây là toàn bộ phép tính dùng để xếp hạng, còn hướng dẫn mức cao và thấp nhất trong 52 tuần của chúng tôi trình bày chi tiết hơn về biên độ này.
P/E, tức giá chia cho lợi nhuận trên mỗi cổ phiếu trong 12 tháng gần nhất, lấy từ bảng tỷ số hằng ngày stocks_ratios, cùng nguồn với bộ lọc cổ phiếu có dividend yield cao nhất. Biên độ giá lấy từ stocks_daily_aggs, gồm một dòng cho mỗi cổ phiếu trong mỗi phiên.
Bốn tham số xác định bộ lọc. Mỗi tham số đều mang tính tùy ý cho đến khi được ghi rõ:
- khoảng cách đến mức thấp nhất trong 52 tuần không quá 10%
- P/E quá khứ lớn hơn 0 và không quá 15
- vốn hóa thị trường tối thiểu 10 tỷ USD
- khối lượng giao dịch bình quân mỗi ngày tối thiểu 1.000.000 cổ phiếu
Hai điều kiện cuối giữ cho danh sách chỉ gồm những mã có thanh khoản thực sự ở cả bên mua và bên bán. Một công ty trị giá 40 triệu USD chỉ giao dịch 20.000 cổ phiếu mỗi ngày có thể tạo ra bất kỳ hệ số nào.
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH ratios AS
(
SELECT
ticker,
argMax(price_to_earnings, date) AS pe,
argMax(market_cap, date) AS mcap,
argMax(average_volume, date) AS adv
FROM global_markets.stocks_ratios
WHERE date >= today() - 14
AND ticker NOT IN ('SPCX')
GROUP BY ticker
),
band AS
(
SELECT
ticker,
min(low) AS low_52w,
argMax(close, date) AS last_close
FROM global_markets.stocks_daily_aggs
WHERE date >= today() - 372
AND ticker NOT IN ('SPCX')
GROUP BY ticker
)
SELECT
b.ticker AS ticker,
round(toFloat64(b.last_close) / toFloat64(b.low_52w) * 100 - 100, 1) AS pct_above_low,
round(r.pe, 1) AS pe_ratio
FROM band AS b
INNER JOIN ratios AS r ON r.ticker = b.ticker
WHERE r.mcap >= 10000000000
AND r.adv >= 1000000
AND r.pe > 0
AND r.pe <= 15
AND b.low_52w > 0
AND toFloat64(b.last_close) / toFloat64(b.low_52w) <= 1.10
ORDER BY pct_above_low ASC, b.ticker ASC
LIMIT 15Bảng liệt kê 6 mã gần mức đáy nhất theo các tham số trên, với tối đa 15 dòng. VICI đang gần đáy của chính mã này nhất, cao hơn 2.3% so với mức giá thấp nhất được ghi nhận trong năm qua, với hệ số quá khứ 10.5. Ở đầu còn lại của bảng, BRK.B đang cao hơn 9.7% so với mức thấp.
Cách xếp hạng danh sách
Xếp hạng là bước mà phần lớn các bộ lọc bỏ qua. Xếp theo P/E sẽ đưa hệ số có vẻ rẻ nhất lên đầu và che khuất vị trí của giá trong biên độ. Xếp theo khoảng cách đến mức thấp sẽ đưa các mã gần mức đáy mới nhất lên đầu và che khuất mức định giá của chúng. Bảng này xếp theo khoảng cách tăng dần và đưa P/E vào cột kế tiếp, nhờ đó giữ cả hai thông tin trên cùng một dòng. Nếu bằng nhau, danh sách được sắp xếp theo thứ tự bảng chữ cái. Chi tiết này quan trọng khi nhiều mã được làm tròn về cùng một chữ số thập phân.
Để tái tạo bộ lọc, cần bốn dữ liệu đầu vào: chuỗi giá đóng cửa hằng ngày trong trọn một năm gần nhất, EPS quá khứ, số lượng cổ phiếu để tính vốn hóa thị trường và khối lượng giao dịch bình quân. Sau đó, mọi thứ chỉ còn là phép trừ và phép chia.
Số mã vượt qua bộ lọc phụ thuộc vào vị trí các tham số
Chỉ cần thay đổi một tham số, quy mô danh sách cũng thay đổi. Bảng dưới đây giữ nguyên ngưỡng vốn hóa và thanh khoản, mở rộng biên độ khoảng cách từ 5% lên 30% và đếm số mã đạt điều kiện ở hai mức trần P/E.
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH ratios AS
(
SELECT
ticker,
argMax(price_to_earnings, date) AS pe,
argMax(market_cap, date) AS mcap,
argMax(average_volume, date) AS adv
FROM global_markets.stocks_ratios
WHERE date >= today() - 14
AND ticker NOT IN ('SPCX')
GROUP BY ticker
),
band AS
(
SELECT
ticker,
min(low) AS low_52w,
argMax(close, date) AS last_close
FROM global_markets.stocks_daily_aggs
WHERE date >= today() - 372
AND ticker NOT IN ('SPCX')
GROUP BY ticker
),
universe AS
(
SELECT
b.ticker AS ticker,
toFloat64(b.last_close) / toFloat64(b.low_52w) * 100 - 100 AS pct_above_low,
r.pe AS pe
FROM band AS b
INNER JOIN ratios AS r ON r.ticker = b.ticker
WHERE r.mcap >= 10000000000
AND r.adv >= 1000000
AND r.pe > 0
AND b.low_52w > 0
)
SELECT
concat('within ', toString(cutoff), '%') AS distance_band,
countIf(pct_above_low <= cutoff AND pe <= 15) AS names_pe_under_15,
countIf(pct_above_low <= cutoff AND pe <= 25) AS names_pe_under_25
FROM
(
SELECT
pct_above_low,
pe,
arrayJoin([5, 10, 15, 20, 25, 30]) AS cutoff
FROM universe
)
GROUP BY cutoff
ORDER BY cutoffVới các tham số của bảng đầu tiên, biên độ 10% và mức trần 15, tổng cộng có 7 cổ phiếu vốn hóa lớn đạt điều kiện. Thu hẹp biên độ xuống 5% còn 1 mã. Mở rộng lên 30% đưa số lượng lên 43, trong khi nâng mức trần lên 25 với cùng biên độ này cho kết quả 137 mã. Không có thiết lập nào ở đây là đúng một cách khách quan. Đây là các tham số, và cách công bố một bộ lọc trung thực là nói rõ chúng được đặt ở đâu.
Mức thấp nhất trong 52 tuần là một đáy dịch chuyển
Bản thân mức thấp cũng dịch chuyển. Đây là một thước đo cuốn chiếu, vì vậy mức thấp cũ sẽ dần ra khỏi khoảng thời gian quan sát khi lịch tiến lên. Đáy có thể tăng lên vào một ngày mà cổ phiếu hoàn toàn không biến động. Theo dõi một mã theo từng tháng sẽ cho thấy rõ điều này. Bảng dưới đây theo dõi KO, một cổ phiếu vốn hóa lớn quen thuộc, so với mức giá thấp nhất trong 12 tháng gần nhất.
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
formatDateTime(m, '%Y-%m') AS month,
round(toFloat64(month_close), 2) AS close_price,
round(toFloat64(trailing_low), 2) AS trailing_12m_low,
round(toFloat64(month_close) / toFloat64(trailing_low) * 100 - 100, 1) AS pct_above_low
FROM
(
SELECT
m,
month_close,
min(month_low) OVER (ORDER BY m ASC ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS trailing_low
FROM
(
SELECT
toStartOfMonth(date) AS m,
argMax(close, date) AS month_close,
min(low) AS month_low
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'KO'
AND date >= today() - 1100
GROUP BY m
)
)
WHERE m >= toStartOfMonth(today() - 400)
ORDER BY mTính đến 2026-08, KO đóng cửa ở mức $87.71, so với mức thấp trong 12 tháng gần nhất là $65.35, tương ứng khoảng cách 34.2%. Khoảng chênh giữa hai đường giá là đại lượng mà bộ lọc này đo lường. Khi đường mức thấp tăng lên trong khi đường giá đóng cửa đi ngang, khoảng cách đo được sẽ thu hẹp dù cổ phiếu không biến động.
Vì sao bộ lọc thường tập hợp các cổ phiếu đang giảm mạnh
Cơ chế nằm ở phép tính. E trong P/E là lợi nhuận quá khứ và được cập nhật bốn lần mỗi năm, khi công ty công bố kết quả kinh doanh. P được cập nhật mỗi giây trong thời gian thị trường mở cửa. Nếu giá giảm xuyên suốt một quý trong khi số liệu lợi nhuận được giữ nguyên cho đến báo cáo tiếp theo, hệ số sẽ tự giảm qua từng tuần. Hệ số có vẻ rẻ nhất đúng vào lúc giá đã rời xa nhất con số trong báo cáo gần nhất. Khi báo cáo tiếp theo cho thấy lợi nhuận giảm, hệ số sẽ tăng trở lại ở mức giá mới thấp hơn, và thực tế chưa từng có sự rẻ nào. Mô hình này được gọi là bẫy giá trị.
Các cổ phiếu chu kỳ tạo ra diễn biến ngược lại. Một hãng sản xuất ô tô hoặc công ty xây dựng nhà thường có P/E quá khứ thấp nhất tại đỉnh chu kỳ lợi nhuận, khi EPS quá khứ ở mức cao nhất, và P/E cao nhất tại đáy chu kỳ.
Đo lường mô hình này đòi hỏi phải tái dựng bộ lọc tại một ngày trong quá khứ, sau đó theo dõi mọi mã từng đạt điều kiện. Cần có hệ số quá khứ của từng ticker tại ngày đó, thay vì chỉ có số liệu mới nhất. Các dòng stocks_ratios đứng sau những bảng trên được đọc tại ngày gần nhất của từng ticker. Trang này mô tả cơ chế nhưng không gắn thêm một con số theo dõi tiếp diễn khi không thể cung cấp truy vấn cho con số đó. Một nhóm cổ phiếu từ một ngày bắt đầu duy nhất cũng chỉ là một quan sát. Nếu bắt đầu vào tháng khác, các con số sẽ thay đổi. Danh sách không đưa ra kết luận về diễn biến tiếp theo của bất kỳ mức giá nào.
Những điều P/E thấp không cho biết
- Lợi nhuận nào. EPS quá khứ bao gồm các khoản bất thường, doanh thu từ bán tài sản và các khoản dàn xếp pháp lý. Một quý có lợi nhuận đột biến có thể kéo thấp hệ số trong cả năm sau khi dòng tiền đã biến mất.
- Bối cảnh ngành. Ngân hàng, bảo hiểm, hãng sản xuất ô tô và doanh nghiệp lọc dầu thường có hệ số thấp hơn về mặt cấu trúc so với các công ty phần mềm. Một mức trần áp dụng cho toàn bộ các ngành sẽ khiến danh sách tập trung vào cùng một số ít ngành.
- Bảng cân đối kế toán. P/E không tính đến nợ. Hai công ty có cùng hệ số nhưng đòn bẩy rất khác nhau không có cùng một mức định giá.
- Khoản lỗ. Công ty có lợi nhuận âm không có P/E mang ý nghĩa và không bao giờ xuất hiện ở đây. Việc không có tên trong danh sách không phải là một kết luận.
Hai danh sách liền kề cũng phù hợp để đọc cùng danh sách này. Những cổ phiếu biến động mạnh nhất trong tháng này cho biết mã nào tăng hoặc giảm xa nhất trong tháng qua, còn những cổ phiếu có biến động thấp nhất cho thấy trạng thái ngược lại.
Ghi chú dữ liệu và định nghĩa
- Giá lấy từ
stocks_daily_aggs, gồm một dòng cho mỗi cổ phiếu trong mỗi phiên. Mức thấp nhất trong 52 tuần là giá trị nhỏ nhất của cột giá thấp trong 372 ngày lịch gần nhất. - P/E, vốn hóa thị trường và khối lượng bình quân lấy từ
stocks_ratios, sử dụng dòng gần nhất của từng ticker. - Việc chia tách cổ phiếu hoặc một khoản phân phối đặc biệt lớn trong khoảng thời gian quan sát sẽ làm thay đổi biên độ giá thô. Cần kiểm tra điều này với bất kỳ mã nào từng có sự kiện như vậy trong năm gần nhất.
- Bộ lọc yêu cầu hệ số quá khứ dương, vì vậy các công ty thua lỗ không xuất hiện.
Câu hỏi thường gặp
Cổ phiếu gần mức thấp nhất trong 52 tuần có nghĩa là gì?
Điều đó có nghĩa là giá hiện tại đang gần mức giá thấp nhất mà cổ phiếu từng giao dịch trong năm qua. Khoảng cách đến mức thấp được tính bằng giá đóng cửa gần nhất chia cho mức thấp nhất trong 52 tuần rồi trừ đi một, biểu thị dưới dạng phần trăm.
P/E bao nhiêu được xem là thấp?
Không có một ngưỡng cố định. Các bộ lọc thường đặt mức trần P/E quá khứ ở 15, hoặc ở 10 nếu muốn sàng lọc chặt hơn. Hệ số cũng khác biệt đáng kể giữa các ngành, nên một mức trần duy nhất cho toàn thị trường sẽ khiến danh sách tập trung vào cùng một số ít ngành.
Cổ phiếu có P/E thấp và gần mức thấp nhất trong 52 tuần có phải là cơ hội mua tốt không?
Không có bộ lọc nào trả lời được câu hỏi đó, và trang này cũng không đưa ra câu trả lời. Hai điều kiện trên chỉ mô tả quá khứ: thị trường đang trả bao nhiêu cho mỗi USD lợi nhuận đã được báo cáo và giá đang nằm ở đâu trong biên độ một năm của chính cổ phiếu. Không điều kiện nào cho biết điều gì sẽ xảy ra tiếp theo.
Bẫy giá trị là gì?
Bẫy giá trị là một cổ phiếu có vẻ rẻ theo hệ số quá khứ nhưng vẫn tiếp tục giảm. EPS được cập nhật theo quý, còn giá được cập nhật liên tục. Vì vậy, khi giá giảm trong lúc E quá khứ cố định, hệ số sẽ liên tục thấp hơn, và báo cáo tiếp theo có thể đẩy hệ số lên lại ở mức giá thấp hơn.
Mỗi bảng trên đều đi kèm truy vấn đã tạo ra bảng đó. Hãy mở một truy vấn, thay đổi mức trần P/E hoặc biên độ khoảng cách, rồi xây dựng lại danh sách theo các tham số của bạn trên terminal Strasmore.