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

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

by 행복론자 2023. 1. 17.

아래는 지난 글인 주문접수 글입니다.

2023.01.16 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep7.주문접수

 

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

아래는 지난 글인 호가창 조회입니다. 2023.01.13 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가창 조회 Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가

jsp-dev.tistory.com

 

이번에는 바이낸스 API를 이용해 접수한 주문을 취소하는 방법을 알아보겠습니다.

지난 번에는 주문접수 이후 응답으로 접수한 주문정보 확인까지 했습니다.

{'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}

 

위 응답 딕셔너리에서 최초의 status 키값은 NEW인데,  체결이 이루어지면 status 키값이 FILLED로 변하게 되며 'executedQty'(체결수량)이 최초 주문접수수량(origQty)와 같아집니다. 

하지만 문제는 체결희망가격이 존재하는 지정가 주문의 경우, 체결이 이루어지지 않으면 주문이 취소되지 않고 계속 남아있을 수 있습니다. 이럴 경우를 대비해 주문이 오랫동안 체결되지 않으면 취소주문을 접수하도록 해보겠습니다.
주문취소 코드 역시 샘플 코드가 존재하니 우선 그대로 가져와보겠습니다.

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.cancel_order(
       symbol="BTCUSDT", orderId=123456, recvWindow=2000
   )
   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
       )
   )

 

주문취소 함수는 cancel_order이며 취소하고 싶은 페어(symbol)와 orderId를 전달해야합니다. orderId는 원주문(original order)를 의미하며 최초 주문 접수 이후 응답으로 내려온 orderId에 해당하는 값을 전달하면 됩니다

{'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}

 

당연한 이야기이지만 본인 주문만 취소할 수 있고 접수한 주문이 없는데 취소요청을 보낼 수 없습니다. 그러면 제가 접수한 주문을 취소해보도록 하겠습니다.
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.cancel_order(
       symbol="BTCUSDT", orderId=98099552477, recvWindow=2000
   )
   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
       )
   )

 

위 코드를 실행해 정상적으로 취소가 되면 다음과 같은 응답을 받게 됩니다.
이때의 status를 보면 'CANCELED'로 나오는 것을 알 수 있습니다. 

{'orderId': 98099552477, 'symbol': 'BTCUSDT', 'status': 'CANCELED', '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': 1670476183969}

 

또 Binance 앱에 접속해보면 아까 접수한 주문이 정상적으로 취소되어 사라졌다는 것을 알 수 있습니다.

 

다음은 Binance API 사용방법의 마지막인 주문조회 방법을 알아보겠습니다. 


같이 읽어보면 좋은 글

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

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

댓글