본문 바로가기

개인 WebSocket 주문 명령

wss://api-ws.btxpro.co.kr/v1/user/stream에 연결한 뒤 초기 snapshot을 소비하고 명령을 보냅니다. 연결 시 read, 모든 주문 명령에는 trade 권한이 필요합니다. 서버는 실행 직전에 키와 권한을 다시 확인합니다.

공통 형식

{ "id": "bot-7:create:1042", "op": "order.create", "args": {} }

id는 [A-Za-z0-9._:-]+에 맞는 최대 64자 문자열입니다. 같은 연결에서 처리 중인 ID를 재사용하면 DUPLICATE_COMMAND_ID입니다. 완료되거나 재연결한 뒤의 재전송을 막아주는 값은 아닙니다.

서버는 한 연결의 명령을 수신 순서대로 실행합니다. 이벤트 수신과 명령 응답 수신은 동시에 처리해야 합니다.

order.create

{
  "id": "bot-7:create:1042",
  "op": "order.create",
  "args": {
    "symbol": "BTC-USDT",
    "walletId": 21,
    "side": "buy",
    "type": "limit",
    "timeInForce": "GTC",
    "quantity": "0.100000000",
    "price": "65000.000000000"
  }
}

주문 필드는 REST의 CreateOrderRequest와 같습니다. 현재 지정가 GTC만 지원합니다.

order.cancel

{
  "id": "bot-7:cancel:1043",
  "op": "order.cancel",
  "args": { "orderId": "987654" }
}

이 명령의 args에는 orderId만 전달합니다. walletId, symbol은 REST 단건 취소에서만 선택적으로 사용합니다. 일괄 취소는 REST DELETE /v1/orders를 사용합니다.

order.amend

{
  "id": "bot-7:amend:1044",
  "op": "order.amend",
  "args": { "orderId": "987654", "price": "66000.000000000" }
}

현재 원자적 정정을 지원하지 않습니다. 정정 요청 모델의 필드로 요청해도 AMEND_NOT_SUPPORTED를 반환하며 원래 주문을 변경·취소하지 않습니다. 취소 후 새 주문 생성은 별개 작업이며 중간 체결 위험이 있습니다.

성공·오류 응답

아래 성공 응답의 data는 핵심 필드만 표시했습니다. 전체 응답은 UserStreamCommandResponse를 확인하세요.

{
  "event": "response",
  "id": "bot-7:create:1042",
  "op": "order.create",
  "data": { "orderId": "987654", "status": "open" },
  "serverTime": 1783420800123
}
{
  "event": "error",
  "id": "bot-7:amend:1044",
  "op": "order.amend",
  "error": {
    "code": "AMEND_NOT_SUPPORTED",
    "message": "The trading engine does not support atomic order amendment."
  },
  "serverTime": 1783420800123
}

response·error에는 이벤트 sequence가 없습니다. id로 명령을 찾아 완료 처리합니다. 주문 이벤트는 response보다 먼저 도착할 수도 있습니다.

결과를 받지 못하고 연결이 끊기면 생성·취소 명령을 자동 재전송하지 마세요. 새 snapshot과 REST 조회로 상태를 대조합니다.