23 февраля 2020

Обзор интересного #2: Как работают биржи, алгоритмы сведения ордеров на СМЕ и щепотка деконструкции DEX

Сегодня в выпуске мы сосредоточимся на материалах, посвященных сложной и увлекательной теме — архитектуре бирж. Интересный феномен — всего лет пять-семь назад такие штуки были уделом немногих. Биржевые системы писали или в банках (и иногда там были просто монстры, вплоть до MS Excel-based систем) или у немногочисленных технологических провайдеров. Писали свои внутренние системы и большие хедж-фонды и брокеры. А вот приход крипты ознаменовал прям взрывной рост биржевой инфраструктуры — от наколеночных решений от вчерашних веб-разработчиков, до вполне современных систем, зачастую спроектированных теми самыми выходцами с трейдинг-подразделений крупных инвестиционных банков.

И все же, разработка биржевых систем — это не “rocket science”. Да, некоторые моменты сложные, некоторые высоконагруженные (хоть это и неправда, не ожидайте, что именно ваш проект тот самый, кому нужны микросекундные задержки и миллионы ордеров в секунду). Почти каждая вторая биржа декларирует, что именно ее трейдинг — самый быстрый, ультра-фаст, масштабируемый и распределенный. В реальности — большая часть проектов не имеет и доли нагрузки, которую может вытянуть современная архитектура. 

Но это все унылый бизнес. А ведь разработка биржи — это интересно! 

The Phemex Core Architecture 

 

Phemex — новичок среди деривативных бирж, за сравнительно непродолжительное время достиг неплохих оборотов (250+ $M суточного оборота, 18 место среди всех бирж по версии портала ContractMarketCap). И эти результаты только по торгам трех инструментов — BTC, ETH и XRP. 

Теперь биржа решила поделиться своей архитектурой и опубликовала первую (будем надеяться) статью с высокоуровневым обзором, как же внутри устроен ее биржевой мир. Казалось бы, все стандартно — С++, очереди событий, распределенная обработка… Но поверьте, спроектировать, написать и отладить такую систему ох как непросто. За кадром осталось лишь используемое ПО — честно, с обзора не очень понятно, используется собственная реализация MQ (Message Queue), или же оно на базе существующих открытых разработок (среди которых есть много высочайшего уровня надежности, гибкости и отлаженности решений). 

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

Серьезные разработчики (а также самоуверенные хипстеры) предпочитают другой подход — “shut up and show me the code”. Что же, пусть и спорно, но такая точка зрения имеет право на жизнь. И если вам не терпится посмотреть на исходный код биржи, открывайте GitHub:

ViaBTC Exchange Server

Используя комбинацию из MySQL, Redis, Kafka, а также собственных сервисов на С, нам предлагают достаточно интересный вариант, сразу с готовыми интерфейсами HTTP-REST и WebSocket (правда, честно предупреждают, что документация только на китайском). Брать ли такое код на свой продакшин — я бы подумал, но запустить и изучить стоит. 

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

Вот честно, вам ведь интересно — а как там делают не просто профессионалы, а лучшие из лучших. Как устроены системы на не просто биржах, а самые большие, мирового уровня площадки. Например, СМЕ — Чикагская торговая площадка, крупнейшая в мире биржа для торговли опционами, фьючерсами и другими деривативами. Включая, конечно же, биткоин. 

Самое интересное (и важное) в торговле — это непосредственно матчинг ордеров (увы, это не всегда понятно на крипторынке, где на первый план выходят моменты ликвидности, скама и комиссии по вводу/выводу средств). На СМЕ это отлаженная и достаточно сложная система, с разными опциями для разных рынков.

Очень важный момент — работа с маркет-мейкерами (ММ). Это не просто “киты” с большими депозитами, и даже не обязательно боты. На самом деле это скорее соглашение между участниками и биржей, к которому добавлены и технические моменты и гарантии. Причем, как со стороны участника (непосредственно, маркет-мейкера), так и со стороны биржи. Что-то мне подсказывает, что именно этот момент упускает большинство разработчиков криптобирж. Соглашение с ММ регулирует, к примеру, размер спреда и часы торговой сессии (или % времени от всех торгов), когда ММ держит ордера в торговом стакане. Однако, здесь не достаточно просто “стоять в стакане” — механизмы матчинга на СМЕ поддерживают разные возможности и разрешают ситуации, когда и как заявка должна удовлетворяться, даже если по этой цене есть и другие ордера, например, других ММ или обычные клиентские заявки. 

CME Globex Matching Algorithms

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

Алгоритмы сведения заявок в систем СМЕ — из блога OrderFlowTrading

Ну и напоследок, рекомендуем к прочтению интересное исследование децентрализованных площадок, опубликованное еще год назад, но все еще актуальное. Автор материала Lindsay X. Lin из Stellar Foundation, а уж там понимают в DEX, будьте уверены. 

Deconstructing Decentralized Exchanges

Автор: Lindsay X. Lin, Stellar Foundation

Сложно дать даже краткий обзор, ведь в статье есть понемногу про все стороны DEX — ликвидность, безопасность, задержки, он и офф-чейн реализации ордербуков, атомарные свопы и сеттелмент. В общем, читайте сами, думайте сами. 

Другие наши статьи:

Или же посетите наш новый проект — OpenFXmarket: весь рынок крипто-деривативов на одной странице.

До новых встреч!