Главная » Хабрахабр » [Перевод — recovery mode ] Однажды в HFT-компании…

[Перевод — recovery mode ] Однажды в HFT-компании…

В первый день меня встретил офис с огромными окнами с видом на сиднейскую гавань, на одном из которых было написано фломастером “< 2ms”. Личная история трейдинга, все совпадения случайны.
image
Я начал свою карьеру в HFT в австралийском филиале одной из крупнейших американских трейдерских компаний в качестве программиста на C++. Итак... Это было главной задачей для дюжины разработчиков, но, пока что, не для меня.

Первоначальный шок

Ему нужно было нечто, что могло бы справиться с кучей запутанных правил торговли и быть интегрировано с используемой нами торговой платформой, которая называлась Orc. Один из ребят предложил идею торговли опционами на австралийской фондовой бирже (ASX), а точнее – опционными спредами и их комбинациями с обязательным хеджированием. При этом я использовал C++, Boost и многопоточный парсер Spirit для интеграции с Orc. Это были ранние двухтысячные и я написал для него свое решение на VB6 под Windows 2000. Для моего кода расчета цены я использовал чужой код на VBA, построчно переписанный на C++. Последний рассчитывал биномиальные или триномиальные деревья для оценки американских опционов на бирже ASX по требованию.

Если исходные параметры оставались прежними, Orc просто возвращал цену из памяти, вместо того, чтобы пересчитывать её заново. Однако, Orc не всегда вычислял цену по запросу, часто он использовал кэширование. Она казалась слишком убогой, чтобы соревноваться с другими по производительности, вне зависимости от того, какие трюки я с ней проворачивал. Эта платформа была слишком медленной чтобы побороть конкурирующий софт от Timber Hill’s, самую быструю торговую систему на тот момент. Однако, с большим многомерным кэшем цен опционов (отсутствующие значения получались из него простой интерполяцией), постоянно обновляемым в несколько потоков кодом, которых был написан на C++, неожиданно мы смогли совершать те сделки, которые были недоступны ранее.

Конечно, это решение не было оригинальным. При изменении процентной ставки или кривой волатильности в Orc Trader, мой кэш цен начинал заполняться снова. Также как в современном микропроцессоре с внеочередным исполнением ты можешь догадаться о следующих вычислениях, которые еще только может потребоваться сделать в будущем. Впервые я прочитал о кэшировании цен опционов в старой статье несколькими годами ранее. Запомните, самые быстрые вычисления – те, которые не нужно делать. Рыночные цены дискретны. Этот странный вывод о предсказании будущего я сделал из того, что самое быстрое сообщение – это то, которое не придется отправлять. Следующей стала идея о том, что побить нулевую задержку тяжело, но не невозможно. По-моему, это даже более важно.

Это, возможно, выглядит немного смешным, но является чистой правдой в случае HFT. На мой взгляд, лучшая архитектура — это отсутствие жесткой архитектуры. Поскольку на самом деле преждевременная оптимизация является основой всего, выгоднее не развенчивать общеизвестные компьютерные мифы и позволить своим конкурентам спотыкаться на них. Неструктурированный код мгновенно превращается в legacy, если вы не уделяете внимания архитектуре системы.

Они на самом деле были счастливы, когда своими глазами увидели эти сделки. Мой хак для платформы Orc Trader был не идеальным решением, но он обрадовал нескольких людей сделками, которые раньше были невозможны. Он преобразился в сотни ручных правил поиска сделок, окупая своим трейдингом лишь затраты на оператора. Однако, в целом это был только незначительный успех. Но, по крайней мере мне было весело.

Сосредотачиваемся на “< 2ms”

Я написал статью, предлагающую более быстрый и более сложный способ достичь еще меньших задержек. Давайте вспомним про условие “< 2ms”, записанное на оконном стекле. Первый выбор пал на корейскую биржу. Команда из трех программистов, включая меня, должна была реализовать его. В этом проекте не было никакой необходимости в кешировании цен, поскольку модель расчета цен европейских опционов не намного сложнее простой интерполяции, даже в нескольких измерениях.

Наша метрика производительности была несколько неправильной – мы в основном измеряли задержки внутри нашего кода, нежели те, которые лежат внутри операционной системы (которые на самом деле гораздо больше.) Это еще работало, когда данные поступали с миллисекундными интервалами, поскольку в те времена сетевой стек тратил на обработку пакета от 50 до 100 микросекунд. В это время процессоры с частотой 2-3 ГГц только начали появляться. Честно говоря, это очень-очень плохой код, если этот миллион инструкций уходит на простые расчеты цен. Главное, что тут нужно запомнить – когда процессор может исполнять более миллиарда операций в секунду, то в эти две миллисекунды влезает свыше миллиона инструкций. Тут каждая наносекунда важна. Если принятие решения о сделке занимает у вас миллион шагов, увольняйтесь немедленно.

В отделе разработки нас было всего трое. Оказалось, что меня прикрепили к не очень слаженной команде и как новый сотрудник, я должен был вести себя осторожно. “Мистер GPU” раньше написал ключевые библиотеки компании для многопоточности, и они были неплохи, хотя и страдали проблемами с дизайном. Один из членов команды (который на самом деле был отличным программистом) видимо, устал и стал тратить всё рабочее время на игры и форумы про видеоускорители. В итоге я снова пришел к использованию C++ библиотеки Boost. Вся синхронизация была сделана через мьютексы и любая операция требовала блокировок. Он, несомненно, был раздражен необходимостью работать над моей идеей. “Мистер GPU”, по всей видимости, не получал удовольствия от проекта и выглядел участвующим в какой-то забастовке. Обычно он очень много ел и постоянно уходил в переговорную комнату, чтобы посмотреть там очередной фильм на DVD. Другой парень был менее способным, но все же минимально компетентным.

Как оказалось, мне нужно было написать больше кода, чем ожидалось – приходилось несколько раз оставаться допоздна. Но нам нужно было как то справляться, чтобы одолеть эти две миллисекунды. В результате наша новая система показывала задержки чуть менее пяти микросекунд. “Мистер GPU” сделал работу по интеграции, в то время как “Отстраненный чувак” не сделал вообще ничего. Однако, эта цифра не учитывала сетевые задержки. Мне казалось, что это был огромный успех. Определенно, они сейчас имеют гораздо большее значение, чем месяц назад.

От него я узнал, что основная часть айтишников (включая него) считала это невозможной задачей. Один из других сотрудников поздравил меня. Перемены, которые я принес, не встретили широкого восторга, но я получил небольшой бонус без значительной прибавки к зарплате. Видимо, они надеялись, что я провалюсь.

Но сейчас для меня явно наступило время двигаться дальше. Раньше я предполагал остаться на этой работе лет на двадцать, особенно после пузыря доткомов.

Поиск новой работы

Одна неплохая голландская трейдинговая компания выслушала меня очень внимательно, но ничего не предложила. Я списался с несколькими HFT-компаниями и поделился своими мыслями о том, что можно сделать. Я слышал, что подход оказался успешным. Годы спустя я узнал, что их команда начала реализовывать нечто вроде того, о чем мы говорили на интервью, на следующей же неделе после него. Мне нравится их название для моего метода, несмотря на то, что оно выглядит карго-культом. Они назвали его “implied base method”, в котором все сводилось к предсказанию теоретической цены фьючерса или базового актива. Несмотря на обман с их стороны, я был польщен. Ну, это тот способ, которым финансовые компании обычно ведут дела.

Их платформа была в основном даже медленнее Orc Trader, затрачивая многие миллисекунды на расчеты. Затем я переговорил с одной австралийской компанией с командой из около дюжины разработчиков, сосредоточенной на трейдинге на бирже ASX. Он был одним из ребят со сверхвысокой зарплатой, чей доход должен был быть задекларирован по австралийским законам. Я напросился на встречу с главой компании, который был гораздо успешнее и гораздо моложе меня.

Переговоры с этой фирмой были пустой тратой времени – я не хочу быть черной шляпой. Их бизнес выглядел не до конца ”чистым”, и он предупредил меня, что заработанные ими деньги за границей не всегда можно юридически легко вернуть в материнскую компанию. Поиск пробелов в правилах – забавная игра, до тех пор, пока это этично. Серой еще куда ни шло. Нет никакого удовольствия в победе путем обмана, но, что более важно, ваша репутация имеет значение. Однако, эти красные линии мы не должны пересекать. Люди всегда недооценивают убытки от скандалов, и я не хотел рисковать.

Это был филиал большой конторы с Уолл-Стрит. Еще мне понравился один из инвестиционных банков, с представителем которого я разговаривал. Входной порог казался довольно низким – они не хотели зарабатывать деньги, они просто хотели создать биржевой оборот без каких-либо затрат, поэтому их финансовый департамент мог петь серенады этому филиалу. Я уже успел отработать несколько лет в такого рода среде. Прибыль редко вызывает жалобы. Это казалось мне хорошим вариантом и я был уверен, что они не будут возражать против создания оборота, а также против получения дополнительной прибыли.

Кто-то нарушил правила, сделав несколько сделок, которые не были санкционированы. Хорошим моментом в моей предыдущей фирме было то, что они могли уволить даже зарабатывающих деньги сотрудников. Такая правильная позиция менеджмента встречается крайне редко, особенно в финансах. Они принесли компании деньги и я был впечатлён тем, что их всё равно уволили за нарушение правил.

Затем довольно неожиданно возникла другая возможность.

Он предложил мне поговорить с ITG, так как они занимались частным трейдингом. Однажды я обедал с парнем, которого знал по курсу computer science в университете Тасмании, который теперь работал на ITG. Я встретился с их генеральным директором по Азиатско-Тихоокеанскому региону и он подробно рассказал про их арбитражную платформу, которая работает с акциями, номинированными в USD и CAD. Для меня это было новостью – я думал, что они просто брокеры. Встреча прошла хорошо, и, похоже, больше не оставалось преград для того, чтобы развивать высокочастотный трейдинг в ITG. Затем я познакомился с генеральным директором по США Рэем Киллианом, когда он был в поездке в Австралию. Генеральный директор Азиатско-Тихоокеанского региона плюс их председатель, который также был членом правления включенной в список NYSE компании ITG Inc., в конце концов повёз импровизированный бизнес-план и расчеты рисков в США на заседание правления.

Согласно одной из версий, совет одобрил бизнес-план, но Киллиан отыграл всё взад. Что произошло дальше, я не знаю – мне рассказали три совершенно разные версии в течение следующих нескольких лет. По третьей версии, бизнес-план вообще не дошел до членов правления. Согласно другой версии, некоторые члены правления не одобрили проект. Ребята из ITG решили обойтись без своего работодателя и инвестировать личные средства. Я не знаю, какие версии были ошибочными (возможно, все сразу), но это не имело значения. Это было похоже на победу. Это была не совсем та работа, которую я искал, но если бы бизнес пошел хорошо – я смог бы заработать около четверти акций новой компании через опционы, полученные в течение нескольких лет по вестингу.

Рождение HFT-компании

Я настроил несколько серверов и рабочих станций, установил 64-битный SuSE Linux, нанял трех программистов – и часики, отмеряющие оплаченный инвесторами период, начали тикать. Таким образом, получив инвестиции в размере 1,5 миллиона австралийских долларов, пришло время снова начать работать в одиночку с ноутбуком в офисе. Вскоре я устал делать плохо админские задачи и поручил их фрилансеру. Оказалось, что я не очень хороший системный администратор Linux. Но оказалось, что 64-битный SuSE Linux, особенно на процессорах AMD с их шиной Hypertransport, не был готов к нагрузкам в прайм-тайм, поэтому мы вернулись к 32-битной сборке RedHat/CentOS. Теперь нас было четыре с половиной человека. Это было мудрое решение “мистера Сисадмина”, немного продвинувшее нас вперёд.

Мы должны были выбрать – запускаться у нас на ASX или идти в Корею. Через четыре месяца мы окинули взглядом перспективу. Мы выбрали Корею, хотя и бизнес и техническая среды там были более сложными и рискованными. Три корейские биржи, KSE, KOSDAQ и KOFFEX тогда как раз сливались в единую Корейскую биржу, KRX. Однако, возможностей там тоже было больше, плюс более простая математика в моделях ценообразования и небольшое количество инструментов обещали более легковесную кодовую базу.

При создании новой системы вы обычно пытаетесь составить некоторые соглашения об именах, чтобы облегчить себе жизнь. Тогда же произошла одна забавная вещь. Однако из-за слияния корейских бирж еще не было назначено кода ISO для новой биржи. Я решил использовать коды ISO или их часть для стандартизации. Он решил, что новым кодом для объединенной биржи будет XKOX. Я связался с ответственной группой ISO, которая оказалась единственным парнем с excel-таблицей, сидящим где-то в Европе. Возможно, лучшей идеей будет использовать очевидные коды KRX или XKRX? Я ойкнул и написал ему, что это сочетание не очень благозвучно звучит по-английски. Так что теперь я могу утверждать, что именно я создал код ISO для объединённой корейской биржи. Мы посмеялись и так XKRX стал новым кодом ISO.

Вы должны были пройти через шлюз брокера и использовать их специфичный API для подключения. В те давние времена в Корее трейдеры, даже высокочастотные, не могли получить прямого доступа к бирже. Среди клиентов возникала большая разница в задержках, не контролируемая брокером, просто из-за разного местоположения и технологии взаимодействия. Не было вообще никакой коллокации. Сама KOFFEX располагалась в Пусане, портовом городе на расстоянии чуть больше трёхсот километров от Сеула. На бирже KOFFEX торговались фьючерсы и опционы. Из-за этого они были самыми оборотистыми производными инструментами в мире с десятикратным отрывом от остальных. Производные контракты на индекс KOSPI 200 имели маленький номинал, но большой размер лота. Этого оказалось слишком много для KOFFEX, поэтому основные торги этими инструментами велись от их имени на бирже KSE в Сеуле. Контракт евро/доллар на CME был номером два, а опционы на KOSPI 200 были номером один. Стало быть, всё, что нам было нужно от биржи, располагалось в одной точке в Сеуле, хотя сама она была основана в Пусане.

Я нашел аппаратный конвертер протокола Ethernet в InfiniBand, который вносил задержку в 3 микросекунды. К этому моменту я уже знал, что сетевой стек вносит самые значительные задержки, которыми я смог управлять в нашей новой реализации. Шина Hypertransport (HTX) от AMD, альтернатива PCI Express, была более современной, что обеспечило меньшую внутреннюю задержку. Он был выполнен в виде модуля, который подключался к коммутатору TopSpin InfiniBand. Он выглядел, конечно, несколько неуклюже и топорно, но зато был одним из самых конкурентоспособных в мире. Я купил несколько сетевых карт Pathscale HTX Infinipath и материнских плат с поддержкой HTX (они тогда существовали только в альфа-версиях, например, у одной из них был серийный номер 0x0000045!), собрал все эти разношёрстные детали в большой корпус и получил недешевый, но чрезвычайно быстрый сетевой стек, которым я был очень доволен. Еще в течение нескольких лет обычные сетевые карты не могли сравниться с моей конфигурацией.

Выбор брокера

Я пошёл с одним из инвесторов, человеком по имени Bubble, который затем стал нашим сотрудником. После этого мы отправились в Сеул, чтобы найти брокера и место в дата-центре. Именно ему поручили забронировать отель в Сеуле. Сначала он разрывался между между ITG и HFT, но позже перешел полностью в наше распоряжение, поскольку и генеральный директор, и председатель по АТР, а также другие сотрудники ITG были нашими инвесторами. Не очень хорошее начало. Оказалось, что он выбрал мотель с почасовой оплатой, соблазнившись очень живописным художественным описанием, скрывшим истинную картину – захудалые, грязные, комнаты с облупленным кондиционером, зараженный вирусами компьютер. Неловко, но смешно. Несколько брокеров заезжали к нам и выражали удивление по поводу нашего района. Поездка получилась довольно продуктивной, мы заключили потрясающе невероятную сделку.

Хорошая сделка

У большой фирмы, из которой я уволился, не было прямого доступа. Контора Muppetz Securities предложила нам услугу DMA. Это стоило около 500 000 долларов США за небольшую коробку, созданную в рамках специальной внутренней программы разработки приложений от HP. Перед этим я приценивался к системе от HP/Compaq/Tandem на старой работе, поскольку это был один из способов попасть во внутреннюю сеть конкретного брокера, чтобы стать ближе к бирже. Предлагаемая же нам сейчас услуга DMA была реализована на базе протокола Х. Соблазнительно, но не для бизнеса, который доживает свои последние дни. Эта сделка с брокером была довольно дорогой, но, поскольку настоящий прямой доступ был неслыханным прежде явлением, я подписал контракт через несколько дней. 25, что было тогда для меня новаторским.

Мы помогали друг другу в поисках брокеров в Корее. В то время я познакомился с “мистером Ри” из местной компании RTS, который проездом был в Сеуле, разбираясь со своими делами. Вы можете подумать, что логичным выбором была бы платформа Orc. Мы использовали внутреннюю информационную систему RTS в качестве резервного хранилища для наших сделок, чтобы акционеры могли сравнить наши данные с теми, что транслируют независимые поставщики. Тем не менее, RTS имел гораздо более удобный API и стоил дополнительных 10% от ежемесячных затрат. Я был знаком с Orc, и на этом этапе он имел самый удобный пользовательский интерфейс.

Теперь это было бесполезным – мы собирались переходить на X. Вернувшись в Сидней, я посмотрел на все это дорогое оборудование под InfiniBand. Неожиданный, но приятный поворот событий. 25. Подписанный контракт был бесполезен. Затем я получил сообщение от брокера Muppetz Securities о том, что сделка была отменена.

X. Некоторое время спустя я узнал, что Muppetz пошел в большую контору, в которой я работал прежде. Зачем отдавать его какой-то маленькой стартаперской HFT-фирме, которая ещё даже не торгует, когда вы можете пойти на уровень выше и заключить сделку с реальными трейдерами? 25 был очень ограниченным и редким ресурсом. Это был умный ход, хотя и неэтичный.

Я полагаю, что очень многие HFT-фирмы думали о том, как получить прямой доступ. Оказывается, выражение "нет" ослабило мозг некоторых брокеров. Однако, аннулирование контракта с Muppetz привело к другим, гораздо лучшим предложениям. Должно быть, пришло время. Его цена была намного лучше, чем у Muppetz и хотя технологически это подключение являлось брокерским доступом, но расположение было потрясающим. Одно от мистера М., настоящего джентльмена и просто потрясающего парня с хорошей командой. Его точка подключения была прямо в здании биржи!

Оказывается, у этой фирмы была пыльная, простая комната без кондиционера в пристройке к старому зданию KRX. Я понятия не имел, что там можно торговать. Эта комната использовалась как место для аварийных терминалов. Это старое здание, в отличие от новой постройки, недавно возведенной на территории кампуса, было соединено коридором с главной башней, где располагался движок биржи в нескольких этажах под землей. Если бы всему миру пришел конец, нужно было послать туда сотрудников, чтобы ввести ключи. Там стоял маленький стол в узкой комнате с терминалами со старыми CRT-мониторами. Будет ли нам интересна эта маленькая отстойная комната, которая является самым лучшим, что они могли предложить на данный момент? Эта комната не была приспособлена для серверной инфраструктуры. Я пытался скрыть своё волнение, отвечая “да”.

25 было технологически более быстрым, но точка подключения была в здании снаружи кампуса KRX, что вносило дополнительную задержку. Решение Muppetz на базе X. Кто-то собирался заплатить большую премию за решение, которое не было таким крутым, как то, к которому мы только что пришли.

X.25 и технологии

25 в рамках биржевой инфраструктуры была интересной. Реализация на базе X. Внутри линии выделялись виртуальные каналы на 64 килобит в секунду (kbps) по принципу чередования времени. Вы могли рассчитывать на линию класса T1 или E1 (биржа имела оба варианта и использовала их поочередно) от Koscom, главного технологического и сетевого провайдера KRX. Брокер имеет ограниченное количество линий, но много параллельных (хотя и медленных) каналов. Интересно, что из-за этого чередования, вы по сути имеете параллельный доступ ко всему каналу в одно и то же время.

25 у продавца в Великобритании. Я провел небольшое тестирование и сперва купил сетевые платы стандарта X. Когда-то много лет назад я разрабатывал информационную систему для учета лизинга автомобилей в Ситибанке, и она использовала протокол X. Достаточно популярные, достойные упоминаний, они казались вполне промышленного качества. Развлечение, которое мне доставила эта разработка, стало возможным только потому, что у меня была неудачная молодость в доинтернетные дни – BBS, FIDO, Z-modem, Y-modem, вот это всё. 25. После этого всё было просто. Большая часть времени в Ситибанке была посвящена ковыряниям с модемами и другим оборудованием, только для того, чтобы заставить всё это работать вместе. Ни мы, ни поставщик карт не могли заставить их нормально работать. Но не с этими сетевыми платами. Затем мы купили несколько дешевых сетевых адаптеров у канадской компании Sangoma, которые сразу заработали очень хорошо. В конце концов, состоялся разговор на повышенных тонах и продавец просто перестал брать трубку.

Я пришел с собранными вручную серверами в сумке. В нашей пыльной рабочей комнате, мы поставили свою серверную стойку. Канал до биржи появится немного позже, а сейчас нам срочно нужны были рыночные данные, чтобы подготовить и настроить нашу инфраструктуру. Коммуникационных линий для нас еще не выделили. Биржа решила эту проблему, пропустив витую пару по воздуху снаружи здания и заведя её через откидное окно в нашу комнату, которое мы должны были всегда держать открытым. HFT требует много, очень много данных. Витая пара подключена к модемам T1. Когда шел дождь, воды в комнату попадало чуть меньше, чем можно было бы ожидать. Гигантские разъемы X. Модемы, в свою очередь, подключены к последовательным портам. Медленные биты – большие биты. 25, наследие шестидесятых годов, торчат из наших плат Sangoma.

25. Вскоре подключили линию от биржи для отправки ордеров с еще более гигантскими ответными разъемами X. Вместо выделенных линий, как мы изначально договаривались, мы использовали обычные интернет-каналы. У нас были модули для работы с Postgresql (вскоре замененные на версии с плоскими файлами), торговый движок на C++, сервис для расчета волатильности и т.д. Гораздо дешевле, выше пропускная способность и более надежно, чем выделенные линии. Мы взяли трех поставщиков, которые обещали географическую независимость и прописали маршруты для обеспечения избыточности. Это было необычно в то время, но многие делают то же самое сейчас.

(Фаль)старт торговли

Никаких сертификаций от биржи тогда не требовалось. Через девять месяцев после запуска мы закончили тестирование. Мы начали торговать – по опционам было 85% исполнений! В то время это действительно была земля ковбоев. У нас было в основном последнее. Это означает, что либо вы не можете верно оценить опционы, и кто угодно может продать вам контракты по плохим ценам, либо вы всегда первые в очереди и вы преуспеваете.

Но мы не могли заработать денег.

Мы потратили почти миллион долларов на разработку платформы для этого, а остаток в полмиллиона оставался на брокерском счету как обеспечение для нашей торговли, мы не могли его трогать. Изначально наш план состоял в том, чтобы просто покупать “сочные” опционы и хеджировать их фьючерсами. Мы постоянно работали над этим, и всё понемногу улучшалось, но проблема не была решена до конца. Мы можем успеть схватить опцион, но вся прибыль испарится, если мы не сможем его правильно хеджировать. Производительность нашего торгового движка была недостаточной. Я ночевал в офисе, а остальная часть команды также усердно работала. После этого стало намного лучше, но мы нашли ошибку в новом торговом движке. Я поймал зубами пулю и переписал его за 72 часа непрерывной работы. Тред, который писал логи, потреблял кванты времени основного потока, и это стоило нам много времени. Внутренние задержки приложений маскировали её, но она была заметна при внешних измерениях. Я просто решил назначить основному потоку приоритет реального времени с соответствующими понижением приоритетов остальных и… ура! Правильное разрешение не было простым, поскольку нам пришлось бы выставлять глобальные флаги. Хотя это было по сути костылём, мы получили стабильную задержку, измеряемую двузначным числом в микросекундах. – проблема исправлена.

В моей старой конторе трейдеры использовали ручной процесс аппроксимации IV, и каждые пять или десять минут или час они корректировали свою кривую в соответствии с рынком. Получение кривой подразумеваемой волатильности (IV) всегда было искусством. Здесь я так же хотел, чтобы коррекция IV была полностью автоматизирована, но выбрал другой подход. Умный количественный трейдер в конечном итоге построил бы аккуратный и надежный автоматический процесс. Мы использовали более подходящие сплайны из библиотек языка R, добавили некоторые небольшие медианные фильтры и некоторые другие статистические фокусы. Использование квадратичных кривых для оценки меня не устраивало, поскольку это часто приводило к неудобному разрыву в точке выхода опциона в деньги. Позже мы даже перешли на четверть- или полусекундные интервалы, но секундных было достаточно. Теперь мы рассчитывали и публиковали кривую IV каждую секунду. Однако, как правило, мы не зарабатывали денег (или зарабатывали очень мало.) Время и текущие расходы убивали нас, а не торговые потери. Это несколько улучшило ситуацию и наша оценка опциона, казалось, была очень близкой к реальности.

Мистер Л. У нас был ещё один примечательный прокол. В ту же секунду, как мы включили систему, она мгновенно купила и продала по рынку около тысячи лотов фьючерсов за несколько секунд. внес некоторые изменения в механизм хеджирования фьючерсами, которое мы выкатили в прод. Компания могла умереть прямо тогда, но нам повезло выскочить из позиции. Мы должны были убить его немедленно.

И это были уже не задержки. Мы пытались, но всё равно не могли заработать. Наш механизм хеджирования фьючерсами был просто недостаточно эффективным. Цены не были страшными. Мы пытались делать пассивный маркет-мейкинг на фьючерсах перед тем, как торговать опционам, но это всё было неважным. У нас не было капитала для “рисования” уровней и использования их для улучшения нашего финансового результата. Пришло время молиться. Прошло девять месяцев, вынашивание этого ребёнка было завершено и сон в офисе давал всё меньше пользы.

Стратегия Zero

В то время в Корее опционы ATM и дешевле, имели размер тика 0. Когда вы торгуете на бирже, считается, что вам повезло, если вы получили в свою пользу часть спреда. Эти 0. 01 ценового пункта. Торгуя высокочастотным роботом сразу сериями опционов, если вам повезёт, то вы выходите из сделки в среднем с десятью или двадцатью центами. 01 стоили около доллара с одного контракта. Мне вспоминается, что рекорд на прошлом месте был 1. Одной из моих целей на этой работе было превзойти те показатели оборота, что я видел ранее. контрактов в день. 13 млн. В теории, нет разницы между практикой и теорией. Если бы вы могли проторговать миллион опционов и взять 10 или 20 центов за каждый, вы были бы очень счастливы. Осознать это оказалось для меня довольно трудным.

спросили, если он купил по хорошему торговому сигналу и получил прибыль, почему он сразу не закрывает позицию? Затем я вспомнил разговор одного из трейдеров, мистера Б., с кем-то на кухне в старой фирме (кстати, в конечном итоге он и возглавил фирму.) Мистера Б. У нас были отличные показатели задержек с хорошим расположением и прямым X. Он ответил, что если бы все было так просто, он зарабатывал бы намного больше денег, чем сейчас. Технология работала, модель оценки давала верные цены. 25-каналом. Может быть, мы могли бы сделать невозможное?

Основной инвестор выдал кредит в размере 25 000 AUD. Я поговорил с акционерами и сказал им, что мне нужно еще 25 000 AUD, чтобы пережить месяц и попробовать что-то новое. Все было просто – не иметь направленной позиции, ждать появления в стакане опциона, чья цена отличается от нашей оценки хотя бы на тик. Мистер Ф., один из первоначальных сотрудников, закодил то, что мы называли стратегией Zero. Ждать. Затем бить по нему. Могло ли это сработать? Потом сбросить его и взять тиковую прибыль.

Мы будем жить!

Стратегия Zero сработала. Наш месячный доход от трейдинга стал измеряться здоровыми шестью знаками. Здесь нет умного маркет-мейкинга. Мы увеличили торговый капитал, чтобы можно было купить 500 или 1000 опционов ATM, а затем развернуться и сбросить их обратно. Мы просто были агрессивным тейкером.

Как маркет-мейкер, вы должны уходить с пути рынка, когда он идёт против вас, но вы должны быть достаточным стоиком, чтобы не становиться слишком взбалмошными и не терять ценное место в очереди. Быть тейкером на рынке может быть более проблематично, чем мейкером. Похоже на странную игру, в которой агрессор фактически имеет гандикап по задержке, ибо он готов двигаться только после того, как мейкер уже сделал свой ход, при прочих равных условиях. Как правило, ваш ценовой порог, после преодоления которого вам нужно убегать из стакана для предотвращения убытка, меньше, чем у агрессора, который использует торговое преимущество. Такая аналогия в значительной степени описывает стратегию Zero. Или это похоже на 100-метровый спринт, где у мейкера есть преимущество в 50 метров, и вы должны как-то преследовать его. 25 проводами, проходящими через окно и расположения на территории кампуса было достаточно, чтобы преодолеть наивность нашей стратегии в те первые дни. Прямого подключения через X. Фортуна улыбнулась нам.

Это было немного сюрреалистично. Было своеобразным развлечением наблюдать за тем, как деньги как бы сами по себе появляются на банковском счете после получения прибыли. Мы торгуем индексными опционами в Корее, а австралийские доллары появляются на банковском счете в Сиднее.

Моделирование подразумеваемой волатильности, историческое тестирование и сама стратегия – все улучшилось с появлением нескольких сотен дополнительных ядер. Немного заработанных денег ушло на домашний кластер в нашем недавно арендованном офисе на Hunter-стрит в 200 квадратных метров, много маленьких компьютеров в формате mini-ITX на дешевом стеллаже из хозяйственного магазина, платы оперативной памяти, источники питания ATX и сетевой коммутатор.

Вместо того, чтобы пытаться хеджировать позицию через фьючерсы, мы обратились к хеджированию другими опционами. Следующим шагом в нашем трейдинге стал переход от стратегии Zero к полноценной торговой стратегии с хеджированием. Стратегия Zero держала суммарную экспозицию в несколько секунд в течение дня. Мы не хотели переносить позиции через ночь, но были рады удерживать их в течение дня. Эта идея сработала очень хорошо. Новая стратегия заставила нас держать позицию весь день. Не было необычным видеть более миллиона лотов на бидах или асках в крошечных опционах. Около двух третей рынка KRX составляли опционы с низкой дельтой и довольно статичным ценообразованием. Поэтому мы просто сосредоточились на опционах с более узкими спредами и с большими дельтами, с тиками размера 0. Однако, купите этих дешевых опционов и вам будет весьма непросто сбросить их до закрытия рынка. 00. 01 с ценами ниже 3. В конечном итоге мы выросли до типичной доли в 6-7% рынка, а иногда и более 10%. Они составляли около трети среднего объема рынка. Нормальный такой кусок пирога. Поразительно, что мы проторговывали около трети объема того рынка, на котором сфокусировались. Преодоление прошлого рекорда оборотов состоялось.

Разбираясь с проводами

Модемы для линий T1 и E1 передавали этот сигнал через неуклюжие соединения, ведущие в еще большую коробку, которая затем подключалась через огромные разъемы к последовательным картам. Идея первого значительного хака пришла после рассмотрения витой пары, которая была проложена через окно. Я купил несколько новых карт Sangoma, в которые подключили витой парой T1/E1-каналы от NetOptics и установил эту сборку в Корее. Немного исследований и родился очевидный план. Это утверждение было технически верным, но неполным. Когда меня спросили, для чего это – я ответил, что для мониторинга состояния линии и измерения задержек.

Я начал их анализировать и понял, как выглядели потоки. Новые карты Sangoma поддерживали смешанный режим, при котором карты просто принимают все биты из канала. 25 были сгруппированы в каналы для рыночных данных. Виртуальные каналы X. Были еще другие группы каналов для опционов пут, колл и фьючерсов. Они имели склонность идти последовательно друг за другом. Такой обход модема и сетевого устройства экономил около миллисекунды. Мне пришлось самому разбирать слой HDLC, но вскоре у меня были декодированные пакеты, соответствующие каналам KRX.

Биржа Eurex когда-то предоставляла закрытый API – и его взломали и сделали реверс-инжиниринг протокола обмена. Это не было незнакомой территорией. Тогда эта практика была прекращена, но в Корее такого правила не было. После этого официальный документ о техническом регулировании членства на бирже был скорректирован так, чтобы это стало нарушением правил. Реверс-инжиниринг протокола Nasdaq не был столь необычным явлением, как я надеялся – есть много умных хакеров. Точно так же, когда биржа ASX открыла свою первую небольшую точку колокации в местечке Bondi, я отметил, что у нескольких клиентских фирм были установлены 1U серверы от Dell, безо всяких модемов.

Отрезать и выбросить

Теперь, когда у меня был поток битов один за одним (ну или, по крайней мере, байт за байтом) я мог видеть, что пакеты теряют очень много времени именно в проводах. В Корее все стало ещё лучше. Распространенным методом в сетевом мониторинге является slice, когда вы просто отрезаете первую часть пакета. Миллисекунды. Сохрани 100 байт на скорости 128 Кбит/с и ты впереди на 6. Я реализовал это с моим кодом обхода слоя HDLC и теперь мы были намного впереди, поскольку нужным нам поля bid и ask располагались в начале пакета котировок. По мере роста параметров спецификаций и ускорения каналов KRX наше преимущество уменьшалось, но всё равно осталось приемлемым. 1 мс. Теперь мы отправляли свои ордера еще до того, как входной пакет данных с ценами был полностью принят.

Остальная инфраструктура тоже медленно улучшалась. Иногда биржа переставляла местами виртуальные каналы, и мы оставались с медленным кабелем до тех пор, пока я не расшифровывал новые номера. Так же мы повесили небольшой кондиционер над окном, который был очень нужен, ибо температура в стойке постоянно росла. Теперь у нас были кабели, идущие не через окно, а по кабель-каналам от основного коммутатора здания. Потом наш банк продал свой деривативный бизнес и через некоторое время новый владелец решил, что мы слишком мелкие клиенты и приказал покинуть наш офис. Наша рабочая комната не была настоящим центром обработки данных. Позже я узнал, что он имел свою торговую группу AI в Токио, которая очень хотела нашу комнату себе.

Ещё одна попытка

Мы сосредоточились на поиске сразу нескольких точек, чтобы бизнес был чуть более устойчивым. Пришлось побороться, чтобы найти нам новый дом. 25 еще не стал общеизвестным, но больше не был необычным. Протокол X. пришел нам на помощь и мистер Л. Кто-то по имени Доктор С. Этот брокер был немного умнее и понимал, что если мы видим весь физический поток данных, то мы потенциально можем видеть и ордера других клиентов. отправил наше оборудование в ЦОД через дорогу. Мы должны были настроить отдельную инфраструктуру для нашей собственной конфигурации потоков рыночных данных. Он был прав – технически мы могли, но пока не делали этого. Опыт с Muppetz оказался исключением. Этот брокер проделал большую работу и мы были благодарны за плавную миграцию. Брокеры в Корее хорошие люди.

Мы заметили, что скорость рыночных данных на разных площадках сильно отличалась. Мы развернули ту же самую инфраструктуру на новом месте и продолжали искать. Местный производитель Endrun Technologies продавал миленькую пластиковую коробочку, с помощью которой мы смогли получить стабильный сигнал точного времени. Мы не могли получить GPS-сигнал для синхронизации локальных часов по сети, но Корея использовала стандарт мобильной связи CDMA. Спецификация CDMA обещает джиттер для сигналов точного времени не более 10 микросекунд, по факту же мы получили в Сеуле около одной микросекунды. Этот прибор получал сигнал GPS внутри CDMA и передавал по последовательному порту данные NMEA плюс (по другому кабелю) импульсы со сверхточными интервалами. Оператор FWIW (канадский CDMA) смог показать точность около 5 или 6 микросекунд.

Попасть внутрь было довольно непросто из за строгой охраны. В конечном итоге мы разместились на колокацию в подземном дата-центре KRX. Я поставил наш приемник CDMA в стойку и это работало – мы получали точное время от прерывающегося сигнала сотовой связи, пока что-то там внутри не сгорело. Проделав долгий путь под землей, я заметил, что внутри дата-центра ловился сигнал сотового телефона. Когда я спустился в подземный бункер дата-центра KRX и положил большую белую антенну на нашу стойку, ребята из Koscom посмотрели на меня очень подозрительно. Подозревая, что нужно поставить более эффективную антенну, перед очередной поездкой в Сеул я купил белую гибкую антенну длиной в метр и припаял на неё разъем SMA. Я не знаю, что они там себе надумали, но несколько других людей за эти годы упоминали, что видели, как моя белая антенна лежала наверху стойки в KRX.

Мы обнаружили, что в нескольких кварталах от кампуса мы получали 300-микросекундную задержку между нашими точками через десятимегабитное Ethernet-подключение городского провайдера. Теперь у нас было точное время на всех точках присутствия и нам нужно было наладить обмен данными между ними. В Корее замечательный интернет и нам тогда его хватало. Это было очень хороший показатель и мы координировали все наши рыночные данные и ордера по этим интернет-линиям. В то время как наши лучшие ордера исходили из биржевого кампуса, самые быстрые рыночные данные приходили из точки за несколько кварталов от него. Миллисекунды преимущества от получения рыночных данных сразу по всем точкам присутствия улучшили торговлю. Это было довольно неожиданно и та локация оставалась лучшим местом для получения маркет-данных в течение нескольких лет.

Это был первый раз, когда я столкнулся с компанией Citadel в Корее, я смог это определить по временным отметкам в сетевых пакетах – они могут рассказать обо всём, если вы умеете их слушать. Чуть позднее на новой точке в пристройке к зданию биржи KRX мы настроили получение рыночных данных и задержки там оказались огромными. Через месяц или два мы заплатили за повторное подключение, они включили ту же самую линию, ничего не меняя, и теперь она была одной из лучших. Мы попросили отключить этот канал, Koscom остановил передачу и физически отключил линию. Я подозреваю, что какой-то новый вид round-robin балансировщика где-то посередине смог улучшить ситуацию. Таковы были капризы жизни в Корее. Для других наблюдаемых там странностей я не смог придумать никакой очевидной причины.

25 были по 64 кбит/с каждый – этой крайне медленно. Виртуальные каналы для отправки ордеров по X. После отправки ордера мы могли бы превратить пакет в недопустимый, если вдруг рыночная ситуация успела измениться и отправляемый ордер больше не был нужен. Я подумал, что мы могли бы использовать тот же хак с картами Sangoma и начал писать код, который отправлял бы пакет с ордером еще до того момента, как он будет полностью сформирован в памяти, что сэкономило бы нам миллисекунды. Мы больше учились моделированию подразумеваемой волатильности и дорабатывали стратегии. Однако, наша небольшая команда была и так сильно загружена и эта задача была не приоритетной, ибо наши торговые показатели и так были достаточно хороши.

Постоянны только изменения

Они начали отказываться от протокола X. Биржи никогда не стоят на месте и KRX не была исключением. Биржа планировала использовать TCP для отправки ордеров и UDP для рыночных данных. 25 и переходили на Ethernet и TCP/IP. 25 начинала исчезать. Торговая эффективность нашего хака X. Производительность нашего торгового движка не сильно улучшилась относительно изначальных трехсот микросекунд, он раздулся. Мы стали слишком толстыми с нашим торговым движком и стратегией. Как ни странно, нас сейчас не слишком волновали сто микросекунд здесь или там, ибо мы преследовали стратегические и тактические цели. Ребята на каком-то этапе повторили мой 72-часовой хакатон и превратили движок в нечто более традиционное, простое и быстрое. Наши ордера все ещё уходили до поступления рыночных данных к остальным участникам рынка. По сравнению с остальными у нас фактически была отрицательная задержка из-за работы сетевого адаптера в promiscuous-режиме, обхода модема и собственного парсера HDLC.

25, но у нас не было свободных людей, чтобы потратить пару месяцев на программирование, особенно учитывая что использование X. Мы хотели попробовать предварительную отправку ордеров по X. Весь код под X. 25 подходит к концу. Однако, идею надо было проверить и я поговорил с парнем, который написал большую часть программного обеспечения в Sangoma. 25 был бы бесполезен через несколько месяцев после завершения этого проекта. Может, он сможет кого-нибудь порекомендовать? Он был главным разработчиком там и сделал им основную работу по написанию драйвера устройства. Возникли некоторые проблемы, поскольку код этих драйверов был сильно запутанными с обилием операторов перехода goto на C, но, даже если это и не очень хороший стиль, драйверы работали стабильно. Он сказал, что сделает это сам как сторонний проект из дома. Тестирование заняло немного больше времени, чем ожидалось и предварительная отправка заработала, но производительность была ужасна. Этот код не должен был прожить больше нескольких месяцев, так что это казалось приемлемым риском. Однако, у нас не было времени еще раз переделывать код под эту идею. Код был настолько дьявольским, что “быстрый” путь работал медленнее, чем обычный путь.

25 на TCP-сессии. Изменения для поддержки TCP на KRX оказались простым отображением виртуальных каналов X. Формат передачи рыночных данных был без изменений портирован для работы поверх UDP. У вас может быть несколько одновременно открытых TCP-сессий (которые они называют PID) для отправки ордеров. ARIA – национальный корейский шифр. Я уже не помню, добавили ли они шифрование в TCP-версию сразу при запуске или чуть позже, но теперь при отправке ордера весь пакет с данными, идущий сразу после TCP-заголовка, должен быть зашифрован с помощью шифра ARIA, и это было обязательным требование. Это хороший шифр. Он очень похож на AES с немного другим расположением S-Box.

Старый добрый X. Мы видели, что новая архитектура на базе TCP собиралась встряхнуть рынок и потенциально уничтожить большую часть бизнеса крупных брокеров. В новом мире TCP было ограниченное количество сессий, две или четыре, и все клиенты должны были поочерёдно отправлять свои ордера через эти соединения несмотря на, казалось бы, наличие многих PID. 25 был медленным, но чередование каналов означало, что у вас было много параллельных путей для отправки ордера, которые можно было разделять между собой. Состояние гонки возникало теперь не только на бирже, но и внутри каждого брокера. В итоге этой сериализации клиентские заявки вставали в очередь у брокера. Кроме того, скорость отправки ордеров увеличивалась, размеры пакетов маркет-данных тоже увеличивались, а скорость поступления рыночных данных не росла пропорционально, чтобы идти нога в ногу. Крупные брокеры могли потерять свои доли рынка, так как имеющиеся линии связи могли поддерживать только ограниченное количество HFT-клиентов. Настало время для увеличения количества наших каналов связи, что означало ещё больше брокеров, в которых нужно было открывать счета. Биржа уверенно двигалась к беспорядку и мы видели, что должны как-то опередить её.

Там был изображен бэкбон с пропускной способностью 622 Mbps, охватывающий кольцом весь город и имеющий несколько ответвлений, которые шли к брокерам. Мы поехали в Сеул посмотреть на обстановку и смогли получить несколько архитектурных диаграмм, которые провайдер Koscom любезно прикреплял к стойкам брокеров. Это была хорошая новость – мы могли продолжать использовать старые трюки для получения маркет-данных. В стойках мы видели наших старых друзей – модемы T1 и E1. Если бы мы смогли прослушивать поток в витой паре T1 после того, как главный коммутатор расшифровал пакеты из общего оптического канала, всё было бы в порядке. Наша новая конфигурация включала несколько модемов T1, которые были подключены в относительно недорогие коммутаторы Cisco.

Крупные брокеры, такие как Samsung Securities, потеряли свою рыночную долю, поскольку они были обмануты биржей насчёт их способности эффективно обслуживать свою большую базу клиентов. Переход на TCP внёс много беспорядка для KRX и всё произошло именно так, как мы ожидали. Но мы уже хорошо справлялись с этим, используя биржевые отметки времени для отслеживания задержек в рыночных данных. Задержки маркет-данных стали обычным делом, поскольку биржа теперь принимала ордера быстрее без пропорционального увеличения производительности ветки раздачи. Несколько раз мы рассуждали о том, чтобы можно воспользоваться ситуацией в те моменты, когда мы точно знали, что другие получают сильно искажённые рыночные данные, но в рабочие планы эти доработки не включали. Опционы пут, колл и фьючерсы поступали по разным каналам и задерживался, как правило, только один (а иногда и два.) Мы почувствовали этот дисбаланс задержек и переключились в режим хеджирования. Как только дисбаланс исчезал, наш движок автоматически возобновлял торговлю. Иногда дисбаланс каналов приводил к серьезным задержкам – данные отставали на десятки минут и мы останавливали всё.

Переход на TCP/IP вместо X. Работать с сетью в promiscuous-режиме было интересно и не нарушало правил, поскольку я не думаю, что их составители о таком вообще знали. Это было явно против правил и поэтому мы не были готовы такое сделать. 25 потребовал обязательного использования файрволов, но мы узнали, что некоторые местные трейдеры обходили их. Причём, у неё не было явно прописанной в правилах процедуры повторного подключения, если вас когда-то выгнали, поэтому решение может быть совсем окончательным. Если вы нарушите явно прописанное правило – вас могут полностью отключить от биржи KRX. Недавно я узнал о другой местной группе, торгующей в обход межсетевого экрана в Корее. Мы подсчитали, что наше преимущество было намного больше, чем задержки на файрволе, поэтому, пока эти клиенты не прослушивали всех и не резали пакеты, наше преимущество было вне опасности и те ребята лаяли не на то дерево. Так что такое случается, но сейчас это редкость.

Взлом FPGA

Мы были маленькой фирмой с несколькими людьми по имени Томас. Нам также удалось улучшить наш хак для получения маркет-данных. Часть вины за это лежала на мне – я знал о “проблеме Томасов” и ради забавы подыскивал аспирантов с этим именем в разных местах. Это невероятно, но восемнадцатый нанятый работник стал нашим шестым Томасом. Он готовился к защите докторской степени и написал интересную работу о распределенной разделяемой памяти на Linux, включая версию для процессоров Itanium. Я заметил нового Томаса в университете UNSW в их группе NICTA. Одна из крутых вещей, которые он сделал – взломал прошивку сетевой карты Sangoma, которые мы использовали. Я когда-то раньше сталкивался с этим, поэтому договорился с ним и он начал работать на неполный рабочий день, как только получил свою докторскую степень. Он получил доступ ко flash-памяти в FPGA и нашел некоторые регистры, которыми мы могли бы управлять. Эти карты были сделаны на базе маленького FPGA-чипа от XILINX, а именно на модели Spartan 3. Компания Sangoma стала основным поставщиком оборудования для нас. Вскоре у нас была своя рабочая прошивка для неё, и мы смогли полностью обойти штатную прошивку Sangoma с её promiscuous-режимом. Задержки нашего самодельного сетевого стека укладывались всего в около десяти микросекунд. Открытие, что сетевой стек Sangoma стоил нам почти целую миллисекунду, стало шоком для нас.

Когда-то я почти начал использовать FPGA вместо конвертера Ethernet в InfiniBand от TopSpin. Поскольку мы планировали выходить и на другие рынки, то начали исследовать FPGA внимательнее. Когда мы только начинали наш HFT-проект, я попросил Celoxica подумать над решением для получения данных по UDP. Поковыряв его в течение некоторого времени я обратился к FPGA-компании под названием Celoxica еще в 2004 году, чтобы разузнать об их технологиях. Celoxica имела часть кода для декодирования UDP по Ethernet, которое они использовали в встраиваемой автомобильной развлекательной системе в Германии и его можно было перепрофилировать под нашу задачу. Трейдинг был для них тогда новым направлением, но они провели предварительные исследования и вернулись. Годы спустя я разговаривал с одним из CTO из большого Банка Уолл-Стрит и он сказал, что начал говорить с Celoxica о трейдинге примерно в то же время, что и я. Мы немного его изучили, но этот вариант оказался слишком дорогим. Их надстройка над VHDL, которую они назвали Handel-C был довольно красивой, но, к сожалению, она так и не смогла полностью соответствовать техническому заданию. Поэтому Celoxica начала разработки в этом направлении и впоследствии это стало важным источником доходов для них. Он был довольно крутым, но мы вернулись к VHDL, поскольку наша разработка лучше соответствовала его модели. Мы в конечном итоге всё-таки нырнули в разработку под FPGA, которая включала исследование еще одного языка, Impulse-C.

Однако, подобно тому как Эйнштейн представлял себя бегущим рядом со световым пучком, мы хотели попасть в первый бит, электрон или фотон, прилетающий к брокеру. Наша новая прошивка SANGOMA отлично работала на нас. Это волокно было подключено к коммуникационному шкафу Telco, из которого торчали модемы E1. Это значит, что мы должны быть подключены к общему оптоволоконному кабелю, входящему в здание. В наше время вы можете легко купить множество FPGA-карт, которые уже имеют нужные сетевые разъёмы, но тогда мы не могли найти ничего, что могло бы работать на скорости 622 Мбит/с, которые показывал Koscom. Мы хотели попасть сразу в оптическую линию, миновать все сетевые устройства и оставить медь E1 позади.

Мы напрямую завели SFP-разъем на FPGA-чип от XILINX и больше ничего. Так что мы разработали нашу собственную печатную плату для того, чтобы получить нужный нам PCIe-сетевой адаптер. Те монтажные платы стоили всего десяток-другой центов каждая и они помогли сохранить наши нервы, поскольку мы больше не нуждались в активных переходниках от NetOptics и наша схема кабельных подключений стала более простой. Ранее мы уже делали некоторые монтажные платы для адаптеров T1/E1, которые мы упаковали в небольшой черный пластиковый корпус, призванный упростить нашу инфраструктуру. Мы привезли эти адаптеры и несколько пассивных оптических конвертеров NetOptics в Корею. Наш FPGA-адаптер был очень несложным по меркам FPGA-устройств, но непростой штукой для нас. Теперь у нас был сигнал, но он был совершенно непонятен. После полуночи, когда всё было тихо, мы врезались в кабели и подключили наши адаптеры в разрыв соединения.

В конце концов мы догадались, что архитектурная схема, которая висела на стойках в Корее, была неправильной. Вернувшись в Сидней, мы анализировали отзеркаленный битовый поток и изо всех сил пытались понять сигнал. У нас стало больше доступной пропускной способности и мы смогли даже отыскать наши собственные ордера в пакетах данных, что сильно обрадовало нас. Мы фактически получали оптическую несущую STS-3/STM-1 со скоростью 155 Mbps по спецификации OC3 и теперь мы могли декодировать этот поток. В конце концов, мы всё равно перешли к нашей собственной оптической схеме “звезда” в стойке возле кампуса KRX, используя наши FPGA-адаптеры для, которые оказались вполне подходящими для арбитража и координации уже восьми точек присутствия. Ордера других клиентов были зашифрованы (и это к лучшему.) Теперь, когда сканировать нужно было гораздо больше каналов 64 кбит/с, нам пришлось написать свои инструменты, чтобы искать необходимые данные, ибо всё менялось слишком часто.

Предварительный ордер

Так как это был протокол TCP, мы тоже могли бы сразу отправить часть пакета с ордером в канал до того момента, как получен и декодирован весь входящий пакет. Теперь я хотел попробовать тот новый трюк с ордерами KRX. Вторичный TCP-заголовок был в порядке, поэтому мы сэкономили бы довольно много байт. Это ведь просто поток байтов. Во-первых, если бы у нас не было готового к отправке ордера, что тогда нужно делать? Однако у нас было две проблемы. Мы не могли отправлять мусорный пакет на биржу, поскольку тогда мы могли бы привлечь излишнее внимание. Каждые N секунд мы должны были посылать пакет heartbeat, если PID не использовался. Поскольку мы стояли за межсетевым экраном, мы могли работать только с содержимым IP-пакетов, и никакие инвалидации контрольной суммы Ethernet-пакета или другие аналогичные трюки на более низком уровне не работали отсюда.

Так что её мы и посылали. Команда отмены в отношении уже отменённого или исполненного ордера казалась подходящим сообщением – это часто происходило в ходе обычной работы движка. Нам иногда приходили письма с вопросами насчет этих отмен (которые посылал один умный брокер), поэтому мы сделали механизм обхода – когда на рынке было затишье, движок возвращался к тактике посылки heartbeats-пакетов. Каждый раз мы случайно выбирали ID ордера, чтобы не было повторений. Всё это отлично работало в незашифрованном тестовом сегменте сети, но нам всё равно пришлось решать проблему с шифром ARIA.

2 (такие использовались на бирже BATS в США до повсеместного перехода на 10G), экономия на такой предварительной отправке по-прежнему работает, если вы используете FPGA. Стоит отметить, что и на канале 1Gbps с протоколом FIX 4. Инвалидация контрольной суммы Ethernet-пакета как правило, предотвращает уход такого пакета за пределы коммутатора. На каждые двадцать пять байт в 1G вы экономите 200 наносекунд.

Взлом шифра ARIA

Мы посмотрели его и смогли изменить процесс хендшейка, чтобы транслировать наружу сеансовый ключ и после этого уже смогли правильно зашифровать сообщения. Я написал письмо в Сеульский университет, который был владельцем шифра, и они прислали исходный C-код для 8-ми 32-битных версий шифра. Все в Корее платили за это. Был некоторый сомнительный аспект во всей бизнес-модели шифрования, поскольку вам приходилось платить фирме роялти в несколько тысяч долларов в год, чтобы использовать их официальную библиотеку шифрования с открытым исходным кодом.

В конце концов, мы написали собственную SIMD-версию, которая работала еще лучше. Используя нашу собственную реализацию ARIA, мы были намного быстрее и без официальной реализации. Наше среверсированное шифрование позволило уложить весь наш торговый цикл в меньшее время, чем принудительно исполнялся служебный код оригинального шифра.

Мы сэкономили сперва несколько миллисекунд на этом, потом этот выигрыш сократился до сотен микросекунд с течением времени, поскольку скорость линии увеличивалась. Теперь мы могли бы, наконец, отправить предварительный ордер по TCP. Свичи Koscom работали по принципу “сохранить и отправить”, так что мелкие пакеты быстрее проходили через всю систему и итоговое улучшения времени отклика оказались еще немного лучше, чем мы ожидали. Наше преимущество было на самом деле еще больше, чем простое снижение латентности.

Сегодня есть много других открытых реализаций для шифра ARIA и ваша корейская жизнь может оказаться проще, чем наша.

Встряхнуть крыльями

Сетевое устройство может разделить пакет на фрагменты по разным причинам. Мы также попробовали некоторые методы фрагментации пакетов. Если ничего больше не придет, пакеты будут отброшены. Стек Unix по умолчанию будет удерживать фрагменты в буфере в течение шестидесяти секунд и собирать их заново. Скорость линии была настолько медленной, что на этом можно было сэкономить сотни микросекунд. Идея состояла в том, чтобы сперва передать возможные заключительные фрагменты пакета, а затем передать корректный средний или начальный фрагмент и позволить коммутатору собрать весь пакет.

Фрагментированные пакеты сначала не работали. Мы подправили код сетевого стека, чтобы проверить эту идею. Похоже, что коммутатор рассматривал фрагменты пакетов как атаку типа "отказ в обслуживании" или что-то подобное, если интервал был слишком большим. Однако, после сокращения интервала между фрагментами до менее двух секунд всё славно завелось. Используя этот подход, вы могли бы иметь заготовленные пакеты, ожидающие прямо в пути, чтобы потом быть объединёнными с другими фрагментами. Он, вероятно, должен был бы не пропускать их вообще, но кто мы такие, чтобы с ним спорить? У нас была идея получше. Однако, двухсекундный интервал был проблемой, поскольку мы потребляли много ценной пропускной способности, пытаясь сохранить этот временный кэш пакетов живым.

Почему бы не отправить более позднюю часть пакета со следующим порядковым номером TCP плюс один, а затем отправить среднюю часть последовательности вне этой нумерации, содержащую тикер, цену и количество?
Эта заключительная часть пакета имела довольно большие пользовательские поля, поэтому мы сэкономили бы огромное количество времени и получили бы гораздо больше, чем с предварительной отправкой, которую мы уже делали. Мы уже отправили первую часть сообщения в первом пакете. Было лишь одно большое препятствие для этого плана.

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

image

Кроме того, биржа KRX боялась нулевых байт в пакетах. Если бы последние байты пакета с ордером могли быть случайным мусором, это не имело бы значения, так как расшифровка превратила бы мусор в мусор (что было бы приемлемо.) К сожалению, должны быть заполнены некоторые важные поля после большого пользовательского поля в хвосте пакета. У Koscom, казалось, был необоснованный страх, что что-то может взорваться или преждевременно завершиться, если бы в пакете присутствовал нулевой байт. Она и её технологический провайдер этого не допускали. Шифротекст с нулями как бы заставлял сделать мини-перезагрузку (сброс состояния) в последовательности блоков из-за операции CBC XOR с одним нулевым операндом. Однако, иметь кучу нулей в зашифрованном потоке разрешалось, поскольку его они не могли контролировать. Эти сгенерированные данные могут приводить к чему угодно после расшифровки, даже к незаконным нулевым байтам. То есть достаточно сгенерировать данные, после шифрования которых возникал нулевой байт, чтобы прервать цепочку зависимости блоков друг от друга.

Мы должны фрагментировать TCP-пакет, разорвав пользовательское поле на две части. Наш хак должен был передавать эти сгенерированные данные в пользовательском поле в пакете, а также сохранить средний фрагмент с несколькими символами этого же поля. Если вы проверяете это при подготовке своего среднего пакета, и видите, что это не так, вы просто циклически просматриваете символ или два в пользовательском поле в среднем пакете (т.е. У вас есть 90 и более процентный шанс, что мусор, который у вас попадает в пользовательское поле, не равен нулю. Этот хак может сэкономить много времени. в последнем уже доставленном) до тех пор, пока не находите полностью ненулевую последовательность в шифротексте.

Машинное обучение

Мы использовали случайный лес (RF) для работы в качестве слоя машинного обучения для предсказания будущей теоретической цены. Самое значительное улучшение, которое мы когда-либо внесли в стратегию, пришло не от этих низкоуровневых трюков. Впоследствии он читал лекции по C++ в университете Квинсленда. Сначала я поручил эту задачу одному из моих PhD в фирме (у нас их было шесть.) Он, казалось, был гением математики и имел PhD по физике по какой-то сингулярной космологической модели, а также был моим хорошим другом, которого я нанял несколько лет назад и научил его C++. Он вернулся через пару месяцев и показал мне все вещи, которые он пробовал и которые не работали, а затем объяснил мне, почему это вообще никогда не будет работать и почему это всё пустая трата времени. Я также нанял одного из его аспирантов, которых он учил С++ (в компании вообще было несколько забавных поколений обучавшихся этому языку.) Я поручил ему разработать для стратегии слой машинного обучения с помощью RF.

Я взял пакет OpenDT v5. Я уже сталкивался с этим методом в аспирантуре, поэтому решил, что лучше опять всё делать самому. Сейчас он вырос до более чем тысячи ядер с материнскими платами, прикрученными шурупами к полкам стеллажа из ДСП-панелей и источниками питания, расположенными на металлических полках с дырками сверху. 2, который работал через MPI на нашем кластере из mini-ITX плат. Я мог бы повторить тот результат, используя оригинальный код от автора метода Random Forest, Лео Бримана. Две недели работы OpenDT на этом кластере помогли мне сделать достойное решение. (тому парню, который отправил тысячу ордеров в секунду на биржу, что почти уничтожило нас тогда) чтобы выкатить в продакшн. Я перекинул свои наработки через забор мистеру Л. Мы увидели немедленный прирост прибыли примерно на треть – это был хороший месяц. Он был приличным программистом, хотя и замкнутым и всё было готово через две недели.

Мы стали очень зависимы от этого. Дальнейшие улучшения и корректировки в ML-слое дали большую отдачу. В более поздних проектах я делал это чуть лучше. Создание случайного леса с быстрым откликом было тяжелой работой, так как доступ к огромному объему памяти в случайном порядке является проклятием low latency. Однако, мы никогда толком не исследовали вопрос, было ли это связано с нашей стратегией или одной низкой задержки больше не было достаточно, чтобы выигрывать. Примерно через год или около того стало ясно, что если мы отключим ML, мы вообще не будем зарабатывать деньги. Я видел умных игроков, таких как Jump, устанавливающих десятки серверов в Корее, и они явно не использовали их на холостом ходу. Я подозреваю, что второе. В воздухе витало достаточное количество ML.

Он покупает вам время, торгуя в неопределенности. Один зрелый способ думать о ML заключается в том, что это просто метод сокращения задержки. Однако даже лучшие арбитражные боты не обязательно получают исполнение по всем своим ордерам. Ты реагируешь раньше, но можешь ошибаться. Правильнее думать об ML как о способе получения дополнительных опорных точек в пространстве задержек и неопределенностей.

Канарейка

CME была подвергнута критике многими трейдерами некоторое время назад, поскольку Wall Street Journal опубликовал исследование в котором показал, что некоторые трейдеры получали исполнение своих ордеров еще до прихода рыночных данных, которые привели бы к выставлению этих ордеров, и этот выигрыш в скорости давал им преимущество над обычными участниками. Еще один хак, который я, вероятно, должен упомянуть, является общеизвестным – это технология канарейки. Это скорее повод для введения дополнительного кода обработки, чтобы получать информацию одновременно из медленного канала маркет-данных и быстрого канал уведомлений об исполнении ордера. Это ошибочный аргумент, поскольку скорости двух таких разных процессов никогда не смогут быть одинаковыми.

Nasdaq была одной из первых бирж, на которой рыночные данные приходили быстрее, чем уведомления о ордерах. Есть несколько бирж, где ситуация другая. Это была ловушка для молодых игроков, не ожидавших такого.

Напомню, что канарейка – это лимитный ордер, который вы заранее выставили в глубине стакана, а не на лучшем уровне. В мои первые опыты на KRX канарейка могла бы сработать за секунду до получения рыночных данных. Если вы не можете заработать и на этом, ваш череп, должно быть, заполнен камнями вместо мозгов. Таким образом, когда рынок внезапно перескакивает на новый ценовой уровень, ваша канарейка начинает петь, позволяя вам узнать о движении за секунду до остального рынка. Ну, и я нашел несколько камней в своей голове.

Иногда, отличия в ценах по двум этим каналам было настолько велики, что вы могли видеть, как рынок идёт вверх, а затем вниз. Это было странно. Вы же могли бы вместо этого попытаться определить заранее время этих событий, чтобы вы могли купить внизу и сразу же продать свои контракты. Если наивно купить на этом первом движении вверх, рынок может создать вам проблемы когда он пойдет вниз.

Мы интегрировали этот код в наш канал данных. Слишком много знаний было забавной проблемой. Один из парней, мистер Ф., назвал это событие "звездной силой", как у братьев Марио.

Джиттер против задержки

Объединённая биржа KRX закрыла дата-центр в Пусане и все переехали в Сеул. Вы можете вспомнить, как интеграция трех бирж в KRX на самом деле не повлияла на фьючерсы и опционы KOSPI, поскольку они уже торговались в Сеуле на KSE. Однако, правительство не достигло своих политических целей и пусанский дата-центр в конце концов снова открылся.

Иногда получалось, что рыночные данные сперва уходили в Сеул для использования там, а затем обратно в Пусан для использования в соседнем дата-центре. Банками и брокерами в Сеуле было потрачено много денег на эти переезды. Только сейчас, в 2016 году, биржа KRX переехала обратно, чтобы всё было сосредоточено в Пусане. Это был беспорядок. Дорого и неэффективно. До этого лучшим решением было собирать маркет-данные в Сеуле, а ордера отправлять в Пусан. Вы могли только покупать дорогие линии от Koscom, как делали все брокеры. Все HFT-фирмы, такие как мы, рассматривали возможность строительства собственных линий между Сеулом и Пусаном, однако, Koscom запретил делать это, чтобы сохранить свои доходы. 9 до 3. Как правило, вы боролись за каналы, которые давали от 2. Довольно медленно для 300 км прямого кабеля или 400-километровой автомобильной дороги. 1 миллисекунд задержки. Несколько микроволновых радиорелейных линий построили в последние пару лет.

Перед этой миграцией мы получали пинг 11-12 мс в оба конца (RTT) на линиях отправки ордеров с джиттером около 130 мс. В то же время дата-центр KRX превратился из крупнейшей в мире коммерческой платформы на оборудовании HP/Compaq/Tandem в платформу на AIX, работающую на архитектуре IBM PowerPC. Несмотря на то, что задержки в среднем удвоились, уменьшение джиттера сделало нашу стратегию более эффективной. После переезда в Пусан, пинг стал более 20ms, но джиттер снизился до 30ms.

Случайность уменьшается и скорость становится более важной. Это похоже на тот случай, когда CME уменьшила джиттер заменив свои шлюзы на оборудование от iLink на базе FPGA. Новая платформа улучшила нашу рентабельность инвестиций в Корее. Разница с Кореей заключалась в том, что задержка фактически выросла для KRX, но как трейдеров нас это не волнует, важнее ответ на другой вопрос – стоят ли мои усилия этого? Задержки продолжают иметь значение, даже если и не являются критическим моментом. Точно так же я ожидаю, что меньший джиттер, как следствие постоянного уменьшения задержек внутри биржи (не только на CME, но и на биржах по всему миру) будет продолжать разделять трейдеров на умеющих быстро торговать и не умеющих.

Соревнование

Я мало что о них знаю в практическом смысле. Стоит упомянуть, что произошло, когда в Корею пришёл Getco. Getco управляет довольно трудными сделками и, раз, они умеют на этом зарабатывать, это сработало и в Корее. Первое, что я услышал, это постоянные жалобы от брокеров. Возможно, это не слишком отличается от канадской сделки с CIBC? Ходили слухи о потрясающих сделках с самими брокерами, чтобы те могли увеличить свою долю рынка. По слухам, тогда Getco заплатила очень низкую фиксированную цену (возможно, всего в несколько тысяч долларов) за канадского брокера, чтобы обеспечить долю рынка для CIBC.

Кто-то сказал мне, что эта цифра была ближе к 15%. Я начал читать отчёты о занятии Getco 5% рынка. Местное сообщество довольно громко и расстроенно обсуждало приход Getco. Многие брокеры жалуются на своих клиентов, не получая от тех достаточного количества комиссии. Мы были достаточно диверсифицированы и торговали стратегии, которых не было у других, поэтому очень немногие люди вообще могли понять, что у нас происходит. Но мы не расстраивались ни капли, вообще. Многие люди лишаются доходов и жалуются, пресса раскручивает скандал. Однако это послужило уроком – Getco привёл новых людей, торгуя более эффективные стратегии. Это не так – просто эхо от криков проигравших. Вы начинаете читать истории о том, насколько несправедлив рынок. Рынок улучшается, но жалобы становятся всё громче. Это печальная история, которую вы слышите на рынках снова и снова, когда трейдеры борются за рыночные неэффективности и эффективность своих технологий.

Но не, например, в Eurex. То, что делали мы, работало и было приемлемо в Корее, и это было приемлемо во многих других странах. Если вы портфельный менеджер, теперь вы понимаете, что уже не хотите играть в эту игру. Правила различаются от рынка к рынку. Но играть именно на этом поле вам не и нужно. Это жесткая конкуренция, с сотнями умных трейдеров, вроде меня, постоянно готовящих новые стратегии. Это всё, что нас волнует. Высокочастотный трейдер вроде меня ориентирован на следующий тик. Мне плевать на вашу портфельную альфу. Мы тратим огромные объемы ресурсов на то, чтобы вытеснить наших коллег-HFTшников на следующий тик. Это за пределами моего горизонта, вне моей заботы.

Описываемую тут HFT-фирму, которую основал в мае 2005 года я покинул в январе 2011. Я много проигрываю и много выигрываю в течение дня. В четыре из них убыток составил менее 1000 USD и во все из них он был меньше 10 000 долларов США. У нас было всего восемь убыточных дней за всё это время по нашей основной торговой стратегии. Однако помните, что среди сделок очень много таких, которые не могут похвастаться высоким финансовым результатом. Это не так хорошо, как у знаменитой компании Virtu (1 день из примерно 1200 по их документам для IPO), но я смирился. Дни экспираций опционов иногда давали нам 50%, так как многие трейдеры стараются не торговать такие пятницы каждый месяц. Мы зарабатываем только маленькую часть спреда, обычно 10% в обычный день, 5% в плохой и 20% в хороший день.

Тот же самый закон указывает, что если мы потеряем технологическое преимущество – мы либо не сможем торговать вообще, либо будем терять деньги каждый день. Закон больших чисел позволяет HFT зарабатывать деньги каждый день. Это жёсткая индустрия, постоянно углубляющаяся в инфраструктуру и микроструктуру рынка для того чтобы улучшить свою эффективность. HFT-компании часто разоряются и уходят. Я уверен, что приход Jump также вызвал появление нескольких пыльных подушек. И это будет неблагодарной работой, если люди не понимают, что сегодняшний петух может мгновенно превратиться в перьевую подушку, когда такая компания, как Getco, приходит в ваш город.

Существует гораздо больше идей, которые можно реализовать в медленной, неуклюжей и тайной инфраструктуре. Корея – забавное место, так как в инфраструктуре биржи KRX всё ещё полный бардак. Это не так сложно, просто большое внимание к самым мелким деталям. HFTшники любят беспорядок, поскольку они могут копаться и найти там преимущества. Как ни странно, HFTшники ненавидят колокацию на бирже и низкую задержку, поскольку тогда найти себе преимущество гораздо сложнее. Вся сложность состоит из простых вещей. HFTшники также любят такие площадки, о которых мало кому известно… Никто не хочет попасть в засаду.

Портфельному управляющему

Поощряйте рыночные структуры вроде ETF, которые являются конкурентоспособными, справедливыми и дешевыми. Не беспокойтесь о следующем тике. Это позволяет предоставляемой ими ликвидности работать на вас, несмотря на их мотивы. Тогда вы можете стоять и, ликуя, смотреть, как эти HFT компании убивают друг друга, борясь за самый низкий спред. сужение реального спреда) работает в конкуренции за следующий тик. В конце концов, только покупка выше и продажа ниже (т.е. Это не рецепт для легких денег HFT.

Большие ордера перемещают цены, что мешает маркет-мейкеру заработать свой спред. HFT боятся портфельных управляющих – они владеют большой информационной дубиной, которая убивает HFT. Каждое исполнение ордера – это желаемая сделка, даже если рынок пошёл дальше против вас и по счёту просадка, а убыток – это просто расходы, которые всегда в рамках вашей модели. Управляющие активами даже думают по-другому. В HFT исполнение это риск, просадка – катастрофа, а убыток – просто пожатие плечами.

Вы же не хотите нанимать сразу двадцать человек только для того, чтобы побороться за позицию в очереди на следующем тике? Управляющий портфелем должен использовать алгоритмы и магию рыночной эффективности для повышения качества исполнения своих ордеров. Беспокойтесь о разочаровавшихся HFT-трейдеров, решивших сменить модель и инвестировать в долгосрок, чтобы конкурировать непосредственно с вами. Вам больше стоит бояться квантовых фондов, основанных на машинном обучении которые автоматизируют вашу альфу. Я вижу, что и то и другое уже происходит.

Портфельный менеджер крупного фонда с большой командой может получить дополнительную прибыль от развёртывания своих собственных алгоритмов и DMA-платформы, чтобы его трейдеры могли торговать более агрессивно и часто, так же, как барахтающиеся HFT смотрят на их временной горизонт. Очень немногие брокеры предлагают конкурентоспособные решения, в основном же всё кажется немного несвежим. Но остерегайтесь – это скользкий путь...

В этом тексте отсутствуют секс, наркотики и рок-н-ролл из оригинального черновика, поскольку это не добавило бы ничего к торговой истории. Ранее было опубликовано под псевдонимом Томас Андерсон. Во всяком случае, всё это лучше оставить недосказанным, даже если будет упущено какое-то личное отношение.
Возможно, это поможет оправдать моё решение отказаться от работы, которая мне нравилась.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

toString: Великий и Ужасный

Она — причина многочисленных шуток и мемов про многие подозрительные арифметические операции, преобразования, вводящие в ступор [object Object]'ы. Функция toString в языке JavaScript наверно самая "неявно" обсуждаемая как среди самих js-разработчиков, так и среди внешних наблюдателей. Уступает, возможно, лишь удивлениям ...

Ракета-носитель «Союз-5SL» будет работать с двигателями советского образца

Так выглядит Falcon Heavy, тяжелая ракета-носитель от SpaceX, с которой собирается конкурировать S7 Space Генеральный директор S7 Space Сергей Сопов на днях заявил о том, что эта частная аэрокосмическая компания (в некоторых СМИ ее называют “Российской SpaceX”) собирается возродить производство ...