카테고리
코딩

파이썬 ccxt 라이브러리 바이낸스 API 사용 방법

세계적으로 유명한 비트코인 바이낸스 거래소에서 자동으로 매매를 하기 위한 API 사용 방법을 소개합니다.

API 신청

바이낸스 앱을 실행시키고 Search에 API를 입력합니다.

Functions 카테고리에 API Management 항목을 선택합니다.

Create API 항목을 선택합니다.

적당히 키 레이블을 입력하고 Next 버튼을 선택합니다.

보안을 위해 퍼즐을 맞춥니다.

그 다음 폰 문자 인증과 이메일 인증을 진행합니다.

완료 하면 API Key와 Secret Key를 얻을 수 있습니다.

저는 선물 거래를 위해 Enable Futures 항목을 체크했고 현물 거래와 선물 거래 간 입금 및 출금을 위해 Permits Universal Transfer 항목도 체크했습니다.

ccxt 라이브러리 설치

그 다음에는 바이낸스 API를 쉽게 사용하기 위해 파이썬 라이브러리인 ccxt를 설치해 보도록 하겠습니다.

파이썬 사용 방법은 알고 있다고 가정하고 진행합니다.

다음 사이트에서 설명 및 설치 방법을 확인할 수 있습니다.

CCXT – CryptoCurrency eXchange Trading Library

다음 명령어를 통해 설치가 가능합니다.

pip install ccxt

바이낸스 API 사용 준비

먼저 ccxt 라이브러리를 import 합니다.

import ccxt

앞서 신청한 API Key 값을 사용하여 바이낸스 인스턴스를 생성하는 코드입니다. options 부분의 defaultType은 spot이며 future를 입력하면 선물 거래가 가능합니다.

binance_access_key = "xxxxxxxxx"
binance_secret_key = "yyyyyyyyy"

binance = ccxt.binance(config={
    'apiKey': binance_access_key, 
    'secret': binance_secret_key,
    'enableRateLimit': True,
    'options': {
        'defaultType': 'future'
    }
})

현재가 조회

다음과 같이 간단하게 조회가 가능합니다.

binance.fetch_ticker('BTC/USDT')

잔고 조회

먼저 선물 거래의 USDT 잔고를 조회하는 코드를 알아 보겠습니다. params의 type에 future를 입력합니다. spot을 입력하면 현물 거래 잔고를 조회할 수 있습니다.

balance = binance.fetch_balance(params={"type": "future"})
print(balance['USDT']['free'])

현물 거래에서 보유한 코인의 볼륨을 가져오는 코드도 작성해 보겠습니다.

balance_info = binance.fetch_balance(params={"type": "spot"})
for balance in balance_info['info']['balances']:
    if market['id'].find(balance['asset']) > -1:
        print(abs(float(balance['free'])))

다음은 선물 거래에서 숏 포지션에 진입한 코인의 볼륨을 가져오는 코드입니다. 현물 거래의 코드와의 차이점을 잘 확인하기 바랍니다.

balance_info = binance.fetch_balance(params={"type": "future"})
for position in balance_info['info']['positions']:
    if position['symbol'] == market['id']:
        print(abs(float(position['positionAmt'])))

선물 거래 진입과 정리

다음은 숏 포지션 진입 코드입니다. 시장가 및 지정가 거래 모두 가능합니다.

symbol='BTC/USDT'

# market sell order
sell_order = binance.create_market_sell_order(symbol=symbol, amount=0.1)

# limit sell order
btc = binance.fetch_ticker(symbol)
sell_order = binance.create_limit_sell_order(symbol=symbol, amount=0.1, price=btc['last'])

그리고 숏 포지션 정리 코드입니다. 마찬가지로 시장가 및 지정가 거래를 할 수 있습니다.

symbol='BTC/USDT'

# market buy order
buy_order = binance.create_market_buy_order(symbol=symbol, amount=0.1)

# limit buy order
btc = binance.fetch_ticker(symbol)
buy_order = binance.create_limit_buy_order(symbol=symbol, amount=0.1, price=btc['last'])

롱 포지션 진입과 정리는 반대로 진행하면 되고 현물 거래도 동일한 매소드로 진행이 가능합니다.

현물과 선물 간 계좌 이체

먼저 현물에서 선물 계좌로 이체하기 위해 현물 계좌 잔고 액수를 조회하고 그 값을 그대로 선물 계좌로 전송하면 됩니다. 바이낸스 거래소 내의 계좌에서 이체 시에 수수료는 없습니다.

balance_spot = binance.fetch_balance(params={"type": "spot"})
balance_spot_free = balance_spot['USDT']['free']
if balance_spot_free > 0:
    transfer = binance.transfer('USDT', balance_spot_free, 'spot', 'future')

반대의 경우도 마찬가지 입니다.

balance_future = binance.fetch_balance(params={"type": "future"})
balance_future_free = balance_future ['USDT']['free']
if balance_future_free > 0:
    transfer = binance.transfer('USDT', balance_future_free, 'future', 'spot')

레버리지 설정

선물 거래의 경우 레버리지 설정이 가능합니다. 코드는 다음과 같습니다. leverage 부분의 숫자를 변경하면 됩니다.

markets = binance.load_markets()
market = binance.market('BTC/USDT')
resp = binance.fapiPrivate_post_leverage({
    'symbol': market['id'],
    'leverage': 2
})

거래 데이터 조회하기

다음과 같이 코드를 작성하면 BTC 일일 거래 데이터를 1000개 조회할 수 있습니다.

candles = binance.fetch_ohlcv(
    symbol='BTC/USDT', 
    timeframe='1d', 
    since=None,
    limit=1000)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

ko_KR한국어