Sam·2026-05-17·12 min read·Reviewed 2026-05-17T00:00:00.000Z

骑士资本崩盘:45分钟错误代码造成4.4亿美元损失(2012年)

市场结构深度分析

2012年8月1日,一次部署失误使骑士资本一台服务器上运行着2003年的休眠代码。45分钟内公司发出400万笔非预期订单,累积70亿美元意外仓位,损失4.4亿美元,结束了美国最大零售股票做市商的历史。

Knight CapitalHigh Frequency TradingMarket StructureAlgorithmic TradingSec Rule 15c3 5Deployment Failure
来源: Historical records

编辑注释

2012年8月1日上午,骑士资本是美国最大的零售股票做市商。到那天上午结束时,它已陷入资不抵债。原因不是市场波动、流氓交易员或敌对行为者,而是一段漏掉一台服务器的部署脚本,以及八年前被悄悄改用的一个标志位。

目录

8月1日的开盘

2012年8月1日美国东部时间上午9点30分,纽约证券交易所的开盘钟声一如既往地敲响。几秒钟内,综合行情磁带开始记录流入154只交易最活跃的NYSE上市股票的订单,不到一分钟那些订单就开始出现异常。在综合行情磁带和指定做市商(DMM)席位的专家屏幕上,相同的模式不断在受影响的代码中重复——一笔买价被吃掉,一笔卖价被打掉,几乎瞬时又有一笔买价以高一档的价格出现,再一笔,又再一笔。这些订单来自一个单一的券商代码:NITE,美国最大的零售股票做市商骑士资本美洲公司(Knight Capital Americas)的标识。

2012年8月1日早晨的骑士,承担了大约百分之十五至十七的美国上市股票零售订单流路由。它是TD Ameritrade、Scottrade、E*TRADE以及大多数地区折扣券商背后的批发对手方。SMARS——智能市场访问路由系统(Smart Market Access Routing System)——是决定每个母订单应放在哪里、发射哪些子订单、以及部分成交回执到达时如何行动的生产管道。SMARS 部署在新泽西骑士数据中心的八台生产服务器上。8月1日上午,其中七台运行着上一周发布的、用于支持纽交所新设零售流动性计划的部署。另一台则没有(US Securities and Exchange Commission, 2013)。

那个早晨骑士资本集团股票的价格走势,几乎是技术故障的纯粹记录,因为没有任何其他因素在驱动股价。公司当天开盘价约为10.33美元,收盘约6.94美元,在向高盛的仓位平仓被入账并预先披露之后的次日收于约2.58美元。到8月底,反映救助融资稀释的股价稳定在2.50美元以下。这条价格轨迹的形状比任何内部备忘录都更能反映市场对一个星期三早晨四十五分钟里所发生事件的看法。

Knight Capital Group (KCG) share price, July–August 2012

Power Peg 与一枚标志位被悄悄改用

直接的技术原因得名于一段自2003年以来未曾在生产环境中使用的软件例程,名为Power Peg。在网络泡沫破灭之后写成的原版 Power Peg 的功能,是在一个母订单中"参与"——将一系列子订单按一个随其他子订单价格而变动的价格"钉"入市场,作为对路由逻辑的受控测试自我成交。Power Peg 有两个突出特征。其一,按其设计这个例程会忽略累计完成数量。一笔成交回报的子订单不会减少母订单上的剩余目标数量。其二,Power Peg 由订单配置中的一个单一标志位控制,最初是内部文档中标注为测试装置"累计数量标志位(cumulative quantity flag)"的那个参数取值(Patterson, 2012)。

2003年该标志位已从实时交易中退役。然而 Power Peg 代码并未被删除。它作为休眠的测试脚手架留在 SMARS 代码库中。2005年那枚标志位被改作他用:一项新功能——名为"RLPRetail"的路由选项——被赋予了同一个标志值,前提是假定 Power Peg 不会再被调用,并假定其底层脚手架已被清理。以这种方式将一枚标志位改作他用的决定,在某个周二下午的截止压力下看起来是合理的,但在七年后的某个周三早晨却是致命的。

2012年7月下旬骑士着手准备 SMARS 发布版本,以适配定于8月1日上线的纽交所零售流动性计划。RLP 是一项小幅的市场结构创新——允许带零售标记的订单不仅与场外的批发做市商,也能与纽交所内部低于一美分的价格改进进行互动——但要求骑士更新 SMARS 的路由表和订单标签逻辑。该发布捆绑为一次部署,由一名资深技术员在2012年7月25日(周三)至7月31日(周二)期间手动安装到八台 SMARS 服务器中的每一台。没有自动化的部署后验证。每台主机的安装不要求第二位工程师签字。发布说明并未单独指出:新代码改变了对累计数量标志位的解读,如果 Power Peg 仍然存在就会唤醒它。

四十五分钟

下表的时间细节是根据2013年 SEC 对骑士资本美洲公司的和解令、FINRA 的调查档案以及2012年下半年在券商技术社区流传的事后分析重建的。时间为2012年8月1日美国东部夏令时。

时间事件累计损失估计
04:30盘前:骑士技术人员在生产环境启用新的 RLP 路由代码。第八台 SMARS 服务器尚未更新,仍载有2003年的 Power Peg 例程
09:30:00市场开盘。SMARS 开始接收对154只符合 RLP 条件的纽交所标的的活跃母订单。七台服务器正确处理。第八台将被改用的标志位解读为休眠 Power Peg 例程的触发信号$0
09:31第八台服务器开始针对内存中的母订单发射子订单,不递减剩余数量。受影响代码的成交量飙升。约每秒8,000笔订单进入综合行情磁带约1,000万美元
09:34内部 P&L 屏幕开始显示在 Wizzard Software(WZE)、Reaktor(RKR)和若干中型工业股上异常累积的多头头寸。交易席位人员升级至运营控制中心约3,000万美元
09:45首次确认升级至高级风险管理。工程师开始排查情况,但无法识别哪一台 SMARS 服务器是发源约1.1亿美元
09:48纽交所-LIFFE 专家开始致电骑士询问订单流是否为有意为之。市场结构团队请求交易所限速,但未能完成运营握手约1.35亿美元
09:55骑士工程团队尝试修复:将新的 RLP 代码重新部署到第八台服务器以覆盖 Power Peg。原本用于保持一致性的部署脚本反而把缺陷状态扩散到其余七台服务器,使问题进一步放大约1.8亿美元
10:00订单流以峰值速度持续。纽交所致电骑士高管,要求采取行动。风险官员开始要求人工切断 SMARS 的行情数据订阅约2.6亿美元
10:10骑士做出人工决定,关闭进入 SMARS 的行情数据。没有报价更新,路由引擎停止针对陈旧报价发射新订单约3.65亿美元
10:15最后的子订单完成。SMARS 离线。仓位账面上80只股票多头约35亿美元,74只股票空头约31.5亿美元,合计约70亿美元名义的非预期敞口,涉及约400万笔已成交订单实现约4.15亿美元 + 未平仓盯市

在四十五分钟里,骑士成为了一个没有做市账簿的做市商——这些交易不是买卖价差的捕获,而是未匹配的累积。次日高盛平掉整个仓位时实现的损失约为税前4.4亿美元(Patterson, 2012; Lewis, 2014)。

按事后所有的叙述,那段时间内骑士内部的状况并非清晰冷静的危机管理。位于泽西市的交易楼层喧嚷嘈杂,且越发茫然。当时在交易楼层的一名骑士高管后来对《华尔街日报》表示,SMARS 团队的最初直觉是他们正遭受攻击——可能是拒绝服务或恶意订单注入——而扩散了缺陷状态的重新部署是在尚无人理解第八台服务器的 Power Peg 例程才是源头的情况下做出的。清理动作把伤口扩得更大。

对手方是高盛

8月1日收盘前,骑士手上的仓位账面以绝对值计已价值约70亿美元,盯市损失已达数亿美元的高位。公司的监管资本——按 SEC 与 FINRA 的净资本规则——约为3.65亿美元。在书面上,乃至事实上,骑士在该交易日收盘前就已资不抵债,而把骑士挡在被迫监管清盘之外的,仅仅是少数高管之外没有人知道整个仓位的全貌。骑士首席执行官托马斯·乔伊斯(Thomas Joyce)当时在康涅狄格家中养护膝盖手术后的康复,于上午11时左右通过电话被告知规模。他在当天下午返回泽西市(Patterson, 2012)。

乔伊斯的第一通电话不是打给监管者或救助资方,而是打给高盛的股票交易席位。高盛在数小时内同意以约定的折让,于次日早晨从骑士账上接走整个仓位。这一安排把骑士从在分散场所的强制清算中救了出来——在已经因事件而失序的154只标的上做清算,会形成远低于高盛接受水平的成交。4.4亿美元的实现损失反映了高盛收取的折让。如果没有那一笔单一对手方安排,8月2日报告的损失数字会显著更大,骑士将以公开监管失败的状态进入第二个交易日。

Photograph of the New York Stock Exchange building and Broad Street from the early twentieth century, with crowds outside the colonnaded entrance
二十世纪初的纽约证券交易所。同一座位于布罗德街的建筑,是2012年8月1日纽交所零售流动性计划上线的场所,也是引发骑士资本崩盘的部署所处的背景。到2012年时交易厅在很大程度上已具象征意义;推动订单的实际是泽西市的 SMARS 路由引擎以及位于马瓦(Mahwah)与卡特利特(Cartaret)的撮合引擎。Library of Congress / Wikimedia Commons (public domain)

SEC 刚刚写就的规则

骑士的失败违反了 SEC 在2010年最终敲定、直到2011年才完全生效、并在2012年分阶段实施的一项规则。规则15c3-5——市场准入规则(Market Access Rule)——要求任何向交易所或替代交易系统提供准入的券商必须维持足以管理该准入相关的财务、监管和运营风险的交易前风险控制和监督程序。该规则明确将防止错误下单的控制纳入考量。它直接是对2010年5月闪电崩盘的回应,与闪电崩盘叙述中追踪的结构性改革互为监管上的姊妹篇。骑士的部署机制——人工的、未文档化的、没有自动验证也无第二人签字——并不满足该标准(US Securities and Exchange Commission, 2013)。

SEC 于2013年10月16日发布的执法令(Release No. 70694)是依据规则15c3-5提起的首例行动。该令认定骑士违反规则,理由是其缺乏指导软件部署的书面程序,没有在接近生产环境的条件下对新 RLP 代码进行充分测试,没有自动化流程在错误订单到达综合行情磁带前对其加以检测,且没有在算法异常行为时由工程人员介入高级风险管理的书面升级程序。当时已以 KCG Holdings 名义运营的骑士不承认也不否认调查认定,缴纳了1,200万美元罚款。该令较短——共13页——但在罗列充分的交易前风险控制框架应包含哪些内容方面异常直接(US Securities and Exchange Commission, 2013)。

同年发布的另一份 CFTC-SEC 关于自动化交易的联合咨询,将这一教训在资产类别和交易场所之间一般化。它就变更管理、源代码版本控制、部署签批、生产环境的自动化验证,以及在出现异常迹象时能切断对外订单流的"紧急停机开关"的设计与测试设定了期望(CFTC-SEC Joint Advisory Committee, 2013)。该咨询不具规则的强制力,但成为 FINRA 检查团队此后评估券商技术治理的模板。

一家15亿美元公司如何在一个周末被再资本化

到2012年8月2日收盘时,骑士的股票较事件前价值已下跌约百分之七十五。两个交易日内市值从约15亿美元降至约2.9亿美元。4.4亿美元的实现损益冲击大于监管资本。如果不进行再资本化,骑士将在数日内无法满足清算所的追加保证金要求。从8月3日早晨到整个周末,由战略投资人和竞争对手组成的财团展开了紧急资本筹集谈判(Lewis, 2014)。

交易于2012年8月6日完成。骑士向由 Jefferies、Blackstone、Getco、Stifel、TD Ameritrade,以及 Stephens Inc. 小额参与组成的群体发行了4亿美元可转换优先股。转股条款将现有股东稀释约百分之七十三。新可转换优先股持有人取得董事会代表权以及通往控股的清晰路径。来自 Getco 的投资在战略上意义最深——Getco 是芝加哥的高频交易公司,本就是骑士在批发做市领域的竞争对手。三个月内 Getco 宣布与骑士合并,2013年7月完成,组建 KCG Holdings。KCG 一直运营至2017年4月,另一家亦有 HFT 血统的 Virtu Financial 以14亿美元现金收购 KCG,2012年8月1日那次部署推动的公司轨迹至此收束。

此后行业建造起的体系

程序层面的教训迅速扩散。在骑士事件后的十二个月内,主要券商重塑了其软件发布流程。部署前的自动化校验——将每台生产主机的运行配置与预期清单进行比对的检查——成为标准。多数券商建立了书面化的紧急停机开关程序,能够以单一触发点在 FIX 引擎层面切断对外订单流,并按季度审计。多家公司将部署权限拆分,使任何单一技术员都不能在没有第二位工程师签字的情况下将代码推上生产,这种安排映射了后台结算长期要求、而前台工程在此之前部分缺失的"四眼原则"。

交易所新增了成员公司层面的错误订单控制,与2010年闪电崩盘之后构建的针对个股的涨跌停限制框架形成互补。FINRA 发布了技术监管指引,涵盖算法交易系统的设计、生产代码清单的维护、对算法开发生命周期年度独立审查的要求,以及将生产代码的任何变更作为正式监管事件加以记录的要求。审计人员开始将代码部署治理纳入券商财务与运营检查。

跨公司响应并不均匀。2014年 SEC 检查人员的一份内部审阅发现,受查券商中约百分之六十实施了与规则一致的书面化发布程序。具备活跃电子做市业务的批发公司走在前列;没有显著高频敞口的机构经纪商则落在后头。骑士事件触发的监管架构仍在持续完善,贯穿骑士事后的若干政策线索也呈现在LIBOR 丑闻巴林银行的崩溃以及2008年金融危机更宏大的运营风险叙述之中。

四十五分钟作为市场结构诊断

阅读骑士资本事件最有启示的方式,是把它看作对 Reg-NMS 之后美国股票市场的一场无意中实施的压力测试。这场测试的结果颇为沉重。综合行情磁带在无运营故障的情况下吸收了400万笔非预期订单。交易所撮合引擎没有崩溃。清算基础设施完成了每一笔交易的清算。结算流程在 T+3 内无争议完成。在场所与基础设施层面上,市场结构是稳健的,这本是同一年另一个早晨可能会被读作宽慰的事实。

那座结构未能吸收的,是单一会员公司订单生成逻辑的失败。架构构建的前提是市场准入提供者要对其自身不打算发出的订单负责。一旦这一前提在单一公司处崩塌,其余架构便没有内置机制能在由此产生的订单成交之前将其拦下。交易所看到的是一个 NITE 订单,依据买卖价规则进行了校验并完成撮合。在券商与撮合引擎之间,并不存在第二层过滤器来检测一个失控的算法——只剩券商自己的交易前控制,而骑士并未维护好这一控制。这个缺口正是结构性的教训,也正是规则15c3-5被设计要堵上的缺口。

时机里还有一个细小的反讽。骑士事件的45分钟,与 SEC 制定市场准入规则所要应对的2010年5月闪电崩盘的持续时间几乎正好相同。规则在2012年8月1日早晨已经生效。骑士尚未对其合规。

托马斯·乔伊斯在8月3日向《华尔街日报》作出公开口径的解释。"由于一个软件问题,我们出现了相对较大的损失,"他说。他没有点名 Power Peg。他始终没有。公司之后的备案文件将该事件描述为"影响纽交所上市证券某些订单路由的技术问题",这一表述抓住了运营事实但未指明该例程。2013年的 SEC 命令是首份点名识别那段休眠代码的公开文件——这段代码自2003年起一直在等待,等待八年之后某个人翻动那枚正好的标志位。

Historical records 了解我们的方法论.

仅供教育。