🚀 AI 一键生成 ptrade 策略代码

为什么Ptrade获取的L2逐笔数据和同花顺对不上?(大单差异解析)

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

问题描述

Ptrade获取的L2逐笔数据和同花顺的逐笔数据对不上的原因

部分大单在同花顺上看不到。有点神奇。

解决方案

在量化交易中,发现 Ptrade 获取的 Level-2 逐笔数据与同花顺等 C 端炒股软件显示不一致(尤其是大单差异)是一个非常普遍的现象。这并不是 Ptrade 的数据出错了,而是因为 B端量化接口与C端零售软件在数据处理机制、展示逻辑上存在根本差异

以下是导致 Ptrade 逐笔数据与同花顺对不上的几个核心原因:

1. 数据的“原始度”与聚合清洗(核心原因)

  • Ptrade (原始数据):Ptrade 的 get_individual_transaction(逐笔成交)和 get_individual_entrust(逐笔委托)接口,直接接入券商柜台或交易所的高速 L2 行情源。它返回的是未经任何修饰的、最原始的交易所撮合流水
  • 同花顺 (清洗/聚合数据):为了降低普通用户的阅读门槛和客户端的渲染压力,同花顺等软件会对原始 L2 数据进行清洗、过滤和聚合。例如,同一秒内同一主力的连续多笔小单,同花顺可能会在前端将其“拼凑”成一笔大单展示;反之,一笔真实的大单也可能因为其内部算法被拆解或归类。

2. 撤单数据的处理 (trans_flag)

这是导致“大单在同花顺上看不到”的最常见原因。

  • 在 Ptrade 的逐笔成交数据中,包含一个字段 trans_flag (成交标记)。其中 0 代表普通成交,1 代表撤单成交
  • 交易所的 L2 数据流中,撤单也是作为一条逐笔记录下发的。很多游资或量化机构会频繁挂大单然后瞬间撤单(俗称“虚假挂单”或“撤单诱多/空”)。
  • 同花顺的逐笔明细通常会过滤掉撤单数据,只展示真实的资金成交。因此,你在 Ptrade 抓到的大单,如果 trans_flag == 1,在同花顺上自然是看不到的。

3. 时间戳精度差异

  • Ptrade:时间戳 business_time毫秒级的(例如 20220913111141472)。
  • 同花顺:前端展示通常只精确到。在同一秒内发生的几十笔甚至上百笔撮合,同花顺可能会按自己的逻辑进行排序或合并,导致你无法将 Ptrade 的毫秒级明细与同花顺的秒级明细一一对应。

4. 逐笔委托 vs 逐笔成交的混淆

  • 有时候用户在同花顺的“大单统计”或“千档盘口”中看到的大单,实际上是挂单(委托单),并未成交。
  • 如果你在 Ptrade 中只拉取了 get_individual_transaction(逐笔成交),自然找不到那笔大单。你需要同时结合 get_individual_entrust(逐笔委托)来还原完整的盘口行为。

5. 集合竞价与盘后交易的处理

  • Ptrade 的数据包含明确的盘后逐笔成交序号标识(trans_identify_am:0–盘中,1–盘后)。
  • 同花顺对于 9:15-9:25 的集合竞价撮合结果,以及 15:00 之后的盘后大宗交易、固定价格交易,其展示方式与连续竞价时段不同,有时会将其合并为一笔开盘/收盘大单。

💡 给量化开发者的建议

如果你在 Ptrade 中抓到了“神秘大单”,建议通过以下代码逻辑进行验证:

def handle_data(context, data):
    # 获取逐笔成交,建议开启 is_dict=True 提升性能
    transaction = get_individual_transaction([g.security], is_dict=True)
    if transaction and g.security in transaction:
        for item in transaction[g.security]:
            # item 对应 fields: ["business_time", "hq_px", "business_amount", "trade_index", "business_direction", "buy_no", "sell_no", "trans_flag", "trans_identify_am", "channel_num"]
            business_amount = item[2]
            trans_flag = item[7]
            
            # 检查是否为大单 (例如大于1000手)
            if business_amount >= 100000: 
                if trans_flag == 1:
                    log.info(f"发现大单撤单!数量:{business_amount}, 这在同花顺上通常不可见。")
                else:
                    log.info(f"发现真实大单成交!数量:{business_amount}")

总结:做量化策略时,请绝对信任 Ptrade 获取的交易所原始 L2 数据。C端软件的数据经过了二次加工,只能作为人工看盘的参考,不能作为量化对账的绝对标准。