🚀 AI 一键生成 ptrade 策略代码

ptrade 平台分钟级回测:实时获取当日盘中最高价的实现方法

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

问题描述

ptrade 回测取得某只当日盘中最高价每分钟执行怎么写

/

解决方案

在 ptrade 平台进行分钟级别的回测时,handle_data 函数会每分钟执行一次。要获取某只股票当日盘中到目前为止的最高价,最有效的方法是利用全局变量 g 在每天开盘前进行重置,并在每分钟的 handle_data 中不断比较和更新最高价。

以下是完整的策略代码示例:

def initialize(context):
    # 设置我们要操作的股票池
    g.security = '600570.SS'
    set_universe(g.security)
    # 初始化当日最高价变量
    g.daily_high = 0.0

def before_trading_start(context, data):
    # 每天盘前运行,重置当日最高价为0
    g.daily_high = 0.0
    log.info('新交易日开始,重置当日最高价。')

def handle_data(context, data):
    # 获取当前分钟K线的最高价
    # data[security] 返回的是 SecurityUnitData 对象,包含 high 属性
    current_minute_high = data[g.security].high
    
    # 如果当前分钟的最高价大于记录的当日最高价,则更新
    if current_minute_high > g.daily_high:
        g.daily_high = current_minute_high
        
    # 打印日志查看结果
    log.info('当前时间: %s, 当前分钟最高价: %.2f, 截止目前的当日最高价: %.2f' % 
             (context.blotter.current_dt, current_minute_high, g.daily_high))
    
    # 在这里可以编写你的交易逻辑,例如:
    # if data[g.security].close < g.daily_high * 0.95:
    #     order_target(g.security, 0)

代码原理解析:

  1. initialize 函数:策略初始化时,设定目标股票并初始化全局变量 g.daily_high
  2. before_trading_start 函数:该函数在每个交易日开盘前(回测中通常为 8:30)执行一次。在这里将 g.daily_high 重置为 0,确保每天的最高价都是独立计算的。
  3. handle_data 函数:在分钟级回测中,该函数每分钟触发一次。data[g.security] 包含了当前这一分钟的行情数据(SecurityUnitData 对象),通过 .high 属性获取当前分钟的最高价。将其与 g.daily_high 进行比较,如果更大则覆盖更新。这样 g.daily_high 始终保存着当天开盘到当前分钟的最高价。

这种方法避免了每分钟都去调用 get_history 获取大量历史数据,极大地提高了回测的运行效率。