Roman crypto_maniac
Roman crypto_maniac личный блог
18 ноября 2025, 23:08

Как я написал монитор пампов для биржи: от API до Telegram-уведомлений

Я давно занимаюсь алготрейдингом, периодически также работают боты для монет с низкой капитализацией. На многих биржах остаются монеты маленькой и средней капитализации — периодически их пампят. В хороший день 10-15 монет могут дать рост больше чем на 50%.

Первоначально бот не только уведомлял, но и открывал сделки.
Однако для безопасной публикации я убрал торговую логику, так как бот пока что находится в стадии тестирования. Можно, при желании, добавить филтьтры по объёму, росту на 24часа и прочее.

Я взял за основную цифру — 5% роста. Также при желании можно добавить и шорт-позиции, но пока что, в стадии теста, мне это неинтересно.

В результате получился лёгкий и автономный инструмент, который:

  • отслеживает все фьючерсные пары на BingX;

  • фильтрует токены по рыночной капитализации (через CoinMarketCap API);

  • каждые 5 минут проверяет изменение цены;

  • при росте выше заданного порога — шлёт уведомление в Telegram.

Архитектура проекта

Весь код можно разбить на 4 основных блока:

  1. Инициализация и настройки — подключение API, ключей, параметров.

  2. Получение списка токенов и фильтрация по капитализации.

  3. Мониторинг изменения цен.

  4. Telegram-уведомления о пампах.

Схематично выглядит так:

CoinMarketCap → список low-cap токенов

BingX API → цены фьючерсов (mark price)

Сравнение цен ( каждые 5 мин)

Telegram Bot → уведомления

🔧 Настройка окружения и API-ключей

Для начала подключим нужные библиотеки и зададим ключи.

<code>import requests
import json
import time
from decimal import Decimal
import telebot

CMC_API_KEY = "ВАШ_CMC_API_KEY"
BINGX_BASE_URL = "https://open-api.bingx.com"
TELEGRAM_TOKEN = "ВАШ_TELEGRAM_TOKEN"
USER_ID = 123456789  # ваш ID в Telegram
</code>

Комментарии:

  • CMC_API_KEY — ключ CoinMarketCap, нужен для получения данных о капитализации.

  • TELEGRAM_TOKEN — токен Telegram-бота (его можно получить у @BotFather).

  • USER_ID — ваш Telegram ID для личных уведомлений (узнать можно через бота @userinfobot).

Получение и кэширование данных с CoinMarketCap

Чтобы не ловить лимиты CMC, кэшируем market cap токенов локально.

<code>def get_cmc_lowcap_symbols(max_cap=100_000_000):
    url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"
    headers = {"X-CMC_PRO_API_KEY": CMC_API_KEY}
    params = {"limit": 5000, "convert": "USD"}
    
    r = requests.get(url, headers=headers, params=params)
    data = r.json()
    
    lowcap = []
    for coin in data["data"]:
        if coin["quote"]["USD"]["market_cap"] and coin["quote"]["USD"]["market_cap"] < max_cap:
            lowcap.append(coin["symbol"])
    
    with open("cmc_cache.json", "w") as f:
        json.dump(lowcap, f)
    
    return lowcap</code>

Что делает код:

  • Запрашивает список всех монет.

  • Фильтрует только те, чья капитализация меньше max_cap (например, $100 млн).

  • Сохраняет список в файл cmc_cache.json.

Почему это важно:
CoinMarketCap ограничивает число запросов, и без кэша можно быстро уткнуться в лимиты. По бесплатной подписке доступно 10к запросов в месяц.

📈 Получение списка фьючерсных контрактов BingX

Теперь нам нужно узнать, какие пары вообще торгуются на BingX. Далее сравним с полученными лоукапами с CMC и, таким образом, у нас будет готовый список.

<code>def get_bingx_futures():
    url = f"{BINGX_BASE_URL}/openApi/swap/v2/quote/contracts"
    resp = requests.get(url)
    data = resp.json()

    futures = []
    for s in data.get("data", []):
        if s["symbol"].endswith("-USDT"):
            futures.append(s["symbol"])
    return futures</code>

Результат:

<code>['BTC-USDT', 'ETH-USDT', 'PEPE-USDT', 'DOGE-USDT', ...]</code>

Сопоставляем токены CMC и BingX

Вот ключевой этап, который позволить нам найти токены с низкой капитализаций на bingX. Думаю, что у многих будет вопрос — почему нельзя сразу подтянуть эти данные с bingX? Дело в том, что api не предоставляет этих данных у многих токенов, чаще всего marketCap = 0. Так что, приходится выкручиваться как показано в статье.

Кстати говоря, bingX выбрал, так как он имеет публичный удобный API и на нём много лоукап монет, в отличии от bybit, binance и прочих. Давайте вернёмся к сопоставлению:

Мы должны взять пересечение двух множеств:

  • lowcap — из CoinMarketCap (low-cap токены)

  • bingx — с биржи (фьючерсы, доступные к торговле)

<code>def match_cmc_bingx(lowcap, bingx_symbols):
    bingx_tokens = [s.replace("-USDT", "").upper() for s in bingx_symbols]
    matched = [s for s in bingx_symbols if s.replace("-USDT", "").upper() in lowcap]
    return matched
</code>

📌 Пример:
Если на CMC есть PEPEBONK
а на BingX торгуются PEPE-USDTBONK-USDT,
в результате matched = ['PEPE-USDT', 'BONK-USDT'].

⏱️ Измерение 5-минутного изменения цены

BingX предоставляет публичный endpoint для получения mark price по таймфреймам.
Берём последние две 5-минутные свечи и считаем процент изменения.

<code>def get_5min_change(symbol):
    url = f"{BINGX_BASE_URL}/openApi/swap/v2/quote/markPriceKlines"
    params = {"symbol": symbol, "interval": "5m", "limit": 2}
    resp = requests.get(url, params=params)
    data = resp.json()
    
    if not data.get("data"):
        return None
    
    prev_close = Decimal(data["data"][0][4])
    last_close = Decimal(data["data"][1][4])
    change = (last_close - prev_close) / prev_close
    
    return {"symbol": symbol, "price": float(last_close), "change_5min": float(change)}</code>

Пояснение: Каждая свеча возвращается в виде массива: [timestamp, open, high, low, close, volume] Мы берём close двух последних и вычисляем относительное изменение.

🚨 Детекция пампов

Теперь объединим всё в одну функцию мониторинга.
Порог пампа (threshold) по умолчанию — 5%.

<code>bot = telebot.TeleBot(TELEGRAM_TOKEN)

def monitor_pumps(symbols, threshold=0.05, interval=300):
    print(f"\nМониторинг {len(symbols)} фьючерсов (+{threshold*100:.1f}% за 5 мин)")
    while True:
        prices_old = {}
        for s in symbols:
            data = get_5min_change(s)
            if data and data["price"] > 0:
                prices_old[s] = data["price"]
            time.sleep(0.3)
        
        # ждём 5 минут до следующего сравнения
        time.sleep(interval)
        
        pumps = []
        for s, old_price in prices_old.items():
            data = get_5min_change(s)
            if data and data["price"] > 0:
                change = (data["price"] - old_price) / old_price
                if change >= threshold:
                    pumps.append((s, change, old_price, data["price"]))
            time.sleep(0.3)
        
        # отправляем уведомления
        if pumps:
            for token, ch, old_price, new_price in pumps:
                msg = (
                    f"🚀 {token} пампится!\n"
                    f"Δ {ch*100:+.2f}% за 5 мин\n"
                    f"${old_price:.6f} → ${new_price:.6f}"
                )
                print(msg)
                bot.send_message(USER_ID, msg)
        else:
            print("Пампов не обнаружено.")</code>

Как это работает пошагово

  1. При первом проходе скрипт сохраняет текущие цены всех фьючерсов.

  2. Через interval (например, 5 минут) получает новые цены.

  3. Для каждого токена считает процент изменения.

  4. Если рост превышает threshold, шлёт уведомление в Telegram.

  5. Повторяет цикл бесконечно.

Пример Telegram-уведомления :

HAJIMI пампится! +5.33% за 5 мин ($0.015950 → $0.016800)

🧩 Объединяем всё

Теперь склеим весь пайплайн:

<code>if __name__ == "__main__":
    try:
        lowcap = get_cmc_lowcap_symbols()
    except Exception:
        with open("cmc_cache.json") as f:
            lowcap = json.load(f)

    bingx = get_bingx_symbols()
    matched = match_cmc_bingx(lowcap, bingx)

    print(f"Найдено {len(matched)} low-cap токенов, торгующихся на BingX.")
    monitor_pumps(matched, threshold=0.05, interval=300)</code>

Теперь бот будет следить только за low-cap токенами, которые действительно торгуются на BingX.

🔍 Что можно улучшить

Улучшение

Описание

Добавить логирование в SQLite

Хранить историю пампов для анализа

Сделать полную торговую логику

расчёт тейка и стопа, открытие сделок

Оптимизация API

Объединять запросы, использовать aiohttp для асинхронности

✅ Вывод

Этот проект — пример того, как на чистом Python можно построить умный Telegram-бот для мониторинга рынка.

Бот:

  • использует публичные API (без авторизации);

  • фильтрует токены по капитализации;

  • отслеживает изменение цен;

  • и уведомляет вас, когда на рынке начинается движение.

    💬 Часть 2 (в работе) — поговорим об открытии сделок, расчёт тейка и стопа, бектесте подобных стратегий, подборе параметров.

 
1 Комментарий
  • d_d
    20 ноября 2025, 18:02
    Техническая реализация задумки конечно похвальна,

    но неужели люди верят, что это поможет им стабильно зарабатывать в 2026?

    На кого это вообще рассчитано))  На тех, кто только недавно услышал, что, ОКАЗЫВАЕТСЯ, можно торговать не только российскими акциями ?)) 

       волшебный бот, чтобы найти на взлёте новый pepe или bonk ?!

    ну ок, каждый день он будет выдавать по 10 пампов, и что дальше?))

    PEPE  и BONk не просто же выросли из ниоткуда «по индикаторам», «на объёмах», «на свечах определённой формы»! Там какие-то мемы стояли за всем этим, cообщества, закрытые дискорд чаты, словом, «культурка».

    это событие формата «раз в 10 лет всё сложилось как по нотам»,  значит попытка найти подобные тикеры неизбежно приведёт к тому, что будут попадаться одни дешёвые подделки и запоздалые подражания. Если играть это всё подряд, то автоматически последует разорение!

    амеры в твиттере давно уже похоронили тему с мемкоинами,
    а больше поддержать её и накачать деньгами просто некому!

         до смартлаба только-только дошёл звон?!
     
         это точно не эстонский форум?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн