3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,发现 Ptrade 获取的 Level-2 逐笔数据与同花顺等 C 端炒股软件显示不一致(尤其是大单差异)是一个非常普遍的现象。这并不是 Ptrade 的数据出错了,而是因为 B端量化接口与C端零售软件在数据处理机制、展示逻辑上存在根本差异。
以下是导致 Ptrade 逐笔数据与同花顺对不上的几个核心原因:
get_individual_transaction(逐笔成交)和 get_individual_entrust(逐笔委托)接口,直接接入券商柜台或交易所的高速 L2 行情源。它返回的是未经任何修饰的、最原始的交易所撮合流水。trans_flag)这是导致“大单在同花顺上看不到”的最常见原因。
trans_flag (成交标记)。其中 0 代表普通成交,1 代表撤单成交。trans_flag == 1,在同花顺上自然是看不到的。business_time 是毫秒级的(例如 20220913111141472)。get_individual_transaction(逐笔成交),自然找不到那笔大单。你需要同时结合 get_individual_entrust(逐笔委托)来还原完整的盘口行为。trans_identify_am:0–盘中,1–盘后)。如果你在 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端软件的数据经过了二次加工,只能作为人工看盘的参考,不能作为量化对账的绝对标准。