먼저 API키가 필요합니다.
바이낸스 API키 발급 방법-> 바이낸스 API키 발급
만약 안되면 사용중인 PC의 시간을 동기화 해줘야 합니다.
윈도우 11 기준 화면 우측 하단에 표기된 시간을 우클릭 후
날짜 및 시간 조정을 누르신 다음 '지금 동기화'를 누르시면 됩니다.
import requests
import hmac
import hashlib
import time
from pprint import pprint
# 바이낸스 API 키와 시크릿 로드
with open("D:/코인/binance key.txt") as f:
lines = f.readlines()
api_key = lines[0].strip()
secret_key = lines[1].strip()
headers = {
"X-MBX-APIKEY": api_key,
}
# 바이낸스 API 요청 함수
def binance_api(endpoint, params, method):
params["timestamp"] = int(time.time() * 1000)
query_string = "&".join([f"{key}={value}" for key, value in params.items()])
params["signature"] = hmac.new(secret_key.encode(), query_string.encode(), hashlib.sha256).hexdigest()
url = "https://fapi.binance.com" + endpoint
try:
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, params=params)
else:
raise ValueError(f"잘못된 요청입니다 : {url}, {endpoint}, {params}, {method}")
return response.json()
except requests.exceptions.Timeout:
print(f"시간 초과 {url}, {endpoint}, {params}, {method}")
except requests.exceptions.RequestException as e:
print(f"에러 발생 : {e} \n {url}, {endpoint}, {params}, {method}")
# 계좌 잔액 및 포지션 정보 조회
def fetch_account_info():
endpoint = "/fapi/v2/account"
params = {}
return binance_api(endpoint, params, "GET")
account_info = fetch_account_info()
pprint(account_info)
balance = {'total' : account_info['totalMarginBalance'] ,'Order' : account_info['totalOpenOrderInitialMargin'] ,'Position' : account_info['totalUnrealizedProfit']}
print(balance)
08) 계좌 잔고 조회 - 파이썬을 이용한 비트코인 자동매매 (개정판) (wikidocs.net)
다음은 출력 결과입니다.
{'assets': [ ..(중략)
{'asset': 'USDT',
'availableBalance': '175.17533811',
'crossUnPnl': '0.00000000',
'crossWalletBalance': '175.21032339',
'initialMargin': '0.00000000',
'maintMargin': '0.00000000',
'marginAvailable': True,
'marginBalance': '175.21032339', # 잔고
'maxWithdrawAmount': '175.21032339', # 사용 가능한 금액
'openOrderInitialMargin': '0.00000000', # 대기 주문 금액
'positionInitialMargin': '0.00000000', # 포지션 유지 금액
'unrealizedProfit': '0.00000000',
'updateTime': 1733133671800,
'walletBalance': '175.21032339'},
보유중인 코인에 대한 정보입니다.
'positions': [
{'askNotional': '0',
'bidNotional': '0',
'entryPrice': '0.0', # 평단가
'initialMargin': '0',
'isolated': False,
'isolatedWallet': '0',
'leverage': '10', # 레버리지 배율
'maintMargin': '0',
'maxNotional': '25000000',
'notional': '0',
'openOrderInitialMargin': '0',
'positionAmt': '0.000', # 보유 수량
'positionInitialMargin': '0',
'positionSide': 'LONG',
'symbol': 'ETHUSDT', # 종목 이름
'unrealizedProfit': '0.00000000',
'updateTime': '1686523901026'},
{'askNotional': '0',
'bidNotional': '0',
'entryPrice': '1916.0',
'initialMargin': '0.95803485',
'isolated': False,
'isolatedWallet': '0',
'leverage': '10',
'maintMargin': '0.04790174',
'maxNotional': '25000000',
'notional': '-9.58034854',
'openOrderInitialMargin': '0',
'positionAmt': '-0.005',
'positionInitialMargin': '0.95803485',
'positionSide': 'SHORT',
'symbol': 'ETHUSDT',
'unrealizedProfit': '-0.00034854',
'updateTime': '1687395040585'},
같은 ETHUSDT를 'LONG'과 'SHORT' 으로 포지션을 분리하여 보여줍니다.
저는 Multi-Assets mode로 설정했는데, 아마 Single-Asset mode도 비슷할겁니다.
출력결과 마지막 부분입니다.
'totalCrossUnPnl': '0.00000000',
'totalCrossWalletBalance': '175.42536530',
'totalInitialMargin': '146.90938343',
'totalMaintMargin': '0.00000000',
'totalMarginBalance': '175.42536530', # 잔고
'totalOpenOrderInitialMargin': '146.90938343', # 대기 주문 금액
'totalPositionInitialMargin': '0.00000000', # 포지션 유지 금액
'totalUnrealizedProfit': '0.00000000',
'totalWalletBalance': '175.42536530',
'tradeGroupId': -1,
'updateTime': 0}
여담으로 원래 CCXT를 사용해서 불러오는 코드였는데
블로그 글 중 파이참 설치하는 내용을 작성하느라 재설치 했더니
ccxt 버전이 바뀐 탓인지 포지션 정보를 불러오는 항목이 달라져서
그냥 아예 바이낸스 API를 직접 사용해서 불러오도록 변경했습니다.
'파이썬 > 바이낸스 선물 API' 카테고리의 다른 글
[선물 API] 주문 넣기, 취소하기 (0) | 2024.11.21 |
---|---|
[선물 API] 바이낸스 선물 레버리지 배율 변경 (0) | 2024.11.21 |
[선물 API] 유통 공급량을 이용한 시총 계산 (0) | 2024.01.31 |
[선물 API] 여러개 주문 동시에 넣기 (0) | 2023.06.17 |
[선물 API] 차트 데이터 불러오기 (0) | 2023.06.17 |