«Бывает, за секунду зарабатываешь $10 000, а за час теряешь $20 000»: как я создал алгоритм, который торгует на криптобиржах вместо меня

Оленка Пилипчак

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

Меня зовут Максим, я занимаюсь высокочастотным алгоритмическим трейдингом на рынке криптовалют уже три года и веду об этом канал в Telegram. Хочу рассказать, как все устроено внутри, кто против кого играет. Оказалось, что это не просто развлечение с криптой, а очень тяжелый бизнес.

Фильм «Операция “Колибри”» смотрели? Или читали книгу Майкла Льюиса «Flash Boys. Высокочастотная революция на Уолл-стрит»? Вот то же самое, только на крипте.

Если коротко: у меня 56 бирж, я маркетмейкерБрокер/дилер, берет на себя риск приобретения и хранения на своих счетах ценных бумаг с целью организации их продаж на 42 биржах, торгую 110 монет, в среднем 50 000 сделок в день, 160 000 000 комбинаций в секунду, средняя скорость принятия решения — 0,01 секунды, около 400 серверов, 4 гигабита в секунду входящего трафика, сохраняю 40 гигабайт данных в час.

Как все начиналось

Три года назад, когда я решил влезть в этот бизнес, если бы я знал с чем придется столкнуться — вряд ли бы полез.

Так получилось, что после неудачного вложения в майнинг крипты (а у кого он был удачный?), у меня осталось около $2000 в криптовалютах. И я подумал, что хочу попробовать торговать, может, что-то получится с этой криптой сделать.

Мне хотелось построить машинку, которая сама по себе может увеличивать деньги, но при этом мне ничего делать не придется. Только полный автомат, никаких ручных торгов и принятий решений.

Cпойлер: у меня получилось, решения о сделках я действительно не принимаю, но зато я каждый день фикшу баги в системе 🙂

Кто против кого играет

Про это много где говорят, но нужно четко знать свое место в пищевой цепочке. Если ты зарабатываешь на рынке, то за счет кого именно: у кого ты отбираешь деньги. До меня дошло, у кого я могу отбирать деньги, где-то на второй год.

Сидеть и изучать графики мне ужасно не хотелось, поэтому я сразу начал со статистического анализа. По сути, весь алготрейдинг ходит вокруг «найди рыночную неэффективность и эксплуатируй ее».

Если вам кажется, что вы по графику сможете определить, куда пойдет цена, то поиграйте на тренажере: посмотрите на любой кусок графика любой акции или монеты, сделайте ставку, посмотрите через секунду — туда цена сходила или нет. Исторических данных много.

Можно долго спорить, но мое мнение: на долгой дистанции цена ходит случайно.

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

График — это следствие, события уже произошли. Закономерность есть до графика или между графиками.

По правде говоря, на третий год я нашел одну закономерность: если вероятность движения цены от любой точки вверх на +1% или вниз на -1% — это ровно 50/50 (это подтверждено тестами по топ-100 монет) и при этом есть монеты, у которых дневная амплитуда не менее 7% в день — дальше думайте сами 🙂

Арбитраж

Первая попытка создать стратегию, независящую от движения цены — это арбитражные цепочки вида:

USDT > BTC > LTC > USDT

USDT > XRP > BTC > USDT

USDT > ETH > BTC > USDT

И так далее.

Идея простая: поймать момент, когда цепочка сложится, и прокрутить по ней условные $100.

Робота к бирже Poloniex я написал за вечер, запустил, на следующий день — плюс $27. Еще на следующий — $20. В тот момент пришла эйфория.

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

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

Система роутинга

Я еще не знал, как именно я буду зарабатывать, поэтому решил делать то, что понимаю.

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

Далее на основе этого роутинга уже можно строить другие алгоритмы. Например, если сейчас биткойн торгуется по цене 60 000 USDTTether — криптовалюта, которая использует блокчейн биткойна для проведения финансовых операций и привязана к фиатным валютам — к доллару, евро и иене, то я, как правило, знаю, где купить по цене 59900 USDT. Просто потому что я прокручу миллионы маршрутов и найду самый выгодный вроде:

USDT > XRP (биржа 1); XRP > BTC (биржа 2)

В данный момент у меня примерно 16 000 000 цепочек вида:

BTC > USDT (binance); USDT > ETH (okex); ETH > BTC (yobit)

XRP > USDT (binance); USDT > ETH (okex); ETH > XRP (yobit)

И так далее. 110 монет, 56 бирж.

Цепочки могут быть нелинейные, с ветвлениями, комбинации на спотовом рынке, на фьючерсах, на Forex. Вариантов — миллионы, и я все варианты просчитываю за 0,1 секунды.

Обсчет выполняется параллельно на примерно 400 серверах (около 3200 ядер). Пришлось строить свою систему развертывания и мониторинга серверов в облаке.

Подобная система позволяет мне очень быстро переливать монеты между биржами с микроприбылью.

Маркетмейкер

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

Тут ты соревнуешься с другими маркетмейкерами, за счет чего спред становится уже совсем маленьким.

Многие думают что маркетмейкер — это такой магический кит, который двигает рынок, как ему нравится. На 99% это не совсем так.

Маркетмейкер — это группа игроков, часто плюс-минус таких же как я, которые держат наверху стакана лучший bid и лучший ask. Покупая или продавая что-то на рынке, вы заключаете сделку с маркетмейкером. А маркетмейкер, когда с ним заключили сделку, практически сразу заключает где-то противоположную (на фьючерсах или по сложной системе роутинга).

Маркетмейкер почти всегда держит дельта-нейтральную позициюПозиция, состоящая из нескольких компонентов, суммарная дельта которой равна нулю или около нуля. Дельта показывает, какую прибыль или убыток можно получить. А то, что маркетмейкер может двигать цены — это да, но это делается неспециально: я вынужден выставлять такие bid/ask, чтобы я всегда мог совершить противоположную сделку, и если у меня такой возможности нет — я буду убирать свои ставки из стакана или ставить их на другие места.

Сколько можно заработать

В среднем на одной цепочке я могу заработать 0,05-0,1%. Это десятки процентов в месяц.

Бывают моменты, когда удается построить сложную систему маршрута и на одной сделке поднять 10-12%.

Пару раз в год бывают моменты, когда ты ловишь «жидкий стакан» и «глюки биржи», и за секунду зарабатываешь $10 000.

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

Скорость принятия решений

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

Представьте: 56 бирж, 110 монет, суммарно это примерно 4500 торговых пар. По каждой паре мне нужно в памяти держать стакан со всеми bid/ask (а не только самую верхушку), ловить все трейды, и это все в реальном времени. А данные меняются со скоростью 4 гигабита в секунду.

Фактически надо повторять производительность всех бирж и тянуть все данные с них. Затем считать 16 миллионов комбинаций по этим стаканам.

При этом биржи тебя банят (некоторые навечно, прощай бабло!), тебе нужна сложная сетка proxy из своих виртуалок, чтобы получать все данные по биржам и агрегировать их.

В HFT есть предел точности и скорости.

В данный момент, если ты принимаешь решение медленнее чем за 0,1 секунды — ты проиграешь. Если точность твоего алгоритма менее 99,5% — ты проиграешь.

Баги и убытки

Не любите исправлять баги? У большинства бирж невероятно плохое API — оно медленное, отпадает, ты можешь разместить ордер и не узнать о результате вовремя.

У каждой биржи и каждой пары свои нюансы округления, свои требования к min order amount & max order amount, свои правила шагов цены, свои API-лимиты.

Любая ошибка в коде чревата потерями денег. У меня были моменты, когда я за час терял $20 000.

Не потому что рынок пошел против меня, а потому что я — олень, и допустил тупейший баг в коде и пошел пить чай.

В среднем, если я сейчас допущу баг в системе, то я буду терять $100-200 в секунду. Никакие тесты особо не помогут, потому что само API биржи может не ответить и выдать какую-то ерунду, а так как я маркетирую рынок, то бектест невозможен. Какой-то простейший фикс я могу делать месяцами, потому что мне страшно.

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

Если баги есть, все фиксилось или система ставилась на паузу и утром все фиксилось. И так каждый день. По привычке до сих пор просыпаюсь, но уже не смотрю в экран.

В обычном мире разработки ты написал софт, а потом доказываешь заказчику/юзерам что софт — окей, это они олени. В алготрейдинге нет людей: ты или победил рынок, или тебя разнесли. Интровертам понравится.

Сколько времени и денег ушло на постройку системы

Оказалось, что у такого проекта нет MVP. Нельзя что-то запилить за вечер и оно как-то начнет работать. У меня ушло 1,5 года по 8 часов в день. На ошибках сжег примерно $80 000 чистыми потерями.

Экономика проекта сойдется где-то от 25 бирж и 50 монет и от $50 000 торгового капитала. Меньше — прибыль не окупит серверы.

Технологии

Честно, я думал что я хорошо знаю MySQL, Redis, Memcached, PHP — вроде как 19 лет опыта и не первый highload. Но скорости, на которых это все работает, заставили по-другому посмотреть на эти технологии изнутри.

Прямо сейчас на каждом из серверов, которые отвечают за обсчет маршрутов, я делаю около 7 500 000 GET в секунду из Memcached. Приходится использовать и Memcached и Redis, потому что что-то одно просто не справляется с нагрузкой: Memcached это, все-таки, hi-perfomance key-value и на таких нагрузках он раз в шесть быстрее Redis, а Redis отлично справляется с Pubsub.

Пришлось разбираться, как устроено хранение данных в Memcached (все эти слабы и чанки), как Redis по сети передает данные, как их сжимать, чтобы пролезть в канал.

И, да, это все написано на PHP 8 🙂

Знакомые меня чмырят за то, что я использую PHP для HFT. Так исторически сложилось.

Сейчас это не имеет особого значения, потому что в среднем котировка от биржи летит ко мне 0,1 секунды, затем я принимаю решение за 0,01 секунды, затем ордер отправляется снова 0,1 секунды. И от того, что я перепишу все на C/C++ – я уменьшу только свои 0,01 секунды, а они тут уже ничего не решают. Да, будет экономия на серверах, но пока меня это на мотивирует.

Чтобы обрабатывать такое количество маршрутов роутинга, в памяти на нескольких серверах построен граф на 300 Гб, части которого непрерывно пересылаются на сервера обсчета через Redis Pubsub.

Чтобы делать бектесты, мне нужно не просто знать, как ходит цена кратно секунде (в реальности тик сейчас около 1/10 секунды), а еще и по каждой бирже, по каждой паре верхушки стакана (10 bid, 10 ask). Для этого пришлось построить систему, которая сохраняет в базы данных каждую секунду снимок DOM (depth of market). В данный момент это 10 серверов по 28 Tбайт на каждом — это 280 Tбайт хранилища, и его мне хватает примерно на 3-4 месяца, затем все перетирается по кругу.

Одна из важных подсистем в этой истории — это биллинг, он держит все транзакции и балансы по каждой бирже на моей стороне. Сам по себе биллинг — история не сложная, но проблема в том, что в пиках прилетает по 6000 транзакций в секунду от 400 серверов —  и это надо держать, чтобы не падало вообще. Прямо вообще ни одного пропуска или задержки. Если у меня в биллинге балансы разойдутся с реальными больше, чем на 5 центов — я просто не смогу торговать, буду пытаться исполнить цепочки, на которые у меня нет денег. Все будет нарастать как снежный ком, за час можно легко влететь на 20% от всего капитала.

Выводы

А никаких выводов.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023