안녕하세요 요번시간은 바이낸스 선물 api를 통하여 레버리지(Leverage), 손실 제한(Stop Limit), 이익 실현(Take Profit)에 대해 작성하겠습니다.
레버리지란 바이낸스 선물(Future) 거래에서 사용할 수 있으며 갖고 있는 증거금을 모두 담보로 하는 교차 마진(Cross Margine)과 설정한 증거금만 사용하는 격리 마진(Isolated Margine)이 있습니다.
바이낸스 api를 통해 교차 혹은 격리를 설정하는 법은 찾지 못하여, 먼저 바이낸스 로그인 후, 원하는 포지션(교차 혹은 격리) 로 설정하여 아래의 레버리지를 결정하는 코드를 사용하면 되겠습니다.
1. 바이낸스 선물 레버리지(Leverage) 설정
import ccxt
with open('경로//binance_api_key.txt') as f:
lines = f.readlines()
api_key = lines[0].strip()
secret = lines[1].strip()
binance = ccxt.binance(config={
'apiKey': api_key,
'secret': secret,
'enableRateLimit': True,
'options': {
'defaultType': 'future'
}
})
def set_leverage(symbol,leverage):
global binance
markets = binance.load_markets()
symbol = symbol
market = binance.market(symbol)
leverage = leverage
resp = binance.fapiPrivate_post_leverage({'symbol': market['id'],'leverage': leverage})
필자의 경우 api_key와 secret_key를 txt파일에 각각 한줄씩 써, key를 보관하였습니다. (코드 3줄)
- 선물 api를 설정하는 binance 객체를 만들어줍니다. (코드 8줄)
- Global 을 사용하여 binance를 함수안에도 사용할수 있도록 전역 변수로 설정합니다. (코드 18줄)
- 함수의 input 값 symbol, leverage 을 각자 원하는 방향으로 설정합니다, ex) 'BTC/USDT',5 or 'ETH/USDT',25 (코드 17줄)
바이낸스 접속하여 원하는 코인의 레버리지가 잘 설정되있는지 확인합니다.
2. 바이낸스 선물 손실 제한(Stop Limit), 이익 실현(Take Profit) 설정
import ccxt
with open('경로//binance_api_key.txt') as f:
lines = f.readlines()
api_key = lines[0].strip()
secret = lines[1].strip()
binance = ccxt.binance(config={
'apiKey': api_key,
'secret': secret,
'enableRateLimit': True,
'options': {
'defaultType': 'future'
}
})
def long_tp_sl(symbol,loss,profit): #ex)'BTCUSDT
global binance
balance = binance.fetch_balance()
positions = balance['info']['positions']
for position in positions:
if position["symbol"] == symbol:
amt = float(position['positionAmt'])
ep = float(position['entryPrice'])
leverage = float(position['leverage'])
stop_loss = ep*(1-loss/leverage)
take_profit = ep*(1+profit/leverage)
binance.create_order(symbol="BTC/USDT",type="STOP_MARKET",side="sell",amount=amt,params={'stopPrice': stop_loss})
binance.create_order(symbol="BTC/USDT",type="TAKE_PROFIT_MARKET",side="sell",amount=amt,params={'stopPrice': take_profit})
바이낸스 선물로 자동매매 할 시, 리스크가 커지므로 대부분 Stop Limit 과 Take Profit을 설정하게 됩니다.
제가 만든 함수의 input은 symbol(원하는 코인), loss(손절 비율), profit(손익 비율)입니다. ex) 'BTC/USDT', 0.03, 0.05 (코드 17줄)
- binacne를 함수에도 사용할수 있도록 전역 변수(Global)로 설정합니다. (코드 18줄)
- fetch_balance()를 사용하여 balance 객체를 만들어 줍니다. (코드 19줄)
- 만들어진 객체는 사전(dictionary) 형식으로, ['info'], ['position'] key로 접속합니다. (사전 형식에 많은 정보가 담겨져 있으므로, key 값을 사용하여 원하는 value를 얻을수 잇음, 코드 20줄)
- 만약 position의 symbol이라는 키가 함수 input 값의 symbol과 같다면 매수한 수량(amt), 진입 가격(ep), 설정한 레버리지(leverage) 를 이용해 원하는 손절 비율, 손익 비율을 설정 합니다.
- binance객체의 create_order()를 사용하여 Take Profit, Stop Limit 주문을 합니다. 위의 코드처럼 type과 side를 잘 설정하여 주문을 해 줍시다.(코드 28, 29줄)
위의 코드를 실행하여 바이낸스 사이트로 접속후 손익,손절 라인 주문이 들어간 것을 확인할 수 있습니다. 또한 위의 코드는 포지션(롱 혹은 숏) 이 있어야지 설정이 됩니다. 위의 코드를 사용하면 Open Orders 에 밑의 그림과 달리 1개가 아닌 2개의 주문이 들어간것을 확인 할 수 있습니다.