← Назад

Decisions Log

Лог ключевых технических и бизнес решений


5 May 2026 — Futures Screener: Migration to Malaysia VPS (сессия 88)

Контекст: FS жрал все ресурсы на shared серве (CPU steal 82%), Бендер падал. Решено мигрировать на выделенный хост ближе к Binance (Tokyo). Решение:

  1. Hostinger KVM 2 (Malaysia) — 2 vCPU, 8GB RAM, 100GB NVMe, 649 грн/мес (~$16)
  2. Malaysia выбрана как ближайшая к Binance Tokyo (ap-northeast-1) из доступных гео (~30-50ms vs 80-100ms Europe)
  3. Полная миграция: Ubuntu 24.04 LTS, Node.js 18, PM2 7, Nginx, certbot
  4. Новый домен: screen.clkway.online (DNS на Hostinger)
  5. Код через rsync (без node_modules), npm install на месте
  6. Старый futures-screener.szhub.space пока живой (fallback) Инфра: IP 72.62.247.119, SSH key с основного сервера, PM2 saved + startup

3 May 2026 — Futures Screener: Density Filters + Persistence (сессия 87)

Контекст: Плотности в стакане — много шума от маркетосов/спуферов, стены появляются на секунды. Решение:

  1. Фильтр Age≥ (ползунок 0-15m) — отсекает стены моложе N минут
  2. Фильтр Erosion≥ (ползунок 0-60m) — время разъедания стены при текущем объёме: notional×5 / avgVol5m(14 свечей)
  3. Отдельная колонка Erosion с цветовой индикацией (≥20m зелёный, 10-20m жёлтый, <10m красный)
  4. Persistence map на диск (каждые 30с + shutdown) — возраст стен переживает PM2 рестарты Коммит: 378dee0

4 May 2026 — Futures Screener: Load Speed Fix (сессия 86, часть 2)

Контекст: FS долго грузится, иногда 2-3 попытки, особенно десктоп. Root cause расследование: CPU steal 82% (Hostinger перегружен), gzip отключен для JS/CSS (446KB raw), нет Cache-Control (браузер перезапрашивает всё каждый раз). Статика из памяти отдавалась за 2-5с из-за event loop starvation. Решение (2 фикса):

  1. Cache-Control: public, max-age=86400 на JS/CSS/иконки, no-cache на HTML/SW
  2. Nginx gzip_types раскомментирован: 446KB→97KB (-78%) Эффект: первый визит 97KB вместо 446KB, повторные — 0 запросов (из кэша браузера). Коммит: 0a91f1e

4 May 2026 — Futures Screener: 10-Bug Audit (сессия 86)

Контекст: Code audit серверного кода futures-screener — поиск багов, утечек памяти, silent failures. Найдено 10 багов, все пофикшены:

  1. WS shutdown сломан: wsManager.ws не существовало → connections[].destroy()
  2. getMarkPrice: один кэш на все символы (BTC→ETH) → per-symbol Map
  3. touchHistory: Map рос без ограничений + никогда не заполнялся → удалён (dead code)
  4. _1hCache: unbounded → 60min eviction cleanup
  5. klinesStatsCache: unbounded → 5min eviction cleanup
  6. klines-warmup: бесконечный retry на 429 → max 3 retries per symbol
  7. gracefulShutdown: 6+ setInterval не чистились → _intervals[] + clearInterval + signals.stop()
  8. OI divergence: 24h change как 1h proxy → реальный 1h из OI candles (value/quantity)
  9. getKlinesWithStats: silent catch → console.warn с символом и ошибкой
  10. touchHistory arrays: allocated but never written → удалён вместе с #3 Коммит: 52f9fb3

3 May 2026 — Futures Screener: NATR Cache Race Fix + Push Retry (сессия 85)

Контекст: Channel 5m scan 300-500с, 6 "зомби" символов таймаутились, 97 NATR empty warnings, push уведомления терялись. Root cause: NATR cache TTL (5min) = cleanup TTL → race condition при refresh (30-60с compute time). NATR фильтр получал null → все 64 символа сканировались → rate limiter throttle → хвостовые символы (PARTI/LTC/VIRTUAL/ZEN/OPG/TRADOOR) timeout. Расследование: curl показал что символы отвечают за 0.4-2.4с — проблема не в Binance, а в перегрузке rate limiter. Решение (3 фикса):

  1. NATR read TTL 300→600с, cleanup TTL 300→600с (stale лучше чем null), первый scan 10→45с (ждём warmup)
  2. Push retry: 2 попытки с backoff 2s/4s + timeout 10s для network errors (socket hang up)
  3. getFundingMap: stale fallback 10min при ошибке API вместо пустого {} Результат: Channel scan 300-500с → 2-13с. 0 ошибок (было 70+ таймаутов). Один NATR фикс каскадно решил 3 проблемы. Также: Удалён застрявший worktree (с 7 марта), worktree правило отключено (sandbox→crash loop бота). Коммит: bb0deb1

2026-05-03 — Session 84: Channel Signals v2 — Multi-TF + Quality Filters

Контекст: Rick хочет торговать от границ регрессионных каналов. Нужны bounce, reversal, acceleration сигналы на 5m/15m/1h.

Решения:

  1. 3 sub-типа: channel_bounce (with-trend от границы), channel_reversal (counter-trend пробой, более редкий), channel_acceleration (with-trend пробой)
  2. Multi-TF параллельно: 5m(60s), 15m(90s), 1h(300s) с confluence ★★/★★★
  3. Trend-aware логика: ascending→LONG от нижней, descending→SHORT от верхней, flat→bounce обе стороны
  4. VOL_GATE_REVERSAL 3.0→2.0 — изначально реверсалы почти не срабатывали на 5m/15m из-за высокого порога
  5. Quality filters: Volume ≥$30M (было), NATR ≥0.5% (добавлено, ~26 монет отсекается), bandwidth ≥0.5%
  6. Period sync баг: Оверлей на графике использовал periods [20..200], детектор [20..150] → разные каналы! На ORCA оверлей показывал ascending, детектор видел descending → SHORT в середине визуально восходящего канала. Fix: sync periods + KLINES_LIMIT 150→220
  7. Settings: per-TF toggle (5m/15m/1h) — выключенные не показываются/пушатся, но пишутся в БД

Грабли:

Коммиты: 0824a89ea04b26 (7 коммитов)


2026-05-03 — Session 83: Push Notification Signal Marker Fix

Контекст: Rick нажал push уведомление OI divergence сигнала → перекинуло на график, но стрелки-маркера на графике нет.

Root cause — 3 бага:

  1. _pendingSignalMarker никогда не читалсяsetSignalMarkerAndOpen() записывал маркер в window._pendingSignalMarker, но applySignalMarkers() использовал только sigState.signals. Маркер устанавливался и тут же обнулялся без использования.
  2. sigState undefined → early return — если Signals tab никогда не открывался, sigState.signals не существует, функция делала return до обработки pending маркера.
  3. Неправильное имя переменной в cleanupcloseCoinModal() чистил modal._markers вместо modal._sigMarkers → маркеры не удалялись при закрытии.

Фикс: Pending marker инжектится как синтетический сигнал прямо в массив signals внутри applySignalMarkers(). Force flag при наличии pending. sigState fallback на пустой массив.

Коммит 1330a43.


2026-05-02 — Session 82: Futures Screener — Chart Load Speed Optimization

Контекст: Rick жаловался что графики "дёргаются" и долго грузятся после вчерашних фиксов. Предыдущая сессия упала по таймауту 600s, но изменения были сделаны — проверил, закоммитил.

Решения (Client — 6 оптимизаций):

  1. Delayed chart destroy (5s grace period) — при скролле карточки из вида, уничтожение графика откладывается на 5с. Если скроллят назад — таймер отменяется. Убирает "дёрганье" при быстром скролле.
  2. shiftVisibleRangeOnNewBar: true — нативная LWC фича вместо ручного getVisibleLogicalRange/setVisibleLogicalRange хака. Убирает прыжки при новых барах.
  3. Убран ручной scroll-restore — в WS хендлере для mini/modal/slot было сохранение/восстановление viewport → визуальные "прыжки".
  4. requestAnimationFrame для оверлеев — S/R, тренд-линии, каналы, маркеры деферятся в следующий кадр. Не блокирует main thread.
  5. Infinite scroll viewport preservation — при подгрузке истории viewport сдвигается на prepend count.
  6. Debounced ResizeObserver — модальный resize 100ms debounce.

Решения (Server — 2 оптимизации): 7. Stale-While-Revalidate кэш — klines cache validity 60s→300s. Stale (60-300s) → отдаёт мгновенно + bg refresh. Блокирует только при >5min. 8. NATR auto-refresh 4.5min — до истечения 5min TTL, всегда pre-computed.

Грабля: Предыдущая сессия таймаутнулась (600s) при попытке сделать все 8 изменений за раз. Нужно бить на части.

Коммит cdef26e.


2026-05-02 — Session 81: Futures Screener Stability — 4 Fixes After Crash

Контекст: Бендер падал всю ночь/утро из-за sandbox_enabled=true (CLI пытался OS sandbox → 60s timeout). Rick починил (SANDBOX_ENABLED=false в .env). Futures screener висел с 504 — event loop заблокирован retry loop'ами Binance API.

Решения:

  1. NATR warmup at startup/api/natr?interval=15m вызывался только клиентом → NATR cache пустой с первого скана. Добавил fastify.inject() через 5с после старта. NATR доступен через ~13с.
  2. FETCH_TIMEOUT_MS 10s→15s — 10s слишком агрессивно для тяжёлых endpoint'ов (premiumIndex 800+ символов, klines). Символы DASHUSDT/APTUSDT/LTCUSDT абортились систематически.
  3. ticker24hr cache 30s→60s — рассинхрон: endpoint кэшировал 30с, а signals.js уже использовал 60с. Выровнял.
  4. NATR log throttle — "NATR cache empty" спамился на каждый скан (сотни/мин). Throttle до 1 warning/5min.

Грабли: pm2 restart по id=0 после pm2 delete → "Process 0 not found". Нужно pm2 start ecosystem.config.js после delete.

Коммит e62cfb9.


2026-05-02 — Session 80: Modal UX — Loading Spinner + Error Retry + Prefetch

Решения:

  1. Loading spinner в модалке — пересоздаётся после innerHTML='', показывается при каждом loadModalChart(), скрывается при получении данных
  2. Error state + Retry кнопка — HTTP errors, пустые данные, network failure → UI с кнопкой retry вместо чёрного экрана
  3. Prefetch BTC/ETH/SOL — fire-and-forget при загрузке страницы, греет серверный кэш → мгновенное открытие модалки

Root cause: chartEl.innerHTML = '' убивал loader div, а в loadModalChart() не было show/hide/error логики. Коммит 37bfd81.


2026-05-02 — Session 79: PostToolUse Hook + AgentLint + Worktree Rule

Решения:

  1. PostToolUse syntax hook (/home/app/scripts/syntax-check.sh) — проверяет .js/.py/.json после каждого Edit/Write. statusMessage вместо OK-спама.
  2. AgentLint установлен глобально. Futures-screener: 33→72/100. Правило: первая пятница месяца — аудит.
  3. Worktree rule записан: эксперименты >50 строк / "попробуй" → всегда isolation: worktree.
  4. Weekly Improve (пятница) вместо Daily Improve. Без скрипта — ручной ресёрч по запросу.
  5. Connect-apps (Composio) — пропущен, у нас уже gh/telegram/email покрыты.

Артефакты:


2 May 2026 (сессия 78) — Futures Screener: Channel Overlays + Signal Check

Триггер: Rick хотел визуальные каналы на графиках + проверка сигналов после тюнинга. Решения:


1 May 2026 (сессия 77) — Futures Screener: Liq Sweep Quality Overhaul

Триггер: Анализ данных: 144 sig/day (прогноз 70-80), большинство conf 48-63 — шум. Решения:


1 May 2026 (сессия 76) — Futures Screener: 12 Silent Failure Audit + Multi-Select Filter + Sync Fix

Триггер: Сигналы не появлялись, Rick заметил. Диагностика: Outcome tracker зависел от UI-visit (getProxyCached ticker), 1h klines только у 2 символов в SQLite (liq-sweep молча скипал), WS _cleanup terminate на CLOSING сокетах. 12 фиксов аудита:

  1. Outcome tracker — независимый fetch тикера через bgetWithRetry
  2. WS _cleanup — close() для CLOSING state (вместо terminate)
  3. Liq sweep 1h klines — API fallback + 30min in-memory cache
  4. getKlinesWithStats — return null вместо {vol:0} (density не считал мусор)
  5. Error counters — логирование ошибок во всех сканерах
  6. SyntaxError fix — continue→return [] в density endpoint (не в loop) 7-12. getFundingMap/getNatrMap/marketRegime warnings, outcome/dedup error logging, density skip counter Фичи: Multi-checkbox signal type dropdown (5 типов), client-side only filtering (single source of truth), localStorage persistence, marker sync на mini-charts. Грабли: continue в .map() callback = SyntaxError, не loop! Коммит: 4446d3a

30 Apr 2026 (сессия 75) — Futures Screener: 8 Bug Fixes

Аудит: Полный code review server + client, найдено 8 реальных багов. Критические фиксы:

  1. klines-cache хранил base volume k[5] вместо quote k[7] — liq-sweep volume ratio был неправильным в 1000x+ при данных из кэша. БД пересоздана.
  2. /densities/simple + /api/oi-history — ReferenceError: reply not defined (handler без reply param)
  3. signals.js selectSignal() — sig.type вместо s.type, крашил detail panel для funding сигналов Средние:
  4. WS zombie reconnect при TF switch — _wsClosing сбрасывался синхронно до async onclose
  5. drawStore.loadAll() парсил localStorage JSON на каждый WS тик (~400/с) → in-memory cache
  6. AudioContext leak — новый на каждый звук сигнала → один переиспользуемый
  7. warmup infinite retry loop → max 3 retries per batch Мелкие: 8. Двойной $$ в Wall Size / Volume 24h Коммит: 568a396

30 Apr 2026 (сессия 74) — Server Reboot Recovery: Grid-bot + AlphaPulse

Проблема: Сервер ребутнулся, PM2 startup поднял ВСЕ сохранённые процессы включая stopped. Последствия:

Решение:

Грабли:

Коммит: a7a725f


30 Apr 2026 (сессия 73) — Weather Bot: CLOB Resolver + Min Confidence

Проблема: Resolver ждал 18h (RESOLVE_MIN_HOURS) на Open-Meteo archive. 25 Apr 29 трейдов висели нерезолвленные.

Решение 1 — CLOB Resolver: Чекаем Polymarket CLOB API (/markets/{id}) на winner=True/False в tokens. Мгновенный resolve как только Polymarket сетлит маркет. Open-Meteo оставлен как fallback. 25 трейдов зарезолвились моментально.

Решение 2 — MIN_MODEL_CONFIDENCE=80%: Анализ 36 трейдов показал: <80% conf = 38% WR (-$12.33), ≥80% conf = 75% WR (-$1.15). Также: YES трейды 0/5 = 0% WR (-$11), cheap <0.30 = 0% WR (-$8), between op = 44% WR (-$11.72). Пока подтянули только confidence, остальные фильтры наблюдаем.

Результат: 91 opps → 72 opps (~20% срезано). Все YES автоматически отфильтрованы (YES с conf ≥80% = редкость). Коммит 8310c52.


30 Apr 2026 — Futures Screener: Trend Channels Research

Решение: Ресёрч автоматических трендовых каналов для 1h сигналов у границ. Топ-5 подходов: 1) Adaptive Linear Regression (R² auto-period, лучший overall), 2) Auto Parallel Channel (swing pivots, у нас есть ZigZag), 3) Keltner (EMA+ATR, 77% WR, 20 строк), 4) Gaussian (30k TV likes, фильтр чопа), 5) Donchian (classic Turtle). Рекомендация: Regression + Keltner комбо. Результаты сохранены в brain/resources/trend-channels-research.md. Rick решит при реализации.

30 Apr 2026 — Futures Screener: OI Divergence + Funding Squeeze + ROC + Funding Gate

Решение: 3 новых OI-сигнала: 1) oi_divergence — standalone price/OI дивергенция (exhaustion или hidden accumulation, min 4 свечи, OI trend 2%, price 1%). 2) oi_funding_squeeze — контрарный сигнал при OI spike + extreme funding (>+0.05% SHORT, <-0.03% LONG). 3) OI ROC — 3-candle ускорение/замедление ±5 conf. Funding gate: фильтрует oi_longs при funding >+0.03% (толпа уже в лонгах), oi_shorts при <-0.02%. Frontend: settings accordion, metadata (OI Trend%, Funding%), push иконки. WS fix: safe CONNECTING state cleanup. OI history 3→6 свечей.

29 Apr 2026 — Weather Bot: DRY_RUN limits removed + dashboard KPI fix

Решение: Убрать MAX_OPEN_POSITIONS (15→100) и BANKROLL ($21→$10000 virtual) чтобы DRY_RUN стата копилась быстрее. Dashboard KPI фиксы: overall WR (73%) вместо daily (—), overall P&L вместо $0, bankroll "Virtual", conn.close() баг в resolver. Коммит 2355daf.

29 Apr 2026 — Liq Sweep Signal Tuning: remove rounds, walls→boost, swing 5/3

Решение: Анализ 548 сигналов liq_sweep по confidence × level type × direction.

29 Apr 2026 — Weather Bot Status Check + BTC 5m/15m Research

Решение: Проверка статуса бота + ресёрч крипто-маркетов Polymarket.

  1. Статус бота: 26 сделок, 8W/3L=73% WR (corrected), 15 active simulated. Max positions(15) блокирует новые. 42 opps/скан — модель работает хорошо.
  2. BTC 5m/15m ресёрч: 170 маркетов "Up or Down" (7 монет × 5m/15m/hourly). Dynamic taker fees до 7.2% убили latency arb. Единственный viable подход: market making (0% maker fee + rebates, 78-85% WR, 1-3%/мес). Momentum с MAKER ордерами или cross-platform arb (Kalshi) — альтернативы. Вывод: BTC 5m слишком сложно для taker стратегий. Rick думает.

29 Apr 2026 — Weather Bot: Resolver fix + Borderline filter + Auto-redeem

Решение: 3 фикса после аудита первого батча резолвов (11 сделок).

  1. Resolver timing: Open-Meteo Archive обновляет данные ±0.5°F в первые часы. Бот резолвил в 00:09 UTC с предварительными данными → 2 сделки ошибочно WIN (Seattle 57.5→57.2, SF 63.3→63.8). Фикс: RESOLVE_MIN_HOURS=18 задержка. Пере-резолв: 91% WR→73% WR, +$10.86→+$2.22.
  2. Borderline filter: between/eq маркеты с model YES prob 35-65% = зона неуверенности (±0.5°F rounding решает). Бэктест: все 3 лосса отфильтрованы, 0 винов потеряно.
  3. Auto-redeem: polymarket-apis (v0.5.8, Safe wallet support). redeem_position() в executor, auto-call после resolve. Winning tokens → USDC.
  4. Calibration fix: NoneType crash — outcome_binary=None для between/eq, Brier score только для gte/lte. Результат: Коммит 8734f64. Баланс Polymarket: $25 USDC free + 21 redeemable позиций.

29 Apr 2026 — Infrastructure: Save-hook keyword expansion

Решение: Расширить grep-матчер в save-hook.sh (UserPromptSubmit hook).

  1. Проблема: Хук ловил только "сохранись", а Rick писал "сохранение" — grep не срабатывал, 5-save протокол не инжектился
  2. Фикс: grep -qiE с паттернами: сохранись|сохрани|сохранение|сохранени|сейв|save|5.сохран
  3. Проверено: все варианты триггерят JSON injection корректно Результат: Хук теперь ловит любую форму слова "сохранить" на русском и английском. Коммит 5dc549f.

29 Apr 2026 — Futures Screener: Liquidity Sweep + Pin Bar signal + UI overhaul

Решение: Добавить третий тип сигнала — Liquidity Sweep + Pin Bar. Также реструктуризация настроек и добавление маркеров на графиках.

  1. Liq Sweep модуль (server/liq-sweep.js) — fractal swing highs/lows, round numbers, wall levels, pin bar detection (wick≥60%, body≤33%), sweep confirmation, confidence scoring (30-95)
  2. Интеграцияsignals.js + index.js, 60s scan interval, dependency injection (klinesCache, stateManager, densityV2)
  3. Settings accordion — вложенные секции: General ⚙️, Volume Spike 📊, OI+CVD 🔮, Liq Sweep 🎯, Notifications 🔔
  4. Signal markers на графикахapplySignalMarkers() для mini-charts и модалок, preload fetch при загрузке, toggle в настройках
  5. Модалки Signals tab — маркеры всегда видны на вкладке Signals (без галочки), определение через tab-signals display
  6. Sort Sig кнопка — в тулбаре рядом с Sort S/R и Sort TL, сортировка по latest signal timestamp, active glow стиль
  7. Убран Sig столбец — из сайдбара (ломал 7-колоночную сетку), функционал в кнопку тулбара Результат: 3 типа сигналов (volume_spike, oi_cvd, liq_sweep), организованные настройки, визуальные маркеры на графиках

28 Apr 2026 — Weather Bot: dashboard v2 + fix duplicate trades + resolver fix

Решение: Старый дашборд был непонятный, город не отображался в карточках, бот создавал ~50 дубликатов каждый скан (4500+ за день), resolver игнорировал simulated сделки.

  1. Dashboard v2 — полный редизайн: KPI strip, карточки open positions с городом/bracket, trade history с фильтрами (All/Wins/Losses/Pending), Performance tab с калибровкой, Settings tab
  2. Fix дубликатовget_active_trades() не включал статус simulated, поэтому idempotency guard не работал для DRY RUN. Теперь включает simulated + AND outcome IS NULL
  3. Fix отображения городовget_active_trades() не делал JOIN с markets → добавил LEFT JOIN markets для city и question
  4. Fix resolver — резолвил только status='filled', добавил 'simulated' для DRY RUN
  5. Очистка базы — удалили 5148 мусорных сделок, свежий старт. Первый чистый скан: 15 уникальных сделок Результат: 15 сделок вместо 4500+, города видны, завтра увидим первые resolve результаты

28 Apr 2026 — Weather Bot: полная переделка торговой модели (6 шагов)

Решение: Бот сливал ~$10 за день. Провели ресёрч (GitHub, Medium, Reddit) — нашли как успешные боты зарабатывают ($24k+). Проблема: хардкод Gaussian σ, фиксированные ставки, MIN_EDGE=5%. Реализовали 6 шагов:

  1. GFS+ECMWF мульти-ансамбль (82 members) вместо хардкод σ — P считается из данных, не из формулы
  2. Kelly Criterion (fractional 20%) вместо фикс $1-3
  3. MIN_EDGE=10% + фильтр консенсуса ≥55% + MAX_STD=7°F
  4. Самокалибровка — Brier Score по городам, confidence_mult корректирует Kelly
  5. ECMWF (51) + GFS (31) + METAR наблюдения (40+ аэропортов)
  6. Slippage фильтр — spread ≤3¢ Результат: Opps/скан: 69-81 → 48 (качественнее). 838 строк добавлено. Источники: polymarket-kalshi-weather-bot (GitHub), alteregoeth-ai/weatherbot, hcharper/polyBot-Weather, DevGenius $24k bot article.

27 Apr 2026 (сессия 64) — Lightweight Session Bootstrap v2

Решение: CLAUDE.md переписан: вместо чтения 10 файлов при старте (~35K токенов), теперь читаем только 2 (README + learnings ~8-10K). Проектный контекст подтягивается ТОЛЬКО после того как Rick скажет над чем работаем. decisions/log.md (42K+) больше не читается при старте — только при записи решений. Причина: Rick заметил большой расход токенов. 80% контекста при старте не использовалось. Экономия: ~70% токенов на каждый bootstrap.


27 Apr 2026 (сессия 62) — Futures Screener: Global Binance Rate Limiter

Решение: Внедрён 3-уровневый rate limiter для Binance API: (1) трекинг X-MBX-USED-WEIGHT-1M из каждого ответа; (2) soft throttle 500ms при 1800/2400, hard throttle 5s при 2200/2400; (3) глобальная пауза всех запросов при 429 (30s) и 418/IP ban (120s). bgetWithRetry не считает 429 за обычный retry. Диагностический endpoint GET /api/rate-limiter. Также: Добавлена Moscow в config.CITIES weather-bot (была в scanner но не в forecaster → Unknown city). Рестартнут dashboard (502 после 30 дней аптайма — завис).

27 Apr 2026 (сессия 61) — Weather Bot: 429 Fix + Cache + Logs

Решение: Фикс 3 багов weather bot: (1) forecast cache не использовался — каждый bracket дёргал API повторно, сотни лишних запросов → 429 бан Open-Meteo; (2) нет retry/backoff при 429 — добавлен retry 3x (5s→10s→20s) + global cooldown 5min; (3) loguru дублировал все строки (stderr + file handler) — убран дефолтный handler. DRY_RUN=true пока нет PROXY_ADDRESS. Статус: PRIVATE_KEY заполнен, USDC $30 на Polygon готов. Осталось: deposit на Polymarket → получить PROXY_ADDRESS → DRY_RUN=false. Dry run статистика: 295 сделок, WR 62%, PnL +$150.97 (симуляция). Коммит: 1235ad6

26 Apr 2026 (сессия 60) — Polymarket Weather Bot: Deploy

Решение: Запуск Weather Bot (вариант B) — деплой на dashboard.szhub.space/weather-bot/. Архитектура: Python FastAPI + APScheduler, Gamma API scanner (40 городов × 3 дня), Open-Meteo forecaster (probability model N(μ,σ)), edge analyzer (≥5%), CLOB executor (limit orders, 0% maker fee), Risk Manager (kill switch, daily loss limit). Деплой: PM2 weather-bot порт 3201, nginx proxy на dashboard.szhub.space, DRY_RUN=true. Баги пофикшены: timeAgo UTC парсинг (-24908s), markets city/date NULL (save_market до заполнения полей), switchTab event.target. Первый скан: 87 events, ~960 bracket markets (11 per city/date). 0 opportunities (edge < 5%). Коммит: 2749cb9

26 Apr 2026 (сессия 60) — Options Screener: Auto-Trading Gamma Play

Решение: Запуск автоматической торговли по Gamma Play сигналам с backtest-validated фильтрами. Фильтры: conf≥90, DTE≤1d, delta 0.3-0.7, dist<1%, cost $0.50-$3(alt)/$5(BTC/ETH), no counter-trend, TP room ≥50%. Пайплайн: gammaSignal → filter → BUY LIMIT → fill monitor → SELL LIMIT (TP +100%) → push + journal. Баг-фикс: Math.abs() для NEUTRAL P&L давал 100% fake WR для straddle/strangle. Пересчитано 112 сигналов. TP room check: maxPrice биржи может быть ниже TP — если gain <50%, сделка пропускается (первая сделка SOL показала проблему: fill $0.36, TP capped to $0.50 = +39% вместо +100%). Коммит: e78fc62

25 Apr 2026 (сессия 59) — Futures Screener: WS Migration /market/stream

Решение: Миграция клиентского WebSocket с legacy wss://fstream.binance.com/stream на wss://fstream.binance.com/market/stream. Причина: Binance депрекейтнули legacy /stream — kline стримы на 15m+ перестали получать данные. Подтверждено тестами: legacy 15m = 0 тиков за 12с, /market/stream 15m = 20 тиков. Доп. фикс: При смене TF теперь полностью убивается и пересоздаётся WS соединение (вместо UNSUBSCRIBE/SUBSCRIBE на том же соединении — race condition). Добавлен RE-SUB safety net (5с fallback, пересоздаёт стримы из видимых чартов). Результат: Все TF работают: 1m, 5m, 15m, 1h, 4h, 1d. Коммит 4381cba.

25 Apr 2026 (сессия 58) — Futures Screener: S/R v2 + Trendlines v3

Решение: Полная переработка Auto S/R и Auto Trendlines на основе ресёрча GitHub/TradingView лучших алгоритмов. S/R v2: DBSCAN кластеризация (вместо sorted-merge), Volume Profile (POC/VAH/VAL), Multi-TF confluence (modal/slots fetch 2 старших TF), Break detection (пробитые уровни penalized). Trendlines v3: ZigZag свинги (вместо fractal pivots), Gradient descent slope optimization с ZERO violations (neurotrader888 подход), enforce slope direction (support↗ resistance↘), линии от начала графика. Причина: Rick указал что готовые решения на TradingView/GitHub лучше велосипеда. Ресёрч подтвердил: наш sorted-merge имел chain-merge problem, трендлайны допускали 15% violations и не фильтровали slope direction. Результат: Горизонтальные уровни "намного лучше" (Rick), трендлайны корректные по направлению. Коммит c5edf2a.

25 Apr 2026 — Futures Screener: Auto S/R + WS fix

Решение: Разбить серверный WS на multiple connections (190 стримов макс). Auto S/R уровни через fractal pivots + ATR clustering. Убрать IDB tier кэширования. Причина: WS флапал каждые 5с (536 стримов > Binance limit 200). IDB delta merge вызывал гэпы на графиках. Auto S/R — #1 requested feature. Результат: WS стабильный, графики без гэпов, S/R уровни на всех чартах с toggle и сортировкой.


2026-04-24 — 3-Tier Klines Cache + Infinite Scroll (сессия 56)

Futures Screener: Клиентский 3-уровневый кеш для мгновенной загрузки графиков:


2026-04-23 — Full Code Audit & 25 Bug Fixes (сессия 55)

Futures Screener: Полный аудит кода (server + client + infra). 33 проблемы найдены, 25 исправлены за сессию (27 коммитов). Ключевые решения:


2026-04-23 — Daily Improve Research (сессия 54)

Futures Screener: Ресёрч конкурентов (CoinGlass, Kingfisher $70/мес, ScalpBoard $10/мес, Laevitas $50/мес). 3 идеи сохранены в TODO:

  1. Multi-channel алерты (Telegram + Discord + webhook) — #1 монетизационный рычаг
  2. AI Market Regime per coin + Composite Signal Score
  3. Liquidation Heatmap (CoinGlass Prime killer-фича, $12/мес только за это) Pricing: $10-15/мес sweet spot.

Бендер: Ресёрч (hooks, MCP серверы, automation, self-improving patterns). Rick пока не выбрал — вернёмся позже.


TODO: Пятница — Hook PostToolUse: syntax check после Edit/Write

Что: Хук в .claude/settings.json — после каждого Edit/Write запускать syntax check на изменённый файл.


TODO: Четверг/Пятница — Умный daily-improve скрипт

Идея: Вместо захардкоженных 30 идей — скрипт который анализирует текущее состояние сервера/проектов (PM2 health, disk, error logs, git status, trading PnL) и через AI (OpenRouter/Claude API) генерит 3 актуальные, контекстные идеи улучшения Бендера каждый день. Cron 18:00 Vancouver → Telegram через Бендера.


2026-04-22 — WS Flap Fix + Push/In-tab Split (сессия 52)

WS Binance флап: Подключался при старте без подписок → Binance закрывал idle соединение → reconnect loop каждые 5с. Фикс: lazy connect только при первом subscribe(), ping keepalive 3мин, race condition fix (concurrent subscribes при CONNECTING state). Убрал eager wsManager.connect() из index.js.

JWT_SECRET: Был random при каждом рестарте → все JWT токены сбрасывались. Фикс: фиксированный секрет через PM2 env var.

Push vs In-tab split: Один toggle "Browser notifications" управлял и in-tab toast и серверным push одновременно. Выключение на десктопе убивало push на телефоне. Фикс: разделил на signalNotifications (in-tab alerts: toast+Notification API) и signalPush (серверный push: работает с закрытым браузером/на телефоне). Каждое устройство управляет своей подпиской независимо.

Коммит c391b6f.


2026-04-21 — Library Drawing Tools Integration (сессия 51)

Решение: Заменить кастомные drawing tools (priceLine/LineSeries хаки) на библиотеку lightweight-charts-drawing@0.1.1. Установлена через npm, UMD раздаётся локально через Fastify route.

Ключевое открытие: DrawingManager.handleClick() библиотеки при активном инструменте ничего не делает — только selection. setActiveTool() просто хранит имя. Рисунки нужно создавать вручную через ToolRegistry.createDrawing(type, id, anchors, style, opts) + manager.addDrawing(drawing).

Мобильный баг: touchend handler вызывал preventDefault() → убивал синтетический click → библиотека не получала клик через chart.subscribeClick. Фикс: return early когда DM активен.

Реализовано: click-to-create через ToolRegistry, авто-cursor после рисования (onToolDone callback), drag через библиотечный anchor system + touch→mouse proxy для мобилки, settings popup (10 цветов, толщина 1-4, delete), 🔔 price alerts на линиях (crossing detection с cooldown 1мин), фибо кастомные уровни и per-level цвета, TradingView-style SVG иконки. Коммит 74bc0b7.


2026-04-21 — LWC v5 Modal Chart Fix (сессия 50)

Root cause найден: createTextWatermark() (v5 primitive API) бросал TypeError: this.yt.attachPrimitive is not a function, что крашило всю функцию openCoinModal() до вызова loadModalChart(). Чарт показывал 2-3 свечи (только WS тики) вместо 1000. Также lightweight-charts-drawing@0.1.1 CDN возвращал 404 (несовместим с v5) и мог ломать internals LWC.

Фиксы: 1) createTextWatermark() и createSeriesMarkers() обёрнуты в try/catch. 2) Убрана CDN lightweight-charts-drawing@0.1.1 (v4-only). drawing-manager.js gracefully деградирует (returns null). 3) CSS .mc-modal.hidden: display:nonevisibility:hidden + opacity:0 + pointer-events:none (элемент всегда в layout). 4) chartEl.innerHTML = '' перед createChart (чистка стейл DOM). 5) ResizeObserver + fitContent fallback. 6) Debug logging [modal].

Грабли: rAF/double-rAF не помогли (пробовали и в сессии 49, и в 50). Проблема была НЕ в размерах (934×647 — корректные), а в uncaught TypeError который останавливал выполнение. Коммит 66654f1.


2026-04-21 — LWC v4→v5 Migration + Drawing Library (сессия 49)

LWC Migration v4.1.1→v5.1.0: Апгрейд lightweight-charts. Изменения: addXxxSeries()addSeries(LightweightCharts.XxxSeries) (26 замен), series.setMarkers()createSeriesMarkers(), watermark option→createTextWatermark(). Drawing Library: подключена lightweight-charts-drawing@0.1.1 (UMD, 68 инструментов TradingView-grade). Создан drawing-manager.js — обёртка DrawingManager с attach/detach/persist per-symbol. Коммит b69752d.


2026-04-20 — Signal Trader Bot + Push Filter UI (сессия 48)

Signal Trader Bot (Binance Futures): Новый бот /home/app/trading-bot/grid-bot/src/signal_trader.py — торгует volume_spike сигналы из futures-screener. LONG+SHORT, $15/trade, 3x leverage, 5 макс позиций. Стратегия: partial TP 50% на +2.5% → trailing 1% callback, SL -1.5% (STOP_MARKET на бирже), time stop 12ч. Blacklist: top20 mcap (MFE слишком низкий) + плохие монеты по WR. TMM интеграция (теги+описания). Telegram через @alert_rick_bot (НЕ Бендер). Баги решены: Binance STOP_MARKET возвращает algoId (не orderId), conditional orders не видны в openOrders (проверяем позицию), race condition SL update после partial TP (sleep 0.5s). Push Notification Filter UI: checkboxes для выбора типов сигналов (volume_spike, oi_longs, oi_shorts, etc.), minRatio дефолт 3→2 (сигналы не доходили). Первая сделка HIGHUSDT LONG +$1.56 за 3 мин. Коммиты 91e61fb, 31f9fb8.


2026-04-20 — Futures Screener: Density V2 Rewrite (сессия 47)

Density полная переделка: Старая система показывала бред (x-multiplier, NATR, теги CONCRETE/ROBOT/SPOOF-FAR). Новая V2: адаптивные бакеты (0.05% от цены), статистическое определение стен (median + N×σ, floor median×3), кластеризация соседних бакетов в зоны, bid/ask imbalance (±2% окно, BULLISH/BEARISH/NEUTRAL). Persistence tracking: ключи по bucket index (стабильно), fuzzy matching ±2 соседа, статусы new→confirmed(3m)→strong(10m), cleanup 5min unseen. Wall scoring: sizeVsMedian × proximity × persistence. sizeVsMedian capped 99.9. Новый файл server/densityV2.js — полный алгоритм. Endpoint /densities/v2 — params: windowPct, nSigma, minVolume24h, minImbalance, symbols, force. On-demand WS подписка для конкретных символов. Frontend: красивая таблица (Coin/Imbalance/Support/Resistance/Vol24h), blacklist modal (localStorage), мобильные карточки. Chart overlay: все графики (modal/mini/batch) мигрированы на v2 API. Density toggle checkbox в тулбаре мини-чартов. Фиксы: age всегда <1m (bucket index вместо price), AAVE/LINK без плотностей (on-demand WS + threshold median×5→×3), GRIFFAIN 332x (cap 99.9), table columns misaligned (double td), blacklist corruption (sanitization). Коммит 9ee69c8.


2026-04-20 — Futures Screener: Server Web Push + Time Fixes (сессия 46)

Server-side Web Push (VAPID): Заменили client-side polling (30s) на настоящий Web Push через web-push npm. VAPID ключи в PM2 env. push_subscriptions таблица в SQLite (endpoint, keys, filters, fail_count). server/push.js модуль: sendPushForSignal() fire-and-forget из emitSignal(), server-side filtering (conf/ratio/watchlist), auto-cleanup expired (410), fail_count < 3. 3 API endpoints: /api/push/vapid-key, subscribe, unsubscribe. SW push event handler. Test signals excluded (id.startsWith('test-') guard). Мгновенная доставка: каждый сигнал шлёт push сразу при обнаружении, не пачками. Time display: "Xm ago" → реальное локальное время (24h формат). DST fix: timeZone: 'America/Vancouver' принудительно (системные часы Rick'а в PST вместо PDT). Signal stats анализ (2634 сигнала): SHORT WR 84% vs LONG 15% (рынок падал), vol spike ratio 5-10x лучший (WR 73%), confidence формула инвертирована (low conf лучше high). Коммит 33085a1.


2026-04-19 — Futures Screener: Drawing Tools Everywhere + Push Notifications (сессия 44)

Drawing Context Refactor: drawCtx абстракция (~120 замен modal→drawCtx). Все графики drawable: модалка (32px toolbar), multi-chart слоты (24px compact, hover reveal), мини-чарты (20px ultra-compact, hidden→hover). setDrawCtxModal/Slot/Mini, auto-switch на mousedown. Per-symbol persist/restore при переключении. OI Indicator: histogram→line (по запросу Rick), 10% высоты, все графики. Push Notifications: SW showNotification + notificationclick→openModal. Background checker 30s (не зависит от активной вкладки). Sound alert Web Audio. ?signal=SYM URL param для cold start. Test endpoint /api/signals/test. Notification→Signal Marker: при клике на пуш модалка открывается со стрелкой сигнала на графике (как на вкладке Signals). SW передаёт signalId, setSignalMarkerAndOpen() подгружает данные и ставит _pendingSignalMarker. seenIds fix: всегда трекаются даже при выключенных нотификациях. Коммиты: fccf7db, ba5ed96, 139a750, 0fa57d4, 1a19c56.


2026-04-19 — Futures Screener: Settings Verification + OI Indicator + TZ Fix (сессия 43)

Settings verification: все секции проверены и подключены. Density filters (depth%, TTL, severity, blacklist) подключены к mini-charts.js и densities.js. Sort direction fix. Multi-chart layouts (2h/2v/1+3) подключены. OI signals upgrade: market regime (BTC EMA20 1h, cached 5min), CVD gate (min skew 0.1), divergence detection (OI↑+Price↓ = bullish div), cooldown 15→60min. OI indicator overlay: /api/oi-history endpoint, yellow line on modal charts (separate price scale), toggle+color in settings Indicators section. Timezone fix (final): removed all manual TZ_OFFSET, pure UTC timestamps + browser toLocaleTimeString() for display. Signal confidence filter: slider 30-90 in settings. Коммит f1723e0.


2026-04-19 — Futures Screener: Mobile Responsive + Ruler Tool (сессия 42)

Mobile responsive: Header (brand скрыт <600px, tabs stretch), sidebar (гамбургер ☰ + overlay 280px + backdrop), toolbar (фильтры/layout скрыты на мобилке), cards per row 1-2 добавлены, signals detail panel как fullscreen overlay + ← Back. Ruler tool (M): 2-click measurement в drawing tools, diagonal + L-shape + triangle fill, label с ценой/% + время + бары, зелёный/красный, следует за scroll/zoom, убирается кликом. Фиксы: colHeaders duplicate, SW cache bump v2. Коммит 32f2048.


2026-04-18 — Futures Screener: UI Polish / Dead Code Cleanup (сессия 41)

Чистка мёртвого кода: Убраны orphaned ссылки на удалённые sidebar элементы (cmLinks, sigSettingsBtn, toggleSignalSettings(), mcSortBy, mcFilterVol/Natr/Trades, updateControlsFromState()). Фикс малформатного HTML в error fallback. Убраны мёртвые CSS стили .sig-settings-panel. drawAutoLevels/drawModalLevels оставлены (будут допилены позже). sigOutcomeStats оставлен (данные копятся в базе). -114 строк. Коммит e41b641.


2026-04-18 — Futures Screener: Settings Panel Overhaul (сессия 40)

Полная переделка Settings Panel: 8 секций, 30+ настроек, все реально подключены (раньше были муляжи). ⚙️ перенесён в header справа, старый левый сайдбар убран. Секции: Charts (candle type/log scale/volume height/grid/watermark/TF/cards per row/card size/sidebar columns), Densities (enable/severity/depth/TTL), Signals (ratio/cooldown/watchlist-only/notifications/sound), Watchlist (★ на сайдбаре, watchlist-first sort, manage), Theme (3 темы Dark/Darker/AMOLED + 6 candle color presets + custom picker), Data (auto-refresh/interval/default sort/min volume), Layout (multi-chart), Reset (clear drawings/reset + Export/Import base64). Все persist в localStorage, toast feedback, мгновенное применение. Коммит d79f666.


2026-04-18 — Futures Screener: Signal Metadata + OI Confidence Fix (сессия 39)

OI+CVD confidence fix: Анализ 777 сигналов за 24ч показал: high conf (80+) OI сигналы имели R:R 0.86, PnL -3.5%/1h — экстремальные OI скачки запаздывают. Новая формула: bell-curve, sweet spot 4-8% OI change → conf 67-78, >10% → conf падает до 58-66. buySellRatio cap 10. Vol_spike conf не менялся (работает корректно: low→mid→high = лучше). Коммит 7e6689a.


2026-04-18 — Futures Screener: Signal Metadata Enrichment (сессия 39)

Enriched signal metadata: Каждый сигнал (vol_spike + oi_cvd) теперь содержит 6 доп. полей: volume24h, natr (NATR14 15m), trades24h, fundingRate (%), pricePosition (0-100% в 24h диапазоне), marketRank (ранг по объёму). Funding rate кешируется 5мин через /fapi/v1/premiumIndex. NATR берётся из кеша /api/natr, fallback — расчёт из 5m klines. Frontend detail panel показывает все поля с цветовой индикацией. Коммит 5c52107.


2026-04-18 — Futures Screener: Signals Overhaul + Countdown + Candle Sync (сессия 38)

Signals DB-backed: /api/signals/live теперь из SQLite (24h window), не in-memory 200 буфер. Сигналы переживают рестарты PM2. DB-based dedup (cooldown тоже переживает рестарты). Лимит 500.

Signal timestamps: created_at = candle openTime (volume_spike) / OI candle timestamp (oi_cvd), не время скана. DB logSignal передаёт created_at явно. UTC fix: "2026-04-18 07:20:00""2026-04-18T07:20:00Z" для корректного парсинга в любом браузере.

Candle sync: WS live candles получают TZ_OFFSET_SEC (раньше UTC vs local mismatch → лаг/дёрганье). Phase 2 history load: setVisibleRange() (time-based) вместо setVisibleLogicalRange() (offset-based) → без скачка.

Countdown timer: В toolbar рядом с TF кнопками, тикает каждую секунду, TF-aware (5m→3:42, 4h→2:15:08).

UI: Default TF 5m (совпадает с сигналами). Confidence округлён до целого. Price line сигнала убрана. Auto-scroll блокируется если пользователь сдвинул график.


2026-04-18 — Futures Screener: Volume Spike SMA(20) + Local TZ + Signal Markers (сессия 37)

Volume Spike переделан: Старый (24h vol vs медиана рынка) → новый (5m candle vs SMA(20) своих свечей). $30M 24h min, $100K avg 5m min. Сервер эмитит от 2x, фронт фильтрует по user setting (default 3x). big_mover и natr_spike убраны (дублировали sidebar).

Local timezone: TZ_OFFSET_SEC в parseKlines() — все графики в локальном времени браузера, не UTC.

Signal markers: window._pendingSignalMarker → arrow + priceLine на графике при открытии из Signals tab. Чистится при закрытии модалки.

Settings popup: ⚙️ кнопка → slider ratio 2x-20x, localStorage persist. Заготовка для будущих настроек (min vol, SMA period, candle TF, OI threshold, cooldown, notifications, watchlist filter).


2026-04-18 — Futures Screener: OI+CVD Signals + Outcome Tracker (сессия 36 cont.)

OI+CVD: openInterestHist?period=1h + takerlongshortRatio?period=1h → 4 подтипа (oi_longs/oi_shorts/oi_squeeze/oi_liquidation). Порог 3%/1h, top 50 by volume, ~4 сигнала/скан. Реальные данные подтверждены: RAVE short squeeze OI-4.5%+buying при +53%.

Outcome Tracker v2: MFE/MAE (Max Favorable/Adverse Excursion) обновляются каждые 30с. Снимки 5m/15m/1h/4h/1d. Итог по 1d. DB миграция: +spot_after_1d, +mfe_pct, +mae_pct. Pending window 25h.

Убрано: density_break (дублирует вкладку), outcome stats bar из signals tab (будет отдельная вкладка backtest).

Данные: avg OI Δ5min=0.13% (слишком тихо), avg OI Δ1h=0.86%, median=0.40%. При 3%: 2-3 из 50/час.


2026-04-17 — Futures Screener: Signals Tab (сессия 36)

Backend: server/signals.js — scanner every 60s, 4 signal types (volume_spike 3x median, big_mover ±5%, natr_spike >5%, density_break walls<0.3%), cooldown 15min dedup, in-memory buffer 200 + SQLite persist. 3 API endpoints: /api/signals/live, /api/signals/summary, /api/signals/history.

Frontend: app/signals.js — Hybrid layout (Variant 3): filterable table (type/direction/symbol search) + detail panel. Auto-refresh 30s. Click row → detail panel with confidence bar, metadata grid, description. "Open Chart" button switches to Mini-Charts tab and opens modal.

Wheel zoom reverted: custom 3x boostWheelZoom() removed, restored default LightweightCharts mouseWheel behavior (broke something).


2026-04-17 — Futures Screener: Drawing Tools + Copy Ticker + UI Polish (сессия 35)

Drawing Tools:

UI Polish:

Signals Tab: Variant 3 (Hybrid — table + detail panel with mini-chart) chosen as base design. Implementation pending.


2026-04-17 — Futures Screener: Server Cache + Density Fixes + Performance

Density v2 Fixes:

Rate Limit Protection (Binance bans solved):

Server Cache Architecture:

Frontend Performance:

10 коммитов: 8b11965cbe471a.


2026-04-17 — Futures Screener: Phase 2 Multi-Chart + Memory Leak Fix

Multi-Chart Layout:

Memory Leak Fix (5 утечек):

Результат: Heap 89% (133MB) → 40% (12MB) после рестарта.

Коммит: 198472a. TODO: drawings per slot, Phase 3 density on charts.


2026-04-16 — Grid Bot v3.2: Neutral Grid для Binance (рестарт с нуля)

Контекст: v2 грид-бот остановлен 9 Apr с убытком $10.15 из $100 депа. Фундаментальная ошибка v2 — охотился за волатильностью (MV≥65). Rick консультировался с Grok и решил перестроить на Neutral Grid hunting sleeping coins (низкая NATR, широкий CHOP).

Архитектурные решения v3 → v3.2:

TMM tag: Grid.v3 (отличить от v2 статистики).

Status: первая сессия на ETHUSDT — грид встал, ETH вышел в тренд (slope +0.56%), грид закрыт на breakout без убытка. Ждём новый боковик. Деп $149.70 (fee ~11¢).

Файлы:

PM2 grid-bot.


2026-04-15 — Futures Screener: Batch Klines + Sidebar Grid + NATR Fix

Решение: Batch загрузка klines для быстрой отрисовки мини-чартов. Проблема: Чарты грузились по одному (80ms задержка × 20 видимых = 4-10с), выглядело раздражающе. Решение: POST /api/klines-batch — клиент отправляет до 20 символов, сервер фетчит параллельно с Binance + кеширует 10с. Один batch ~500ms вместо 4-10с. Sidebar: Переведён на CSS Grid (grid-template-columns: 20px 1fr 54px 38px 42px), кликабельные заголовки (Coin|Chg%|NATR|Vol) с asc/desc toggle. Sort dropdown из тулбара удалён. NATR баг: fetchServerNATR() обновлял .mc-natr (chart cards), но sidebar использовал .mc-coin-natr → NATR в сайдбаре не обновлялся. В batch-пути не вызывался calcNATR() → прочерки на хедерах чартов. Оба пофикшены. rightOffset: 10 свечей на всех графиках (mini + modal). В модалке setVisibleLogicalRange перезаписывал offset → добавлен +10 к to.


2026-04-15 — Futures Screener: v6 Upgrade Spec (Scalpboard Analysis)

Решение: Создать 5-фазный план улучшений на основе конкурентного анализа Scalpboard.io. Конкурент: Scalpboard.io — скальперский скринер $15-25/мес, 6 бирж, multi-chart, density heatmap, 10 секций настроек. План: Phase 1: Auth JWT (FREE/PRO) + Settings Panel → Phase 2: Multi-Chart (1/2/4 layout) + Sidebar (price/change/vol) → Phase 3: Density levels на графиках + 3 severity (L/M/S) → Phase 4: Rectangle drawing + line styles + impulse/listing alerts → Phase 5: Candle types + log scale + color themes + cascades. Auth сейчас: код 5600 строк, 6 endpoints — проще обернуть в middleware сейчас чем рефакторить потом. User-specific данные (watchlist, settings) сразу в DB. Target: 1 May 2026. Спека: /home/app/brain/projects/futures-screener-v6-spec.md. Результат Phase 1 (15 Apr): Auth backend+frontend DONE, Settings Panel DONE (4 секции), Sidebar upgraded (price column). SQLite выбран вместо PostgreSQL — достаточно для users/settings/alerts, density history в RAM. Go отклонён — bottleneck в Binance API latency, не в CPU.


2026-04-15 — Bybit Bot: EMA Slope Threshold Fix (0.05% → 0.4%)

Решение: Ослабить EMA direction filter — порог slope с 0.05% до 0.4%. Проблема: EMA фильтр добавленный 14 Apr блокировал ВСЕ MR сигналы (229 скипов за полдня, 1 сделка). Порог 0.05% за 3 свечи = любое микро-движение считалось "трендом". Для MR это контрпродуктивно — когда цена ниже VWAP (Z<-2.5), EMA естественно падает. Фикс: 1) EMA_SLOPE_THRESHOLD = 0.4 (новая константа). 2) slope_pct→ema_slope, вынесен в return tuple _calc_z_score_and_natr(). 3) Лог с slope значением. Промежуточный баг: забыл вернуть ema_slope из функции → тихий краш скана 35 мин (NameError, но asyncio проглатывал). Результат: BLESS (slope 0.6-1%) правильно блокируется, MYX-подобные (0.38%) проходят. Первая сделка через 30 мин после фикса.


2026-04-14 — Options Screener: Backtest PnL Calculation Fix

Решение: Починить расчёт PnL в outcome tracker — нереальные значения (ROI 59000%, 578%). Проблема: 1) 10 старых сигналов (Buy Call/Put) хранили direction=NEUTRAL → формула брала abs(spotMove) → всегда WIN (даже при падении спота). 2) Delta-аппроксимация без cap → 578% PnL. 3) Микро-премия $0.01 → деление → 97%. Фикс: 1) Infer direction из strategy name в calcOptionPnl (legacy fix). 2) PnL cap: -100% до +500%. 3) Min threshold: delta≥0.03, premium≥$0.10 (иначе fallback на spot PnL). Пересчитано 104 сигнала. WR 66%→63%, Buy Call avgPnl 43.7%→17.9%. Коммит: 519066f.


2026-04-14 — Options Screener: Expired Options + Exit Reasons Fix

Решение: Правильно обрабатывать expired/exercised опционы через Binance exercise history. Проблема: 3 бага: 1) Код искал ex.realStrikeAmount, Binance отдаёт ex.realStrikePrice → фоллбек на strikePrice (68000 для BTC PUT). 2) strikeResult от Binance ненадёжен для определения ITM/OTM. 3) PnL формула: exitPrice=strike вместо intrinsic → ROI 59,000% вместо -100%. Фикс: Считаем intrinsic value сами: PUT = max(strike - realStrikePrice, 0) × contractUnit, CALL = max(realStrikePrice - strike, 0) × contractUnit. Если intrinsic > 0 → EXERCISED, иначе EXPIRED_WORTHLESS. exitReason поле в Prisma TradeLog. Frontend бейджи: TP/SL/EXP-0/EXERC/MANUAL. Journal/stats теперь включают EXPIRED статус. Коммит: e841599.


2026-04-14 — Options Screener: Contract Unit Fix (XRP=100, DOGE=1000)

Решение: Нормализовать option premium по contract unit multiplier. Проблема: Binance options premium = per-contract. XRP 1 контракт = 100 XRP, DOGE = 1000. Breakeven для XRP показывал $3.50 вместо $1.40 (premium $2.13 вместо $0.02/unit). P&L Calculator показывал всё красным. Фикс: fetchContractUnits() из exchangeInfo → cache.contractUnits. getContractUnit() хелпер. buildTradeRec, buildComboTradeRec, dashboard gamma/whale recs — breakeven и spotTarget делятся на unit. P&L Calculator: totalCost = premPerUnit × unit × qty. Smart Sizing (qty=2) отключён (деп мал). Коммиты: 36ce19a, d974f99.


2026-04-14 — Options Screener: Remove SL from ALL strategies + Position Sizing

Решение: Убрать SL из всех стратегий — покупка опциона = isolated margin, премия = max loss. Проблема: Gamma Play и Whale/UV имели конкретные SL (50-70%), что не имеет смысла для покупки опционов. Buy Call/Put и Combo уже были правильно (slPct=100). Фикс: 1) getDynamicTargets(): slPct=100 для ВСЕХ типов (WHALE, GAMMA, DIRECTIONAL, COMBO). 2) dashboard.js: Gamma и Whale trade recs — убраны конкретные stopLoss цены, заменены на note "Premium = max loss". 3) Position sizing 5% risk от баланса Binance ($80.56), qty auto-fill. Коммит 127a136.


2026-04-14 — Options Screener: IV Skew + UV Limit Consistency Fix

Решение: Синхронизировать сигналы между Signals табом и Backtest логированием. Проблема: IV Skew сигналы генерировались только в dashboard.js (для Signals таба), но НЕ в scheduler.js → никогда не логировались в SignalLog → 0 IV Skew в Backtest. UV лимит: dashboard 12, scheduler 8 — несоответствие. Фикс: Добавил IV Skew генерацию в scheduler slowUpdate() (аналогично dashboard.js). UV лимит 8→12. Теперь все 4 типа (strategies, UV, gamma, IV Skew) логируются одинаково. Коммит 80bf7b6.


2026-04-14 — Options Screener: Signal Dedup Fix + Backtest Sort/Expand

Решение: Починить дедупликацию сигналов + улучшить Backtest таб. Проблема: signalLogger хранил signalId = sig.id + "_" + Date.now(), а дедуп искал по sig.id (без суффикса) → никогда не совпадал. 5,615 из 5,699 сигналов были дубликатами (99.3%). Фикс: Дедуп по strategy + underlying в окне 6ч (стабильные поля). Почищено 5,615 дублей → 84 уникальных. Backtest: сортируемые таблицы (клик по заголовку), expand-строки в signal log (description + parameters + spot after). Коммит: 1f928d1.


2026-04-14 — Options Screener: Backtest Tab UI

Решение: Добавить фронтенд для просмотра результатов бэктестов (раньше API-only). Реализация: Новый таб "📊 Backtest" — 4 overview карточки, Strategy Performance таблица (WR%/PnL 1h/4h/24h), Asset Performance таблица, Signal Log с пагинацией и фильтрами (outcome/strategy/underlying/period). Кликабельные строки для фильтрации. Коммит 33f4e0e.


2026-04-14 — Options Screener: Trade Journal Sync Fix (3 bugs)

Решение: Починить журнал сделок — закрытые трейды не отображались. Проблема: syncFromBinance() брал символы только из открытых позиций API. Закрытая позиция исчезала → SELL не обнаруживался → запись навечно OPEN. Фиксы: 1) Sync проверяет символы из DB (OPEN записи) + positions API. 2) logOpenTrade: убран update:{}, защита CLOSED от перезаписи, обновление OPEN при partial fill. 3) FIFO matching qty-aware: SELL потребляет qty из BUY, weighted avg exit price. Результат: XRP Call закрытая сделка (+$0.43, ROI +60%) сразу появилась в журнале. Коммит 00c3a6c.


2026-04-14 — Bybit Bot: Per-coin Lockout + Global Circuit Breaker

Решение: Добавить защиту от каскадных стопов. Проблема: 56 сделок за день, 37 стопов. RIVER вошёл 5 раз подряд (4 SL), DRIFT 6 раз (5 SL). 10 стопов подряд за 2 часа сожрали -$14. Анализ: Без плохих периодов: WR 60%, PF 2.02, +$5.43. С ними: WR 34%, PF 0.68, -$8.65. Сигнал рабочий, проблема = каскадные стопы.

Фиксы:

  1. Per-coin lockout: _sl_streak dict, 2 SL подряд на монету → cooldown 1 час (вместо 5 мин). Сбрасывается при win или после истечения lockout.
  2. Global circuit breaker: _global_sl_times list, 3 SL за 15 мин → _circuit_breaker_until = now + 1 час. Scan блокируется. TG алерт.

Фиксы (продолжение): 3. EMA20 direction filter: slope за 3 свечи (15мин), >0.05% = up, <-0.05% = down. LONG при EMA↓ = skip, SHORT при EMA↑ = skip. Считается из тех же klines (0 API). 4. **ADX14 trend strength:** Wilder's smoothing, ADX > 25 = strong trend → skip ALL trades. MR не работает в тренде.

Анализ CHOP: все бакеты в минусе (45-49: -$4.61, 50-54: -$1.41, 55-59: -$1.09, 60+: -$0.62). Avg CHOP у winners=51, losers=50.5 — нет разницы. CHOP на входе не предсказывает исход. CHOP re-check отложен (нет time-series данных).

ADX убран (ADX_FILTER=False) — слишком лагает для обнаружения начала тренда. EMA direction достаточно. CHOP time-series добавлен: каждые 30с логируется CHOP в deal.chop_series (до 200 точек). Сохраняется в DCA_CLOSE log и dca_deals.json. Через 2-3 дня — анализ: падает ли CHOP перед стопами.

Trailing stop (14 Apr): MFE анализ 63 сделок: MFE<0.5% = 100% лоссы, MFE>1% = 64%+ WR. 15/40 лоссов (38%) имели MFE>0.5% — трейлинг спас бы их. Activation 0.8%, callback 0.5%. Логика: peak tracking через max_favorable_pct, exit когда drawdown_from_peak ≥ callback. Z-TP оставлен как фоллбек.

TODO: Найти замену ADX (Supertrend? DMI crossover?) для обнаружения начала тренда. Потестить трендовые стратегии как дополнение к MR.


2026-04-13 — Options Screener: Trading Stats + Trade Journal

Решение: Добавить журнал сделок и статистику на вкладку Trading. Проблема: Binance eAPI /eapi/v1/userTrades требует symbol — нельзя получить все сделки одним запросом. Решение: Локальная БД (Prisma TradeLog) + sync через позиции → userTrades per symbol → FIFO match. 6 шагов: Prisma модель → tradeLogger сервис → API endpoints → Binance sync → Stats Bar (11 метрик) → Journal таблица. Результат: 7 открытых позиций засинканы. Stats/Journal появятся после первых закрытых сделок.


2026-04-13 — Options Screener: Push Deep Link Fix

Решение: При клике на push-уведомление переключать на таб Signals. Проблема: Deep link /?signalId=xxx работал, но не переключал activeTab → если был на другом табе, сигнал не виден. Фикс: setActiveTab('signals') добавлен в deep link useEffect в App.jsx.


2026-04-13 — Options Screener: Signal Quality Overhaul

Решение: Переписать описания сигналов, добавить спот-анализ, фильтр для Gamma Play, улучшить Push.

4 изменения:

  1. Descriptions — формат "Что → Почему → Действие" для всех 7 типов сигналов (Buy Call/Put, Straddle, Strangle, Weekend Trap, UV, Gamma, IV Skew)
  2. Спот-анализ — EMA direction (↑↓→), change 1h/4h/24h добавлены во ВСЕ сигналы. В dashboard.js прокинут fetchSpotTrends() + передача в analyzeAllStrategies()
  3. Gamma Play фильтр — тренд-фильтр: CALL при EMA↓ = -15 conf, PUT при EMA↑ = -15 conf, подтверждение = +5. Skip если conf < 70. Theta warning с реальной суммой ($X.XX/день)
  4. Push-уведомления — actionable заголовки (📈 BTC — BUY CALL $95,000) вместо generic (🔥 BTC Buy Call (92%))

Результат: Gamma сигналы сократились с 5-6 до 2-3 (отсечены против тренда). Описания читаемы без знания опционного жаргона.

Коммит: e2929fc на ветке options-v2-upgrades TODO: TG алерты переформатировать (отложено)


2026-04-13 — Bybit Bot: DCA → Zvwap (pure MR, sweep-optimized)

Решение: Убрать DCA (Safety Orders), перейти на чистый Z-VWAP mean reversion с оптимизированными параметрами из sweep.

Sweep (8640 комбо, 7d+14d robustness):

Изменения:

Файлы: backtests/SWEEP_PLAN.md (полный план 10 шагов), analyze_report_7d.txt, robustness_report.txt

Post-launch fixes (same session):


2026-04-12 — Options Screener: Signal Reliability Overhaul + Backtest v2

5 фиксов надёжности сигналов:

  1. OI Data fix — Binance ticker не содержит OI. Добавлен fetchOpenInterest()/eapi/v1/openInterest по каждому underlying+expiry (33 combo, 1488 символов). Мержится в options перед кешированием.
  2. PCR по expiry — Buy Call/Put используют PCR конкретного expiry контракта вместо cross-expiry average.
  3. Contradiction penalty — -15 confidence если skew противоречит PCR (bullish PCR + bearish skew).
  4. Реалистичные TP — ITM 50%, ATM 80%, OTM 150%, Deep OTM 250% (было 80/150/250/400).
  5. Min confidence 75% — было 60%. Только качественные сигналы проходят.

Gamma Play dedup — один сигнал на underlying+expiry+strike (убрал CALL+PUT дубли). Фикс в scheduler.js и dashboard.js.

Outcome Tracker v2 — реалистичный option PnL: delta × spot_move / premium × 100. NEUTRAL (straddle): max(call, put) PnL. Пересчитано 1937 сигналов. Результаты: Buy Call avg +4.7%/4h (WR 21% но wins >> losses), Straddle/Strangle/Put 100% WR +0.8-1.6%/4h, Gamma +0.3%/4h (55% WR), UV +0.1%/4h (53% WR — шум).

Signal Logger fix — direction inference (Buy Call→BULLISH, Buy Put→BEARISH).

Qty input fix — onBlur validation вместо instant reset (можно стереть и ввести новое значение).

PWA Push — старые подписки удалены, пользователь переподписался, тест OK.

Коммит: 612398c, ветка options-v2-upgrades (21 коммит).


2026-04-11 — Options Screener: Dynamic TP/SL + PnL Calculator fix

Задачи:

  1. Dynamic TP/SL upgrade — Gamma Play: DTE-гранулярность (≤1d: 450%, ≤2d: 350%, ≤3d: 300%) вместо flat 300%. Whale ITM: 150%→200%. Time Stop для gamma (exit at 50% remaining DTE). DTE boost больше не double-applies к GAMMA. Коммит b3ccbd6.

  2. DRY dashboard.js — убран дублированный инлайн whale/gamma TP/SL, теперь использует getDynamicTargets() из strategies.js. Один источник правды.

  3. PnL Calculator fix — qty input: parseInt→parseFloat, step=0.01, min=0.01 (дробные контракты как на Binance). Коммит 774e19c.

  4. Trading API fix/eapi/v1/account (404) → /eapi/v1/marginAccount. MARKET ордера убраны (eAPI = LIMIT only). Qty validation min 0.01 step 0.01. Frontend: MARKET toggle убран, показывает "LIMIT ONLY". Баланс $90 подтверждён. Коммит 5105813.

Ветка: options-v2-upgrades, 20 коммитов.


2026-04-11 — Options Screener: Tier 2+3 complete (4 задачи за 1 сессию)

Задачи:

  1. 2.3 Custom Alerts — Prisma модели (CustomAlert + AlertTrigger), CRUD API 7 endpoints, alertChecker сервис с 10 метриками и 7 условиями (включая crosses_above/below), scheduler hook каждые 5 мин, TG + Push delivery, frontend таб. Коммит f8910e1.
  2. 2.4 Historical Signals Backtest — SignalLog модель, logSignals() в slow cycle (dedup 6ч), outcomeTracker заполняет spotAfter1h/4h/24h и directional PnL%, WIN/LOSS по 24h. API /api/backtest/stats + /api/backtest/signals. 14 сигналов залогировано с первого запуска. Коммит e12be00.
  3. 3.1 Semi-auto Trading — trading.js (signed Binance eAPI: placeOrder, cancelOrder, getPositions, getAccount), routes 7 endpoints, safety gate TRADING_ENABLED=false. Frontend: ⚡ Execute кнопка на сигналах → confirm modal (LIMIT/MARKET). Коммит 38ab281.
  4. 3.2 Position Tracker — Trading таб: позиции с live P&L/ROI%, ордера с cancel, account summary. Auto-refresh 15s. Коммит 38ab281.

Ветка: options-v2-upgrades, 16 коммитов всего. Все 3 тира (10 задач) завершены. TODO: TRADING_ENABLED=true когда Rick готов торговать. TODO (futures-screener): сделать аналог Historical Signals Backtest.


2026-04-11 — Bybit Bot: Z-cap 2.5 + Blacklist ARIA/SIREN/MAGMA

Проблема: Бот входил при Z > 3-4 (FFUSDT Z=4.75, ARIA Z=3.82) — это breakout, не mean reversion. Общий PnL -$31 за 371 трейд при WR 83.5%. Три худших монеты: ARIA (-$19.38), SIREN (-$10.80), MAGMA (-$6.22).

Решения:

  1. Z-cap = 2.5ZVWAP_MAX_THRESHOLD = 2.5, проверка abs(z) > 2.5 → skip перед entry. Лог "breakout, not MR".
  2. Blacklist: ARIAUSDT, SIRENUSDT, MAGMAUSDT (confirmed top 3 losers, 371 trades data).

Зачем: Z > 2.5 = цена далеко от VWAP, скорее momentum/breakout чем mean reversion. MR стратегия теряет edge.


2026-04-11 — Options Screener: Tier 1 complete + Tier 2 progress

Сессия: Завершены Tasks 2.1 (IV Surface) + 2.2 (Fast Updates) + 5 layout фиксов. Ветка: options-v2-upgrades — 12 коммитов (was feature/screener-upgrades, renamed). Следующий: Task 2.3 🔔 Custom Alerts (backend CRUD + scheduler check + frontend UI + TG).

Коммиты этой сессии:


2026-04-11 — Options Screener: Task 2.2 Fast Updates (30s cycle)

Решение: Разделил scheduler на два цикла:

Зачем: 5 мин задержка неприемлема для торговли опционами. Теперь цены/Greeks обновляются каждые 30 сек. Конфиг: FAST_REFRESH_MS / SLOW_REFRESH_MS через .env Ветка: options-v2-upgrades, коммит 04f5515


2026-04-11 — Options Screener: Upgrade Plan + Task 1.1 Trade Recommendations

Решение: Создан план апгрейда Options Screener v2 (3 тира, 10 задач) для превращения в полноценный инструмент торговли опционами на Binance.

Task 1.1 — Trade Signals с конкретными страйками:

Заметки: XRP/DOGE breakeven нереалистичен (низкая ликвидность), основные активы: BTC, ETH, SOL, BNB.


2026-04-10 — Bybit Bot: MaxSO 4→3 + SL 10%→8% + Greylist (RAVE/FARTCOIN/TAO)

Сессия 16:

Анализ TMM: 104 сделки после изменений (10 Apr), PF 1.35, WR 89.4%, PnL +$5.57. До изменений (8-9 Apr): 113 сделок, PF 0.49, PnL -$22.50. SL 10% решил проблему хвостовых лоссов (ARIA -$15, MAGMA -$10 больше не повторялись).

A/B бэктест (7 дней, 15 монет, 5m):

Решения:

  1. MaxSO 4→3 — меньше капитала на сделку ($25 vs $36), SO4 часто ловил SL всё равно

  2. SL 10%→8% — обрезает хвосты жёстче, PF выше

  3. TimeStop убран для SO4 (его больше нет)

  4. RAVE, FARTCOIN, TAO → GREYLIST (в BLACKLIST). Наблюдение — если перестанут лосить, вернём

    • RAVE: -$9.31 за 7д, хвостовые SL на NATR 1.7-2.3%
    • FARTCOIN: WR 47% — мемкоин, MR не работает
    • TAO: WR 50% — трендовый
  5. BO $5→$7 — освободившийся капитал от 4→3 SO пустили в увеличение базового ордера

  6. Баг SL/TP fix — при пропаже позиции бот всегда писал Reason=SL, даже если TP limit сработал. 75/122 сделок были неверно помечены. Фикс: проверка TP order status перед записью reason.

  7. Telegram сообщения — 📈/📉 для LONG/SHORT, 💰/💸 для win/loss, ROI от депа (не от invested)

Метрика отсчёта: 10 Apr 16:37 Vancouver (момент рестарта с новыми параметрами)


2026-04-10 — Bybit Bot: BO $3→$5 + Dust Fix + Бэктесты EMA/CHOP

Сессия 15 (продолжение):

1. Бэктесты EMA vs CHOP (4 скрипта):

2. BO $3 → $5:

3. Dust fix в close_full:

Live стата за первые ~4ч после SL10%+TimeStop+SOGuard:

Файлы бэктестов:


2026-04-10 — Bybit Bot: SL 10% + Time Stop + SO Guard

Проблема: 84.5% WR но -$27 total PnL. 5 хвостовых лоссов (-$40.39) убивали 196 побед. SL 15% давал слишком большие убытки на полных SOs ($5-$16 за сделку).

Изменения:

  1. SL 15% → 10% — режет макс убыток. SO spacing (NATR-based) автоматически обрезает SOs которые не помещаются (guard: deviation > 90% SL). При NATR 2%: только 2 SO вместо 4.
  2. Time Stop прогрессивный — 0 SO: без лимита, 1 SO: 3ч, 2 SO: 2ч, 3 SO: 1.5ч, 4 SO: 1ч. Закрывает market'ом. Ловит зависшие сделки типа MAGMA (141мин, 4 SO).
  3. SO Guard — 3+ SO за 15мин = force close. Ловит flash crashes/pumps. Трекинг через so_fill_times[] в DCADeal (персистится).

Решения: Time Stop и SO Guard проверяются в check_position() (каждые 5с) ДО проверки TP/SL. Телеграм нотификации для обоих. get_config() обновлён. SO guard обрезает SOs для волатильных монет автоматически через существующий guard cumul_deviation >= SL*0.9.


2026-04-10 — Futures Screener v5: Drawing Overhaul + Price Alerts + Roadmap

Фичи:

  1. Vertical drawing toolbar — перенесён с горизонтальной полосы внутрь графика слева, SVG иконки
  2. Horizontal Ray — заменил angled ray (single click, extends right, draggable)
  3. Hline drag fixjustDragged flag предотвращает деселект после drag'а
  4. Fib custom levels — ⚙ popup в draw panel: add/remove/reset уровни, persist глобально
  5. Drawings on mini-charts — hlines/rays/trendlines/fibs отображаются на маленьких графиках, refresh при закрытии модалки
  6. Price Alerts — 🔔 toggle на hline/ray, WS проверяет crossing по всем символам, toast notification bottom-right с инфо (монета, цена, направление), клик → открывает модалку, browser Notification API, cooldown 1мин
  7. Roadmap создан (/home/app/brain/projects/futures-screener-roadmap.md), частично одобрен Rick'ом

Решения: Ray стал horizontal (priceLine → lineSeries с 2 точками на 1 год вперёд). Events на draw panel блокируются stopPropagation (click/mousedown/mouseup/touch). Alert checker в WS onmessage, cooldown через Map. drawStore теперь сохраняет alert flag.

Дополнительно (сессия 14, продолжение): 8. 20,000 свечей — пагинация по 1500 через endTime loop (было 2500) 9. SVG иконки на метриках — mini-charts: vol (bar chart), NATR (zigzag), trades (grid) 10. Modal header redesign — все метрики с иконками inline в хедере (vol, NATR, trades, high▲, low▼), убраны дублирующие stats и links снизу

  1. Real NATR — заменён fake proxy (h-l)/l*100 на настоящий ATR(14)/close*100
  2. Server-side NATR endpoint/api/natr считает ATR(14) для топ-200 пар (batch fetch по 20, кеш 5мин), клиент fetchServerNATR() обновляет все карточки + re-sort DOM без пересоздания графиков

Коммиты: 12 штук за сессию


2026-04-09 — Futures Screener: Volumes, Drawing Tools, Search, Color Flags

Фичи добавлены:

  1. Volume bars на всех графиках (mini-charts + modal) с live WS обновлениями
  2. Drawing tools в модале: horizontal line (H), ray (R), trendline (T), fibonacci (F) — keyboard shortcuts, live preview, Delete для очистки
  3. Coin search — инпут в сайдбаре, фильтрация по названию в реальном времени
  4. Color flags — 7 цветов как в TradingView, localStorage, помеченные наверху
  5. Ruler improved — показывает время (m/h/d) рядом с ценой/процентом

Решения: Drawing tools реализованы через LightweightCharts API (priceLines для hline/fib, lineSeries для ray/trendline). Canvas overlay для live preview. Fib удаляется через группу priceLines.


2026-04-09 — Bybit Bot: NATR cap + CHOP filter + daily loss $50

Проблема: Пампы убивают PnL — RAVE -$5.85 (NATR 3.06%), MAGMA -$9.24 (NATR 2.16%), ARIA -$17 (прошлая сессия). Анализ: 130 сделок с ретроспективным CHOP(14) расчётом через Bybit klines.

Результаты NATR: Sweet spot 1.0-2.0% (WR 100%, +$6.33). Низкий <0.75% зависает (WR 74%, -$5.52). Высокий >2.5% = пампы (RAVE/SIREN, -$7.38). Результаты CHOP: Sweet spot 50-60 (WR 97%, +$8.26). Тренды <45 убыточны (WR 72%, -$5.21). CHOP 60+ тоже опасен (ложный рейндж перед пампом).

Решения:

  1. NATR min 0.5% → 0.75% (отсекает зависающие)
  2. NATR max 2.5% (новый, отсекает пампы)
  3. CHOP >= 45 (новый, только рейндж для MR)
  4. Daily loss $20 → $50 (деп $190, старый лимит тесный)

TODO (следующая сессия): SO guard (3+ SO за 15мин → close), Time stop 3ч (PnL<0 → close), Trailing.

Файлы: src/strategies/dca_zvwap.py, .env


2026-04-09 — Bybit Bot: 3 bugfixes (SO IDs persist, TMM non-blocking, close_full safety)

Баг 1: _so_order_ids не сохранялись на диск → после рестарта SO fills невидимы, avg/TP/SL не обновляются. Фикс: Добавлены в to_dict()/from_dict(), ключи int↔str конвертация.

Баг 2: TMM retry_pending_tags() + on_dca_close() + on_dca_so_filled() использовали time.sleep() и requests синхронно → event loop блокировался на 3-10с, software SL и мониторинг не работали. Фикс: asyncio.to_thread() для retry, run_in_executor() для close/SO fill TMM вызовов.

Баг 3: close_full() мог вернуть None (сеть, API) без exception → deal удалялся, поза оставалась без SL/TP. Фикс: Проверка result is None → re-activate deal, retry next cycle.

Файлы: src/strategies/dca_zvwap.py


2026-04-09 — Bybit Bot: Software SL + Exit fee fix (ARIA incident)

Контекст: ARIA LONG упала на 40%, SL стоп-ордер на бирже не сработал (slippage/flash crash на тонком стакане). Убыток -$17 при макс ожидаемом -$3.23. Бот полностью полагался на биржевой стоп.

Фиксы:

  1. Software SL fallback — в check_position(): если unrealized loss > SL%, закрыть маркетом немедленно (каждые 5с). Не зависит от биржевого стопа. Event: "SW-SL" + TG алерт.
  2. Exit fee fix_estimate_pnl() получил параметр exit_type: "limit" (maker 0.02% для TP%) или "market" (taker 0.055% для Z-TP/SL/SW-SL). Раньше всегда считался maker → PnL был завышен на ~$1.5-2/48ч.

Отменённые фиксы (по решению Rick'а): NATR cap 2.0% и ARIA blacklist убраны — оставляем свободный вход.

Также: Binance Grid Bot остановлен (сливал). Позы STO+JOE закрыты через nuclear_cleanup(). Деп +$70 перелит на Bybit. Слоты 4→6. Деп ~$190.

Файлы: src/strategies/dca_zvwap.py (check_position, _estimate_pnl, config)


2026-04-08 — Bybit Bot: Deals Persistence to Disk

Контекст: При рестартах PM2 терялись метаданные сделок (Z-score, NATR, Vol, MaxDD, created_at). Recovery создавал cold deals с нулями → кривые TMM descriptions, некорректная оценка SO.

Решение: Сохранение deals в data/dca_deals.json (atomic write: tmp+rename). _save_deals() вызывается после entry, SO fill, close, recovery merge. При старте: _load_deals() → merge с биржей → stale cleanup.

Баг-фикс: В recover_deals Position() использовал trade_id из локальной переменной (не определена для disk-loaded deals) → заменено на deal.trade_id.

Файлы: src/strategies/dca_zvwap.py (to_dict, from_dict, _save_deals, _load_deals, recover_deals)


2026-04-08 — Bybit Bot: Recovery SO accumulation + Max deals bypass

Контекст: 1) Каждый рестарт сбрасывал SO count на 0 → recovered deals получали свежие SO лимитки → бесконтрольное накопление (EDGE: 78 контрактов). 2) scan() возвращал 2 сигнала одновременно → on_signal() открывал оба → 5 позиций при макс 4.

Фикс 1: В recover_deals() — оценка filled SOs по размеру позиции: qty / cumulative_expected_qty. Заполненные SO помечаются filled=True, новые лимитки не ставятся.

Фикс 2: В on_signal() — re-check len(self.deals) >= SCREENER_MAX_DEALS перед открытием.

Файлы: src/strategies/dca_zvwap.py (recover_deals, on_signal)


2026-04-08 — Bybit Bot: TMM tags & descriptions final fix

Контекст: DCA тег пропадал (POST /tags перезаписывал), close desc затирал entry данные, SO desc затирал entry, Grid Bot сделки вытесняли DCA из top-20 results.

Фиксы:

  1. tag_trade_both() — оба тега (DCA + L/S) в одном POST (не перезаписывают друг друга)
  2. Close desc — теперь включает entry индикаторы (NATR, Vol) для анализа
  3. SO fill desc — сохраняет entry инфо (Z, NATR, Vol) + добавляет SO данные
  4. itemsPerPage: 20→100 — Grid Bot генерил 50+ сделок, DCA не находились в top-20

Файлы: src/utils/tmm_client.py (tag_trade_both, on_dca_so_filled, on_dca_close, find_recent_trade), src/strategies/dca_zvwap.py (передача natr/vol/z в TMM вызовы)


2026-04-08 — Bybit Bot: Recovered deals теперь получают SO лимитки

Контекст: Recovered deals получали только SL + TP, но НЕ SO лимитки. ALGO вышел -$0.03 при MaxDD -2.3% без единого SO. NEAR сидел -2.5% тоже без SOs.

Решение: Добавлен await self._place_safety_orders(deal) в recover_deals().

Файлы: src/strategies/dca_zvwap.py (recover_deals)


2026-04-08 — Bybit Bot: TMM 6 bugfixes (hardcoded values + recovered tagging)

Контекст: TMM descriptions содержали hardcoded значения ($5 BO, MaxSO=2, SOs/2) после изменения config. Recovered deals не тегались → close description не записывался.

Фиксы:

  1. Entry desc BO=$5|MaxSO=2 → из config params (bo_usd, max_so, leverage)
  2. Close desc SOs=/2 → из config param max_so
  3. SO fill TP calc BUY-only → учитывает side param
  4. tp_pct=1.5 hardcoded → из config DCA_TAKE_PROFIT_PCT
  5. Новый on_dca_recovered() — тегает recovered deals (DCA + L/S + "Recovered" desc), window 7 дней
  6. retry_pending_tagswindow_ms из pending item (не hardcoded 5мин)

Файлы: src/utils/tmm_client.py, src/strategies/dca_zvwap.py (вызовы on_dca_entry/so_filled/close + recover_deals)


2026-04-08 — Bybit Bot: NATR-based SO Spacing + Capital Resize

Контекст: SO spacing было фиксированным (1.5% × step_scale^n). С 4 SO, SO4 попадал на 9.94% — всего 0.06% от SL (10%). Rick предложил spacing от NATR чтобы адаптироваться к волатильности каждой монеты.

Решение: spacing = NATR × factor(1.0) × step_scale(1.3)^n

Пример (NATR=2%): SO1@2%, SO2@4.6%, SO3@7.98%, SO4@12.37% — все далеко от SL 15%. Пример (NATR=0.5%): SO1@0.5%, SO2@1.15%, SO3@1.99%, SO4@3.09% — тесно, TP 1.5% покрывает.

Capital: $3 + $3 + $3.9 + $5.1 + $6.6 = ~$21.6/deal, 4 deals = ~$86. Dep ~$120.

Файлы: src/strategies/dca_zvwap.py (DCADeal.init SO calculation)


2026-04-08 — Bybit Bot: TP Limit Orders (maker fee, instant fill)

Контекст: Бот использовал mark price polling (5s) + market close для TP. Rick заметил что позиция +1.5% но бот не закрывает — потому что mark price ≠ last price. Также market = taker fee (0.055%).

Решение: TP как reduce-only limit order на бирже.

Выгода: мгновенный fill по точной цене + maker fee 0.02% вместо taker 0.055% = экономия 0.035% на каждом TP.

Файлы: src/strategies/dca_zvwap.py (DCADeal.tp_order_id, _place_tp_limit, check_position, _update_exchange_orders, recover_deals)


2026-04-08 — Bybit Bot: TMM Tags + Analytics Descriptions + MaxDD + TG Messages

Контекст: TMM теги были неинформативны (DCA.ZVWAP + DCA.COIN дублировали). Description не содержали данных для оптимизации.

Решения:

  1. Теги: Col10=DCA (стратегия), Col1=L/S (направление) — чисто, фильтруемо
  2. Entry desc: Z, NATR, Vol 24h, deals open, balance — всё что нужно для анализа "при каких условиях лучше входить"
  3. Close desc: PnL, ROI%, MaxDD%, Z entry→exit, SOs, invested — для анализа "какие сделки прибыльнее"
  4. MaxDD tracking: max_dd_pct в DCADeal, обновляется каждый check_position tick (5s)
  5. DCADeal metadata: natr_entry, volume_24h, deals_at_entry, balance_at_entry
  6. TG сообщения: компактнее, с ROI% и MaxDD
  7. Volume: из скринера → Signal metadata → DCADeal → TMM

Файлы: tmm_client.py, dca_zvwap.py


2026-04-08 — Bybit Bot: Audit Round 2 — 5 more fixes

Контекст: Глубокий аудит всего кода bybit-бота.

Фиксы:

  1. _check() мог вернуть None если Bybit отдал result: nullor {} guard
  2. _cooldowns + _last_z dicts росли бесконечно → cleanup каждые ~10мин в monitor loop
  3. Order status case sensitivity ("Filled" vs "FILLED") → .upper() == "FILLED"
  4. Silent except: pass при cancel orders в recovery → добавлено логирование
  5. del self.deals[symbol] без проверки → safe if symbol in self.deals (race condition guard)

Файлы: src/exchange/client.py, src/strategies/dca_zvwap.py

Не фиксили (осознанно):


2026-04-08 — Bybit Bot: 3 Bugfixes (rate limit, TMM close, float(''))

Контекст: Логи показали 3 повторяющихся бага:

  1. Bybit rate limit 10006 на klines — скринер слишком быстро (0.15s между запросами)
  2. TMM couldn't find trade to update close desc_find_tagged_trade() имел пустой loop + find_recent_trade пропускал тегированные трейды
  3. float('') crash на get_order_status — Bybit возвращает пустую строку вместо "0"

Фиксы:

Файлы: src/exchange/client.py, src/utils/tmm_client.py, src/strategies/dca_zvwap.py


2026-04-08 — DCA Z-VWAP: Capital Sizing Analysis + Config Sync

Контекст: Обсуждение sizing для 4 параллельных сделок. Скилл был устарел (показывал Max SOs=4, SL=10%, Max Deals=2 — в коде давно 2/5%/4).

Живой конфиг: BO $5 + SO1 $7 + SO2 $9.10 = $21.10/deal, 4 deals = $84.40, деп $87 (впритык).

Решение: Без RSI. Пока не меняем sizing — сначала собираем live-данные по альтам из динамического скринера. Бэктест данные (BTC/ETH/SOL) нерелевантны — эти монеты в блэклисте, реальные сделки на мелких альтах (MUSDT, PIPPINUSDT и т.д.).

Обновлено: скилл bybit-trading-bot (DCA config таблица), MEMORY.


2026-04-07 — Bybit Bot: Унаследованный env от Bender (ГРАБЛИ!)

Проблема: bybit-bot был запущен через PM2 из cwd=/home/app/claude-code-telegram/ (директория бендера). Процесс унаследовал env-переменные бендера, включая TELEGRAM_BOT_TOKEN. python-dotenv НЕ перезаписывает уже существующие env-переменные → токен из .env bybit бота игнорировался → сообщения шли через бендера, конфликт get_updates.

Фикс: pm2 delete старый процесс с грязным env → пересоздать с правильным cwd и чистым окружением → pm2 save.

Правило: НИКОГДА не запускать PM2 процессы из чужой директории. Всегда проверять cwd процесса. Если env унаследован — delete + start заново, не restart.


2026-04-07 — Grid Bot v2.4: Inventory Management Overhaul

Контекст: Ночная сессия 6-7 Apr: $100 деп → $89.85 (-$10.15). 159 RT но inventory losses ($18.91 MAX LOSS + $6.20 partial close) съели всю прибыль.

5 фиксов (config.py, grid_manager.py, main.py):

  1. Inventory thresholds ужесточены:

    • WARN: 4→3, MAX: 8→6, UNSTUCK: 6→4, CLOSE_PCT: 25→50%
  2. Hard inventory cap реально работает:

    • _should_block_side() теперь отменяет ордера на стороне, увеличивающей imbalance при imb≥6
    • Раньше всегда return False (мёртвый код)
  3. Unstuck без EMA gate:

    • Убрана проверка dist_pct < spacing * 2 — она НИКОГДА не срабатывала (0 unstuck за ночь)
    • Теперь unstuck триггерится при imb≥4 безусловно
  4. Breakout cooldown 30 мин:

    • EDGEUSDT открывался/закрывался 15 раз за 15 мин (breakout loop)
    • Добавлен _breakout_cooldown dict, символ исключается на 30 мин после breakout close
  5. Partial close агрессивнее:

    • Формула: (excess + 1) // 2 вместо excess // 2 (ceil vs floor)
    • При imb=5: закрываем 2 вместо 1

Баланс до: $89.85 | Ключевые лоссеры: PLAYUSDT -$8.35, REDUSDT -$5.13, BULLAUSDT -$5.43×2


2026-04-07 — Grid Bot v2.3: Critical Bugfixes + TMM

Проблема 1: Partial close оставлял позу без защиты close_position_market() внутри себя вызывал cancel_all_orders() → все ордера отменялись, а грид не переставлялся. Позиция висела голая без лимиток = риск ликвидации. Фикс: setup_grid() после каждого partial close/unstuck. Центр = текущая цена.

Проблема 2: TMM теги через раз Два тега (strategy + coin) = 2 API вызова. При быстрых RT'шках rate limit не давал найти трейд. Фикс: один combined тег Grid.RED / Grid.SUPER. Retry 8 попыток × 20 сек (было 5×30).

Первые live результаты (ночная сессия):


2026-04-06 — Grid Bot v2 LIVE: Session Grid + Dual Parallel

Решение: Запуск grid bot v2 live на Binance Futures, $100 деп (50+50), 2 параллельных грида.

Ключевые v2 изменения от v1 архитектуры:

  1. ATR-adaptive spacing 0.3-0.5% (было фикс 0.1%) — формула ATR/price1000.55
  2. Leverage 5x (было 10x) — меньше риск
  3. CHOP Index — главный фильтр входа (≥50 = рейндж). ADX убран из hard filter (конкурировал с CHOP)
  4. MV hard filter ≥65 — Micro-Volatility, кол-во пересечений уровней. ZEC с MV=47 дал 0 RT, STO с MV=118 дал 9 RT/час
  5. EMA trailing center — drift threshold 6 (было 3), БЕЗ market close позиции при recenter
  6. Passivbot unstucking — close 25% excess at EMA bands (threshold 6)
  7. MAX_CONCURRENT_GRIDS=2 — параллельная торговля двух монет
  8. TMM descriptions — entry indicators (CHOP, ADX, BB, MV, NATR, Score, Spacing) в каждом RT
  9. NATR добавлен в скринер, TG нотификации и TMM

Проблемы найдены и пофикшены:

Первые live данные:

Deferred:


2026-04-06 — Grid Bot: Research + Architecture Design

Backtest Research (25 монет, 7 дней + 30 дней на топ-3)

Параметры: $50 деп, 10x leverage, $3/ордер, 8 уровней, spacing 0.1%, maker fee 0.02%, 1m TF. Топ-5 (7 дней): ENA +$108.84 (218%/wk), PENGU +$57.95 (116%), NEAR +$53.86 (108%), WLD +$52.24 (104%), UNI +$37.91 (76%) Топ-5 (30 дней): ENA +$413.23 (103%/wk), PENGU +$239.16 (60%/wk), NEAR +$229.16 (~57%/wk) — ВСЕ ДЕРЖАТ Мелкие альты (ONG/AIOT/STO): огромный профит но дикие — 400+ max_loss стопов, 18K+ трейдов Проигравшие: BTC (-$73.62 💀), SUI, TRX, BCH, CAKE Smart Grid (BB squeeze + gradual unwind): ПРОВАЛ на всех монетах — хороним Файлы: backtests/backtest_grid.py, results_grid.json

Architecture Decision

Биржа: Binance Futures (первый тест), потом Bybit Стратегия: Бесконечный грид с авто-ротацией монет Скринер: авто-выбор лучшей монеты каждые 5 мин (BB width, ADX, volume, grid score) Сессии: Event-driven — грид работает пока рейндж, breakout → скринер ищет новую монету Risk: Moderate — 3% max loss/grid, 10% daily limit, circuit breaker 5 стопов → 30мин пауза Прибыль: Воскресный чекпоинт 21:00 Vancouver — 50% профита снимаем, 50% реинвест TMM: Мульти-теги: Column 10 = Grid.v1 (стратегия), Column 1 = монета (ENA/NEAR/etc) Telegram: Только ключевые: смена монеты, закрытие сессии, circuit breaker, daily/weekly сводка Код: Переиспользуем exchange.py, tmm_client.py, telegram.py из wt-bot-v3. Новый grid_manager.py + screener.py + risk_manager.py Путь: /home/app/trading-bot/grid-bot/


2026-04-06 — Futures Screener: Mini-Charts v3 Full Redesign

Решение: Переделать Mini-Charts в полноценный рыночный скринер (Coinalyze/TradingView стиль). Было: 12 чартов в auto-fit grid, TF на каждом чарте отдельно, нет списка монет, статичные данные. Стало (за 1 сессию, 5 коммитов):

  1. Виртуальный скролл — IntersectionObserver, ALL USDT пары (не 6), создаёт/удаляет чарты при скролле
  2. 2-фазная загрузка — 100 свечей мгновенно → 500 догружаются в фоне (без визуального прыжка)
  3. Live WebSocket — browser→Binance kline stream, подписка только видимых, auto-reconnect
  4. Binance proxy — Fastify, ticker24hr кеш 30с, klines кеш 10с (+ retry 3x)
  5. Coin modal — полный чарт + stats + links (Binance/TV/CoinGlass), live WS, TF переключение
  6. UI polish — dark terminal, compact 48px header, shimmer загрузка, 4-col wide, tabular-nums
  7. Split — app.js → densities.js (663 lines) + mini-charts.js (780 lines)
  8. Фильтры — Volume ≥$10M–$500M, NATR ≥1%–5%, Trades ≥10K–500K
  9. Frozen pairs — отфильтрованы по closeTime age (>1h)
  10. Price precision — getPricePrecision() 2–8 decimals по magnitude Файлы: app/densities.js, app/mini-charts.js, app/index.html, app/styles.css, server/index.js Скилл обновлён: /home/app/skills/futures-screener/SKILL.md

2026-04-06 — WT Bot v3.7: TP1↑, Trail↑, Blacklist, Circuit Breaker

Решение: Тюнинг WT стратегии на основе анализа 136 сделок (Apr 1-6). Проблема: WR 40%, PnL -$9.45, 18 лоссов подряд, avg winner слишком низкий. Изменения:

  1. TP1 1.0% → 1.5% — увеличить avg winner (был +$1.22, нужен >$1.40)
  2. Trail callback 0.7% → 1.2% — слишком тесный, выбивал раньше чем надо (avg trail +$0.47 vs old TP +$1.40)
  3. Blacklist +3: BANKUSDT (0% WR, -$5), NOMUSDT (22% WR, -$4.79), LITUSDT (0%, -$3)
  4. Circuit Breaker: 3 лосса подряд → пауза 30мин + Telegram уведомление
  5. close_position reduceOnly=True — fix зависания 1-контрактных остатков (<$5 notional) Файлы: config.py, manager.py, exchange.py Ожидание: WR не изменится, но avg winner ↑ и серии лоссов укоротятся → breakeven или +

2026-04-05 — Заточки: Backtest passed, начинаем имплементацию

Решение: Заточки на 1m (не 5m!), Squeeze на паузу, параметры v2a. Бэктест итоги (4 прогона):


2026-04-05 — Новая стратегия "Заточки" (Knife Catcher) — ПЛАН

Решение: Добавить стратегию в squeeze-vwap-bot на Bybit — volume exhaustion reversal. Суть: Спайк объёма (>7x) + цена перетянута (>2% от VWAP) + RSI экстрем + объём иссякает (2 declining свечи) + OI падает (ликвидации) → вход в контр-тренд. TF: 1m. TP1 0.7% (50%) + trail 0.5%. SL = dynamic + cap 1.2%. Архитектура: Sole strategy (Squeeze paused). Отдельный screener (60s scan), manager, positions file. Shared exchange/telegram/TMM. TMM tag: "Zatochki" | Telegram: 🔪 ЗАТОЧКИ Скилл: /home/app/skills/zatochki/SKILL.md


2026-04-04 — Screener Filters: NATR/5m + Volume (data-driven)

Решение: Добавить NATR/5m >= 1.2% в оба бота. Поднять MIN_VOLUME на WT до 50M. Squeeze volume не трогать. Причина: TMM анализ NATR/Volume/Range по всем сделкам:

NATR/5m:

Volume (WT Bot, 117 trades):

Volume (Squeeze, 129 trades) — ОБРАТНАЯ картина:

Range/24h (анализировали, решили НЕ добавлять):

Config:


2026-04-04 — WT Bot v3: TP1 Partial + Trailing (v3.5)

Решение: Заменить фиксированный TP 3% на TP1 1.0% partial (50%) + trailing stop на остаток. Причина: TMM анализ 154 сделок показал:

Новая логика:

  1. Вход → SL -2% (100% qty) + TP1 +1.0% (LIMIT, 50% qty)
  2. TP1 hit → закрыли 50%, SL → breakeven (entry), trailing start
  3. Trailing: track best price, callback 0.7% от пика → close rest маркетом
  4. Если SL раньше TP1 → обычный стоп -2% на 100%

Сценарии PnL:

Config: TP1_PCT=0.01, TP1_CLOSE_RATIO=0.5, TRAIL_CALLBACK_PCT=0.007 Файлы: config.py, manager.py (Position fields: tp1_hit, trail_high, original_qty) Замер стату с: 4 Apr 2026, ~12:48 UTC


2026-04-04 — Squeeze-VWAP Bot: TP1 Partial + Trailing (v2)

Решение: Добавить TP1 1.2% partial (50%) + trailing stop 0.7% на остаток. Dynamic TP (Z-VWAP) работает на оставшихся 50% после TP1. Причина: MFE анализ 112 сделок TMM (Bybit key #276474):

Config: TP1_PCT=0.012, TP1_CLOSE_RATIO=0.5, TRAIL_CALLBACK_PCT=0.007 Файлы: config.py, manager.py (Position fields: tp1_hit, trail_high, original_qty) Замер стату с: 4 Apr 2026, 16:07 UTC


2026-04-04 — Squeeze-VWAP Bot: Fix position sizing on capped leverage

Проблема: SIREN max leverage 5x, бот хотел 10x → position_size = $5 × 5 = $25 вместо $50. Фикс: target_notional = TRADE_SIZE_USD * LEVERAGE (всегда $50), qty = notional / price. Маржа автоматически увеличивается при кэпе leverage. Файл: manager.py


2026-04-03 — WT Bot v3: Неправильные параметры WaveTrend (9/12/3 → 10/21/4)

Проблема: Бот открыл TAGUSDT LONG с WT1=-45, WT2=-47, но на TradingView LazyBear показывал WT≈20. Сделка не должна была открыться — WT не был в зоне oversold (<-50) на TV. Корень: Параметры WT были 9/12/3 вместо настоящих TV LazyBear дефолтов 10/21/4. С коротким Avg Length (12 vs 21) WT более дёрганый, показывает экстремальные значения там где на TV сигнала нет. Ошибка в предыдущем коммите (3 Apr) — написали "TV defaults 9/12/3" но это неверно. Фикс: config.pyWT_CHANNEL_LEN=10, WT_AVG_LEN=21, WT_MA_LEN=4 Результат: Показания бота теперь совпадают с TV LazyBear. Меньше ложных входов, сигналы только на реальных экстремумах.


2026-04-03 — Squeeze-VWAP Bot: v3 Scoring Fix (Вариант Г)

Проблема: После v2 tuning (тот же день) бот перестал входить в сделки. Score max 4, histogram diverge давал -1, Waddah нейтрал 0 → score почти никогда не добирался до 3. Бот сканировал, но не торговал. Статистика перед фиксом: 50 сделок, 20W/30L, WR 40%, PnL -$2.41 (TMM key 276474). Решение (Вариант Г):

  1. Histogram diverges: -1 → 0 (штраф убивал сетапы, diverge WR 20% — плохо, но penalty слишком жёсткий)
  2. Waddah DIVERGES: 0 → +1 (слабый тренд = друг MR, WR 86% — подтверждено данными) Score: range 0-5 (было -1-4). Entry ≥3. Больше путей: Z+Hist+ADX, Z+WadDiv+ADX, Z+Sqz+Hist, Z+Sqz+WadDiv Файлы: indicators.py (calc_combo_signal), SKILL.md Ожидание: Больше сделок с сохранением/улучшением WR. Мониторим.

2026-04-03 — WT Bot v3: TV LazyBear params + zone lookback fix

Проблема: WT params были 10/21/4 (lagging), TV LazyBear использует 9/12/3. Entry logic имел persistent zone flag — WT вошёл в зону, флаг оставался навсегда, входы происходили 50+ баров после выхода из зоны ("в середине, на краях но не в зонах"). Решение: Параметры → TV defaults 9/12/3. Persistent zone flag → zone lookback (cross must happen IN zone or within 3 bars of leaving). Убран WT_MAX_EXTREME фильтр (был на старых params). Создан Pine Script strategy для визуального тестирования на TV. Файлы: config.py (params), manager.py (entry logic), pinescript/WT_Bot_v3_Strategy.pine (new) Результат: Pine Script показывает значительно лучшие входы, совпадающие с TV LazyBear визуально


2026-03-20 — Obsidian Second Brain

Решение: Создать Brain vault на сервере в /home/app/brain/ Причина: Бендер пишет заметки → git sync → Obsidian на телефоне Альтернативы: Notion (платный), Confluence (тяжёлый)


2026-03-20 — Git Brain Sync

Решение: Auto-sync brain vault → GitHub claude-brain каждые 5 минут (systemd cron) Причина: Память должна переживать сессии; GitHub как backup + Obsidian sync Скрипт: /home/app/brain-sync.sh


2026-03-20 — PM2 вместо Docker

Решение: PM2 как process manager Причина: Проще, меньше overhead, достаточно для текущего масштаба Статус: Финально


2026-03-23 — AlphaPulse v8.0 Architecture

Решение: Модуляризация бота (1 файл → 9), AI personality system prompt, affiliate rotation Причина: Монолит bot.py стал нечитаемым; AI был generic; нет монетизации Результат: v8.0 — 9 модулей, 8 типов контента в расписании, smart polls, weighted affiliate Скилл: /home/app/skills/alphapulse-bot/SKILL.md


2026-03-26 — LiteSpeed Cache: управление настройками через скрипт

Решение: Менять настройки LiteSpeed Cache программно через WP-admin form POST Проблема: Rick не должен лезть в админку вручную — Бендер может сам за 5 мин Скрипт: /home/app/piewell.com/scripts/fix-litespeed-js.cjs

Грабли (чтоб не повторять):

  1. LSCWP_CTRL=save-settings — ОБЯЗАТЕЛЬНОЕ скрытое поле. Без него форма "сохраняется" (200 OK, текст "saved") но НИЧЕГО НЕ МЕНЯЕТ. Потратили кучу времени на это.
  2. _settings-enroll[] — массив имён полей, которые LiteSpeed должен обработать. Без них поля игнорируются.
  3. Nonce: поле LSCWP_NONCE (НЕ _wpnonce), брать с текущей страницы
  4. Purge cache после изменений: GET /wp-admin/index.php?LSCWP_CTRL=purge&LSCWP_NONCE={nonce}&litespeed_type=purge_all
  5. Проверка: delayed скрипты имеют type="litespeed/javascript" вместо обычного text/javascript

Паттерн авторизации (WP Hostinger):

1. POST /wp-login.php (log, pwd, wp-submit, testcookie)
2. Собрать cookies из set-cookie (wordpress_logged_in + wordpress_sec)
3. GET нужную admin страницу с cookies
4. Вытащить nonce из HTML
5. POST форму с cookies + nonce + все поля

Что сделано (26 Mar):

Урок: Не предлагать Rick ручные инструкции, если можно автоматизировать. Ему 2 дня, мне 5 минут.


2026-03-24 — Piewell SEO Audit & Fix Plan

Решение: Системный SEO аудит всех 68 статей, план исправления в 4 фазы Причина: 0 кликов, все позиции 70–100. Главная проблема — каннибализация (16 статей в 8 парах конкурируют друг с другом) План: Phase 1 (titles/meta) → Phase 2 (merge 8 дублей) → Phase 3 (quality) → Phase 4 (new content) Скилл: /home/app/skills/piewell/SKILL.md


2026-03-24 — Traffic Arbitrage: Утилиты/Extensions CPI

Решение: Вариант Б — Утилиты и Browser Extensions через PopAds/PropellerAds Popunder Причина: Долгоиграющая связка (месяцы, не дни). VPN/Adblock = evergreen спрос, не выгорает как свипы. Альтернативы отвергнуты: Sweepstakes (выгорает за 3 дня), Gambling (дорого), Nutra (комплаенс) CPA сеть: CIPIAI глючит рега → Adsterra CPA (план А, акк есть!) + Monetizer (48ч) + CpaRoll (дома). Mobidea — нет нужных офферов. Офферы: Opera One CPI ($0.80–$2.40 WW), AdsBlocker CPI ($0.79 BE/FR/NL), + что найдётся на Adsterra Prelander'ы: 6 штук (3+3), A/B сплит, разные подходы (scan/speed/review/before-after/youtube) Блокеры: Adsterra CPA офферы (Rick глянет дома) + отдельный домен для лендов


2026-03-28 — Trading Signal Bot v1.0

Решение: Создать бота-мониторинга крипто-сигналов из Telegram каналов Архитектура: Web scraping t.me/s/ → Binance Futures data → WaveTrend Oscillator → Alert Bot Ключевые решения:

  1. Без userbot — Telegram блокировал Telethon авторизацию, риск бана → веб-скрейпинг (безопасно)
  2. Отдельный бот @alert_rick_bot — не засирать чат с Бендером
  3. Только фьючи — спот позже на старших ТФ
  4. WaveTrend Oscillator — LazyBear (TradingView 57K лайков), cross + zone = главный сигнал
  5. История сигналов — signal_history.json, подготовлено для outcome tracking

PM2: signal-listener | Скилл: trading-signal-bot Roadmap: больше индикаторов → outcome tracking → AI графики → публичный канал → автотрейд


2026-03-29 — Trading Bot v2.0: Auto-Trading

Решение: Апгрейд бота до авто-трейдинга на Binance Futures Ключевые решения:

  1. Real money сразу — $50 депозит, $10/trade, 5x leverage (без testnet)
  2. Variant C Hybrid — SL -1.5%, TP1 +2% (50%), TP2 +3% (25%), TP3 +5% (25%) с trailing SL
  3. SKIP_TICKERS — 21 тяжёлая монета исключена (BTC, ETH, XRP, SOL...)
  4. Commission-adjusted PnL — 0.04% taker fee учитывается

2026-03-29 — Trading Bot v2.1: Quick Take Scalper

Решение: Добавить вторую параллельную стратегию — автоматический скальпинг Причина: WT стратегия ждёт сигналов, хотел "забирать часто по чуть-чуть" с высоким WR Ключевые решения:

  1. 4 индикатора (ALL must be true) — BB(20,2) + RSI(7) + Volume(1.5x) + EMA(100)
  2. Mean reversion — вход при экстремумах, выход +1%
  3. Completed candles onlyklines[:-1], последняя свеча не закрыта → неточные данные
  4. Time stop 30 min — не держать позицию если не двигается
  5. Отдельная система позиций — не конфликтует с WT, skip общих символов
  6. Per-strategy PnL/pnl показывает WT и Scalp раздельно
  7. WIN = TP1+ hit — хотя бы 1 тейк = победа (для WT)
  8. Watchlist persistence — файл watchlist.json, выживает рестарты
  9. External close detection — каждые 3с проверяет Binance, если закрыто руками → cleanup
  10. Digash postponed — парсер готов но подписка отложена

2026-03-29 — Trading Bot v2.2: Gerchik Levels (3-я стратегия)

Решение: Добавить третью параллельную стратегию — торговля от уровней по методологии Герчика Причина: WT ждёт внешних сигналов, Scalp берёт mean reversion. Gerchik = price action от S/R уровней с R:R 3:1+ Ключевые решения:

  1. 4 модели одновременно — A (Отбой), B (Ложный пробой), C (Сложный ЛП), D (Пробой). Приоритет: C > B > A > D
  2. Уровни на 1H (500 свечей) — swing high/low кластеризация, min 3 касания, scoring 0-100
  3. Паттерны на 15m — детекция моделей на младшем ТФ
  4. Strength scoring — touches×10 (max 50) + mirror (+20) + round number (+10) + false breakout survived (+15) + recency (0-15)
  5. R:R minimum 3:1 — TP1=3×SL (50%), TP2=4×SL (25%), TP3=5×SL (25%). SL за уровень + 0.1% буфер
  6. BE trigger — SL→BE после 2× SL distance в профите
  7. Nearby alerts — при подходе цены к сильному уровню (≤0.5%, strength≥40) → Telegram уведомление
  8. Limit orders — вход через limit order с 0.02% улучшением цены, таймаут 10 секунд с fallback на market order. Maker fee 0.02% экономит vs taker 0.04%. trader.py: open_limit_order(), cancel_order(), get_order_status()
  9. Daily risk limit — отложен, обсудим позже
  10. Scan: top 50 USDT futures по объёму (>$50M), ATR(14)>0.5%, каждые 5 мин

Файлы: gerchik_config.py, gerchik_levels.py, gerchik_models.py, gerchik_scanner.py, gerchik_manager.py Команды: /gerchik /gr, /gc SYMBOL, /levels SYMBOL


2026-03-29 — Trading Bot: Fill Price вместо Mark Price для PnL

Решение: Все TP/SL хэндлеры (scalp_manager + position_manager) используют реальный avgPrice из Binance order response вместо mark price Причина: На волатильных монетах (PLAY) проскальзывание SL: бот показывал -0.91% а реально -2.24%. Итого PnL завышался на $0.43 за 3 сделки Что изменено: _close_position(), _handle_sl(), _handle_tp1/2/3() — все берут fill_price из close_full()/close_partial(). Логируется slippage_pct, mark_price. В Telegram ⚠️ Slip при >0.1% Файлы: scalp_manager.py, position_manager.py


2026-03-29 — Trading Bot v2.3: Exchange-Side TP/SL Orders

Решение: Все 3 стратегии (WT, Scalp, Gerchik) используют TP/SL ордера на бирже вместо polling Причина: Polling может пропустить быстрые движения; exchange orders исполняются даже если бот упал Ключевые решения:

  1. TP = regular LIMIT (reduceOnly) — maker fee 0.02%, queryable через API
  2. SL = STOP_MARKET (algo) — НЕ queryable! Detect через position-gone + TP-not-filled
  3. cancel_all_open_orders() — единственный способ убить algo ордера
  4. replace_sl_and_tps() — после TP fill: cancel_all → re-place SL + оставшиеся TPs
  5. Recovery: при рестарте cancel stale → _place_recovery_orders() с учётом TP state
  6. Feature flags: каждая стратегия может независимо fallback на polling

Грабли (ВАЖНО, не повторять):

Файлы: order_placer.py (ExchangeOrderManager), обновлены trader.py, position_manager.py, scalp_manager.py, gerchik_manager.py


2026-03-29 — Blacklist: XAU, PEPE добавлены

Решение: Добавить XAUUSDT, PEPEUSDT, 1000PEPEUSDT в SKIP_TICKERS/skip_symbols Причина: XAUUSDT → Binance TradFi-Perps agreement (error -4411), PEPE → еле ходит Где: config.py (SKIP_TICKERS для WT + Gerchik), scalp_scanner.py (skip_symbols для Scalp)


2026-03-29 — /positions показывает все стратегии

Решение: /positions объединяет WT + Scalp + Gerchik в одно сообщение Причина: Rick видел 1 позицию (WT) а на бирже было 4 (1 WT + 3 Gerchik) Файл: bot.py


2026-03-29 — Trading Bot v2.4: TMM Journal Integration

Решение: Интеграция с TraderMakeMoney API для авто-тегирования сделок Причина: Ручное заполнение журнала нереально, бот должен сам тегировать стратегии Ключевые решения:

  1. Auto-tag — каждая сделка получает тег стратегии (WT/Scalp/Gerchik) + модель (для Gerchik)
  2. Retry mechanism — TMM может не сразу импортировать сделку из Binance, 5 попыток × 15с
  3. $15/мес подписка — API только на платном аккаунте
  4. API gotchas — notes field is desc not content, date field is note_at, tag-categories needs categories array wrapper Файлы: tmm_client.py (NEW), обновлены bot.py, все 3 менеджера, ecosystem.config.js Команды: /tmm

2026-03-30 — Trading Bot v2.5: Fix Order Accumulation (71 orders bug)

Проблема: 4 позиции набирали 71 открытый ордер на Binance. Ордера множились при каждом рестарте, BE move, TP hit. Корень: place_stop_market() использовал closePosition=True → создавал "неубиваемые" algo ордера, которые cancel_all_open_orders не удаляла. Новые ставились поверх старых.

Фиксы (4 шт):

  1. place_stop_market() — убран closePosition=True, теперь quantity + reduceOnly. Обычные ордера, cancel работает
  2. cancel_all_orders() — retry 3 раза + верификация через get_open_orders() + individual cancel fallback
  3. cancel_all_account_orders() (NEW) — nuclear cleanup при старте бота: cancel ВСЕ ордера на ВСЕ символы ДО recovery
  4. replace_sl_and_tps() — логирует warning если cancel не удался

Файлы: trader.py, bot.py, order_placer.py Результат: 71 → ~15 ордеров (4 позиции × 3-4 ордера каждая)

Грабли (ВАЖНО):


2026-03-30 — Trading Bot v2.6: Scalp Strategy Improvements

Решения (4 штуки):

  1. Time stop 30→15 мин — данные показали: все TP hits < 13 мин, time stop'ы в 30 мин = мёртвые позиции
  2. Cooldown 5 мин на символ — убирает спам-входы (ONUSDT ×5, NOMUSDT ×4 подряд). self.cooldowns dict в ScalpManager
  3. Breakeven при +0.5% — SL переставляется на entry когда unrealized PnL ≥ 0.5%. Exchange mode: cancel + re-place через replace_sl_and_tps(). Polling mode: просто pos.sl_price = pos.entry_price. pos.moved_to_be flag
  4. BB bandwidth >= 3% — фильтр в scalp_scanner.py. Низковол монеты (BB < 3%) не достигают 1% TP → time stop → нулевой/отрицательный PnL. Отсёк бы 7/25 старых сделок (4 time stops + 2 losses)

Анализ данных (23 TMM + 25 trade_log):

Env vars: SCALP_TIME_STOP_MIN=15, SCALP_COOLDOWN_MIN=5, SCALP_BE_TRIGGER_PCT=0.5, SCALP_MIN_BB_BW_PCT=3.0 Файлы: scalp_manager.py, scalp_scanner.py, ecosystem.config.js


2026-03-30 — Trading Bot v2.5.1: Cancelled Order Detection

Проблема: Когда ордера отменялись вручную на Binance, бот не детектил → позиции оставались БЕЗ TP/SL защиты Фикс: Step "0" в check_position() всех 3 менеджеров: проверяет статус первого TP order_id → если CANCELED/EXPIRED/REJECTED → re-place всех ордеров Также: Убраны weak_buy/weak_sell из WT TRADE_SIGNALS (26% "dead signals", cost -$6.81)

Файлы: position_manager.py, scalp_manager.py, gerchik_manager.py, config.py, bot.py


2026-03-30 — Gerchik: Only Model A

Решение: Ограничить Gerchik стратегию моделью A (отбой от уровней). Модели B/C/D отключены через GERCHIK_ALLOWED_MODELS=A Причина: B/C/D неправильно торгуют, нужна доработка Файлы: gerchik_config.py, gerchik_models.py, ecosystem.config.js


2026-03-31 — Все стратегии Binance бота ВЫКЛЮЧЕНЫ

Решение: Полностью остановить signal-listener. Отключены WT, Scalp, Gerchik. Канал profitVplus_game больше не слушаем. Причина: Эксперимент неудачный. Герчик Model A = 19% WR (4/21), скальпер не окупается, WT канал не дал результата. Деп $80 → ~$70. Что сделано:


2026-04-02 — Squeeze-VWAP Bot: Bybit Launch

Решение: Запустить LazyBear combo стратегию на Bybit Futures (не Binance) Причина: Binance бот (WT/Scalp/Gerchik) неудачный эксперимент (WR 19-31%). Bybit — новый деп $100, чистый старт. Bybit advantage: conditional orders queryable (нет invisible algo orders как на Binance). Стратегия: Squeeze Momentum + Z-VWAP + Waddah Attar + ADX. Mean reversion + volatility breakout. Score ≥ 3/5 для входа. Risk: $5 × 10x = $50 позиция, max 3, SL 1.5%, dynamic TP (Z→fair value) TMM: Bybit key #276474 (bybit-tiger), tag "SqzVWAP" Exchange adapter: pybit v5 с Binance-compatible interface → indicators/screener/manager без изменений PM2: squeeze-vwap-bot (bybit-bot остановлен — shared Telegram token)

Грабли Bybit (ВАЖНО):


2026-04-03 — Squeeze-VWAP Bot: Data-Driven Tuning (39 trades)

Решение: Настройка параметров на основе анализа 39 реальных сделок Причина: WR 27%, PnL -$10.19. Нужна оптимизация без переоптимизации.

Анализ и изменения:

  1. Z threshold 1.5 → 1.8 — зона 1.5-1.7: 19 trades, WR 26%, -$6.15 (чистый шум). При Z≥1.8: WR 44%, +$0.81
  2. Waddah STRONG: +1 → 0 баллов — WR 27%. Сильный тренд = враг mean reversion
  3. Waddah DEAD: -1 → 0 — мало данных, убрали штраф
  4. Waddah DIVERGES: -1 → 0 — WR 86%! Слабый тренд = друг MR, не штрафуем
  5. Histogram diverges: 0 → -1 — WR 20% vs confirms 62%. Реальный красный флаг
  6. SL 1.5 → 2.5% — 50% сделок выбивало SL шумом на 5m
  7. TP cap 3 → 5% — R:R 2:1 при новом SL
  8. Time stop 15 → 30 мин — 7 time stops убивали потенциальных winners
  9. BE trigger 0.7 → 1.0% — ложные BE → SL@entry
  10. Cooldown 10 → 30 мин — перезаход в тот же убыточный сетап

Ключевой инсайт: Для mean reversion стратегии сильный тренд (Waddah STRONG) — ВРАГ, а слабый тренд (DIVERGES) — ДРУГ. Обратная интуиция. Отвергнуто: "только LONG" и "фильтр по символам" — слишком грубые, переоптимизация на малой выборке.

Score: макс 4 (было 5). Entry ≥3. Нужно Z + 2 из (Squeeze, Histogram, ADX).


2026-04-03 — TMM Tagging: 3 бага

Проблема: 7 из 24 SqzVWAP сделок без тегов в TMM Баги:

  1. Cache poisoning — повторный ONTUSDT LONG возвращал ID первой сделки → тег на старую
  2. 5 мин lookup window — TMM импорт Bybit может тормозить, не находил сделку
  3. Мало retries — 5×15s = 75s, TMM иногда дольше

Фиксы: убран кеш (always fresh), window 5→10 мин, retry 5×15→10×20, skip already-tagged, initial wait 3→5s Также: 7 сделок затегано ретроактивно через API


2026-04-03 — WT Bot v3: |WT1| < 55 Filter + TMM = Source of Truth

Решение: Не входить в сделку если |WT1| ≥ 55 при входе. Всю статистику брать ТОЛЬКО из TMM. Причина: Полный анализ 57 сделок (TMM net PnL с комиссиями):

MAE/MFE инсайт: 81% лоссов никогда не были в плюсе ≥1% → проблема в качестве входов, не в SL/TP. Комиссии: Real R:R 1.36:1 (теория 1.50), commission drag 9%. Break-even WR 42.4%.

Фикс: config.pyWT_MAX_EXTREME = 55, manager.py → фильтр перед входом. TMM правило: trade_log.json НЕ учитывает комиссии и slippage. TMM API (key 276317) = единственный source of truth для PnL.

Файлы: config.py, manager.py, SKILL.md


2026-04-02 — Bybit float('') bug

Проблема: get_open_orders() crash на float('') → manager думал ордеров нет → cancel all + re-place каждые 5с → позиция без SL protection → STOUSDT -9.8% (-$4.65) Корень: Bybit возвращает пустую строку для triggerPrice/price на некоторых типах ордеров. float('') → ValueError Фикс: _safe_float() static method для всех полей. get_open_orders() returns None on error (not []). Throttle order check 60s.


2026-03-11 — Pinecone отложен

Решение: Не использовать Pinecone для памяти Бендера прямо сейчас Причина: Объём контекста пока не проблема Когда вернуться: Когда MEMORY.md станет слишком большим (>200 строк)


2026-04-07: DCA Z-VWAP — Dynamic Screener + NATR 0.5%

27 Apr 2026 — Weather Bot Full Audit & Fix (сессия 63)

Контекст: Бот сливал деньги на Polymarket, все сделки в минус, $14 осталось из ~$21. Найдено 9 критических багов:

  1. P&L формула неправильная (treats dollars as shares)
  2. Double-padding в forecaster (eq brackets 2x overestimated)
  3. Sigma слишком маленький (overconfident model)
  4. YES ставки при market<10% = 100% лосс
  5. Blocking sync calls → 21+ рестартов (crash loop)
  6. Нет scan lock → race condition
  7. Нет balance check → спам ошибок
  8. Unverified ордера не трекаются → деньги залочены
  9. Stale orders не отменяются → капитал заморожен Решение: Все 9 пофикшены, фейковая статистика очищена, DRY_RUN=true на месяц. Запомнить: Модель хуже рынка на YES ставках. Перед запуском real trading — минимум месяц dry run.

28 Apr 2026 — Weather Bot Comprehensive Code Review (сессия 64)

Контекст: Полный аудит кода polymarket-weather-bot, 33 проблемы найдено. Сделано 20 фиксов в 4 фазах: