Skip to main content
Glama
SIGNAL_MONITORING_SYSTEM.md12.4 kB
# 📡 Система Мониторинга Сигналов ## Обзор Реализована комплексная система мониторинга торговых сигналов в реальном времени с интеграцией в UI и автоматическим обновлением Telegram постов. --- ## 🎯 Возможности ### 1. UI Компонент `SignalMonitoringPanel` - ✅ Real-time мониторинг активных сигналов - ✅ Визуальные индикаторы состояния (🟢/🟡/🟠/🔴) - ✅ Прогресс-бары к TP/SL - ✅ Метрики P/L, Confluence, Probability - ✅ Автообновление каждые 30 секунд - ✅ Фильтрация и сортировка сигналов ### 2. Telegram Интеграция - ✅ Автоматическое обновление постов в реальном времени - ✅ Индикаторы состояния сигналов - ✅ Прогресс-бары в текстовом формате - ✅ Информация о P/L, времени в сделке - ✅ Цветовое кодирование статусов ### 3. Backend Система - ✅ Хранение `message_id` для каждого сигнала - ✅ Автоматическое обновление при изменении цены - ✅ Интеграция с `SignalPriceMonitor` --- ## 📁 Структура Файлов ### Backend (Python) 1. **`mcp_server/telegram_bot.py`** (расширен) - Добавлен метод `edit_message()` для редактирования постов 2. **`mcp_server/signal_tracker.py`** (расширен) - Добавлена колонка `telegram_message_ids` в БД - Методы `set_telegram_message_ids()` и `get_telegram_message_ids()` 3. **`mcp_server/telegram_signal_updater.py`** (новый) - Класс `TelegramSignalUpdater` - Генерация индикаторов состояния - Обновление Telegram постов 4. **`mcp_server/signal_price_monitor.py`** (расширен) - Интеграция обновления Telegram постов при изменении цены ### Frontend (TypeScript) 1. **`bybit-mcp/webui/src/components/SignalMonitoringPanel.ts`** (новый) - Компонент мониторинга сигналов - Real-time обновления через MCP 2. **`bybit-mcp/webui/src/styles/signal-monitoring.css`** (новый) - Стили для компонента мониторинга --- ## 🚀 Использование ### 1. Сохранение message_id при публикации сигнала ```python from mcp_server.telegram_bot import TelegramBot from mcp_server.signal_tracker import SignalTracker # При публикации сигнала в Telegram bot = TelegramBot("YOUR_BOT_TOKEN") tracker = SignalTracker() # Отправляем сообщение result = await bot.send_message(chat_id="-1003382613825", text=message, parse_mode="HTML") message_id = result["result"]["message_id"] # Сохраняем message_id для сигнала signal_id = "your-signal-id" await tracker.set_telegram_message_ids(signal_id, { "-1003382613825": message_id, "-1003484839912": another_message_id # если несколько каналов }) ``` ### 2. Автоматическое обновление постов Обновление происходит автоматически при изменении цены через `SignalPriceMonitor`. Для ручного обновления: ```python from mcp_server.telegram_signal_updater import TelegramSignalUpdater from mcp_server.telegram_bot import TelegramBot bot = TelegramBot("YOUR_BOT_TOKEN") tracker = SignalTracker() updater = TelegramSignalUpdater(tracker, bot, "YOUR_BOT_TOKEN") # Обновить один сигнал await updater.update_signal_post(signal_id="signal-id", current_price=50000.0) # Обновить все активные сигналы await updater.update_all_active_signals() ``` ### 3. Использование UI компонента ```typescript import { SignalMonitoringPanel } from '@/components/SignalMonitoringPanel'; // В вашем layout или главном компоненте const signalPanel = new SignalMonitoringPanel('signal-monitoring-container'); // Компонент автоматически: // - Загружает сигналы через MCP // - Обновляет каждые 30 секунд // - Показывает индикаторы состояния ``` ### 4. Добавление в MainLayout ```typescript // В MainLayout.ts или где используете панели <div id="signal-monitoring-container"></div> // Инициализация import { SignalMonitoringPanel } from '@/components/SignalMonitoringPanel'; const signalPanel = new SignalMonitoringPanel('signal-monitoring-container'); ``` --- ## 📊 Формат Индикаторов в Telegram Индикатор состояния добавляется в Telegram пост в следующем формате: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📊 СТАТУС СИГНАЛА: BTCUSDT 🟢 NEAR TP 🟢 Прогресс к TP: ████████████████████░░ 85.3% Текущая цена: $51,200.00 Entry: $50,000.00 Stop-Loss: $48,000.00 Take-Profit: $52,000.00 P/L: 🟢 📈 +2.40% ⏱️ Время в сделке: 2h 15m ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ### Статусы Индикаторов - 🟢 **NEAR TP** - Прогресс ≥ 75% - 🟡 **IN PROGRESS** - Прогресс 50-75% - 🟠 **EARLY STAGE** - Прогресс 25-50% - 🔴 **NEAR SL** - Прогресс < 25% - ✅ **TP HIT** - Take-Profit достигнут - ❌ **SL HIT** - Stop-Loss достигнут --- ## ⚙️ Конфигурация ### Переменные окружения ```bash # Telegram Bot Token для обновления постов export TELEGRAM_BOT_TOKEN="your-bot-token" ``` ### Настройка интервала обновления В `SignalPriceMonitor`: ```python signal_monitor = SignalPriceMonitor( signal_tracker, bybit_client, check_interval=300 # 5 минут (по умолчанию) ) ``` В UI компоненте: ```typescript // Автообновление каждые 30 секунд (по умолчанию) // Можно изменить в SignalMonitoringPanel.ts: this.updateInterval = setInterval(() => { this.loadSignals(); }, 30000); // изменить на нужный интервал ``` --- ## 🎨 UI Компонент - Детали ### Структура компонента ``` SignalMonitoringPanel ├── Header (заголовок + статус LIVE) ├── Stats Grid (4 карточки метрик) ├── Filters (статус, сортировка) └── Signals List (карточки сигналов) ``` ### Карточка сигнала включает: - **Header**: Символ, сторона (LONG/SHORT), статус индикатор - **Price Section**: Entry и Current цена - **P/L Section**: Процент прибыли/убытка - **Progress Section**: Прогресс-бар к TP - **Levels Section**: Расстояние до SL/TP - **Metrics Section**: Confluence, Probability, R:R, время в сделке - **Footer**: Кнопки действий (Детали, Обновить Telegram) ### Фильтры - **Все** - показать все сигналы - **Активные** - только активные - **Завершенные** - только завершенные ### Сортировка - Новые первыми - Прогресс ↓/↑ - Confluence ↓ - Символ A-Z --- ## 🔧 MCP Tools Для работы UI компонента нужны следующие MCP tools: 1. **`get_active_signals`** - получение активных сигналов ```python @app.call_tool() async def get_active_signals() -> List[TextContent]: signals = await signal_tracker.get_active_signals() return [TextContent(type="text", text=json.dumps(signals))] ``` 2. **`get_price_snapshots`** - получение snapshots цены ```python @app.call_tool() async def get_price_snapshots(signal_id: str, limit: int = 100) -> List[TextContent]: snapshots = await signal_tracker.get_price_snapshots(signal_id, limit) return [TextContent(type="text", text=json.dumps(snapshots))] ``` --- ## 📝 Примеры ### Пример 1: Публикация сигнала с сохранением message_id ```python async def publish_signal_with_tracking(signal_data: dict): bot = TelegramBot("YOUR_BOT_TOKEN") tracker = SignalTracker() # Записываем сигнал signal_id = await tracker.record_signal( symbol=signal_data["symbol"], side=signal_data["side"], entry_price=signal_data["entry_price"], stop_loss=signal_data["stop_loss"], take_profit=signal_data["take_profit"], confluence_score=signal_data["confluence_score"], probability=signal_data["probability"] ) # Формируем сообщение message = format_trading_signal(signal_data) # Отправляем в каналы message_ids = {} for chat_id in ["-1003382613825", "-1003484839912"]: result = await bot.send_message(chat_id, message, parse_mode="HTML") message_ids[chat_id] = result["result"]["message_id"] # Сохраняем message_ids await tracker.set_telegram_message_ids(signal_id, message_ids) await bot.close() ``` ### Пример 2: Ручное обновление поста ```python async def manually_update_signal_post(signal_id: str): bot = TelegramBot("YOUR_BOT_TOKEN") tracker = SignalTracker() updater = TelegramSignalUpdater(tracker, bot, "YOUR_BOT_TOKEN") # Получаем текущую цену signal = await tracker.get_signal(signal_id) # ... получаем цену через API ... # Обновляем пост await updater.update_signal_post(signal_id, current_price=50000.0) await bot.close() ``` --- ## 🐛 Troubleshooting ### Telegram посты не обновляются 1. Проверьте что `TELEGRAM_BOT_TOKEN` установлен 2. Убедитесь что `message_id` сохранены в БД 3. Проверьте логи на ошибки обновления ### UI компонент не загружает сигналы 1. Проверьте что MCP tools `get_active_signals` и `get_price_snapshots` доступны 2. Проверьте консоль браузера на ошибки 3. Убедитесь что компонент инициализирован после загрузки MCP client ### Индикаторы не отображаются корректно 1. Проверьте что `current_price` обновляется в snapshots 2. Убедитесь что `progress_to_tp` рассчитывается правильно 3. Проверьте логику определения статуса в `generate_status_indicator()` --- ## 🔮 Будущие Улучшения - [ ] WebSocket обновления для real-time UI - [ ] Графики прогресса сигналов - [ ] Уведомления при достижении TP/SL - [ ] Экспорт статистики сигналов - [ ] Интеграция с TradingView для визуализации - [ ] Мобильная версия компонента --- ## 📚 Связанные Документы - `TELEGRAM_BOT_INTEGRATION.md` - Интеграция Telegram Bot - `TRADE_COPILOT_UX_UI_DESIGN.md` - UI дизайн система - `mcp_server/signal_tracker.py` - Документация SignalTracker --- **Версия:** 1.0 **Дата:** 2024 **Статус:** ✅ Реализовано

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheMacroeconomicDao/bybit-ai-trader'

If you have feedback or need assistance with the MCP directory API, please join our Discord server