问题描述
解决方案
在聚宽(JoinQuant)平台中,获取某个特定日期所有上市股票列表的核心函数是 get_all_securities。
以下是具体的实现方法和代码示例:
获取指定日期上市股票列表
1. 核心函数
get_all_securities(types=[], date=None)
参数说明
types: 列表类型。传入['stock']表示仅获取股票信息(不包含基金、期货等)。date: 字符串或 datetime 对象。指定查询的日期(例如'2023-01-04')。如果不填,默认返回当前平台最新日期的信息。指定该参数后,函数会返回在该日期还在上市(未退市)的所有股票。
2. 代码示例
以下代码展示了如何获取 2023-01-04 当日所有上市股票的代码列表:
# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 设定查询日期
query_date = '2023-01-04'
# 获取该日期所有上市股票的详细信息(返回的是 DataFrame)
# types=['stock'] 过滤只取股票
all_stocks_df = get_all_securities(types=['stock'], date=query_date)
# 获取股票代码列表 (DataFrame 的 index 即为股票代码)
stock_list = list(all_stocks_df.index)
# 打印结果
print(f"日期 {query_date} 的上市股票数量: {len(stock_list)}")
print("前5只股票代码:", stock_list[:5])
# 如果需要查看详细信息(如中文名称、上市时间等)
print("前5行详细信息:")
print(all_stocks_df.head())
# 模拟运行需要一个空的 handle_data
def handle_data(context, data):
pass
3. 返回值说明
get_all_securities 返回的是一个 pandas.DataFrame,其索引(Index)是股票代码(如 000001.XSHE),包含以下列:
- display_name: 中文名称(如“平安银行”)。
- name: 缩写简称(如“PAYH”)。
- start_date: 上市日期。
- end_date: 退市日期(如果没有退市,通常显示为
2200-01-01)。 - type: 证券类型(此处为
stock)。
Q&A
Q: get_all_securities 获取的列表包含当天停牌的股票吗?
A: 包含。该函数返回的是所有“在册上市”的股票。只要该股票在指定日期未退市,即使当天处于停牌状态,也会包含在列表中。如果需要过滤停牌股票,需要结合 get_price 或 get_current_data (回测中) 的 paused 属性进行二次筛选。
Q: 如果我不传 date 参数会怎样?
A: 如果不传 date 参数,函数将返回平台数据库中所有曾经上市过的股票信息(包括已经退市的股票)。为了避免获取到已退市的股票干扰策略,建议务必传入具体的 date。
Q: 如何同时获取股票和ETF基金列表?
A: 修改 types 参数即可,例如:get_all_securities(types=['stock', 'etf'], date='2023-01-04')。