问题描述
解决方案
根据 JoinQuant 聚宽官方 API 文档,目前聚宽的数据接口中没有直接提供标明每个 ETF 跟踪具体哪个指数的字段或直接的映射关系 API。
例如,通过 get_security_info(code) 获取单个 ETF 信息,或者通过 get_all_securities(['etf']) 获取 ETF 列表时,返回的字段主要包括:display_name(中文名称)、name(缩写简称)、start_date(上市日期)、end_date(退市日期)和 type(类型),其中并不包含“跟踪标的指数代码”这一属性。
替代解决方案
虽然没有直接的 API 字段,但你可以通过以下方式在聚宽平台上进行相关研究:
1. 通过名称进行模糊匹配
ETF 的中文名称(display_name)通常会包含其跟踪的指数名称。你可以分别获取 ETF 列表和指数列表,通过名称进行文本匹配来建立映射关系。
# 获取所有 ETF 列表
etf_df = get_all_securities(['etf'])
print(etf_df.head())
# 获取所有指数列表
index_df = get_all_securities(['index'])
print(index_df.head())
2. 自行维护映射表
对于常用的 ETF(如沪深300ETF、中证500ETF、创业板ETF等),建议在策略的 initialize 函数中,或者通过上传本地的 CSV/JSON 文件(使用 read_file API 读取),自行维护一个 ETF 代码到指数代码的字典映射表。例如:
def initialize(context):
# 自行维护的 ETF 与 跟踪指数 映射表
g.etf_index_map = {
'510300.XSHG': '000300.XSHG', # 华泰柏瑞沪深300ETF -> 沪深300
'510500.XSHG': '000905.XSHG', # 南方中证500ETF -> 中证500
'159915.XSHE': '399006.XSHE' # 易方达创业板ETF -> 创业板指
}
如果你需要极其精确的 ETF 跟踪标的映射数据,可能需要借助外部的金融数据终端(如 Wind、Tushare 等)导出映射表后,再导入到聚宽的研究环境中使用。