AlphaFeed Blog

如何用 Python 筛选「缩量企稳」的股票?地量 + 横盘的变盘候选

选股扫描 · 代码验证于 2026-10-05

如何用 Python 筛选「缩量企稳」的股票?

一句话回答: 和放量追涨相反,「缩量企稳」找的是成交极度萎缩(地量)且股价横住不跌(企稳) 的票——抛压衰竭、浮筹清理干净,常是变盘前夜。做法是用 AlphaFeed 的 klines.batch 批量取前复权日线,用「近 5 日均量 ÷ 近 60 日均量」衡量缩量程度(比值越小越缩量),再用「近期振幅」确认价格横住,两条件一起对全市场扫描即可。

为什么会有这个问题 / 传统做法的痛点

多数选股器只盯「放量上涨」,但老手知道「地量见地价」——当一只股票成交量萎缩到长期均量的三四成、价格又不再创新低,说明想卖的基本卖完了,再往下砸盘的动能枯竭。难点在于:

  1. 「缩量」要相对自己:100 万手是放量还是缩量,得和它自己的历史均量比,不能用绝对值。
  2. 光缩量不够,还要「企稳」:缩量下跌是阴跌,缩量横盘才是抛压衰竭。所以要叠加「价格振幅收窄」。
  3. 要全市场扫描:机会分散在几千只票里,必须批量算。

分步骤解决(每步配可运行代码)

第 1 步:定义缩量 + 企稳指标

def dry_up_metrics(k, short=5, long=60):
    k = k.sort_values("trade_date")
    if len(k) < long + 5:
        return None
    vol = k["volume"]
    vol_ratio = vol.tail(short).mean() / vol.tail(long).mean()   # <1 缩量
    close = k["close"]
    amp = close.tail(short).max() / close.tail(short).min() - 1  # 近 short 日振幅
    return {"vol_ratio": float(vol_ratio), "amp": float(amp)}

第 2 步:单股体检

from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=120,
                   adjust="forward", to_dataframe=True)
print(dry_up_metrics(df))

实测(tools/verify_new_2026-10-05.py,SDK 0.1.4):贵州茅台当前 量比(短/长) = 0.831、近期振幅 = 1.86%——价格够稳但缩量不够极致(0.831 > 0.6),不算典型地量候选。

第 3 步:全市场批量扫描

q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
codes = q["symbol"].tolist()
hits = []
CHUNK = 300
for i in range(0, len(codes), CHUNK):
    data = af.klines.batch(codes[i:i+CHUNK], period="1d", count=120,
                           adjust="forward", to_dataframe=True)
    for sym, k in data.items():
        m = dry_up_metrics(k)
        if m and m["vol_ratio"] < 0.6 and m["amp"] < 0.05:   # 缩量 + 企稳
            hits.append((sym, round(m["vol_ratio"], 3), round(m["amp"], 4)))

hits.sort(key=lambda x: x[1])     # 按缩量程度排序,越缩量越靠前
print("候选数:", len(hits), hits[:10])

实测扫描前 600 只:命中 117 只缩量企稳候选,最缩量样例如 920925.BJ(量比 0.239)、301158.SZ(0.25)、002828.SZ(0.261,振幅仅 1.12%)。

参数与字段说明

参数/字段含义备注
adjust="forward"前复权必须,除权缺口会假性放大振幅
short=5近期窗口衡量当前量能/振幅
long=60长期基准均量参照(约一季度)
vol_ratio<0.6缩量阈值越小越地量,可调
amp<0.05企稳阈值近 5 日振幅 <5%
klines.batch批量取数全市场扫描必备

关键坑与注意事项

常见问题(FAQ)

Q:和「放量选股」是不是相反? A:是互补的两极。放量找的是「资金正在进场」,缩量企稳找的是「抛压已经枯竭、等待变盘」,适用阶段不同。

Q:量比用成交量还是成交额? A:本文用成交量(volume)。若担心价格变动影响,可改用成交额(amount)做比值,逻辑一致。

Q:需要付费吗? A:全市场扫描依赖 universes 标的池 + klines.batch 批量取数,属 Starter 及以上能力;单只/少量股票可用免费额度先验证逻辑。详见官网定价页。

小结

缩量企稳的本质是「用相对自身的均量比值找地量、用近期振幅确认横盘」,再靠 klines.batch 全市场扫出候选池。有了 AlphaFeed 的前复权批量数据,十几行就能落地——但记住它只是「抛压衰竭」的中性候选,真正的变盘还要等后续放量确认。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。