Вступление: Финал эксперимента и ответ скептикам. Как мы с ИИ написали Open-Source убийцу SaaS-ботов на 280 000 строк кода, и почему я отдаю его даром.

В своих прошлых статьях я рассказывал, как научился использовать ИИ вместо команды сеньоров («Почему для одних ИИ — гений, а для других — идиот») и почему классическая команда сегодня только тормозит разработку из-за бюрократии и потери контекста («Парадокс инвестиций: Почему $1,000,000 и команда сеньоров убили бы мой стартап»).

В комментариях на меня вылили ушат холодного и вполне обоснованного скепсиса. Мне писали: «Где метрики? Кому нужен твой пет-проект?».

И знаете что? Вы абсолютно правы. ©

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

А сделать это можно только одним способом - открыв код и выложив его в Open-Source. Отдать людям бесплатно то, за что корпорации берут по $50-100 в месяц.

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

Я представляю вам DepthSight - платформу для алгоритмического трейдинга которая на голову превосходит закрытые решения. В ней более 280 000 строк кода, 1100+ автотестов, 600+ файлов, распределенная микросервисная архитектура и нативный ИИ-ассистент. Сегодня я полностью открываю её исходники (AGPL-3.0).

В комментариях к прошлой статье кто-то бросил тезис: «Да такое можно написать за выходные». Знаете, возможно, вы правы, но у нас не было возможности проверить это на практике. Теперь у нас такая возможность есть. Я открываю код проекта на 280 000 строк, где 90% кода написала машина.

Вы можете открыть репозиторий прямо сейчас. Найдите архитектурные дыры, покажите, где нейронка написала бредовый алгоритм, разнесите мой код. Я буду только рад, если вы укажете мне на косяки. Но если этот код работает и держит нагрузку… тогда нам всем есть о чём подумать.

Боль индустрии: Архитектурный абсурд SaaS

В крипте все помешаны на безопасности (аппаратные кошельки, seed-фразы в сейфах), но при этом трейдеры спокойно отдают API-ключи закрытым SaaS-сервисам (типа 3Commas, Veles или Bitsgap). Утечка базы данных такого сервиса - это риск потери депозита.

Вторая проблема - примитивность. За 50$ вам продают тупую DCA-сетку, которая просто покупает каждое падение цены на 1%, даже если рынок не дает никаких оснований что бы докупать.

Моя цель была создать Self-Hosted SaaS «в коробке». Платформу, которая ставится на ваш личный сервер, ключи хранятся в вашем зашифрованном Postgres, а возможности и гибкость логики превосходит любые платные аналоги.

Visual Strategy Editor
Visual Strategy Editor

Отказ от спагетти: Умные сетки и Иерархия

Я отказался от классических нодовых редакторов. И вместо этого DepthSight использует строгую иерархическую структуру:

  1. Filters (Фильтры) - глобальные запреты (например, не торговать в Азиатскую сессию или если Биткоин падает).

  2. Entry Conditions (Условия) - Условия для входа в позицию (Уровень, плотность в стакане, ускорение ленты, поджатия и т.д.).

  3. Management (Управление) - поведение после входа.(трейлинг стоп, добавление в позицию, безубыток)

Киллер-фича: В отличие от ботов представленных на рынке в DepthSight шаг усреднения сетки (DCA) можно привязать к любому блоку. Вы можете сделать так, чтобы бот усреднял позицию только если цена упала на 2% И в стакане появилась лимитная плотность больше $1,000,000. А динамические ссылки (Dynamic Links) позволяют прятать ордера например за уровень, пробойную свечу или лимитку в стакане.

Архитектура: Как это работает под капотом

Чтобы платформа выдерживала нагрузки и работала 24/7 в многопользовательском режиме, мы с ИИ спроектировали распределенную систему.

Стек проекта:

  • Бэкенд: Python 3.11+, FastAPI (REST + WebSockets).

  • Асинхронные задачи: Celery (для тяжелых бэктестов и генетической оптимизации).

  • Фронтенд: React / TypeScript + Tailwind.

  • Базы данных: PostgreSQL (постоянное хранилище) + Redis (стейт, Pub/Sub, квоты).

DepthSight Architecture Diagram
DepthSight Architecture Diagram

Эволюция коннектора: От самописных сокетов к CCXT

Изначально я отказыался от готовых библиотек таких как ccxt и писал об этом в прошлой статье. Но по мере добавления новых бирж (Bybit, OKX, Bitget) поддерживать самописные коннекторы стало просто невозможно в одиночку. Поэтому я переписал ядро исполнения (Executor) на базе библиотеки ccxt, что дало возможность довольно быстро подключать новые биржи через их унифицированный интерфейс.

Инженерная магия: Market Data Fan-out

Одна из главных проблем торговых платформ - лимиты бирж на количество WebSocket-соединений (Rate Limits). Если 50 пользователей запустят ботов на паре BTC/USDT, и каждый откроет свой сокет к бирже - ваш сервер забанят через пару минут.

DepthSight решает это через паттерн Market Data Fan-out. Работает один центральный сервис (market_data_service.py), который собирает тики и через Redis Pub/Sub раздает их всем изолированным worker-контейнерам.

# market_data_service.py
import redis.asyncio as redis_asyncio
from bot_module.exchanges import create_exchange_executor

class MarketDataService:
    def _get_consumer(self, exchange_id: str) -> DataConsumer:
        """Динамически создает коннектор на базе CCXT для нужной биржи."""
        if exchange_id not in self.consumers:
            # Универсальный экзекьютор под любую биржу
            futures_executor = create_exchange_executor(
                exchange=exchange_id,
                api_key="", api_secret="",
                session=self.session,
                market_type="futures_usdtm"
            )
            consumer = DataConsumer(
                executor=futures_executor,
                market_data_mode="direct",
                market_data_publish_callback=self._publish_market_payload
            )
            self.consumers[exchange_id] = consumer
        return self.consumers[exchange_id]

    async def _publish_market_payload(self, payload: Dict[str, Any]) -> None:
        """Единственное WebSocket-соединение получает данные от CCXT 
        и рассылает их воркерам через Redis Pub/Sub."""
        stream_key = payload.get("stream_key")
        channel = f"depthsight:market_data:events:{stream_key}"
        
        # Публикуем тик в канал. Ботам больше не нужно стучаться на биржу.
        await self.redis.publish(channel, json.dumps(payload))

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

ИИ на уровне ядра: Защита от галлюцинаций и ИИ-Оракул

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

Но как заставить LLM не галлюцинировать и отдавать рабочий код? Бэкенд жестко контролирует вывод нейросети через Pydantic:

# api/schemas.py
from pydantic import BaseModel, Field
from typing import List, Optional, Literal

class GenerateStrategyRequest(BaseModel):
    text_prompt: str = Field(..., description="Текстовое описание стратегии от пользователя.")
    current_config_json: Optional[Dict[str, Any]] = Field(
        None, description="Текущая конфигурация для модификации."
    )

class StrategyV2ConfigData(BaseModel):
    strategy_name: str = Field(default="VisualBuilderStrategy")
    symbol: str
    marketType: Literal["FUTURES", "SPOT"]
    filters: ConditionNode
    entryConditions: ConditionNode
    positionManagement: List[ManagementBlock]
    oracle_regime: Optional[int] = None
    use_ml_confirmation: Optional[bool] = False

# api/routes/ai.py
@ai_core_router.post(
    "/generate-strategy",
    response_model=schemas.ApiResponseData[schemas.StrategyV2ConfigData],
)
async def generate_strategy_from_text_ai_core_endpoint(
    request: schemas.GenerateStrategyRequest,
    current_user: models.User = Depends(get_current_user),
):
    # LLM (Gemini/OpenRouter) генерирует JSON.
    # Pydantic строго валидирует ответ через schemas.StrategyV2ConfigData
    generated_json = await ai_assistant.generate_strategy_json_from_prompt(
        request, current_user
    )
    
    # Плюс проверка прав пользователя (доступность блоков на его тарифе)
    enforce_strategy_plan_restrictions(generated_json, current_user)
    
    return {"data": generated_json}

ИИ-Оракул (Market Regime)

Помимо генерации, в платформу вшит ИИ-Оракул, обученный на GMM (Gaussian Mixture Models). В отличие от классических индикаторов, он не предсказывает “вверх” или “вниз”. Он предсказывает фазу рынка. Оракул оценивает дрейф сложности (Complexity drift) и скорость забывания (Memory) рынка, понимая, когда плавный флэт перерастает в “экстремальный шок”. Бот может автоматически закрыть все позиции, если Оракул зафиксирует резкую смену рыночного режима.

Federated Discovery Hub (Социальный слой)

Трейдинг в одиночку на закрытом сервере - это безопасно, но скучно. Поэтому я встроил в монорепозиторий Discovery Hub.

Это федеративная клиент-серверная модель. Ваша личная Self-hosted нода безопасно связывается с центральным хабом сообщества. Вы не передаете туда приватные ключи или балансы. Вы делитесь только логикой стратегий и графиками PnL при желании.

По сути, это TradingView для алготрейдеров: вы можете зайти в Хаб, посмотреть бэктесты и статистику чужой стратегии, и в один клик (Import) скопировать её в свой локальный редактор.

Discovery Hub Community
Discovery Hub Community

DevOps для чайников: Деплой одной кнопкой и OTA-обновления

Создать крутую архитектуру - это полдела. Главная проблема опенсорса в том, что обычному трейдеру сложно поднять у себя связку из 10 сервисов (Postgres, Redis, Celery, FastAPI и React). Если инструкция по установке непонятная - проект обречен.

Поэтому я написал deploy.sh - скрипт которы автоматически поднимает все сервисы на чистом сервере ubuntu. Достаточно просто приобрести сервер, подключиться по SSH и вставить одну команду:

curl -fsSL https://raw.githubusercontent.com/DepthSight-Pro/DepthSight/main/deploy.sh | bash

Что делает скрипт:

  1. Ставит Docker, UFW (настраивает Firewall) и нарезает Swap-файл (чтобы сборка React не убила дешевый VPS).

  2. Автоматически генерирует все пароли (Postgres, Redis), JWT-секреты и ключ шифрования ключей (Fernet) и кладет их в .env. Вам не нужно ничего придумывать руками.

  3. Спрашивает ваш домен, поднимает Caddy Server и сам получает SSL-сертификат от Let’s Encrypt.

  4. (Опционально) Разворачивает ноду Bitcart для приема криптоплатежей.

OTA-обновления (Over-The-Air) из браузера

Вторая проблема Self-Hosted - обновления. Если для админов и программистам это довольно привычно то для трейдеров это уже проблема, поэтому я реализовал автообновления прямо из веб-интерфейса. Когда вы нажимаете кнопку “Обновить” в браузере, бэкенд FastAPI в докере не может сам обновить докер. Поэтому он просто создает пустой файл-триггер data/.update_trigger в примонтированном контрейнере.

При деплое на хост-машину прописывается cron-задача:

* * * * * root if [ -f /opt/depthsight/data/.update_trigger ]; then rm /opt/depthsight/data/.update_trigger && bash /opt/depthsight/update.sh; fi

Каждую минуту хост проверяет наличие файла. Если файл есть - запускается update.sh, который делает git reset --hard, пуллит свежий код и пересобирает контейнеры. То есть пользователь просто нажимает кнопку обновить и через несколько минут у него новая версия и ему даже не приходится лезть в консоль.

Монетизация Open-Source и Лицензия

Наверное, у людей далёких от разработки опенсорс может возникнуть вопрос: “Зачем ты отдаешь систему такого уровня бесплатно? В чем подвох?”

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

Я выбрал лицензию AGPL-3.0. Она позволяет любому человеку бесплатно поднимать платформу для себя. Но она юридически обязывает любую компанию, которая решит сделать на базе моего кода закрытый коммерческий SaaS, открыть свои доработки сообществу.

Как я планирую зарабатывать? Недавно DepthSight получил статус официального брокера-партнера биржи Bybit. Я вшил свой Broker ID прямо в код экзекьютора. Когда ваш бот торгует на платформе, биржа выплачивает часть комисии которую она зарабатывает. Для трейдера условия не меняются, его комиссия остается точно такой же.

Конечно, я не питаю иллюзий. Это Open-Source. Любой программист может зайти в исходники, найти строку с Broker ID и удалить её. Кто-то даже может спиратить проект и поднять свой закрытый сервис, наплевав на AGPL. Это неизбежные издержки опенсорса.

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

Мишени для код-ревью: за что меня уволили бы из корпорации

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

Откуда вообще взялись эти 280 000 строк кода? Скептик скажет, что это ии слоп. Но давайте посмотрим на структуру: ~30% — это сложный фронтенд на React с визуальным редактором, ~20% — это 1100+ тестов, еще ~25% занимают 2 бэктестера и реализация того же визуального редактора.

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

  1. “God Object” на 13 000 строк. Откройте controller.py. Он весит 670 КБ.

  2. Отсутствие CI/CD Pipelines. В ближайшее время будет исправлено.

  3. Frontend Coupling. В React тоже есть “толстые” компоненты, например, CommunityHub.tsx на 120 КБ.

Вы наверное скажете, что это не production-ready. Я скажу: это цена скорости. Если кто-то из профессионалов готов зайти в GitHub, открыть Issue и показать, как правильно распилить этот контроллер по паттернам SOLID - я приму это с благодарностью. Потому что если бы я потратил еще пару месяцев на идеальный рефакторинг, проект бы никогда не увидел свет. Лучшее - враг хорошего. Базовая архитектура правильная(?), безопасность (Fernet шифрование ключей, JWT) — на высоком(?) уровне. А рефакторинг 13 000 строк controller.py — это отличная задача на ближайшее будущее или если кто-то проявит желание помочь.

Заключение

Я прошел путь от не-разработчика до создателя огромного Enterprise-продукта. И всё это благодаря диалогам с LLM. Мы живем в эпоху сингулярности соло-разработчиков, где один человек с правильной ментальной моделью и ИИ может создавать то, что раньше требовало отдела из 20 человек и миллионов венчурных инвестиций.

Если вы хотите запустить своего бота без абонентских плат - поднимайте свою версию DepthSight (установка в одну команду).

А если вам понравилась архитектура, подход или вы просто поддерживаете идею децентрализации и Open-Source - переходите на GitHub и, пожалуйста, поставьте проекту звезду ⭐️.

Для соло-разработчика это лучшая мотивация

🔗 GitHub: https://github.com/DepthSight-Pro/DepthSight

P.S. Проект в опенсорсе. Я обращаюсь к тем, кто занимается Highload и HFT. Я не профессиональный разработчик, и нейронки - не панацея от архитектурных уязвимостей. Меня волнуют две вещи: 1. Безопасность хранения ключей (насколько адекватно реализовано Fernet-шифрование в связке с текущей базой). 2. Эффективность Market Data Fan-out (выдержит ли текущая связка Redis Pub/Sub + CCXT одновременную работу 100 ботов в рамках одного сервера). Если вы видите дыры - заведите Issue на GitHub или разнесите меня в комментариях. Я готов учиться.