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

Python 바이낸스 거래소 선물자동매매 개발 가이드 ep7.주문접수

by 행복론자 2023. 1. 16.

아래는 지난 글인 호가창 조회입니다.

2023.01.13 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가창 조회

 

Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가창 조회

아래는 지난 글인 캔들 데이터 조회입니다. 2023.01.06 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep5.캔들 데이터 조회 Python 바이낸스 거래소 선물자동매매 개발 가이

jsp-dev.tistory.com

 

이제 주문을 접수해보도록 하겠습니다. API를 이용해 접수가능한 주문 타입은 지정가 주문, 시장가 주문 그리고 TP/SL(Take Profit / Stop Loss) 주문 그리고 Trailing Stop 주문이 있습니다. 본 프로젝트에서는 지정가 주문(Limit)을 사용할 예정이며 이용 가능한 나머지 주문 정보는 이 링크를 확인하시기 바랍니다. 

 

그러면 주문 접수 샘플 코드를 이용해보겠습니다. 주문 접수는 API Key를 전달해야하며 API Key를 소유한 선물 계정에 USDT가 존재해야 주문이 가능합니다. 
그러면 코드를 살펴보겠습니다. 

main.py

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.new_order(
       symbol="BTCUSDT",
       side="SELL",
       type="LIMIT",
       quantity=0.001,
       timeInForce="GTC",
       price=59808.02,
   )
   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
       )
   )

 

 

실제 주문을 접수하는 함수는 try 구문에 new_order 함수를 통해 이루어집니다.
이 함수를 호출하며 사용하는 파라미터들을 하나씩 살펴보겠습니다.
1)symbol : 주문대상 페어입니다. BTCUSDT, ETHUSDT, ETCUSDT 등 Binance에서 제공하는 거래 페어를 대문자로 전달하면 됩니다.

2)side : 보유 포지션이 없는 상태와 포지션을 보유했을 때를 구분해야 합니다. 
예를 들어 보유 포지션이 없는 상태에서 ‘SELL’을 전달하면 숏(short) 포지션을 오픈하는 것입니다. 반대로 ‘BUY’를 전달하면 롱(long) 포지션을 오픈하는 것입니다.

그러나 포지션을 보유한 상태에서는 보유 포지션과 반대에 해당하는 값을 전달해야합니다.
롱포지션을 보유중인 상태에서 지정가 주문으로 포지션을 종료시키려면 ‘SELL’을 전달해야하며 숏포지션을 보유중인 상태에서 포지션을 종료시키려면 ‘BUY’를 전달해야합니다. 파라미터를 전달할 때는 대소문자를 구분하므로 항상 대문자로 전달하시기 바랍니다. 

3)type: 역시 대소문자를 구분하며 ‘LIMIT’을 전달하면 지정가 주문을 의미합니다. API를 통해 접수 가능한 주문 목록은 링크를 확인하시기 바랍니다.

 

4)quantity: 주문 수량을 의미합니다. BTCUSDT의 경우 최소주문 수량이 소수점 3째자리 이상의 숫자입니다. 따라서 0.001개는 주문이 가능하지만 0.0009개는 주문할 수 없습니다. 이렇게 최소주문가능수량은 샘플 코드 실행결과에서 확인할 수 있습니다. 본 프로젝트에서는 특정 페어만을 이용해 트레이딩 하기 때문에 최소주문가능한 소수점 자리를 고정값으로 사용하지만 전체 페어 중에 매수 시그널이 발생한 페어를 확인해 트레이딩할 경우 샘플 코드를 통해 최소주문가능 수량을 조회해 사용해야할 것입니다.

5)timeInForce: timeInForce은 주문취소 관리방법으로 기본적으로 GTC(Good Till Cancel)으로 고객이 주문을 취소할 때까지 유효한 주문 방식을 의미합니다. 

 

 

6)price: 지정가 주문을 접수하는 경우, 체결을 희망하는 가격을 의미합니다. 반대로 시장가 주문을 접수하면 현재 체결가로 즉시 주문이 되므로 이 파라미터를 사용할 필요가 없습니다. 본 프로젝트에서는 호가조회 API를 통해 얻어온 최고매수/매도호가를 전달해 주문이 즉시 체결될 수 있도록 하겠습니다.

현재 BTCUSDT 가격이 16,800USDT 부근이기 때문에 위 샘플코드를 실행하면(주문가격:5만9천달러에 숏) 주문이 정상적으로 접수되지 않습니다. 그 이유는 현재 체결이 이루어지는 호가와 너무 큰 차이가 발생하기 때문입니다.
따라서 주문가격을 16,900USDT로 수정하고 실행해보겠습니다.

 

주문이 정상 접수 되었을 때의 응답은 다음과 같습니다.

{'orderId': 98099552477, 'symbol': 'BTCUSDT', 'status': 'NEW', 'clientOrderId': '8mBmlYe6jdYnIFsFl9kRSn', 'price': '16900', 'avgPrice': '0.00000', 'origQty': '0.001', 'executedQty': '0', 'cumQty': '0', 'cumQuote': '0', 'timeInForce': 'GTC', 'type': 'LIMIT', 'reduceOnly': False, 'closePosition': False, 'side': 'SELL', 'positionSide': 'BOTH', 'stopPrice': '0', 'workingType': 'CONTRACT_PRICE', 'priceProtect': False, 'origType': 'LIMIT', 'updateTime': 1670475389210}

 

 

이후 Binance 앱에 들어가보면 정상적으로 주문이 접수되었음을 알 수 있습니다.

 

이로써 주문접수까지 해봤습니다.  현재는 접수 상태이므로 응답의 ‘status’ 키에 해당하는 값이 NEW입니다. 

{'orderId': 98099552477, 'symbol': 'BTCUSDT', 'status': 'NEW', 'clientOrderId': '8mBmlYe6jdYnIFsFl9kRSn', 'price': '16900', 'avgPrice': '0.00000', 'origQty': '0.001', 'executedQty': '0', 'cumQty': '0', 'cumQuote': '0', 'timeInForce': 'GTC', 'type': 'LIMIT', 'reduceOnly': False, 'closePosition': False, 'side': 'SELL', 'positionSide': 'BOTH', 'stopPrice': '0', 'workingType': 'CONTRACT_PRICE', 'priceProtect': False, 'origType': 'LIMIT', 'updateTime': 1670475389210}

 


같이 읽어보면 좋은 글

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

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

댓글