问题描述
/
解决方案
在 ptrade 量化交易平台中,调用 get_market_detail(finance_mic) 接口可以获取指定市场的详细信息。该接口返回一个 pandas.DataFrame 对象,其中包含了您提到的四个核心字段。以下是它们的具体含义及使用方法:
字段含义解析
-
prod_code(产品代码)- 含义:代表该市场内具体交易标的或指数的代码(字符串类型
str)。例如,上证指数的代码为'000001'。 - 作用:用于唯一标识一个交易品种,是后续调用行情接口(如
get_price、get_history)或交易接口(如order)的基础参数。
- 含义:代表该市场内具体交易标的或指数的代码(字符串类型
-
prod_name(产品名称)- 含义:代表该产品代码对应的中文名称(字符串类型
str)。例如,'000001'对应的名称为'上证指数'。 - 作用:主要用于日志记录、策略监控界面的展示,帮助开发者直观地识别标的,增强代码的可读性。
- 含义:代表该产品代码对应的中文名称(字符串类型
-
hq_type_code(类型代码)- 含义:表示该产品的行情类型或分类(字符串类型
str)。例如,'MRI'通常代表某种特定的指数或市场分类。 - 作用:可用于在庞大的市场列表中筛选出特定类型的标的。例如,您可以根据此字段过滤出所有的指数、股票或基金,从而构建特定类型的股票池。
- 含义:表示该产品的行情类型或分类(字符串类型
-
trade_time_rule(时间规则)- 含义:表示该产品遵循的交易时间规则编号(整数类型
numpy.int64)。例如,0可能代表标准的 A 股交易时间(9:30-11:30, 13:00-15:00)。 - 作用:对于跨市场或交易时间不统一的品种(如期货、港股通等),此字段非常关键。策略可以根据该规则动态调整定时任务(
run_daily)的触发时间,避免在非交易时段请求行情或下单。
- 含义:表示该产品遵循的交易时间规则编号(整数类型
如何使用这些信息?
这些信息通常在策略的初始化阶段(initialize)或盘前准备阶段(before_trading_start)使用,用于动态构建股票池或进行市场环境的校验。
实战代码示例
以下示例展示了如何在盘前获取上海证券交易所(XSHG)的市场详情,并筛选出特定的指数代码:
def initialize(context):
# 初始化时设置一个默认标的
g.security = '600570.SS'
set_universe(g.security)
def before_trading_start(context, data):
# 获取上海证券交易所(市场编码为 'XSHG')的详细信息
# 注意:该接口仅限在 before_trading_start 和 after_trading_end 中使用
market_detail_df = get_market_detail('XSHG')
if market_detail_df is not None and not market_detail_df.empty:
# 打印前几行数据查看结构
log.info("上海市场详细信息前3行:\n%s" % market_detail_df.head(3))
# 示例:筛选出类型代码为 'MRI' 的所有产品代码
mri_products = market_detail_df[market_detail_df['hq_type_code'] == 'MRI']
# 提取产品代码和名称,转换为字典方便后续使用
mri_dict = dict(zip(mri_products['prod_code'], mri_products['prod_name']))
log.info("筛选出的 MRI 类型产品:\n%s" % mri_dict)
# 假设我们需要监控上证指数(000001),可以先检查其是否存在于该市场中
if '000001' in mri_dict:
log.info("成功找到标的:%s" % mri_dict['000001'])
# 后续可以结合 get_history 获取该指数的行情数据作为大盘参考
def handle_data(context, data):
pass
总结
通过 get_market_detail 获取的这四个字段,能够帮助量化开发者全面了解特定市场内的标的构成。合理利用 hq_type_code 进行分类筛选,利用 prod_code 进行行情订阅,结合 trade_time_rule 规避时间错位风险,是编写健壮的跨品种/跨市场策略的重要基础。