Knight Capital: 212 приказов, которые стоили $461 миллион
9:30:00 — РЫНОК ОТКРЫЛСЯ, МАШИНА НАЧАЛА ПОКУПАТЬ ВСЁ ПОДРЯД
1 августа 2012 года, Нью-Йорк, 9:30 утра. Рынок открывается как обычно.
Никто не подозревает, что через 45 минут одна из крупнейших брокерских контор на Уолл-стрит превратится в дымящуюся воронку. Внутри Knight Capital утро начинается с совершенно рядового события: они получают 212 клиентских приказов. Не двести двенадцать тысяч. Не экстренную ликвидацию.
А всего лишь 212 скромных заявок от розничных клиентов.
Через 45 минут система Knight совершила более 4 миллионов исполнений
в 154 акциях, проторговала свыше 397 миллионов бумаг и накопила нежелательные позиции на $3,5 млрд в лонг и $3,15 млрд в шорт. Когда этот геморрой попытались закрыть, убыток перевалил за $460 миллионов. 212 заявок. 45 минут. Полмиллиарда долларов в минус. Это не сбой. Это самоубийство.
Чтобы понять этот техно-ад, нужно сразу разделить две вещи, которые для обычного юзера выглядят как одна кнопка «Купить»: родительская заявка и её дети. Ты клиент. Ты хочешь купить 10,000 акций. Твоя заявка — это просто намерение. Но она не летит на биржу одной глыбой. Между тобой и рынком сидит умный маршрутизатор — высокоскоростная система исполнения. Она берёт твой большой приказ и режет его на кучу маленьких дочерних заявок.
Одну отправляет на NYSE, другую — на NASDAQ, третью — в альтернативную «darkpool» площадку. Каждая дочерняя заявка — это самостоятельный чих в стакан. Сумма всех этих чихов должна быть ровно равна твоим изначальным 10,000 акций.
У Knight этот маршрутизатор назывался SMARS. В нормальной жизни это крутой робот, который ищет лучшую цену и мгновенно переваривает поток.
В день коллапса этот робот оторвался от реальности. Он продолжал генерировать дочерние заявки, совершенно не понимая, что родительские приказы уже давно исполнены. Он просто входил в раж и тильт.
Представь, что ты кассир в магазине. Ты пробил покупателю его пачку чипсов и выполнил заказ. Но вместо того чтобы остановиться и ждать следующего клиента, ты вдруг начинаешь методично пробивать одну за другой все шоколадки, сигареты и жвачки с полки и кидать их в пакет, пока магазин не опустеет. Ты действуешь не потому, что кто-то просил, а потому что в твоей голове заклинило реле «заказ выполнен».
Именно это произошло с SMARS. Реле обратной связи сгорело.
В нормальной архитектуре каждая дочерняя заявка — это часть замкнутого контура. Ты отправляешь ордер, получаешь исполнение, пересчитываешь оставшийся объём. Это как навигатор в машине: ты проехал поворот, и навигатор должен построить новый маршрут, зная, где ты теперь. Если он продолжит говорить «поверните направо» после того, как ты уже повернул и едешь по нужной улице, ты просто разобьёшься о стену. У Knight обратная связь была разорвана. Исполнения приходили, инвентарь пух, рынок менялся, а генератор новых заявок продолжал тарабанить в пустоту, будто ничего не произошло.
Для рынка это не имело значения. NYSE не могла знать, что внутри Knight одна половинка мозга уже считает приказ завершённым, а вторая продолжает долбиться в стакан. Биржа видела только формально корректные заявки от уважаемого брокера. На той стороне сидели реальные продавцы и покупатели, которые радостно кормили безумного робота. Кто-то толкал ему акции по всё более высоким ценам, видя агрессивный спрос. Кто-то интерпретировал этот поток как инсайд и начинал охоту. Каждая новая сделка Knight искажала рынок, создавая идеальные условия для следующей, ещё более идиотской, сделки. Машина не просто набирала неправильную позицию. Она начала торговать внутри рынка, который сама же и деформировала. Это гребаная рекурсия:
ты покупаешь, потому что видишь свой собственный спрос, и он кажется тебе диким бычьим сигналом.
На терминалах у живых сотрудников вдруг начали расти позиции, которых никто не открывал. Но в первые минуты это была ещё не паника. Это был ступор. Можно было подумать на всё что угодно: глюк клиентского потока,
ошибка маршрутизации, дублирование сообщений. Проблема в том,
что в высокоскоростной инфраструктуре симптом и причина находятся в разных вселенных. Терминал орёт «у тебя дикий лонг», а источник — где-то глубоко
в коде маршрутизатора. Пока люди пытались нащупать, в каком из слоёв этого дерьма произошёл разрыв, SMARS продолжала работать. За одну секунду она делала больше операций, чем вся команда могла обдумать за час. За минуту локальный баг превратился в гигантский портфель. За 45 минут этот портфель стал смертным приговором.
Рынок не остановился. NYSE продолжала принимать заявки, контрагенты — их исполнять, а цена — двигаться, затягивая Knight в могилу. Внутри компании всё ещё пытались понять, почему 212 маленьких клиентских приказов не завершились, и какая именно железка сейчас торгует капиталом Knight от своего имени. Чтобы понять, как небольшой дефект в коде смог пройти путь от строчки до многомиллиардного трупа, нужно сначала разобраться, чем вообще была Knight Capital до этого утра и какое место она занимала в американском рынке.
KNIGHT CAPITAL: НЕВИДИМАЯ ИНФРАСТРУКТУРА АМЕРИКАНСКОГО РЫНКА
Представь, что ты жмёшь кнопку «Купить 500 акций» в своём брокерском приложении. Для тебя это мгновение: клик, подтверждение, сделка. Но за эти полсекунды твой приказ пробегает целый марафон. Он летит от твоего брокера
к огромной невидимой машине, которая разрубает его на куски, разбрасывает
по десяткам бирж, тёмных пулов и ECN, и только потом возвращает тебе результат. Этой машиной была Knight Capital. Ты не знал их имени, но каждый твой трейд проходил через их руки. Они были не просто брокером.
Они были кровеносной системой розничного рынка США.
В 2011–2012 годах Knight обрабатывала примерно 10% всего оборота американских акций. Одна только их программа-маршрутизатор SMARS,
которая позже станет смертным приговором, в одиночку переваривала 1%
или более всего национального рынка. На языке обычного бизнеса
«один процент» звучит скромно. Но в мире высокоскоростной электронной торговли это непрерывный поток из миллионов заявок, подтверждений,
отмен и частичных исполнений.
Это не тихий ручеёк.
Это гребаная Амазонка в сезон дождей.
Knight была зарегистрированным брокером-дилером, маркет-мейкером
и агентом по исполнению. Они стояли между твоим брокером
и фрагментированным рынком. Но чтобы понять, почему их убийца сидел внутри них самих, нужно понять главное раздвоение личности этой компании. В отличие от какого-нибудь хедж-фонда, который ставит на рост или падение,
маркет-мейкер вроде Knight не делает прогнозов. Ему плевать, куда пойдёт акция. Он зарабатывает на обороте. Он как владелец обменника: выставляет цену на покупку чуть ниже рынка и цену на продажу чуть выше.
Заработок — копеечный спред. Бизнес строится не на гениальной ставке,
а на масштабе.
В 2011 году их подразделение маркет-мейкинга обрабатывало около 3,62 миллиона сделок в день, оборачивая примерно $25,3 миллиарда. Средний доход составлял жалкие 1,06 базисного пункта от проторгованной стоимости.
Один базисный пункт — это 0,01%. Их преимущество было микроскопическим. Но умноженное на космический оборот, оно делало их королями Уолл-стрит.
У этой модели есть смертельная симметрия. Если микроскопический плюс, умноженный на масштаб, создаёт бизнес, то точно так же микроскопическая ошибка, умноженная на тот же масштаб, создаёт катастрофу.
1 августа эта формула перестала быть абстракцией.
Внутри одной компании жили два зверя. Первый — агентское исполнение. Э
то скучный бизнес: ты получаешь приказ клиента и ищешь, где его исполнить.
Ты просто курьер, твой риск ограничен поручением. Второй — маркет-мейкинг
от своего имени. Здесь ты сам становишься стороной сделки. Ты покупаешь акции у одного клиента и продаёшь другому, принимая весь инвентарный риск
на себя. Ты уже не курьер. Ты игрок, который сидит за столом и держит позицию. Эти два режима жили в одной технологической оболочке, использовали одни и те же шлюзы, маршрутизаторы и рыночные данные. Но экономически они были из разных галактик.
Граница между ними — это состояние приказа. Пока сумма твоих дочерних заявок не превышает объём, который запросил клиент, ты просто работаешь агентом. Но как только ты переступил эту черту и накупил больше, чем тебя просили, разница мгновенно становится твоим личным инвентарём. Ты уже не обслуживаешь клиента. Ты торгуешь своим капиталом. Утром 1 августа эта граница была пройдена автоматически. Программный баг просто стёр её. Клиентские приказы стали лишь стартовым сигналом. Последующие миллионы операций уже не имели никакого клиентского поручения. Машина Knight начала формировать позицию компании, не принимая ни одного решения о риске.
Розничный поток для таких гигантов, как Knight, — это промышленное сырьё.
Оно ценно не потому, что каждый частник — идиот. А потому, что в массе своей этот поток менее информирован. Бабушка, покупающая акции Apple на пенсию, вряд ли знает о грядущем отчёте больше, чем инсайдер из Купертино.
Для маркет-мейкера это снижает риск неблагоприятного отбора — ситуации, когда ты покупаешь у того, кто уже знает, что акция вот-вот рухнет.
Менее токсичный поток даёт больше времени, чтобы перераспределить позицию и сохранить заработанный спред.
Но даже статистически удобный поток может пойти односторонней стеной. Поэтому нормальная система должна следить не только за каждой отдельной заявкой, но и за всей картиной в целом: сколько у тебя инвентаря, какова интенсивность покупок и продаж, какая волатильность, какова глубина рынка и есть ли признаки информационной токсичности. Умная машина на основе этих данных решает, принимать ли заявку на свой баланс, немедленно ли её хеджировать, перекинуть на другую площадку или вообще отказаться от риска. Это не торговля по наитию. Это конвейер вероятностей.
И вот тут мы подходим к самой ценной информации. В нормальной архитектуре котирование не должно быть симметричным. Твой аппетит к риску должен смещаться в зависимости от того, что у тебя уже есть в портфеле. Если ты набрал кучу длинных позиций, ты должен меньше хотеть покупать ещё и больше хотеть продавать. Твоя «резервная цена» — цена, по которой тебе комфортно держать позицию, — уползает вниз. Ты как торговец арбузами, у которого склад уже забит под завязку: ты будешь покупать новые только с огромным дисконтом.
Это математически выводится из задачи максимизации полезности: твоя жизнь зависит от терминального капитала, а не от того, насколько круто ты закупился в моменте. Но если твой робот теряет связь с реальностью и перестаёт видеть свой инвентарь, он превращается в пьяного камикадзе. Он будет покупать и покупать, даже когда склад уже трещит по швам, потому что его внутренний компас сломан.
Рынок к тому моменту уже не был единой биржей. Он был раздроблен на десятки площадок. Чтобы исполнить приказ, Knight не могла просто пойти на NYSE.
Она рыскала по всем ECN, дарк пулам и альтернативным системам. Маршрутизатор Knight должен был в реальном времени решать, куда отправить следующий фрагмент приказа. На каждой площадке своя цена, свой объём,
своя комиссия, своя задержка и свой риск нарваться на adverse selection.
Это была не просто доставка пакета по адресу. Это была игра в трёхмерные шахматы, где доска пересобирается после каждого хода.
Увеличение числа площадок даёт преимущество в поиске ликвидности.
Но одновременно растёт и пространство для катастрофы. Ошибка могла закрасться в рыночные данные, в нормализацию тикера, в учёт уже исполненного объёма, в повторную отправку сообщения, в биржевой шлюз, в обработку подтверждения. А на терминале всё это выглядит одинаково: у тебя просто растёт позиция, которую ты не открывал. Увидеть симптом — легко.
Понять, какой именно из слоёв дал сбой, — адская работа.
Именно поэтому в нормальном мире должен существовать независимый предохранитель. Отдельный контур, который стоит между бешеным маршрутизатором и рынком и проверяет: не превышен ли лимит заявок?
Не дублируются ли ордера? Не улетел ли валовый объём в космос? У Knight такой контур либо отсутствовал, либо спал беспробудным сном. SEC позже установила, что у них не было адекватного контроля перед отправкой заявок на рынок.
Их финансовые предохранители не могли автоматически остановить поток, превышающий капитальные пороги компании.
У них была бешеная скорость, но не было тормозов.
В этом и заключается главная трагедия Knight. Их бизнес строился на культуре скорости и микроскопической маржи. Каждая наносекунда имела значение.
Но когда весь этот гоночный болид понёсся в стену, выяснилось, что инженеры забыли прикрутить ремень безопасности. Они не просто торговали рядом с рынком. Они были рынком. И этот рынок начал переваривать сам себя.
ВОСЕМЬ СЕРВЕРОВ: СЕМЬ ВОШЛИ В БУДУЩЕЕ, ОДИН ОСТАЛСЯ В ПРОШЛОМ
Крушение Knight Capital началось не в 9:30 утра, когда рынок открылся. К этому моменту бомба уже была заложена. Её собрали и активировали несколькими днями ранее, когда инженеры Knight готовились к совершенно рутинному событию. 1 августа 2012 года Нью-Йоркская фондовая биржа запускала новую программу под названием Retail Liquidity Program (RLP). Идея была проста:
дать розничным приказам чуть более вкусную цену за счёт специальных заявок от маркет-мейкеров.
Для Knight это было обычное обновление инфраструктуры. Никакой новой торговой стратегии, никакой ставки на рынок. Просто нужно было немного допилить их высокоскоростной маршрутизатор SMARS, чтобы он умел распознавать новый тип приказов и правильно их обрабатывать. Рутина. Но в мире, где решения принимаются за наносекунды, рутинная операция по замене кода — это как замена двигателя у летящего истребителя.
В недрах SMARS, в том самом участке кода, который нужно было обновить,
уже много лет жил труп. Старая функция под названием Power Peg.
Knight перестала использовать её в далёком 2003 году. Но удалять её из боевой системы никто не стал. Она просто лежала там, как забытый на складе динамит.
В мире программирования это называется «мёртвый код». Но «мёртвый»
не значит «безопасный». Это значит, что он ждёт своего часа. Инженеры Knight, допиливая SMARS под новую программу RLP, решили использовать тот самый кусок, где раньше сидел Power Peg. Они переиспользовали старый флаг.
В коде есть такая штука — флаг. Просто бит информации. Ноль или единица.
В старой версии этот флаг, равный единице, включал Power Peg. В новой он должен был активировать обработку RLP. Проблема была в том, что значение этого бита зависело от того, на каком сервере его читали. На новом сервере
он означал «включи RLP». На старом, где код не обновили, «включи Power Peg». Один и тот же бит. Две разные реальности. Это не просто расхождение версий. Это семантическое расщепление. Ты отправляешь роботу команду
«Принеси кофе», а он, в зависимости от прошивки, либо варит тебе
макиато с 2 ложками пенны, либо начинает поливать комнату из огнемёта.
Но сам по себе вызов забытой функции — это ещё полбеды. Настоящий ужас был в том, что этот Power Peg был кастрирован ещё в 2005 году. Тогда, во время очередного апдейта SMARS, из него вырезали кусок, отвечающий за подсчёт уже исполнённого объёма. В нормальном состоянии робот, отправляя дочерние заявки, должен считать: «Клиент просил 10,000 акций. Я уже купил 5,000. Осталось 5,000». Это его тормоз. Но из Power Peg этот тормоз убрали, потому что функцию считали списанной. Старый код превратился в безголового цыплёнка. Если его активировать, он начнёт покупать и никогда не остановится, потому что просто не знает, что такое «хватит».
Теперь о том, как эту бомбу активировали. Начиная с 27 июля, Knight начала поэтапно разворачивать новый код RLP на свои восемь серверов SMARS.
Семь машин обновили. А восьмую — прозевали. Один техник не скопировал туда новые файлы. Второй не проверил. Письменной процедуры, которая требовала бы независимой проверки развёртывания, для SMARS просто не существовало. Человеческий фактор. Классика. Семь серверов жили в 2012 году и готовились обрабатывать новые правила RLP. А один, восьмой, всё ещё жил в прошлом десятилетии и ждал команды запустить свой смертоносный Power Peg.
Снаружи кластер SMARS выглядел как единый, монолитный сервис. Но внутри он превратился в вероятностную рулетку. Большинство приказов попадало на семь здоровых серверов и обрабатывалось корректно. Но если приказ с новым флагом RLP прилетал на восьмой, он не просто игнорировался. Флаг активировал старую, искалеченную функцию. Это был не полный отказ системы. Это была гораздо более страшная вещь — редкая, невидимая аномалия внутри нормального потока. Семь серверов не падали, сеть работала, биржи отвечали. Процесс на восьмом сервере был жив. Он принимал сообщения, создавал заявки.
Но функция, которую он исполнял, была не той, о которой думали его создатели. Как сказали бы инженеры: процесс был жив, но семантика была мертва.
Утром 1 августа, ещё до открытия рынка, в 8:01, система начала выплёвывать сообщения об ошибке. Сообщение прямо говорило: Power Peg disabled. До звонка колокола на NYSE таких сообщений накопилось 97 штук. 97 криков о помощи от мёртвого кода. Но они не были помечены как критическая аварийная сигнализация. Они выглядели как обычный фоновый шум, на который никто
не обращал внимания. На экранах не было красной кнопки
«Один из серверов — машина времени из 2005 года». Всё выглядело зелёным.
К моменту открытия рынка архитектура Knight уже была ранена. Семь машин были готовы к новой программе. А одна — восьмая — ждала своего первого приказа с флагом RLP. Она ждала команды, которая включит её безголовый механизм. В 9:30 этот приказ пришёл. Семь серверов увидели запуск Retail Liquidity Program. А восьмой — команду запустить Power Peg. Машина просто начала заливать рынок деньгами компании, как сломавшийся банкомат.
POWER PEG: МЁРТВЫЙ КОД, КОТОРЫЙ ЗАБЫЛ, ЧТО ПРИКАЗ УЖЕ ИСПОЛНЕН
9:30. Рынок открылся. На восьмой сервер SMARS пришёл первый родительский приказ с новым флагом Retail Liquidity Program. Семь серверов прочитали его правильно. А восьмой увидел не RLP. Он увидел команду, предназначенную для функции, которую Knight Capital не использовала много лет. Power Peg проснулась.
Она получила приказ. Она начала создавать дочерние заявки и отправлять их на рынок. Первая заявка исполнилась. Затем вторая. Потом третья. Одна часть инфраструктуры Knight уже знала, что клиент получил весь требуемый объём.
Но это состояние не дошло до SMARS. Power Peg продолжала видеть приказ как незавершённый. Она снова искала ликвидность, снова отправляла заявки,
снова получала исполнения и снова не видела причины остановиться.
Родительский приказ — это не просто пожелание клиента. Это юридическая граница полномочий. Клиент поручил купить, скажем, 1,000 акций. Это не просто цель. Это лимит. Маршрутизатор может дробить приказ на сотни кусков, отправлять их на разные площадки, отменять и переставлять. Но сумма всех этих кусков не должна превысить то, что просил клиент. Пока общий исполненный объём не достиг 1,000, система действует как агент. Но как только эта черта перейдена, каждая следующая купленная акция — это уже не клиентская позиция. Это собственная позиция брокера. Knight начинает торговать своим капиталом, хотя никто внутри компании не принимал решения открыть такую позицию.
Работу нормального маршрутизатора можно представить как светофор с тремя цветами. Приказ создан — горит зелёный. Часть объёма исполнена — мигает жёлтый. Весь объём исполнен — загорается красный. И этот красный свет должен быть вечным. После него нельзя снова включить зелёный и начать покупать дальше. Приказ умер. Его жизненный цикл завершён. Но в Power Peg красный свет просто выключили. Не потому, что биржи перестали присылать подтверждения. А потому, что информация о полном исполнении не попадала в тот контур, который генерировал новые заявки. Одна часть системы Knight видела «Приказ исполнен, остаток ноль». А Power Peg видела
«Приказ активен, остаток неизвестен». Две реальности существовали одновременно. Одна описывала правду. Другая управляла деньгами.
Это типичная проблема распределённых систем: один сервис уже перешёл в новое состояние, а второй действует на основании устаревшей версии.
Но в обычной бухгалтерской программе такое рассогласование создаёт неверную строчку в отчёте. А в брокерской инфраструктуре каждое устаревшее состояние становится новой заявкой с реальными финансовыми последствиями. Устаревшая информация в голове робота превращается в новый ордер, который превращается в реальную сделку, которая превращается в реальную позицию.
И биржа не может это остановить. Она видит только корректный формат сообщения от уважаемого брокера и послушно исполняет заявку.
В программировании есть понятие идемпотентности. Операция идемпотентна, если её можно повторить много раз, а результат будет один и тот же. Например, «установить статус приказа = ИСПОЛНЕН». Можно выполнить эту команду сто раз подряд, приказ останется исполненным. Но команда «купить ещё 100 акций» не идемпотентна. Каждое повторение создаёт новый финансовый результат:
сто акций, двести, триста, четыреста. Power Peg повторяла именно такую, неидемпотентную операцию. Она не просто перепосылала одно и то же сообщение. Она генерировала новую сделку, потому что состояние полного исполнения не участвовало в принятии следующего решения.
Представьте себе конвейер. Клиент заказал сто коробок. Нормальный робот отсчитывает сто штук и останавливается. Power Peg отсчитывает сто штук, отправляет их клиенту, но не записывает это у себя в памяти. Он смотрит на заказ, видит «сто коробок», снова отсчитывает сто штук и снова отправляет.
И так до бесконечности. Десять циклов — у фирмы уже тысяча коробок вместо ста. Сотню можно отдать клиенту. Остальные девятьсот — это уже собственный складской запас Knight. И этот запас растёт не со скоростью человеческой реакции, а со скоростью машины. Чем ликвиднее акция и чем быстрее биржи подтверждают сделки, тем быстрее растёт нежелательный инвентарь. Свойство, которое в нормальном режиме считается преимуществом — высокая скорость исполнения, — превращается в ускоритель катастрофы.
В нормальной торговой системе решение о следующем действии принимается на основе текущего состояния. Сколько у тебя уже куплено, сколько заявок ещё висит на площадках, сколько осталось свободного капитала. Вся математика маркет-мейкинга, все эти сложные уравнения, строятся вокруг связи между действием, состоянием и последующим риском. Но Power Peg действовала на основе неверного состояния. Реальный инвентарь рос, реальный родительский приказ был закрыт, реальный риск взлетал до небес. А управляющий компонент действовал так, словно ничего этого не произошло. Можно идеально решить все уравнения, правильно оценить волатильность, точно спрогнозировать поток.
Но если твой робот смотрит в кривое зеркало и видит не ту позицию, которую имеет на самом деле, все эти расчёты — мусор. Оптимальное действие для неверного состояния остаётся неверным действием.
В модели Саши Стойкова 2005 года, которую мы так любим, накопленная позиция заставляет дилера менять поведение. Если ты стал слишком длинным, ты должен меньше хотеть покупать и активнее искать возможность продать.
Это отрицательная обратная связь. Инвентарь растёт — твой аппетит к дальнейшим покупкам падает. Power Peg стала полной противоположностью этой системы. Чем больше она покупала, тем больше ей не хотелось продавать. Чем больше продавала, тем больше не хотелось покупать обратно. Инвентарь мог вырасти в десять, в тысячу, в миллион раз. Следующее действие оставалось тем же: отправить ещё одну дочернюю заявку. Связь между позицией и решением была разорвана полностью.
Рынок возвращал подтверждение ректальной боли. Каждая дочерняя заявка уходила на настоящую биржу. Покупка снимала объём с лучшего предложения,
и после исчерпания уровня следующая заявка встречала уже более высокую цену. Другие алгоритмы видели этот бешеный поток и интерпретировали его как появление информированного покупателя. Они снимали свои пассивные заявки, разгоняя цену ещё дальше. Возникала петля обратной связи уже не внутри компании, а между неисправной системой и рынком. Ошибочный поток Knight приводил к исполнениям, исполнения пожирали ликвидность, исчезновение ликвидности толкало цену вверх, а рост цены делал следующие покупки Knight ещё дороже. Алгоритм не просто создавал позицию. Он активно ухудшал цену,
по которой эта позиция создавалась.
Внутри компании начинался хаос. Новые исполнения приходили обратно с бирж, но сопоставить их с клиентским приказом было невозможно, потому что его лимит давно исчерпан. Разница должна была куда-то падать. У Knight для таких «бесхозных» позиций использовался счёт №33. Утром 1 августа этот счёт начал стремительно набухать позициями, которые создавал Power Peg. На экране появлялся инвентарь. Реальный. Акции были куплены. Деньги были заплачены. Контрагенты получили всё, что им причиталось. Но внутри Knight ещё не было ясного ответа, какая система создаёт этот поток и почему счёт продолжает расти.
К этому моменту у компании было уже два набора предупреждений. До открытия рынка внутренний контур разослал 97 сообщений с упоминанием
«Power Peg disabled». Теперь счёт №33 начал показывать позиции, которых не должно было существовать. Один сигнал пришёл из кода. Второй — из баланса. Но ни один из них ещё не был соединён с автоматическим правом остановить SMARS. Мёртвый код работал, деньги утекали, а машина всё ещё не слышала команду «стоп».
97 ПРЕДУПРЕЖДЕНИЙ И СЧЁТ №33: КОМПАНИЯ ВИДЕЛА ПОСЛЕДСТВИЯ,
НО НЕ МОГЛА ОСТАНОВИТЬ ПРИЧИНУ.
В 8:01 утра, за полтора часа до открытия рынка, внутренняя система Knight начала рассылать электронные письма. В каждом из них было два слова:
Power Peg. Полный текст был ещё красноречивее: Power Peg disabled.
Система снова и снова пыталась запустить мёртвую функцию, но на семи здоровых серверах та была отключена. А на восьмом, где её забыли удалить,
она была готова к бою.
До 9:30 система сформировала 97 таких сообщений. 97 криков о помощи.
97 прямых указаний на то, что в боевой системе творится какая-то дичь с кодом, который не должен существовать. Но эти письма не были спроектированы как аварийная сигнализация. Они не имели приоритета. Они не требовали подтверждения получения. Они не блокировали запуск системы. Сотрудники обычно не рассматривали их как срочные. Система произнесла название будущей катастрофы 97 раз за 89 минут до того, как она начала уничтожать капитал. Никто не услышал.
В торговой инфраструктуре каждую секунду возникают тысячи технических событий: отклонённая заявка, потерянное соединение, повторное подтверждение. Большинство из них — мусор. Если превращать каждую строчку лога в красную тревогу, операторы сойдут с ума. Поэтому между событием и аварийным сигналом должен быть слой классификации. У Knight первое звено работало: событие возникло, сообщение сформировалось, название старой функции попало в текст. Но переход от «события» к «инциденту» не произошёл. Сообщение об ошибке было уведомлением, но не тревогой. Система могла отправить 97 сообщений и всё равно считать утро операционно нормальным.
Это классическая проблема ложных тревог. Если система ежедневно отправляет сотни сообщений, большая часть которых не требует вмешательства, человек рационально снижает внимание к каждому следующему. Это усталость от сигналов. Канал существует, но его информационная ценность размывается фоновым шумом. Чтобы тревога сохраняла смысл, нужно разделять уровни: информационное сообщение, предупреждение, ошибка, критический сбой.
И для каждого задавать свою политику. В случае Knight сообщение содержало ссылку на SMARS и прямо называло Power Peg — функцию, которая считалась неиспользуемой. Такое сочетание должно было нарушить базовый инвариант развёртывания: «Вижу старую функцию, которую запрещено использовать развёртывание провалено». Но этот инвариант существовал только как здравый смысл инженера. В коде производственного контроля его не было.
В 9:30 предупреждение изменило форму. До открытия оно выглядело как строка технической ошибки. После открытия оно стало денежной позицией.
Исполнения, которые Knight не могла сопоставить с клиентскими приказами, временно падали на внутренний счёт №33. Это был такой брокерский аналог
Lost & Found. Туда сбрасывали всё, что не могли сразу опознать. Утром 1 августа этот счёт начал стремительно набухать позициями, создаваемыми Power Peg. После полного исполнения родительского приказа каждая следующая сделка становилась «бесхозной». И эта разница переходила на баланс Knight. С каждым новым подтверждением биржи на счёте появлялись реальные акции,
реальный долг и реальный риск. Код продолжал жить в неверном состоянии.
Бухгалтерия рынка уже фиксировала правильное действие.
У Knight был установлен лимит для счёта №33 — 2 миллиона долларов валовой позиции. Но этот лимит был просто циферкой в таблице. Он не был связан с автоматическим тормозом. Когда счёт превысил эту границу, SMARS не получил команду остановиться. Новые заявки продолжали уходить на площадки, новые исполнения возвращались, позиция росла далеко за пределами. Это различие между «записанным лимитом» и «исполняемым ограничением». У Knight существовало число, но отсутствовал оператор «СТОП». Лимит описывал нарушение постфактум, но не менял допустимые действия маршрутизатора. Множество разрешённых команд для робота осталось прежним.
Маршрутизатор продолжал иметь техническое право создавать новый инвентарь, даже когда его лимиты были превышены в десятки раз.
После завершения аварийного периода Knight имела длинные позиции на $3,5 млрд и короткие на $3,15 млрд. На бумаге чистый риск выглядел небольшим.
Но валовая экспозиция составляла $6,65 млрд. Небольшая чистая дельта не означает небольшой риск. Длинная позиция в одной акции — не хедж для короткой в другой. У них разная волатильность, разная ликвидность, разная бета. Настоящий нейтральный портфель требует сложного расчёта и динамического баланса. У Knight позиции возникали не как решение задачи минимизации риска. Они были следом дефектного алгоритма. Поэтому внешне компенсирующие друг друга стороны могли одновременно приносить убыток при закрытии.
Основным инструментом контроля у них была система PMON. Старшие сотрудники видели через неё, как распухает счёт №33. Но PMON была системой послеторгового наблюдения. Она показывала последствия после того, как заявка уже ушла на рынок и исполнилась. Она не находилась в контуре допуска заявок к рынку. Архитектура выглядела так: SMARS отправляет заявку, биржа её исполняет, PMON показывает результат человеку. Защитная архитектура должна была содержать обратную связь: PMON видит превышение и блокирует SMARS. Этой связи не существовало. PMON полностью зависела от человека.
Она не формировала автоматических тревог по общей финансовой экспозиции. Во время экстремального потока она ещё и испытывала задержки, показывая неточные отчёты. Оператор видел не текущее состояние, а его запоздавшую и искажённую проекцию. Чем быстрее росла позиция, тем хуже становилась точность инструмента, предназначенного для её наблюдения.
Система могла показывать цифру, которая уже устарела к моменту прочтения.
У SMARS существовала защитная проверка цены. Она блокировала заявки, если их цена слишком далеко отклонялась от рынка. Но этот контроль не мог остановить серию ошибочных операций, пока цена двигалась менее чем на 9,5%. Защита отвечала на вопрос: «Не слишком ли далеко цена заявки от рынка?». Катастрофа происходила по другой координате: «Не слишком ли много заявок отправлено вообще?». Каждая отдельная операция выглядела правдоподобно. Цена находилась в допустимом диапазоне. Объём одной заявки не выглядел экстремальным. Проблема становилась видна только в совокупности.
По отдельности каждый ордер был в норме. В сумме они превышали разрешённый объём в сотни раз. Это типичная ошибка контроля, ориентированного на транзакцию, а не на состояние. Фильтр проверяет отдельное действие, а риск возникает из накопления действий во времени.
К этому моменту Knight получила два независимых свидетельства одной аварии. Первое пришло до открытия рынка: «Power Peg disabled» — 97 раз.
Второе появилось после открытия: счёт №33 начал взрываться. Первый сигнал говорил, что старая функция неожиданно присутствует в активном процессе.
Второй — что система создаёт позиции, которые невозможно сопоставить с клиентскими приказами. Между ними лежала полная причинная цепочка:
Power Peg создаёт лишние дочерние заявки, те исполняются, их невозможно сопоставить с клиентским приказом, всё падает на счёт №33. Но внутри Knight эти события находились в разных мирах. Одно жило в потоке технологических писем, другое — в послеторговом мониторе. Ни один контур не обладал правом отключить SMARS. На экране была боль. В коде была причина. Между ними не существовало готового маршрута.
Пока одни сотрудники пытались понять, откуда приходят позиции, технологическая команда начала искать неисправность внутри работающей системы. SMARS оставалась подключённой к рынку. Дочерние заявки продолжали выходить. Исполнения продолжали возвращаться. И в следующей попытке остановить старую функцию Knight удалила новый код именно с тех семи серверов, на которых он был установлен правильно.
РЕМОНТ В ПРЯМОМ ЭФИРЕ: КАК ПРАВИЛЬНЫЙ КОД УДАЛИЛИ С ИСПРАВНЫХ СЕРВЕРОВ.
К этому моменту Knight Capital уже не искала торговую возможность.
Она искала выключатель. На экранах росли позиции, которых никто не открывал. Отчёты запаздывали. Разные подразделения видели разные фрагменты аварии. Но одно оставалось неизменным: SMARS был всё ещё подключён к рынку.
Пока инженеры проводили диагностику, машина продолжала заливать рынок деньгами компании.
Первая гипотеза была очевидна. Перед открытием Knight внедрила новый код для программы Retail Liquidity Program. После открытия начался ад.
Значит, рассуждали они, виноват новый код. Логика казалась безупречной:
если обновление сломало систему, нужно просто его удалить. Откатиться к предыдущей, рабочей версии. Это азбука управления изменениями. Но эта азбука работает только в одном случае: предыдущая версия должна быть действительно безопасной. У Knight это условие было нарушено.
Новый код RLP не создавал ошибочный поток. На семи правильно обновлённых серверах он, наоборот, блокировал старый, мёртвый Power Peg. Когда команда, повинуясь логике «убрать новое», удалила этот код с семи здоровых машин,
она тем самым снова открыла путь старому монстру. Теперь на каждом из этих серверов, как и на злополучном восьмом, проснулся безголовый Power Peg. Команда пыталась уменьшить область пожара. Вместо этого она облила бензином весь серверный кластер.
Это был не просто неудачный откат. Это была попытка восстановить версию, которой больше не существовало. Старый код Power Peg годами лежал в системе как музейный экспонат. За это время архитектура вокруг него изменилась,
его жизненно важные органы, вроде счётчика исполненного объёма, были перемещены в другое место. Удалив новый код, Knight не вернула старую, проверенную систему. Они воскресили Франкенштейна, который выглядел как их прежний робот, но функционировать так же уже не мог.
Когда обычное приложение падает, ты можешь позволить себе роскошь диагностики. Ты изучаешь логи, строишь гипотезы, накатываешь патч. На бирже, где каждая секунда создаёт необратимые финансовые обязательства, порядок должен быть другим. Сначала — остановить кровотечение. Разорвать связь с рынком, отменить все активные заявки, зафиксировать текущую позицию.
И только потом, в безопасной среде, искать первопричину.
Пока машина продолжает торговать, ты не ставишь диагноз.
Ты просто наблюдаешь, как твои догадки превращаются в миллионные убытки в реальном времени.
Knight делала ремонт внутри механизма, который продолжал производить финансовый результат быстрее, чем люди могли оценить последствия своего вмешательства. Это как пытаться починить гидравлику на летящем самолёте, не отключая двигатели.
В тестовой среде инженер может повторять событие, откатывать базу данных, перезапускать процессы. На бирже исполненная сделка — это приговор. Юридические обязательства возникают мгновенно. Команду можно удалить из памяти сервера, но сделку нельзя отменить той же кнопкой. Ты не можешь просто «перезагрузить» рынок. Поэтому живой рынок — худший в мире полигон для проверки гипотез.
У команды был список подозреваемых: дефект в новом RLP-коде, проблема в старой логике, ошибка конфигурации, рассогласование версий. Каждое их действие меняло боевую систему. Но точная причина ещё не была известна.
Если твоё действие направлено против одного подозреваемого, а виноват другой, твой «ремонт» не просто бесполезен — он умножает ущерб. Именно это и произошло, когда они удалили RLP-код. Они атаковали гипотезу «виноват новый код», в то время как настоящий враг, старый Power Peg, только и ждал,
чтобы его впустили на все сервера.
В нормальной торговле ты выбираешь действие, которое принесёт прибыль.
При аварии задача меняется. Ты больше не максимизируешь доход.
Ты минимизируешь максимально возможный ущерб при неизвестной причине. Самым ценным действием становится не «правильный патч», а остановка любых переходов. Отключение маршрутизатора. Потому что это действие сокращает количество возможных катастрофических сценариев будущего. Как только машина отключена от рынка, твоя позиция — это проблема, но она перестаёт расти. До отключения она была диким, неконтролируемым зверем, пожирающим капитал с каждой миллисекундой.
У Knight не было кнопки экстренного перехода в безопасный режим. Не было протокола, по которому система при аномальной активности сама бы отрубала себя от рынка. Остановка зависела не от автоматики, а от того, как быстро люди распознают проблему, найдут нужную команду, получат права и договорятся её выполнить. Машина работала в микросекундах. Организация принимала решения в минутах. Это была гонка, в которой плоть проигрывала кремнию в ноль.
Технологическая команда видела серверы как отдельные узлы.
На одном проблема проявилась первой, на семи стояла новая версия.
Локальное действие «удалить обновление» выглядело разумным. Но финансовая система не равна сумме её серверов. Изменение одного элемента меняет поведение всего контура. Удаление RLP-кода изменило глобальную функцию кластера. Оно превратило семерых стражей, которые блокировали старого демона, в ещё семь дверей для него. Область поражения расширилась. Вероятность того, что любой новый приказ запустит смертоносный Power Peg, резко выросла.
Под давлением инцидента даже гений видит лишь фрагменты. Неполные логи, запаздывающие метрики, противоречивые отчёты и руководство,
которое требует ответа. Нельзя строить безопасность на предположении,
что в таком хаосе человек всегда выберет верное действие. Нужна структура, где один отвечает за общее решение, другой изолирует систему,
третий оценивает позицию, а диагностическая команда не имеет права экспериментировать с рыночным доступом без единого центра разрешений.
В обычной жизни неправильная гипотеза стоит времени. В высокочастотном трейдинге она стоит капитала. Каждая минута диагностики — это новая позиция. Скорость в аварии должна работать в противоположную сторону: не быстрее отправить заявку, а быстрее запретить системе отправлять что-либо ещё. Knight продолжала искать точную причину, пока рынок послушно исполнял каждую её команду как легитимное намерение.
Семь серверов, которые утром работали безупречно, теперь получили доступ к той же логике смерти. Количество источников ошибочного потока выросло. Позиция раздувалась, а сама авария вышла далеко за пределы серверной. Теперь в ней участвовали книги заявок бирж, алгоритмы других фирм и цены полутора сотен акций. Рынок стал второй половиной повреждённой системы.
РЫНОК СТАЛ ВТОРОЙ ПОЛОВИНОЙ ПРОГРАММНОЙ ОШИБКИ
После 9:30 дефект перестал быть частным достоянием Knight. Он вырвался из серверной и начал пожирать рынок. Биржа не видела ни Power Peg, ни забытый флаг. Она видела безупречно оформленные заявки от уважаемого брокера.
У каждого сообщения был корректный тикер, допустимый объём и цена.
Этого хватало, чтобы движок послушно исполнял всё подряд.
У рынка нет поля «это была ошибка». Книга заявок — не сборник мнений,
а хранилище жёстких обязательств. Пассивный участник обещал продать акции по определённой цене, и агрессивная заявка Knight эти обещания сжирала. Сначала исчезал лучший объём на продаже, затем следующий, и так уровень
за уровнем. Каждая следующая покупка происходила уже по худшей цене, н
о Power Peg этого не понимал. Он просто приходил в стакан снова и снова, не оценивая стоимость следующего шага.
Ошибочный поток мгновенно стал рыночной информацией. Внешние алгоритмы не знали, что у Knight нет инсайда. Они видели яростный, незатухающий спрос главный признак появления информированного покупателя. Если кто-то сметает всё предложение, значит, он знает что-то, чего не знаешь ты. Пассивный продавец, столкнувшись с риском неблагоприятного отбора, делал то,
что должен: убирал свои заявки или задирал цену. Он не паниковал.
Он рационально реагировал на поток.
Внутри Knight обратная связь была мертва. Но у остальных участников рынка она работала идеально. Их алгоритмы, запрограммированные на оптимальную реакцию, начали торговать уже не только с Knight, но и с последствиями её присутствия. Ликвидность отступала перед бешеным потоком, делая каждую следующую покупку Knight всё более дорогой и разрушительной.
Рыночное воздействие нелинейно. Чем больше и быстрее ты покупаешь,
тем дороже тебе это обходится, причём удвоение объёма может увеличить издержки в разы. Knight не получила одну гигантскую позицию по одной цене. Она методично выстраивала её, как безумный каменщик, с каждым кирпичом поднимающий цену на оставшиеся. К тому моменту, когда она заканчивала покупать, рынок был сильно деформирован её собственными действиями.
154 акции не имели между собой ничего общего. Разные сектора, разная капитализация, разные новости. Но в то утро у них появился один общий, доминирующий фактор — технологический сбой Knight. Движение их цен объяснялось уже не фундаментальными показателями, а интенсивностью ошибочного потока из одного дата-центра. Разные тикеры стали просто разными манифестациями одной и той же аварии.
Knight действовала с максимальной срочностью, постоянно забирая ликвидность, и рынок оценивал её как отчаянного информированного игрока. Арбитражные системы разносили ценовые искажения по всем связанным площадкам.
Knight уже не требовалось напрямую торговать везде — другие участники, сами того не желая, синхронизировали новую, искажённую реальность по всему рынку.
Когда поток прекратился, программа перестала убивать. Но для баланса Knight
ад только начинался. Остановка генератора прекратила создание новых проблем, но не решила старые. Акции были куплены, короткие позиции открыты, расчётные обязательства возникли. Теперь Knight предстояло превратиться из жертвы кода в отчаянного продавца.
И тут сработала зеркальная ловушка. Во время аварии компания агрессивно покупала, задирая цену. После остановки эти длинные позиции нужно было агрессивно продавать, что давило на цену вниз. По коротким позициям, набранным продажами в падающий спрос, требовался принудительный выкуп, толкающий цену вверх. Knight создавала движение при входе и снова платила за срочность при выходе. Это был смертельный круговой маршрут: купил дорого продал дёшево, продал дёшево — откупил дорого. Даже если цена в итоге возвращалась к исходному уровню, Knight фиксировала убыток на каждом этапе.
Оценить позицию по последней котировке легко. Но эта цифра предполагает,
что гигантский портфель можно продать по одной цене.
Для вынужденного объёма реальная стоимость выхода всегда хуже.
Бумажная стоимость их портфеля была миражом.
Превратить его в деньги можно было только с колоссальным дисконтом.
Контрагенты не собирались возвращать прибыль по доброй воле.
Биржевая система стоит на окончательности расчётов. Маркет-мейкер, продавший акции по завышенной цене, или арбитражёр, закрывший спред, действовали в рамках правил. Knight не могла просто попросить деньги обратно. Рынок исполнил её заявки буквально. Он не обещал милосердия.
Финансовый результат Knight сложился из нескольких слоёв боли.
Сначала переплата за сам ошибочный вход. Затем — ущерб от собственного воздействия на рынок. Потом — убыток от движения цен, пока она держала эти позиции. И наконец — финальные потери от вынужденного, срочного закрытия. Миллионы операций создавали позицию с нулевым ожидаемым преимуществом, но со стопроцентными издержками.
Машина генерировала оборот, который больше не приносил бизнес. О
н приносил только счёт.
К 10:15 поток исчез. Аномальный участник, который 45 минут создавал собственную реальность, растворился. Книги заявок начали возвращаться к жизни. Внутри Knight теперь находилось то, чего утром не было ни в одном бизнес-плане: портфель стоимостью в несколько миллиардов долларов, который требовалось закрыть быстрее, чем рынок поймёт, насколько отчаянно Knight нужны деньги. Вопрос был уже не в коде.
Вопрос был в том, сможет ли компания пережить цену собственного выхода.
KILL SWITCH: ПРАВИЛО, КОТОРОГО НЕ БЫЛО МЕЖДУ КОДОМ И КАПИТАЛОМ.
К 10:15 утра генератор ошибочных заявок наконец заткнулся. SMARS перестала отправлять новые приказы, но для Knight Capital это была лишь смена декораций. Технологическая авария закончилась, но финансовая только начиналась. Программный дефект больше нельзя было удалить вместе с файлом.
Он материализовался в капитале. Вся цепочка — от бита в памяти до юридического обязательства — сработала безупречно, превратив ошибку в реальный портфель.
На балансе компании висел груз, который никто не планировал, не анализировал и не мог просто игнорировать. Сделки прошли клиринг, контрагенты получили исполнения, и каждая операция стала обязательством поставить деньги или бумаги. На следующий день Knight объявила о закрытии ошибочных позиций, зафиксировав убыток примерно в 440 миллионов долларов, который позже уточнили до 461,1 миллиона. Эти деньги не испарились в воздухе — они перетекли к тем, кто оказался на правильной стороне безумного потока.
В нормальной торговле убыток — это плата за неверный прогноз. Knight не делала прогноза. Компания не ошиблась в доходности акций. Она потеряла деньги на переходе между состояниями, который никто не санкционировал. Сначала её силой загнали в гигантский портфель, а затем заставили из него выходить, расплачиваясь за собственную срочность. Это был не трейдинг,
а принудительный маршрут: купил дорого — продал дёшево.
Для брокера-дилера убыток сразу превращается в кризис капитала. Как только капитал сжимается, падает способность проводить расчёты, контрагенты начинают пересматривать лимиты, а клиринг требует больше обеспечения. Компания должна немедленно доказать, что она всё ещё существует.
Knight требовалось не просто пережить минус, а убедить рынок, что после такого удара она может открыться завтра утром.
6 августа, через пять дней после ада, Knight привлекла 400 миллионов долларов от консорциума во главе с Jefferies, Blackstone, GETCO и другими. Эти деньги не были инвестицией в рост. Это была цена за право открыть двери на следующее утро. Инвесторы купили привилегированные акции с правом конвертации по $1.50 за штуку — гигантский объём относительно прежней структуры собственности. В критический момент компания продаёт не просто бумаги,
она продаёт будущий контроль с диким дисконтом за немедленное выживание.
Knight сохранила способность работать, но её самостоятельность была разрушена вместе с капиталом. Уже в декабре объявили о слиянии с GETCO,
а к июлю 2013 года сделка завершилась созданием KCG Holdings.
Код торговал 45 минут. Корпоративные последствия продолжались почти год.
После таких аварий всегда говорят: «Нужно было нажать kill switch».
Но выключатель аварийной остановки — это не красная кнопка на стене.
Это отдельный управляющий контур, который должен ответить на вопросы:
что именно останавливается, кто имеет на это право, как определяется условие и что происходит с уже работающими заявками. В нормальной архитектуре стратегия имеет право предложить сделку, риск-контур имеет право отказать, а аварийный контур имеет право остановить всё. У Knight эти контуры не были разделены. Право отключения не существовало как системная функция.
В моделях вроде Саши Стойкова дилер меняет котировки в зависимости от инвентаря. Но после потери доверия к собственному состоянию задача меняется. Управляющий контур больше не должен искать лучший следующий приказ.
Он должен решить, существует ли вообще право на этот приказ. Это задача оптимальной остановки. Как только обнаружен неконтролируемый рост состояния или несогласованный поток, ценность немедленной остановки с последующей диагностикой превышает ценность продолжения. У Knight эта граница не была встроена в систему. Действие «лишить себя доступа к рынку» не включалось автоматически при потере контроля.
Последняя граница перед биржей должна проверять не намерения стратегии,
а фактический исходящий поток. Ей нужно контролировать вещи, обязательные при любой модели: чтобы сумма отправленных заявок не превышала разрешённый объём, скорость приказов не зашкаливала, позиция не пробивала лимиты, а капитал не таял с бешеной скоростью. Более того, риск определяется не только уровнем, но и траекторией. Одна и та же позиция может быть нормальной, если набиралась час, или смертельной, если возникла за секунды без приказа клиента. Такой фильтр не обязан знать название Power Peg.
Он должен увидеть нарушение закона сохранения между разрешением и исполнением.
В октябре 2013 года SEC предъявила Knight обвинения в нарушении правила рыночного доступа. Компания выплатила 12 миллионов долларов штрафа и согласилась на независимую проверку контроля. Регулятор рассматривал катастрофу не как случайную ошибку программиста, а как архитектурный провал. Ответственность возникла потому, что один дефект получил прямой маршрут от бага к рынку и капиталу без единого независимого предохранителя.
После аварии KCG построила систему, которой раньше не существовало: отдельная функция управления операционным риском, контроль исходящих маршрутизаторов с автоматическим отключением, специализированные выключатели для приложений, круглосуточный центр реагирования и формальный план управления инцидентами. Этот список важен не как победная декларация, а как надгробие над отсутствующей системой. До 1 августа риск был размазан между технологиями, трейдингом и операциями. После — появилась архитектура, способная собрать их в единый командный контур.
Knight была построена на скорости. Каждая лишняя проверка внутри критического пути воспринималась как враг. Но инцидент показал, что есть два вида задержек. Одна — время между решением и попаданием приказа на биржу. Вторая — время между возникновением аномалии и лишением системы права торговать. До 1 августа Knight оптимизировала первое. Катастрофу определило второе. Умение быстро отправить заявку не компенсирует неумения быстро заткнуться.
Утром 1 августа Knight не проиграла другой торговой фирме.
Она проиграла гонку собственной машине. Маршрутизатор превращал команду в биржевое исполнение быстрее, чем организация умела превращать нарушение в запрет.
Через пять дней внешний капитал позволил открыться завтра. Через год компания исчезла внутри другой структуры. А недостающий элемент, которого не было между старым кодом и сотнями миллионов долларов, обрёл множество имён: router shutdown, application kill switch, операционный риск, аварийный центр. Но в то утро он должен был означать лишь одно:
следующего приказа не будет.
ДИСКЛЕЙМЕР
Настоящий материал является авторским аналитическим, образовательным и публицистическим текстом об инциденте Knight Capital 1 августа 2012 года, работе автоматизированного маршрутизатора SMARS, функции Power Peg, устройстве электронной торговли акциями, родительских и дочерних заявках, рыночном доступе брокера-дилера, контроле капитала, управлении технологическими инцидентами, рыночном воздействии и последующих корпоративных последствиях.
Название статьи:
«Knight Capital: 212 приказов, которые стоили $461 миллион»
Материал не является индивидуальной инвестиционной рекомендацией, торговым сигналом, предложением купить или продать ценную бумагу, инструкцией по созданию или эксплуатации торгового алгоритма, юридической консультацией, аудиторским заключением, бухгалтерским отчётом, заключением специалиста по информационной безопасности, официальным расследованием, регуляторным решением либо официальной позицией Knight Capital, Knight Capital Americas LLC, Knight Capital Group, KCG Holdings, GETCO, NYSE, Nasdaq, SEC, FINRA или иных организаций, упомянутых в статье.
Материал не призывает использовать высокочастотную торговлю, прямой рыночный доступ, автоматизированную маршрутизацию, кредитное плечо, короткие продажи, собственный капитал брокера либо иные финансовые и технологические механизмы без соответствующих лицензий, процедур контроля, юридической проверки и профессиональной инфраструктуры.
Любые финансовые, инвестиционные, технологические, юридические и корпоративные решения читатель принимает самостоятельно и несёт за них личную ответственность.
Автор не является вашим инвестиционным советником, брокером, дилером, управляющим активами, аудитором, юристом, регулятором, поставщиком торговой инфраструктуры, разработчиком биржевого шлюза или независимым консультантом по соблюдению требований Rule 15c3-5.
ПУБЛИЦИСТИЧЕСКИЙ ХАРАКТЕР НАЗВАНИЯ И ЯЗЫКА
Название «212 приказов, которые стоили $461 миллион» является публицистическим сокращением сложной последовательности событий.
Двести двенадцать клиентских родительских приказов не являлись прямой и единственной экономической причиной всего убытка. Они стали входными сообщениями, обработка которых дефектной функцией Power Peg привела к отправке миллионов дочерних заявок и более чем четырём миллионам исполнений. Финансовый результат возник из сочетания программной ошибки, неполного развёртывания кода, отсутствия достаточных автоматических ограничений, рыночных исполнений, накопления нежелательного портфеля и последующей ликвидации позиций.
Выражения:
«45 минут до смерти»;
«машина начала покупать всё подряд»;
«мёртвый код»;
«безголовый механизм»;
«система проиграла собственной машине»;
«рынок стал второй половиной ошибки»;
«Lost & Found ада»;
«скорость без тормозов»;
«следующего приказа не будет»;
«технологический фактор»;
«самоубийство компании»;
и аналогичные формулировки являются авторскими образами.
Они не являются официальными техническими терминами SEC, буквальными названиями всех программных модулей, самостоятельным доказательством умысла либо юридической квалификацией поведения конкретного сотрудника.
Разговорная лексика, гиперболы, инженерные аналогии и драматизация используются для объяснения сложной микроструктурной и технологической механики. Они не предназначены для унижения сотрудников Knight, разработчиков, трейдеров, руководителей, клиентов, регуляторов или иных участников рынка.
ИСТОРИЧЕСКАЯ РЕКОНСТРУКЦИЯ
Материал представляет собой авторскую реконструкцию событий до, во время и после торгового инцидента 1 августа 2012 года.
Основным первичным источником является административный приказ SEC Release No. 34-70694 от 16 октября 2013 года в отношении Knight Capital Americas LLC.
В приказе SEC описаны:
212 входящих клиентских родительских приказов;
миллионы дочерних заявок;
более четырёх миллионов исполнений;
154 акции;
более 397 миллионов акций в совокупном исполненном объёме;
нежелательные длинные позиции приблизительно на 3,5 миллиарда долларов;
нежелательные короткие позиции приблизительно на 3,15 миллиарда долларов;
убыток свыше 460 миллионов долларов;
неполное развёртывание кода на восьми серверах;
функция Power Peg;
97 сообщений BNET reject с текстом «Power Peg disabled»;
счёт №33;
система PMON;
отсутствие достаточных процедур остановки SMARS;
удаление нового RLP-кода с семи серверов во время попытки устранить проблему.
Разные документы используют различную степень детализации и разные даты оценки финансового результата.
Первоначальное корпоративное сообщение Knight от 2 августа 2012 года указывало приблизительно 440 миллионов долларов реализованного убытка до налогообложения.
Позднейшая годовая отчётность KCG указывала 461,1 миллиона долларов убытка до налогообложения, преимущественно связанного с торговыми потерями.
Поэтому сумма «$461 миллион» в названии является округлением позднейшей корпоративной оценки, а не утверждением, что каждая публикация или документ использовали абсолютно одинаковую цифру.
При расхождении между публицистическим пересказом и первичным приказом SEC, корпоративной отчётностью или иной официальной документацией приоритет имеет соответствующий первичный документ.
ХАРАКТЕР ПРОИЗВОДСТВА SEC
Производство SEC в отношении Knight Capital Americas LLC было административным и гражданско-регуляторным, а не уголовным делом.
Knight Capital Americas LLC представила предложение об урегулировании и согласилась на вынесение приказа SEC без признания или отрицания изложенных выводов, за исключением признания юрисдикции SEC и предмета производства.
Приказ предусматривал цензуру, предписание прекратить нарушения, штраф в размере 12 миллионов долларов и привлечение независимого консультанта для проверки механизмов контроля и процедур.
Упоминание приказа SEC не означает, что автор самостоятельно установил уголовную вину конкретного лица.
Материал не утверждает, что:
каждый сотрудник Knight знал о дефекте до открытия рынка;
конкретный программист намеренно активировал Power Peg;
руководители Knight желали создать нежелательные позиции;
Thomas M. Joyce лично написал дефектный код;
клиенты Knight участвовали в возникновении ошибки;
NYSE, Nasdaq или другие площадки обязаны были распознать внутреннюю неисправность Knight;
любое нарушение процедуры развёртывания является преступлением.
Упоминание имени руководителя, инженера, трейдера или контрагента не означает автоматического утверждения о мошенничестве, умысле, сговоре или личной юридической ответственности.
КОРПОРАТИВНЫЕ СТРУКТУРЫ И НАЗВАНИЯ
В статье термин Knight используется как краткое обозначение нескольких связанных корпоративных структур и бизнеса группы.
Необходимо различать:
Knight Capital Group, Inc. — публичную холдинговую компанию на момент инцидента;
Knight Capital Americas LLC — зарегистрированного брокера-дилера и ответчика в производстве SEC;
KCG Holdings, Inc. — структуру, образованную после объединения Knight и GETCO в 2013 году;
GETCO Holding Company, LLC — участника последующего объединения;
отдельные технологические, торговые и операционные подразделения группы.
Эти структуры не являются одним и тем же юридическим лицом и могли иметь разные активы, обязательства, лицензии, сотрудников и договоры.
Когда статья говорит, что «Knight потеряла», «Knight отправляла заявки» или «Knight не имела тормозов», это является повествовательным сокращением, а не отрицанием юридических и функциональных различий между холдингом, брокером-дилером и отдельными подразделениями.
212 РОДИТЕЛЬСКИХ ПРИКАЗОВ, ДОЧЕРНИЕ ЗАЯВКИ И ИСПОЛНЕНИЯ
Термины parent order и child order используются в соответствии с общей логикой автоматизированного исполнения и описанием SEC.
Родительский приказ отражает исходное клиентское поручение.
Маршрутизатор может создавать одну или несколько дочерних заявок для отправки на внешние торговые площадки в зависимости от доступной ликвидности.
Следует различать:
количество родительских приказов;
количество дочерних заявок;
количество сообщений об отмене или замене;
количество частичных исполнений;
количество полных исполнений;
количество проторгованных акций;
денежную стоимость накопленного портфеля.
Фраза «212 приказов превратились в четыре миллиона исполнений» является допустимым публицистическим описанием зафиксированной SEC последовательности, но не означает простого арифметического преобразования одного типа сообщения в другой без промежуточной работы маршрутизатора и торговых площадок.
Формулы вида:
Q₀ = Σqᵢ;
Rₜ = Q₀ − Eₜ;
qₜᴷⁿⁱᵍʰᵗ = Qₜᵉˣᵉᶜᵘᵗᵉᵈ − Q₀ᶜˡⁱᵉⁿᵗ;
используются как образовательные схемы.
Они не являются точным воспроизведением внутренних полей SMARS, бухгалтерской модели Knight, протокола FIX, логики каждой площадки или исходного кода компании.
SMARS И POWER PEG
SMARS описывается SEC как автоматический высокоскоростной алгоритмический маршрутизатор заявок в акции.
Power Peg являлась старой функцией, которой Knight перестала пользоваться много лет до инцидента, но которая оставалась присутствующей и вызываемой в производственном коде.
Новая логика, связанная с Retail Liquidity Program, должна была заменить неиспользуемый участок Power Peg и повторно использовала флаг, ранее активировавший старую функцию.
На одном из восьми серверов новый код не был установлен.
Указание в статье на «семь серверов в 2012 году и один сервер в 2005 году» является визуальной и повествовательной метафорой рассогласования версий.
Она не означает, что сервер физически работал на операционной системе или полном программном окружении 2005 года.
Фраза «Power Peg забыла, что приказ исполнен» описывает экономический результат дефекта: сервер продолжал направлять дочерние заявки без учёта уже полученного количества исполнений, поскольку информация о полном исполнении родительского приказа не была передана в SMARS.
Это не утверждение о наличии у программы сознания, намерения или способности понимать рынок.
RETAIL LIQUIDITY PROGRAM
Retail Liquidity Program была программой NYSE, одобренной SEC в июле 2012 года на пилотной основе.
Сама программа RLP не признавалась причиной убытка Knight.
Инцидент был связан с изменениями, которые Knight вносила в собственные системы для участия клиентов в программе, и с неправильным развёртыванием кода.
Материал не утверждает, что NYSE разработала дефект Power Peg, обязала Knight оставить старый код в маршрутизаторе или должна была знать о внутреннем рассогласовании версий на серверах Knight.
97 СООБЩЕНИЙ BNET REJECT
SEC указала, что примерно с 8:01 утра внутренняя система Knight сформировала 97 автоматических электронных сообщений, называвшихся BNET rejects, которые ссылались на SMARS и содержали описание ошибки «Power Peg disabled».
Эти сообщения:
создавались в реальном времени;
были связаны с неудачным развёртыванием кода;
могли дать возможность обнаружить проблему до открытия рынка;
не были спроектированы Knight как полноценные системные тревоги;
обычно не просматривались сотрудниками сразу после получения;
не были использованы для диагностики после открытия рынка.
Фразы «97 криков о помощи» и «система заранее назвала будущую катастрофу» являются публицистическими образами.
Они не означают, что сообщения обладали единым официальным уровнем CRITICAL, прямо требовали остановить SMARS или однозначно описывали весь будущий масштаб убытка.
СЧЁТ №33 И PMON
Счёт №33 временно удерживал несколько типов позиций, включая исполнения, которые внутренние системы Knight не могли сопоставить с незаполненным количеством родительского приказа.
Он не был создан специально для инцидента 1 августа и не являлся буквальным «потерянным складом» или юридически отдельным фондом.
Выражение Lost & Found используется как образовательная аналогия.
SEC указала, что для счёта №33 существовал лимит валовой позиции в размере 2 миллионов долларов, однако счёт не был связан с автоматизированными ограничениями общей финансовой экспозиции фирмы.
PMON являлась послеторговой системой наблюдения за позициями.
Она:
полагалась на человеческий мониторинг;
не создавала автоматических тревог по общей финансовой экспозиции;
не отображала непосредственно лимиты счетов и подразделений;
испытывала задержки при экстремальном объёме и могла формировать неточные отчёты;
не была связана с автоматической остановкой входящих на рынок заявок.
Фраза «PMON была наблюдателем без тормозов» означает отсутствие автоматической обратной связи между наблюдением позиции и прекращением отправки заявок. Она не означает, что PMON была единственной системой риска Knight или что все её функции были бесполезными.
ПРАВИЛО РЫНОЧНОГО ДОСТУПА RULE 15c3-5
Rule 15c3-5 требует от брокеров-дилеров с рыночным доступом создавать, документировать и поддерживать систему механизмов управления риском и надзорных процедур, разумно предназначенных для управления финансовыми, регуляторными и иными рисками рыночного доступа.
Правило, среди прочего, предусматривает систематические механизмы, направленные на предотвращение ошибочных заявок и заявок, превышающих заранее установленные кредитные и капитальные пороги.
Статья не является полным юридическим комментарием к Rule 15c3-5.
Она не рассматривает все подпункты правила, последующие разъяснения SEC, исключения, обязанности по сертификации, хранению документов, Regulation SHO и иные применимые нормы.
Фразы «не было тормозов», «не существовало kill switch» и «между кодом и капиталом не было независимого контура» являются аналитическими обобщениями выводов SEC о недостаточности механизмов контроля.
Они не означают полного отсутствия любых риск-фильтров в Knight.
SEC указывала, что у Knight существовали определённые контроли до попадания заявок в SMARS и отдельный ценовой фильтр, однако они не были достаточными для предотвращения данного инцидента.
ЦЕНОВОЙ ФИЛЬТР И КОНТРОЛЬ ОБЪЁМА
SEC описывала контроль, ограничивавший лимитную цену дочерних заявок уровнем примерно на 9,5 процента ниже National Best Bid для продаж либо выше National Best Offer для покупок относительно момента получения родительского приказа.
Этот фильтр не предотвращал ошибочные заявки, если рынок двигался менее чем на 9,5 процента, и не применялся к определённым приказам, полученным до открытия и предназначенным для аукциона открытия.
Фраза о том, что «каждая отдельная заявка выглядела допустимой, но последовательность была катастрофической», является аналитическим объяснением различия между транзакционным фильтром и накопленным состоянием.
Она не означает, что абсолютно каждая заявка соответствовала всем нормативным требованиям. Приказ SEC также содержал выводы о нарушениях Regulation SHO.
РЫНОЧНОЕ ВОЗДЕЙСТВИЕ И ДРУГИЕ УЧАСТНИКИ
SEC указала, что ошибочные исполнения Knight повлияли на цены акций в течение 45-минутного периода.
Для 75 акций исполнения Knight составляли более 20 процентов торгового объёма и способствовали движениям цены более чем на 5 процентов.
Для 37 из этих акций цена изменилась более чем на 10 процентов, а исполнения Knight составляли более половины торгового объёма.
Некоторые внешние участники получили менее выгодные цены, чем получили бы без этих исполнений, а другие — более выгодные.
Материал не утверждает, что:
каждый маркет-мейкер распознал Knight как информированного участника;
все алгоритмы одинаково реагировали на поток;
каждое движение цены было полностью создано Knight;
арбитражники действовали согласованно;
контрагенты знали о программной ошибке;
получение выгодной цены означало неправомерное поведение.
Псевдокод, диаграммы состояний и записи вида:
aₜ = π(Xₜ);
aₜ = π(X̃ₜ), X̃ₜ ≠ Xₜ;
P(WORKINGₜ₊₁ | FILLEDₜ) = 0;
V(t,X) = max{Vcontinue, Vstop};
используются как учебные схемы. Они не воспроизводят исходный код Knight, внутренние классы, процедуры, поля сообщений, названия таблиц или фактическое решение HJB внутри компании.
ИДЕМПОТЕНТНОСТЬ И РАСПРЕДЕЛЁННОЕ СОСТОЯНИЕ
Понятия идемпотентности, поглощающего состояния FILLED, расхождения источников истины, семантического расщепления флага и blast radius используются как инженерные аналогии.
Они помогают объяснить, почему повторное экономическое действие создаёт новый финансовый результат и почему разные версии программного обеспечения могли по-разному интерпретировать один и тот же входной флаг.
Материал не утверждает, что внутренние инженеры Knight использовали именно такую терминологию при проектировании SMARS или последующем расследовании.
РЕМОНТ В ПРЯМОМ ЭФИРЕ
SEC указала, что Knight не имела достаточных надзорных процедур для реагирования на значительные технологические и комплаенс-инциденты и в основном полагалась на технологическую команду, которая пыталась определить и устранить проблему в работающей торговой среде.
Во время одной из попыток новый RLP-код был удалён с семи серверов, где он был установлен корректно. Это ухудшило проблему, поскольку дополнительные родительские приказы начали активировать Power Peg на этих серверах.
Фраза «один опасный узел превратился в восемь» является визуальным сокращением расширения области поражения.
Она не означает, что все восемь серверов непрерывно и с одинаковой интенсивностью создавали идентичный поток на протяжении всего периода.
УБЫТОК, КЛИЕНТЫ И РЫНОЧНЫЕ УЧАСТНИКИ
В корпоративном сообщении от 2 августа 2012 года Knight заявила, что клиенты не пострадали непосредственно от ошибочных заявок и что компания полностью закрыла нежелательные позиции.
Это заявление следует отличать от вывода SEC о влиянии ошибочных исполнений на цены и о том, что отдельные участники рынка получили более или менее выгодные цены.
Фраза «деньги перешли к другой стороне рынка» является экономическим обобщением реализованного торгового результата.
Она не является утверждением, что весь убыток в точности равен прибыли идентифицируемой группы маркет-мейкеров или что каждый контрагент сохранил полученную выгоду после хеджирования, комиссий и последующих сделок.
ЭКСТРЕННОЕ ФИНАНСИРОВАНИЕ
6 августа 2012 года Knight объявила о завершении сделки по привлечению 400 миллионов долларов акционерного капитала от группы инвесторов.
Сделка включала выпуск привилегированных акций и была направлена на укрепление финансового положения и восстановление ликвидности компании.
Выражения «деньги купили право открыться завтра» и «компания продала будущий контроль» являются публицистическими объяснениями экономической срочности и потенциального размывания долей.
Они не заменяют анализ соглашения о покупке ценных бумаг, прав разных серий привилегированных акций, условий конвертации, голосования и последующего поведения инвесторов.
ОБЪЕДИНЕНИЕ С GETCO И KCG
В 2013 году Knight и GETCO объединились, в результате чего была сформирована KCG Holdings.
Материал может описывать этот результат как утрату прежней самостоятельности Knight, однако юридическая и бухгалтерская структура объединения была сложнее простого «исчезновения».
Последующая отчётность KCG отражала интеграцию активов, обязательств, финансирования, систем управления риском и операционных процедур.
Фраза «Knight исчезла внутри другой структуры» является публицистическим описанием корпоративной трансформации, а не утверждением о немедленной ликвидации всех юридических лиц и операций Knight.
ПОСЛЕДУЮЩИЕ МЕРЫ КОНТРОЛЯ
В годовой отчётности KCG за 2013 год были описаны меры, реализованные после инцидента, включая:
назначение Chief Risk Officer;
создание комитета по рискам совета директоров;
формирование функции управления операционным риском;
дополнительные этапы проверки и надзорного одобрения значимых установок программного обеспечения;
контроль исходящих маршрутизаторов и возможность их быстрого автоматического отключения;
развёртывание kill switches для отдельных приложений и каналов рыночного доступа;
создание круглосуточного Emergency Response Center;
формальный Emergency Management Plan.
Описание этих мер не означает, что после 2013 года любой технологический или рыночный риск был полностью устранён.
Корпоративная отчётность сама указывает, что никакие процедуры и технологии не дают абсолютной гарантии отсутствия существенного сбоя.
ПОРТРЕТЫ, ФОТОГРАФИИ И ВИЗУАЛЬНЫЕ РЕКОНСТРУКЦИИ
Фотографии руководителей, торговых залов, серверов, биржевых зданий, терминалов и дата-центров могут использоваться как редакционные или иллюстративные материалы.
Наличие портрета рядом с описанием системного сбоя не означает личного участия изображённого лица в написании кода, развёртывании конкретного файла или принятии каждого операционного решения.
Сгенерированные или стилизованные изображения торговых экранов, серверных топологий, книг заявок и risk dashboards являются визуальными реконструкциями.
Они не должны восприниматься как подлинные снимки внутренних систем Knight, SMARS, PMON, счёта №33 или исходного интерфейса Power Peg, если прямо не указано обратное.
ПРЯМАЯ РЕЧЬ И РЕКОНСТРУИРОВАННЫЕ ФРАЗЫ
Точные цитаты должны быть обозначены кавычками и сопровождаться источником.
Фразы, созданные автором для объяснения поведения системы, рынка, инженера или риск-менеджера, не являются дословной стенограммой.
Выражения вида:
«следующего приказа не будет»;
«сначала остановить, потом чинить»;
«рынок не видит ошибку, он видит заявку»;
«система назвала будущую катастрофу»;
«код уже стал балансом»;
являются авторскими формулами, если прямо не указано иное.
АВТОРСКОЕ ПРАВО
Краткие цитаты из приказов SEC, корпоративных документов, нормативных материалов и научной литературы используются для анализа, критики и образовательного комментария.
Значительные фрагменты сторонних публикаций, книг и исследований не воспроизводятся.
Пересказ содержания не означает присвоения авторства документов, моделей, интервью, схем или исследовательских выводов.
Логотипы, фотографии, скриншоты, таблицы и изображения могут охраняться авторским правом или товарными знаками. Указание источника не заменяет разрешение правообладателя, если такое разрешение требуется для конкретного способа публикации.
АКТУАЛЬНОСТЬ ИНФОРМАЦИИ
Материал описывает исторические события 2012–2013 годов и использует документы, опубликованные в разные периоды.
Нормативные требования, структура организаций, названия юридических лиц, статус торговых программ и технические стандарты могут изменяться.
Перед использованием статьи в юридическом, академическом, журналистском, комплаенс- или судебном контексте необходимо самостоятельно проверить актуальную редакцию применимого правила и первичного источника.
ГЛАВНАЯ ЗАДАЧА СТАТЬИ
Главная задача материала состоит не в доказательстве того, что:
вся алгоритмическая торговля опасна;
все маркет-мейкеры манипулируют рынком;
любая высокая скорость ведёт к катастрофе;
любое наличие устаревшего кода автоматически нарушает закон;
каждый технологический сбой требует полной остановки всех рынков;
каждая система мониторинга бесполезна без автоматической блокировки;
NYSE или другие биржи несут ответственность за внутренний код брокера;
конкретный сотрудник Knight намеренно причинил убыток;
Статья рассматривает различие между:
клиентским намерением и дочерней заявкой;
внутренним состоянием приказа и рыночным сообщением;
наблюдением риска и управлением риском;
локально работающим контролем и глобальной устойчивостью системы;
ценовым фильтром и ограничением накопленного объёма;
чистой и валовой экспозицией;
техническим уведомлением и аварийной тревогой;
работающим процессом и корректной семантикой;
откатом файла и восстановлением безопасного состояния;
остановкой генератора и ликвидацией уже созданного портфеля;
скоростью исполнения и скоростью прекращения исполнения;
ошибкой в коде и событием капитального уровня.
Статья выражает авторскую интерпретацию перечисленных исторических, регуляторных, корпоративных и академических материалов.
ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ И МАТЕРИАЛЫ
U.S. Securities and Exchange Commission.
In the Matter of Knight Capital Americas LLC.
Exchange Act Release No. 70694, Administrative Proceeding File No. 3-15570, October 16, 2013.
https://www.sec.gov/files/litigation/admin/2013/34-70694.pdf
U.S. Securities and Exchange Commission.
SEC Charges Knight Capital With Violations of Market Access Rule.
Press Release No. 2013-222, October 16, 2013.
https://www.sec.gov/newsroom/press-releases/2013-222
U.S. Securities and Exchange Commission.
Risk Management Controls for Brokers or Dealers with Market Access.
Final Rule, Exchange Act Release No. 63241.
https://www.sec.gov/files/rules/final/2010/34-63241fr.pdf
U.S. Securities and Exchange Commission.
Responses to Frequently Asked Questions Concerning Risk Management Controls for Brokers or Dealers with Market Access.
https://www.sec.gov/rules-regulations/staff-guidance/trading-markets-frequently-asked-questions/divisionsmarketregfaq-0
U.S. Securities and Exchange Commission.
Order Granting Approval to NYSE Retail Liquidity Program.
Exchange Act Release No. 67347, July 3, 2012.
https://www.sec.gov/rules/sro/nyse/2012/34-67347.pdf
Knight Capital Group, Inc.
Update Regarding August 1st Disruption to Routing in NYSE-Listed Securities.
Corporate press release filed with the SEC, August 2, 2012.
https://www.sec.gov/Archives/edgar/data/1060749/000119312512332176/d391111dex991.html
Knight Capital Group, Inc.
Knight Capital Group Completes $400 Million Equity Financing Agreement.
Corporate press release filed with the SEC, August 6, 2012.
https://www.sec.gov/Archives/edgar/data/1060749/000119312512338098/d392396dex991.html
Knight Capital Group, Inc.
Form 8-K regarding the $400 million financing.
Filed August 6, 2012.
https://www.sec.gov/Archives/edgar/data/1060749/000119312512338098/d392396d8k.html
KCG Holdings, Inc.
Annual Report on Form 10-K for the year ended December 31, 2013.
Operational risk, $461.1 million loss and post-incident remedial measures.
https://www.sec.gov/Archives/edgar/data/1569391/000144530514000824/kcg2013123110-k.html
ПРИМЕЧАНИЕ
Настоящий дисклеймер уменьшает риск неправильного понимания публицистического и образовательного текста, но не заменяет юридическую, редакционную, техническую и комплаенс-проверку материала перед публикацией.