🚀 AI 一键生成 joinquant 策略代码

如何使用 get_security_info 查询股票的上市与退市日期?

joinquant | 发布时间: 2025/12/16
以下内容由 EasyQuant 生成。

问题描述

如何查询一只股票的上市日期是什么时候?

解决方案

在 JoinQuant(聚宽)平台中,查询一只股票的上市日期主要使用 get_security_info 函数。

核心方法:get_security_info

该函数用于获取单个标的(股票、基金、指数等)的详细信息,返回一个对象,其中包含 start_date 属性,即为上市日期。

代码示例

# -*- coding: utf-8 -*-

def initialize(context):
    # 设定要查询的股票代码,例如:平安银行
    code = '000001.XSHE'
    
    # 获取标的信息对象
    sec_info = get_security_info(code)
    
    # 打印上市日期
    # start_date 是一个 datetime.date 对象
    print(f"股票 {code} 的中文名称: {sec_info.display_name}")
    print(f"股票 {code} 的上市日期: {sec_info.start_date}")

    # 如果需要判断是否已上市超过一定天数(例如判断是否为次新股)
    # 可以结合 context.current_dt 使用
    days_listed = (context.current_dt.date() - sec_info.start_date).days
    print(f"截至当前回测时间,已上市天数: {days_listed} 天")

def handle_data(context, data):
    pass

替代方法:get_all_securities

如果你需要批量查询多只股票的上市日期,或者筛选特定时间段上市的股票,可以使用 get_all_securities 函数。该函数返回一个 pandas DataFrame,其中包含 start_date 列。

代码示例

# 获取所有股票的信息
all_stocks = get_all_securities(types=['stock'])

# 查看平安银行(000001.XSHE)的上市日期
listing_date = all_stocks.loc['000001.XSHE']['start_date']
print(listing_date)

# 筛选出 2023年1月1日之后上市的股票
import datetime
new_stocks = all_stocks[all_stocks['start_date'] > datetime.date(2023, 1, 1)]
print(new_stocks.head())

Q&A

Q: get_security_info 返回的 start_date 是什么数据类型?
A: 返回的是 Python 标准库中的 datetime.date 对象(例如 2005-01-04),可以直接用于日期计算或比较。

Q: 如果查询的股票代码不存在或已退市,会发生什么?
A: 如果代码格式错误或不存在,get_security_info 可能会返回 None 或报错。对于已退市的股票,只要在平台数据库中存在(通常包含2005年以后的退市股票),依然可以查询到其 start_dateend_date(退市日期)。

Q: 如何查询股票的退市日期?
A: 同样使用 get_security_info 函数,访问其 end_date 属性。如果没有退市,end_date 通常显示为 2200-01-01

Q: get_all_securitiesget_security_info 哪个效率更高?
A: 如果只查询单只或极少数股票,使用 get_security_info 效率更高且代码简洁。如果需要对全市场或大量股票进行筛选(例如过滤掉上市不满一年的股票),使用 get_all_securities 获取 DataFrame 后进行向量化操作效率更高。