Блог им. Mushketer
В общем, я тут пробую применять Rust к биржевой торговле. Сделал простенькое приложение, которое:
1. Подключается к биржам (пока это Бинанс и Кракен, дальше буду смотреть, что подключить еще)
2. Собирает тиковые данные по трейдам и ордербуку
3. Приводит это всё к единому формату
4. Сохраняет историю в базу для дальнейшего анализа
5. Мониторит арбитражные возможности
Наверное, я не буду рассказывать все детали реализации, потому что это мало кому интересно. Вместо этого поделюсь выводами:
1. Rust очень дружелюбный для своей производительности язык. Если кто ещё не пробовал, то максимально рекомендую. Во-первых, вы не испытываете никаких проблем с управлением памятью. Во-вторых, он настолько параноидально следит за всеми местами, где можно накосячить, что выстрелить себе в ногу практически невозможно (а это важно, согласитесь). В-третьих, с ним очень дружит ChatGPT, и вы можете спокойно писать хороший, чистый и читаемый код в расслабленном стиле, и, по факту, остаётся следить только за архитектурой приложения.
2. Штука получилась производительная. На своей машине я обрабатываю 15-20к событий в секунду (+ вывожу на экран и пишу в базу данных), при том что я ничего специально не оптимизировал. Сколько могу обработать максимально не проверял, но, по ощущениям, на порядки больше.
3. Возможностей арбитража на популярных парах типа BTC/USDT я не увидел, что в общем-то неудивительно. Максимальный спред, который мне попался, был 0.25%, что очевидно не хватит, даже если вместо перегона денег с биржи на биржу мы будем выставлять встречные заявки в стакане. Наверное, можно посмотреть менее популярные инструменты, но сомневаюсь, что там вообще хватит ликвидности.
4. К слову о ликвидности. На Кракене её мало. На каждые 50 сделок с Бинанса приходится максимум пара сделок с Кракена. Зато ордербук даёт отличную видимость активности — тысячи обновлений в секунду и огромное количество ордеров, которые исчезают, стоит к ним лишь едва прикоснуться.
Не могу сказать, что я глубоко изучил вопрос, по крайней мере пока. Но промежуточные выводы такие. Дальше планировал посмотреть, как обстоит дело с треугольным арбитражем — полагаю, что так же, но посмотреть всё равно интересно.
Если у вас есть альтернативные идеи или пожелания (что реализовать, какой коннектор сделать, какой сигнал поискать и т.д.), то ставьте плюс посту и оставляйте задачу в комментарии. Добавлю задачу в записную книжку.
Весь код опенсорс, забрать можно здесь — https://github.com/barmatey/spoofer
PS. Если пост зайдёт и будет вменяемая обратная связь, то я пойму, что это кому-то нужно и продолжу эксперименты. Так что не стесняйтесь задавать вопросы и предлагать идеи. А то надоело делать фигню, которая нужна только мне)
Интересную штуку вы сделали! Ключи к Binance Kraken datastream бесплатно раздают?
Знаешь, что самое главное в языке?
А я отвечу — библиотеки, написанные другими.
И чем больше это сообщество, тем более дружелюбным становится кодинг.