3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
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
get_market_detail 返回的 DataFrame 包含 hq_type_code、prod_code、prod_name 等列。hq_type_code 是什么,可以使用 df['hq_type_code'].unique() 查看该市场下所有的分类代码。df[df['列名'] == '条件'] 是 pandas 中最基础且高效的过滤方式,能够迅速剔除不需要的行,只保留目标类型的金融产品。通过这种方式,您可以有效地缩小数据范围,提取出策略真正需要的标的,从而提高策略的运行效率。