Я соло-разработчик. Этой весной я решил, что вместо очередного «бота на RSI» соберу нормальную систему: команду автономных AI-агентов с общей памятью, которые круглосуточно исследуют крипторынок, читают научные статьи, следят за новостями, проверяют «гуру» из телеграма и ищут торговое преимущество. Всё это — на одном дешёвом VPS, на Python, cron и OpenAI API.

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

А теперь спойлер, ради которого стоит дочитать: главный результат работы этой машины — строгое, статистически честное доказательство того, что торгового edge у моего ретейл-подхода нет. Два десятка проверенных гипотез — два десятка трупов. И я считаю это лучшим, что система могла для меня сделать.

Обо всём по порядку: сначала архитектура и грабли (они переносимы на любую предметную область), потом — главная глава про кладбище гипотез.

Архитектура: общий мозг и рабочие пчёлы

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

[исследователь статей]──┐
[куратор новостей]──────┤
[скоринг сигнальщиков]──┼──► LightRAG (общий мозг) ──► [оркестратор gpt-4o]
[финансовый агент]──────┤          ▲                          │
[риск-агент]────────────┘          └───── мета-бриф ◄─────────┘
[сигнальные движки] ──► Telegram

Общий мозг — LightRAG. Это граф-RAG: документы не просто нарезаются на чанки и складываются в векторную базу, а из них извлекаются сущности и связи, поверх строится граф знаний. Запрос «что мы знаем про фандинг-арбитраж» поднимает не три случайных абзаца, а связанный подграф. LLM-бэкенд — gpt-4o-mini, эмбеддинги — text-embedding-3-small. Дёшево настолько, что о стоимости индексации можно не думать.

Рабочие пчёлы — 15+ Python-агентов на cron. Никакого Kubernetes, никаких очередей сообщений, никакого LangChain. Каждый агент — отдельный скрипт со своим расписанием:

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

  • Куратор новостей — собирает RSS и открытые Telegram-каналы, фильтрует шум, кладёт значимое в мозг с тегами.

  • Скоринг «гуру» — самый весёлый агент. Парсит публичные сигналы крипто-сигнальщиков и проверяет их по факту: сопоставляет с реальными свечами и считает winrate и net-return после комиссий. Забегая вперёд: почти все «гуру» оказались коинфлипом или стабильным минусом. Один агент окупил всю систему сэкономленными подписками.

  • Финансовый агент — раз в сутки сверяет журнал сделок с данными биржевого API: комиссии, фандинг, проскальзывание. Расхождение — алерт.

  • Риск-агент — сторожевой пёс против переразмера позиций. Не генерирует идеи, а бьёт по рукам.

  • Сигнальные движки — трёхъярусный конвейер: сканер контекста (каждые 30 минут) → предупреждение «цена у уровня» (каждые 5 минут) → подтверждённый сигнал в Telegram через несколько секунд после закрытия бара (fast-poll вместо тупого ожидания следующего крона — биржа, кстати, нигде не документирует, когда именно финализируется свеча, так что система замеряет это сама).

Замыкает контур оркестратор — агент на gpt-4o, который читает выходы всех остальных и пишет мета-бриф: что нового, что противоречит чему, что стоит проверить. Бриф отправляется мне в Telegram и — важно — записывается обратно в мозг. Система читает собственные выводы недельной давности и опирается на них. Замкнутый контур с памятью.

Всё это живёт на VPS за несколько долларов в месяц. Общие расходы на API — единицы долларов в месяц. Это важная часть истории: такая система доступна одному человеку без бюджета.

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

Глава 1. LightRAG и восемь писателей: flock или гонки

LightRAG хранит граф и векторные индексы в файлах. Когда писатель один — всё прекрасно. Когда по cron одновременно просыпаются восемь агентов и каждый хочет записать свою порцию знаний — начинаются гонки: битые JSON, потерянные вставки, изредка — тихо покорёженный индекс, который вы заметите через неделю по странным ответам.

Решение скучное и потому надёжное — один файловый lock на всю запись:

import fcntl, contextlib
@contextlib.contextmanager
def rag_write_lock(path="/var/lock/rag_writer.lock"):    with open(path, "w") as f:        fcntl.flock(f, fcntl.LOCK_EX)   # блокируемся, пока пишет другой        try:            yield        finally:            fcntl.flock(f, fcntl.LOCK_UN)
# в каждом агенте-писателе:
with rag_write_lock():    rag.insert(doc)

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

Глава 2. Тихая смерть по крону

Cron — прекрасный оркестратор ровно до момента, когда процесс умирает молча. У меня коллектор рыночных данных однажды упал из-за изменения формата ответа API — и просто перестал писать файлы. Никаких исключений в мой Telegram, никаких следов. Cron честно запускал его дальше, скрипт честно падал на первой же строке парсинга. Я обнаружил дыру через две недели — двух недель данных нет и не будет.

После этого появился watchdog. Принцип: каждый агент в конце успешного прогона трогает свой heartbeat-файл, а отдельный скрипт раз в 10 минут проверяет mtime всех heartbeat’ов:

CHECKS = {"collector": 900, "news": 7200, "scorer": 90000}  # сек
for name, max_age in CHECKS.items():    age = time.time() - os.path.getmtime(f"/run/hb/{name}")    if age > max_age and not recently_alerted(name):  # дебаунс!        tg_alert(f"{name} молчит {age/60:.0f} мин")        mark_alerted(name, ttl=3600)

Две неочевидные детали. Первая: проверять надо именно результат работы (mtime выходного файла или heartbeat, который трогается после успешной записи), а не «жив ли процесс» — зомби-процесс, который крутится, но ничего не пишет, пройдёт проверку по PID. Вторая: дебаунс алертов обязателен, иначе в первый же ночной инцидент вы получите 40 одинаковых сообщений и приучите себя их игнорировать. Алерт, который игнорируют, хуже отсутствия алерта.

Глава 3. Грабли имени root

Классика, о которую я ударился со всей силы. Отлаживал агент под root — быстро, удобно, всё работает. В процессе отладки агент создал выходной файл. Владелец файла, разумеется, root.

Дальше cron запускает агента уже под обычным пользователем. Агент пытается перезаписать файл — PermissionError. Часами. Молча (см. главу 2: watchdog тогда ещё не родился). Логи выглядели нормально, потому что падение происходило после основной работы, на последней записи.

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

Глава 4. Оркестратор: gpt-4o за три цента

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

Поэтому дисциплина вшита прямо в system-промпт:

SYSTEM = """Ты аналитик-скептик. Правила:
1. НЕ выдумывай альфу. Нет статистики — пиши «данных недостаточно».
2. Любое утверждение — со ссылкой на выход конкретного агента.
3. Противоречия между агентами выделяй, а не сглаживай.
4. Твоя ценность — в убийстве слабых гипотез, а не в генерации новых."""
resp = client.chat.completions.create(    model="gpt-4o", temperature=0.3,    messages=[{"role": "system", "content": SYSTEM},              {"role": "user", "content": digest}],
)

Температура 0.3 — чтобы бриф был воспроизводимым и сухим. Один прогон стоит около $0.03. Пункт 4 промпта — самый важный, и позже вы поймёте почему.

Глава 5. Телеграм-мелочи, которые решают

Три маленькие вещи, которые сделали жизнь с ботом сильно приятнее:

  • Tap-to-copy. Цены и уровни оборачиваются в <code>...</code> (parse_mode=HTML) — по тапу значение копируется в буфер. Мелочь, а пользуешься сто раз в день.

  • Дебаунс уведомлений. Тот же принцип, что и у watchdog: одинаковые сообщения схлопываются в одно с TTL. Без этого любой шумный рынок превращает чат в водопад.

  • NOTG-флаг. Каждый агент понимает переменную окружения, при которой все отправки в Telegram заменяются на print. Тестовый прогон никогда не должен спамить в боевой чат — правило, которое выучиваешь ровно после одного нарушения.

Главная глава. Как система доказала, что edge нет

А теперь — то, ради чего всё затевалось, и то, что получилось вместо этого.

Изначальный план был наивен и прекрасен: агенты перелопачивают статьи, новости и данные, находят неэффективности, я их торгую. Вместо этого система превратилась в конвейер по проверке гипотез — и конвейер этот сработал как машина правды. Каждая гипотеза проходила один и тот же путь: бэктест с честной моделью издержек → out-of-sample проверка → поправка на множественные сравнения. Итог по ~16 дорогам:

  • 22 технических индикатора. Проверка предсказательной силы на исторических данных: AUC = 0.516. Для справки: подбрасывание монетки даёт 0.5. Полсотни лет технического анализа — на толщину волоса от монетки.

  • 5 таймфреймов. Может, дело в масштабе? Нет. Картина одинаково унылая на всех.

  • Календарные паттерны. Вот тут было больно, потому что сначала сработало: эффект дня недели с t-статистикой около 8! Я уже мысленно писал другую статью. Потом я вспомнил, что альткоины коррелированы с биткоином почти как один актив, и кластеризовал коррелированные монеты — эффективный размер выборки схлопнулся, t-статистика упала с 8 до 1.3. Не сигнал, а одна и та же монета, посчитанная тридцать раз.

  • Стакан и тики. Дисбаланс заявок, всплески объёма — на моём горизонте это шум. Возможно, на миллисекундах там что-то есть, но это игра HFT-фирм с колокацией, а не парня с VPS.

  • Свечные паттерны. Мой любимый экспонат. 4971 сделка по классическим паттернам: без комиссий −48%, а с учётом тейкер-комиссий −744%. Молоты и поглощения не просто не работают — они работают наоборот, и издержки превращают проигрыш в катастрофу.

  • Интрадэй вообще. Чем короче таймфрейм, тем больше сделок, тем больше комиссий и проскальзывания при том же (нулевом) сигнале. Sub-hour скальпинг для ретейла — ловушка издержек, эмпирически.

  • Комбинаторный перебор 32 фильтров. «А может, edge в комбинации?» Система честно перебрала тысячи комбинаций поверх базовой стратегии. Лучшая найденная комбинация оказалась… той, что уже была. А главное: Deflated Sharpe Ratio с поправкой на число проб понизил итоговую оценку — перебор не добавил информации, он добавил только штраф за подглядывание.

  • Фандинг и открытый интерес. Как фильтры режима — статистически неотличимы от нуля на форвард-периоде.

  • Mean-reversion («шорти хаи, лонгуй лои» — внутридневной возврат к среднему): −49% на out-of-sample.

  • Cross-sectional momentum (лонг лидеров, шорт аутсайдеров корзины): −44%. Академическая классика, которая на моих данных и с моими издержками не выжила.

  • Ранний вход по младшему таймфрейму (тренд старших ТФ + пробой младшего, вход до подтверждения бара): DSR 0.0. Ранний вход стабильно хуже подтверждённого — «задержка» подтверждения оказалась не издержкой, а единственным работающим фильтром.

  • Геометрия стопов и тейков. Сетка из 24 комбинаций стоп×тейк: winrate гулял от 18% до 61%, а матожидание на сделку не сдвинулось с места. Живая иллюстрация теоремы об опциональной остановке: геометрия меняет форму распределения исходов, но не его центр. «Подберу правильные стопы» — самая живучая иллюзия из всех.

  • Вход по откату (дождаться отката и войти по лучшей цене) — единственная гипотеза, дожившая до живого форвард-теста в параллель с базовой. Итог: строго хуже. Лучшая цена ↔ меньше исполнений, и пропускаются ровно те движения, которые кормят статистику.

  • Фандинг-carry — особый экспонат. Дельта-нейтральный сбор фандинга (лонг спот + шорт перп) — единственная стратегия, чьё преимущество существует по построению, а не по предсказанию: ты собираешь платежи маржинальных лонгистов, а не угадываешь цену. И тем не менее: 877 сделок бэктеста, Sharpe −1.11. Причина не в идее, а в масштабе — на маленьком депозите комиссии двух ног съедают фандинг целиком. Математика начинает сходиться примерно от $20k капитала. Единственная могила с табличкой «вернуться, когда вырастешь».

Двадцать дорог. Ни одна не прошла статистический порог — а единственная структурно honest-дорога упёрлась не в статистику, а в порог капитала.

Инструменты честности

Почему я верю этим результатам больше, чем очередному скриншоту «+300% за месяц»? Потому что каждый тест проходил через четыре фильтра:

  1. Deflated Sharpe Ratio (Bailey, López de Prado). Если вы проверили N стратегий и показываете лучшую — её Sharpe надо дефлировать с учётом N. Формула наказывает за перебор: чем больше вы искали, тем выше порог. Это математическое оформление простой мысли: из тысячи обезьян с печатными машинками одна напечатает «эквити вверх».

  2. Out-of-sample расколы. Параметры подбираются на одном куске истории, оцениваются на другом, который стратегия «не видела». Всё, что не выживает на OOS, — оверфит по определению.

  3. Cost-modeling. Каждая сделка в бэктесте платит тейкер-комиссию, спред и проскальзывание. Пример со свечными паттернами (−48% → −744%) показывает, зачем: издержки не «немного портят» результат, они меняют знак вселенной.

  4. Форвард-тест как единственный судья. Что бы ни показал бэктест, финальный вердикт выносит только живой рынок на данных, которых не существовало в момент постройки стратегии. Бэктест — это фильтр от заведомого мусора, не доказательство.

Забавная рекурсия: мульти-агентная система с общей памятью — модный AI-стек 2026 года — самым полезным своим выходом произвела вывод, который квантовая литература твердит лет двадцать. Но есть разница между «прочитал в книге» и «проверил своими руками на своих данных со своими издержками». Второе — выжигает иллюзии навсегда.

Что осталось после кладбища

Не пепел. Осталось три вещи:

Машина, убивающая ложные надежды за часы и доллары. Раньше проверка идеи «а что если торговать по фандингу» заняла бы у меня недели ручной возни и, скорее всего, закончилась бы самообманом. Теперь это конвейер: данные уже собраны, модель издержек написана, дефляция за перебор автоматическая. Гипотеза умирает за вечер и почти бесплатно. Я перестал носить в голове зоопарк «а вдруг сработает» — и это освобождает лучше любой медитации.

Понимание, где на самом деле рычаг ретейла. Не в сигнале. Сигнальную часть у вас всегда выиграют те, у кого данных больше, задержки меньше и математиков — этажами. Рычаг ретейла — размер позиции, контроль риска и выживание. Скучно? Да. Зато это единственные переменные, которые вы контролируете на 100% и которые не может арбитрировать никакой HFT.

Переносимая архитектура. Об этом — последняя глава.

Мораль. Двойная

Первая: мульти-агентные системы с общей RAG-памятью — это рабочая технология, доступная одному человеку. Не демо из твиттера, а система, которая месяцами автономно собирает, индексирует, перекрёстно проверяет и суммаризирует информацию за единицы долларов в месяц. Cron + Python + файловый lock + watchdog покрывают 95% того, для чего продают тяжёлые оркестраторы. Ценность — не в отдельном агенте, а в замкнутом контуре: агенты пишут в общую память, оркестратор читает всех и пишет выводы обратно, и система наращивает контекст, который не влезет ни в один промпт.

Вторая: в трейдинге ретейлу на сигнальном поле ловить нечего — и это доказуемо своими руками. Если вы читаете это и думаете «а соберу-ка я трейдинг-бота» — соберите. Серьёзно. Только договоритесь с собой заранее: Deflated Sharpe, out-of-sample, полные издержки, форвард-тест. С этими четырьмя фильтрами вы за пару месяцев получите либо настоящий edge (напишите мне, я хочу это видеть), либо — что вероятнее — прививку, которая сэкономит вам депозит и годы жизни. Мой самый ценный торговый инструмент не открыл ни одной сделки. Он закрыл двадцать иллюзий.

Куда это переносится

Отвяжите архитектуру от крипты — и останется универсальный каркас: общая граф-RAG-память + узкие агенты-сборщики + агент-критик + оркестратор с вшитым скепсисом. На него натягивается почти любая предметная область:

  • База знаний по документам компании — агенты индексируют документацию, переписку и регламенты в граф-RAG, сотрудники задают вопросы человеческим языком и получают ответы со ссылками на источники;

  • Мониторинг конкурентов — куратор новостей и скоринг источников работают для цен, релизов и вакансий конкурентов ровно так же, как работали для крипто-сигнальщиков;

  • Автоматическая отчётность — оркестратор, который еженедельно читает выходы всех систем и пишет человеческий бриф с противоречиями и аномалиями, нужен вообще любому бизнесу с больше чем одним источником данных.

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

А если вы всё-таки пришли сюда за граалем для трейдинга — перечитайте главную главу. Она и есть грааль, просто не тот, который вы искали.