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 了解我們的方法論.

僅供教育。