🚀 AI 一键生成 ptrade 策略代码

PTrade 行情分析:如何获取实时委差数据 (entrust_diff)?

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

问题描述

如何获取股票的实时委差数据来判断买卖盘力量对比?

解决方案

在PTrade量化交易平台中,获取股票的实时“委差”数据主要通过调用 get_snapshot 函数来实现。

委差(Entrust Difference)是反映买卖盘强弱的重要指标,其计算公式通常为:委差 = 总委买量 - 总委卖量。正值越大表示买方力量越强,负值越大表示卖方力量越强。

以下是具体的实现方法和策略代码示例。

核心步骤

  1. 调用接口:使用 get_snapshot(security) 获取指定标的的行情快照。
  2. 获取字段:从返回的字典中提取 'entrust_diff' 字段。
  3. 逻辑判断:根据委差的正负和数值大小,判断当前市场的买卖力量对比,从而执行交易逻辑。

策略代码示例

以下是一个完整的策略示例。该策略在盘中实时监控股票的委差,当委差大于一定阈值(显示买盘强劲)时买入,当委差小于一定负阈值(显示抛压沉重)时卖出。

def initialize(context):
    """
    初始化函数
    """
    # 设置我们要操作的股票,例如:恒生电子
    g.security = '600570.SS'
    # 设置股票池
    set_universe(g.security)
    
    # 设定委差阈值,根据实际资金量和个股流动性调整
    # 例如:委差超过 500 手视为买盘强劲
    g.buy_threshold = 500
    # 委差低于 -500 手视为卖盘强劲
    g.sell_threshold = -500
    
    # 设置运行频率,这里演示使用 run_interval 每10秒检查一次
    # 注意:get_snapshot 仅在交易模块(实盘)有效
    run_interval(context, check_entrust_diff, seconds=10)

def check_entrust_diff(context):
    """
    定时运行函数:检查委差并交易
    """
    # 获取行情快照
    snapshot = get_snapshot(g.security)
    
    # 检查数据是否获取成功
    if snapshot is None:
        log.info("获取行情快照失败")
        return
        
    # 提取个股数据
    stock_data = snapshot.get(g.security)
    
    if stock_data:
        # 获取实时委差数据 (entrust_diff)
        # 注意:部分券商或行情源可能返回None,需做容错处理
        entrust_diff = stock_data.get('entrust_diff')
        
        # 获取最新价,用于下单
        current_price = stock_data.get('last_px')
        
        if entrust_diff is None or current_price is None:
            return

        log.info("股票: %s, 当前价格: %s, 实时委差: %s" % (g.security, current_price, entrust_diff))
        
        # 获取当前持仓
        position = get_position(g.security)
        curr_amount = position.amount
        available_cash = context.portfolio.cash
        
        # --- 交易逻辑 ---
        
        # 1. 买入逻辑:委差 > 阈值 且 资金充足
        if entrust_diff > g.buy_threshold:
            # 简单示例:每次买入100股
            if available_cash > current_price * 100:
                log.info("买盘强劲 (委差 %s > %s),触发买入..." % (entrust_diff, g.buy_threshold))
                order(g.security, 100)
        
        # 2. 卖出逻辑:委差 < 负阈值 且 有持仓
        elif entrust_diff < g.sell_threshold:
            if curr_amount > 0:
                log.info("抛压沉重 (委差 %s < %s),触发卖出..." % (entrust_diff, g.sell_threshold))
                order(g.security, -100)

def handle_data(context, data):
    """
    必须实现的函数,此处逻辑已在 run_interval 中处理,故留空
    """
    pass

关键注意事项

  1. 仅限实盘环境
    根据PTrade文档,get_snapshot 函数仅在交易模块(实盘)可用。在回测模式下调用该函数通常会返回 None 或全0数据,因为回测历史数据通常不包含高频的盘口快照信息。

  2. 数据字段说明
    get_snapshot 返回的字典中,除了 entrust_diff (委差),还有其他相关字段可辅助判断:

    • entrust_rate: 委比((委买-委卖)/(委买+委卖))
    • total_bidqty: 总委买量
    • total_offerqty: 总委卖量
    • bid_grp / offer_grp: 买卖五档(或十档)详情
  3. 行情频率
    委差是随Tick变动的高频数据。在 handle_data(分钟级)中调用只能获取该分钟结束时的快照。如果需要更灵敏的反应,建议使用 run_interval(如上例)或在 tick_data 函数中编写策略。

  4. Python版本兼容性
    代码使用了 %s 格式化字符串,这是为了兼容 Python 3.5 及以上版本(PTrade旧环境可能不支持 f-string)。


Q&A

Q: 为什么我在回测中调用 get_snapshot 获取到的委差全是0?
A: get_snapshot 函数仅在**交易(实盘)**模块可用。回测环境通常只提供K线数据(开高低收量),不包含历史时刻的盘口快照(如委差、五档行情等),因此无法在回测中获取该数据。

Q: 除了委差,还有什么指标可以判断买卖盘力量?
A: 可以使用 委比 (entrust_rate)。委比是相对指标,范围在 -1 到 1 之间,计算公式为 (委买量 - 委卖量) / (委买量 + 委卖量)。相比委差,委比更能消除盘子大小的影响,直观反映买卖强弱的比例。

Q: 如何获取买一和卖一的价格进行更精确的下单?
A: 在 get_snapshot 返回的数据中,可以通过 bid_grpoffer_grp 获取。

  • 买一价:snapshot[code]['bid_grp'][1][0]
  • 卖一价:snapshot[code]['offer_grp'][1][0]
    注意检查字典是否存在以及索引是否越界。