Терять 10 миллионов долларов в минуту. Как софт за 45 минут разорил компанию

07 декабря 2019 в 8:00
Автор: Ян Альшевский

Терять 10 миллионов долларов в минуту. Как софт за 45 минут разорил компанию

Автор: Ян Альшевский

Зарабатывать деньги сложно, приходится уделять этому много времени и сил. Тратить куда проще, но все еще трудозатратно. Чтобы упростить жизнь, придумали автоматизацию: какой-нибудь умный компьютер ворочает деньгами, а человеку остается только наблюдать и снимать сливки — машина может и зарабатывать, и спускать наличность.

Правда, работает это не всегда и не везде. Примером тому служит история с основанной в 1995 году фирмой Knight Capital Group, которая успешно помогала торговать ценными бумагами на крупнейших биржах, пока не пала жертвой компьютерного бага в век цифровых технологий.

Ну как бага. Говорят, что проблема связана с нарушенным циклом разработки программного обеспечения — то ли решили сэкономить, то ли понадеялись на авось, то ли время поджимало. Что в итоге? За время школьного урока — 45 минут — компания потеряла $440 млн, то есть «расход» был примерно $10 млн в минуту.

Один из крупнейших биржевых трейдеров внедрил новое ПО для автоматизации торгов

Из-за спешки не все серверы получили обновление, а устаревшая система не предназначалась для работы в реальных условиях

Инженеры не проверили ПО и не предусмотрели kill switch. В итоге компания потеряла почти полмиллиарда долларов меньше чем за час

Хотели как лучше

Для того чтобы стать «монстром рынка», компании Knight Capital потребовалось 17 лет. Ежедневный оборот торгов с ее участием к моменту «компьютерного инцидента» превышал $20 млрд в сутки, за это же время проводилось 3,3 млрд операций с ценными бумагами. Таким образом, в 2012 году Knight Capital считалась крупнейшим трейдером в США с долей 17—20% на Нью-Йоркской фондовой бирже (NYSE) и бирже NASDAQ.

Все изменилось 1 августа, когда NYSE запланировала запуск Retail Liquidity Program.

Новая система позволяла компаниям уровня Knight Capital предлагать своим клиентам цены на акции чуть интереснее, чем другим инвесторам. То есть RLP имитировала закрытые площадки для торговли крупными объемами ценных бумаг — так называемые дарк-пулы. Их иногда называют конкурентами официальных бирж, так как они уводят клиентов, желающих сэкономить на комиссии.

На практике это выглядит так: бизнесмен Пупкофф хочет продать 100 акций по цене $1,85 за штуку. С помощью RLP их выставляют по цене $185,10 за весь пакет. То есть выгода работает на больших объемах, как и в случае с дарк-пулами.

Упомянутая Knight Capital, как и положено продвинутой во всех отношениях компании, была готова к нововведению и владела подходящим инструментом (а также армией разработчиков из 100 человек) — SMARS. Это был «роутер» для подключения других модулей для торговли ценными бумагами.

Суть разработки заключалась в том, что большой заказ от торговой площадки (компонента компьютерной системы Knight Capital) разбивался на маленькие для поиска продавцов и покупателей, чьи условия отвечают желаемым. Чем больше «родительский» заказ, тем больше «дочерних» генерировала система. Одним из основных достоинств SMARS считалась чрезвычайно высокая скорость обработки заказов — до нескольких тысяч в секунду.

Покупай дороже, продавай дешевле

Планируемое обновление должно было заменить алгоритм Power Peg, которым в компании не пользовались к 2012 году как минимум восемь лет. При этом коды его вызова по-прежнему оставались в основной системе. Почему и зачем — никто не знал.

Еще один важный момент заключался в специфике Power Peg. Разработка представляла собой тестовую систему, которая действовала по алгоритму «покупай по самой высокой цене, продавай по самой низкой». На бирже принято действовать с точностью до наоборот.

Такая особенность Power Peg продиктована необходимостью проверки работы других программных алгоритмов в полностью контролируемой среде. На самом деле никто никогда не планировал, что это решение появится на продакшене.

Новое программное обеспечение вручную накатили на восемь серверов компании. Точнее, оно должно было появиться на восьми серверах, однако работой занимался один-единственный специалист — никто не проверял, все ли сделано корректно. Поэтому на восьмом сервере остался старый код Power Peg, а новый для RLP не появился.

Торопились, не контролировали, забыли обновить

Сыграла свою роль и спешка, в которой действовала Knight Capital, — регулятор предоставил всего месяц на развертывание и настройку системы, не давая до июня 2012 года разрешения на работу RLP. Ответственные за IT топ-менеджеры компании, в свою очередь, озвучили команду: «Надо успеть!»

Считается, что «мертвый код» не должен находиться в системе, однако подобная практика все же встречается в крупных программных продуктах, работающих на протяжении длительного времени. То есть как бы «все как у всех».

Стечением (вероятно) обстоятельств стало то, что для запуска нового алгоритма, «заточенного» под RLP, использовался тот же флаг, что и для запуска тестового Power Peg (а он, напомним, работал «задом наперед» с точки зрения торгов на бирже). Такой подход считают браком — особой выгоды он не несет, но может привести к появлению серьезных ошибок.

Этим все не ограничивалось: SMARS модернизировался на протяжении длительного времени, но регрессионное тестирование (поиск новых ошибок в ранее протестированном функционале) не проводилось. Позабыв, как и что работает, к правилу «покупать дороже, продавать дешевле» добавили еще одно условие: «без ограничений по количеству операций».

Подобное стало возможным из-за переписанного в далеком 2005 году кода: программисты хотели снизить нагрузку на систему и повысить ее эффективность, временно отключив проверку и сопоставление объемов поступающих и выполненных заказов на продажу/покупку акций. В итоге тестовый Power Peg получил карт-бланш на свою деятельность. Об этом никто не знал — обновленные возможности алгоритмов тогда не протестировали (да и зачем?).

И вот незадолго до времени «Х» специалист Knight Capital вручную ставит новое ПО на серверы компании, напутав с одним из восьми. После включения SMARS необновленный сервер начал отправлять письма с низким приоритетом и ошибкой Power Peg disabled. Никто не обратил на них внимания, хотя посланий было 97 штук — это ведь просто письма, а не «варнинги».

Покромсанный Power Peg, как зомби, начал стремительно выполнять команды на продажу и покупку акций, с каждой операцией увеличивая минус — «Покупай дорого, продавай дешево!».

Действия компьютеров Knight Capital привели к резкому росту объема торгов при огромной разбежке в цене на покупку/продажу акций. Трейдеры почти сразу поняли, что происходят странности: «Почему никто не опускает „рубильник“?» Да потому что его не было.

Аварийного выключателя не было

Инженеры Knight Capital не предусмотрели «аварийный выключатель» системы (хотя такая рекомендация со стороны бирж имеется). Не было и инструкции, которая описывала бы действия в подобной ситуации. К тому же работать им приходилось «по живому», на функционирующей биржевой платформе.

Специалисты решили действовать наверняка и приступили к откату кода на серверах. Поэтому спустя короткий промежуток времени вместо одного «зомби»-сервера появилось два. А потом три — удаляли-то «здоровый» код, освобождая дорогу Power Peg.

За 45 минут, которые потребовались на вывод системы из торгов, 212 «родительских» заказов из-за отсутствия ограничений превратились в тысячи «дочерних», было произведено 4 млн операций с 397 млн акций 154 компаний. Движение средств превышало $6,5 млрд, поэтому итоговая потеря $440—460 млн выглядит не так страшно, хотя и очень внушительно.

«Рыцарь» — всё

Компания Knight Capital попросила главу Комиссии по ценным бумагам и биржам (SEC) отменить результаты проведенных торгов, однако правила, введенные в 2010 году из-за Flash Crash (тогда случилось резкое падение фондового рынка США, акции на время рухнули в цене примерно на триллион долларов), препятствовали этому. Какие-то поблажки для Knight Capital сделали, но на общем фоне они казались незначительными.

Томас Джойс, бывший глава Knight Capital

Позже в отчете SEC отмечалось, что руководство компании не было готово к управлению рисками, нужные процедуры не были разработаны, программное обеспечение не контролировалось в процессе работы должным образом, перечислялись иные нарушения правил. Все это привело к штрафу в $12 млн.

Отдельно упоминались ошибки в самом процессе разработки специализированного ПО, а также отказ от инструментария, позволяющего следить за появлением сбоев в процессе апдейтов и изменения функциональных возможностей. Кроме того, сыграл роль авральный темп развертывания ПО — эксперты подчеркивают, что так делать нельзя. Задним умом все крепки, однако считается, что Knight Capital наступила на «программерские грабли», известные всем.

Чем все закончилось? Рассчитаться с возникшими долгами компании помогли инвесторы, а менее чем через год, в 2013-м, Knight Capital продалась конкуренту в лице Getco.

Источники: Wall Street Journal, Medium, New York Times, Reuters, Investopedia, Henrico Dolfing, Bugsnag, Dougseven.

геймерский, CPU AMD Ryzen 3 1200 3100 МГц, RAM DDR4 8 ГБ, HDD+SSD 500+120 ГБ, графика: NVIDIA GeForce GTX 1650 4 ГБ, БП 500 Вт
домашний/офисный, CPU Intel Core i5 8500B 3000 МГц, RAM DDR4 SO-DIMM 8 ГБ, SSD 256 ГБ, графика: встроенная в процессор

Читайте также:

Библиотека Onliner: лучшие материалы и циклы статей

Наш канал в Telegram. Присоединяйтесь!

Быстрая связь с редакцией: читайте паблик-чат Onliner и пишите нам в Viber!

Перепечатка текста и фотографий Onliner без разрешения редакции запрещена. nak@onliner.by