工程与管理交易测试安全策略

58 个测试 + 保证金硬阻断:给做空策略上双保险

今天很忙。两个独立模块同时推进:MT Rank Snipe 的 58 个测试,和 MARGIN_HARDLOCK 的保证金硬阻断。

你可能会问:做空排行信号和保证金硬阻断有什么关系?关系在于——它们都是防止策略”杀红眼”的机制。 一个从信号质量角度,一个从账户安全角度。


MT Rank Snipe: 58 个测试

微趋势做空排行(MicroTrend Short Rank)是一个新信号源:扫描所有标的,按做空信号强度排序,把最强的推送给执行引擎。

为什么要 58 个测试?因为这个系统有三个容易出错的地方:

1. 多策略并发

同一个标的可能被多个策略同时盯上。测试覆盖:

  • 策略 A 做空、策略 B 做多同一个标的 → 不应该两边都开
  • 策略 A 已持仓、策略 B 再开同方向 → 合并还是拒绝?

2. 数据异常

排行依赖外部数据源(微趋势分数、资金费率)。测试覆盖:

  • 数据源返回空 → fallback 到默认值
  • 数据源返回异常值(999999)→ 不参与排行
  • 数据源超时 → 用上一次的缓存

3. 订单异常

排行推荐 → 执行引擎下单 → 可能被交易所拒绝。测试覆盖:

  • 下单被拒 → 从排行中移除,不重试
  • 部分成交 → 剩下的不追

MARGIN_HARDLOCK:1000% 红线

同一天实现了 MARGIN_HARDLOCK——当保证金比例(mgnRatio)低于 1000% 时,方向性硬阻断所有开仓。不是 DENY(可 override),是 HARD BLOCK(不可 override)。

为什么是 1000%?不是拍脑袋的。

期货账户的保证金比例 = 权益 / 持仓保证金。1000% 意味着你有 10 倍于保证金的权益缓冲——即使持仓同时亏损 10%,也不会爆仓。低于这个线,就是杠杆过高。

这跟广告系统的预算硬阻断一样:预算消耗到 100% 时,不再出价——不是降出价,是直接停。因为继续出价只会超预算。

MARGIN_HARDLOCK 也写了 30 个单元测试,覆盖所有 gate path。


元结构映射

概念广告系统交易系统
信号质量广告相关性分数微趋势做空排行
数据异常保护曝光日志缺失 → 用历史 CTR数据源超时 → 用缓存
硬阻断预算耗尽 → 停止出价保证金 < 1000% → HARD BLOCK
可 override 阻断预算预警 → 降出价DENY → 人工可 override

一句话

58 个测试不是追求覆盖率,是覆盖”出错了会亏钱”的路径。MARGIN_HARDLOCK 不是保守,是在你杀红眼之前把你按住。