🚀 AI 一键生成 ptrade 策略代码

ptrade 平台 get_snapshot 接口在盘前阶段的调用详解与注意事项

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

问题描述

get_snapshot函数 在before阶段是否可以调用?

/

解决方案

在 ptrade 量化交易平台中,get_snapshot 函数可以before_trading_start(盘前阶段)调用,但需要特别注意返回数据的有效性。

核心注意事项

根据 ptrade API 文档的明确提示:
在盘前阶段(before_trading_start)使用 get_snapshot 函数,返回数据里大部分数据是 0,比如成交量、当前价格、换手率等。

为什么会出现这种情况?

  1. 行情未更新before_trading_start 函数在交易环境中通常在 9:10(默认)执行,或者在开启交易时立即执行。此时市场尚未正式开盘(甚至未进入集合竞价的活跃期),交易所的实时行情快照数据尚未生成或更新。
  2. 数据重置:盘前阶段,许多实时交易数据(如当天的成交量、最高价、最低价等)会被重置为 0。

官方建议与解决方案

如果您确实需要在盘前获取某些行情数据,建议采取以下方式避免数据有误:

  1. 延迟获取:当在 9:10 前开启交易时,受行情未更新原因影响,调用实时行情接口会导致数据有误。可通过在 before_trading_start 函数内 sleep 至 9:10 分之后再调用。
  2. 改用定时任务:将调用实时行情接口的逻辑改为使用 run_daily 执行,并指定一个更晚的时间(例如 9:25 集合竞价结束或 9:30 开盘后)。
  3. 获取历史数据:如果您需要的是昨天的收盘价等静态数据,建议使用 get_historyget_price 接口获取历史 K 线数据,而不是依赖盘前的实时快照。

示例:使用 run_daily 替代盘前快照获取

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    # 建议:在 9:25 集合竞价结束后获取快照,而不是在 before_trading_start 中
    run_daily(context, get_morning_snapshot, time='09:25')

def get_morning_snapshot(context):
    snapshot = get_snapshot(g.security)
    log.info("9:25 行情快照: %s" % snapshot)

def before_trading_start(context, data):
    # 尽量避免在此处直接调用 get_snapshot
    pass

总结来说,虽然语法上允许在 before_trading_start 中调用 get_snapshot,但为了保证策略逻辑的正确性,不推荐在此阶段依赖快照中的动态价格和成交量数据。