复盘一段行情,某只股票的价格突然凭空缺了两个月------不是数据丢了,是停牌。停牌期间没有交易,K 线上一个大洞。数据可以"缺",回测不行:洞怎么填、停牌期间算不算收益、信号撞上停牌怎么办,每一个都是坑。
停牌是什么
暂停交易。常见原因:
- 筹划重大事项:资产重组、收购、吸收合并------停最久,几周到几个月
- 例行事务:财报披露、股东大会、重要公告------通常停一两天
- 监管核查:异常波动、问询------时间不定
停牌期间没有行情,但股票还在(多数情况)。最极端的是吸收合并:停牌后直接摘牌退市,再没有复牌日。
对量化来说,停牌是三个麻烦
麻烦一:数据出现"洞"。 停牌期间没有 bar,回测的连续价格序列断掉了。直接"向前填充"(用停牌前最后一天的价格填满)是最常见的做法,但代价是虚假的"零涨跌"------停牌日不是"没涨没跌",是"没有交易",两者语义完全不同。
麻烦二:复牌补涨补跌。 停牌期间市场不会等你。大盘跌了 15%、利好利空变了,复牌日价格一次性跳空到位------补跌或补涨。停牌前 10 元的票,停牌 3 个月、期间大盘跌 15%,复牌开盘可能直接 8.5 元。持有者这 3 个月什么都做不了,流动性被锁死。"停牌避险"是幻觉------躲过了下跌,也躲过了卖出。
麻烦三:信号撞上停牌。 信号算出来,停牌期间执行不了。T 日出信号、次日停牌,买入挂起,复牌那天可能已经跳空。动量这类因子更惨:停牌 2 个月后复牌,"20 日动量"算出来是 2 个月前的老数据,因子值已过期。

回测该怎么处理
- 停牌不可交易:信号日或成交日遇停牌,交易挂起、顺延到复牌日,或者放弃该信号。我系统里就真实触发过:某票信号后恰逢停牌(吸收合并),交易挂起
- 价格填充 :停牌日可以用前收价填充,但停牌日收益必须算 0,不能让它参与涨跌统计;复牌日才恢复真实收益
- 校验对账:停牌事件要和 bar 对账------停牌区间里不该有 bar 行,有就得查。我的系统校验时就对过:71 天停牌记录,其中 7 天有 bar 行且标记一致,逐条核对
- 因子层面:动量、波动率这类依赖连续价格的因子,要么剔除停牌样本、要么接受停牌股因子值"过期"的事实
常见误区
- 以为停牌日"没涨没跌",填充后当普通交易日处理------没有交易不等于零收益
- 回测里停牌照常买卖------现实是挂起,不是成交
- 用停牌股的旧价格算指数、算基准------权重还在,价格已经失真
- 想着"复牌前买进去吃补涨"------停牌期间根本买不进,这个想法的前提就不成立
小结
停牌是数据里的洞,处理原则三条:停牌不可交易、停牌日收益算零、信号顺延或放弃。复牌补涨补跌是停牌最伤人的副作用------躲过的下跌,是以失去流动性为代价的。