4. 买卖方向字段与主动成交判定

逐笔成交数据里,买卖方向字段看起来只是一个字符或一个数字,但它决定了后续所有"主动买/主动卖"统计的正确性。如果方向字段读错,成交量分布、大单净流入、资金流向等指标会整体反向。本节围绕三件事展开:方向字段的编码规则、主动成交的判定逻辑,以及如何用逐笔委托数据做交叉验证。

一、方向字段的常见编码规则

不同数据源对买卖方向的编码并不统一,常见的有三类:

  • 字母型:B 表示买方主动(Buy),S 表示卖方主动(Sell),部分数据源用 N 表示未知或中性。
  • 数字型:1 表示买入,2 表示卖出;也有数据源用 0 表示买、1 表示卖,或 49/50(ASCII 码)表示 B/S。
  • 带符号型:+1/-1,或成交量本身带正负号,正为主动买、负为主动卖。

整理代码字典时,第一步就是把原始字段的取值域完整枚举出来,而不是凭经验假设"1 就是买"。建议在字典中为每个方向字段记录:字段名、原始取值、含义、是否含未知值、以及该取值在样本中出现的频次。频次统计能快速暴露异常——例如某天数据中出现了字典里没有的 3,说明数据源升级或字段含义变化,必须回查。

注意:部分数据源的买卖方向字段在集合竞价、盘后固定价格交易等场景下可能为空或为中性值,不能简单按 B/S 二值处理,字典中应单独标注这些特殊场景的取值。

二、主动成交的判定逻辑

逐笔成交记录的是"某一笔撮合",方向字段描述的是哪一方主动发起。判定逻辑的本质是比较成交价与当时盘口的买一价、卖一价:

  • 成交价等于或高于卖一价(成交在卖方挂单价上),买方主动吃掉卖盘,记为主动买入。
  • 成交价等于或低于买一价(成交在买方挂单价上),卖方主动砸向买盘,记为主动卖出。
  • 成交价介于买一与卖一之间(如市价单在价差内成交),需要结合逐笔委托的到达顺序判断,不能仅凭价格。

很多数据源已经在方向字段中直接给出了判定结果,此时我们做的是"信任但校验":用价格与盘口的关系反推方向,与字段值比对,统计一致率。若一致率低于预期(例如低于 95%),说明字段含义与我们的理解不符,或数据存在错位。

下面这张图展示了从逐笔成交记录到主动方向判定的完整信号链,以及用逐笔委托做验证的回路:

逐笔成交记录 成交价 / 成交量 / 方向字段 逐笔委托记录 委托价 / 委托量 / 到达序号 盘口快照 买一价 / 卖一价 主动方向判定 成交价 ≥ 卖一价 → 主动买入(B) 成交价 ≤ 买一价 → 主动卖出(S) 价差内成交 → 结合委托到达顺序 委托关联验证 成交前最后到达的委托方向 是否与成交方向字段一致 统计一致率,定位异常记录 方向字段值 B / S / 1 / 2 / 未知 一致率与异常清单 低于阈值 → 回查字典 校验不通过时反馈修正方向字段映射

三、与逐笔委托的关联验证

逐笔成交只告诉我们"成交了",逐笔委托才告诉我们"谁先挂的单、谁后到的单"。验证的基本思路是:对每一笔成交,找到成交时刻之前最近到达、且价格匹配的委托,看这笔委托是买还是卖。如果成交由买方主动发起,那么成交前最后到达的应该是买方委托(价格不低于卖一),反之亦然。

实际操作中,交易所的逐笔数据通常带有撮合序号或成交编号,可以直接把成交与委托配对。以常见的配对逻辑为例:

# 伪代码:用委托方向校验成交方向
for trade in trades:
    # 找到成交编号对应的主动方委托
    order = orders_by_trade_id.get(trade.trade_id)
    if order is None:
        unmatched += 1
        continue
    expected = 'B' if order.side == '买' else 'S'
    if trade.direction == expected:
        matched += 1
    else:
        mismatch.append((trade, order))

consistency = matched / (matched + len(mismatch))

示例中若某日样本共 50 万笔成交,配对成功 49.2 万笔,其中方向一致 48.6 万笔,则一致率约为 98.8%,属于正常范围;若一致率只有 70% 左右,常见原因是方向字段的 1/2 含义被弄反,或成交与委托的配对键用错(例如用了委托号而非成交编号)。

四、整理成字典时的落地要点

把上述内容沉淀到代码字典中,建议每个方向相关字段至少包含以下条目:原始字段名、数据类型、取值枚举及含义、未知值处理方式、判定依据(价格比较还是委托配对)、以及验证一致率的参考阈值。对于同时存在"方向字段"和"主动方标识"两个字段的数据源,要明确二者是否冗余、以哪个为准,避免下游重复计算或相互矛盾。

实践建议:先用一个交易日的全量数据跑一遍方向字段频次统计和一致率校验,把结果作为字典的"基线"。之后每天增量数据都对比基线,频次分布突变或一致率骤降,往往就是数据源字段变更的第一信号。

方向字段虽小,却是逐笔数据链条上最容易出错的一环。把编码规则枚举清楚、把判定逻辑写明白、把委托验证跑通,后续的成交量分布、资金流向等衍生指标才有可靠的地基。