BNF-trader · документ 2 из 2 · архитектура

Полностью агентский самообучающийся трейдер

Цифровая копия BNF: агентский мозг формирует и переписывает правила, детерминированный исполнитель ставит ордера. Автономная эволюция популяции трейдер-агентов.

2026-07-01 · синтез ресёрча файлы 00, 08, 09, 10, 11 · CONSTRAINTS Тимура · бюджет $2–3k · старт: Bybit Demo
ядро системы
6

слоёв агентов — полная автономия к этапу 7

Агентская архитектура реализована полностью. Мозг — LLM (LangGraph + Claude), он учится и переписывает правила. Исполнитель — детерминированный Python, он ставит ордера без LLM. Это не компромисс — это единственный способ сделать самообучение воспроизводимым.

Слоёв всего: 6
Агентских: 3
Детерм.: 3
Гейтов обучения: 4
Этапов roadmap: 8

TL;DR — 6 пунктов

Двухскоростная модель — почему детерминизм = условие обучения

┌──────────────────────────────────────────────────────────────┐ │ МЕДЛЕННЫЙ МОЗГ (LangGraph + Claude API) │ │ Такт: раз в 4 часа + триггер при деградации rolling Sharpe │ │ Делает: классифицирует режим · рефлексирует над журналом · │ │ предлагает изменения правил · валидирует бэктестом · │ │ эволюционирует популяцию · аллоцирует капитал │ │ НЕ делает: НИКОГДА не ставит ордер, не трогает биржу │ │ Выход: обновлённый rules/current.json (через git commit) │ └──────────────────────────────────────────────────────────────┘ │ пишет config (данные) ▼ ┌──────────────────────────────────────────────────────────────┐ │ БЫСТРЫЙ ИСПОЛНИТЕЛЬ (детерм. Python / NautilusTrader) │ │ Такт: каждый закрытый бар (H1 старт), <100 ms, БЕЗ LLM │ │ Делает: kairi/SMA/ATR · применяет правила из config · │ │ RiskGuard (hard limits) · ставит Limit PostOnly / │ │ Stop reduceOnly · пишет журнал │ │ Выход: сделки + запись в trades.db (сигнал для обучения) │ └──────────────────────────────────────────────────────────────┘

Единственный канал между мозгом и руками — файл правил (данные), не вызов функции в моменте.

Почему без детерминизма самообучение не работает

1. Чистый сигнал. Рефлексия извлекает урок из связки «условия → правило → исход». LLM в моменте разрывает эту связку: одинаковые kairi/volume/режим дают разные действия. Учить нечему.

2. Воспроизводимость. OOS-бэктест возможен только если стратегия детерминирована. Из 19 академических LLM-trading фреймворков 0 прошли полную воспроизводимость — именно из-за LLM в критическом пути.

3. Latency. LLM 500–2000 мс в hot-path несовместим с MR-входом: пока «думал» — спред ушёл, отскок начался.

Что детерминировано, что агентское

Обязано быть ДЕТЕРМИНИРОВАННЫМЖивёт в АГЕНТ-пространстве
Risk Guard / hard limits (leverage, daily-halt, exposure)Классификация режима (4 режима + confidence)
Постановка ордера (latency <100 мс)Предложение изменения параметров (валидируется кодом)
Управление стоп-лоссом и position sizingПост-трейд анализ (что было верно/неверно)
Account state (equity, позиции, open orders)Детекция аномалий — алерт Тимуру
Circuit breakers и аутентификация биржиДетекция деградации стратегии (Sharpe упал?)
Записи в журнал (audit trail)Аллокация капитала между вариантами по перформансу

6 слоёв агентов — схема потоков

РЫНОК (Bybit Demo / Alpaca Paper) │ OHLCV, volume, funding, OI ▼ ╔══════════ СЛОЙ 1 · ВОСПРИЯТИЕ / ДАННЫЕ (детерм.) ══════════╗ ║ WS public + REST → DuckDB. kairi, SMA, ATR, volume_ratio, ║ ║ funding, OI-delta. Ноль интерпретации — только числа. ║ ╚════════════════════════╤═══════════════════════════════════╝ features │ ┌──────────────────┼─────────────────────┐ ▼ (медленный такт) ▼ (быстрый такт) │ ╔═══ СЛОЙ 2 · АНАЛИТИК РЕЖИМА ════╗ режим + conf. ──► rules/regime.json ║ Детерм. baseline (ADX/Hurst) + ║ ║ LLM-агент поверх. 4 режима. ║ ╔═══ СЛОЙ 3 · ПОПУЛЯЦИЯ ТРЕЙДЕР-АГЕНТОВ ════╗ ║ ВЕТО: TREND → mr_disabled=true ║──►║ Характеры = параметры kairi. ║ ║ «нет торговли — тоже торговля» ║ ║ Proposal (медл., LLM) + Исполнение ║ ╚════════════════════════════════╝ ║ (быстро, детерм.). → ExecutionRequest. ║ ╚════════════════════╤═══════════════════╝ │ ExecutionRequest ╔══ СЛОЙ 4 · РИСК-НАДЗИРАТЕЛЬ (детерм.) ═╗ ║ BNF-дисциплина как КОД. hard limits, ║ ║ cooldown, daily-halt, DD-halt, sizing. ║ ║ ALLOW / LIMIT / BLOCK. Non-bypassable. ║ ╚════════════════════╤═══════════════════╝ │ ALLOW / LIMIT ┌────── ИСПОЛНЕНИЕ ──────┐ │ Exchange Adapter → биржа│ │ Journal Writer → trades.db│ └──────────────┬──────────┘ │ закрытые сделки ╔══ СЛОЙ 5 · РЕФЛЕКСИЯ / ОБУЧЕНИЕ (агент, медленно) ═════════╗ ║ Reflexion → ExpeL → SHARP atomic-edit → 4 гейта → git. ║ ║ Эволюция популяции (MadEvolve). Пишет semantic memory. ║ ╚══════════════════════════════╤════════════════════════════╝ │ обновлённые правила + перформанс ╔══ СЛОЙ 6 · ДИРИЖЁР / МЕТА (агент, медленно) ═══════════════╗ ║ Аллокация капитала по характерам (Contest). Кто заслужил ║ ║ долю депо, кого в paper-карантин. → rules/current.json. ║ ╚═══════════════════════════════════════════════════════════╝ ▲ (петля: правила слоёв 5/6 → config → слои 2,3,4)

Каждый слой подробно

1
Детерминированный
Восприятие / Данные
WS public + REST → DuckDB. Считает kairi = (close−SMA)/SMA×100, volume_ratio, ATR, funding, OI-delta. Ноль интерпретации — только арифметика. Read-only для всех LLM-слоёв.
2
Гибрид (детерм. baseline + LLM поверх)
Аналитик режима — критический фильтр
4 режима: RANGING / TREND_UP / TREND_DOWN / CRISIS + confidence. Детерм. baseline (ADX>25=тренд, Hurst<0.5=MR, vol-ratio>2=crisis). LLM поверх — нюанс и confidence. Fallback на baseline при confidence <0.6. ВЕТО: TREND_UP/DOWN → mr_disabled=true → слой 3 молчит.
3
Гибрид (proposal LLM + исполнение детерм.)
Популяция трейдер-агентов — ядро BNF
Характеры = наборы параметров kairi (агрессивный / консервативный / crisis-специалист). Исполнение быстро и детерм.: calculate_entry_signal(kairi, volume_ratio, funding, adx, regime) из EVOLVE-BLOCK. Proposal (LLM, Phase 3): Bull/Bear debate как conviction-фильтр на крупный вход. Выход → ExecutionRequest (не ордер!).
4
Детерминированный · агент-вето
Риск-Надзиратель — дисциплина BNF как код
ExecutionRequest → ALLOW / LIMIT / BLOCK. Hard limits из FROZEN_RULES (агент не трогает): MAX_LEVERAGE 3x · MAX_CONCURRENT_POS 2 · RISK_PER_TRADE 1–2% · DAILY_LOSS_BREAKER 4% → halt + Telegram · DD_FROM_PEAK 15% → halt · HARD_STOP_CAPITAL 30% → стоп проекта. Cooldown-лестница (no-revenge): 1 стоп → пропустить сигнал · 2 подряд → конец дня · 3 подряд → 72ч + ручной ревью.
5
Агентский · медленный
Рефлексия / Обучение — переписывает правила, эволюционирует
Стек методов: Reflexion (словесный постмортем по стопам) → ExpeL (сравнение провала с похожей победой через ChromaDB) → SHARP (atomic-edit одного правила ±20%, walk-forward гейт). Эволюция популяции: MadEvolve (MAP-Elites grid, parameter budget ≤15–20 констант). fitness = Sharpe + Max DD + Calmar одновременно (anti-reward-hacking).
6
Агентский · медленный
Дирижёр / Мета — аллокация капитала
Contest-паттерн: рынок сам отсекает слабых. Победитель по risk-adjusted P&L за окно получает больше депо, отстающий → меньше или paper-карантин. Не голосование — рыночная отсечка. Включается в Phase 7 (после ≥6 мес стабильного paper/live).

Learning loop — полный цикл

perceive → regime → propose → risk-veto → execute → reflect → rewrite → evolve L1 L2 L3 L4 → L5 L5 L5/L6

Быстрый такт каждый бар · детерм. · без LLM

Медленный такт раз в 4ч / после K сделок · LangGraph + LLM

Память — 3 слоя (FinMem-паттерн)

УровеньЧтоГдеКто пишет/читает
Working memoryпоследние ~20 сделок, позиции, балансSQLiteисполнитель / рефлексия
Episodic memoryкаждая сделка с полным контекстомSQLite trades.dbисполнитель пишет, L5 читает
Semantic memoryвыученные правила (JSON, версионированы) + инсайтыrules/*.json + ChromaDBL5 пишет, L2/L3/L5 читают
Strategic memoryвысокоуровневые паттерны («все kairi-сигналы в TREND ложные»)текст, раз в месяцL5 (Generative-Agents стиль)

«Трейдер сформировался» = semantic memory содержит стабильный набор правил, прошедших OOS и переживших смену режимов. BNF годами менял пороги вручную — у нас это автоматизировано как петля.

Как агент безопасно переписывает свои правила

┌── FROZEN_RULES (конституция BNF) ── агент НЕ трогает, только Тимур ──┐ │ no_revenge · no_fomo · no_trade_in_strong_trend │ │ max_leverage=3 · daily_breaker=4% · DD_halt=15% · quality>quantity │ ├── HARD LIMITS (hardcoded_limits.py) ── вне EVOLVE-BLOCK ────────────┤ │ ABSOLUTE_MAX_LEVERAGE · ABSOLUTE_DAILY_LOSS_HALT · ... │ ├── EVOLVE-BLOCK (мягкие параметры) ── агент правит под гейтами ──────┤ │ KAIRI_ENTRY_THRESHOLD · VOLUME_RATIO_MIN · COOLDOWN_BARS · │ │ SMA_WINDOW · EXIT_ON_PARTIAL · ... (макс 15–20 констант) │ └────────────────────────────────────────────────────────────────────┘

Версионирование через git

Каждое изменение правила = commit: rules: v1.5 | regime=RANGING | sharpe_ois=1.08 | kairi −22→−25 | 34 cases p=0.03. Даёт git log (история), git diff (что изменилось), git revert (откат за секунды). Никогда не delete — только deactivate.

4 гейта обучения (все обязательны)

ГейтУсловиеЕсли не прошёл
Гейт 0 · Статистикаn_similar ≥ 30, p < 0.05, эффект стабилен в 2+ периодах«недостаточно данных», правило не пишется
Гейт 1 · Atomic editодно правило за итерацию, ±≤20% от текущегодробить на несколько итераций
Гейт 2 · OOS бэктестheld-out 60 дней, Sharpe(new) ≥ Sharpe(old)×0.9, net после комиссийоткат предложения
Гейт 3 · Human-in-loopTelegram Тимуру (было/стало/почему/OOS-метрики). Нет ответа 24ч → не применяетсяfail-safe: не применяется
Гейт 4 · Мониторинг2 недели после — rolling Sharpe не упал >15%автооткат через git revert

Защита от известных ловушек самообучения

ЛовушкаЗащита
Переобучение на шуме (рынок ≈ random walk)Гейт 0: n≥30 + p<0.05 + воспроизводимость в 2 периодах. Deflated Sharpe
Reward hacking (оптимизация 1 метрики)fitness = Sharpe + Max DD + Calmar одновременно (constraints, не weights)
Catastrophic forgetting (смена режима)Deactivate не delete. Режим-тегирование правил. Memory replay
Semantic drift (10 итераций → расплывчатость)JSON structured rules, не текст. Temporal decay. Consistency-check
Lucky trade (случайный pump как правило)Гейт 0 + paper-параллель нового правила 2 недели до применения
Полная автономия при $2–3kHuman-in-loop не опционален на старте (Гейт 3). Read-only Phase 5 перед write-enabled Phase 6

Технический стек

КомпонентВыборПочему
Оркестрация (мозг)LangGraph ≥1.0.10нативный checkpointing SQLite, условные рёбра, нативный slow/fast split. AutoGen мёртв с late-2025; CrewAI без state-persistence
Исполнитель + бэктестNautilusTrader + VectorBTNautilus: research→live один код, Rust-ядро, Bybit-адаптер. VectorBT: 1M симуляций/сек для sweep
Демо-адаптерBybit Demo (demo=True)реальные данные, нет реальных денег. Market-agnostic: AlpacaPaperAdapter под акции без переписывания ядра
ПамятьSQLite + ChromaDB embedded + gitpip install без Docker, до ~100K сделок хватит. Qdrant — только Phase 6+ при >100K
LLM мозгаClaude (sonnet)медленный контур, не hot-path. Быстрые модели для рутинной классификации, тяжёлые — только решения об изменении правил
Human-in-looppython-telegram-botГейт 3, алерты, кнопки апрува

Minimum-viable-code по фазам

Phase 1–4 (обязательно): pybit + pandas/numpy + nautilus_trader + langgraph + langgraph-checkpoint-sqlite + sqlite3 + schedule.

Phase 5–6 добавляет: chromadb + anthropic + python-telegram-bot.

НЕ строить сразу: Qdrant, multi-exchange routing, real-time dashboard, свой message bus. Минимум кода под задачу, никаких «на будущее».

Roadmap — 8 этапов (edge-гейт ДО завода)

Этап 0
Доступ
Bybit Demo API-ключ (demo=True), тестовый kline. Гейт: живой ключ, kline проходит. KYC — забить (решение Тимура).
Этап 1
Данные + харнесс
Backfill Bybit kline → DuckDB. NautilusTrader harness с реальными комиссиями (maker 0.02% / taker 0.055%) + slippage + walk-forward + Deflated Sharpe + no-lookahead. Гейт: harness прогоняет buy-and-hold, цифры сходятся с реальностью.
Этап 2
Сигнал + первый бэктест
ГЛАВНЫЙ ГЕЙТ
Слой 1 (фичи) + Слой 2 baseline-режим + Слой 3 kairi-логика. Узкий universe mid-cap. Walk-forward sweep. ГЕЙТ: OOS Sharpe ≥ 0.8 net, Max DD ≤ 20% на ≥3 режимах. Если <0.5 — СТОП, пересмотр TF/universe. Всё дальнейшее строится только если edge есть.
Этап 3
Риск + дисциплина
Слой 4 Риск-Надзиратель: hard limits, cooldown-лестница, daily/DD-breaker, ATR-sizing, RiskGuard validate_order. Гейт: unit-тесты на каждое правило — cooldown блокирует revenge, breaker halt'ит, sizing не превышает лимит.
Этап 4
Исполнение + paper
pybit Limit PostOnly + Stop reduceOnly, async WS fills, Journal Writer, Telegram. Прогон на Bybit Demo ($2500 виртуальный баланс) ≥4 недели. Гейт: расхождение paper vs backtest <30% по Sharpe/DD; ноль технических сбоев.
Этап 5
Один трейдер-агент + рефлексия read-only
Слой 5 read-only: LangGraph медленный цикл, Reflexion+ExpeL читают журнал, предлагают правила в pending — но НЕ применяют. Тимур читает, применяет вручную. Гейт: накоплено ≥200 сделок; semantic memory наполняется. НЕ переходить в write-enabled раньше.
Этап 6
Write-enabled самообучение
ГЕЙТ АГЕНТНОСТИ
Полный цикл §4 с 4 гейтами. SHARP atomic-edits ≤1/неделю. git-версионирование. Мониторинг деградации. ГЕЙТ: LLM-слой реально улучшает OOS-метрику vs baseline. Если нет — слой не нужен.
Этап 7
Популяция + эволюция + мета
Слой 3 популяция характеров. Слой 5 MadEvolve-турнир. Слой 6 Contest-аллокация. Только после 6 мес стабильного paper/live. Финал = полная автономия.

Честные риски агентского подхода

РискСутьМитигация
Latency LLM в hot-path500–2000 мс убивает MR-входАрхитектурно исключён: LLM только в медленном контуре
Стоимость LLM 24/719 агентов × 100 сигналов/день = дорого; крипта 24/7Медленный такт (раз в 4ч). Быстрые модели для рутины. На старте 1 агент
Самообман эволюции (главный)Агент выучивает шум/удачу; reward hacking; semantic drift; catastrophic forgetting4 гейта · fitness из 3 метрик · JSON-правила · версионирование-не-delete · стоп-условие «10 отклонённых за 3 мес»
Невоспроизводимость0 из 19 академических фреймворков воспроизводимыДетерм. исполнение + temporal split + embargo + OOS-гейт
Lookahead bias через LLM trainingLLM «помнит» исторические результатыLLM не в исполнении. Валидация только на данных после cutoff
Режимо-зависимость MR (killer)Бот покупает падение, которое не остановитсяСлой 2 ВЕТО: TREND → mr_disabled. Circuit breaker + rolling-Sharpe alert
Overtrading от «умного» агентаАгент рационализирует лишние входыДетерм. quality-gate (пропускать ≥60%) + MAX_TRADES_PER_DAY в слое 4

Сквозной принцип защиты

Каждый агентский риск замыкается на детерминированный слой, который агент не может обойти. Промпт-инжекция, галлюцинация, дрейф, reward hacking — всё упирается в RiskGuard и FROZEN_RULES, которые физически вне досягаемости LLM. Агентская гибкость — только в пределах недвижимого детерминированного каркаса.

Честные оговорки

Система описана на уровне архитектуры. Ни один из 8 этапов ещё не реализован — это блюпринт, не работающий код. Архитектура строится снизу вверх, и каждый следующий этап зависит от прохождения предыдущего гейта.

Главный гейт — Этап 2. Edge-тестирование может показать, что метод kairi + MR после реальных комиссий (0.02%/0.055%) не даёт OOS Sharpe ≥0.8. В этом случае весь агентский слой строить не имеет смысла.

Бюджет $2–3k накладывает жёсткие ограничения: малое число сделок замедляет статистическую значимость → Гейт 0 (n≥30) набирается медленнее. Популяция характеров и эволюция (Этап 7) реалистичны только после 6+ мес live-данных.

Академические фреймворки (TiMi, OpenClaw, SHARP, MadEvolve) описаны в ресёрче — реальное поведение на крипто-рынке 2026 может отличаться от заявленных показателей.

BNF-trader · Агентская архитектура · 2026-07-01
Источники: TiMi arxiv 2510.04787 · OpenClaw 2603.10092 · FinMem 2311.13743 · FinCon 2407.06567 · TradingAgents 2412.20138 · ContestTrade 2508.00554 · SHARP · MadEvolve · CONSTRAINTS Тимура
← Документ 1: Разбор трейдера и блюпринт