AlphaFeed Blog

如何用 Python 筛选连续上涨(N 连阳)的股票?(全市场连阳/连阴统计)

选股扫描 · 代码验证于 2026-09-27

如何用 Python 筛选连续上涨(N 连阳)的股票?

一句话回答: 「N 连阳」= 连续 N 天收阳线(收盘价 > 开盘价)。用 AlphaFeed 取全市场标的池 + klines.batch 批量前复权日线,逐只判定每日是否阳线、再数「当前连续为真」的天数,就能扫出全市场连阳强势股;把条件反过来即可统计连阴。

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

连续收阳往往代表资金持续推动、走势凌厉,是短线强势股的直观特征。难点在于:① 要批量判断全市场、而不是一只只看;② 分清「连阳」(收盘>开盘)和「连涨」(收盘>昨收)——两者定义不同、结果不同;③ 别被除权跳空误判。用批量取数 + 明确定义就能干净解决。

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

第 1 步:取前复权日线,判定阳线

from alphafeed import AlphaFeed
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

df = af.klines.get("600519.SH", period="1d", count=60,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

df["is_yang"] = df["close"] > df["open"]     # 阳线:收盘 > 开盘
df["is_up"] = df["close"] > df["close"].shift()   # 连涨口径:收盘 > 昨收

用前复权价(adjust="forward")避免除权日的伪阴阳/伪涨跌。

第 2 步:统计「当前连阳天数」

def current_streak(flags) -> int:
    n = 0
    for v in reversed(list(flags)):
        if bool(v):
            n += 1
        else:
            break
    return n

print("当前连阳天数:", current_streak(df["is_yang"]))
print("当前连涨天数:", current_streak(df["is_up"]))
口径定义说明
连阳收盘 > 开盘(阳线)K 线红/阳,日内收涨
连涨收盘 > 昨日收盘相对昨收上涨
current_streak从最后一天往回数连续为真断一天即归零

第 3 步:全市场扫描 N 连阳

N = 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=10,
                           adjust="forward", to_dataframe=True)
    for sym, k in data.items():
        if k is None or len(k) < N:
            continue
        k = k.sort_values("trade_date")
        streak = current_streak(k["close"] > k["open"])
        if streak >= N:
            hits.append((sym, streak))

hits.sort(key=lambda x: x[1], reverse=True)
print(f"{N} 连阳个股数:", len(hits), " 样例:", hits[:10])

第 4 步:加量能过滤(连阳且逐日放量更强)

def yang_with_volume(k, n=3):
    k = k.sort_values("trade_date")
    yang = current_streak(k["close"] > k["open"])
    vol_up = k["volume"].iloc[-1] > k["volume"].iloc[-n:].mean()  # 末日量高于近n日均量
    return yang >= n and vol_up

关键坑与注意事项

常见问题(FAQ)

Q:连阳和连涨有什么区别? A:连阳=连续阳线(收盘>开盘);连涨=连续相对昨收上涨(收盘>昨收)。一根低开高走但仍低于昨收的 K 线是「阳线但下跌」,两口径会不同。

Q:怎么统计连阴(连续下跌)? A:把判定条件反过来:close < open(连阴)或 close < 昨收(连跌),再用同样的 current_streak。

Q:为什么要前复权? A:除权日未复权会出现价格断层,可能把正常交易日误判成阴/阳或跳空,前复权可消除。

Q:需要付费吗? A:单只/少量有免费额度;全市场标的池扫描(universes + klines.batch)需 Starter 及以上。详见定价页。

小结

筛连续上涨股的关键是先明确口径(连阳=收>开、连涨=收>昨收),再用 AlphaFeed 批量取前复权日线、逐只数「当前连续为真」的天数,就能扫出全市场 N 连阳强势股。配合量能、涨幅过滤能提升含金量;记得用前复权价、跳过停牌新股、控制请求量。

相关链接:


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