자동매매 시스템은 한 번 실행되면 24시간 내내 작동하기 때문에,
리스크 제어(Stop-loss, Quota, Cooldown) 기능을 반드시 포함해야 합니다.
이번 포스팅에서는 실제 운영 중 발생할 수 있는
“중복 주문, 과도한 거래, 손실 누적” 등을 방지하는 방법을 정리했습니다.

🔹 1. 왜 리스크 관리가 중요한가?
자동매매 봇은 사람이 실시간으로 제어하지 않기 때문에
다음과 같은 문제가 쉽게 발생할 수 있습니다.
- GPT가 동일 신호를 반복하여 중복 매매
- 비정상적인 응답(예: 계속 “BUY”)으로 잔고 초과 매수
- 가격 급락 중에도 손실을 키우는 무한 매수
- 네트워크 지연·API 오류로 인한 중복 체결
- 감당 불가능한 손실 누적
👉 따라서 반드시 3중 안전장치(예산 제한, 손실 제한, 시간 제한) 를 걸어야 합니다.
🔹 2. 리스크 관리 핵심 3단계
1️⃣ 거래 한도 제한 (Budget Control)
- 한 번의 매매에 사용할 금액을 제한
- 예: 잔고의 30%까지만 매수
2️⃣ 손실 한도 설정 (Stop-loss)
- 하루 또는 전체 손실률이 일정 수준을 넘으면 거래 중단
3️⃣ 쿨다운 시간 (Cooldown)
- 동일 신호 연속 발생 시 일정 시간 동안 거래 금지
🔹 3. 거래 한도 제한 코드 추가
이전 6편의 매수 함수를 수정하여,
매수 시 전체 잔고가 아니라 일정 비율만 사용하도록 바꿔보겠습니다 👇
MAX_TRADE_RATIO = 0.3 # 최대 30%까지만 매수
def buy_bitcoin():
krw_balance = upbit.get_balance("KRW")
trade_amount = krw_balance * MAX_TRADE_RATIO * FEE_FACTOR
if trade_amount > MIN_ORDER_KRW:
logging.info(f"📈 매수 실행 (금액: {trade_amount:.0f} KRW)")
upbit.buy_market_order("KRW-BTC", trade_amount)
else:
logging.info("❌ 매수 실패: 최소 거래금액 미만")
✅ 이렇게 하면 GPT가 “buy”를 여러 번 연속으로 주더라도
최대 30%까지만 매수하기 때문에 과매수 위험을 막을 수 있습니다.
🔹 4. 손실 한도(Stop-Loss) 설정
시세 급락 시 자동으로 거래를 멈추게 하는 기능입니다.
일일 손실률이나 총 손실금액 기준으로 중단할 수 있습니다.
DAILY_LOSS_LIMIT = 0.05 # 하루 손실률 5% 초과 시 중단
initial_value = None # 최초 평가금액 저장
def check_stop_loss():
global initial_value
krw = upbit.get_balance("KRW")
btc = upbit.get_balance("KRW-BTC")
current_price = pyupbit.get_current_price("KRW-BTC")
total_value = krw + btc * current_price
# 최초 실행 시 초기 금액 저장
if initial_value is None:
initial_value = total_value
return False
loss_rate = (initial_value - total_value) / initial_value
if loss_rate > DAILY_LOSS_LIMIT:
logging.warning(f"🚨 손실 한도 초과! 손실률: {loss_rate:.2%}")
return True
return False
그리고 메인 루프 상단에 아래를 추가합니다 👇
if check_stop_loss():
logging.error("거래 중단 (STOP-LOSS 발동)")
break
👉 이렇게 하면 하루 손실률이 5%를 초과할 경우
프로그램이 자동으로 중단됩니다.
🔹 5. 중복 매매 방지 로직
6편에서 구현한 쿨다운 타이머를 좀 더 정교하게 만들 수 있습니다.
COOLDOWN_MIN = 60 # 같은 신호 60분 이내 재매매 금지
if last_decision == decision and decision in ("buy", "sell"):
if last_trade_at and datetime.now() < last_trade_at + timedelta(minutes=COOLDOWN_MIN):
can_trade = False
left = (last_trade_at + timedelta(minutes=COOLDOWN_MIN) - datetime.now()).seconds
logging.info(f"중복 체결 방지로 스킵 ({left//60}분 후 재허용)")
이 로직은 같은 신호가 반복될 때,
이전 거래 이후 60분이 지나기 전에는 체결되지 않도록 막습니다.
🔹 6. 하루 거래 횟수 제한 (Daily Trade Cap)
GPT가 하루에 과도하게 매매 명령을 내리지 못하도록
하루 체결 횟수 제한을 둘 수도 있습니다.
MAX_TRADES_PER_DAY = 10
trade_count = 0
last_reset_day = datetime.now().date()
def can_trade_today():
global trade_count, last_reset_day
today = datetime.now().date()
if today != last_reset_day:
trade_count = 0
last_reset_day = today
if trade_count >= MAX_TRADES_PER_DAY:
logging.warning("📉 하루 거래 횟수 초과 — 거래 정지")
return False
return True
그리고 매수·매도 실행 전에 아래를 추가합니다.
if not can_trade_today():
continue
🔹 7. 오류 로그 및 예외 처리 강화
자동매매는 로그가 생명입니다.
이전 루프 코드에 아래처럼 에러 핸들링을 보강해두면
나중에 장애 분석이 훨씬 쉬워집니다.
try:
# 매매 실행 코드
except Exception as e:
logging.exception(f"거래 실행 중 오류 발생: {e}")
time.sleep(10)
continue
🔹 8. 요약 : 최소한의 안전장치 5가지
- 거래 한도 제한 — 잔고의 일정 비율까지만 매수
- 손실 한도 제한 — 손실률 5% 초과 시 자동 중단
- 쿨다운 타이머 — 같은 신호 반복 시 일정 시간 재매매 금지
- 하루 거래 횟수 제한 — GPT 폭주 방지
- 에러 로그 기록 — 모든 거래 내역을 로그로 남기기
🔹 9. 실전 운영 팁
- VPS(클라우드 서버)에 배포 시 로그 파일 자동 백업
- GPT 모델은 비용이 다르므로 “gpt-4o-mini” 추천 (저비용, 빠름)
- 시세 급등·급락 시에는 즉시 중지 후 수동 대응
- 주말이나 새벽엔 거래량이 적으므로 실행 주기 늘리기 (예: 2~3시간 간격)
🔹 10. 다음 단계 예고
이제 GPT가 판단하고, 매매를 반복하며,
리스크를 통제하는 완전한 자동매매 시스템이 완성되었습니다.
다음 8편에서는
실전 운영 팁 / 성능 최적화 / 서버 배포 / 토큰 비용 절감 방법 등을 다뤄보겠습니다 💡
👉 다음 글 예고
- 8편 — 실전 운영 및 성능 개선 가이드
관련 포스팅
업비트 비트코인 GPT 자동매매 6편 : 자동 매매 메인루프 구성
이번 편에서는 5편까지 만든 “GPT 판단 → 주문 실행” 코드를 스케줄러 없이도 1시간마다 자동 반복하도록 메인 루프를 구성합니다.안전장치, 예외 처리, 중복 체결 방지까지 함께 다룹니다.사
codelenz.tistory.com
업비트 비트코인 GPT 자동매매 5편 : 자동매매 실행하기
이전 글에서는 GPT가 비트코인 차트 데이터를 보고BUY, SELL, HOLD 중 하나를 판단하도록 구현했습니다.이번에는 그 결과를 받아 자동으로 매수·매도 주문을 넣는 코드를 완성해보겠습니다.🔹 1. 준
codelenz.tistory.com
'Python' 카테고리의 다른 글
| 업비트 비트코인 GPT 자동매매 정리편 : 시스템 전체 구조 한눈에 보기 (0) | 2025.10.08 |
|---|---|
| 업비트 비트코인 GPT 자동매매 8편 : 실전 운영 및 성능 개선 가이드 (0) | 2025.10.08 |
| 업비트 비트코인 GPT 자동매매 6편 : 자동 매매 메인루프 구성 (0) | 2025.10.08 |
| 업비트 비트코인 GPT 자동매매 5편 : 자동매매 실행하기 (0) | 2025.10.08 |
| 업비트 비트코인 GPT 자동매매 4편 : GPT로 의사결정하기 (0) | 2025.10.08 |