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

为什么 ptrade 回测模块中 get_sort_msg 函数无法使用?

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

问题描述

get_sort_msg函数在回测模块中无法使用?

为什么在回测模块中使用get_sort_msg函数获取板块涨幅排名时报错或无法获取数据?

解决方案

问题原因解析

在 ptrade 量化交易平台中,如果您在回测模块调用 get_sort_msg 函数并遇到报错或无法获取数据的情况,根本原因在于该函数的适用场景限制

根据 ptrade 官方 API 文档的说明:

  • get_sort_msg 的使用场景该函数仅在交易模块可用

这意味着 get_sort_msg 依赖于实盘交易环境中的实时行情排序服务,回测引擎并没有提供历史的板块/行业实时排序快照数据,因此在回测(initialize, handle_data, before_trading_start 等回测环境中)调用该接口会直接报错或返回空值。

get_sort_msg 函数简介

交易模块中,get_sort_msg 用于获取指定板块或行业的涨幅排名信息。例如:

# 仅限交易模块使用
sort_data = get_sort_msg(sort_type_grp='XBHS.DY', sort_field_name='preclose_px', sort_type=1, data_count=100)

回测中的替代方案

既然 get_sort_msg 无法在回测中使用,如果您在回测策略中需要根据板块或行业的涨跌幅进行选股或择时,可以通过以下步骤自行计算:

  1. 获取板块/行业指数代码:参考 ptrade 附录中的行业列表或概念板块列表(如农业 A01000.XBHS,沪深300 000300.XBHS 等)。
  2. 获取历史行情数据:使用 get_historyget_price 函数获取这些板块指数的历史 K 线数据。
  3. 自行计算涨跌幅并排序:通过获取的 closepreclose(或前一日的 close)计算涨跌幅,然后使用 Python 的列表或 Pandas 进行排序。

替代方案代码示例(回测可用)

def initialize(context):
    # 定义需要监控的板块指数代码列表(示例)
    g.block_list = ['A01000.XBHS', 'B06000.XBHS', 'C00000.XBHS'] 
    set_universe('600570.SS')

def handle_data(context, data):
    block_returns = {}
    
    # 获取板块指数的历史数据
    # 注意:获取多只标的的数据时,返回的是 DataFrame
    df = get_history(2, '1d', 'close', security_list=g.block_list)
    
    for block in g.block_list:
        try:
            # 提取单个板块的收盘价序列
            close_prices = df.query('code == @block')['close'].values
            if len(close_prices) >= 2:
                # 计算涨跌幅:(今日收盘价 - 昨日收盘价) / 昨日收盘价
                ret = (close_prices[-1] - close_prices[-2]) / close_prices[-2]
                block_returns[block] = ret
        except Exception as e:
            log.error(f"获取 {block} 数据失败: {e}")
            
    # 对涨跌幅进行降序排序
    sorted_blocks = sorted(block_returns.items(), key=lambda x: x[1], reverse=True)
    
    log.info(f"今日板块涨幅排名: {sorted_blocks}")
    
    # 获取涨幅最大的板块
    if sorted_blocks:
        best_block = sorted_blocks[0][0]
        log.info(f"当前最强板块为: {best_block}")
        # 接下来可以使用 get_industry_stocks(best_block) 获取该板块内的成分股进行交易逻辑处理

总结

  • 报错原因get_sort_msg 仅支持实盘交易环境,不支持回测。
  • 解决办法:在回测中,利用 get_history 获取板块指数历史价格,通过 Pandas 或基础 Python 逻辑自行计算涨跌幅并排序。