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

ptrade 平台如何筛选和遍历 get_market_list 返回的市场数据?

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

问题描述

获取到的市场列表是pandas.DataFrame类型,如何正确筛选或遍历特定市场的数据?

/

解决方案

在 ptrade 量化交易平台中,调用 get_market_list() 接口会返回一个包含当前所有市场列表的 pandas.DataFrame 对象。该 DataFrame 主要包含两个字段:finance_mic(市场编码)和 finance_name(市场名称)。

由于返回的是标准的 pandas DataFrame,你可以利用 pandas 强大的数据处理能力来进行筛选和遍历。以下是具体的操作方法和代码示例:

1. 了解返回的数据结构

首先,get_market_list() 返回的数据结构大致如下:

index finance_mic finance_name
67 XHKG-SS 沪港通
69 XSGE 上海期货交易所
70 XSHO 上海个股期权

2. 筛选特定市场的数据

如果你只想查找特定的市场(例如查找市场编码为 XHKG-SS 的沪港通市场),可以使用 pandas 的条件筛选功能:

import pandas as pd

def before_trading_start(context, data):
    # 获取市场列表
    market_df = get_market_list()
    
    # 筛选 finance_mic 为 'XHKG-SS' 的行
    target_market = market_df[market_df['finance_mic'] == 'XHKG-SS']
    
    if not target_market.empty:
        # 获取对应的市场名称
        market_name = target_market.iloc[0]['finance_name']
        log.info(f"找到目标市场: 编码 XHKG-SS, 名称 {market_name}")
    else:
        log.info("未找到指定的市场编码")

3. 遍历所有市场数据

如果你需要遍历整个市场列表,提取所有的市场编码和名称,推荐使用 DataFrame 的 iterrows()itertuples() 方法:

def before_trading_start(context, data):
    # 获取市场列表
    market_df = get_market_list()
    
    log.info("开始遍历市场列表:")
    
    # 使用 iterrows() 遍历
    for index, row in market_df.iterrows():
        mic = row['finance_mic']
        name = row['finance_name']
        
        # 假设我们只对包含 '上海' 的市场感兴趣
        if '上海' in str(name):
            log.info(f"索引: {index}, 市场编码: {mic}, 市场名称: {name}")

4. 完整策略示例

请注意,get_market_list() 接口在回测和交易中仅限在 before_trading_startafter_trading_end 事件中使用。以下是一个完整的策略框架示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def before_trading_start(context, data):
    # 获取并处理市场列表
    market_df = get_market_list()
    
    # 提取所有的市场编码为一个 list
    all_mics = market_df['finance_mic'].tolist()
    log.info(f"当前系统支持 {len(all_mics)} 个市场")
    
    # 筛选特定市场
    sh_futures = market_df[market_df['finance_mic'] == 'XSGE']
    if not sh_futures.empty:
        log.info(f"上海期货交易所存在,名称为: {sh_futures.iloc[0]['finance_name']}")

def handle_data(context, data):
    pass

总结与建议

  • 利用 Pandas 特性:由于返回的是 DataFrame,你可以使用 query(), loc[], iloc[] 等所有 pandas 原生方法进行高效的数据切片。
  • 注意调用时机:务必遵守 ptrade API 规范,仅在盘前 (before_trading_start) 或盘后 (after_trading_end) 调用此接口,避免在 handle_datatick_data 中调用导致报错。