지정가로 매수 또는 매도를 걸어 놓은 경우에 아직 체결되지 않은 미체결 주문을 취소해야 할 필요가 있는데요. 이번 시간에는 미체결 주문에 대해서 취소하는 로직에 대해서 살펴 보도록 하겠습니다.
미체결 주문을 취소하기 위해서는 먼저 미체결 주문을 조회해야 하는데요. 관련 내용은 아래 포스트를 참고 부탁 드립니다.
2021.07.08 - [프로젝트/비트코인 자동매매] - 미체결 주문 조회 - 파이썬 업비트 비트코인 자동매매
미체결 주문 조회 - 파이썬 업비트 비트코인 자동매매
지정가 매수/매도를 걸어놓은 경우에 아직 지정가에 도달하지 않은 경우 미체결 주문으로 남아있어 주문한 수량 만큼이 묶여서 다른 주문을 할 수 없게 됩니다. 이번 시간에는 아직 지정가에 도
technfin.tistory.com
목차 - 클릭하면 이동합니다.
미체결 주문 취소
이전 포스트에서 설명 드린바와 같이 지정가로 매수 또는 매도를 걸어 놓은 상태에서는 주문이 체결되기 전까지 해당 수량 및 금액이 묶여서 다른 처리를 할 수 없게 됩니다.
아직 체결되지 않은 주문을 취소하고 싶거나 금액을 변경하고 싶은 경우에는 미체결 된 주문을 먼저 취소한 후에 다시 매수 및 매도 요청을 해야 합니다.
미체결 주문을 취소하기 위해서는 주문 고유 번호인 UUID 코드를 알고 있어야 하기 때문에 미체결 된 주문을 먼저 조회해야 하는데요. 해당 내용은 위에 링크로 안내된 지난 포스트를 참고 부탁 드립니다.
주문 고유 ID를 이용한 주문 취소 로직
# -----------------------------------------------------------------------------
# - Name : cancel_order_uuid
# - Desc : 미체결 주문 취소 by UUID
# - Input
# 1) order_uuid : 주문 키
# - Output
# 1) 주문 내역 취소
# -----------------------------------------------------------------------------
def cancel_order_uuid(order_uuid):
try:
query = {
'uuid': order_uuid,
}
query_string = urlencode(query).encode()
m = hashlib.sha512()
m.update(query_string)
query_hash = m.hexdigest()
payload = {
'access_key': access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512',
}
jwt_token = jwt.encode(payload, secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = send_request("DELETE", server_url + "/v1/order", query, headers)
rtn_data = res.json()
return rtn_data
# ----------------------------------------
# 모든 함수의 공통 부분(Exception 처리)
# ----------------------------------------
except Exception:
raise
입력 변수
① order_uuid : 주문 고유 번호
처리 결과
주문 고유 번호를 변수로 입력하면 해당 주문건을 취소한 후 결과를 리턴하게 됩니다.
미체결 주문 취소 로직
# -----------------------------------------------------------------------------
# - Name : cancel_order
# - Desc : 미체결 주문 취소
# - Input
# 1) target_item : 대상종목
# 2) side : 매수/매도 구분(BUY/bid:매수, SELL/ask:매도, ALL:전체)
# - Output
# -----------------------------------------------------------------------------
def cancel_order(target_item, side):
try:
# 미체결 주문 조회
order_data = get_order(target_item)
# 매수/매도 구분
for order_data_for in order_data:
if side == "BUY" or side == "buy":
if order_data_for['side'] == "ask":
order_data.remove(order_data_for)
elif side == "SELL" or side == "sell":
if order_data_for['side'] == "bid":
order_data.remove(order_data_for)
# 미체결 주문이 있으면
if len(order_data) > 0:
# 미체결 주문내역 전체 취소
for order_data_for in order_data:
cancel_order_uuid(order_data_for['uuid'])
# ----------------------------------------
# 모든 함수의 공통 부분(Exception 처리)
# ----------------------------------------
except Exception:
raise
주문 고유ID인 UUID를 이용하여 미체결 주문을 취소하기 위해서는 먼저 미체결 주문 내역을 조회해야 합니다. 위의 로직을 이용하면 원하는 종목의 매수 또는 매도 혹은 전체 주문을 조회한 후 취소할 수 있습니다.
입력 변수
① target_item : 주문을 취소하고자 하는 대상 종목 코드
② side : 매수/매도 구분 (BUY/bid:매수, SELL/ask:매도, ALL:전체)
모듈 호출
import os
import sys
import logging
import traceback
# 공통 모듈 Import
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import upbit as upbit # noqa
# -----------------------------------------------------------------------------
# - Name : main
# - Desc : 메인
# -----------------------------------------------------------------------------
if __name__ == '__main__':
# noinspection PyBroadException
try:
print("***** USAGE ******")
print("[1] 로그레벨(D:DEBUG, E:ERROR, 그외:INFO)")
# 로그레벨(D:DEBUG, E:ERROR, 그외:INFO)
upbit.set_loglevel('I')
# ---------------------------------------------------------------------
# Logic Start!
# ---------------------------------------------------------------------
# 미체결 주문 조회
locked_trade = upbit.get_order('KRW-DOGE')
logging.info("취소전")
logging.info(locked_trade)
# 미체결 주문 취소
upbit.cancel_order('KRW-DOGE', 'BUY')
# 미체결 주문 재조회
locked_trade = upbit.get_order('KRW-DOGE')
logging.info("취소후")
logging.info(locked_trade)
except KeyboardInterrupt:
logging.error("KeyboardInterrupt Exception 발생!")
logging.error(traceback.format_exc())
sys.exit(1)
except Exception:
logging.error("Exception 발생!")
logging.error(traceback.format_exc())
sys.exit(1)
공통 모듈에 미체결 조회 및 취소 관련 로직을 작성한 후 아래와 같이 호출하면 미체결 주문을 취소할 수 있습니다.
# 미체결 주문 취소
upbit.cancel_order('KRW-DOGE', 'BUY')
실행 결과
①과 같이 호출하게 되면 주문이 취소 처리 됩니다.
②번은 취소전 ③번은 취소후에 미체결 주문 내역을 조회한 결과이며 정상적으로 취소되어 더 이상 미체결 주문내역이 남아있지 않음을 확인할 수 있습니다.
'프로젝트 > 비트코인 자동매매' 카테고리의 다른 글
올라운더를 위한 업비트 모든 종목 매수 프로그램 - 파이썬 업비트 비트코인 자동매매 (7) | 2021.07.17 |
---|---|
캔들 조회 로직 - 파이썬 업비트 비트코인 자동매매 (8) | 2021.07.15 |
지정가 매수 로직 - 파이썬 업비트 비트코인 자동매매 (2) | 2021.07.15 |
미체결 주문 조회 - 파이썬 업비트 비트코인 자동매매 (1) | 2021.07.08 |
KRW 원화 잔고 조회 - 파이썬 업비트 비트코인 자동매매 (3) | 2021.07.07 |
잔고 정보 조회 - 파이썬 업비트 비트코인 자동매매 (2) | 2021.06.24 |