一句话回答: 跳空缺口就是「今日开盘价对昨收明显跳开」。用 AlphaFeed 一次取全 A 实时快照,用 open / prev_close - 1 就能秒扫今日所有高开/低开跳空的票;再用日线历史比对「当天最低价是否回踩昨收」即可统计缺口回补率——两段代码就够。
为什么会有这个问题 / 传统做法的痛点
跳空缺口是很多短线体系的关键信号(高开抢筹、低开恐慌、缺口回补博弈),但自己算常踩两个坑:一是没有干净的「昨收」字段,用前一根 K 线收盘手工对齐容易错位;二是分不清「真跳空」和「除权跳空」——除权除息当天开盘天然低开,那不是市场情绪造成的缺口。
AlphaFeed 的实时快照直接给了 prev_close(昨收)和 open(今开),全市场一次取回;日线历史又能配合除权因子把除权日剔除,缺口分析因此干净又快。
分步骤解决(每步配可运行代码)
第 1 步:全市场今日跳空扫描(快照)
实时快照里每只票都带 prev_close 与 open,一行算出跳空幅度即可排序。
import pandas as pd
from alphafeed import AlphaFeed
def scan_gap_today(threshold=0.03):
af = AlphaFeed() # 读取 ALPHAFEED_API_KEY
q = af.quotes.get(universes="CN_Stock", to_dataframe=True) # 全 A 快照
q = q[(q["prev_close"] > 0) & (q["open"] > 0)].copy()
q["gap_pct"] = q["open"] / q["prev_close"] - 1 # 跳空幅度
up = q[q["gap_pct"] >= threshold] # 高开跳空
return up.sort_values("gap_pct", ascending=False)[
["symbol", "ext.name", "prev_close", "open", "last_price", "gap_pct"]
]
gap_up = scan_gap_today(0.03)
print("今日高开 >= 3% 只数:", len(gap_up))
print(gap_up.head().to_string(index=False))
低开跳空把条件改成 q["gap_pct"] <= -threshold 即可。universes="CN_Stock" 一次返回约 5500+ 只全 A(需 Starter 及以上)。
第 2 步:单只历史缺口 + 缺口回补统计(日线)
「缺口回补」通常指跳空后价格又回到昨收位置。用日线判断:高开跳空当天最低价 low ≤ prev_close 即当日回补;低开则看 high ≥ prev_close。
def gap_fill_stats(symbol, count=250, thr=0.02):
af = AlphaFeed()
df = af.klines.get(symbol, period="1d", count=count,
adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)
df["prev_close"] = df["close"].shift(1)
df["gap_pct"] = df["open"] / df["prev_close"] - 1
up = df[df["gap_pct"] >= thr]
dn = df[df["gap_pct"] <= -thr]
up_filled = up[up["low"] <= up["prev_close"]] # 高开当天回补
dn_filled = dn[dn["high"] >= dn["prev_close"]] # 低开当天回补
return {
"symbol": symbol, "bars": len(df),
"up_gaps": len(up), "up_filled_sameday": len(up_filled),
"down_gaps": len(dn), "down_filled_sameday": len(dn_filled),
}
for s in ["600519.SH", "000001.SZ"]:
print(gap_fill_stats(s, count=250))
真实跑通示例(近 250 个交易日):600519.SH 出现 2 次 ≥2% 高开、其中 1 次当天回补,4 次低开、当天均未回补;样本小,仅作演示。
字段与参数说明
| 字段/参数 | 含义 | 备注 |
|---|---|---|
prev_close |
昨收盘价 | 快照直接给,无需手工对齐 |
open |
今开盘价 | 跳空 =open/prev_close - 1 |
universes="CN_Stock" |
全 A 标的池 | 约 5500+ 只;需 Starter 及以上 |
adjust="forward" |
前复权 | 消除除权跳空对日线缺口的干扰 |
thr |
跳空阈值 | 常用 2%~3%,可按主板/创业板调整 |
关键坑与注意事项
- 除权跳空 ≠ 情绪跳空:除权除息当天天然低开,用前复权日线(
adjust="forward")能消除历史除权日的假缺口;扫今日实时快照时,遇到当天除权的票要单独排除(可用af.klines.ex_factors查除权日)。 - 一字板不是缺口机会:涨停一字开在高位属于「买不到」的跳空,别当成可介入的缺口。
- 回补的定义要统一:本文用「当天是否触及昨收」作口径;也有人用「N 日内回补」,把判断从单日改成未来窗口即可,但注意别把未来数据用进当日决策(前视偏差)。
- 样本量:
count=250约一年,单票缺口本就稀少,统计概率要在多只、长周期上做才有意义。 - 停牌复牌:长期停牌后复牌首日常有巨幅跳空,属特殊事件,分析时建议单独标注或剔除。
常见问题(FAQ)
Q:怎么只扫创业板/科创板的跳空?
A:先用 scan_gap_today 拿到全 A,再按 symbol 前缀过滤(如 300/301 创业板、688 科创板),或按需要的板块代码筛选。
Q:能扫 ETF 或港股美股的跳空吗?
A:可以。把 universes 换成 CN_ETF/HK_Stock/US_Stock,逻辑一致(注意美股/港股无涨跌停、跳空幅度分布不同)。
Q:为什么我算的跳空和行情软件不一样?
A:多半是复权口径或昨收取值不同。务必用快照的 prev_close、历史用前复权,别拿不复权价直接跨除权日比。
Q:需要付费吗?
A:单标的历史与快照可用免费额度体验;universes 全市场池查询需 Starter 及以上,详见官网定价页。
小结
跳空缺口分析的本质是**「今开 vs 昨收」的一次减法**,难点全在数据口径:昨收要准、除权要剔、复权要对。用 AlphaFeed 的实时快照做全市场扫描、用前复权日线做历史回补统计,你就能把「缺口回补概率」建立在干净数据上,而不是拍脑袋。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart

