Разработка Telegram-бота для уведомлений о сделках
Трейдер не может 24/7 смотреть на экран. Telegram-бот для уведомлений решает это: мгновенно сообщает об исполненных ордерах, достижении price alert уровней, изменениях баланса и подозрительной активности.
Типы уведомлений
Торговые:
- Ордер полностью исполнен:
✅ BUY 0.1 BTC @ $42,150 — исполнен - Ордер частично исполнен:
⚡ SELL 0.05/0.1 ETH @ $2,205 — частично - Ордер отменён:
❌ Ордер #12345 отменён
Ценовые алерты:
-
🔔 BTC/USDT достиг $45,000 (ваш алерт)
Аккаунт:
- Вывод подтверждён:
💸 Вывод 500 USDT → 0x...a1b2 подтверждён - Новый вход:
🔐 Новый вход с IP 1.2.3.4 (Берлин)
Реализация
from telegram import Bot
from telegram.ext import Application, CommandHandler, CallbackQueryHandler
class TradeNotificationBot:
def __init__(self, token: str):
self.bot = Bot(token)
self.app = Application.builder().token(token).build()
self._setup_handlers()
def _setup_handlers(self):
self.app.add_handler(CommandHandler('alerts', self.list_alerts))
self.app.add_handler(CommandHandler('addalert', self.add_price_alert))
self.app.add_handler(CallbackQueryHandler(self.handle_callback))
async def notify_fill(self, user_chat_id: int, trade: TradeEvent):
emoji = '✅' if trade.side == 'buy' else '🔴'
text = (
f"{emoji} Ордер исполнен\n"
f"Пара: {trade.pair}\n"
f"Сторона: {'Покупка' if trade.side == 'buy' else 'Продажа'}\n"
f"Объём: {trade.quantity} {trade.base_currency}\n"
f"Цена: ${trade.price:,.2f}\n"
f"Сумма: ${trade.total:,.2f}\n"
f"Время: {trade.timestamp.strftime('%H:%M:%S UTC')}"
)
await self.bot.send_message(chat_id=user_chat_id, text=text)
async def notify_price_alert(self, user_chat_id: int, alert: PriceAlert):
direction = '📈' if alert.direction == 'above' else '📉'
await self.bot.send_message(
chat_id=user_chat_id,
text=f"{direction} {alert.pair} достиг {alert.price}\n"
f"Текущая цена: {alert.current_price}"
)
Интеграция с биржевым бэкендом
Уведомления отправляются через event-driven систему. При каждом fill matching engine публикует событие в Redis Pub/Sub, notification worker подписывается и отправляет в Telegram:
import redis.asyncio as aioredis
async def notification_worker():
r = aioredis.from_url('redis://localhost')
pubsub = r.pubsub()
await pubsub.subscribe('trade.fills', 'price.alerts', 'account.events')
async for message in pubsub.listen():
if message['type'] != 'message':
continue
event = json.loads(message['data'])
chat_id = await get_user_chat_id(event['user_id'])
if not chat_id:
continue # пользователь не привязал Telegram
match event['type']:
case 'fill':
await notification_bot.notify_fill(chat_id, TradeEvent(**event))
case 'price_alert':
await notification_bot.notify_price_alert(chat_id, PriceAlert(**event))
Привязка Telegram аккаунта
Пользователь привязывает Telegram через уникальный токен в настройках биржи:
- Биржа генерирует одноразовый токен:
LINK-a1b2c3d4 - Пользователь отправляет
/link LINK-a1b2c3d4боту - Бот сохраняет
(user_id, chat_id)связь - Уведомления идут на этот chat_id
Разработка Telegram-бота для уведомлений с привязкой аккаунта и price alerts: 1–2 недели.







