본문 바로가기
Python

업비트 비트코인 GPT 자동매매 7편 : 리스크 관리 및 중복 매매 방지

by 코드렌즈 2025. 10. 8.
반응형

자동매매 시스템은 한 번 실행되면 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가지

  1. 거래 한도 제한 — 잔고의 일정 비율까지만 매수
  2. 손실 한도 제한 — 손실률 5% 초과 시 자동 중단
  3. 쿨다운 타이머 — 같은 신호 반복 시 일정 시간 재매매 금지
  4. 하루 거래 횟수 제한 — GPT 폭주 방지
  5. 에러 로그 기록 — 모든 거래 내역을 로그로 남기기

🔹 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

 

반응형