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

ptrade 平台如何获取并判断当前标的的交易状态(trade_status)?

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

问题描述

ptrade Tick 级别交易:如何判断市场交易状态(trade_status)?
在ptrade的tick_data函数中,如何通过data获取当前标的的交易状态(如连续竞价、停牌)?

解决方案

在 ptrade 量化交易平台中,进行 tick 级别交易时,准确判断标的的当前交易状态(如是否停牌、是否处于连续竞价阶段)对于避免废单和控制交易逻辑至关重要。

可以通过以下两种主要方式在 tick_datahandle_data 中获取交易状态:

方法一:在 tick_data 中直接从 data 参数获取

tick_data(context, data) 函数中,data 参数是一个字典,其结构中包含了当前 tick 的详细数据。你可以直接通过 data[security]['tick']['trade_status'] 获取交易状态。

示例代码:

def initialize(context):
    g.security = '600570.SS'  # 恒生电子
    set_universe(g.security)

def tick_data(context, data):
    security = g.security
    if security in data:
        # 获取当前 tick 的交易状态
        trade_status = data[security]['tick']['trade_status'].values[0]
        log.info(f"{security} 当前交易状态为: {trade_status}")
        
        # 判断是否处于连续交易状态
        if trade_status == 'TRADE':
            log.info("市场处于连续撮合交易状态,可以执行下单逻辑")
        elif trade_status == 'SUSP':
            log.info("该股票当前停盘")
        elif trade_status == 'HALT':
            log.info("该股票暂停交易")

方法二:使用 get_snapshot 获取实时行情快照

如果你在 handle_data 或定时任务中,也可以通过调用 get_snapshot(security) 接口获取包含 trade_status 的行情快照。

示例代码:

def handle_data(context, data):
    security = '600570.SS'
    snapshot = get_snapshot(security)
    if snapshot and security in snapshot:
        status = snapshot[security].get('trade_status')
        log.info(f"通过快照获取的 {security} 状态为: {status}")

附录:trade_status 常见状态值说明

状态值 中文含义 说明
START 市场启动 初始化之后,集合竞价前
PRETR 盘前 交易准备阶段
OCALL 开始集合竞价 集合竞价阶段
TRADE 交易 连续撮合交易阶段(正常可交易)
HALT 暂停交易 临时停牌或暂停
SUSP 停盘 股票停牌状态
BREAK 休市 中午休市阶段
POSTR 盘后 盘后处理阶段
ENDTR 交易结束 当日交易正式结束
STOPT 长期停盘 停盘天数 >= 1 天