ETH-Агент

Біблія проєкту

15.10.2026 · @Артем · замінює редакцію від 14.10.2026

Що змінилось у редакції 2: розділи переписано за фактичним кодом v2.02 (декомпіляція) і за результатами бектестів на реальних даних 2023–2026. Основний профіль стратегії — денний (ATR 1d). Етап «паритет з v2.02» прибрано: налаштувань і журналів v2.02 не збереглося. Додано ліміт сукупного ризику, критерії порівняння з утриманням ETH, запуск перевірок з телефону. Журнал усіх прогонів — docs/backtest_log.md і документ «Журнал бектестів» у проєкті.


1. Призначення і межі

ETH-Агент — автономний спотовий агент для пари ETHUSDT на Binance. В основі — логіка «точок дії» з CryptoBot v2.02, переведена в одиниці волатильності (ATR) і доповнена стопами та ризик-модулем. Claude — аналітик і наставник, не трейдер. Цей документ — єдине джерело правди: код, промти й параметри будуються від нього. Копія живе в репозиторії (docs/BIBLE.md), зміни — через коміт.

Розподіл ролей. Детермінований код торгує. Claude аналізує, пояснює і пропонує зміни параметрів у затверджених межах. Командир затверджує все, що збільшує ризик.

Агент завжди: - торгує тільки спот, без плеча, ф'ючерсів і позик; - спочатку проходить бектест, walk-forward і paper, потім live; - записує в журнал кожне рішення, ордер, відмову і причину; - зупиняється сам, коли спрацьовує будь-який запобіжник із розділу 5; - бере API-ключі лише з «Налаштувань» веб-панелі й зберігає їх зашифровано на своїй машині, поза GitHub.

Агент ніколи: - не дає Claude права створювати ордери; - не змінює параметри live поза коридором розділу 8 без затвердження; - не використовує ключ із правом виведення коштів (тільки Spot Trading + Read, прив'язка до IP); - не відновлює торгівлю після kill switch без ручної команди.

Чесна межа очікувань. Жоден бектест і жоден LLM не гарантують прибутку. Станом на 15.10.2026 перевага знайдена лише на денному таймфреймі й на малій вибірці (≈ 45 угод за 3 роки). Мета агента — дисципліноване виконання, вимірюваний результат і швидке відключення того, що не працює.

Безпека. Ключ Binance, вшитий у ApiController2_01 збірки v2.02, вважається скомпрометованим і має бути відкликаний. Для проб — Binance Spot Testnet як окремий профіль ключів.

2. Архітектура

Два контури. Торговий працює на кожному тіку ціни й не залежить від Claude: дані → ознаки → стратегія → ризик (вето) → виконання → журнал. Контур навчання працює днями й тижнями: журнал → розбір Claude → гіпотеза → бектест → walk-forward → shadow → затвердження. У стратегію повертаються лише перевірені параметри.

Стратегія й ризик — чисті функції без вводу/виводу. Той самий код працює в backtest, paper, shadow і live. Claude читає журнал і ніколи не звертається до виконання напряму.

Код: agent/{data, features, strategy, risk, backtest, learning, execution, journal, analyst, cli}.

3. Ядро стратегії: точки дії

3.1 Як працювала v2.02 (за декомпіляцією)

Базова версія legacy_v2 відтворює v2.02 дослівно і слугує базовою лінією. Головні факти: - Масив із N ботів, рівень бота i = база × (1 + i × крок %). У кожного бота одна точка купівлі й одна точка продажу. - Точка має базу B і чотири рівні: limitUp, actionUp, actionBot, limitBot (у % від B). - Трейлінг. Ціна оновлювалась раз на секунду, а цикл рішень — 50 разів на секунду. База зсувалась на limitBotP/1000 за кадр доти, доки limitBot не опинявся під ціною. Фактично limitBot «прилипав» до мінімуму (а limitUp при продажу — до максимуму). - Купівля: ціна ≤ limitBot — точка зведена; повернення ціни у вікно [actionBot; actionUp] — купівля на весь бюджет бота; ціна ≥ limitUp до купівлі — розряджання. - Продаж прив'язаний до рівня сітки, а не до ціни входу. Без стопів бот ніколи не продавав нижче свого рівня. - isSellOnAnyLevel не є стоп-лоссом: він лише знижує ціль продажу приблизно до ціни входу. - Усі боти вище ціни купували на одному відскоку, бо точки всіх ботів трейлили до того самого мінімуму. Сітка розносила лише продажі. - Кожне перемикання фільтра перестворювало весь масив ботів і стирало зведені точки.

Результат legacy_v2 за 2025-10…2026-09: −34,1 % (утримання ETH −35,2 %), 100 % виграшних закритих угод, 5 із 5 позицій застрягли, просадка −64,6 %.

3.2 Стратегія v3 (основна)

Уся логіка — чиста функція step(state, tick, features, params) → (state, intents); виконання повертається через on_fill / on_reject.

Рухома сітка. Рівень бота i = anchor_high − i × interval_atr × ATR, де anchor_high — максимум ціни за anchor_h годин. Сітка рухається з ринком і не «відривається» від нього.

Купівля (бот FLAT). 1. Ціна ≤ рівень + limit_bot × ATR — точка зведена. Бот i зводиться лише після падіння на (|limit_bot| + i × interval_atr) ATR від максимуму, тому входи рознесені. 2. Трейлінг за екстремумом: B = мінімум від зведення − limit_bot × ATR. 3. Ціна ≥ B + limit_up × ATR — розряджання (відскок без нас). 4. Ціна у вікні [B + action_bot × ATR; B + action_up × ATR] і гейти розділу 4 відкриті — намір КУПИТИ, бот переходить у PENDING_BUY.

Розмір позиції. qty = min(бюджет бота / ціна, капітал × ризик_на_угоду / (вхід − стоп)), округлення за stepSize, перевірка minNotional.

Вихід (бот LONG), перший спрацьований: - стоп: ціна ≤ вхід − k_stop × ATR; - часовий стоп: у позиції ≥ max_hold_h; - тейк з трейлінгом: зведення при ціні ≥ max(вхід + sell.limit_up × ATR, вхід × (1 + 2 × комісія + min_edge)); вихід, коли ціна відкотилась до max(максимум − (sell.limit_up − sell.action_up) × ATR, вхід × (1 + 2 × комісія + min_edge)).

PENDING. Між наміром і виконанням бот у стані PENDING і не створює другий намір.

3.3 Профіль «денний» (за замовчуванням)

Параметр Значення Звідки
ATR 1d, 14 walk-forward №2: 1h і 4h переваги не мають
Стоп 2 ATR найкращий серед 1d-варіантів
Вихід E2 зведення +2 ATR, відкат 1,5 ATR найкращий серед 1d-варіантів
Купівля limit_up 1, limit_bot −1, вікно [0,1; 0,4] ATR без змін
interval_atr 1,0 без змін
max_hold_h 72 без змін; гіпотеза 168 год у сітці daily
Фільтри тренд −3 %/24 год, ATR 0,3…4 % перевірено разом із профілем

Фактичний механізм (контрольний бектест 2023-10…2026-09, 52 угоди): 47 угод закрилось за часом (72 год), 4 — тейком, 1 — стопом. Перевагу дає не трейлінг-вихід, а «купити відскок після падіння на ≥ 1 денний ATR від максимуму і тримати 3 доби». Тому результат майже не залежить від стопу й виходу. Фільтр ATR ≤ 4 % — суттєва частина стратегії: більшість часу він забороняє входи, агент у ринку ≈ 10 % часу. Обидва факти — гіпотези в сітці daily (max_hold 168 год, atr_max 15 %).

2023-10…2026-09 Денний профіль, ризик 0,5 % ризик 1 % ризик 2 % Просто тримати ETH
Результат +5,3 % +10,2 % +11,1 % +60,8 %
Річна дохідність 1,8 % 3,3 % 3,6 % —
Макс. просадка 2,4 % 4,2 % 5,0 % 69,5 %
Sharpe 0,72 0,73 0,64 0,55
PF / угод 2,06 / 52 1,98 / 52 1,71 / 51 —
Час у ринку 10,5 % 10,5 % 10,5 % 100 %

4. Фільтри режиму ринку

Фільтри лише дозволяють або забороняють входи; виходи вони не блокують ніколи.

Ознака Гейт входу Стан
Нахил EMA200 (1h) за 24 год заборона при падінні сильніше trend_block_pct у v3
ATR / ціна у межах [atr_min; atr_max] у v3
Режим від Claude regime ≠ RISK_OFF етап 7
Календар макроподій (FOMC, CPI) без входів N год до / після події перевірено на 7 роках, відхилено — падіння навколо подій не глибші, ніж у звичайні дні; код лишається вимкненим (event_before_h: null)
Режим від ШІ-аналітика (7.5) CAUTION → ½ розміру, RISK_OFF → без входів auto — застосовується сам (лише зменшує ризик); переводиться в shadow, якщо ai-review не покаже користі
RSI, відносний об'єм, позиція в діапазоні, Bull/Bear, дисбаланс стакану — з v2.02; повернуться лише якщо walk-forward покаже користь

Правила: - Ознаки рахуються лише на закритих свічках. У v2.02 RSI і об'єм брались із незакритої свічки — це прибрано. Тест на відсутність look-ahead обов'язковий. - Застарілі дані (> stale_after) блокують нові входи, але не стопи. - Новий фільтр вмикається лише після того, як покращив результат на out-of-sample (розділ 8).

5. Ризик-менеджмент і запобіжники

Модуль Risk має право вето на входи й не залежить від Claude. Виходи (стоп, тейк, часовий стоп) не блокуються ніколи.

Запобіжник Старт Дія
Ризик на угоду 0,5 % капіталу розмір позиції
Сукупний відкритий ризик (Σ (ціна − стоп) × qty) 2 % капіталу нові входи блокуються
Макс. частка капіталу в ETH 60 % нові входи блокуються
Денний збиток −2 % пауза входів до кінця доби UTC
Просадка від піку equity −10 % kill switch, ручний рестарт
Збиткових угод поспіль 5 пауза 4 год + розбір Claude
Ордерів за годину 20 пауза 1 год + тривога
Рух ціни за 1 хв > 3 % пауза 15 хв
Спред bid/ask > 0,1 % входи блокуються
Розбіжність балансу агент ↔ біржа > 0,5 % kill switch, звірка
Втрата зв'язку / застарілі дані > 60 с входи блокуються

Стоп ставиться на біржі як STOP_LOSS_LIMIT одразу після входу, з буфером лімітної ціни. Якщо ціна пройшла стоп, а ордер не виконаний, агент закриває позицію за ринком.

Kill switch: автоматично, файлом STOP або командою в Telegram. Скасовує лімітні ордери на вхід, залишає стопи, не продає за ринком без команди STOP FLATTEN.

Відкрите рішення Командира — розмір ризику на угоду. На денному профілі при 0,5 % позиції малі, і капітал ≈ 90 % часу лежить у USDT. Бектест (розділ 3.3): 1 % подвоює дохідність (+10,2 % за 3 роки) при просадці 4,2 %; 2 % майже нічого не додає, бо розмір упирається в бюджет бота (budget_usdt_per_bot), а не в ризик. Будь-яке значення понад 0,5 % — лише рішенням Командира, разом із max_open_risk_pct.

6. Виконання ордерів

Кожен ордер іде через стан-машину з унікальним clientOrderId: NEW → SENT → FILLED | PARTIAL | REJECTED | UNKNOWN. UNKNOWN (тайм-аут) завжди закінчується запитом статусу за origClientOrderId, а не повторною відправкою.

Вада v2.02 (підтверджено декомпіляцією) Рішення
buyWas ставиться після відповіді біржі; перестворення масиву під час запиту дає подвійну купівлю PENDING до відправки + ідемпотентний clientOrderId
Друге спрацювання продажу продає currentBtc вдруге, тобто чужий ETH облік балансу кожного бота + звірка з біржею
float.Parse(x.Replace(".", ",")) працює лише з комою як десятковим роздільником Decimal, розбір незалежний від локалі
MARKET BUY на кількість, а не на суму — бюджет перевищується quoteOrderQty або LIMIT з розрахованою кількістю
Ціна угоди — з першого fill середньозважена ціна всіх fills
Таймаут або часткове виконання вважаються «угоди не було» обов'язковий запит статусу, часткове виконання враховується
Після рестарту бот з ETH стартує як FLAT (ціна ще 0) reconcile з біржею до першого рішення
Комісія завжди віднімається з ETH облік фактичної комісії з відповіді біржі
async void ковтає помилки винятки → журнал + стан ERROR + сповіщення
REST-опитування ціни раз на секунду WebSocket @bookTicker, @kline_1m, user data stream; REST лише для звірки
recvWindow = 25000 5000 + синхронізація часу
Paper за останньою ціною без прослизання paper за bid/ask + прослизання + комісія

Доповнення (жовтень 2026, v0.10): - Комісія в BNB. Якщо в Binance увімкнено «оплату комісії в BNB», комісія 0,075 % замість 0,1 %. Агент перевіряє це перед live, повідомляє, якщо вимкнено або BNB закінчився, і враховує вартість BNB у PnL угоди. Налаштування акаунта агент не змінює. - LIMIT_MAKER замість MARKET — відхилено. На VIP 0 комісія мейкера дорівнює комісії тейкера (0,1 %), спред ETHUSDT ≈ 0,0004 %, а ордери агента малі, тож виграшу немає, натомість зростає ризик пропустити вхід. Повернутися до питання — з рівнем VIP ≥ 1 або капіталом від кількох тисяч $. - Відсотки на вільні USDT (Simple Earn, гнучкий депозит) — лише live, за замовчуванням вимкнено, вмикає Командир у панелі. У депозит іде лише USDT агента мінус резерв (20 %). Перед купівлею потрібна сума повертається на спот. Агент веде власний облік і не забирає більше, ніж сам поклав. Якщо API відмовляє, функція вимикається з одним сповіщенням, торгівля триває.

Денний профіль торгує рідко (≈ 1–2 угоди на місяць на масив), тому вхід — LIMIT біля краю стакану з тайм-аутом; ринковий ордер — лише для стопу, що не виконався.

Звірка (reconcile): раз на 5 хв і після кожного рестарту. При розбіжності правда за біржею, агент зупиняється до розбору.

7. Аналітичний шар Claude

Claude отримує стислий пакет даних, повертає валідний JSON за схемою, доступу до біржі не має. Якщо API недоступний, агент працює з останнім валідним режимом; через 24 год без звіту — NEUTRAL.

Задача Коли Вихід
Огляд ринку (режим) раз на добу після закриття денної свічки + при русі > 5 % за 4 год regime_report
Пост-мортем угоди після кожної закритої угоди trade_review
Тижневий розбір неділя 20:00 за Києвом weekly_report + param_proposal
Позачерговий розбір 5 збитків поспіль, денний ліміт, kill switch incident_report

Промти 7.1–7.4 редакції 1 залишаються без змін, з двома уточненнями: - у пакет «Огляд ринку» додаються денні свічки (1d × 60) і ATR(1d); - мала вибірка — до 30 угод. На денному профілі це місяці роботи, тому до цього порогу Claude не пропонує змін параметрів, а лише фіксує уроки.

7.5 ШІ-аналітик: новини, події, контроль позицій (рішення Командира 2026-10-15: режим auto)

Коли: раз на 12 год + позачергово при русі ціни ≥ 5 % за 4 год або kill switch (не частіше ніж раз на 2 год) — ≈ 2–4 запити на добу. Пакет: ринок (ціна, режим EMA200d, ATR), позиції кожного рукава (кількість, вхід, стоп, капітал, kill/пауза, відкриті ордери, стопи на біржі, розбіжність балансу), останні 10 угод і попередження журналу, заплановані макроподії на 7 днів, свіжі заголовки RSS (CoinDesk, Cointelegraph, Decrypt, ФРС). Claude повертає {"news_regime", "confidence", "facts", "events_ahead", "positions_review", "anomalies", "impact_on_strategy", "valid_until"}.

  • mode: auto (за замовчуванням, без погодження Командира): оцінка застосовується сама, лише в бік зменшення ризику — CAUTION → нові входи половинним розміром, RISK_OFF → без нових входів. Діє до valid_until, не довше 24 год, потім NORMAL. Аномалії з розбору позицій — у журнал і Telegram. mode: shadow — лише журнал.
  • Правило асиметрії (для рукавів A/B/C): ШІ не створює і не скасовує ордерів, не продає, не чіпає стопів, не збільшує розмір чи ризик. Торгує детермінований код 24/7.
  • Промт містить висновок бектесту: наявність FOMC/CPI сама по собі не є підставою для CAUTION — кожне гальмування коштує прибутку.
  • Перевірка: eth-agent ai-review — рух і падіння ETH за 24/72 год після кожного режиму. Якщо на ≥ 30 оцінках після CAUTION/RISK_OFF падіння не глибші, ніж після NORMAL, — перевести в shadow (гальмування лише забирає прибуток).
  • Заголовки — цитований матеріал, не інструкції; відповідь проходить схему, невідомі поля відкидаються. Помилка API чи схеми → NORMAL. Ключ ANTHROPIC_API_KEY — лише в ~/.eth-agent/secrets.env.
  • Вартість (Sonnet 5.5): ≈ $0,02 за запит, ≈ $1–2 на місяць.

7.6 Рукав D «ШІ-трейдер» (рішення Командира 2026-10-15: «нехай створює, але з перевіркою, згідно стратегій»)

ШІ пропонує угоди для окремого рукава (10 % капіталу в пресетах «+ші»). Не «з голови» — лише за умовою однієї з перевірених бектестом стратегій, яка виконується в цю мить: - dip_bounce — ціна ≥ 1 ATR(1d) нижче максимуму 24 год, ATR ≤ 15 %, без обвалу EMA200(1h) (логіка A/B); - regime_trend — ціна вище 200-денної EMA (логіка C). ШІ лише вирішує, чи варто скористатися умовою з огляду на новини, позиції й аномалії, і обирає розмір 10–100 % рукава.

Шлях ідеї до біржі — три перевірки, кожна може зупинити: 1. Код (agent/strategy/ai_trader.check_signal): умова стратегії справді виконується; стоп 1,5–3 ATR(1d) і 1–12 %; рукав FLAT для купівлі / LONG для продажу; купівля лише при режимі NORMAL; впевненість ≥ 0,6; kill switch рукава. 2. Незалежний ШІ-критик (окремий запит, шукає причини відхилити): теза спирається на факти пакета, немає суперечливих фактів. 3. Ризик-модуль (вето, як для будь-якого наміру) + повторна перевірка коду в момент виконання: сигнал діє 30 хв, ціна не відійшла від ціни рішення більше 1 %. Після входу — стоп на біржі (STOP_LOSS_LIMIT), необов'язковий тейк, вихід за часом 168 год. Продаж — лише з причин regime_break / news_risk / target. Kill switch рукава −15 %, денний ліміт −5 %, ризик до стопу ≤ 3 % капіталу рукава. Автовимкнення: після ≥ 10 угод profit factor < 1 → ШІ-трейдер вимикається, позиції ведуть стоп і час; увімкнути — лише Командир. Бектесту рукав D не має (модель «знає» історію), тому перевіряється лише вперед: paper/testnet і журнал (kind = ai_trade).

8. Цикл навчання

Агент навчається на рівні параметрів і фільтрів, а не самопереписуванням коду.

  1. Журнал — кожне рішення, відхилений сигнал із причиною, угода з ознаками на вході й виході.
  2. Розбір Claude — урок у базу знань з тегами й лічильником підтверджень.
  3. Гіпотеза — повторювані уроки (≥ 3) → не більше 2 пропозицій змін у межах bounds.
  4. Бектест — той самий step() на історії 1m Binance, з комісією 0,1 % і прослизанням 0,05 %.
  5. Walk-forward (eth-agent walkforward, workflow walkforward). Для денного профілю: навчання 12 міс → перевірка 3 міс зі зсувом 3 міс, мінімум 5 угод у вікні навчання. Пропозиція проходить, якщо на out-of-sample: PF не гірший за базовий, макс. просадка не більша ніж на 10 %, покращення щонайменше у 2/3 вікон, угод ≥ 30.
  6. Shadow — 14 днів у paper паралельно з live (для денного профілю 7 днів замало).
  7. Затвердження — зміна в межах ±10 % і всередині bounds автоматично; більша зміна, новий фільтр або збільшення ризику — тільки «так» від Командира.
  8. Версіонування й відкат — params_vN з посиланням на звіт; якщо live після 30 угод гірший за нижню межу очікуваного — автовідкат.

Захист від самообману: - не більше однієї застосованої зміни на місяць; - звіт завжди показує кількість перевірених варіантів; таблиця «усі варіанти за весь період» позначена як IN-SAMPLE і для вибору не використовується; - сітки гіпотез фіксуються в коді (agent/learning/walkforward.py) до запуску, а не підбираються під результат; - розмір ризику не підбирається автоматично.

9. Режими і етапи запуску

Режим задається полем mode у конфігу: backtest | paper | shadow | live.

Етап Режим Капітал Тривалість Умова переходу далі
0. Базова лінія backtest — — ✅ legacy_v2 відтворює логіку v2.02; результат у журналі
1. Бектест v3 backtest — історія 2019-01…сьогодні (≈ 7 років) PF > 1,2 після комісій; макс. просадка < 15 %; ≥ 100 угод; walk-forward пройдено; результат з поправкою на ризик (Sharpe) не гірший за утримання ETH
2. Paper paper віртуальний 30 днів 0 аварій, усі угоди звірено, поведінка відповідає бектесту
3. Live-міні live 5 % від цільового 90 днів реальне прослизання ≈ модельному, звірки чисті
4. Live-база live 25 % 180 днів стабільна робота, жодного kill switch з вини агента
5. Повний live + shadow 100 % постійно —

Тривалості збільшено, бо денний профіль робить ≈ 1–2 угоди на місяць на масив. Будь-який kill switch з вини агента повертає на етап 2. Капітал для live — лише такий, втрату якого Командир приймає повністю.

Стан на 15.10.2026: етап 1 не пройдено. На 3 роках денний профіль: PF 2,06, просадка 2,4 %, Sharpe 0,72 проти 0,55 у «просто тримати» — але лише 52 угоди (потрібно ≥ 100). Наступний крок — 7 років історії.

Рішення Командира 2026-10-15: реальний тест (live) на 20 $ розпочато до завершення 14 днів paper. Умови в коді: підтвердження словом LIVE у панелі; окремі live-ключі (BINANCE_LIVE_API_KEY/SECRET); жорстка межа капіталу агента live.max_capital_usdt (20 $) — агент торгує лише цим бюджетом, решту рахунку не чіпає; склад — той самий портфель («повна версія») або live.preset. Ключ із правом виведення допускається (рішення Командира) з попередженням у журнал і Telegram; захист — IP-обмеження ключа. Перед стартом агент пише, які рукави на цій сумі не зможуть торгувати (мінімальний ордер Binance 5 $).

10. Формати даних

10.1 Конфіг

Актуальний приклад — config.example.yaml у репозиторії; робочий config.yaml у git не потрапляє. Секції: agent, legacy (параметри v2.02), v3, features, risk, backtest. Будь-який параметр можна перевизначити ключем --set секція.параметр=значення.

Коридори для пропозицій Claude (bounds):

Параметр Коридор
v3.k_stop_atr [1,5; 4]
v3.sell.limit_up [1,5; 4]
v3.max_hold_h [48; 336]
v3.filters.trend_block_pct [−5; −1]
v3.risk_per_trade_pct [0,25; 0,5] — збільшення лише вручну

10.2 Журнал (SQLite)

Без змін від редакції 1: ticks_decisions, orders, trades, lessons, proposals, reports. До trades додається поле exit_reason (take | stop | time).

10.3 Схеми відповідей Claude

Без змін від редакції 1 (regime_report, trade_review, weekly_report, param_proposal). Пропозиція поза bounds відхиляється автоматично й логується.

11. Стан побудови і чек-лист

Етап Що Стан
1 Завантажувач 1m-історії (data.binance.vision, денні архіви, REST), фільтри exchangeInfo ✅
2 strategy: legacy_v2 і v3, тести на кожен перехід ✅
3 features на закритих свічках, тест look-ahead ✅
4 risk з правом вето, тест на кожен запобіжник ✅
5 бектест (комісія, прослизання, PnL, PF, Sharpe, CAGR, DD, час у ринку), walk-forward ✅
6 execution: стан-машина, clientOrderId, reconcile, paper і testnet; тест подвійного сигналу; запуск на телефоні (Termux) ✅
7 journal + analyst (промти розділу 7, валідація схем, фолбек без API) ⏳
8 learning: конвеєр розділу 8, params_vN, автовідкат частково (walk-forward)
9 cli + Telegram: status, pause, STOP, STOP FLATTEN, approve, щоденний звіт частково (cli; Telegram: /status /trades /stop /flatten /resume)
10 платформа: GitHub, Actions, Docker amd64/arm64, веб-панель, оновлення частково

Заборони: ключі в коді; float для грошей; ордери від імені LLM; маржа й ф'ючерси; зміна параметрів live поза bounds без approve.

Чек-лист приймання: - ✅ Повна декомпіляція v2.02 у C# для довідки - ✅ Базова лінія legacy_v2 (паритет неможливий — даних v2.02 немає) - ☐ Ключ із ApiController2_01 відкликано на Binance - ☐ Бектест v3 на 7 роках і walk-forward пройдено (розділ 9, етап 1) - ☐ Рішення Командира щодо ризику на угоду - ✅ Тест на подвійний ордер зелений (етап 6) - ☐ Усі запобіжники розділу 5 перевірено вручну (файл STOP, Telegram) - ☐ Claude повертає валідний JSON у 20/20 прогонів; агент працює без API - ☐ 30 днів paper без аварій - ☐ Ключі вводяться через «Налаштування»; власний ключ без права виведення - ☐ Рішення про суму live-капіталу прийнято Командиром

12. Платформа

Приватний репозиторій github.com/artemiy-snet/eth-agent. Перевірки й дослідження запускаються з телефону через GitHub Actions:

Workflow Що робить Звіт
ci тести + сканер секретів gitleaks на кожен push статус коміту
backtest бектест v3 або legacy_v2 за період, параметри з форми таблиця в Summary запуску
walkforward сітка гіпотез, вікна навчання/перевірки, вердикт за критеріями розділу 8–9 таблиця в Summary запуску

Запуск: github.com/artemiy-snet/eth-agent/actions → вибрати workflow → Run workflow.

Подальше (етап 10), без змін від редакції 1: Docker-образ amd64/arm64 у GHCR, запуск docker compose up -d на будь-якій машині, веб-панель FastAPI (PWA) зі сторінками Огляд · Боти · Угоди · Звіти Claude · Пропозиції · Бектест · Налаштування · Оновлення; доступ через Tailscale або Cloudflare Tunnel; вхід паролем + TOTP; ключі в «Налаштуваннях», шифрування Fernet у /data/secrets.enc; оновлення з GitHub з очікуванням закриття PENDING, reconcile після старту й автовідкатом, якщо нова версія не стартувала за 2 хв.

Рішення Командира 2026-10-23 — друга пара SOL. Бектест (docs/backtest_log.md, 2021-01 і 2022-01…2026-09): режимне утримання на SOL — 37 % річних проти 18 % на ETH (2022+), просадка 49 % проти 38 %; відскок на SOL — без переваги. Реалізація: рукав Cs (стратегія C на SOLUSDT), додається автоматично (portfolio.sol.auto), коли капітал агента ≥ portfolio.sol.min_capital_usdt (100 $), забираючи половину частки C/Cm. Окремий брокер і фільтри пари, той самий рахунок, звірка по кожній монеті (USDT/ETH/SOL), Earn обслуговує обидві пари. Вимкнути — перемикач у панелі.

Джерело на GitHub