알람봇 코드 완전 공개 — 전 알트 스캔 + 신호 감지 로직 🔍 무한 알트 텔레그램 알람봇 v8.1.1 — 3편
💡 이번 편 한 줄 요약
바이비트 전 알트코인을 1분마다 자동 스캔하고, 조건에 맞으면 텔레그램으로 알람을 보내는 핵심 코드를 공개합니다.
👉 ← 2편: VPS 파이썬 환경 세팅 — SSH부터 패키지까지 복붙 완성
⚠️ 선물 거래는 원금 전체를 잃을 수 있는 고위험 투자입니다. 모든 판단과 결과의 책임은 본인에게 있습니다.
📌 코드 구조 한 눈에 보기
| 블록 | 역할 |
|---|---|
| 환경변수 로드 | .env에서 API키·토큰 불러오기 |
| 전 종목 리스트 조회 | Bybit API → USDT 선물 전 알트 목록 |
| 시세·거래량 조회 | 종목별 현재가·거래량 수집 |
| 신호 감지 로직 | 거래량 급증·가격 변동률 조건 판단 |
| 중복 알람 방지 | 같은 종목 연속 알람 차단 (5분) |
| 텔레그램 발송 | 조건 충족 종목 알람 전송 |
| 스케줄 반복 | 1분마다 전체 사이클 반복 |
전체 코드 (bot.py) — 복붙 후 바로 실행
아래 코드를 VPS의 ~/alt-alarm-bot/bot.py 파일에 복붙하세요.
| 📄 bot.py — 전체 코드 (복붙용) |
|---|
| import os import time import asyncio from dotenv import load_dotenv from pybit.unified_trading import HTTP from telegram import Bot # ── 환경변수 로드 ────────────────────── load_dotenv() BYBIT_API_KEY = os.getenv("BYBIT_API_KEY") BYBIT_API_SECRET = os.getenv("BYBIT_API_SECRET") TELEGRAM_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") CHAT_ID = os.getenv("TELEGRAM_CHAT_ID") # ── 클라이언트 ───────────────────────── session = HTTP(api_key=BYBIT_API_KEY, api_secret=BYBIT_API_SECRET) bot = Bot(token=TELEGRAM_TOKEN) # ── 설정값 (여기서 조건 조정) ────────── VOLUME_SPIKE_RATIO = 3.0 # 거래량 N배 이상 급증 PRICE_CHANGE_PCT = 5.0 # 가격 변동률 N% 이상 SCAN_INTERVAL = 60 # 스캔 주기 (초) COOLDOWN_SECONDS = 300 # 재알람 대기 시간 (초) last_alerted = {} def get_all_symbols(): result = session.get_instruments_info(category="linear") return [ item["symbol"] for item in result["result"]["list"] if item["symbol"].endswith("USDT") and item["status"] == "Trading" ] def get_ticker(symbol): result = session.get_tickers(category="linear", symbol=symbol) data = result["result"]["list"][0] return { "symbol" : symbol, "last_price": float(data["lastPrice"]), "price_pct" : float(data["price24hPcnt"]) * 100, "volume_1h" : float(data["volume24h"]), } def is_signal(ticker, prev_volumes): symbol = ticker["symbol"] price_ok = abs(ticker["price_pct"]) >= PRICE_CHANGE_PCT vol_ok = False if symbol in prev_volumes and prev_volumes[symbol] > 0: ratio = ticker["volume_1h"] / prev_volumes[symbol] vol_ok = ratio >= VOLUME_SPIKE_RATIO return price_ok or vol_ok def is_cooldown(symbol): if symbol not in last_alerted: return False return (time.time() - last_alerted[symbol]) < COOLDOWN_SECONDS async def send_alert(ticker): symbol = ticker["symbol"] price = ticker["last_price"] pct = ticker["price_pct"] arrow = "📈" if pct >= 0 else "📉" msg = ( f"🚨 [{symbol}] 신호 감지\n" f"{arrow} 현재가: {price:,.6f} ({pct:+.2f}%)\n" f"📊 24h 거래량: {ticker['volume_1h']:,.0f}\n" f"⏰ {time.strftime('%Y-%m-%d %H:%M:%S')}\n" f"🔗 https://www.bybit.com/trade/usdt/{symbol}" ) await bot.send_message(chat_id=CHAT_ID, text=msg) last_alerted[symbol] = time.time() print(f"[ALERT] {symbol} | {pct:+.2f}%") async def scan(): print(f"[SCAN] {time.strftime('%H:%M:%S')} 스캔 시작") symbols = get_all_symbols() prev_volumes = {sym: 0 for sym in symbols} while True: for symbol in symbols: try: ticker = get_ticker(symbol) if is_signal(ticker, prev_volumes) and not is_cooldown(symbol): await send_alert(ticker) prev_volumes[symbol] = ticker["volume_1h"] except Exception as e: print(f"[ERROR] {symbol}: {e}") await asyncio.sleep(0.1) print(f"[DONE] {len(symbols)}개 스캔 완료") await asyncio.sleep(SCAN_INTERVAL) if __name__ == "__main__": asyncio.run(scan()) |
설정값 — 여기만 바꾸면 됩니다
| 변수 | 기본값 | 의미 |
|---|---|---|
VOLUME_SPIKE_RATIO | 3.0 | 이전 대비 거래량 3배 이상이면 신호 |
PRICE_CHANGE_PCT | 5.0 | 24h 가격 변동 ±5% 이상이면 신호 |
SCAN_INTERVAL | 60 | 60초마다 전체 스캔 반복 |
COOLDOWN_SECONDS | 300 | 같은 종목 5분간 재알람 차단 |
신호 감지 조건 커스텀
| 목적 | 수정 방법 |
|---|---|
| 알람을 더 줄이고 싶다 | PRICE_CHANGE_PCT 높이기 (예: 7.0), VOLUME_SPIKE_RATIO 높이기 |
| 알람을 더 많이 받고 싶다 | PRICE_CHANGE_PCT 낮추기 (예: 3.0) |
| 두 조건 모두 충족 시만 | return price_ok or vol_ok → return price_ok and vol_ok |
봇 실행 명령어
| 단계 | 명령어 |
|---|---|
| 폴더 이동 | cd ~/alt-alarm-bot |
| 테스트 실행 | python3 bot.py |
| pm2 상시 실행 | pm2 start bot.py --name alt-alarm-bot --interpreter python3 |
| 재부팅 자동 등록 | pm2 startup && pm2 save |
자주 묻는 에러
| 에러 | 원인 | 해결 |
|---|---|---|
InvalidAPIKeyError | API키 오타·.env 경로 문제 | .env 파일 위치·키 값 재확인 |
Chat not found | Chat ID 오류 | 1편 Chat ID 확인 절차 재실행 |
RateLimitError | API 호출 너무 빠름 | asyncio.sleep(0.1) → 0.2로 변경 |
| 알람이 너무 많다 | 조건이 느슨함 | PRICE_CHANGE_PCT 높이기 |
| 알람이 전혀 없다 | 조건이 엄격하거나 쿨다운 중 | PRICE_CHANGE_PCT 낮추기, 로그 확인 |
🎁 봇 코드 무료 배포 예정
v8.1.1 전체 코드를 시리즈 구독자에게 무료로 배포합니다.
구독 + 관심 댓글 남겨두시면 배포 시 바로 알려드립니다.
"종목·등락률·거래량·링크를 한 눈에 — 알람 받자마자 판단할 수 있는 포맷으로 업그레이드합니다."
💌 아빠가 아들에게
아들아, 2026년엔 코인 시장에서 신호를 잡으려면 이렇게 코드를 직접 짜서 서버에 올려야 했어. 400개 넘는 종목을 사람이 눈으로 보는 건 불가능하니까, 기계한테 대신 보라고 시킨 거지. 어떤 시대든, 도구를 직접 만들어 쓰는 사람이 결국 앞서 나간다는 건 변하지 않더라. 🔍
※ 본 콘텐츠는 정보 제공 목적이며 투자 권유가 아닙니다. 투자의 최종 책임은 투자자 본인에게 있습니다.

댓글
댓글 쓰기