아래는 지난 글인 주문접수 글입니다.
2023.01.16 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep7.주문접수
이번에는 바이낸스 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 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.
2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄
'파이썬 > 가상화폐' 카테고리의 다른 글
Python 크롤링 에러 Connection aborted., RemoteDisconnected 해결방법 (feat. fake_useragent) (0) | 2023.02.22 |
---|---|
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep9.주문조회 (12) | 2023.01.18 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep7.주문접수 (2) | 2023.01.16 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가창 조회 (0) | 2023.01.13 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep5.캔들 데이터 조회 (0) | 2023.01.06 |
댓글