아래는 지난 글인 주문취소 글입니다.
2023.01.17 - [파이썬/가상화폐] - Python 바이낸스 거래소 선물자동매매 개발 가이드 ep8.주문취소
바이낸스 API 파트 마지막 주문조회입니다.
API 문서를 조금만 보시면 아시겠지만 정말 다양한 API들이 있습니다. 그럼에도 본 도서에서는 기본적인 API 사용 방법 및 프로젝트 진행에 필수적인 API들만 소개하고 있습니다.
그런 의미에서 주문조회 API는 자주 발생하지는 않더라도 발생할 수 있는 다음 상황에 대비해 필요할 수 있습니다. 먼저 정상적인 프로그램 동작은 다음과 같습니다.
1)포지션 오픈 신호 확인 > 주문 접수 > 체결
혹은 주문 취소 상황입니다.
2)포지션 오픈 신호 확인 > 주문 접수 > 미체결 > 주문 취소
1)의 경우는 정상적인 프로세스이기 때문에 아무 문제가 없지만 2)처럼 이미 접수한 주문을 취소하기 위해서는 기존 접수 주문에 대한 정보(orderId)가 필요합니다. 이렇게 저장&관리가 필요할 수 있는 정보들은 대개 DataBase에 저장하는 것이 일반적이지만 본 도서는 트레이딩 개발이라는 소기의 목적을 달성하기 위해 최소한의 코드만 사용하려고 합니다.
따라서 주문 취소가 필요한 경우 API를 이용해 조회해온 주문정보를 이용해 orderId를 얻어오는 방식을 사용하겠습니다.
또 주문정보가 필요한 경우는 프로그램을 최초로 동작시킬 때입니다.
왜냐하면 다음과 같은 상황이 발생할 수 있기 때문입니다.
1)프로그램 실행 > 포지션 오픈 신호 확인 > 주문 접수 > 프로그램 종료상황 발생
이 경우 프로그램을 다시 재동작시키면 다음 프로세스대로 흘러가 주문을 두번 접수하게 될 수 있습니다.
2)프로그램 실행 > 포지션 오픈 신호 확인 > 주문 접수 (중복)
이렇게 되면 의도했던 것과 달리 보유수량이 두배가 될 수 있기 때문에 프로그램 최초 동작시 미체결주문이 있는지 확인해야 합니다.
위 프로세스는 프로젝트를 진행하며 구현할 예정이며 샘플 코드를 이용해 주문조회 API 호출시 어떻게 응답이 오는지 확인해보겠습니다.
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.get_all_orders(symbol="BTCUSDT", 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
)
)
위 코드를 실행하면 주문 정보가 담긴 리스트를 응답으로 받습니다.
[{'orderId': 98099552477, 'symbol': 'BTCUSDT', 'status': 'CANCELED', 'clientOrderId': '8mBmlYe6jdYnIFsFl9kRSn', 'price': '16900', 'avgPrice': '0.00000', 'origQty': '0.001', 'executedQty': '0', 'cumQuote': '0', 'timeInForce': 'GTC', 'type': 'LIMIT', 'reduceOnly': False, 'closePosition': False, 'side': 'SELL', 'positionSide': 'BOTH', 'stopPrice': '0', 'workingType': 'CONTRACT_PRICE', 'priceProtect': False, 'origType': 'LIMIT', 'time': 1670475389210, 'updateTime': 1670476183969}]
status 값이 CANCELED인 것과 orderId를 확인해보면 주문접수 이후 취소한 주문이라는 것을 알 수 있습니다. 만약 여러개의 주문을 접수했다면 응답은 길이가 1보다 큰 리스트가 될 수 있으며 리스트 마지막 인덱스에 위치한 주문이 가장 최근에 접수한 주문입니다.
같이 읽어보면 좋은 글
2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.
2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄
'파이썬 > 가상화폐' 카테고리의 다른 글
빗썸 공지사항 크롤링할 때 주의사항 (3) | 2023.02.25 |
---|---|
Python 크롤링 에러 Connection aborted., RemoteDisconnected 해결방법 (feat. fake_useragent) (0) | 2023.02.22 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep8.주문취소 (0) | 2023.01.17 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep7.주문접수 (2) | 2023.01.16 |
Python 바이낸스 거래소 선물자동매매 개발 가이드 ep6.호가창 조회 (0) | 2023.01.13 |
댓글