需要获取所有指数产品,应该如何根据hq_type_code字段筛选数据?
/
问题描述
解决方案
在 ptrade 量化交易平台中,如果您需要获取所有的指数产品,可以通过调用 get_market_detail 接口获取特定市场的详细信息,然后利用 Pandas 的数据处理功能,根据 hq_type_code 字段进行筛选。
根据 ptrade API 文档,指数产品的 hq_type_code 通常标识为 'MRI'。
实现步骤
- 获取市场详细信息:使用
get_market_detail(finance_mic)接口获取指定市场(如上海市场'XSHG'或深圳市场'XSHE')的所有产品信息。该接口返回一个 Pandas DataFrame。 - 筛选指数产品:对返回的 DataFrame 进行条件过滤,提取
hq_type_code == 'MRI'的行。
Python 代码示例
以下是一个完整的策略示例,展示了如何在盘前阶段获取并筛选出上海市场的指数产品:
def initialize(context):
# 初始化时设置一个默认股票池
g.security = '600570.SS'
set_universe(g.security)
def before_trading_start(context, data):
# 获取上海证券交易所(XSHG)的市场详细信息
# 注意:get_market_detail 仅限在 before_trading_start 和 after_trading_end 中使用
market_df = get_market_detail('XSHG')
if market_df is not None and not market_df.empty:
# 根据 hq_type_code 字段筛选指数产品('MRI' 代表指数)
index_products = market_df[market_df['hq_type_code'] == 'MRI']
log.info("成功获取上海市场指数产品,共 {} 只。", len(index_products))
# 打印前5只指数产品的信息
log.info("\n{}", index_products.head())
# 如果需要提取所有的指数代码列表
index_codes = index_products['prod_code'].tolist()
# log.info("指数代码列表: {}", index_codes)
else:
log.error("获取市场详细信息失败")
def handle_data(context, data):
pass
注意事项
- 接口调用限制:
get_market_detail接口在回测和交易模块中,仅限在before_trading_start和after_trading_end事件函数中使用,请勿在handle_data或tick_data中调用。 - 市场编码 (finance_mic):上海市场编码为
'XSHG',深圳市场编码为'XSHE'。您可以通过调用get_market_list()接口查看所有支持的市场编码。 - 指数代码尾缀:在 ptrade 中,如果您要在其他行情接口(如
get_history或get_price)中使用指数代码,通常需要加上.XBHS尾缀(例如沪深300指数为'000300.XBHS')。