经过17年兢兢业业努力成为华尔街领先交易公司之一,灭顶之灾在不到1个小时。
2012年8月1日,是骑士资本的噩梦。一个貌似简单,而且不容易发现的人为失误,让17年的努力付之东流。软件的出错让公司1小时内直接交易损失4.4亿美元。导致第二年夏天,骑士资本被竞争对手Getco LLC收购。
骑士资本(Knight Capital Group),1995年成立,华尔街赫赫有名的证券公司。鼎盛时期交易量占纽交所17.3%,纳斯达克交易所16.9%。
公司除正常经纪业务外,还给客户提供交易平台系统,为高频交易服务。这套嵌入式量化模型驱动的电子交易平台,不仅仅根据市场数据和相关信息给客户提供决策参考,也能通过该交易所接口帮助客户完成自动高速下单交易(我国国内已经关闭自动下单接口)。
高度程序化的量化交易系统是骑士资本高效优质服务客户的基础平台。简单说就是投资证券的客户,根据设定好的交易规则,软件能够自动帮你做“买”和“卖”的交易。交易系统智能化程度较高,对于大额订单,它会拆分成小单,分别购买不同的股票。让个股不会有太大的价格波动。
先解释一个名词“暗池(dark pool)”。假设我手里有2000万股A股票,希望一天卖掉。如果直接挂A股票的市价卖,由于抛盘数量大,股价肯定下跌。所以比起交易速度,交易的隐蔽性更重要。但通过普通交易软件挂出公众投资者都能看到有巨额抛单,最后成交价格肯定比我挂出的价格要低。为了减少这种负面影响, 我会发送经纪商一条指令 ”暗中大额卖出“(sell the block dark) 。这条指令表示,经纪商将订单传送至若干个隐秘的客户寻找对手方执行。 这种”变暗“的策略在匿名性和市场冲击方面,让经纪商拥有了非常关键的优势。类似场内“不显示”的大宗交易。这样对股票价格稳定带来好处,也能促进流动性。
2011年10月,纽约证券交易所提出要求经纪商支持零售流动性计划(RLP),也就是暗池功能。
2012年6月上旬,纽交所获得美国证监会的批准允许提供“RLP”功能,并宣布RLP功能将在2012年8月1日上线。
交易商调试上线时间只有30多天时间。
骑士资本的客户大部分是证券交易经纪商,合作客户有大量金融服务巨头。市场要求他们不能放弃这一块交易市场。
对骑士资本的软件开发团队只有1个月也的时间从开发、测试到上线。他们如火如荼地工作。这次他们需要修改的核心交易模块叫SMARS(智能市场准入路由系统)。
SMARS每秒执行几千个订单,而且几毫秒内就能表数十个不同交易所之间的价格。它能接收上游用户订单,并拆分后下发到交易所撮合交易。
然而他们的交易系统中还存在一些以前升级版本时候留下的重构代码和测试代码。其中一个名叫“Power Peg”的订单算法代码是当时一个工程师写的测试程序,该程序执行的指令是高买低卖的测试策略。这种在系统中保留“死代码”的做法在大型系统中很常见。
不知道是文档错误还是工程师失误,这次升级修改的RLP代码用的启动开关标志与“Power Peg”算法开关标志位是同一个。系统升级后,激活了高买低卖的算法。
随着8月1日的临近,上线前一周工程师手动将 SMARS 中的新 RLP 代码部署到其八台服务器。这时,工程师犯了一个致命错误,没有将新代码复制到其中一台服务器上。他们软件升级居然没有相应的审核机制,也没有自动系统提醒机制,更没有进行回归测试。匆匆忙忙就上线了。
8 月 1 日,美国东部标准时间早上 8:01,名为BNET的内部系统自动生成97封告警邮件发送一给骑士资本的工程师。但是这些机器邮件并未得到工作人员的注意。也就让骑士资本错过了最后一次修复系统的机会。
上午 9:30,纽约证券交易所开盘交易,交易系统开始接收来自经纪交易商的信息 RLP 订单,并且 SMARS 将传入的工作分发到其服务器。拥有新 RLP 代码的七台服务器正确处理了订单。然而,发送到第八台服务器的订单带有被重新利用的标志激活的有缺陷的 Power Peg 代码。该服务器开始为每个传入的父订单连续发送子订单,而不是考虑 Knight 已经从其他交易场所收到的已确认执行的数量。
灾难性的交易开始了。有缺陷的 Power Peg 代码处理的 212 个传入的父订单,SMARS 每秒发送数千个子订单,这些订单会高买低卖,导致在大约 45 分钟内对 154 支股票进行 400 万次执行,超过 3.97 亿股。其中 75 只股票,骑士资本以一己之力推高 5%以上的涨幅,占交易量的 20% 以上;37 只股票的价格暴跌10%,骑士资本交易量的 50% 以上。
9 点 34 分,纽约证券交易所的计算机分析师注意到市场交易量是正常水平的两倍,并将交易量飙升追溯到骑士资本,并马上通知其首席信息官。
骑士资本迅速召集公司顶级 IT 人员,花了整整 20 分钟才找到出问题的原因。
9点50分,纽交所触发熔断机制,自动暂停多只股票的交易。
9 点 58 分,骑士资本的工程师才确定了根本原因并关闭了所有服务器上的 SMARS;然而,损害已经造成。奈特在 154 只股票中执行了超过 400 万次交易,总计超过 3.97 亿股;它在 80 只股票中持有约 35 亿美元多单,并在 74 只股票中持有约 31.5 亿美元的空单。
惊魂未定的骑士资本随着事件的发生,股价从8月1日的10.33美元下跌到2.58美元。而且重量级客户TDA证券、先锋基金和富国基金都宣布停止向骑士资本发送交易订单。事后统计,在交易1个小时,骑士资本购买了约70亿美元的股票期货。按照证券交易规则,骑士资本必须3天后支付这70亿美元的费用。当然,他根本支付不起。
骑士资本向交易所申请取消这些交易订单,美国证券交易所主席根据法规只取消了其中的6只交易股票,其他的不同意取消。
骑士资本如果次日以更低的价格抛售股票寸头,那么市场可能再次熔断。为了稳定市场,高盛同意花费4.4亿美元,折扣价收购骑士资本手里被BUG软件购买进来的部分持仓。
一周后,骑士资本获得4亿美元的资本支持。第二年夏天,他被竞争对手收购。
多年以后,面对骑士资本原CEO采访时,他依旧认为骑士资本不是技术公司,是使用技术的经济公司。显然他对技术看作辅佐功能,而不是公司核心竞争力。对于多系统耦合的复杂系统,减少灾难性失败的策略:
1、 意识层面
灾难性的失败不是来自外部,而是来自内部技术故障或我们错误的组合。
2、 工具和方法层面
引入事前、事后、复盘等方法,如果骑士资本能够严格执行现代软件开发和运营实践的方法,或许事件不会发生。比如使用版本控制、编写测试单元、代码审查、自动化测试、自动化部署、分布部署过程、风险管理等。
3、 时间管理
时间表是骑士资本未能提供 RLP 解决方案的另一个原因 。IT 项目经理和 CIO 应该推迟过分激进的交付计划,并用替代的分阶段计划来对抗其业务领导者。30 天的时间来实施、测试和部署算法交易系统的重大变化,该系统用于使市场每天价值数十亿美元,这是冲动、幼稚和鲁莽的。
4、 鼓励不同意见
发出警告后也没有理会,让最后1小时寻找错误的时间白白浪费。企业必须奖励高效奖励机制,鼓励不同意见的有效提出。
一年之后,2013年10月16日,美国证监会对骑士资本就8月1日违规交易事件罚款1200万美元。
联系客服