본문 바로가기
Python

바이낸스 선물 GPT 자동매매 5편 : 리스크 관리 & 포지션 사이징

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

안녕하세요! 👋 이번 포스팅은 “GPT 자동매매 시리즈”의 핵심 중 핵심, 바로 리스크 관리(Risk Management)포지션 사이징(Position Sizing) 편입니다.

이전까지는 GPT가 신호를 계산하고 실제로 주문을 실행하는 기능을 만들었죠.
하지만 자동매매의 성패를 좌우하는 진짜 차이는 얼마만큼 잃을 수 있는가를 통제하는 능력입니다.
오늘은 그 통제력을 코드로 구현해보겠습니다.

🔹 1. 리스크 관리가 왜 중요한가?

자동매매는 단 한 번의 큰 손실로 계좌 전체가 청산될 수 있습니다.
특히 선물 거래에서는 레버리지 때문에 손실이 기하급수적으로 커지기 때문에,
‘얼마나 벌 수 있는가’보다 ‘얼마나 잃지 않는가’를 먼저 설계해야 합니다.

예를 들어,

  • 10번 중 6번 수익을 내도
    한 번의 -30% 손실이면 전체 수익률이 마이너스가 됩니다.
  • 따라서 “거래 1건당 손실 한도” 를 정해두는 것이 첫 단계입니다.
 

바이낸스 선물 GPT 자동매매 4편 : 주문 실행 & 예외 처리

안녕하세요!이번 포스팅에서는 지난 3편에서 완성한 매매 신호(매수·매도) 를 기반으로,실제로 바이낸스 선물 시장에서 자동으로 주문을 실행하는 로직을 만들어보겠습니다.이제 GPT가 계산한

codelenz.tistory.com

🔹 2. 기본 개념 정리

✅ 리스크 관리 기본 용어

  • 계좌 잔액(Account Balance) : 현재 USDT 보유금
  • 리스크 비율(Risk %) : 한 번의 거래에서 감수할 최대 손실 (예: 1%)
  • 스톱로스(Stop Loss) : 손절가, 진입가 대비 최대 손실 허용 수준
  • 테이크프로핏(Take Profit) : 익절가, 목표 수익 구간
  • 포지션 사이징(Position Size) : 진입 시 얼마만큼의 수량을 살지 계산하는 것

🔹 3. GPT 자동매매에서의 리스크 구조

GPT 기반 자동매매 구조는 이렇게 설계됩니다 👇

1️⃣ 데이터 수집
2️⃣ 신호 생성 (BUY / SELL)
3️⃣ 리스크 계산 (손절·익절 / 포지션 사이징)
4️⃣ 주문 실행
5️⃣ 모니터링 및 로그 저장

즉, 신호가 나왔다고 바로 진입하는 게 아니라,
“이 신호에 얼마를 걸 것인가?”를 먼저 계산해야 합니다.

🔹 4. 계좌 잔고 가져오기

먼저 바이낸스 API에서 현재 USDT 잔액을 불러옵니다.

def get_balance(asset='USDT'):
    """현재 선물 계좌 잔액 조회"""
    balance_data = client.futures_account_balance()
    for item in balance_data:
        if item['asset'] == asset:
            return float(item['balance'])
    return 0.0

테스트

print("현재 잔액:", get_balance(), "USDT")

🔹 5. 포지션 사이징 함수

손실 한도를 기준으로 포지션 크기를 계산합니다.

def calculate_position_size(balance, risk_percent, entry_price, stop_loss_price, leverage=3):
    """리스크 비율 기반 포지션 크기 계산"""
    risk_amount = balance * (risk_percent / 100)
    risk_per_unit = abs(entry_price - stop_loss_price)
    position_size = (risk_amount / risk_per_unit) * leverage
    return round(position_size, 4)

📘 예시

  • 계좌 잔액: 1000 USDT
  • 리스크: 1% (10달러 손실 허용)
  • 진입가: 40,000
  • 손절가: 39,600
  • 레버리지: 5배
    → 계산 결과: 약 1.25 USDT 수량의 포지션

즉, 이 전략은 “손절 시 -1% 이상 손실을 허용하지 않는다”는 원칙을 코드로 구현한 것입니다.

🔹 6. 손절 & 익절 가격 자동 설정

자동매매에서 사람이 매번 가격을 지정할 수 없기 때문에,
비율 기반으로 손절가와 익절가를 계산합니다.

def set_stop_take(entry_price, stop_percent=0.5, take_percent=1.0, side='BUY'):
    """손절/익절 가격 자동 계산"""
    if side == 'BUY':
        stop_loss = entry_price * (1 - stop_percent / 100)
        take_profit = entry_price * (1 + take_percent / 100)
    else:
        stop_loss = entry_price * (1 + stop_percent / 100)
        take_profit = entry_price * (1 - take_percent / 100)
    return round(stop_loss, 2), round(take_profit, 2)

테스트 예시

entry = 42000
sl, tp = set_stop_take(entry, stop_percent=0.7, take_percent=1.5, side='BUY')
print("손절:", sl, "| 익절:", tp)

🔹 7. 실제 주문 실행에 리스크 적용하기

이제 매매 신호가 나왔을 때,
계좌 잔액, 손절가, 레버리지 등을 기반으로 자동으로 수량을 결정하도록 통합합니다.

def execute_trade(signal, entry_price):
    """신호에 따라 리스크 기반 매매 실행"""
    balance = get_balance()
    stop_loss, take_profit = set_stop_take(entry_price, 0.5, 1.0, signal)
    qty = calculate_position_size(balance, risk_percent=1, entry_price=entry_price, stop_loss_price=stop_loss)

    try:
        if signal == 'BUY':
            print(f"매수 신호 발생! 수량: {qty} / 손절: {stop_loss} / 익절: {take_profit}")
            order = client.futures_create_order(
                symbol='BTCUSDT',
                side=SIDE_BUY,
                type=ORDER_TYPE_MARKET,
                quantity=qty
            )
        elif signal == 'SELL':
            print(f"매도 신호 발생! 수량: {qty} / 손절: {stop_loss} / 익절: {take_profit}")
            order = client.futures_create_order(
                symbol='BTCUSDT',
                side=SIDE_SELL,
                type=ORDER_TYPE_MARKET,
                quantity=qty
            )
        else:
            print("신호 없음. 대기 중...")
            return

        print("✅ 주문 완료:", order['orderId'])

    except BinanceAPIException as e:
        print(f"🚨 주문 실패: {e.message}")

🔹 8. GPT가 리스크를 조정하는 방식

GPT는 거래 결과 데이터를 분석해
다음과 같이 리스크 파라미터를 스스로 조정할 수 있습니다.

  • 최근에 손실이 여러 번 연속으로 발생한 경우 → risk_percent를 0.5%로 낮춰 방어 강화
  • 시장 변동성이 커진 경우(예: ATR 상승) → stop_loss 폭을 1.0%로 확장
  • 승률이 높고 변동성이 낮은 경우 → take_profit 비율을 1.5%에서 2.0%로 상향

이렇게 GPT는 단순 신호 계산기를 넘어,
스스로 리스크를 최적화하는 AI 매매 시스템으로 진화할 수 있습니다.

🔹 9. 백테스트 시 반영 팁

리스크 관리 파라미터는 백테스트에서도 동일하게 적용해야 합니다.

  • 수익률 계산 시 수수료·펀딩비·손절/익절 포함
  • 매 거래당 risk_percent 만큼만 손실 가능하도록 제한
  • 전략 성능지표:
    • 최대 낙폭(MDD), 승률, 평균 수익/손실비(RR Ratio), 샤프지수(Sharpe Ratio)

이후 7편에서 GPT 백테스터를 직접 만드는 방법을 다룰 예정입니다.

🔹 10. 다음 편 예고 (6편)

다음 글에서는 “백테스트 & 페이퍼 트레이딩”을 다룹니다.
실제 거래 전, GPT가 전략을 검증하고 성과를 분석할 수 있는
“가상 거래 시뮬레이션 시스템”을 구축할 예정이에요.

✨ 맺음말

오늘은 단순한 주문을 넘어,
“얼마나 잃을 것인가”를 코드로 제어하는 리스크 관리 시스템을 구축했습니다.
이제 여러분의 GPT 트레이딩 봇은 단순한 실행기가 아니라
리스크를 인식하는 AI 트레이더”로 한 단계 진화했습니다.

다음 편에서는 이 전략을 실제로 검증할 수 있는
백테스트 엔진을 함께 만들어봅시다 🚀

 

바이낸스 가입 방법 총정리 (10% 수수료 할인 코드 포함)

바이낸스(Binance)는 세계 최대의 가상화폐 거래소 중 하나로, 현물 거래(Spot)와 선물 거래(Futures)를 모두 지원합니다. 또한 API를 이용한 자동매매 시스템 트레이딩도 가능하여, 전 세계 트레이더들

codelenz.tistory.com

 

반응형