🚀 AI 一键生成 ptrade 策略代码

ptrade回测报错:当前频率不支持field指定字段:high_limit 怎么解决?

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

问题描述

回测提示报错。

回测提示报错: 当前频率不支持field指定字段:high_limit

解决方案

报错原因分析

在 ptrade 量化平台中,当您使用 get_historyget_price 接口获取历史行情数据时,如果遇到报错 “当前频率不支持field指定字段:high_limit”,通常是因为您在**非日线频率(如分钟线 1m、5m 等)**下请求了 high_limit(涨停价)或 low_limit(跌停价)字段。

根据 ptrade 官方 API 文档规定:

  • high_limit (涨停价) 和 low_limit (跌停价) 仅在日线(1d / daily)级别返回
  • is_open (是否开盘) 和 preclose (昨收盘价) 等字段同样仅限日线返回。

解决方案

要解决此问题,您需要根据策略的实际需求调整代码逻辑。以下是几种常见的解决场景:

方案一:将获取频率改为日线(1d)

如果您只是需要获取某只股票的涨停价,请确保将 frequency 参数设置为 '1d'

正确示例:

def handle_data(context, data):
    # 正确:在日线频率下获取涨停价
    df = get_history(1, frequency='1d', field=['close', 'high_limit'], security_list='600570.SS')
    log.info("今日涨停价为:%s" % df['high_limit'][-1])

方案二:在分钟策略中获取当日涨停价

如果您的策略是分钟级别(如每分钟运行一次),但需要判断当前价格是否达到涨停价,您不能直接在分钟级别的 get_history 中请求 high_limit。正确的做法是单独调用一次日线级别的数据来获取涨停价。

正确示例:

def handle_data(context, data):
    security = '600570.SS'
    
    # 1. 获取分钟级别的常规数据(不包含 high_limit)
    min_df = get_history(5, frequency='1m', field=['close', 'volume'], security_list=security)
    
    # 2. 单独获取日线级别的涨停价数据
    day_df = get_history(1, frequency='1d', field=['high_limit'], security_list=security)
    high_limit_price = day_df['high_limit'][-1]
    
    # 3. 获取当前最新价
    current_price = data[security]['close']
    
    # 4. 逻辑判断
    if current_price >= high_limit_price:
        log.info("股票 %s 已触及涨停价!" % security)

方案三:在实盘/模拟盘交易中使用行情快照(get_snapshot)

如果您是在交易模块(实盘或模拟盘)中运行,并且需要获取实时的涨跌停价格,推荐使用 get_snapshot 接口,该接口返回的快照数据中直接包含 up_px(涨停价)和 down_px(跌停价)。

正确示例(仅限交易模块):

def handle_data(context, data):
    security = '600570.SS'
    snapshot = get_snapshot(security)
    
    if snapshot and security in snapshot:
        up_limit = snapshot[security].get('up_px')
        current_price = snapshot[security].get('last_px')
        
        if current_price >= up_limit:
            log.info("当前价格已达涨停价:%s" % up_limit)

总结

牢记 ptrade 的数据字段限制:涨跌停价格(high_limit / low_limit)是日线级别的属性。在编写分钟或 Tick 级别策略时,务必将日线数据的获取与分钟线数据的获取分开调用,即可完美解决此报错。