Я давно занимаюсь алготрейдингом, периодически также работают боты для монет с низкой капитализацией. На многих биржах остаются монеты маленькой и средней капитализации - периодически их пампят. В хороший день 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-ключей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Результат:

['BTC-USDT', 'ETH-USDT', 'PEPE-USDT', 'DOGE-USDT', ...]

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

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

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

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

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

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

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

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

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

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

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)}

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

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

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

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("Пампов не обнаружено.")

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

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

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

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

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

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

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

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

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

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

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)

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

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

Улучшение

Описание

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

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

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

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

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

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

✅ Вывод

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

Бот:

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

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

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

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

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

Комментарии (2)


  1. project_delta
    05.11.2025 15:12

    а ссылку на гитхаб/гитлаб репо можно?)