Skip to main content
Glama
send_telegram_post.py10.8 kB
#!/usr/bin/env python3 """ Скрипт для отправки торгового сигнала в Telegram группу """ import asyncio import sys from pathlib import Path # Добавляем путь к mcp_server sys.path.insert(0, str(Path(__file__).parent)) from mcp_server.telegram_bot import TelegramBot, send_trading_signal # Токен бота BOT_TOKEN = "8003689195:AAGxQsopKvlLS34H2TZ0S1a0K7s4yV4iOBY" # Сообщение для отправки (красиво оформленное) TRADING_SIGNAL_MESSAGE = """<b>⚡ ДЕТАЛЬНЫЙ ПЛАН СДЕЛОК</b> <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>📊 СДЕЛКА #1: ZEN/USDT</b> <b>Entry:</b> $15.89 <b>Stop-Loss:</b> $13.58 <b>Take-Profit:</b> $20.52 <b>Risk/Reward:</b> 1:2.0 <b>Position Size:</b> Рассчитать на основе вашего депозита: • <b>Риск на сделку:</b> 1-2% от депозита (рекомендуется 1%) • <b>Расчёт:</b> (Ваш риск в $) / (Entry - SL = $2.31) = количество ZEN • <b>Пример:</b> При риске 1% и депозите $X → риск = $X × 0.01 → Position size = риск / $2.31 <b>⏰ Safe Time Window:</b> 12-18 часов <b>⏱️ Максимум:</b> 24 часа <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>📊 СДЕЛКА #2: XPL/USDT</b> <b>Entry:</b> $0.240 <b>Stop-Loss:</b> $0.210 <b>Take-Profit:</b> $0.300 <b>Risk/Reward:</b> 1:2.0 <b>Position Size:</b> Рассчитать на основе вашего депозита: • <b>Риск на сделку:</b> 1-2% от депозита (рекомендуется 1%) • <b>Расчёт:</b> (Ваш риск в $) / (Entry - SL = $0.030) = количество XPL • <b>Пример:</b> При риске 1% и депозите $X → риск = $X × 0.01 → Position size = риск / $0.030 <b>⏰ Safe Time Window:</b> 8-12 часов <b>⏱️ Максимум:</b> 18 часов <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>📊 СДЕЛКА #3: MINA/USDT</b> <b>Entry:</b> $0.143 <b>Stop-Loss:</b> $0.120 <b>Take-Profit:</b> $0.190 <b>Risk/Reward:</b> 1:2.04 <b>Position Size:</b> Рассчитать на основе вашего депозита: • <b>Риск на сделку:</b> 1-2% от депозита (рекомендуется 1%) • <b>Расчёт:</b> (Ваш риск в $) / (Entry - SL = $0.023) = количество MINA • <b>Пример:</b> При риске 1% и депозите $X → риск = $X × 0.01 → Position size = риск / $0.023 <b>⏰ Safe Time Window:</b> 8-12 часов <b>⏱️ Максимум:</b> 16 часов <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>💰 ОБЩИЙ РИСК ПОРТФЕЛЯ</b> Если открыть все 3 позиции одновременно: • <b>Общий риск:</b> 3-6% от депозита (при риске 1-2% на сделку) • <b>Рекомендация:</b> Не превышать 5% общего риска портфеля • <b>Максимум позиций:</b> 2-3 одновременно (в зависимости от размера депозита) <b>Формула для расчёта:</b> <code>Общий риск = (Риск на сделку %) × (Количество позиций) Пример: 1% × 3 = 3% общего риска</code> <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>🎯 CONFIDENCE В АНАЛИЗЕ: 8.0/10</b> Все 3 актива: ✅ Outperforming BTC на 10-27% ✅ Multi-TF alignment bullish ✅ R:R ≥ 1:2 ✅ Probability ≥ 95% ✅ Хорошая ликвидность <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b> <b>🤔 ОТКРЫВАТЬ?</b> <b>Моя рекомендация:</b> ДА, но с осторожностью <b>Почему:</b> 1️⃣ BTC в медвежьем тренде — основной риск 2️⃣ Все 3 актива outperforming BTC — показывает силу 3️⃣ Confluence ≥ 7.0/10 для всех 4️⃣ R:R ≥ 1:2 для всех 5️⃣ Probability ≥ 95% для всех <b>Стратегия входа:</b> 🎯 Начать с <b>ZEN/USDT</b> (лучший confluence 8.0/10) 🎯 Затем <b>XPL/USDT</b> (отличная ликвидность) 🎯 <b>MINA/USDT</b> — только если первые 2 работают <b>⚠️ Важно:</b> • Мониторить BTC каждые 30-60 минут • Exit при первых признаках слабости BTC • Не превышать safe time window • Использовать риск 1-2% на сделку (не более 5% общего риска портфеля) <b>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</b>""" # Chat ID канала по умолчанию (DIAMOND HEADZH) DEFAULT_CHANNEL_ID = "-1003382613825" async def get_chat_id_interactive(): """Интерактивно получить chat_id группы или канала""" bot = TelegramBot(BOT_TOKEN) print("🔍 Получение обновлений от бота...") print("📝 Пожалуйста, отправьте любое сообщение в группу/канал, где находится бот...") print("⏳ Ожидание 10 секунд...\n") try: result = await bot.get_updates(timeout=10) updates = result.get("result", []) if not updates: print(f"❌ Нет обновлений. Используется канал по умолчанию: {DEFAULT_CHANNEL_ID}") return DEFAULT_CHANNEL_ID print("📋 Найденные чаты/группы/каналы:\n") chat_ids = {} for update in updates: # Проверяем channel_post для каналов if "channel_post" in update: chat = update["channel_post"].get("chat", {}) chat_id = chat.get("id") chat_type = chat.get("type") chat_title = chat.get("title", "Unknown") if chat_id and chat_type == "channel": chat_ids[chat_id] = { "title": chat_title, "type": chat_type } # Проверяем message для групп и личных чатов if "message" in update: chat = update["message"].get("chat", {}) chat_id = chat.get("id") chat_type = chat.get("type") chat_title = chat.get("title") or chat.get("first_name", "Unknown") if chat_id and chat_type in ["group", "supergroup", "channel"]: chat_ids[chat_id] = { "title": chat_title, "type": chat_type } if not chat_ids: print(f"❌ Чаты не найдены. Используется канал по умолчанию: {DEFAULT_CHANNEL_ID}") return DEFAULT_CHANNEL_ID print("✅ Найденные чаты:\n") for idx, (chat_id, info) in enumerate(chat_ids.items(), 1): print(f" {idx}. {info['title']} ({info['type']})") print(f" CHAT_ID: {chat_id}\n") if len(chat_ids) == 1: selected_id = list(chat_ids.keys())[0] print(f"✅ Используется единственный найденный чат: {chat_ids[selected_id]['title']}") return selected_id else: print("Выберите номер чата (или введите chat_id вручную):") choice = input("> ").strip() try: idx = int(choice) - 1 if 0 <= idx < len(chat_ids): selected_id = list(chat_ids.keys())[idx] return selected_id except ValueError: pass # Попробовать как chat_id if choice in chat_ids: return choice print(f"❌ Неверный выбор. Используется канал по умолчанию: {DEFAULT_CHANNEL_ID}") return DEFAULT_CHANNEL_ID except Exception as e: print(f"❌ Ошибка: {e}") print(f"Используется канал по умолчанию: {DEFAULT_CHANNEL_ID}") return DEFAULT_CHANNEL_ID finally: await bot.close() async def send_message(chat_id: str): """Отправить сообщение в группу/канал""" print(f"\n📤 Отправка сообщения в чат (CHAT_ID: {chat_id})...\n") success = await send_trading_signal(BOT_TOKEN, chat_id, TRADING_SIGNAL_MESSAGE) if success: print("✅ Сообщение успешно отправлено!") else: print("❌ Не удалось отправить сообщение") sys.exit(1) async def main(): """Главная функция""" if len(sys.argv) > 1: # CHAT_ID передан как аргумент chat_id = sys.argv[1] await send_message(chat_id) else: # Используем канал по умолчанию или интерактивный режим print("=" * 60) print("🤖 Telegram Bot - Отправка торгового сигнала") print("=" * 60) print() # Пробуем использовать канал по умолчанию print(f"💡 Используется канал по умолчанию: {DEFAULT_CHANNEL_ID}") print(" (Для интерактивного выбора запустите: python send_telegram_post.py interactive)\n") await send_message(DEFAULT_CHANNEL_ID) if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: print("\n\n⚠️ Прервано пользователем") sys.exit(0) except Exception as e: print(f"\n❌ Критическая ошибка: {e}") import traceback traceback.print_exc() sys.exit(1)

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