Я давно занимаюсь алготрейдингом, периодически также работают боты для монет с низкой капитализацией. На многих биржах остаются монеты маленькой и средней капитализации - периодически их пампят. В хороший день 10-15 монет могут дать рост больше чем на 50%.
Первоначально бот не только уведомлял, но и открывал сделки.
Однако для безопасной публикации я убрал торговую логику, так как бот пока что находится в стадии тестирования. Можно, при желании, добавить филтьтры по объёму, росту на 24часа и прочее.
Я взял за основную цифру - 5% роста. Также при желании можно добавить и шорт-позиции, но пока что, в стадии теста, мне это неинтересно.
В результате получился лёгкий и автономный инструмент, который:
отслеживает все фьючерсные пары на BingX;
фильтрует токены по рыночной капитализации (через CoinMarketCap API);
каждые 5 минут проверяет изменение цены;
при росте выше заданного порога — шлёт уведомление в Telegram.
Архитектура проекта
Весь код можно разбить на 4 основных блока:
Инициализация и настройки — подключение API, ключей, параметров.
Получение списка токенов и фильтрация по капитализации.
Мониторинг изменения цен.
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("Пампов не обнаружено.")
Как это работает пошагово
При первом проходе скрипт сохраняет текущие цены всех фьючерсов.
Через
interval(например, 5 минут) получает новые цены.Для каждого токена считает процент изменения.
Если рост превышает
threshold, шлёт уведомление в Telegram.Повторяет цикл бесконечно.
Пример 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 | Объединять запросы, использовать |
✅ Вывод
Этот проект — пример того, как на чистом Python можно построить умный Telegram-бот для мониторинга рынка.
Бот:
использует публичные API (без авторизации);
фильтрует токены по капитализации;
отслеживает изменение цен;
и уведомляет вас, когда на рынке начинается движение.
💬 Часть 2 (в работе) — поговорим об открытии сделок, расчёт тейка и стопа, бектесте подобных стратегий, подборе параметров.
