Skip to content

Commit 1318b64

Browse files
committed
feat: Upbit.delete_orders() 주문 일괄 취소 접수, Upbit.delete_orders_by_id() id로 주문리스트 취소 접수 메서드 추가
1 parent c2d27f1 commit 1318b64

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ data = res.json()
7373
| | 체결 대기 주문 (Open Order) 조회 | get_open_orders |
7474
| | 종료된 주문 (Closed Order) 조회 | get_closed_orders |
7575
| | 주문 취소 접수 | delete_order |
76+
| | 주문 일괄 취소 접수 | delete_orders |
77+
| | id로 주문리스트 취소 접수 | delete_orders_by_id |
7678
| | 주문하기 | create_order |
7779
| 출금 | 출금 리스트 조회 | get_withdraws |
7880
| | 개별 출금 조회 | get_withdraw |

upbit/upbit.py

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,133 @@ def delete_order(self,
721721

722722
return self._request('delete', url, headers=headers, params=params, **kwargs)
723723

724+
def delete_orders(
725+
self,
726+
*,
727+
cancel_side: Literal['all', 'ask', 'bid'] = 'all',
728+
pairs: List[str] = None,
729+
excluded_pairs: List[str] = None,
730+
quote_currencies: List[str] = None,
731+
count: int = 20,
732+
order_by: OrderBy = 'desc',
733+
**kwargs) -> Response:
734+
"""주문 일괄 취소 접수
735+
736+
API 요청 및 응답에 대한 자세한 정보는 공식 문서 참고:
737+
`Upbit API Doc <https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EC%9D%BC%EA%B4%84-%EC%B7%A8%EC%86%8C-%EC%A0%91%EC%88%98>`_
738+
739+
:param cancel_side: 주문 종류
740+
:param pairs: 취소할 마켓 코드 리스트 (ex. ["KRW-BTC"])
741+
:param excluded_pairs: 제외할 마켓 코드 리스트 (ex. ["KRW-BTC"])
742+
:param quote_currencies: 취소할 거래 화폐 리스트 (ex. ["KRW", "BTC"])
743+
:param count: 취소 접수할 주문의 최대 개수 (default : 20, max : 300)
744+
:param order_by: 정렬 방식
745+
:param kwargs: `requests.Session.request` 호출에 사용할 파라미터
746+
747+
:raises upbit.exceptions.ApiKeyError: 인증 정보 없이 호출시 발생.
748+
749+
:return: API 서버 응답
750+
751+
Usage::
752+
753+
access_key = os.environ.get('UPBIT_OPEN_API_ACCESS_KEY')
754+
secret_key = os.environ.get('UPBIT_OPEN_API_SECRET_KEY')
755+
upbit = Upbit(access_key, secret_key)
756+
res = upbit.delete_orders(cancel_side='all')
757+
print(res.json())
758+
759+
{
760+
"success": {
761+
"count": 2,
762+
"orders": [
763+
{
764+
"uuid": "bbbb8e07-1689-4769-af3e-a117016623f8",
765+
"market": "KRW-ETH"
766+
},
767+
{
768+
"uuid": "4312ba49-5f1a-4a01-9f3b-2d2bce17267e",
769+
"market": "KRW-ETH"
770+
}
771+
]
772+
},
773+
"failed": {
774+
"count": 1,
775+
"orders": [
776+
{
777+
"uuid": "bdb49a54-de36-4eb4-a963-9c8d4337a9da",
778+
"market": "BTC-XRP"
779+
}
780+
]
781+
}
782+
}
783+
"""
784+
url = self._endpoint + "/orders/open"
785+
params = {
786+
"cancel_side": cancel_side,
787+
"pairs": pairs,
788+
"excluded_pairs": excluded_pairs,
789+
"quote_currencies": quote_currencies,
790+
"count": count,
791+
"order_by": order_by,
792+
}
793+
headers = self._get_request_headers(params, headers=kwargs.pop('headers', None))
794+
795+
return self._request('delete', url, headers=headers, params=params, **kwargs)
796+
797+
def delete_orders_by_id(
798+
self,
799+
*,
800+
uuids: Optional[List[str]] = None,
801+
identifiers: Optional[List[str]] = None,
802+
**kwargs) -> Response:
803+
"""id로 주문리스트 취소 접수
804+
805+
API 요청 및 응답에 대한 자세한 정보는 공식 문서 참고:
806+
`Upbit API Doc <https://docs.upbit.com/reference/id%EB%A1%9C-%EC%A3%BC%EB%AC%B8%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%B7%A8%EC%86%8C-%EC%A0%91%EC%88%98>`_
807+
808+
.. note:: uuids 또는 identifiers 중 한 가지 필드는 필수이며, 두 가지 필드를 함께 사용할 수 없습니다.
809+
810+
:param uuids: 취소할 주문 UUID의 목록 (최대 20개)
811+
:param identifiers: 취소할 주문 identifier의 목록 (최대 20개)
812+
:param kwargs: `requests.Session.request` 호출에 사용할 파라미터
813+
814+
:raises upbit.exceptions.ApiKeyError: 인증 정보 없이 호출시 발생.
815+
816+
:return: API 서버 응답
817+
818+
Usage::
819+
820+
access_key = os.environ.get('UPBIT_OPEN_API_ACCESS_KEY')
821+
secret_key = os.environ.get('UPBIT_OPEN_API_SECRET_KEY')
822+
upbit = Upbit(access_key, secret_key)
823+
res = upbit.delete_orders_by_id(uuids=['6c1eac69-b9bc-4fbf-9982-e9c4641c453f'])
824+
print(res.json())
825+
826+
{
827+
"success": {
828+
"count": 1,
829+
"orders": [
830+
{
831+
"uuid": "6c1eac69-b9bc-4fbf-9982-e9c4641c453f",
832+
"market": "BTC-ADA"
833+
},
834+
]
835+
},
836+
"failed": {
837+
"count": 0,
838+
"orders": []
839+
}
840+
}
841+
"""
842+
url = self._endpoint + "/orders/uuids"
843+
params = {
844+
"uuids": uuids,
845+
"identifiers": identifiers,
846+
}
847+
headers = self._get_request_headers(params, headers=kwargs.pop('headers', None))
848+
849+
return self._request('delete', url, headers=headers, params=params, **kwargs)
850+
724851
def create_order(self,
725852
market: str,
726853
side: OrderSide,

0 commit comments

Comments
 (0)