반응형
자동매매를 개발할 때, 실제로 주문을 실행하기 전에
전략이 제대로 작동하는지 확인할 방법이 필요하다.
가장 간단하면서도 효과적인 방법은 텔레그램으로 시그널 알림을 받는 것이다.
이번 글에서는 매매 시그널을 감지했을 때 텔레그램 메시지로 알림을 보내는 기능을 구현해본다.
1. 텔레그램 봇 만들기
단계 요약:
- 텔레그램에서 @BotFather 검색
- /start → /newbot 입력
- 봇 이름과 사용자명 입력
- API 토큰 발급됨 → 복사해둔다 (예: 123456789:ABC...XYZ)
2. 챗 ID 알아내기
자신에게 메시지를 보내기 위해 채팅 ID가 필요하다.
방법:
- 봇에게 /start 라고 먼저 말을 걸어야 한다
- 아래 주소로 접속 (봇 토큰 입력)
https://api.telegram.org/bot<토큰값>/getUpdates
예:
https://api.telegram.org/bot123456789:ABC...XYZ/getUpdates
- 아래와 같은 응답에서 chat → id 값을 찾는다.
"chat": {
"id": 987654321,
...
}
이 987654321이 챗 ID다.
3. 텔레그램 메시지 보내기 함수 만들기
import requests
TELEGRAM_TOKEN = '텔레그램_봇_토큰'
TELEGRAM_CHAT_ID = '챗_ID'
def send_telegram_message(text):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {
'chat_id': TELEGRAM_CHAT_ID,
'text': text
}
response = requests.post(url, data=data)
return response
4. 매매 시그널 코드에 연동
앞서 만들었던 시그널 분석 코드에서 print() 대신 메시지를 보낸다.
✅ 전체 예시: signal_with_alert.py
import ccxt
import pandas as pd
import requests
# 텔레그램 설정
TELEGRAM_TOKEN = '여기에_봇_토큰_입력'
TELEGRAM_CHAT_ID = '여기에_챗_ID_입력'
def send_telegram_message(text):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {
'chat_id': TELEGRAM_CHAT_ID,
'text': text
}
requests.post(url, data=data)
# 바이낸스 객체
binance = ccxt.binance({'enableRateLimit': True})
# 캔들 데이터 가져오기
symbol = 'BTC/USDT'
df = pd.DataFrame(binance.fetch_ohlcv(symbol, '5m', limit=100),
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# 지표 계산
df['ma20'] = df['close'].rolling(window=20).mean()
def calculate_rsi(series, period=14):
delta = series.diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window=period).mean()
avg_loss = loss.rolling(window=period).mean()
rs = avg_gain / avg_loss
return 100 - (100 / (1 + rs))
df['rsi14'] = calculate_rsi(df['close'], 14)
std = df['close'].rolling(window=20).std()
df['bb_middle'] = df['ma20']
df['bb_upper'] = df['bb_middle'] + 2 * std
df['bb_lower'] = df['bb_middle'] - 2 * std
# 마지막 데이터 기준 시그널 판별
last = df.iloc[-1]
price = last['close']
rsi = last['rsi14']
lower = last['bb_lower']
upper = last['bb_upper']
if price < lower and rsi < 30:
send_telegram_message(f"📈 매수 시그널\n가격: {price:.2f}\nRSI: {rsi:.2f}")
elif price > upper and rsi > 70:
send_telegram_message(f"📉 매도 시그널\n가격: {price:.2f}\nRSI: {rsi:.2f}")
else:
print("시그널 없음")
5. 실행 결과
이제 위 코드를 실행하면 조건에 맞을 경우 텔레그램으로 알림 메시지가 전송된다.
시그널 발생 여부와 함께 가격, RSI 값도 함께 확인할 수 있다.
반응형
'코인' 카테고리의 다른 글
[자동매매로봇 만들기][7편] 백테스트 결과 시각화 – 수익 흐름을 눈으로 확인하기 (0) | 2025.06.11 |
---|---|
[자동매매봇 만들기][6편] 백테스트로 전략 검증하기 – 과거 데이터로 수익률 확인하기 (0) | 2025.06.06 |
[자동매매봇 만들기][4편] 기술적 지표와 단순 매매 조건 구현하기 (0) | 2025.05.16 |
[자동매매봇 만들기][3편] 바이낸스에서 실시간 시세와 캔들 데이터 가져오기 (API 키 없이) (2) | 2025.05.14 |
[자동매매봇만들기][2편] 환경 세팅 - 파이썬 & ccxt 설치하기 (PyCharm 기준) (0) | 2025.05.12 |