No_Fog 1.0 — Архитектура модулей и связей
Блок 1 — ПАРСИНГ (no_fog_parser.py)
Входные данные: сообщение из Telegram + строка CHANNELS для этого канала (трейдера).
Слои (см. также диаграмму выше):
- Ранние отсевы: отчёт П/У без reply; reply+parent →
is_result_report(combined); D1is_close_command; free close по тексту. - Медиа: фото → Vision (цепочка моделей в
no_fog_vision.py); объединение подписи и текста. - ИИ: DeepSeek →
analyze_signal→ JSON (is_signal, asset, entry, SL, TP…). - Если не сигнал: D1 отчёты
is_result_reportпосле merge; шум коротких текстов; отсев в FILTERS_LOG. - Quality gate: обязательные поля с учётом канала; sanity цены входа vs mark; anti-duplicate 24ч по SIGNALS_LOG.
- Свежий конфиг:
resolve_channel_infoиз Sheets. - Авторежим: low confidence + auto → отсев; asset_conflict при auto → отсев + алерт; is_trading_day(trading_days) перед лимитом;
try_auto→ BingX limit + монитор. - Semi-Auto:
log_signal→send_signalв тему форума; предупреждения в карточке (_asset_conflict_warning, low conf). - Фон: expiry watcher, health/deposit/BingX loops, auto daily report, пятничный алерт trading pause, восстановление мониторов при старте.
Зависимости:
no_fog_vision.pyno_fog_deepseek.pyno_fog_duplicate_filter.pyno_fog_ticker_cache.pyno_fog_close_detector.pyno_fog_zone_entry.pyno_fog_runtime.py(is_trading_day, trading flags)no_fog_sheets.pyno_fog_notify.pyno_fog_monitor.py(после исполнения лимита)no_fog_bingx.py
Блок 2 — МОНИТОРИНГ (no_fog_monitor.py)
Входные данные: signal_id из SIGNALS_LOG
Шаги:
monitor_order()→ polling входного ордераplace_tp_orders()→ TP1-4 + SL на BingXpoll_tp1_hit()→ TP1 исполнен?move_sl_to_breakeven()→ SL в БУpoll_tp2..4_hit()→ TP2-4_poll_sl_after_filled()→ SL мониторингconsecutive_errors→closed_external
Зависимости:
no_fog_bingx.pyno_fog_sheets.pyno_fog_notify.pyno_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()→ баланс USDTplace_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.pyno_fog_sheets.pyno_fog_notify.pyno_fog_preflight.pyno_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