предисловие
Поскольку кто-то попросил 50 000 в группе WeChat, чтобы купить движок сопоставления для версии Golang, я захотел разработать его сам, ведь по моему опыту разработать высокопроизводительный движок сопоставления несложно.
Я сделал то, что сказал, поэтому я использовал свое свободное время, чтобы медленно развитьGolangВерсия высокопроизводительного движка соответствия, потребовалось около месяца до и после. Думая, что я давно не обновлял статью, мой личный IP уже заржавел, и я должен сделать большой шаг, чтобы его измельчить. Поэтому я решил поделиться тем, как я спроектировал и реализовал этот движок сопоставления стоимостью более 50 000 в сериализованном виде.
Первоначально я хотел опубликовать его в виде буклета для Nuggets и взимать с него гонорары, ведь это программное обеспечение с большой коммерческой ценностью, но я попросил сотрудников Nuggets, и в настоящее время они не принимают такие темы. В конце концов, я решил опубликовать его бесплатно, и я мог бы разместить его еще в нескольких каналах, что могло бы привлечь больше внимания.
Что ж, начнем с темы согласования серий двигателей.
Введение в механизм сопоставления
Механизм сопоставления является основным компонентом всех систем сопоставления, будь то система торговли акциями, включая спотовую торговлю, торговлю фьючерсами, торговлю опционами и т. д., или систему торговли цифровой валютой, включая торговлю валютой, торговлю контрактами, торговлю кредитным плечом. и т. д. Существуют различные системы торговли драгоценными металлами, системы торговли сырьевыми товарами и т. д. Хотя торговые цели различных торговых систем различны, пока все они используют соответствующий режим торговли, они неотделимы от механизма сопоставления.
Симптомы могут быть универсальными, и набор реализаций мультисинтетического движка можно использовать в любой подходящей системе транзакций без необходимости вносить коррективы в какой-либо код. То есть тот же набор синхронных движков можно применять к системе торговли акциями, а также можно применять к системе торговли цифровыми валютами, которые можно использовать для спотовых транзакций, а также можно использовать для контрактных транзакций.
Итак, какие функции должен иметь универсальный механизм сопоставления? Прежде чем определиться с ответом на этот вопрос, давайте вкратце разберемся, как выглядит полный процесс транзакции? Как правило, он включает следующие шаги:
- Система открывает транзакционную функцию определенного объекта транзакции.
- Пользователь отправляет отчет о купле-продаже предмета сделки, то естьприказ.
- Система проверяет, действителен ли ордер, в том числе, находится ли цель транзакции в торговом состоянии, а также соответствуют ли цена и количество ордера требованиям.
- ** определяет, что отложенные ордера (Maker)скорость иСтавка тейкера**.
- Проверьте состояние учетной записи актива пользователя, в том числе, ограничен ли статус учетной записи для транзакций, достаточно ли средств для размещения заказов и т. д.
- Сохраните подробные данные заказа в базе данных и заморозьте соответствующую сумму средств на счете пользователя.
- Заказы были посредническими сделками, которые стремятся соответствовать ордерам транзакционных ордеров в ** ** книгах комиссий по транзакциям (OrderBook), результаты сопоставления могут быть: все транзакции, часть сделки или не совпадение. Когда все или часть записей о транзакциях может быть одна или несколько совпадающих книг комиссионных торговых ордеров, которые создадут одну или несколько записей о транзакциях. При отсутствии совпадения или части транзакции Заказ, включая количество оставшихся частичных записей данных, сохраняется во временной транзакции некомиссионной учетной книги и ожидает последующих совпадающих совпадающих заказов.
- Сохраняйте записи транзакций, созданные путем сопоставления с базой данных, и создавайте рыночные данные на основе исторических записей транзакций, таких как данные K-линии, сегодняшнее изменение и т. д.
- Обновите все заказы для выполнения данных заказов и обновите базу данных баланса активов ждев пользователей.
- Отправьте обновленные данные заказа, рыночные данные и т. д. на стойку регистрации.
Весь процесс транзакции включает несколько служб, включая пользовательские службы, службы учетных записей, службы заказов, службы сопоставления и службы рыночных данных. Среди них только шаг 7 обрабатывается механизмом сопоставления. Исходя из принципа единой ответственности, механизм сопоставления должен делать только одну вещь, а именноОтветственность за согласование заказов. Сохранение ордеров до сопоставления, замораживание средств и т. д., а также генерация данных K-линии после сопоставления не должны быть обязанностью механизма сопоставления.
Метод торгов
Обычно есть два способа сопоставить ставки, один из нихВызовите аукцион, дванепрерывный аукцион. Система торговли акциями обычно использует разные методы торгов в разные периоды времени, такие как аукцион коллов при открытии или закрытии, что приводит кцена открытияилиЦена закрытияи постоянные торги используются для до конца времени. Тем не менее, большинство цифровых торговых систем валюты не имеют аукциональных аукционов, а только постоянные аукционы. Цена открытия обычно устанавливается до начала транзакции.
аукцион вызовов
Так называемый аукцион вызова относится к методу аукциона, при котором заявки на покупку и продажу, полученные в течение определенного периода времени, сопоставляются одновременно. Возьмем, к примеру, систему торговли акциями в Шэньчжэне и Шанхае, время проведения колл-аукциона составляет от 9:15 до 9:25 в каждый торговый день. В течение этого периода заказы, полученные системой, не будут выполняться немедленно, но все заказы будут обрабатываться в соответствии сПриоритет цены, приоритет времениПо принципу сортировки и на этой основе найти эталонную цену, способную одновременно удовлетворять следующим трем условиям:
- Может достичьмаксимальный объемцена;
- Цена, по которой все ордера на покупку выше этой цены и ордера на продажу ниже этой цены могут быть полностью исполнены;
- Цена, по которой хотя бы один из покупателей или продавцов по той же цене совершает сделку.
В конце 9:25 базовая цена определяется какцена сделки, все ордера на покупку выше этой цены и все ордера на продажу ниже этой цены будут исполнены по этой цене. Заказы, которые не могут быть выполнены, будут автоматически переведены на непрерывный аукцион.
Однако что, если есть две или более цен, удовлетворяющих трем вышеприведенным условиям? В связи с этим планы работы Шэньчжэньской фондовой биржи и Шанхайской фондовой биржи различаются, и Шэньчжэньская фондовая биржа займет дистанциюпредыдущая цена закрытияПоследняя цена является ценой сделки, и Шанхайская фондовая биржа принимаетНеторгуемый объемНаименьшая цена — это цена сделки.средняя ценаэто цена сделки.
Основная цель колл-аукциона — определить цену открытия или закрытия.
непрерывный аукцион
Так называемые непрерывные торги — это также знакомый нам метод торгов, который относится к методу торгов, который непрерывно сопоставляет заказы на покупку и продажу один за другим. Отложенный ордер пользователя, если выполняются условия сделки, может быть исполнен немедленно. Аукцион вызовов не будет завершен до последней минуты.
При непрерывных торгах должен соблюдаться принцип транзакций приоритета цены и приоритета времени:
- ценовой приоритет: Оплатить цену более высокий приоритет можно торгуться, продавать заказы приоритет приоритет по более низкой цене.
- приоритет времени: Для ордеров с одинаковым направлением покупки и продажи и ценой ордера, объявленные первыми, будут выполняться в приоритете по сравнению с ордерами, объявленными позже.
Кроме того, цена предложения должна быть больше или равна цене предложения, чтобы сделка была закрыта. Когда цена предложения равна цене предложения, цена сделки является ценой предложения или продажи. Когда цена покупки выше цены продажи, последняя цена сделки определяется на основе предыдущей цены сделки. Предположим, что цена покупки — B, цена продажи — S, цена предыдущей сделки — P, а цена последней сделки — N, тогда:
- Если P >= B, то N = B
- Если P
- Если b> p> s, то n = p
Обычный набор сопоставленного двигателя должен поддерживать две конкурентные торги, но для того же предмета транзакции, она не может предложить либо одновременно, поэтому дизайн должен учитывать, как переключаться между двумя аукционами, конкретная реализация идей в мы расширении С точки зрения последующих глав.
требования к качеству
В дополнение к функциональным требованиям, упомянутым выше, наш механизм сопоставления также должен соответствовать некоторым требованиям к качеству, особенно дляДоступность,Масштабируемостьипредставлениеболее высокие требования. Кроме того, для достижения универсальности необходимо такжевозможность повторного использованиятребование.
Давайте сначала поговорим о повторном использовании.Мы ожидаем, что механизм сопоставления может использоваться как для систем торговли акциями, так и для систем торговли цифровыми валютами, а также может использоваться как для валютных транзакций, так и для контрактных транзакций. Следовательно, механизм сопоставления должен избегать внедрения бизнес-логики, тесно связанной с конкретной системой, для повышения ее возможности повторного использования.
Давайте еще раз посмотрим на производительность.Чтобы измерить производительность механизма сопоставления, вам нужно посмотреть, сколько он обрабатывает каждую пару транзакций.TPSНасколько высокая, то есть сколько ордеров по одной и той же торговой паре может быть обработано в секунду. В прошлом, с технологией сопоставления на основе базы данных, TPS обычно составлял всего 10 транзакций в секунду. В настоящее время в основном используется технология сопоставления памяти, и TPS может легко достигать 1000 транзакций в секунду, а при использовании эксклюзивного высокопроизводительного сервера несложно достичь TPS 10 000 транзакций в секунду или даже выше.
Давайте поговорим о масштабируемости.Каждый из наших механизмов сопоставления может обрабатывать несколько целевых транзакций одновременно или только одну целевую транзакцию. Когда цели транзакций и параллелизм увеличиваются, серверы могут быть добавлены и развернуты в соответствующих кластерах механизмов для обработки различных целей транзакций соответственно, чтобы достичь балансировки нагрузки.
Наконец, давайте поговорим о доступности.Высокая доступность в основном отражается в двух моментах: во-первых, низкий уровень отказов, а во-вторых, короткое время для устранения сбоев. Чтобы снизить частоту отказов, соответствующий двигатель должен обладать высокой надежностью, а также учитывать и разрабатывать решения для различных нештатных ситуаций, которые могут привести к отказу двигателя. Кроме того, для повышения доступности может использоваться и технология многомашинного горячего резервирования, а для обеспечения согласованности данных между серверами взаимного резервного копирования необходимо ввести схему репликации конечного автомата памяти, реализовать которую будет намного сложнее.
Однако мы не достигаем высоких требований к качеству сразу, потому что чем выше требования, тем сложнее будет их архитектура и реализация. Мы можем начать с простой версии и продолжать итерации.
резюме
Наша цель — внедрить набор общих механизмов сопоставления для поддержки коллективных и непрерывных торгов, а также для выполнения некоторых требований к качеству и улучшения возможности повторного использования, производительности, масштабируемости, доступности и т. д. системы. В последующих главах мы будем продолжать углубляться в разработку и реализацию этих требований. Кроме того, мы разработаем и реализуем несколько версий механизма сопоставления в итеративном порядке.
Два вопроса для рассмотрения:
- Когда аукцион колл завершится, если эталонной цены, отвечающей трем условиям, не будет, как будет определяться цена открытия?
- За одну транзакцию и можно ли повысить производительность за счет увеличения латерального режима сервера?
Отсканируйте QR-код ниже, чтобы перейти к номеру подписки.