본문 바로가기
트레이딩/암호화폐

암호화폐. API. bybit. 주문 체결 정보 실시간 받기. websocket

by 리치굿맨 2021. 1. 4.

 

개요 

- 거래소 바이빗의 USD 종목, USDT 종목  주문한 것이 체결될 때  WebSocket 으로 실시간 수신되는 정보. 

- 1회 수신 데이터에 여러 종목의 데이터가 같이 제공될 수 있음. 

 

사전준비 

- 파이썬 웹소켓 기본 코딩 달성하고 인증 코딩 까지 달성한 상태. 

 

 

USD 종목에서의 체결 정보 

 

execution 요청 구문. 

 

websocket.send('{"op": "subscribe", "args": ["execution"]}')

 

상기 요청 한번만 요청하면 이후 내 주문이 체결 된 경우 아래와 같은 정보요소들이 json 형식으로 실시간 수신됨.

 

 

Response Parameters

 

parameter type comments
symbol string Symbol
side string Side
order_id string Order ID
exec_id string Transaction ID
order_link_id string Order link ID
price string Transaction price
order_qty number Order qty
exec_type string Exec Type Enum 4종 : Trade, AdlTrade, Funding, BustTrade 
exec_qty number Transaction qty
exec_fee string Transaction fee
leaves_qty number Number of unfilled contracts from the order's size
is_maker bool Is maker
trade_time string Transaction timestamp

 

 

 

{
    "topic": "execution",
    "data": [
        {
            "symbol": "BTCUSD",
            "side": "Buy",
            "order_id": "xxxxxxxx-xxxx-xxxx-9a8f-4a973eb5c418",
            "exec_id": "xxxxxxxx-xxxx-xxxx-8b66-c3d2fcd352f6",
            "order_link_id": "",
            "price": "8300",
            "order_qty": 1,
            "exec_type": "Trade",
            "exec_qty": 1,
            "exec_fee": "0.00000009",
            "leaves_qty": 0,
            "is_maker": false,
            "trade_time": "2020-01-14T14:07:23.629Z" // trade time
        }
    ]
}


예 : EOSUSD 주문수량 1달러 시장가 매도, 매수 주문한 것이 체결된 시점 수신된 데이터. 

 

 

USDT 종목에서의 체결 정보 

execution 요청 구문. 

websocket.send('{"op": "subscribe", "args": ["execution"]}')

 

한번만 요청하면 이후 내 주문이 체결 된 경우 아래와 같은 정보요소들이 json 형식으로 실시간 수신됨.

 

Response Parameters

parameter type comments
symbol string Symbol
side string Side
order_id string Order ID
exec_id string Transaction ID
order_link_id string Order link ID
price string Transaction price
order_qty number Order qty
exec_type string Exec Type Enum 4종 : Trade, AdlTrade, Funding, BustTrade 
exec_qty number Transaction qty
exec_fee string Transaction fee
trade_time string Transaction timestamp

비교 : USD 종목에 있는 leaves_qty, is_maker 는 USDT 종목에서는 제공안됨. 그외 동일. 

 

예:

{
    "topic": "execution",
    "data": [
        {
            "symbol": "BTCUSDT",
            "side": "Sell",
            "order_id": "xxxxxxxx-xxxx-xxxx-9a8f-4a973eb5c418",
            "exec_id": "xxxxxxxx-xxxx-xxxx-8b66-c3d2fcd352f6",
            "order_link_id": "",
            "price": 11527.5,
            "order_qty": 0.001,
            "exec_type": "Trade",
            "exec_qty": 0.001,
            "exec_fee": 0.00864563,
            "leaves_qty": 0,
            "is_maker": false,
            "trade_time": "2020-08-12T21:16:18.142746Z"
        }
    ]
}

 

 

 

execution  활용 코드 예. 

- 아래코드는 실시간 execution 활용 코드 전체 골격 예  보인다. 

 

- 라인 92 에서 execution 요청하였고, 이후 실시간으로 수신되는 데이터들을 문자열로 확보하는 곳이 라인 94 while 문 내의 라인 95   data_rcv_strjson 에서 확보된다. 

 

- 라인 97 함수 processing_all_ws_received(data_rcv_strjson)  을 호출하여 수신된 데이터가 어떤 형식의 데이터 이냐에 따른  분리 처리 수행한다. 

 

- 라인 34 def processing_all_ws_received(str_json): 함수 내부에서 수신한 웹소켓 수신 데이터 중에 execution 인 경우 실행되는 것은 라인 75  조건문의 함수 processing_execution(data_dic_one)  이다. 

 

- 라인 2 함수 def processing_execution(data_dic_one):  가 execution 으로 수신된 정보 처리기 이며 ,  라인 3의 leaves_qty 는 미체결 잔량인데 전량 체결된 경우에는 이 값이 0 이된다. 본 코드예에서는 주문한 수량이 모두 체결된 경우에만 처리하는 코드예 이기 때문에 leaves_qty 가 0보다 큰 경우에는 처리하지 않고 무처리 리턴(라인 4, 5)하고 있다.

 

- 라인 24~ 28 이 전량체결 에 대응한 주문 처리하는 구간이며 라인 25 조건은 매수 주문한 것이 전량 체결된 것일 때, 라인 26 에서 신규 매도 주문 송신하고 , 라인 27  매도 주문한것이 전량 체결이라면 신규 매수 주문 송신한다. 

 

 

 

 

 

 

연관 

 

 

 

 

 

 

암호화폐. API. bybit. 나의 주문 정보 실시간 받기. websocket

개요 거래소 바이빗의 USD 종목, USDT 종목 내가 주문 송신한것에 의한 WebSocket 으로 실시간 수신되는 주문응답. USD 종목에서의 주문 실시간 정보 order 실시간 정보 요청 구문. websocket.send('{"op": "subsc

igotit.tistory.com

 

 

 

 

암호화폐. API. bybit. 나의 주문 정보 받기. http request

개요 - 바이빗의 USD 종목 , USDT종목의 내 주문정보 HTTP Request 로 받기. USD 종목 의 주문정보 받기 HTTP Request GET /v2/private/order Request Parameters parameter required type comments order_id fals..

igotit.tistory.com

 

 

 


첫 등록 : 2021.01.04

최종 수정 : 2022.05.30

단축 주소 : https://igotit.tistory.com/2745

 


 

댓글6

  • 익명 2021.01.07 15:32

    비밀댓글입니다
    답글

    • Favicon of https://igotit.tistory.com BlogIcon 리치굿맨 2021.01.07 15:42 신고

      파이썬에서 가장 먼저 https://igotit.tistory.com/2490 <- 이것부터 먼저 구축하여 실시간 시세 수신되는것 확인되면 , 인증처리 까지 완료되고 usd, usdt 종목 실시간 시세 수신하는 코드 https://igotit.tistory.com/2676 완료하고 나면 전체적인 작동방식이 모두 이해됩니다. 파이썬 웹소켓 코딩의 핵심 골격 부분입니다.

      이후 , 코드에 본 글에서 설명하는 주문 요청 구문 websocket.send('{"op": "subscribe", "args": ["execution"]}')
      추가하면 실시간 체결정보 수신됩니다.

  • 빠빠조 2022.05.30 17:40

    먼저 감사인사드립니다.
    하나하나 배우며 따라해보고있습니다.

    본문엔 안나왔지만 내 거래 체결정보 확인하려면
    async def my_loop_WebSocket_usdt_private_bybit():
    에다 await ws_usdt_private.send('{"op": "subscribe", "args": ["execution"]}');
    넣음 되는군요.

    그리고 주문정보는 소켓통신으로 안된다고 다른글에서 본것같은데
    제가 지금 restful로 지정가 주문은 구현한 상태입니다.

    그럼 해당 체결정보 띄워놓고 체결이되면 매수한 코인을 다시
    판매 오더를 넣어야하는데 이부분은 어떻게 처리가 되어야할까요?

    일단 주문정보 소스입니다.
    #최초 1회 거미줄 생성
    print(ticker['close'])
    print("=========")
    for price in range(minPrice, maxPrice,intervalPrice):
    if price >= ticker['close']:
    '''
    order = exchange.create_limit_order(
    symbol=symbol,
    side="buy",
    amount=qty,
    price=price
    )
    '''
    #print(order)
    #최초 1회 거미줄 생성

    제가 원하는건 바이낸스 그리드 매매 처럼
    봇 돌리면 처음에 100불 단위로 지정가로 거미줄 생성되고
    체결이 될때마다 100불 위에서 체결된수량만큼 팔구
    팔리면 다시 팔린수량만큼 100불 아래에 매수주문 넣으려구하는데..

    소켓통신 통해 들어온 정보를 어떻게 주문페이지에 넘겨주는지가 궁금합니다.

    답글

    • Favicon of https://igotit.tistory.com BlogIcon 리치굿맨 2022.05.30 23:40 신고

      간단하게 말로 표현하면..... "execution 실시간 수신시마다 상황별로 대응하여 주문내면 됩니다." 가 전부인데 이런 말로만 하는 설명은 코딩 구현에 별 도움 안될것 같아서.. 본문에 내용 추가하였습니다. 본문 하단 부분에 "Execution 활용코드예" 라는 타이틀에 설명 글과 코드 추가 작성하였습니다.

      주의.
      첨부 코드의 디테일에는 오류가 있을 수 있으니 코드작성 흐름 골격 파악용으로 사용하시길... ^^

  • 빠빠조 2022.06.02 13:37

    감사합니다.
    덕분에 원하는대로 구현했습니다.
    혹시 하나 여쭤봐도될지요.

    지금 최종 목표는 롱, 숏 각각 하나씩 봇 2개를 돌리는건데
    지금 롱봇은 완료후 시험으로 돌리고있는데

    처음에 지정가로 매수 예약하고
    체결 신호가 buy 면 매도예약
    sell이면 다시 매수예약 단순한 로직입니다.


    그런데 사이트에서 손으로 숏을 잡아봣더니
    마찬가지로 신호가 sell로 들어가서
    롱봇은 다시 매수예약을 하고

    손으로 숏을 청산시키니 buy로 신호가 들어가서
    롱봇은 매도 예약을 걸더라구요.

    이러면 나중에 숏봇 만들어서 돌리면
    롱봇, 숏봇에서 이중으로 중복처리를할것같은데

    혹시 buy, sell 신호가 롱의 buy, sell인지
    숏의 buy, sell 인지 구별가능할까요?

    order_id로 일치하는것 있으면 기존 포지션이 있던것인지
    신규인지 확인할수있을것 같긴하지만.

    더쉬운방법이 있을것같아서 글남겨봅니다.
    감사합니다.
    답글

    • Favicon of https://igotit.tistory.com BlogIcon 리치굿맨 2022.06.02 19:05 신고

      order_id 보다는 order_link_id를 적극 활용하면 좀더 섬세한 주문 구분 가능합니다.

      주문 송신시 인자로 order_link_id 에 최대 34문자열 이내로 사용자 정의 문자열을 기록해서 주문 송신 가능합니다. 이 문자열은 다른 주문송신시 사용된 값과 동일하면 안되며 반드시 고유한 값이어야 합니다. 이 문자열에 식별 문자등을 포함해서 주문 송신하면 이후 웹소켓 수신시 order_link_id 에 내가 기록했던 문자열이 있기 때문에 이 정보를 활용하여 분리 식별 가능합니다.


.    
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     .