← Заметки
Торговый стол, который ничего вам не должен объяснять
philosophy·design

Торговый стол, который ничего вам не должен объяснять

Почему мы построили inite.fund именно так, а не иначе. Пять ограничений, к которым мы возвращаемся снова и снова.

· Mikhail Savchenko · Обновлено

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

inite.fund — посередине. Не розница и не институционал. Без нарратива. Полтора года мы его строили, ломали и собирали заново; ниже — пять принципов, к которым мы возвращаемся раз за разом.

1. Методология должна защищаться без нас в комнате

Если метод приходится объяснять задним числом — это не метод, а нарратив. Мы выкинули кучу фич, красиво работавших в backtest, но не сводимых к двум предложениям.

Проверка: дайте Claude прочитать код. Если стратегию нельзя пересказать тому, кто её ни разу не видел, — это не стратегия.

На этом мы обожглись с Q-learning-выходом для торговых стратегий. Он обучался, на backtest работал. Объяснить, почему он выходит именно здесь, мы не могли. Снесли и вернулись к фиксированным правилам. Фиксированные правила быстрее выкатывать, быстрее дебажить, и ломаются они предсказуемо.

2. Аудит-лог идёт раньше фичи

Любое изменение состояния пишет строку. Смены режимов идут в mode_history. У движений капитала есть audit_ref — это и делает их идемпотентными. Любой вызов MCP-инструмента попадает в audit_log до того, как вернёт ответ. У каждой сделки — свой автомат состояний, который можно проиграть с диска.

Это не паранойя. Это про то, что финансовый софт ломается странно. Когда что-то идёт не так в 03:14 ночи в воскресенье, вопрос никогда не «что код должен делать», вопрос «что код реально сделал». Без логов вы восстанавливаете из домыслов. Логи всегда выигрывают у домыслов.

Аудит-лог заодно открывает дорогу MCP. Claude вызывает set_mode, audit_log пишет «via mcp:user#7», вы потом смотрите и точно знаете, кто и как. След один и тот же — кликнули вы кнопку или ввели предложение в чате.

3. Пользователь — это и есть радиус поражения

В старой версии inite.fund был один глобальный «торговый пользователь»: ключи лежали в общих настройках, доступ был у любого админа. В этом квартале мы это переписали.

Теперь каждая стратегия принадлежит ровно одному пользователю. Длинные стратегии, торговые аккаунты, записи в хранилище, токены — всё привязано к пользователю. Если его скомпрометировали — отзываете токен, ротируете его ключи биржи. Его стратегии уходят в деградированный режим. Другие пользователи этого даже не замечают.

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

4. Real-time — это фича; свежесть данных — это бюджет

Данные в реальном времени стоят дорого. Дёргать биржу на каждый тик — дорого. Рендерить маркетинговую страницу на сервере под каждый запрос — дорого. Поэтому мы задаём допуск по свежести для каждой поверхности и под него проектируем.

  • Дашборд кокпита тянет SSE с шагом 5-15 секунд. Бесплатно.
  • Маркетинговый сайт собирается на сервере, кешируется на эдже на 30 секунд. Считай, бесплатно.
  • OG-карточки (превью ссылок в Twitter / Discord) рендерятся по запросу из продуктового API, кеш 5 минут на стороне самой платформы превью.
  • MCP-инструменты на каждый вызов забирают свежее состояние. На пользователя — около 20 вызовов в день, свежесть тут по сути бесплатна.

Никакого глобального обещания «real-time» нет — есть бюджет свежести для каждой поверхности. «AUM обновлён 10 секунд назад» на /strategies значит ровно это; дашборд тикает быстрее, OG-картинка — медленнее.

5. Делайте то, что нужно двум операторам

Самое сложное проектное решение в таком софте — для кого он. Рознице нужны чат-боты и эмодзи. Хедж-фонду — compliance-хуки и FIX. Мы выбрали середину: тот, кто вёл бы небольшую аллокацию руками, если бы софта не было; умеет читать код; и кому важнее не потерять деньги, чем быстро разбогатеть.

Отсюда вытекает всё остальное:

  • Доступ только по инвайту. Самостоятельной регистрации нет. Подключение — это разговор.
  • Зашифрованное хранилище ключей бирж. Открытым текстом ключ показывается один раз. Модель та же, что у Stripe с restricted-ключами; логика та же.
  • MCP в приоритете, дашборд — вторичен. Дашборд нужен для мониторинга и аварийных действий. Большая часть правок идёт через Claude.
  • Скиллы — это Markdown, а не закрытая плагин-система. Вы их читаете. Вы их форкаете. И можете запретить нам их обновлять, если захотите.

Что мы никогда не сделаем

  • Обещать доходность. Любая опубликованная цифра — это история результатов, а не прогноз.
  • Прятать ваши деньги от вас. Весь стек поддаётся аудиту; код внутренний, но методология — в этом блоге.
  • Продавать на FOMO. Только по инвайту, ограниченный темп подключения новых пользователей, никакой публичной регистрации. Если сомневаетесь — подождите. Стол никуда не денется и в следующем месяце.
  • Торговать вашими деньгами без ваших ключей. Каждая стратегия читает из вашего хранилища. Кастоди — не наша работа.

Что мы будем делать всегда

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

Остальное — исполнение.

  • inite team
Похожие заметки
Все заметки →