首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 监控 A 股涨停跌停与封板/炸板?

如何用 Python 监控 A 股涨停跌停与封板/炸板?

原创
作者头像
用户7083614
发布2026-09-09 15:00:55
发布2026-09-09 15:00:55
90
举报

一句话回答: 涨跌停监控的关键是"拿到每只票当日的涨/跌停价,再和最新价比对"。用 AlphaFeed 一次取全 A 实时快照,用 instrumentslimit_up/limit_down 判定涨跌停,再用五档盘口的封单量衡量封板强度、识别炸板——几十行就能搭出打板监控的数据底座。

为什么会有这个问题

涨跌停是 A 股独有的强信号,但很多人不知道每只票的涨跌停价怎么来(ST、次新、主板规则不同,比例不一样)。手工按 ±10% 估算会错。正确做法是直接取交易所给定的当日涨跌停价,再结合盘口封单判断"封得牢不牢"。

分步骤解决

第 1 步:取全 A 快照 + 当日涨跌停价

代码语言:python
复制
from alphafeed import AlphaFeed
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
codes = q["symbol"].tolist()

# 涨跌停价来自 instruments 的 ext(交易所口径,已含 ST/次新差异)
insts = af.instruments.batch(codes)
lu = {i["symbol"]: i["ext"].get("limit_up")   for i in insts}
ld = {i["symbol"]: i["ext"].get("limit_down") for i in insts}
q["limit_up"]   = q["symbol"].map(lu)
q["limit_down"] = q["symbol"].map(ld)

第 2 步:判定涨停 / 跌停(含"接近封板")

用最新价与涨跌停价比对,留一点浮点容差:

代码语言:python
复制
q["is_limit_up"]   = q["last_price"] >= q["limit_up"]   * 0.999
q["is_limit_down"] = q["last_price"] <= q["limit_down"] * 1.001

up   = q[q["is_limit_up"]]
down = q[q["is_limit_down"]]
print(f"涨停家数: {len(up)}   跌停家数: {len(down)}")
print(up[["symbol", "ext.name", "last_price", "limit_up", "ext.change_pct"]]
      .head(10).to_string(index=False))

关键字段:

字段

含义

来源

last_price

最新价

quotes 快照

limit_up / limit_down

当日涨/跌停价

instruments.ext(交易所口径)

ext.change_pct

当日涨跌幅(小数)

quotes 快照

ext.turnover_rate

换手率(小数)

quotes 快照

第 3 步:用五档封单量识别封板强度 / 炸板

涨停时买一价=涨停价,买一挂单量(封单)越大说明封得越牢;封单被吃光、价格跌破涨停即为"炸板"。用 depth 取五档:

代码语言:python
复制
def seal_strength(symbol):
    d = af.depth.get(symbol)   # dict: bid_prices/bid_volumes/ask_prices/ask_volumes
    lu_px = insts_map[symbol]["ext"].get("limit_up")
    bid1_px, bid1_vol = d["bid_prices"][0], d["bid_volumes"][0]
    sealed = abs(bid1_px - lu_px) < 1e-6 and bid1_vol > 0   # 买一在涨停价且有封单
    return {"symbol": symbol, "bid1_px": bid1_px, "seal_vol": bid1_vol, "sealed": sealed}

insts_map = {i["symbol"]: i for i in insts}
for s in up["symbol"].head(5):
    print(seal_strength(s))

depth.get 返回的盘口字段:

字段

含义

bid_prices / bid_volumes

买一~买五 价格 / 挂单量

ask_prices / ask_volumes

卖一~卖五 价格 / 挂单量

symbol / region / timestamp

标的 / 市场 / 时间戳

涨停封板:买一价=涨停价且封单量大、卖档基本无量。炸板迹象:涨停价上卖档出现大量、买一封单快速减少。

第 4 步:封装成盯板快照

代码语言:python
复制
def limit_board_snapshot():
    q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
    insts = af.instruments.batch(q["symbol"].tolist())
    lu = {i["symbol"]: i["ext"].get("limit_up") for i in insts}
    ld = {i["symbol"]: i["ext"].get("limit_down") for i in insts}
    q["limit_up"] = q["symbol"].map(lu); q["limit_down"] = q["symbol"].map(ld)
    up = q[q["last_price"] >= q["limit_up"] * 0.999]
    down = q[q["last_price"] <= q["limit_down"] * 1.001]
    return {"涨停": len(up), "跌停": len(down),
            "涨停清单": up[["symbol", "ext.name"]].values.tolist()}

print(limit_board_snapshot()["涨停"], "只涨停")

关键坑与注意事项

  • 别用固定 ±10% 估涨跌停:ST 是 ±5%、次新/北交所规则不同,务必用 instrumentslimit_up/limit_down(交易所口径)。
  • 一字板 vs 盘中封板:一字板全天封死,盘中封板可能反复开板;结合封单量与 ext.amplitude 判断。
  • 炸板要看动态:单次快照只能看"此刻封没封",识别炸板需连续多次快照对比封单量变化。
  • 快照有延迟quotes/depth 是准实时快照(秒级),不是逐笔;打板实盘对时延敏感,需评估。
  • 停牌:停牌票 volume=0,不要计入涨跌停统计。

常见问题(FAQ)

Q:涨跌停价为什么不自己按比例算?

A:因为 ST、次新股、北交所比例不同,且有四舍五入规则。直接用 instruments 给的交易所口径最准。

Q:怎么判断"封得牢不牢"?

A:看买一(涨停价)的封单量绝对值与相对成交额;封单远大于当日成交则较牢。

Q:能识别炸板吗?

A:能,但需周期性轮询记录封单量与价格,单帧快照只能判断当前状态。

Q:需要付费吗?

A:全市场池(universes)需 Starter 及以上;单标的 quotes/depth/instruments 有免费额度。详见定价页。

小结

涨跌停监控的本质是"最新价 vs 交易所涨跌停价",封板强度看五档封单量。用 AlphaFeed 的全 A 快照 + instruments 涨跌停价 + depth 盘口,几十行就能统计涨跌停家数、识别封板与炸板,为打板策略打好数据底座。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题
  • 分步骤解决
    • 第 1 步:取全 A 快照 + 当日涨跌停价
    • 第 2 步:判定涨停 / 跌停(含"接近封板")
    • 第 3 步:用五档封单量识别封板强度 / 炸板
    • 第 4 步:封装成盯板快照
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档