Режим

Схема: клик по блоку — карточка справа. Ниже — полная текстовая спецификация модулей.

Архитектура No_Fog 1.0

Нажмите блок на схеме — откроется карточка с ролью модуля и списком файлов. Цвета: парсинг, биржа, БД, уведомления, веб.

↓ Пайплайн парсера · Текстовая спецификация · API ↔ Sheets · Кабинет

Пайплайн парсера — слои

Один процесс no-fog-parser (parser/no_fog_parser.py): на каждое сообщение из активного канала цепочка идёт сверху вниз. Настройки индивидуальны — из строки листа CHANNELS для этого peer (auto_mode, trading_days, expected_fields, zone_entry_mode, риски и т.д.). Ниже — схема «как думает парсер»; детали функций — в коде и в блоке «ПАРСИНГ» ниже.

flowchart TB subgraph IN["Вход"] T1["Telethon: NewMessage из канала"] T2["ch_info из CHANNELS для peer"] end subgraph EARLY["До ИИ — ветки; при срабатывании часто сразу return"] ER["П/У без reply · reply+parent is_result_report · D1 close · free_close"] end subgraph MEDIA["Медиа"] M1["Фото → Vision · merge текста"] end subgraph AI["ИИ"] A1["DeepSeek → analyze_signal JSON"] end subgraph VAL["Проверки"] VR["Quality gate · mark sanity · duplicate 24h · fresh CHANNELS"] end subgraph BR["AUTO / SEMI"] BRN["low conf · asset_conflict · trading_days · try_auto → BingX"] end subgraph OUT["Исход"] OR["SIGNALS_LOG · Semi-Auto / Auto уведомления · FILTERS_LOG"] end subgraph BG["Фон asyncio не на каждое сообщение"] BG1["expiry · health · депозит · BingX watch · отчёты · restore monitors"] end T1 --> T2 T2 --> ER ER --> M1 M1 --> A1 A1 --> VR VR --> BRN BRN --> OR
  • Ранние ветки — часть из них делает return сразу (отчёт, отсев reply, D1, free close); до DeepSeek очередь не доходит.
  • Reply+parent — в логе «parent_preview»; решение по строке child + parent (важно для «банк N$» в сигнале).
  • Фон — отдельные asyncio.create_task циклы, не блокируют обработку сообщения.
Уточнение по порядку в коде

Реальный порядок в хендлере сложнее линейной стрелки: часть шагов — только при условиях (есть фото, есть reply, is_signal и т.д.). Схема показывает слои ответственности. Точные ветки — см. parser/no_fog_parser.py (обработчик NewMessage).

No_Fog 1.0 — Архитектура модулей и связей

Блок 1 — ПАРСИНГ (no_fog_parser.py)

Входные данные: сообщение из Telegram + строка CHANNELS для этого канала (трейдера).

Слои (см. также диаграмму выше):

  1. Ранние отсевы: отчёт П/У без reply; reply+parent → is_result_report(combined); D1 is_close_command; free close по тексту.
  2. Медиа: фото → Vision (цепочка моделей в no_fog_vision.py); объединение подписи и текста.
  3. ИИ: DeepSeek → analyze_signal → JSON (is_signal, asset, entry, SL, TP…).
  4. Если не сигнал: D1 отчёты is_result_report после merge; шум коротких текстов; отсев в FILTERS_LOG.
  5. Quality gate: обязательные поля с учётом канала; sanity цены входа vs mark; anti-duplicate 24ч по SIGNALS_LOG.
  6. Свежий конфиг: resolve_channel_info из Sheets.
  7. Авторежим: low confidence + auto → отсев; asset_conflict при auto → отсев + алерт; is_trading_day(trading_days) перед лимитом; try_auto → BingX limit + монитор.
  8. Semi-Auto: log_signalsend_signal в тему форума; предупреждения в карточке (_asset_conflict_warning, low conf).
  9. Фон: expiry watcher, health/deposit/BingX loops, auto daily report, пятничный алерт trading pause, восстановление мониторов при старте.

Зависимости:

  • no_fog_vision.py
  • no_fog_deepseek.py
  • no_fog_duplicate_filter.py
  • no_fog_ticker_cache.py
  • no_fog_close_detector.py
  • no_fog_zone_entry.py
  • no_fog_runtime.py (is_trading_day, trading flags)
  • no_fog_sheets.py
  • no_fog_notify.py
  • no_fog_monitor.py (после исполнения лимита)
  • no_fog_bingx.py

Блок 2 — МОНИТОРИНГ (no_fog_monitor.py)

Входные данные: signal_id из SIGNALS_LOG

Шаги:

  1. monitor_order() → polling входного ордера
  2. place_tp_orders() → TP1-4 + SL на BingX
  3. poll_tp1_hit() → TP1 исполнен?
  4. move_sl_to_breakeven() → SL в БУ
  5. poll_tp2..4_hit() → TP2-4
  6. _poll_sl_after_filled() → SL мониторинг
  7. consecutive_errorsclosed_external

Зависимости:

  • no_fog_bingx.py
  • no_fog_sheets.py
  • no_fog_notify.py
  • no_fog_circuit_breaker.py

Блок 3 — БИРЖА (no_fog_bingx.py + bingx-signer)

Все запросы к BingX:

  • POST http://127.0.0.1:5000/bingx/api
  • → bingx-signer (Docker) → BingX Futures API

Функции:

  • get_balance() → баланс USDT
  • place_order() → выставить ордер
  • cancel_order() → отменить ордер
  • get_position() → текущая позиция
  • close_position_market() → закрыть маркетом
  • move_sl_to_breakeven() → STOP_MARKET

Блок 4 — БОТ УПРАВЛЕНИЯ (no_fog_bot.py)

Telegram бот @No_Fog_Bot:

Команды: /start /stopall /emergency_stop
/trading /automode /preflight
/healthcheck /backtest /dashboard

Кнопки Semi-Auto (thread_id=36):

  • Approve (Limit) / Market / Отклонить

Аварийные:

  • Пауза все авто / Закрыть все / Стоп торговля

D1 алерты:

  • ❌ Отменить ордер (кнопка)
  • 🔴 Закрыть вручную (кнопка)

Зависимости:

  • no_fog_bingx.py
  • no_fog_sheets.py
  • no_fog_notify.py
  • no_fog_preflight.py
  • no_fog_circuit_breaker.py

Блок 5 — БАЗА ДАННЫХ (Google Sheets)

Листы:

  • CHANNELS → конфиг каналов (auto_mode, trading_days, risk_usdt, zone_entry_mode, …)
  • SIGNALS_LOG → все сигналы и их статусы
  • FILTERS_LOG → отсеянные сообщения
  • ERRORS_LOG → ошибки парсинга
  • STATS → статистика трейдеров
  • SIM_LOG → результаты бэктеста
  • CONFIG → глобальные параметры
  • HELP → документация полей

Блок 6 — ВЕБ КАБИНЕТ (FastAPI + HTML)

Домен: nsbm1.store (снаружи — HTTPS, reverse proxy)

Страницы:

  • Главная / Кабинет / Статистика
  • Логи / Ошибки / Ордера
  • Дашборд / Мониторинг / TG_Menu / Архитектура

Примеры API (неполный список):

  • GET /api/dashboard-summary — сводка для дашборда
  • GET /api/channels, GET /api/orders-overview — каналы и ордера
  • GET /api/signals, GET /api/filters, GET /api/stats — выборки под интеграции
  • Служебные: GET /api/health, GET /api/me и др.

HTTP API — чтение Google Sheets (общая схема)

Внешние клиенты (скрипты, автоматизация) могут получать данные той же книги Google Sheets, что использует No_Fog, через JSON API веб-сервиса. Доступ только по защищённому каналу (HTTPS на проде).

Универсальное чтение листа

  • GET /api/sheets/ИМЯ_ЛИСТА — ответ JSON: имя листа, общее число строк, число строк в порции, массив строк как пары «колонка → значение».
  • Параметры пагинации: limit (по умолчанию 500, есть верхняя граница), offset (смещение с начала массива строк).
  • CHANNELS и SIGNALS_LOG для этого маршрута берутся из кэша приложения (меньше нагрузки на квоту Google и быстрее повторные запросы).
  • Остальные вкладки читаются напрямую из таблицы тем же сервисным аккаунтом, что и остальной проект.
  • Лист CONFIG через данный маршрут не отдаётся (в нём чувствительные параметры среды; не путать с файлом .env на сервере — он по API не передаётся).

Авторизация запросов

  • HTTP Basic — те же учётные данные, что для входа в веб-кабинет (логин и пароль задаются в конфигурации на сервере).
  • Альтернатива только для /api/sheets/…: одноразовый длинный токен в query-параметре token; значение задаётся в конфигурации сервера отдельно от пароля кабинета. Подходит для простых интеграций; токен в URL может попадать в access-логи прокси — при высоких требованиях к секретности предпочтительнее Basic в заголовке.
  • Без успешной проверки одного из способов сервер отвечает 401.

Аудит и нагрузка

  • Обращения к /api/sheets/… фиксируются в журнале аудита веб-сервиса (лист, параметры порции, время, IP; без секретов).
  • Запросы к API кабинета не считаются основным потребителем квоты Google: чтения агрегируются и кэшируются там, где это заложено в коде.

Блок 7 — БЭКТЕСТ (no_fog_backtest.py)

  • Источники свечей: Binance → BingX → OKX → Gate.io
  • Симуляция: _simulate_long / _simulate_short
  • Аномалии: verify_candle_anomaly (порог 15%)
  • Статусы: WIN / LOSS / BREAKEVEN / PARTIAL / SUSPICIOUS
  • Лог: SIM_LOG в Google Sheets

Блок 8 — УВЕДОМЛЕНИЯ (no_fog_notify.py)

Темы группы No_Fog:

  • thread_id=36 → Semi-Auto (новые сигналы)
  • thread_id=301 → Auto (TP/SL/BE/авторежим)
  • thread_id=356 → Alarm (ошибки/алерты)

@No_Fog_Bot личка → системные алерты

Блок 9 — HEALTHCHECK и АЛЕРТЫ

no_fog_healthcheck.py:

  • Депозит просадка → алерт каждые 30 мин
  • BingX недоступен >3 мин → алерт
  • Восстановление BingX → алерт

no_fog_circuit_breaker.py:

  • N SL подряд → auto_mode=FALSE → алерт Alarm

Связи между блоками

  • Парсер → Sheets (запись сигнала)
  • Парсер → Бот (уведомление Semi-Auto)
  • Парсер → Монитор (запуск мониторинга)
  • Монитор → BingX (polling ордеров)
  • Монитор → Sheets (обновление статуса)
  • Монитор → Уведомления (TP/SL/BE алерты)
  • Бот → BingX (approve/cancel/close)
  • Бот → Sheets (изменение конфига)
  • Веб → Sheets (чтение/запись; наружу — JSON API, см. раздел «HTTP API — чтение Google Sheets»)
  • Веб → BingX (баланс)
  • Бэктест → BingX/OKX/Gate (свечи)
  • Бэктест → Sheets (SIM_LOG)

Окружение

  • Сервер: Digital Ocean Ubuntu 24.04 LTS 4GB SFO2
  • Python: 3.12
  • n8n: не используется в текущей архитектуре
  • Docker: bingx-signer (127.0.0.1:5000)
  • nginx: reverse proxy HTTPS
  • Systemd: no-fog-parser, no-fog-bot, no-fog-web

← В кабинет