본문 바로가기
파이썬/가상화폐

Python 바이낸스 거래소 선물자동매매 개발 가이드 ep2.레버리지 설정

by 행복론자 2022. 12. 29.

지난 글에서는 ep1.프롤로그&패키지 설치까지 다뤄봤습니다.

2022.12.29 - [파이썬/가상화폐] - Python 바이낸스 선물자동매매 개발 가이드 ep1.프롤로그&패키지 설치

 

Python 바이낸스 선물자동매매 개발 가이드 ep1.프롤로그&패키지 설치

2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되

jsp-dev.tistory.com

 

그럼 계속 이어서 계속진행해보겠습니다. 만약 전체 내용이 궁금하신 분들은 다음 글을 참고해주세요

2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

 

[전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

🎁 바이낸스 자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. "나 대신 일해주는 코인선물자동매매 프로그램 개발, 노하우 및 소스를 모두 공개합니다" ✔️ Q: 무슨 내용인가요? Python

jsp-dev.tistory.com

 

 

앞으로 다룰 API 관련 이야기들은 순서가 정해진 내용들은 아니지만

기본적인 API 사용부터 잔고/포지션 조회, 주문접수까지 해보겠습니다. 

 

선물 레버리지?

 

우선 레버리지라는 용어부터 살펴보겠습니다.

요즘 부쩍 여러 매체에서 "레버리지를 사용한다"는 표현이 자주 보이고 있습니다.

레버리지의 영문 뜻은 지렛대를 의미하며 선물거래에서는 내가 실제 보유한 증거금 보다 많은 금액을 제어할 수 있는 정도를 말합니다. 예를 들어 선물 계정에 100USDT만 보유하고 있지만 10배의 레버리지를 사용해 BTC/USDT 계약을 체결한다면 최대 1,000USDT만큼의 BTC/USDT 거래가 가능합니다. 다만 이럴 경우 BTC/USDT 가격이 1%만 하락하더라도 내가 보유한 증거금의 10%가 하락하게 되며 체결시 레버리지를 적용한만큼의 거래 수수료를 더 내야한다는 점을 기억하시기 바랍니다.

 

 

레버리지 설정?

레버리지 설정은 선물거래에 사용할 레버리지 배율을 설정하는 것이며 Binance 앱에서는 다음 영역을 의미합니다. 

 

 

위 화면에서는 레버리지를 3배로 설정해둔 것이며 거래소 및 거래 페어(pair, BTC/USDT 혹은 ETH/USDT 같은 거래쌍)별로 다르지만 많게는 최대 125배까지도 설정할 수도 있습니다. 

레버리지 설정은 화면에서 빨간색 영역을 클릭해서 설정할 수도 있지만 Python 코드를 이용해서도 가능합니다. 우리가 사용할 binance-futures-connector-python 패키지에서는 이미 이 기능을 구현해두었기 때문에 그저 호출해 사용하기만 하면 됩니다.
샘플 코드는 링크에 있으며 우선은 샘플 코드를 그대로 복사해 main.py에 붙여넣도록 해보겠습니다.
main.py

import logging
from binance.um_futures import UMFutures
from binance.lib.utils import config_logging
from binance.error import ClientError

config_logging(logging, logging.DEBUG)

key = ""
secret = ""

um_futures_client = UMFutures(key=key, secret=secret)

try:
   response = um_futures_client.change_leverage(
       symbol="BTCUSDT", leverage=2, recvWindow=6000
   )
   logging.info(response)
except ClientError as error:
   logging.error(
       "Found error. status: {}, error code: {}, error message: {}".format(
           error.status_code, error.error_code, error.error_message
       )
   )

 

위 코드를 실행하면 에러가 발생하며 제대로 동작하지 않습니다. 

 

그 이유는 이 코드의 역할은 특정 유저의 선물계약 거래쌍(BTCUSDT)의 레버리지를 설정하는 것인데, 요청을 보낼 때 우리가 누구인지 알려주지 않아서 입니다.
이럴 때 필요한 것이 API_Key와 Secret_Key를 전달하여 요청의 주체를 알려주는 것입니다. 당연하게도 이 키는 유저별로 고유하기 때문에 이 값들을 전달해 Binance API 서버에서 요청 주체를 식별할 수 있습니다. 
따라서 코드 윗부분에 있는 key, secret 변수에 값을 다음처럼 전달해줍니다. 

key = os.getenv("BINANCE_API_KEY")
secret = os.getenv("BINANCE_SECRET_KEY")

 

하지만 샘플 코드는 os 패키지를 import 하는 부분이 없기 때문에 이를 추가해준 전체 코드는 다음과 같습니다.

import logging
from binance.um_futures import UMFutures
from binance.lib.utils import config_logging
from binance.error import ClientError
import os

config_logging(logging, logging.DEBUG)

key = os.getenv("BINANCE_API_KEY")
secret = os.getenv("BINANCE_SECRET_KEY")

um_futures_client = UMFutures(key=key, secret=secret)

try:
   response = um_futures_client.change_leverage(
       symbol="BTCUSDT", leverage=2, recvWindow=6000
   )
   logging.info(response)
except ClientError as error:
   logging.error(
       "Found error. status: {}, error code: {}, error message: {}".format(
           error.status_code, error.error_code, error.error_message
       )
   )

 

실행해보면 다음 같은 결과가 나오는 것을 알 수 있습니다.

 

요청의 응답을 대강보면 BTCUSDT의 레버리지를 2배로 설정했다는 것 같습니다.
실제로 다시 앱에 접속해 선물거래 탭을 가보면 다음처럼 BTCUSDT의 레버리지가 변경된 것을 알 수 있습니다.

 

그러나 um_futures_client.change_leverage 함수를 통해 레버리지 설정 요청을 보낸다고 해서 보내는대로 전부 다 바뀌는 것은 아닙니다. 

만약 레버리지를 최대값보다 높게 설정하고 실행하면 에러가 납니다. 

아래 코드는 레버리지를 2000배로 설정해달라고 요청하는 것입니다. 

response = um_futures_client.change_leverage(
   symbol="ETHUSDT", leverage=2000, recvWindow=6000
)

 

 

요청에 대한 응답은 error가 발생했다는 내용입니다.

ERROR:root:Found error. status: 400, error code: -4028, error message: Leverage 2000 is not valid

 

 

따라서 레버리지 설정 요청함수를 호출하고 나서 호출결과를 확인해 레버리지가 정상적으로 변경되었는지 확인하는 과정이 필요할 수 있어 보입니다. 하지만 이에 대한 처리는 패키지에서 처리해주니 신경쓰지 않아도 됩니다.
이렇게 다소 복잡해보였던 패키지 사용을 하나씩 살펴보았습니다. 제일 중요한 것은 발급받은 API Key를 이용해 um_futures_client 객체를 만들고 um_futures_client의 정의된 함수를 통해 API를 호출할 수 있다는 점을 이해하는 것입니다.
당연한 이야기이지만 변수의 이름은 반드시 um_futures_client일 필요는 없습니다. UMFutures 클래스를 통해 생성한 인스턴스라면 변수 이름은 어떻게 만들어도 상관없습니다.
궁금하실 수도 있는 부분은 change_leverage 함수말고 사용할 수 있는 다른 기능들을 전부 다 확인하는 방법일 것입니다.이 부분은 샘플코드가 있는 링크에서 확인할 수 있습니다. 

 


같이 읽어보면 좋은 글

2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

 

[전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.

🎁 바이낸스 자동매매 시스템 개발 방법을 담은 책이 출시되었습니다. "나 대신 일해주는 코인선물자동매매 프로그램 개발, 노하우 및 소스를 모두 공개합니다" ✔️ Q: 무슨 내용인가요? Python

jsp-dev.tistory.com

 

2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄

 

[공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프

https://kmong.com/gig/417785 거래소별 코인 프리미엄 알림봇 개발 가이드를 드립니다 | 36000원부터 시작 가능한 총 평점 5점의 3개 총 작업 개수 완료한 총 평점 5점인 JSDEV의 전자책, 투잡·재테크 전자

jsp-dev.tistory.com

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글