请教如何获取某一时间段上市的股票信息
请教如何获取某一时间段上市的股票信息?比如获取2022年1月上市的股票代码?
问题描述
解决方案
在 JoinQuant (聚宽) 平台上,要获取某一特定时间段(例如2022年1月)上市的股票信息,可以通过调用 get_all_securities API 来实现。
核心思路
- 使用
get_all_securities(types=['stock'])获取平台上所有的股票基本信息,该函数会返回一个 pandas DataFrame。 - 返回的 DataFrame 中包含
start_date(上市日期)列。 - 利用 pandas 的日期筛选功能,过滤出
start_date在目标时间段内的股票。 - 提取筛选后 DataFrame 的 index,即为所需的股票代码列表。
Python 代码示例
以下是在 JoinQuant 研究环境或策略中获取 2022年1月 上市股票代码的完整代码:
import pandas as pd
from jqdata import *
def get_newly_listed_stocks(start_date_str, end_date_str):
"""
获取指定时间段内上市的股票代码列表
:param start_date_str: 起始日期,如 '2022-01-01'
:param end_date_str: 结束日期,如 '2022-01-31'
:return: 股票代码列表
"""
# 获取所有股票信息
df_all_stocks = get_all_securities(types=['stock'])
# 确保 start_date 列是 datetime 类型以便于比较
df_all_stocks['start_date'] = pd.to_datetime(df_all_stocks['start_date'])
# 转换输入的日期字符串为 datetime 对象
target_start = pd.to_datetime(start_date_str)
target_end = pd.to_datetime(end_date_str)
# 筛选上市日期在目标时间段内的股票
mask = (df_all_stocks['start_date'] >= target_start) & (df_all_stocks['start_date'] <= target_end)
new_stocks_df = df_all_stocks[mask]
# 提取股票代码(DataFrame 的 index)
new_stock_codes = list(new_stocks_df.index)
return new_stock_codes
# 测试:获取 2022年1月 上市的股票
if __name__ == '__main__':
stocks_2022_01 = get_newly_listed_stocks('2022-01-01', '2022-01-31')
print(f"2022年1月共上市了 {len(stocks_2022_01)} 只股票。")
print("股票代码列表:", stocks_2022_01)
API 解析
get_all_securities(types=[], date=None):types:传入['stock']表示只获取股票信息,排除基金、指数等。- 返回值:一个 DataFrame,包含
display_name(中文名),name(缩写),start_date(上市日期),end_date(退市日期),type(类型) 等字段。
通过这种方式,您可以灵活地修改 start_date_str 和 end_date_str 参数,获取历史上任意时间段内首发上市的新股列表,非常适合用于次新股策略的股票池构建。