Создание торговой платформы Forex с использованием Kafka, Storm и Cassandra

blacktrader

Наш человек
Член команды
Администратор

Валютный рынок, или форекс, является крупнейшим и наиболее ликвидным обменным сервисом в мире, и каждый день совершаются сделки на сумму более 4 триллионов долларов. Это действительно глобальный рынок, который отдыхает только по выходным. Будучи увлекательным бизнесом, форекс постоянно совершенствуется в технологиях на протяжении многих лет. Однако, как и в прежние времена, успех в торговле нуждается в аналитическом уме и азартной душе, поскольку требует от трейдера большого риска и стресса. В то время как признанные финансовые учреждения используют дорогие системы для совершения сделок, например, программное обеспечение прямого доступа к рынку со сверхнизкой задержкой, индивидуальные инвесторы имеют в своем распоряжении всего несколько простых инструментов, например, Meta Trader или Ninja Trader. Доступное программное обеспечение существует и хорошо интегрируется с брокерскими услугами. Это часто позволяет выполнять собственные торговые алгоритмы. Однако он не позволяет анализировать богатые финансовые данные, что крайне важно для принятия обоснованных торговых решений или построения торговых алгоритмов.

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

Я составил Wolf из группы сервисов.



Вольф обрабатывает два типа входных данных: обновления курсов семи основных валютных пар и торговые поручения от инвесторов. Входы первого типа происходят из службы «Data provider». Входы второго типа поступают в систему из «Rule API», модуля, расположенного в верхнем правом углу. Первый поток информации важен для работы Вольфа. Он извлечен из данных, собранных на сайте HistData. Они подаются в систему с разрешением до одного «тика» в миллисекунду, то есть курс пересчета каждой валютной пары обновляется не чаще, чем раз в миллисекунду. В то же время пользователи системы предоставляют второй поток событий, отправляя торговые ордера через веб-интерфейс или RESTful API. Оба типа входов поступают в мультиплексор. Он реализован с использованием Kafka, постоянной очереди, которая устойчива к аппаратным сбоям, имеет настраиваемую емкость и позволяет буферизовать данные в течение определенного периода времени.

Маршрутизация данных с разными скоростями с Кафкой. Я создал три класса потребителей для событий из мультиплексора: механизм правил, сервис визуализации в реальном времени и сервис агрегации пакетов. Они расположены прямо над мультиплексором. Механизм правил способен извлекать каждую миллисекунду, не прерывая слой визуализации в реальном времени, который потребляет каждые пятьсот миллисекунд. В то же время служба агрегации потребляет на порядок медленнее, каждые пятнадцать минут. Эти три потребителя обрабатывают данные с очень разными скоростями, потому что они представляют три разных варианта использования Wolf. Механизм правил должен выполнять торговые приказы от инвесторов с минимальной задержкой. Слой визуализации, или графическое устройство, должен казаться интерактивным для пользователей, но не насыщать сеть. Слой агрегации должен обрабатывать события в больших количествах. Эти три устройства могут торговать с высокой пропускной способностью за низкое время отклика или наоборот, благодаря уникально разработанным группам потребителей Kafka.

Конвейер данных для механизма правил: очень быстрый

Торговые заявки выражаются в терминах правил «если тогда». Примером такого правила может быть следующее утверждение: «Если курс конвертации евро в доллар США составляет менее 1,2, то покупайте 100 единиц». Механизм правил должен быстро сопоставить большой объем таких правил с постоянно меняющимся рынком. Другими словами, инвестор хочет, чтобы вышеуказанная сделка была исполнена сразу, когда курс конвертации падает ниже указанного порога. Это сложно решить, поскольку показатели конверсии колеблются динамически. Модуль Wolf, отвечающий за выполнение торговых приказов, называется механизмом правил. Это реализовано поверх обработчика событий Storm. Storm - это проверенное на поле боя решение, которое очень хорошо интегрируется с Kafka. Это позволяет создать пользовательский поток обработки, то есть топологию. Ниже представлена визуализация топологии, работающей в кластере Storm:



Storm заботится о сериализации, маршрутизации и воспроизведении событий из источника в случае сбоев. Это позволяет создавать распределенные топологии и внедрять пользовательскую бизнес-логику. Я делегировал фактическое действие покупки и продажи валюты внешней брокерской службе.

Поток данных для службы визуализации в реальном времени: быстро

Вторым потребителем событий от Kafka является сервис визуализации в реальном времени. Он собирает последние обновления на рынке за четыре часа. Поскольку события сортируются по метке времени, я решил воспользоваться еще одним очень известным решением с открытым исходным кодом, базой данных Cassandra. Она предназначена для эффективного хранения серий упорядоченных данных. Cassandra связывает ключи с отсортированными списками и эффективно сохраняет их, используя таблицы отсортированных строк. Они реплицируются между серверами, которые образуют логическое кольцо без назначенных мастеров или рабов. Благодаря своей конструкции Cassandra устойчива к сбоям и реплицирует данные в несколько центров обработки данных, что делает его высокодоступным распределенным хранилищем данных. Это позволяет настраивать согласованность с уровнями чтения / записи. Это очень эффективное решение, основанное на базах данных DynamoDB и LevelDB. Тем не менее, это очень сложная система, которая предлагает глобальные счетчики, облегченные транзакции и многое другое.

Конвейер данных для службы пакетного агрегирования: медленный

Последний потребитель событий от Kafka - сервис пакетного агрегирования. Он предназначен для хранения всех исторических событий, сотен терабайт данных. Я решил использовать Camus для сбора данных с Kafka и сохранения их в кластере Hadoop. Я использовал Hive для расчета агрегированных представлений, например, Я преобразовал данные в более низкое разрешение путем усреднения коэффициентов конвертации по времени и отправил эти представления в службу визуализации в реальном времени. Такой подход позволяет визуализировать данные в разных масштабах. Таким образом, я мог бы отобразить самую последнюю минуту данных с разрешением в одну миллисекунду и последний час данных с разрешением в одну минуту, чтобы избежать отправки чрезмерного количества временных точек клиенту.

Собираем все вместе

Помимо службы визуализации в реальном времени, я создал обслуживающий слой, который не позволяет пользователям напрямую запрашивать хранилища данных и улучшает время отклика Wolf. Он представлен в виде модуля «Кэш». Код на стороне клиента периодически опрашивает обслуживающий уровень на предмет последних данных. Для отображения данных я использовал JavaScript-библиотеку Flot, которая поддерживает построение рядов в реальном времени в веб-браузере.





Подводя итог, можно сказать, что с технической точки зрения самой сложной частью построения торговой платформы было правильное совмещение нескольких движущихся частей и возможность обработки большого количества событий с небольшой задержкой, а также визуализация и сохранение их в надежном виде. место хранения. Чтобы решить эту сложную проблему, я сначала создал прототип, а затем заменил его на ряд проверенных решений. Чтобы Wolf работал и склеил начальный каркас распределенных сервисов, я использовал микросхему Flask и пару сценариев оболочки. Это позволило мне быстро осуществить проверку концепции, последовательно заменить макетированные сервисы и улучшить дизайн системы. Я считаю, что эта методология действительно была ключом к успеху этого проекта.
 
Последнее редактирование модератором:

Онлайн статистика

Пользователи онлайн
0
Гости онлайн
73
Всего посетителей
73

Статистика форума

Темы
1 643
Сообщения
53 508
Пользователи
9 184
Новый пользователь
BoldikuFFs

Мы в социальных сетях

Вверх Снизу