1. 容错机制概述:为什么多品种交易系统需要容错?
做量化交易这些年,我见过太多系统在关键时刻掉链子了。说实话,单品种交易出问题,最多就是那一只票亏点钱。但多品种系统一旦崩了,那场面——几十个品种同时失控,想想都头疼。
你可能会问:不就是交易软件吗?能出多大问题?嗯,我跟你讲讲我亲身经历的几个场景,你就明白了。
1.1 为什么多品种系统更脆弱?
单品种交易,就像你只盯着一个炉子炒菜。多品种呢?相当于同时看着十个炉子。任何一个炉子出问题,都可能引发连锁反应。
我举个例子。你同时跑着50个期货品种的策略。突然网络断了10秒钟。单品种系统可能就错过一个开仓点。但多品种呢?50个品种的订单全部卡住,恢复后瞬间涌出,交易所直接给你拒单——这叫“雪崩效应”。
说白了,多品种系统的容错,不是“要不要”的问题,而是“怎么活下来”的问题。
1.2 常见故障类型——我踩过的坑
这些年我整理了一下,多品种交易系统最常见的故障,基本就这四类。每一类我都吃过亏。
1. 网络中断
这个最要命。我记得有一次,机房光纤被施工队挖断了。整整15分钟,所有品种的行情和订单全部断联。
你以为只是收不到数据?没那么简单:
- 已发出的订单不知道成交了没有
- 策略还在本地计算,但发不出去
- 恢复后大量积压订单同时涌入
我当时的教训是:网络中断不是“暂停”,而是“失忆”。恢复后你必须能回答三个问题:哪些单成交了?哪些没成交?哪些需要撤单?
2. 交易所宕机
这个我遇到过两次。一次是上期所的结算系统挂了,另一次是中金所的报单通道拥堵。
交易所宕机有个特点:它不是全挂,而是部分功能挂。比如:
- 行情还能收到,但报单被拒
- 或者报单能发,但撤单没反应
- 最坑的是——不同品种恢复时间不一样
我建议你记住一句话:交易所宕机时,你的系统必须能“半死不活”地运行。该停的品种停,该继续的继续,不能一刀切。
3. 数据源异常
这个坑最隐蔽。数据源不是“有”或“没有”的问题,而是“对”或“错”的问题。
我曾经遇到过一个bug:某个数据源在股指期货的Tick数据里,偶尔会多出一位小数。比如价格应该是3500.2,它给你传3500.20。就这一个字符,导致我的策略算出的信号全错了。
更可怕的是:
- 数据延迟——你以为当前价格是3500,实际已经是3510了
- 数据重复——同一个Tick推送两次,策略以为成交了两笔
- 数据缺失——中间跳过一个Tick,策略的指标全算歪了
4. 订单执行失败
这个最让人抓狂。你策略算好了,信号发出了,结果订单没成交。
原因五花八门:
- 资金不足——某个品种占用保证金算错了
- 风控拦截——单品种仓位超限了
- 交易所拒单——价格不在涨跌停范围内
- 券商接口bug——这个我遇到最多次
我告诉你一个残酷的事实:多品种系统里,订单执行失败是常态,不是异常。你每天发1000个订单,总有几十个会出问题。关键是——你怎么处理这些“半死不活”的订单。
1.3 容错的核心逻辑
说了这么多问题,那容错到底怎么做?我总结了一个三层模型:
这个模型我用了好几年,核心思想就一句话:先发现、再判断、最后恢复。别想着一步到位,那是不可能的。
1.4 一个真实的教训
最后分享一个我自己的案例。2019年,我跑着一套30个品种的CTA策略。有一天晚上,某个数据源突然延迟了3秒。
3秒,你觉得长吗?
对于高频交易来说,3秒足够让价格跑出10个tick。我的策略以为还在3500,实际已经3510了。结果呢?30个品种全部按错误价格开仓,一晚上亏了2%的净值。
事后复盘,我发现问题出在哪?
- 没有数据延迟检测——我以为数据源永远可靠
- 没有品种级熔断——一个数据源坏了,所有品种跟着遭殃
- 没有手动干预接口——发现问题了,却没法快速停止
从那以后,我给自己定了个规矩:每个品种的容错机制,都要单独写、单独测、单独部署。别想着“一个方案管所有”,那是在赌运气。
好了,这一章我们聊了为什么多品种系统需要容错,以及最常见的四类故障。下一章,我会详细讲怎么设计一个“检测层”——也就是怎么第一时间发现这些故障。记住,发现得越早,损失越小。
公众号:蓝海资料掘金营,微信deep3321