Telegram-уведомления
TradeJS умеет отправлять в Telegram runtime-сигналы и суточную сводку.
1. Настройте Telegram
Предпочтительный путь для пользователей приложения:
- Войдите в TradeJS.
- Откройте drawer настроек аккаунта через шестеренку в левом сайдбаре.
- Сохраните:
TG_BOT_TOKENTG_CHAT_ID
Эти значения хранятся в Redis-записи текущего пользователя.
@tradejs/node / @tradejs/cli читают настройки в таком порядке:
TG_BOT_TOKENиз user settingsTG_CHAT_IDиз user settingsAPP_URLиз окружения
Важные моменты:
- TradeJS загружает отрендеренный скриншот в Telegram вместе с подписью сигнала.
- Если
APP_URLуказывает на публичный HTTPS URL, в сообщении также появится кнопкаDashboard. - Если рендер скриншота упал или PNG не появился, TradeJS откатится к обычному текстовому сообщению и не потеряет уведомление.
TG_CHAT_IDв UI показывается как есть; секреты вроде bot token скрыты до явного редактирования.
2. Быстрая проверка бота
curl -s -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":\"${TG_CHAT_ID}\",\"text\":\"TradeJS test message\"}"
3. Запуск уведомлений из signals
npx @tradejs/cli signals --user root --notify --tickers BTC --cacheOnly
Поток:
- Скрипт находит сигналы.
- Сигналы сохраняются в runtime storage даже если runtime выставил
orderStatus=skipped. - В Telegram не отправляются сигналы со статусами
skippedиcanceled; они остаются доступными для UI и debugging. - Скрипт пытается прочитать AI-анализ из Redis
analysis:<symbol>:<signalId>. - TradeJS отправляет основное сообщение по сигналу и загружает скриншот, если он доступен.
- Если AI-анализ есть, отправляется второе сообщение с анализом.
Детали доставки:
- Отправка в Telegram сериализована, чтобы основное сообщение и AI follow-up не перемешивались в чате.
- Если попытка открытия ордера завершилась ошибкой, уведомление всё равно может прийти; фильтруются только
skippedиcanceled.
Используйте тот же --user, на котором сохранены Telegram-настройки в Redis.
4. Суточная сводка
npx @tradejs/cli signals-summary --user root --connector bybit
По умолчанию:
- сводка покрывает последние 24 часа
--hoursменяет размер окна--printOnlyпечатает сводку в stdout вместо отправки в Telegram
Что входит в сводку:
- количество сигналов по стратегиям и статусам
- количество сделок по стратегиям
- разрез по статусам сделок (
active/closed) - текущий PnL активных сделок
- закрытый PnL закрытых сделок
- per-strategy counts runtime evaluations и skip reasons, если evaluation records существуют
TradeJS связывает runtime-сигналы и сделки через сгенерированный orderId.
На Bybit этот же runtime id передается как orderLinkId, что позволяет сводке сопоставлять runtime journal с closed-PnL данными биржи.
5. Runtime parity reports
runtime-parity тоже умеет отправлять Telegram-friendly report:
npx @tradejs/cli runtime-parity --user root --connector bybit --days 3 --notify
В report входят:
- окно replay, connector, replay env, статус runtime gates и matching tolerance
- counts replay targets, compared targets, replay errors и target sources
- counts runtime/backtest/matched/runtime-only/backtest-only entries
- average/max price delta и timestamp drift для matched entries
- per-strategy parity rows
- backtest-only classifications и AI/ML gate warnings, когда они релевантны
Подробно про смысл parity: Runtime parity.
6. Форматирование и доставка reports
Summary и parity reports отправляются через общий Telegram report helper:
- reports используют Telegram HTML formatting для жирных секций и code-like diagnostics
- длинные reports автоматически делятся на несколько сообщений до лимита Telegram
- части получают префикс
Part N/M - inline markup, если он передан, прикрепляется только к последней части
Signal notifications по-прежнему отправляются по одному сигналу, чтобы основное сообщение оставалось рядом с optional AI follow-up.
7. Частые проблемы
- Сообщения не приходят: проверьте сохраненные account settings для этого пользователя и что бот добавлен в чат/канал.
- Приходит текст, но без картинки:
проверьте генерацию скриншотов и возможность отрисовать страницу дашборда, заданную через
APP_URL. - Нет второго сообщения с AI:
проверьте наличие ключа
analysis:<symbol>:<signalId>в Redis. - В сводке нет PnL по сделкам: проверьте, что сделки открывались через TradeJS runtime и что выбранный connector умеет отдавать данные, нужные для сверки открытых/закрытых сделок.
- Длинный report пришел несколькими сообщениями: это ожидаемо; у Telegram есть лимиты размера сообщения, а TradeJS по возможности сохраняет разбиение по строкам.