接近52周低点的低市盈率股票
查看低市盈率、接近52周低点的股票名单、精确筛选条件和距离排名,了解这些股票之后继续创低点的真实频率,避免把接飞刀误当成捡便宜。
低市盈率、接近52周低点的股票,处在两个差异很大的筛选条件交汇处:较低的滚动市盈率,以及接近自身一年价格区间底部的股价。下方筛选器将两个条件都明确写成可复制的数字,按距离低点的幅度对符合条件的股票排序,并在每个面板下方展示查询语句。先提示一点:这种方法筛出的股票,成为“接飞刀”的概率至少不低于成为便宜股的概率。后文将详细说明背后的计算方法。
什么算接近52周低点
52周低点是股票在过去滚动一年内创出的最低价格。距离低点可换算成百分比:最新收盘价除以52周低点,再减去一。如果某股票收于55美元,而52周低点为50美元,那么它比低点高10%。这就是整个排序的计算方法;我们的52周高点和低点指南还会更详细地介绍这一价格区间。
市盈率,即股价除以过去12个月每股收益,来自每日比率表stocks_ratios,与我们的股息率最高的股票筛选器使用相同的数据源。价格区间来自stocks_daily_aggs,每只股票每个交易日对应一行数据。
四个参数定义了这一筛选器。在明确写出之前,每个参数都只是主观选择:
- 距离52周低点不超过10%
- 滚动市盈率高于零且不超过15
- 市值不低于100亿美元
- 日均成交量不低于1,000,000股
后两个条件确保入选股票两边都有真实的市场交易。市值4,000万美元、日均成交量仅20,000股的公司,任何市盈率都可能被少量交易推出来。
每个数字背后的完整 SQL
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 15该面板列出符合上述参数、最接近低点的6只股票,最多显示15行。VICI最接近自身低点,当前价格比过去一年创出的最低价高2.3%,滚动市盈率为10.5。在面板另一端,BRK.B比自身低点高9.7%。
如何对列表排序
排序是多数筛选器忽略的一步。按市盈率排序,会把看起来最便宜的股票放在顶部,却隐藏股价在自身区间中的位置。按距离低点排序,会把最接近新低的股票放在顶部,却隐藏其估值。该面板按距离低点的幅度升序排列,并在下一列保留市盈率,使两个事实出现在同一行中。如果数值四舍五入后相同,则按字母顺序打破平局。在多只股票显示相同小数时,这一细节很重要。
要复现这一筛选,需要四项输入:覆盖完整滚动一年的每日收盘价序列、滚动每股收益、用于计算市值的股本数量,以及平均成交量。此后的计算只有减法和除法。
通过筛选的股票数量取决于参数设置
调整一个参数,列表规模就会变化。下方面板固定市值和流动性门槛,将距离低点的区间从5%逐步放宽至30%,并分别按两个市盈率上限统计符合条件的股票数量。
每个数字背后的完整 SQL
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 cutoff在第一个面板的参数下,即距离低点不超过10%、市盈率上限为15时,共有7只大盘股符合条件。将区间收紧至5%后,剩下1只。放宽至30%后,数量达到43;在相同区间下,将市盈率上限提高至25,则达到137。这里没有哪种设置是客观正确的。它们只是参数。发布筛选结果时,诚实的做法是说明参数具体设在什么位置。
52周低点是一个移动的底部
低点本身会移动。它是一个滚动指标。随着日历推进,旧低点会退出计算窗口,底部可能在某一天上移,即使股票当天没有发生任何变化。逐月跟踪一只股票,就能看清这一点。下方面板以KO这只家喻户晓的大盘股为例,将其股价与过去12个月的最低价进行对比。
每个数字背后的完整 SQL
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 m截至2026-08,KO收于$87.71,而过去12个月的低点为$65.35,两者距离为34.2%。两条价格线之间的差距,就是该筛选器衡量的指标。当低点线向上移动、收盘价线保持不变时,即使股价没有变化,测得的距离也会缩小。
为什么该筛选器会筛出“接飞刀”的股票
原因在于计算方法。市盈率中的每股收益是滚动数据,每年随公司发布业绩报告更新四次。股价则在市场开市期间每秒变化。如果股价在一个季度内持续下跌,而盈利数据在下一份报告发布前保持不变,那么市盈率仅因股价下跌,就会一周又一周地降低。股价相对于最近提交的盈利数据跌得越远,市盈率看起来就越便宜。下一份业绩报告公布盈利下降后,市盈率会在更低的股价基础上重新升高,而股票从未真正便宜过。这种模式被称为价值陷阱。
周期性行业会呈现相反的情况。汽车制造商或住宅建筑商的滚动市盈率往往在盈利周期顶峰时最低,因为滚动每股收益处于高位;在周期底部时最高。
要衡量这种模式,需要以过去某个日期为基准重建筛选结果,然后跟踪所有当时符合条件的股票。这要求每个ticker都有截至该历史日期的滚动市盈率,而不只是最新市盈率。上述面板背后的stocks_ratios数据行,取的是每个ticker最近日期的数据。本页说明了计算机制,但没有附上无法通过查询展示的后续跟踪数字。无论如何,以一个起始日期构建的单一样本只能算一次观察:如果换一个月份开始,结果就会变化。该列表不对任何股票未来的价格走势作出判断。
低市盈率未反映哪些因素
- 盈利的构成。滚动每股收益包含一次性项目、资产出售和法律和解收益。一季度的异常高盈利,可能在现金已经消失后仍将市盈率压低一年。
- 行业背景。银行、保险公司、汽车制造商和炼油商的结构性市盈率通常低于软件公司。对所有行业使用同一个上限,会让列表集中在少数相同的行业。
- 资产负债表。市盈率不考虑债务。两家公司市盈率相同,但杠杆率差异很大,并不代表股价处于相同水平。
- 亏损。盈利为负的公司没有有意义的市盈率,因此不会出现在这里。未出现在列表中不代表对公司作出结论。
下面两个相邻列表适合与本列表一起查看。本月涨跌幅最大的股票展示过去一个月股价变动最大的股票,波动率最低的股票则展示风险特征相反的股票。
数据说明和定义
- 价格来自
stocks_daily_aggs,每只股票每个交易日对应一行数据。52周低点取过去372个日历日内每日最低价列的最小值。 - 市盈率、市值和平均成交量来自
stocks_ratios,取每个ticker最近的一行数据。 - 如果计算窗口内发生拆股或大额特别分配,原始价格区间会受到影响。过去一年内发生过此类事件的股票,应进一步核查。
- 该筛选器要求滚动市盈率为正,因此亏损公司不会出现在其中。
常见问题
股票接近52周低点意味着什么?
这意味着当前股价接近股票过去一年内的最低交易价格。距离低点等于最新收盘价除以52周低点,再减去一,并以百分比表示。
市盈率多低才算低?
没有固定标准。筛选器通常将滚动市盈率上限设为15;如果要求更严格,也可能设为10。由于不同行业的市盈率差异很大,对整个市场使用同一个上限,通常会让列表集中在少数相同的行业。
低市盈率且接近52周低点的股票值得买入吗?
没有任何筛选器能回答这个问题,本页也不能。两个条件描述的都是过去:市场为已经公布的盈利支付多少价格,以及股价处于自身一年价格区间的什么位置。两者都无法说明未来会发生什么。
什么是价值陷阱?
价值陷阱是指一只股票按滚动市盈率看起来便宜,却仍在持续下跌。每股收益按季度更新,而股价持续变化。因此,股价相对于固定的滚动每股收益下跌时,市盈率会持续降低;下一份业绩报告则可能在更低股价的基础上,将市盈率重新推高。
本页每个面板都附有生成结果的查询语句。打开其中一个查询,调整市盈率上限或距离低点的区间,即可在Strasmore终端中使用您自己的参数重新生成列表。