호돌찌의 AI 연구소
article thumbnail

바이낸스 API를 활용해서 선물 거래 잔고를 확인하며 각종 세팅값(격리 유무 및 레버리지 배율 조정) 지정하는 내용을 다룹니다. 또한 롱/숏 포지션을 잡고 포지션을 종료하는 글을 작성해보려 합니다. 이번 글에서 거래하고자 하는 코인은 BTC/USDT로 하려고 합니다. 이를 따라 하기 위해서는 먼저 USDT(테더)를 선물 거래 계좌에 옮겨놔야 하고, 혹시 선물 거래가 처음인 경우에는 거래소에서 위험성을 거래하는 사람에게 알려주기 위해 퀴즈를 풀게 시킵니다. (퀴즈 내용은 주기적으로 바뀌기 때문에 따로 구글에 리서치하는 것을 권장합니다.) 이와 관련된 내용은 URL로 남기겠습니다. 또한 원하는 암호화폐와 타임프레임에 맞는 데이터를 부르는 내용은 아래 글을 참고하시면 됩니다. 

 

- Binance 암호화폐 데이터 부르기 

2022.09.06 - [Programming/Crypto] - 바이낸스 암호화폐 데이터 부르기 (ccxt를 활용한 binance 암호화폐 데이터 부르기)

 

바이낸스 암호화폐 데이터 부르기 (ccxt를 활용한 binance 암호화폐 데이터 부르기)

바이낸스 거래소에서 발급받은 API 키를 활용하여 암호화폐 데이터를 부르는 글을 소개하고자 합니다. 업비트에서는 pyupbit 라는 라이브러리를 활용했었습니다. 이번에는 여러 거래소들의 API 들

hotorch.tistory.com

 

- 바이낸스 현물(Fiat & Spots) 에서 선물(Futures) 계좌로 옮기기 

https://coinpick.com/binance_board/177500

 

[영문,영어] 바이낸스 현물 지갑과 선물 지갑 지갑간 전송하는 방법 - 바이낸스 게시판 - 코인픽

이번 포스팅에서는 바이낸스 영문버전에서 현물 지갑↔선물 지갑 간 코인을 이동하는 방법에 대해 설명드리겠습니다. 거래에 앞서 아직 바이낸스 회원이 아니신 경우에는 다음 링크의 글을 참

coinpick.com

 

- 바이낸스 선물 퀴즈 문답

https://oppapost.com/1218

 

바이낸스 선물 퀴즈 및 마진 퀴즈 정답 14개 - 오빠포스트

오늘의 포스팅에서는 바이낸스 선물 퀴즈 및 마진 퀴즈 정답 14개 및 14번 정답까지 자세하고 상세하게 알아보고 보기 쉽게 문제 정답을 알려드리겠습니다.

oppapost.com

 

 

 

바이낸스 선물 거래 객체 생성 및 잔고 조회하기


우선 이전에 저장해두었던 API Key를 부르고 ccxt를 활용해 binance 객체 만듭니다. config의 args에 API Key를 넣는데, option에 선물 거래를 하겠다는 옵션('options':{'defaultType':'future'})을 기입합니다. 

 

import pickle

# api key 부르기
with open('./keypair/binance_secret_key.pkl', 'rb') as k:
    secret_key = pickle.load(k)

secret = secret_key['secret key']
access = secret_key['access key']

import ccxt
import time
import pandas as pd

# 객체 생성, 선물 거래 옵션 args 부여
binance = ccxt.binance(config = {
    'apiKey':access,
    'secret':secret,
    'enableRateLimit':True,
    'options':{
        'defaultType':'future'
    }
})

 

그 이후 선물 계좌에 있는 USDT의 보유 현황을 보고자 합니다. 저는 아래와 같이 100$ 정도의 USDT를 옮겨놨습니다. 

 

아래와 같이 fetch_balance() methods를 활용하는데, type에 선물 거래 parameters (params={"type": "future"}) 를 기입합니다. 코드를 실행한 결과를 보면 아래 dictionary처럼 결과가 나타납니다. 

# 선물 계좌 조회
balances = binance.fetch_balance(params={"type": "future"})
balances

# 실행 결과 
# {'info': {'feeTier': '0',
#   'canTrade': True,
#   'canDeposit': True,
#   'canWithdraw': True,
#   'updateTime': '0',
#   'totalInitialMargin': '0.00000000',
#   'totalMaintMargin': '0.00000000',
#   'totalWalletBalance': '100.97317052',
#   'totalUnrealizedProfit': '0.00000000',
#   'totalMarginBalance': '100.97317052',
#   'totalPositionInitialMargin': '0.00000000',
#   'totalOpenOrderInitialMargin': '0.00000000',
#   'totalCrossWalletBalance': '100.97317052',
#   'totalCrossUnPnl': '0.00000000',
#   'availableBalance': '100.97317052',
#   'maxWithdrawAmount': '100.97317052',
#   'assets': [{'asset': 'DOT',
#     'walletBalance': '0.00000000',
#     'unrealizedProfit': '0.00000000',
#     'marginBalance': '0.00000000',
#     'maintMargin': '0.00000000',
#     'initialMargin': '0.00000000',
#     'positionInitialMargin': '0.00000000',
#     'openOrderInitialMargin': '0.00000000',
#     'maxWithdrawAmount': '0.00000000',
#     'crossWalletBalance': '0.00000000',
#     'crossUnPnl': '0.00000000',
#     'availableBalance': '0.00000000',
#     'marginAvailable': True,
#     'updateTime': '0'},
#    {'asset': 'BTC',
#     'walletBalance': '0.00000000',
#     'unrealizedProfit': '0.00000000',
#     'marginBalance': '0.00000000',
#     'maintMargin': '0.00000000',
#     'initialMargin': '0.00000000',
#     'positionInitialMargin': '0.00000000',
#     'openOrderInitialMargin': '0.00000000',
#     'maxWithdrawAmount': '0.00000000',
#     'crossWalletBalance': '0.00000000',
#     'crossUnPnl': '0.00000000',
#     'availableBalance': '0.00000000',
#     'marginAvailable': True,
#     'updateTime': '0'},
# ......... (후략)

 

USDT와 BTC 가 얼마 있는지 dictionary의 key에 기입하여 확인합니다. 위에서 100$를 미리 옮겨 놨다고 했는데 캡처를 뜬 금액과 같음을 알 수 있습니다. 

print(balances['USDT'])
print(balances['BTC'])

# {'free': 100.97317052, 'used': 0.0, 'total': 100.97317052}
# {'free': 0.0, 'used': 0.0, 'total': 0.0}

 

 

선물 거래 격리 유무 및 레버리지 배율 조절하기 


우선 선물 거래를 하기 위해 거래 화면으로 가봅니다. 

 

아래 그림에서 우측 상단에 붉은 색으로 쳐둔 부분이 격리 유무와 레버리지 배율을 조정할 수 있는 부분입니다. 격리 종류로는 Cross(교차), Isolated(격리) 두 종류가 있습니다. 간단히 두 방법에 대한 차이는 Cross(교차) 모드는 들고 있는 예수금까지 전부 담보로 잡히기 때문에 진입한 포지션 이상으로 반대방향으로 매매가 되는 경우 예수금까지 청산을 당할 수 있는 위험을 가지고 있습니다. Isolated(격리) 모드는 포지션 잡은 금액만큼만 청산이 되는 경우입니다. 만약에 100$ 중에 10$만큼 롱으로 100배 포지션을 잡았다고 했을 때 1% 떨어지면 포지션을 잡은 10$만큼 청산을 당합니다. 

 

현재 화면상으로는 교차모드로 20배 레버리지로 기본 값으로 설정이 되어있습니다. 이제 이를 자동으로 매매하기 이전에 세팅을 할 필요가 있을 수 있습니다. 테스트를 위해 저는 이 부분을 격리 모드와 레버리지 배율을 3배로 바꾸어보겠습니다. 아래 코드와 같이 각종 constant 값들을 지정하여 이에 반영합니다. 그리고 binance 객체 아래의 methods를 레버리지 배율과 격리 유무를 지정을 하는데, 예외처리를 걸어 둡니다. 

 

leverage = 3   
target_coin = 'BTCUSDT'
isolated = True 

# 레버리지 배율 조정
try:
    print(binance.fapiPrivate_post_leverage({'symbol': target_coin, 'leverage': leverage}))
except Exception as e:
    print("error:", e)
 
# 결과
# {'symbol': 'BTCUSDT', 'leverage': '3', 'maxNotionalValue': '200000000'}
    
# 격리 / 교차 모드 조정
if isolated == True:
    try:
        print(binance.fapiPrivate_post_margintype({'symbol': target_coin, 'marginType': 'ISOLATED'}))
    except Exception as e:
        print("error:", e)
        
 # 결과
 # {'code': '200', 'msg': 'success'}

 

만약에 위와 같이 에러 없이 print 된다면 배율과 격리 유무가 제대로 세팅이 된 것 입니다. 매매 화면으로 갔을 때 반영되어 바뀐 것을 확인을 할 수 있습니다. 

 

 

 

다음 글에서는 이렇게 세팅이 된 상태에서 예수금을 바탕으로 롱/숏 포지션을 잡아보도록 하겠습니다. 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!