问题描述
我想获取A股的代码列表,调用get_index_stocks('000002.XSHG'),发现只有1439个股票代码,而通达信有3000多个啊.何解?
解决方案
为什么 get_index_stocks('000002.XSHG') 获取的股票数量不够?
您调用的 get_index_stocks('000002.XSHG') 获取的是上证A股指数的成分股。顾名思义,它只包含了在上海证券交易所上市的A股股票(代码以600、601、603等开头)。
而中国A股市场除了上海证券交易所,还有深圳证券交易所(包含深市主板、中小板、创业板,代码以000、002、300等开头)以及科创板等。因此,仅获取上证A股指数的成分股,自然会漏掉深市和科创板的几千只股票。
如何正确获取全市场A股的所有股票代码?
在 JoinQuant(聚宽)平台上,获取全市场所有股票信息的正确且最直接的方法是使用 get_all_securities API。
接口说明
get_all_securities(types=['stock'], date=None)
- types: 传入
['stock']表示只获取股票类型的数据,过滤掉基金、指数、期货等。 - date: 可以指定日期,获取该日期还在上市的股票。如果不传,默认获取所有日期的股票信息(建议指定日期,如
context.current_dt或具体日期字符串,以避免获取到未来才上市的股票)。
该函数返回一个 pandas.DataFrame,其行索引(index)就是股票代码。
Python 代码示例
# 导入聚宽数据接口
from jqdata import *
def initialize(context):
# 获取当前日期下,所有上市的A股股票信息(DataFrame格式)
all_stocks_df = get_all_securities(types=['stock'], date=context.current_dt)
# 提取 DataFrame 的 index,并转换为 list,这就是所有股票代码的列表
all_stocks_list = list(all_stocks_df.index)
# 打印查看股票总数
log.info("当前全市场A股股票总数为: %d 只" % len(all_stocks_list))
# 打印前10个股票代码看看
log.info("前10只股票代码: %s" % all_stocks_list[:10])
总结
- 错误做法:使用特定指数(如上证A股指数)获取全市场股票,会导致深市等其他板块股票缺失。
- 正确做法:使用
get_all_securities(['stock'])接口,提取其返回的 DataFrame 的index即可获得完整的A股代码列表。