Kaj je šlo narobe v Knight Capitalu
Matej Huš
25. okt 2013 ob 15:18:19
Eden izmed najbolj spektakularnih primerov uporabe zanič programske kode je lanska katastrofa na newyorški borzi, ki podjetje Capital Knight skorajda pahnila v bankrot. Tedaj je njihov program oddal na borzo ogromno količino naročil, ki so povzročila divje nihanje tečajev delni, Knight Capital pa izpostavile trgu za skoraj osem milijard - v najslabšem trenutku so imeli za približno štiri milijarde dolgih (lastniških) pozicij v delnicah in prav toliko kartkih pozicij (dolžniških) pozicij v drugih delnicah. Ko se je katastrofa končala, so posledice postale jasne. Knight Capital je v manj kot uri ustvaril 460 milijonov dolarjev izgube.
Vsem je bilo jasno, da je za katastrofo kriva programska koda, a ni bilo jasno, kaj točno je šlo narobe. Ameriški regulator trga vrednostnih papirjev (SEC) je objavil podrobno poročilo preiskave, ki opisuje dogajanje. Razlog za napako je človeški faktor, in sicer programska napaka in odsotnost postopkov za zagotavljanje kakovosti in preverjanje.
Newyorška borza je tedaj zagnala nov program RLP (Retaily Liquidity Program). Knight Capital je seveda pripravil svojo programsko opremo za RLP. Težave so ležale v programu SMARS, ki posreduje naročila. SMARS deluje kot vmesnik med trgovalno platformo, ki jo Knight Capital nudi svojim strankam, in borzo. SMARS zbira naročila strank in jih v paketno posreduje na trg. V SMARS-u so zato morali popraviti nekaj kode, da bi delovala z RLP, česar so se lotili površno.
Pobrisali so del skorajda devet let stare kode, ki ni bila več v uporabi. Potem so uporabili zastavico za klicanje nove kode, ki je predhodno klicala staro kodo. Problem sega v letu 2005, ko so program nekoliko spremenili (prestavili so štetje naročil), zaradi česar stara funkcija ni več pravilno delovala. Toda ker so jo nehali uporabljati v letu 2003, tega ni nihče ugotovil. Če bi jo pobrisali, bi bilo vse pod nadzorom.
Nov program so naložili na sedem strežnikov, medtem ko ga na osmega niso. Ko je potem vmesnik za RLP stekel na osmem strežniku, je v resnici klical staro funkcijo, ki pa je sedaj delovala napačno zaradi sprememb iz leta 2005. Ker so prestavili ravno štetje naročil, je program v neskončnosto oddajal naročila. Podrobnejši opis je v SEC-ovem poročilu, tule pa je povzetek.
SEC je ugotovil, da je bila napaka posledica slabih praks v podjetju. Spremembe in naloge se niso nikjer centralno beležile, ampak je vsak program popravil, kar je moral, ne da bi vodili evidenco. Nedopustno je, da so na računalnike lahko naložili program dveh različnih verzij, pa tega ni noben nadzor opazil pred zagonom.
Poleg tega je Knight Capital počel še nekaj stvari, ki niso dovoljene. Tak primer je gola kratka prodaja (naked shorting), kakor imenujemo oddajanje prodajnih naročil za delnice, ki jih nimamo v lasti. Če pred poravnavo takega naročila delnic ne priskrbimo, prodaja ne steče (failure to deliver). To je prepovedano, ker taka ponudba zavaja in tišči ceno dol. Normalne kratke prodaje, kjer si delnice spodobimo, jih potem prodamo, in nato kupimo nazaj po nižji ceni, seveda ni problematična.