Во-первых, 1 мс - это вечность в HFT. Если вы думаете, что это не так, было бы хорошо, чтобы немного больше читать о домене. (Это все равно, что быть в 100 милях от обмена.) Пропускная способность и задержка глубоко переплетены, как скажут формулы из любого учебника по теории элементарных очередей. В тех же формулах будут отображаться значения джиттера (часто преобладает стандартное отклонение задержки в очереди ЦП, если структура сети правильная, и вы не настроили достаточно ядер).
Одна из проблем, связанных с HFT-арбитражем, заключается в том, что, как только вы решите захватить спред, есть две ноги (или больше) для получения прибыли. Если вам не удастся поразить все ноги, вам может быть предоставлена позиция, которая вам действительно не нужна (и последующая потеря) - после всего, что вы арбитражировали, не инвестируя.
Вам не нужны позиции, если ваша стратегия не предсказывает (ОЧЕНЬ в ближайшей перспективе !!!) будущее (и это, хотите верьте, хотите нет, сделано ОЧЕНЬ успешно). Если вы находитесь на расстоянии 1 мс от обмена, то значительная часть ваших заказов не будет выполнена, и то, что вы хотели, будет снято. Скорее всего, те, кто выполнил одну ногу, в конечном итоге проигрывают или, по крайней мере, не приносят прибыли.
Какой бы ни была ваша стратегия ради аргумента, допустим, что в итоге соотношение выигрыша / проигрыша составляет 55% / 45%. Даже небольшое изменение отношения выигрыша / проигрыша может привести к значительному изменению прибыльности.
re: "пробег десятков (даже сотен)" кажется отключенным на порядков Даже просмотр 20000 тиков в секунду кажется низким, хотя это может быть среднее значение за весь день для набора инструментов, который он смотрит на
Существует высокая вариабельность скоростей, наблюдаемых в любую секунду. Я приведу пример. В некоторых из моих тестов я смотрю на 7 внебиржевых акций (CSCO, GOOG, MSFT, EBAY, AAPL, INTC, DELL) в середине дня ставки в секунду для этого потока могут варьироваться от 0 м / с (очень очень редко) до почти 2000 кавычек и сделок в пиковую секунду. (см., почему я думаю, что 20000 выше низок.)
Я создаю инфраструктуру и программное обеспечение для измерений для этого домена, и цифры, о которых мы говорим, составляют 100000 и миллионы в секунду. У меня есть библиотеки инфраструктуры производителя / потребителя C ++, которые могут передавать почти 5000000 (5 миллионов) сообщений в секунду между производителем и потребителем (32-битные ядра 2,4 ГГц). Это 64-байтовые сообщения с new, конструкцией, постановкой в очередь, синхронизацией на стороне производителя и синхронизацией, удалением из очереди, касанием каждого байта, запуском виртуального деструктора, свободными на стороне потребителя. По общему признанию, это простой тест без Socket IO (и сокет IO может быть некрасивым), как это было бы в конечных точках конечных этапов конвейера. Это ВСЕ пользовательские классы синхронизации, которые синхронизируются только когда они пусты, пользовательские распределители, настраиваемые блокировки свободных очередей и списков, случайные STL (с настраиваемыми распределителями), но чаще настраиваемые навязчивые коллекции (из которых у меня есть значительная библиотека). Я неоднократно предоставлял поставщику в этой области четырехкратную (и более) пропускную способность без увеличения пакетной обработки на конечных точках сокетов.
У меня есть классы OrderBook и OrderBook :: Universe, которые занимают менее 2 uss для новой, вставки, поиска, частичной заливки, поиска, второй заливки, стирания, удаления последовательности, когда усреднено более 22000 инструментов. Бенчмарк перебирает все 22000 инструментов последовательно между первым заполнением вставки и последним заполнением, поэтому не нужно использовать дешевые приемы кэширования. Операции в одной и той же книге разделены доступом 22000 разных книг. Это очень НЕ кеширующие характеристики реальных данных. Реальные данные гораздо более локализованы во времени, и последовательные сделки часто попадают в одну книгу.
Вся эта работа включает в себя тщательное рассмотрение констант и характеристик кэширования в любой из алгоритмических затрат используемых коллекций. (Иногда кажется, что K в K O (n) K O (n * log n) и т. Д. И т. Д. И т. Д. Отбрасываются слишком легко)
Я работаю над инфраструктурой Marketdata.Невозможно даже подумать об использовании Java или управляемой среды для этой работы.И когда вы можете добиться такого рода производительности с C ++, и я думаю, что довольно сложно добиться производительности в миллион + / м / с в управляемой среде), я не могу представить себе ни одного из значительных инвестиционных банков или хедж-фондов (для которых зарплата в 250000 долларов дляпервоклассный программист C ++ - ничто), не идущий с C ++.
Кто-нибудь на самом деле получает 2000000 + / м / с производительности из управляемой среды?Я знаю нескольких людей на этой арене, и никто никогда не хвастался этим.И я думаю, что 2 мм в управляемой среде имели бы некоторые права бахвальства.
Я знаю, что декодер порядка FIX одного крупного игрока выполняет 12000000 полевых декодирований / сек.(3Ghz CPU) Это C ++, и тот, кто написал это, почти бросил вызов любому, кто придумал что-то в управляемой среде, даже вдвое меньше скорости.
С технической точки зрения это интересная область с множеством забавных проблем с производительностью,Рассмотрим рынок опционов при изменении базовой ценной бумаги - скажем, 6 невыполненных ценовых пунктов с 3 или 4 различными датами истечения срока действия.Теперь для каждой сделки было, вероятно, 10-20 котировок.Эти котировки могут вызвать изменения цен в опционах.Таким образом, для каждой сделки может быть 100 или 200 изменений в котировках опционов.Это всего лишь тонна данных, а не объем данных, подобный детектору столкновений с Большим адронным коллайдером, но все же представляет собой небольшую проблему.Это немного отличается от нажатия клавиш.
Даже дебаты о FPGA продолжаются.Многие люди считают, что хорошо закодированный парсер, работающий на 3GHZ, может превзойти 500 МГц FPGA.Но даже если чуть-чуть медленнее (не говоря о том, что они есть), системы на основе FPGA могут иметь тенденцию к более жесткому распределению задержек.(Прочитайте «тенденцию» - это не общее утверждение) Конечно, если у вас есть отличный синтаксический анализатор C ++, который вы проталкиваете через Cfront, а затем проталкиваете его через генератор изображений FPGA ... Но это еще один спор ...