Я давно занимаюсь алготрейдингом, периодически также работают боты для монет с низкой капитализацией. На многих биржах остаются монеты маленькой и средней капитализации - периодически их пампят. В хороший день 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 (в работе) — поговорим об открытии сделок, расчёт тейка и стопа, бектесте подобных стратегий, подборе параметров.
project_delta
а ссылку на гитхаб/гитлаб репо можно?)
negrbluad Автор
https://github.com/roman-boop/pump_tracker_bingx