4. 盘口策略信号定义与回测执行
盘口策略的核心不在于“看到盘口变化就下单”,而在于把盘口特征转化为可计算、可复现、可回测的信号。本节围绕两个典型信号——订单簿失衡(Order Book Imbalance, OBI)与大单跟踪(Large Order Tracking)——说明如何定义信号、如何在回测引擎中触发、如何模拟订单执行与成交,并给出可落地的参数与判断依据。为便于说明,本节所有数值均为教学示例或合理假设,不代表真实市场实测结果。
一、信号定义:从盘口快照到可计算指标
盘口数据通常以快照序列形式到达,每个快照包含买一至买N、卖一至卖N的价格与数量。定义信号前必须先固定参照约定:本文中“失衡度”以买盘为正向,OBI > 0 表示买方力量占优,OBI < 0 表示卖方力量占优;价格变动以“最新成交价相对上一快照的变化”计,上涨为正。
订单簿失衡信号:取前K档(示例K=5),计算买方总量与卖方总量:
bid_vol = Σ bid_qty[i], i=1..K
ask_vol = Σ ask_qty[i], i=1..K
OBI = (bid_vol - ask_vol) / (bid_vol + ask_vol) # 取值 [-1, 1]
示例:某快照前5档买量合计 12000 手,卖量合计 8000 手,则 OBI = (12000−8000)/20000 = 0.20。仅凭单点 OBI 不足以触发交易,通常还需加入持续性条件(连续M个快照 OBI > 阈值)与价格条件(买一价未被击穿),以过滤瞬时挂单抖动。
大单跟踪信号:识别单笔或单档挂单量显著高于近期均值的“大单”,并跟踪其后续行为。示例规则:某档挂单量 ≥ 近200个快照该档位挂单量均值的3倍,且持续存在≥3个快照,记为“大单出现”;若该大单在买盘且价格未创新低,视为支撑性大单,产生偏多信号;若大单被快速撤单且价格反向运动,则视为“假支撑”,信号失效。
二、回测引擎中的信号触发与订单执行
回测引擎按时间顺序回放快照,每个快照执行“更新盘口状态 → 计算指标 → 判定信号 → 生成订单 → 模拟成交 → 记录持仓与盈亏”的循环。关键在于信号触发与订单执行必须分离:信号只产生“意图”,订单执行才决定成交价与成交量,二者混在一起会导致回测结果虚高。
订单执行模拟需明确三件事:下单时点(信号所在快照的下一快照开盘执行,避免使用未来信息)、成交价(市价单按对手盘逐档吃单,限价单按价格优先判定是否可成交)、成交量(受对手盘挂单量约束,超出部分按未成交处理或按滑点模型折算)。示例:信号在快照t触发,快照t+1卖一价10.02、卖一量300手,若下单买入500手,则300手以10.02成交,剩余200手按卖二价10.03成交,形成实际滑点。
三、成交模拟的关键细节与常见偏差
回测结果失真往往来自成交模拟过于理想。第一,不能假设信号快照的价格可成交:信号基于快照t的盘口,但下单到达时盘口可能已变化,必须用t+1快照的对手盘模拟。第二,限价单要判定排队与成交概率:若限价买单价等于买一价,需考虑前方排队量,示例可设“成交概率 = 可成交量 / (前方排队量 + 本单量)”,或保守地仅在价格被击穿时成交。第三,大单信号要处理撤单:大单撤单本身是信息,回测中应把“大单消失”作为信号失效事件记录,而不是忽略。
此外,手续费与滑点应显式建模。示例:单边手续费万分之三,市价单滑点按逐档成交均价与信号快照对手价之差计算。若某笔多头信号在10.02买入500手、实际均价10.024,则滑点为0.004元/股,需在盈亏中扣除,否则高频盘口策略的收益会被系统性高估。
四、结果观察与判断依据
回测跑完后,不应只看总收益,而应按信号类型分组统计:OBI信号与大单信号各自的触发次数、胜率、平均盈亏比、平均滑点、信号失效后的反向波动。判断信号是否可用的示例标准:触发次数足够(如≥100次)、胜率与盈亏比组合下期望为正、滑点占预期收益比例不超过30%、最大回撤在可接受范围。若某信号触发频繁但扣除滑点后期望转负,说明信号本身可能被盘口噪声主导,应调整阈值或增加持续性条件,而不是直接投入实盘。
综上,盘口策略信号定义要落到“条件、参数、失效”三要素,回测执行要严格分离信号与成交,成交模拟要覆盖逐档吃单、部分成交、滑点与手续费。只有把这三层都做扎实,回测报告中的胜率、盈亏比与回撤才具备参考价值,后续的自动报告生成也才有可信的数据基础。