博弈基础:主动买盘与主动卖盘的定义、市场微观结构、Tick级数据解读

各位同学,咱们今天聊点实在的。

做量化交易,尤其是高频或者日内策略,你绕不开一个核心问题:谁在主动买?谁在主动卖?

这听起来像废话,但很多人做了几年交易,连这个都没搞明白。我刚开始接触Tick级数据时,也踩过不少坑。今天这一章,咱们就把地基打牢。

一、主动买盘 vs 主动卖盘:到底怎么区分?

先给个最直白的定义。

主动买盘:买方不挂单等待,直接以卖一价、卖二价甚至更高的价格成交。说白了,就是「我就要现在买,贵点无所谓」。

主动卖盘:卖方不挂单等待,直接以买一价、买二价甚至更低的价格砸出去。就是「我就要现在卖,便宜点也行」。

你想想看,如果一笔成交发生在卖一价上,那这笔单子是谁发起的?是买方。因为他主动去吃了卖方的挂单。反过来,成交在买一价上,是卖方主动砸的。

核心判断标准:看成交价相对于买卖盘口的位置。

  • 成交价 ≥ 卖一价 → 主动买盘(买方吃单)
  • 成交价 ≤ 买一价 → 主动卖盘(卖方砸单)

嗯,这里要注意:有些交易所的撮合规则会有细微差别,比如集合竞价阶段或者有市价单参与时,判断逻辑要更复杂。但日常的连续竞价中,这个规则基本通用。

二、市场微观结构:你看到的盘口,其实是个「谎言」

很多新手喜欢盯着买卖十档看,觉得买一有1000手托着,跌不下去。我告诉你,这想法很危险。

市场微观结构,说白了就是订单簿(Order Book)的动态变化。它由三部分组成:

  • 限价单(Limit Order):挂在那里等人来吃,提供流动性。
  • 市价单(Market Order):直接吃掉对手方的挂单,消耗流动性。
  • 撤单(Cancellation):挂上去又撤掉,这是最迷惑人的地方。

我曾经在实盘中遇到过一种情况:某只股票买一挂了5000手大单,看着很稳。结果下一秒,这5000手瞬间撤单,价格直接跳水。你以为的「支撑」,其实是别人设的陷阱。

避坑指南:不要只看盘口的静态挂单量。要结合Tick数据看挂单的「存活时间」和「撤单率」。如果一个价位频繁出现大单挂上又撤掉,大概率是诱多或诱空。

三、Tick级数据解读:每一笔成交都在说话

Tick数据,就是逐笔成交数据。它记录了每一笔交易的:

  • 成交时间(精确到毫秒甚至微秒)
  • 成交价格
  • 成交量
  • 成交方向(主动买/主动卖)

我个人习惯把Tick数据比作「心电图」。每一笔成交都是一个心跳,连续的心跳构成了市场的脉搏。

举个例子,下面是一段真实的Tick数据(简化版):

时间戳          价格   成交量  方向
09:30:01.123   10.01   200     Buy
09:30:01.456   10.00   150     Sell
09:30:01.789   10.02   300     Buy
09:30:02.001   10.01   100     Sell

你看,第一笔是主动买盘,价格从10.00推到了10.01。第二笔是主动卖盘,又砸回10.00。第三笔又是主动买盘,直接干到10.02。这说明什么?多空在激烈博弈,但买方稍微强势一点。

如果只看每分钟的K线,你根本看不到这些细节。这就是Tick数据的价值。

四、核心逻辑:主动买卖盘的博弈模型

咱们把上面的知识串起来,画一张图。这张图我建议你保存下来,后面所有策略都基于这个逻辑。

主动买盘与主动卖盘博弈模型 买方(主动买盘) • 以卖一/卖二价成交 • 消耗卖方挂单 • 推动价格上涨 • 代表做多意愿 卖方(主动卖盘) • 以买一/买二价成交 • 消耗买方挂单 • 推动价格下跌 • 代表做空意愿 博弈结果 主动买盘量 > 主动卖盘量 → 价格上涨 主动买盘量 < 主动卖盘量 → 价格下跌 两者接近 → 震荡 数据来源:Tick级逐笔成交 + 盘口挂单变化

这张图的核心就一句话:价格是主动买卖盘博弈的结果,不是原因。

很多人看到价格涨了才追进去,其实已经晚了。真正有效的信号,是主动买卖盘的「量」和「速度」的变化。

五、实战中怎么用?一个简单的Python示例

咱们用Python写个最简单的函数,从Tick数据里提取主动买卖盘信息。代码不长,但很实用。

import pandas as pd

def classify_tick(df):
    """
    对Tick数据进行主动买卖盘分类
    df需包含列:price, bid1, ask1, volume
    """
    buy_volume = 0
    sell_volume = 0
    
    for _, row in df.iterrows():
        if row['price'] >= row['ask1']:
            buy_volume += row['volume']
        elif row['price'] <= row['bid1']:
            sell_volume += row['volume']
        # 中间价成交(极少见,可忽略或按规则分配)
    
    return buy_volume, sell_volume

# 使用示例
# buy, sell = classify_tick(tick_data)
# print(f"主动买盘: {buy}, 主动卖盘: {sell}")

这个函数虽然简单,但它是很多高级策略的基础。比如你可以计算「主动买卖盘净额 = 主动买盘 - 主动卖盘」,然后看这个净额的变化趋势。

一个小技巧:我习惯把主动买卖盘净额除以总成交量,得到「主动买卖盘占比」。这个指标比单纯的成交量更有参考价值。比如某根K线成交量很大,但主动买盘占比只有40%,那这根阳线就有点虚。

六、避坑指南:Tick数据常见的几个坑

最后,分享几个我踩过的坑,你们注意避开。

  1. 数据延迟问题:有些数据商提供的Tick数据是「快照」而非「逐笔」,两者差别很大。快照数据会丢失中间成交信息,导致方向判断错误。
  2. 盘口价差变化:当买卖价差很大时,成交在中间价的情况会增多。这时候不能简单用≥卖一或≤买一来判断,需要结合盘口深度。
  3. 大单拆分:机构经常把大单拆成小单,用算法交易执行。你看到的100笔主动买盘,可能只是同一笔大单。这时候要看「累计主动买卖盘」而非单笔。
  4. 交易所规则差异:A股、美股、期货的撮合规则不完全一样。比如A股有涨跌停板,涨停时主动买盘会消失(因为没人卖),但你不能说买方意愿不强。

嗯,今天就先聊到这儿。这一章的内容虽然基础,但它是后面所有策略的根基。你想想看,如果连「谁在主动买」都搞不清楚,后面那些复杂的模型又有什么意义呢?

记住:Tick数据是市场的「第一手情报」,盘口是「第二手」,K线是「第三手」。离源头越近,信息越真实。


公众号:蓝海资料掘金营,微信deep3321