Блог им. nilysenok
После истории с MEXC, где мы упёрлись в риск-контроль биржи, переключились на Hyperliquid и начали строить собственный торговый терминал.
И довольно быстро совершили классическую инженерную ошибку.
Сделали слишком много.
Этим постом начинаю новую серию — «Стройка терминала». Буду показывать её примерно так же, как раньше показывал другие наши продукты: что сделали, что сломали, от чего отказались и почему.
Раньше я уже отдельно разбирал всю лестницу торговой инфраструктуры — от мобильного приложения до FPGA и коллокации:
https://smart-lab.ru/blog/1358049.php
Теперь добрались до практики и строим своё.

Основа — настольный терминал на Rust.
Основная разработка сейчас идёт под Mac, но проект собирается и под Windows, и под Linux.
Один из главных принципов архитектуры — максимум должно происходить локально на компьютере пользователя.
Расчёты выполняются локально.
Ключи хранятся в системном защищённом хранилище.
А сам терминал в принципе не должен уметь выводить или переводить деньги.
Сейчас под капотом примерно:
231 тысяча строк кода;
4809 тестов;
564 инструмента Hyperliquid;
spot, perpetual futures и HIP-3;
собственная обработка стакана;
Binance как дополнительный источник внешних цен.
Отдельно повоевали с производительностью.
Написали собственную часть разбора JSON, которая в наших тестах оказалась примерно в 4,7 раза быстрее решения, которое использовали до этого.
Вроде звучит неплохо.
Вот только есть проблема.
Мы сделали почти всё, кроме самого главного.

Мы начали добавлять функции быстрее, чем успевали отвечать на вопрос:
кому вообще нужен этот продукт?
Получился настоящий комбайн.
Режим «Скальпинг» с лестницей и торговлей с клавиатуры.
Межбиржевой спред.
Конструкции из двух, трёх, четырёх и даже шести ног.
Графики и анализ в духе TradingView.
Расчёт риска до стопа.
Инвестиционный режим.
Портфель.
Покупка актива сразу на заданную сумму.
Просмотр кошелька по адресу.
Учебный счёт по живым ценам с нормальной маржой и ликвидацией.
И даже отдельный раздел «ИИ», который должен отвечать на вопросы вроде:
«Сколько раз такая ситуация уже встречалась?»
А в бэклоге лежало ещё 148 идей.
Самое смешное — почти каждая функция по отдельности действительно работала.
Но вместе они создавали продукт, который не мог нормально ответить на один элементарный вопрос:
для кого ты?
И здесь появляется совсем прекрасная деталь.
При примерно 231 тысяче строк кода во всём этом терминале до сих пор нельзя было совершить ни одной реальной сделки.
Подпись заявок и нормальную работу с ключами мы откладывали ради очередного:
«А давайте ещё вот этот режим добавим».
Классика 🙂
20 октября остановилисьВ какой-то момент пришлось буквально прекратить разработку новых функций.
И задать себе два вопроса.
Кто будет первым реальным пользователем?
Что ему действительно нужно в первый день?
Ответ оказался намного уже нашего терминала.
Первый пользователь — скальпер на Hyperliquid и Bybit.
Ему нужны:
быстрый стакан;
лестница;
торговля с клавиатуры;
мгновенное выставление и снятие заявки;
межбиржевой спред;
perpetual futures на акции против реальной цены базового актива;
понятная позиция и P&L.
И главное:
реальный счёт.
Не двадцать аналитических режимов.
Не очередная красивая вкладка.
Не ИИ ради ИИ.
Возможность нажать кнопку и получить нормальную, предсказуемую заявку на бирже.

Большую часть уже написанного мы не удалили.
Просто спрятали.
Аналитика.
Инвестиции.
Портфель.
Часть индикаторов.
ИИ.
Дополнительные режимы.
Всё это остаётся в коде, но пока не входит в первый продукт.
Вернёмся к этим функциям только после того, как терминалом начнут пользоваться хотя бы первые десять человек.
Потому что сейчас задача одна:
сделать один сценарий действительно хорошо.
Скальпер открыл терминал.
Увидел рынок.
Выставил заявку.
Получил подтверждение.
Закрыл позицию.
И нигде по дороге не возник вопрос:
«А что сейчас вообще произошло?»
Вот это сейчас важнее ещё пятидесяти функций.
Что делаем дальше 📈Первый этап — реальная торговля на Hyperliquid.
Нужен отдельный ключ-агент с торговыми правами, но без возможности вывода средств.
Дальше — корректная подпись заявок и обязательная сверка состояния каждой заявки непосредственно с биржей.
Не:
«мы отправили запрос и вроде всё хорошо».
А понятная конечная машина состояний:
создана;
отправлена;
принята;
частично исполнена;
исполнена;
отменена;
отклонена.
Без серых зон.
После этого — Bybit.
И уже поверх двух реальных подключений собираем то, ради чего вся история изначально и начиналась:
скальпинг на нескольких площадках;
полноценный стакан;
объём;
дельту;
брекет-заявки;
перетаскивание заявок;
живой межбиржевой спред;
связки perpetual против базовой акции.
Как поймём, что MVP готовЦель — первая нормальная версия к концу декабря.
Но хочется измерять готовность не словами:
«вроде работает».
А конкретными критериями.
Сначала — 1000 заявок в симуляции.
Потом — тестовая среда.
Потом — минимум 100 реальных заявок на микросуммах на обеих биржах.
И ни одного статуса:
«непонятно, что произошло».
От нажатия клавиши до формирования и отправки заявки из терминала целимся максимум в 1 миллисекунду.
Здесь важная оговорка: речь именно о внутренней задержке нашего терминала.
Сетевой путь до биржи и дальнейшее исполнение — уже отдельная история.
В январе–феврале хочу торговать через терминал сам.
Минимум 50 реальных сделок за две недели.
Ни одного инцидента с ключами.
После этого — закрытая бета примерно на 10 скальперах.
И только потом имеет смысл снова открывать шкаф со 148 прекрасными идеями 🙂
Зачем вообще свой терминалСамая интересная часть для меня здесь не в том, чтобы сделать ещё один интерфейс для покупки BTC.
Таких интерфейсов и без нас хватает.
Смысл начинается тогда, когда терминал заточен под конкретную механику торговли.
Например:
одновременно видеть Hyperliquid и Bybit;
в один момент видеть спред между ними;
с одной клавиши открывать конструкцию;
видеть реальный объём в обеих ногах;
считать P&L всей связки, а не двух отдельных сделок;
сопоставлять perpetual на акцию с базовой ценой самой акции;
понимать, что происходит с заявкой буквально на каждом этапе.
Для обычного инвестора это всё избыточно.
Для скальпера или арбитражника — в этом и заключается продукт.
Именно поэтому теперь сознательно перестаём делать терминал «для всех».

Инженеру очень легко влюбиться в разработку.
Каждая новая функция работает — значит хочется сделать следующую.
Потом ещё одну.
Потом ещё.
А затем оказывается, что у тебя есть огромный красивый продукт, который умеет всё, кроме решения одной конкретной задачи пользователя.
Мы довольно много времени потратили на ширину там, где сначала нужна была глубина в одном месте.
Теперь исправляем.
Продукт проверяется не количеством экранов.
Не количеством строк кода.
Не количеством режимов.
И даже не количеством тестов.
Он начинается в тот момент, когда через него проходит первая настоящая сделка — и пользователь понимает каждое её состояние от нажатия клавиши до исполнения.
Посмотрим, сколько ещё вещей придётся выкинуть по дороге 🙂
Что будет в серии дальшеХочу эту разработку показывать последовательно.
Не рекламными картинками в духе:
«смотрите, какой красивый терминал».
А именно стройкой.
Как храним ключи.
Как подписываем заявки.
Где теряем микросекунды.
Как собираем стакан.
Как синхронизируем две биржи.
Как считаем spread.
Что происходит, если одна нога исполнилась, а вторая нет.
Какие решения пришлось выбросить после реальных тестов.
И в какой момент программа наконец превращается из интересного инженерного проекта в инструмент, через который я готов торговать собственными деньгами.
Вот это, думаю, будет значительно интереснее.
👉 А вы с чего бы начали: с одного режима, доведённого до блеска, или с широкого набора функций, чтобы сначала понять, что вообще нужно пользователям?
P.S. Параллельно у нас остаётся ещё одно направление — SDF Bonds, облигационный скринер, который мы раньше развивали внутри команды.
Его тоже пришлось поставить на паузу примерно по той же причине: начали слишком быстро расширять функциональность раньше, чем окончательно добили основной пользовательский сценарий.
Но проект никуда не исчез.
Когда вернёмся к нему, хочу уже отдельно показать эту историю здесь: как вообще искали неэффективности на российском облигационном рынке, что получилось в первой версии, где упёрлись в ограничения и почему решили пересобрать подход.
В следующей итерации фокус как раз хотим сильнее сместить с обычного скрининга облигаций в сторону поиска конкретных рыночных неэффективностей.
Так что «Стройка» постепенно будет не только про терминал. Будет ещё много внутренней кухни по самим торговым инструментам и продуктам.
А пока — терминал.
Один пользователь. Один основной сценарий. Первая реальная заявка.
С этого и начинаем.
Есть же православный Quik
Мне кажется ваш путь тупиковый