3. 비트코인 선물/3-1. 바이비트 선물 연구일지

(비트코인 자동매매API) (10) 미체결 주문내역 취소하기

봄이오네 2022. 11. 13. 08:04
반응형
목 차
1. 들어가며
2. 사전설명
3. 코드설명
4. 주문내역 취소 결과
5. 전체 코드
6. 마치며

1. 들어가며

이전 글에서는 미체결 주문을 받아오는 방법을 알아보았다.
미체결내역이 필요한 이유는 취소주문을 할 때, 코인명이 필요하다.

1종목 주문을 할 때는 "코인명"만 필요하지만,
여러가지 코인이 있을 때는 "코인명" 외, "원주문 번호" 등이 필요하다.
여기서는 1종목만 거래하지만, "코인명"과 "원주문 번호"를 활용하여,
미체결 주문내역을 취소할 것이다.

이번 글에서는 미체결 주문의 취소하는 방법을 알아보자.
<그림1>은 미체결 내역 현황이다.
* 가격 21,150.50달러, 수량 20개, 포지션 long, order no는 168b88f
→ 주문 번호는 끝의 8개만 출력이 된다. (주문번호는 32자리이다)

그림1. 미체결 내역 현황


2. 사전설명

api_key 및 api_secret를 활용하여
바이비트API에서 데이터(미체결 내역)를 받고,
미체결 내역을 취소한다.

그림2. 미체결 내역을 조회하는 설명


설명 경로 : Account Data Endpoints > Active Orders > Cancel Active Order
입력 정보 : symbol명을 기재한다 → "BTCUSD"로 입력
출력 정보 : user_id, order_id, symbol 등의 정보를 받아온다.
입력 샘플 : api_key 및 api_secret를 통해 바이비트API에서 데이터 요청
출력 샘플 : 받아오는 데이터는 딕셔너리 > 딕셔너리 형태이다.
* 딕셔너리에서 데이터 추출 방법은 딕셔너리 [ '문자형' ] 으로 받아온다.


3. 코드설명

api_key 및 api_secret를 통해 바이비트API에서 데이터를 수신받아,
미체결 데이터를 취소한다.

<그림3-1>은 미체결 내역(그림1)이 아직 남아있다.

그림3-1. 미체결 내역 현황


1줄 : pybit 를 임포트한다.
3줄~6줄 : 11줄~15줄까지 바이비트API에서 데이터를 얻기 위해,
3줄~6줄에서 api_key 및 api_secret 를 읽어온다.

8줄 : 주문내역 알아오기 및 취소를 위해 sendorder_bitcoin 함수를 선언한다.
9줄 : 코인명 "BTCUSD"를 입력한다.
11줄~15줄 : 바이비트API에서 데이터를 받아와서, session에 넣는다.

17줄 : 주문내역을 balance에 넣어준다.
18줄~19줄 : 코인명과 주문번호를 받아온다.

25줄 : 이 글의 핵심이다.
바이비트API의 cancel_active_order 함수를 활용하여
조회된 미체결 주문 내역을 취소한다.
* 이때 활용하는 것이 18줄~19줄에서 받아온 코인명과 주문번호이다.
(1종목일 때는, 코인명만 기재해도, 취소된다)


4. 주문내역 취소 결과

3번(코드설명)의 23번줄에서 제출하였지만,
체결되지 아니한 주문(=미체결 내역)을 취소한 화면이다.

그림3-2. 취소주문이 실행되어, 주문내역에 없는 것을 확인할 수 있다.


5. 전체코드

from pybit.inverse_perpetual import HTTP

with open(r'C:\Users\ ... api_key 경로 ... ') as f:
    lines = f.readlines()
    api_key = lines[0].strip()
    api_secret = lines[1].strip()

def sendorder_bitcoin():
    symbol = "BTCUSD"

    session = HTTP(
        endpoint="https://api.bybit.com",
        api_key=api_key,
        api_secret=api_secret
        )

    balance = session.get_active_order(symbol=symbol)['result']['data'][0]

    symbol = balance['symbol']
    order_id = balance['order_id']

    print(symbol)
    print(order_id)

    session.cancel_active_order(symbol=symbol, order_id = order_id)

sendorder_bitcoin()


# (expected result)
# BTCUSD
# d9c6####-####-####-####-####168bf88f

6. 마치며

미체결 주문내역을 취소하는 방법은 의외로 간략했다.
코드 1줄로 취소되는 게 신기하긴 하다.
* session.cancel_active_order(symbol=코인명, order_id=주문번호)

분할매수가 아닌, 단타라면 굳이 취소주문을 할 이유가 있을까 생각된다.
하지만, 지정가 주문을 통한 분할 진입하는 방법도 있으니
취소 주문하는 형태도 알아두자.

반응형