4. 盘口状态的特征工程

十档盘口原始数据是一组“位置—价格—数量”的二维快照:买一到买十、卖一到卖十,每档各有价格和挂单量。直接把这些数字画成柱状图,读者只能看到“哪一档挂得多”,却很难回答“此刻是买方主导还是卖方主导”“大单是压在某档还是均匀铺开”“盘口是在变厚还是变薄”这类语义问题。特征工程的任务,就是把原始档位数据压缩成若干有明确金融含义的衍生指标,让后续的可视化不再堆砌数字,而是直接呈现“压力、重心、深度、松紧”这些可解释的维度。

一、五个核心指标的定义与计算口径

先约定符号:买一至买十的价格为 bp1…bp10、数量为 bv1…bv10;卖一至卖十的价格为 ap1…ap10、数量为 av1…av10。所有数量单位统一为“手”,价格单位统一为“元”。

买卖压力比(OBR,Order Book Ratio)衡量买卖两侧挂单量的相对强弱。最常用的是十档总量比:

OBR = Σbv(1..10) / (Σbv(1..10) + Σav(1..10))

取值落在 0~1 之间,0.5 表示买卖均衡,大于 0.5 表示买方挂单占优。若希望突出近端档位的影响,可改用加权版本,例如买一侧权重 w_i = 1/i,让买一、卖一的权重最高。两种口径必须固定一种并在全课程中保持一致,否则跨时点比较会失真。

加权均价(VWAP_book)把十档价格按挂单量加权,得到盘口的价格重心:

买侧加权均价 = Σ(bp_i × bv_i) / Σbv_i
卖侧加权均价 = Σ(ap_i × av_i) / Σav_i

它比买一/卖一更能反映“资金真正堆在哪个价位”。当买侧加权均价明显低于买一价时,说明买盘重心后撤,近端支撑偏薄。

档位深度变化率刻画盘口厚度的时间演化。以第 i 档为例,在相邻两个快照之间:

Δdepth_i = (q_i,t − q_i,t−1) / max(q_i,t−1, 1)

分母取 max(…,1) 是为了避免上一时刻该档为空时除零。实际使用中通常再对十档求和得到总深度变化率,或单独观察买一、卖一的变化率以捕捉“撤单/补单”动作。

价差(Spread)与中间价(Mid)是最基础的两个量:

Spread = ap1 − bp1
Mid = (ap1 + bp1) / 2

价差反映即时流动性的松紧,中间价则是后续所有“相对位置”类可视化的基准锚点。例如把十档价格换算成“距中间价的百分比偏移”,就能把不同价位的股票放在同一坐标系下比较。

二、指标之间的语义分工

这五个指标并非并列堆叠,而是各有分工:价差与中间价描述“盘口的骨架位置”,是坐标基准;加权均价描述“重心的偏移”,回答买卖盘重心偏向哪一侧;买卖压力比描述“总量的强弱”,是一个标量化的多空温度计;档位深度变化率描述“厚度的动态”,捕捉盘口是在增厚还是被抽薄。把它们组合起来,才能支撑“压力—重心—深度—松紧”四类可视化语义。

十档盘口原始数据 → 五类衍生指标 → 可视化语义维度 原始快照 卖十 … 卖一 ap_i / av_i 买一 … 买十 bp_i / bv_i 每 3 秒一个 时间序列快照 20 个价格/数量 字段 买卖压力比 OBR Σbv / (Σbv + Σav) 加权均价 Σ(p_i·q_i) / Σq_i 档位深度变化率 (q_t − q_t−1) / max(q_t−1,1) 价差 Spread ap1 − bp1 中间价 Mid (ap1 + bp1) / 2 多空强弱温度 压力仪表盘 / 双色面积条 价格重心偏移 重心线与中间价的偏离带 盘口厚度动态 深度热力图 / 增厚-抽薄色阶 流动性松紧 价差带宽 / 松紧状态色 统一坐标基准 相对中间价的百分比偏移轴 注:所有指标均基于同一快照口径计算,跨时点比较前需固定权重与归一化方式

三、一个可复现的计算示例

假设某只股票某一时刻的盘口(示例数据,仅用于演示口径):买一 10.00 元 / 300 手,买二 9.99 元 / 500 手,买三 9.98 元 / 800 手;卖一 10.01 元 / 200 手,卖二 10.02 元 / 400 手,卖三 10.03 元 / 900 手。为简化,只取三档。

买卖压力比:买方总量 1600,卖方总量 1500,OBR = 1600 / 3100 ≈ 0.516,略偏买方。买侧加权均价 = (10.00×300 + 9.99×500 + 9.98×800) / 1600 ≈ 9.9875;卖侧加权均价 = (10.01×200 + 10.02×400 + 10.03×900) / 1500 ≈ 10.0247。价差 = 0.01,中间价 = 10.005。若上一快照买一数量为 500 手,则买一深度变化率 = (300 − 500) / 500 = −0.4,说明买一被抽薄 40%。

把这些数字放回语义层看:OBR 接近 0.5 说明总量均衡,但买侧加权均价低于中间价约 0.0175 元、卖侧高于中间价约 0.0197 元,重心略偏卖方;买一深度变化率 −0.4 提示近端支撑在减弱。三个指标合起来给出的判断,比单看“买方 1600 手、卖方 1500 手”要丰富得多。

四、工程实现中的几个关键约定

第一,空档处理。十档并非总是满档,某档可能没有挂单。计算加权均价时应跳过数量为 0 的档位,而不是把价格也计入;计算压力比时数量为 0 的档位自然贡献 0,无需特殊处理。第二,归一化。OBR 天然在 0~1 之间,可直接映射颜色;加权均价和中间价是绝对价格,必须转换为“相对中间价的百分比偏移”才能跨股票、跨时段比较。第三,变化率的分母保护。上一时刻数量为 0 时,用 1 作分母下限,避免出现无穷大;同时可对变化率做截断(如限制在 ±3 以内),防止极端撤单把色阶拉爆。第四,时间对齐。变化率依赖相邻快照,必须保证两个快照的时间间隔一致,若采集存在丢帧,应先按时间戳重采样再计算。

建议把五个指标统一封装成一个特征函数,输入为单个快照(含上一快照),输出为固定字段名的字典。这样后续所有可视化图层都从同一份特征表取数,口径不会漂移。

五、从指标到可视化维度的映射原则

特征工程的终点不是算出一堆数,而是让每个数都有明确的“视觉归宿”。压力比适合映射为单一标量的颜色或仪表位置;加权均价与中间价的差值适合映射为一条偏离带;深度变化率适合映射为热力图的色阶;价差适合映射为带宽或状态色。映射时坚持一条原则:一个视觉通道只承载一个语义,不要用同一根柱子的高度同时表示数量和变化率,否则读者无法反推含义。完成这一步,盘口历史状态的可视化才有了稳定的语义骨架。