파이썬/바이낸스 선물 API

[선물 API] 바이낸스 선물 레버리지 배율 변경

Eluv 2024. 11. 21. 21:22

만약 안되면 사용중인 PC의 시간을 동기화 해줘야 합니다.

윈도우 11 기준 화면 우측 하단에 표기된 시간을 우클릭 후

 날짜 및 시간 조정을 누르신 다음 '지금 동기화'를 누르시면 됩니다.

import requests
import hmac
import hashlib
import time
from binance.client import Client
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()

client = Client(api_key, secret_key)

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")

# 레비리지 변경
def change_leverage(symbol, leverage):
    try:
        response = client.futures_change_leverage(symbol=symbol, leverage=leverage)
        print(f"Leverage changed: {symbol} , {response}")
    except Exception as e:
        print(f"Error changing leverage: {e}")

same_symbol = 'symbol'
set_leverage = 2
account_info = fetch_account_info()

for x in account_info['positions']:
    l = int(x['leverage'])
    if l != set_leverage and same_symbol != x['symbol']:  # and symbol.endswith('USDT')
        change_leverage(x['symbol'], set_leverage)
        same_symbol = x['symbol']
        time.sleep(2)

 

간략하게 설명드리면 해당 코드는 바이낸스 선물에서

모든 종목들의 레버리지 배율을 일괄 변경하는 코드입니다.

 

특히 알트들 거래하다 보면 원래 보던 종목은 2, 3 배율정도 쓰다가

다른 종목으로 넘어갈 때 기본 배율이 20x으로 되어있는걸 깜박하고

고배율로 주문을 넣어버리는 경우가 있습니다.

그래서 실수를 방지하기 위해 배율을 일괄적으로 낮춰놓고 거래를 합니다.

 

물론 코드를 보시면 한번에 전부 다 변경하는 것이 아니라

A코인 변경

B코인 변경

C코인 변경

...

이런식으로 하나하나 반복해서 변경하는 매크로 기능입니다.

 

바이낸스의 선물에 상장된 종목의 수가 200개가 넘는 것으로 알고 있는데

그만큼 모두 변경하려면 대략 3~5분가량의 시간이 소요됩니다.

더 빠르게 작업을 시키고 싶다면 코드의 가장 마지막 부분을

원하는 딜레이 시간으로 수정하시면 됩니다.

time.sleep(0.5) # 0.5초에 한번

다만 바이낸스에서 제한하는 API 요청 제한 횟수가 있어서

0.1초와 같이 너무 짧게 줄이지 않는 것을 권장합니다.

 

그리고 처음에 한번 싹 다 변경한 이후에는 다음에 코드를 실행할 땐

그동안 새로 상장된 종목들만 변경하면 돼서 금방 끝납니다.

 

 

만약 이름이 USDT로 끝나는 종목만 변경하고 싶다면

if l > leverage and symbol != x['symbol']: # 해당 코드를 아래와 같이 변경

다음과 같이 변경하면 됩니다.

if l > leverage and symbol != x['symbol'] and symbol.endswith('USDT') :