Energy Drink

Upbit 자동 트레이딩 개발하기 (2) - 매수/매도 API 활용 본문

카테고리 없음

Upbit 자동 트레이딩 개발하기 (2) - 매수/매도 API 활용

Tech Energy 2024. 11. 29. 14:41
728x90
반응형

이전 글에서 Upbit API 키 발급 및 조회 방법을 알아봤습니다. 이번 글에서는 Python을 이용해 자동 매수 및 매도 기능을 구현하는 방법을 소개합니다. 이를 통해 간단한 자동 트레이딩 시스템의 기초를 다져봅시다!

 

1. 준비 사항

  1. API 키 발급
    이전 포스팅에서 다룬 내용을 참고해 Upbit API 키를 발급받으세요.
  2. 시장 정보 확인
    Upbit에서 거래 가능한 가상자산의 티커(Ticker) 정보를 확인해야 합니다. 예를 들어, BTC/KRW는 비트코인의 원화 마켓입니다.

2. 매수 기능 구현

매수는 특정 금액만큼 가상자산을 시장가로 구매하는 작업입니다. pyupbit의 buy_market_order 메서드를 사용해 쉽게 구현할 수 있습니다.

  • buy_market_order( ticker: str, price: float )
    지정된 금액만큼 시장가로 가상자산을 매수합니다.
    • 매개변수
      • ticker (str) : 거래 대상 티커 ( 예: "KRW-BTC" (비트코인), "KRW-ETH" (이더리움) )
      • price (float) : 매수 금액 (KRW 단위)
    • 반환값 
      • 매수가 성공하면 주문 관련 정보가 포함된 딕셔너리를 반환합니다. 반환값의 주요 필드는 다음과 같습니다:)
      • uuid: 주문 고유 ID.
      • side: 주문 방향 (bid는 매수).
      • price: 매수 요청 금액.
      • volume: 주문 후 체결된 가상자산 수량.

매수 코드 예제

import pyupbit

# API 키 설정
access_key = "발급받은 Access Key를 입력하세요"
secret_key = "발급받은 Secret Key를 입력하세요"

# Upbit API 객체 생성
upbit = pyupbit.Upbit(access_key, secret_key)

# 매수 함수
def buy_crypto(currency, krw_amount):
    try:
        # 시장가 매수
        result = upbit.buy_market_order(currency, krw_amount)
        print(f"{currency} 매수 성공: {result}")
    except Exception as e:
        print(f"{currency} 매수 실패: {e}")

# BTC를 10,000원어치 매수
buy_crypto("KRW-BTC", 10000)
 

3. 매도 기능 구현

매도는 보유 중인 가상자산을 시장가로 판매하는 작업입니다. pyupbit의 sell_market_order 메서드를 활용합니다.

  • sell_market_order( ticker: str, amount: float )
    보유 중인 가상자산을 시장가로 매도합니다.
    • 매개변수
      • ticker (str) : 거래 대상 티커 ( 예: "KRW-BTC" (비트코인), "KRW-ETH" (이더리움) )
      • amount (float) : 매도할 가상자산의 수량 ( 예: 0.01은 비트코인 0.01개를 의미합니다.)
    • 반환값
    • 매도가 성공하면 주문 관련 정보가 포함된 딕셔너리를 반환합니다. 반환값의 주요 필드는 다음과 같습니다:
    • uuid: 주문 고유 ID.
    • side: 주문 방향 (ask는 매도).
    • price: 매도 시점의 시장 가격.
    • volume: 주문 후 체결된 가상자산 수량.

매도 코드 예제

# 매도 함수
def sell_crypto(currency, amount):
    try:
        # 시장가 매도
        result = upbit.sell_market_order(currency, amount)
        print(f"{currency} 매도 성공: {result}")
    except Exception as e:
        print(f"{currency} 매도 실패: {e}")

# BTC 0.0005개 매도
sell_crypto("KRW-BTC", 0.0005)
 

4. 추가 Tip: 잔고 확인 후 자동 매수/매도

잔고를 확인하여 조건부로 매수/매도를 실행할 수도 있습니다.

잔고 확인 및 조건부 매수/매도

# 잔고 확인 함수
def get_balance(currency):
    balances = upbit.get_balances()
    for b in balances:
        if b['currency'] == currency.replace("KRW-", ""):
            return float(b['balance'])
    return 0

# 잔고를 기준으로 조건부 매수/매도 실행
btc_balance = get_balance("KRW-BTC")
print(f"현재 BTC 잔고: {btc_balance}")

if btc_balance == 0:
    print("BTC 잔고가 없으므로 10,000원어치 매수합니다.")
    buy_crypto("KRW-BTC", 10000)
else:
    print(f"BTC 잔고가 {btc_balance}개 있으므로 전량 매도합니다.")
    sell_crypto("KRW-BTC", btc_balance)

6. 실행 결과

  • 매수 실행 시
KRW-BTC 매수 성공: {'uuid': 'UUID값', 'side': 'bid', ...}
  • 매도 실행 시
KRW-BTC 매도 성공: {'uuid': 'UUID값', 'side': 'ask', ...}

7. 주의 사항

  1. API 요청 속도 제한
    Upbit API는 초당 요청 수에 제한이 있습니다. 이를 초과하면 계정이 일시적으로 차단될 수 있으니 주의하세요.
  2. 실거래 주의
    테스트 환경이 아닌 실거래 환경에서는 항상 소액으로 충분히 테스트 후 사용하세요.
  3. 보안 관리
    API 키는 외부에 노출되지 않도록 환경 변수나 설정 파일에서 관리하세요.
728x90
반응형