🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant量化平台:如何高效获取指定交易日的所有涨停股票?

joinquant | 发布时间: 2026/6/3
以下内容由 EasyQuant 生成。

问题描述

请问如何获取每日的所有涨停股票数据?

我看行情接口都需要传入股票代码,获取相关股票的行情数据。

那如何获取每日的涨停股票代码呢?

例如:传入日期:20200603,获取该交易日所有涨停的股票代码。

谢谢~~

ps:把全市场股票作为一个list传到security参数里面去的方式感觉不是很高效,所以想问下是否有别的简单点的接口。

解决方案

在 JoinQuant (聚宽) 平台上,目前确实没有直接命名为 get_limit_up_stocks 这样一键返回涨停股票列表的独立接口。

但是,您提到的**“把全市场股票作为一个list传到security参数里面去”**,在 JoinQuant 的底层架构中,恰恰是最推荐且最高效的做法。因为 get_price 接口在底层做了高度优化,一次性传入全市场 4000 多只股票代码获取单日数据,底层是通过 Pandas 的向量化操作和批量数据库查询实现的,耗时通常在零点几秒级别,远比用 for 循环单只股票去查要快得多。

以下是高效获取指定日期全市场涨停股票的具体实现方法:

高效获取涨停股票的 Python 源码

核心思路:获取全市场股票 -> 批量获取 close (收盘价)、high_limit (涨停价) 和 paused (停牌状态) -> 利用 Pandas 向量化筛选 close == high_limit 且未停牌的股票。

from jqdata import *
import pandas as pd

def get_limit_up_stocks(check_date):
    """
    获取指定日期的所有涨停股票列表
    :param check_date: 字符串日期,例如 '2020-06-03'
    :return: 涨停股票代码的 list
    """
    # 1. 获取指定日期还在上市的所有A股代码
    all_stocks = list(get_all_securities(types=['stock'], date=check_date).index)
    
    # 2. 批量获取这些股票在指定日期的收盘价、涨停价和停牌状态
    # 强烈建议设置 panel=False,直接返回 DataFrame,处理速度极快
    df = get_price(all_stocks, 
                   end_date=check_date, 
                   count=1, 
                   fields=['close', 'high_limit', 'paused'], 
                   panel=False)
    
    # 3. 剔除停牌的股票 (paused == 1 表示停牌)
    df = df[df['paused'] == 0]
    
    # 4. 筛选收盘价等于涨停价的股票
    # 考虑到浮点数精度问题,严谨起见可以判断差值极小,但在聚宽数据中直接用 == 通常也是可行的
    # 这里使用 abs(close - high_limit) < 0.01 来避免浮点数精度坑
    limit_up_df = df[abs(df['close'] - df['high_limit']) < 1e-4]
    
    # 5. 提取股票代码并返回
    limit_up_stocks = list(limit_up_df['code'])
    
    return limit_up_stocks

# --- 测试代码 ---
# 在研究环境或回测中调用
date_to_check = '2020-06-03'
limit_up_list = get_limit_up_stocks(date_to_check)
print(f"{date_to_check} 涨停股票数量: {len(limit_up_list)} 只")
print(f"前10只涨停股: {limit_up_list[:10]}")

为什么这种方式是高效的?

  1. 减少网络 I/O 次数:将全市场股票打包成一个 list 传给 get_price,只发起一次数据请求。如果用循环,会发起 4000 多次请求,那才是真正的低效。
  2. Pandas 向量化计算df['close'] == df['high_limit'] 这种操作在 Pandas 底层是 C 语言级别的数组运算,处理几千行数据连 1 毫秒都用不到。
  3. panel=False 参数:在 get_price 中指定 panel=False,API 会直接返回一个扁平化的 DataFrame,省去了构建复杂 Panel 结构的时间,内存占用更小,速度更快。

补充说明

  • 盘中获取:如果您是在回测的盘中(例如 handle_data 中)想获取当前时刻的涨停股,可以使用 get_current_data() 接口,遍历 context.universe,判断 current_data[stock].last_price == current_data[stock].high_limit
  • ST股票:如果您想剔除 ST 股票,可以在 get_all_securities 之后,结合 get_extras('is_st', ...) 接口进一步过滤。