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

ptrade 平台如何编写集合竞价追涨停策略?(附 Python 源码)

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

问题描述

ptrade 集合竞价追涨停策略实现指南
请帮我编写一个在9:23分根据集合竞价快照预判并追涨停的 ptrade 策略

解决方案

在 ptrade 量化交易平台中,实现集合竞价追涨停策略的核心在于利用 run_daily 定时周期性函数在盘前(如 9:23)触发策略逻辑,并通过 get_snapshot 获取实时行情快照中的最新价(last_px)与涨停价(up_px)进行对比。如果最新价达到涨停价,则使用 order 接口以涨停价进行限价委托申报。

1. 策略实现源码

以下是基于 ptrade 标准 API 编写的完整集合竞价追涨停策略代码:

def initialize(context):
    # 初始化此策略
    # 设置我们要操作的股票池,这里以恒生电子(600570.SS)为例
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 每天 9:23 运行集合竞价处理函数
    run_daily(context, aggregate_auction_func, time='9:23')  

def aggregate_auction_func(context):
    stock = g.security
    
    # 获取目标股票的实时行情快照
    snapshot = get_snapshot(stock)
    if not snapshot or stock not in snapshot:
        log.warning("未能获取到 %s 的行情快照" % stock)
        return
        
    # 获取最新价与涨停价
    price = snapshot[stock]['last_px']
    up_limit = snapshot[stock]['up_px']
    
    # 如果最新价不小于涨停价,则以涨停价挂单买入 100 股
    if float(price) >= float(up_limit):
        log.info("检测到 %s 集合竞价封涨停,正在以涨停价 %s 报单买入" % (stock, up_limit))
        order(stock, 100, limit_price=up_limit)
    else:
        log.info("%s 当前集合竞价未达到涨停价,不进行操作" % stock)
        
def handle_data(context, data):
    # 盘中分钟/日线主回调函数,本策略主要在集合竞价定时运行,此处留空
    pass

2. 核心 API 解析

  • run_daily(context, func, time='9:31'):用于以日为单位周期性运行指定函数。在交易场景中,可设置范围为 00:00~23:59。本策略将其设定在 9:23 触发,以便在集合竞价结束前(9:25 之前)完成预判与报单。
  • get_snapshot(security):用于获取实时行情快照。返回的字典中包含 last_px(最新成交价)和 up_px(涨停价格)等关键字段。
  • order(security, amount, limit_price=None):按数量买卖接口。买入时 amount 传入正数。在追涨停场景下,务必传入 limit_price(限价),以确保报单符合价格笼子及柜台规范。

3. 实盘注意事项

  1. 价格精度:股票的价格精度通常是小数点后两位。在使用限价单委托时,请确保传入的 limit_price 精度符合交易所规范,否则可能导致委托失败。
  2. 废单处理:如果下单价格超过了交易所的价格笼子限制,order 函数依然会返回 order_id,但该笔委托在柜台可能会被判定为废单(成交回调中的 status'9')。
  3. 行情延迟:集合竞价期间行情波动剧烈,快照数据可能存在微秒级延迟,实盘交易时需注意滑点与通道排队风险。