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萬美元。