MQL5 Cookbook: 处理 BookEvent·进阶篇
📚

MQL5 Cookbook: 处理 BookEvent·进阶篇

(2/3)· 很多 EA 忽略了市场深度事件需显式订阅,导致盘口变化悄无声息地溜走

新手友好 第 2/3 篇
直接在 OnBookEvent 里写逻辑却忘了 MarketBookAdd,事件根本不会触发。不少新手把市场深度当成自动推送,结果 ECN 盘口异动全程漏看。订阅与退订不对称还容易拖垮终端资源。

从盘口快照读卖压密度

上面这段是 MT5 在 11:24:33.812 同一毫秒内,对 SBRF-12.14 的 M1 图表抛出的深度报单日志。所有记录都带 BOOK_TYPE_SELL,说明这一瞬的订单簿变动清一色是卖向挂单或卖向成交,买盘在该帧完全缺席。 具体看价格与体量:7696 挂了 21 手,7695 仅 1 手,7694 为 5 手,7691 是 2 手,而 7688 一口气砸了 106 手。7688 的成交量约是 7696 的 5 倍,价格每下移一档,卖压不是均匀铺开,而是在远端某个价位突然堆积。 这种「近端稀疏、远端暴量」的卖单分布,在外汇或贵金属的高杠杆环境里同样常见,往往暗示某机构或算法在偏离现价几档的位置埋了冰山单。外汇贵金属波动受杠杆放大,此类盘口结构只提示短期倾向,不代表价格必然下行,实际操作前请在 MT5 用 BookEventProcessor 自己抓一帧验证。

「盘口卖压的逐档痕迹」

上面这段日志来自 SBRF-12.14 的 M1 图表,时间戳全部卡在 11:24:33.812,是 BookEventProcessor1 在同一毫秒内抓到的深度报单快照。 从 7686 到 7678 共 8 个档位,全部为 BOOK_TYPE_SELL:7686 挂量 18、7684 挂量 3、7681 挂量 4、7680 挂量 2、7679 挂量 19、7678 挂量 1。卖单沿价格向下铺开,7679 那一档突然堆到 19 手,是相邻档位的 5~19 倍。 这种同毫秒多档全卖的现象,在外汇或贵金属里往往意味着流动性瞬间偏向空头一侧,价格短期可能承压;但汇市和金市杠杆高、反转快,单凭盘口不能断定方向,建议开 MT5 的 Market Book 窗口对照验证。

◍ 从深度快照读卖压与买托的错位

上面这段是 SBRF-12.14 在 M1 周期、11:24:33.812 同一毫秒内由 BookEventProcessor1 吐出的订单簿事件流。同一时间戳里既有 BOOK_TYPE_SELL 也有 BOOK_TYPE_BUY,说明这一帧撮合前后盘口被双向重写,不是单边扫单。 卖侧挂单集中在 7676(量 2)与 7675(量 1),买侧则从 7671 往下铺开:7671 量 40、7670 量 21、7669 量 20,且 7671 这一档的体量约为卖一档的 20 倍。这种买托厚、卖压薄的结构,在盘口层面倾向构成短期下档支撑,但外汇与贵金属类品种跳空频繁,盘口失真概率不低,不能单独作为方向依据。 如果你在 MT5 里跑深度监控,建议把这类同毫秒多类型事件按 Price 排序后看档位落差。当买侧累计量突然超过卖侧 10 倍以上而价格未动,后续几根 M1 多半维持震荡或小幅反弹,可用小布盯盘脚本做统计验证。

逐笔买盘挂单的快照读法

上面这段是 SBRF-12.14 在 M1 周期下、11:24:33.812 同一毫秒内由 BookEventProcessor1 吐出的深度簿事件流。所有记录时间戳完全一致,说明这一批是行情接口在同一次回调里打包推送的,不是分散成交。 价格从 7668 向下排到 7663,每一档都带 Volume 和 BOOK_TYPE_BUY 标记:7668 挂量 17、7667 挂量 2、7666 挂量 151、7665 挂量 2、7664 挂量 49、7663 挂量 3。7666 那一档 151 手的买挂单明显厚于相邻档,是这批快照里最重的支撑墙。 做价格行为的人可以把这种同毫秒快照当成「盘口截面」——它告诉你那一刻主动买方愿意在哪些价位排队。外汇和贵金属这类高杠杆品种,盘口随时被大单抽走,这类截面只能代表瞬时概率,不能当成方向依据。 开 MT5 接一下 OnBookEvent,把同毫秒的 BOOK_TYPE_BUY 按价格排序打印出来,你就能复现上面这种截面,重点看相邻档量差是否突兀。

「逐档买盘快照怎么读」

下面这段是 SBRF-12.14 在 M1 周期上、11:24:33.812 同一毫秒内由 BookEventProcessor1 吐出的深度挂单快照。所有记录时间戳完全一致,说明这是一次订单簿事件的批量回调,而非逐笔推送。 从价格档位看,买类型(BOOK_TYPE_BUY)连续挂在 7662、7661、7660、7659、7658,对应成交量分别是 4、13、2、12、3。7658 是最低挂买价,7662 是当时近端买盘顶,5 档累计买量为 34 手,买卖压力需结合同毫秒卖簿才能判定。 这类原始日志的价值在于:你能拿它跟 OnBookEvent 里的 MqlBookInfo 结构逐字段对表。开 MT5 接一个俄罗斯股票类的模拟品种,跑一分钟往往就能抓到类似同毫秒多档回流,验证事件驱动而不是轮询才扛得住实盘高频。 外汇与贵金属虽多为做市商合成簿,但逻辑相通:同一毫秒多档同类型挂单,往往对应算法单拆单,价格短期倾向沿该侧微量推进,高风险下仍需成交回执确认。

◍ 买盘挂单堆叠的密度异常

上面这段深度事件流来自 SBRF-12.14 的 M1 周期,时间戳全部卡在 11:24:33.812,说明这一毫秒内被动买盘被批量写入订单簿。价格从 7657 向下排到 7652,每一档都带 BOOK_TYPE_BUY 标记,是典型的限价买单挂入。 值得盯的是 7653 那一档:_volume 达到 534,而相邻档位只有 6~25 手,差出 20 倍以上。这种局部巨量挂单在俄股衍生品种里往往意味着做市或大户在某一整数下沿布防,价格短期跌破该档的概率可能偏低。 把这类快照接进「小布盯盘」的深度监控,就能在 MT5 里实时捕获类似密度突变。外汇和贵金属的盘口同样会出现这种非均匀挂单,但杠杆品类跳空频繁,单凭挂单密度判断支撑并不可靠,仍需结合成交量轮廓交叉验证。

把盘口监听交给小布盯盘
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到深度变动与流动性痕迹,你只需在异常时介入决策。

常见问题

它在市场深度状态改变时产生,涉及买卖方向的价格与交易量数组更新,外汇 ECN 账户中反映聚合流动性。
可以,小布盯盘品种页已内置盘口诊断,无需自己写 EA 也能看到深度事件引发的异动。
大概率未在初始化中用 MarketBookAdd 订阅品种,未订阅时终端会忽略该事件处理器。
建议在 OnDeinit 中调用以退订,否则可能像定时器那样持续占用资源,影响终端表现。
近期构建已调整,处理器仅由分配品种调用,不再像早期版本那样全局广播,日志可验证。