🚀 AI 一键生成 ptrade 策略代码

如何使用 PTrade 的 get_snapshot 函数获取股票的实时行情数据?

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

问题描述

怎样才能在策略中获取一只股票当前最新的价格、涨停价、跌停价以及买一卖一的挂单价格和数量?

解决方案

在 PTrade 策略中,获取股票当前的最新价格、涨跌停价以及盘口挂单(买一卖一)信息,主要使用 get_snapshot(security) 函数。

该函数返回一个字典,包含了指定标的的实时行情快照数据。

代码实现

以下是一个完整的策略示例,展示了如何在 handle_datatick_data 中提取这些数据:

def initialize(context):
    # 设置要操作的股票,例如:恒生电子
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 获取行情快照
    snapshot = get_snapshot(g.security)
    
    # 检查是否成功获取数据
    if snapshot and g.security in snapshot:
        stock_data = snapshot[g.security]
        
        # 1. 获取最新价
        current_price = stock_data.get('last_px')
        
        # 2. 获取涨跌停价
        up_limit = stock_data.get('up_px')     # 涨停价
        down_limit = stock_data.get('down_px') # 跌停价
        
        # 3. 获取买一、卖一挂单信息
        # bid_grp 和 offer_grp 是字典,key为档位(1-5或1-10),value为列表 [价格, 数量, 笔数]
        bid_grp = stock_data.get('bid_grp')
        offer_grp = stock_data.get('offer_grp')
        
        # 提取买一 (key为1)
        bid_1_price = 0.0
        bid_1_volume = 0
        if bid_grp and 1 in bid_grp:
            bid_1_info = bid_grp[1]
            bid_1_price = bid_1_info[0]  # 价格
            bid_1_volume = bid_1_info[1] # 数量
            
        # 提取卖一 (key为1)
        ask_1_price = 0.0
        ask_1_volume = 0
        if offer_grp and 1 in offer_grp:
            ask_1_info = offer_grp[1]
            ask_1_price = ask_1_info[0]  # 价格
            ask_1_volume = ask_1_info[1] # 数量
            
        # 打印日志查看结果
        log.info("股票: %s" % g.security)
        log.info("最新价: %s" % current_price)
        log.info("涨停价: %s, 跌停价: %s" % (up_limit, down_limit))
        log.info("买一价: %s, 买一量: %s" % (bid_1_price, bid_1_volume))
        log.info("卖一价: %s, 卖一量: %s" % (ask_1_price, ask_1_volume))

关键字段说明

get_snapshot 返回的数据字典中,关键字段如下:

  1. last_px: 最新成交价(float)。
  2. up_px: 涨停价格(float)。
  3. down_px: 跌停价格(float)。
  4. bid_grp: 委买档位信息。
    • 格式为字典:{1: [价格, 数量, 笔数], 2: [...], ...}
    • 获取买一价:bid_grp[1][0]
    • 获取买一量:bid_grp[1][1]
  5. offer_grp: 委卖档位信息。
    • 格式同上。
    • 获取卖一价:offer_grp[1][0]
    • 获取卖一量:offer_grp[1][1]

注意事项

  1. 适用环境get_snapshot 函数主要用于 交易(实盘/仿真) 模块。在普通的回测模式(日线/分钟线)下,通常无法获取实时的盘口挂单(买一卖一)数据,回测中一般只能获取 OHLC(开高低收)数据。
  2. 盘前数据:在 before_trading_start 阶段调用此函数,大部分数据(如成交量、换手率等)可能为 0,因为市场尚未开盘。
  3. 数据保护:在访问 bid_grpoffer_grp 时,建议先判断字典是否为空以及 key 是否存在,以防止在某些极端行情(如跌停板可能没有买单)下报错。