개요
- 거래소 바이빗의 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
'트레이딩 > 암호화폐' 카테고리의 다른 글
비트코인. 10년 가격 변화 그래프. (2) | 2021.01.17 |
---|---|
암호화폐. 비트코인 언제 하락? 판단기준 ? (4) | 2021.01.10 |
암호화폐. API. bybit. 주문 체결 정보 실시간 받기. websocket (6) | 2021.01.04 |
암호화폐. API. bybit. 나의 주문 정보 받기. http request (0) | 2020.12.20 |
암호화폐. API. bybit. 나의 주문 정보 실시간 받기. websocket (14) | 2020.12.19 |
bybit. 파이썬 웹소켓 종료 오류 및 해결책. websockets.exceptions.ConnectionClosedError: code = 1006 (3) | 2020.12.19 |
비밀댓글입니다
답글
파이썬에서 가장 먼저 https://igotit.tistory.com/2490 <- 이것부터 먼저 구축하여 실시간 시세 수신되는것 확인되면 , 인증처리 까지 완료되고 usd, usdt 종목 실시간 시세 수신하는 코드 https://igotit.tistory.com/2676 완료하고 나면 전체적인 작동방식이 모두 이해됩니다. 파이썬 웹소켓 코딩의 핵심 골격 부분입니다.
이후 , 코드에 본 글에서 설명하는 주문 요청 구문 websocket.send('{"op": "subscribe", "args": ["execution"]}')
추가하면 실시간 체결정보 수신됩니다.
먼저 감사인사드립니다.
하나하나 배우며 따라해보고있습니다.
본문엔 안나왔지만 내 거래 체결정보 확인하려면
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불 아래에 매수주문 넣으려구하는데..
소켓통신 통해 들어온 정보를 어떻게 주문페이지에 넘겨주는지가 궁금합니다.
답글
간단하게 말로 표현하면..... "execution 실시간 수신시마다 상황별로 대응하여 주문내면 됩니다." 가 전부인데 이런 말로만 하는 설명은 코딩 구현에 별 도움 안될것 같아서.. 본문에 내용 추가하였습니다. 본문 하단 부분에 "Execution 활용코드예" 라는 타이틀에 설명 글과 코드 추가 작성하였습니다.
주의.
첨부 코드의 디테일에는 오류가 있을 수 있으니 코드작성 흐름 골격 파악용으로 사용하시길... ^^
감사합니다.
덕분에 원하는대로 구현했습니다.
혹시 하나 여쭤봐도될지요.
지금 최종 목표는 롱, 숏 각각 하나씩 봇 2개를 돌리는건데
지금 롱봇은 완료후 시험으로 돌리고있는데
처음에 지정가로 매수 예약하고
체결 신호가 buy 면 매도예약
sell이면 다시 매수예약 단순한 로직입니다.
그런데 사이트에서 손으로 숏을 잡아봣더니
마찬가지로 신호가 sell로 들어가서
롱봇은 다시 매수예약을 하고
손으로 숏을 청산시키니 buy로 신호가 들어가서
롱봇은 매도 예약을 걸더라구요.
이러면 나중에 숏봇 만들어서 돌리면
롱봇, 숏봇에서 이중으로 중복처리를할것같은데
혹시 buy, sell 신호가 롱의 buy, sell인지
숏의 buy, sell 인지 구별가능할까요?
order_id로 일치하는것 있으면 기존 포지션이 있던것인지
신규인지 확인할수있을것 같긴하지만.
더쉬운방법이 있을것같아서 글남겨봅니다.
감사합니다.
답글
order_id 보다는 order_link_id를 적극 활용하면 좀더 섬세한 주문 구분 가능합니다.
주문 송신시 인자로 order_link_id 에 최대 34문자열 이내로 사용자 정의 문자열을 기록해서 주문 송신 가능합니다. 이 문자열은 다른 주문송신시 사용된 값과 동일하면 안되며 반드시 고유한 값이어야 합니다. 이 문자열에 식별 문자등을 포함해서 주문 송신하면 이후 웹소켓 수신시 order_link_id 에 내가 기록했던 문자열이 있기 때문에 이 정보를 활용하여 분리 식별 가능합니다.