2. 盘口数据结构解析
要理解买卖价差,先要理解它“住在哪里”。价差不是行情软件凭空算出来的一个数字,而是限价订单簿(Limit Order Book,LOB)中买一价与卖一价之间那段空隙的直接投影。本节我们把盘口数据拆开,看清字段、层级与委托量分布,并定位价差在原始数据中的确切位置。
一、盘口数据的字段构成
一条标准的盘口快照(Level-1 或 Level-2 行情)通常包含以下核心字段:
- 时间戳:快照生成时间,精确到毫秒或微秒,决定数据的新鲜度。
- 买一价 / 卖一价(bid1 / ask1):当前最优买价与最优卖价,是价差计算的两个端点。
- 买一量 / 卖一量(bid1_size / ask1_size):挂在最优价位上的委托数量,反映该价位的即时承接或抛压强度。
- 多档价位与数量:五档、十档行情依次给出 bid2~bid5(或 bid10)、ask2~ask5(或 ask10)及对应委托量。
- 委托笔数(可选):部分行情源提供每档的订单笔数,用于判断该价位是“大单集中”还是“小单堆积”。
以某只示例股票的十档快照为例(以下为教学假设数据,非实测):买一价 10.00 元、买一量 3200 股;卖一价 10.02 元、卖一量 1800 股。则价差 = 10.02 − 10.00 = 0.02 元,相对价差 = 0.02 / 10.01 ≈ 0.20%(以中间价 10.01 为分母)。这 0.02 元就是盘口原始数据中 bid1 与 ask1 两个字段之差,不需要任何额外推导。
二、层级结构:从买一到买十的排列逻辑
限价订单簿的层级遵循严格的价格优先规则:买单按价格从高到低排列,卖单按价格从低到高排列。买一永远是当前最高买价,卖一永远是当前最低卖价。因此,价差恰好位于买一与卖一之间,是订单簿中唯一一段“没有挂单”的价格区间。理解这一点,就能明白为什么价差是衡量即时交易成本最直接的指标:任何市价单成交,都必须先“跨越”这段空白。
五档与十档的区别在于可见深度。五档只展示最优五个价位,十档则多出五个价位。深度越深,越能看出委托量在价格轴上的分布形态——是集中在近端(流动性厚),还是向远端稀疏铺开(流动性薄)。
三、委托量分布:价差之外的第二个观察维度
价差告诉你“跨越一次要付多少”,委托量分布则告诉你“这个价位能承接多少”。两者结合才有实际意义。例如卖一量仅 1800 股,而买一量 3200 股,说明卖方近端挂单偏薄;若此时出现一笔 5000 股的市价买单,吃掉卖一 1800 股后还会继续向上扫卖二、卖三,实际成交均价将高于卖一价,形成冲击成本。因此,盘口分析不能只看价差数字,还要看价差两侧的“厚度”。
观察委托量分布时,可关注三个特征:其一,近端(买一/卖一)量是否显著大于远端,若是则流动性集中、价差相对稳定;其二,是否存在某一档位的“量堆”,如卖三突然出现万手大单,可能构成短期阻力;其三,买卖两侧总量是否失衡,买盘总量远大于卖盘时,价格上行压力较大。这些判断都直接来自盘口原始字段,无需复杂计算。
四、实操:从原始快照中定位价差
假设你拿到一条 JSON 格式的十档快照(教学示例):
{
"symbol": "600XXX",
"timestamp": "2025-03-14T10:15:30.250",
"bids": [[10.00, 3200], [9.98, 2800], [9.96, 4100], ...],
"asks": [[10.02, 1800], [10.04, 2600], [10.06, 2100], ...]
}
提取价差的步骤很直接:取 bids[0][0] 得买一价 10.00,取 asks[0][0] 得卖一价 10.02,相减得 0.02 元。若要计算相对价差,再取两者均值 10.01 作分母,得 0.20%。注意 bids 数组已按价格降序排列、asks 按升序排列,因此索引 0 即为最优价位,无需额外排序。若数据源未保证排序,应先校验 bids[0][0] >= bids[1][0] 且 asks[0][0] <= asks[1][0],否则价差计算会出错。
五、常见误区与校验要点
第一,把“五档”误认为只有五个价位有挂单。五档只是展示前五个价位,订单簿实际深度远不止于此。第二,忽略买卖方向的定义:买一是“有人愿意买的最高价”,卖一是“有人愿意卖的最低价”,价差为正才正常;若出现 ask1 < bid1,说明数据异常或存在跨市场套利,需排查数据源。第三,用最新成交价代替中间价计算相对价差,会导致口径不一致,建议统一以 (bid1 + ask1) / 2 为分母。