🚀 AI 一键生成 ptrade 策略代码
立即体验

ptrade 平台 get_market_detail 接口筛选特定金融产品指南

ptrade | 发布时间: 2026/6/4
以下内容由 EasyQuant 生成。

问题描述

传入美国市场代码'A'后返回数据量很大,包含大量不需要的产品信息,如何筛选特定类型的金融产品?

/

解决方案

如何筛选 get_market_detail 返回的特定类型金融产品

在 ptrade 平台中,get_market_detail(finance_mic) 接口返回的是一个标准的 pandas.DataFrame 对象。当您传入某些包含大量产品的市场代码(例如美国市场代码 'A')时,返回的数据集确实会非常庞大。

为了筛选出特定类型的金融产品,您可以直接利用 pandas 强大的数据过滤功能,针对返回结果中的 hq_type_code(类型代码)字段进行条件筛选。

筛选步骤与代码示例

以下是一个在 before_trading_start 中获取市场详情并进行筛选的示例:

import pandas as pd

def initialize(context):
    # 初始化策略
    pass

def before_trading_start(context, data):
    # 1. 获取指定市场(例如 'A')的详细信息
    market_detail_df = get_market_detail('A')
    
    # 确保返回的数据不为空
    if market_detail_df is not None and not market_detail_df.empty:
        # 打印所有可用的类型代码,方便您确认需要筛选的目标类型
        unique_types = market_detail_df['hq_type_code'].unique()
        log.info(f"该市场包含的类型代码有: {unique_types}")
        
        # 2. 设定您需要筛选的目标类型代码
        # 假设您只想筛选出类型代码为 'MRI' 的产品(具体代码请参考实际打印结果)
        target_type = 'MRI' 
        
        # 3. 使用 pandas 进行条件筛选
        filtered_df = market_detail_df[market_detail_df['hq_type_code'] == target_type]
        
        log.info(f"筛选出类型为 '{target_type}' 的产品数量: {len(filtered_df)}")
        log.info("筛选后的前5条数据:\n%s" % filtered_df.head())
        
        # 4. (可选) 提取筛选后的产品代码列表供后续使用
        target_prod_codes = filtered_df['prod_code'].tolist()
        # log.info(f"目标产品代码列表前10个: {target_prod_codes[:10]}")
    else:
        log.warning("未获取到市场详情数据。")

def handle_data(context, data):
    pass

核心思路解析

  1. 获取 DataFrameget_market_detail 返回的 DataFrame 包含 hq_type_codeprod_codeprod_name 等列。
  2. 探查类型:如果不确定目标产品的 hq_type_code 是什么,可以使用 df['hq_type_code'].unique() 查看该市场下所有的分类代码。
  3. 布尔索引筛选:使用 df[df['列名'] == '条件'] 是 pandas 中最基础且高效的过滤方式,能够迅速剔除不需要的行,只保留目标类型的金融产品。

通过这种方式,您可以有效地缩小数据范围,提取出策略真正需要的标的,从而提高策略的运行效率。