3、盘口特征工程:买卖价差、订单簿斜率、订单簿不平衡度、成交量分布

盘口数据,说白了就是市场最原始的博弈痕迹。你盯着买卖十档的挂单,看到的不是数字,是交易员的情绪和策略。我个人习惯把盘口特征工程比作「给市场做CT扫描」——你得从这些杂乱的数据里,提取出真正能指导做市决策的指标。

这一章,我们重点拆解四个核心特征:买卖价差、订单簿斜率、订单簿不平衡度、成交量分布。嗯,每一个我都踩过坑,咱们一个一个说。

3.1 买卖价差(Bid-Ask Spread)

买卖价差是最基础的盘口特征。公式很简单:价差 = 卖一价 - 买一价。但你别小看它,这里面门道很深。

为什么价差重要?

价差直接决定了你的做市成本。你想想看,如果你在买一价买入,在卖一价卖出,中间这个差价就是你的毛利。价差越小,市场流动性越好,做市商越难赚钱;价差越大,流动性越差,但单笔利润也越高。

我在项目中遇到过一种情况:某个小币种价差突然从0.01 USDT扩大到0.05 USDT。当时我以为是流动性枯竭,差点撤单。后来一查,是有人挂了巨量卖单在卖二位置,把卖一给「吓」跑了。嗯,这里要注意:价差突变不一定代表流动性问题,也可能是大单在试探市场。

实战指标:
  • 绝对价差:卖一价 - 买一价。适合判断当前交易成本。
  • 相对价差:价差 / 中间价。适合跨品种、跨时间对比。
  • 价差波动率:过去N笔价差的标准差。反映市场分歧程度。
我的习惯:做市策略里,我会把相对价差超过0.5%的品种标记为「高摩擦品种」,这类品种不适合高频做市,更适合做趋势单。

3.2 订单簿斜率(Order Book Slope)

订单簿斜率,说白了就是看「挂单的陡峭程度」。你想象一下,买一到买十的价格和挂单量,连成一条线。这条线的斜率,就是订单簿斜率。

怎么算?

我个人习惯用线性回归去拟合价格-累计挂单量的关系。斜率越大,说明价格每变动一个单位,挂单量变化越剧烈——市场在这个价位附近有很强的支撑或阻力。

# 计算买单斜率(简化版)
def calc_bid_slope(bids):
    # bids: [(price, volume), ...] 按价格降序
    prices = [p for p, v in bids]
    cum_vol = [sum(v for _, v in bids[:i+1]) for i in range(len(bids))]
    # 用最小二乘法拟合
    slope = np.polyfit(prices, cum_vol, 1)[0]
    return slope

我曾经在ETH的订单簿上发现一个有趣现象:当买单斜率突然变陡,而卖单斜率变平缓时,价格大概率会在5分钟内上涨。为什么会这样?因为买方在密集建仓,卖方却在撤退——典型的吸筹信号。

避坑指南:我曾经用10档数据算斜率,结果发现噪音太大。后来改成只用前5档,效果反而更好。因为深度越深,挂单越可能是「钓鱼单」或「机器人挂单」,参考价值反而下降。

3.3 订单簿不平衡度(Order Book Imbalance)

这个特征,我个人认为是四个里面最有预测能力的。公式:不平衡度 = (买一量 - 卖一量) / (买一量 + 卖一量)。取值范围[-1, 1],正值表示买方强势,负值表示卖方强势。

你想想看,如果买一挂了100个BTC,卖一只有10个BTC,不平衡度是0.82。这说明什么?买方在抢筹,价格大概率要往上走。反过来也一样。

进阶用法:

  • 多档不平衡度:计算前3档、前5档的不平衡度,看趋势是否一致。
  • 加权不平衡度:按距离中间价的远近给权重,越近权重越高。
  • 不平衡度变化率:过去10笔交易的不平衡度变化,判断动能是否衰竭。
一个真实案例:我在做BTC做市时,发现不平衡度从-0.3突然跳到0.6,但价格只涨了0.1%。我当时觉得不对劲——买方这么猛,价格怎么不动?后来发现是有人在买一挂了巨量买单,但同时在卖二挂了更大的卖单,典型的「托单出货」。嗯,不平衡度要结合价格变化一起看,不能只看单一指标。

3.4 成交量分布(Volume Profile)

成交量分布,不是看「成交了多少」,而是看「在什么价格成交了多少」。这个特征对做市商特别重要,因为它告诉你市场的「价值区域」在哪里。

核心概念:

指标 含义 做市应用
POC(控制点) 成交量最大的价格 做市报价的参考中心
VA(价值区域) 成交量占比70%的价格区间 在这个区间内做市,风险最低
VAH/VAL 价值区域的高/低点 突破VAH看多,跌破VAL看空

我个人习惯把成交量分布和订单簿斜率结合起来用。比如,当POC附近出现大斜率支撑,我会在这个位置加大做市仓位。因为市场已经用真金白银验证过这个价格是「合理」的。

一个小技巧:成交量分布最好用过去24小时的数据,太短了噪音大,太长了反应迟钝。我一般用1小时K线来构建,效果比较均衡。

3.5 四个特征的综合应用

单独看任何一个特征,都容易掉坑里。我习惯把这四个特征组合成一个「做市信号矩阵」:

# 伪代码:综合信号
def composite_signal(bid_ask_spread, slope_bid, slope_ask, imbalance, volume_profile):
    score = 0
    # 价差小,加分
    if bid_ask_spread < 0.001:
        score += 1
    # 买单斜率大于卖单斜率,加分
    if slope_bid > slope_ask:
        score += 1
    # 不平衡度偏正,加分
    if imbalance > 0.3:
        score += 1
    # 当前价格在价值区域内,加分
    if volume_profile['VAL'] < current_price < volume_profile['VAH']:
        score += 1
    return score

当综合得分大于等于3时,我才会考虑加大做市力度。得分低于2时,我会缩小报价宽度,甚至暂时离场观望。

我曾经犯过的错:有一段时间我太迷信不平衡度,结果在某个山寨币上吃了大亏。不平衡度显示买方极度强势,我重仓做多,结果价格瞬间暴跌。后来复盘发现,那是几个大账户在对倒制造假象。所以,特征工程一定要结合成交量分布一起看——真金白银的成交量,比挂单量更可信。

好了,这四个特征,每一个单独拿出来都能写一篇文章。但做市决策不是靠单一指标,而是靠组合拳。你想想看,如果只看价差,你可能错过趋势;只看斜率,你可能被钓鱼单骗;只看不平衡度,你可能被对倒坑;只看成交量分布,你可能反应太慢。四个结合起来,才能构建一个相对稳健的做市策略。

嗯,特征工程这块,说到底就是「去伪存真」。盘口数据里90%都是噪音,你要做的,就是找到那10%的信号。


专注资料整理