[{"data":1,"prerenderedAt":9},["ShallowReactive",2],{"api-documentation:websocket\u002Fuser":3},{"title":4,"slug":5,"group":6,"version":7,"html":8},"개인 WS","websocket\u002Fuser","WebSocket API","0.4.0","\u003Ch1 id=\"개인-이벤트-스트림\">개인 이벤트 스트림\u003C\u002Fh1>\n\u003Cpre>\u003Ccode class=\"language-text\">wss:\u002F\u002Fapi-ws.btxpro.co.kr\u002Fv1\u002Fuser\u002Fstream\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>read\u003C\u002Fcode> 권한으로 \u003Ca href=\"\u002Fapi-docs\u002Fguide\u002Fauthentication\u002F#websocket-authentication\">서명된 업그레이드\u003C\u002Fa>를 수행합니다. 구독 명령 없이 초기 상태와 후속 이벤트를 받습니다. 같은 연결에서 \u003Ccode>trade\u003C\u002Fcode> 권한으로 \u003Ca href=\"\u002Fapi-docs\u002Fwebsocket\u002Fcommands\u002F\">주문 명령\u003C\u002Fa>을 보낼 수 있습니다.\u003C\u002Fp>\n\u003Ch2 id=\"초기-snapshot\">초기 snapshot\u003C\u002Fh2>\n\u003Cp>첫 JSON 프레임은 항상 sequence 0인 snapshot입니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"event\": \"snapshot\",\n  \"sequence\": 0,\n  \"data\": { \"orders\": [], \"ordersHasMore\": false, \"balances\": [] },\n  \"serverTime\": 1783420800123\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>현재 볼 수 있는 지갑 잔고와 최대 1000개의 현물 미체결 주문을 포함합니다. \u003Ccode>ordersHasMore: true\u003C\u002Fcode>면 주문 목록이 잘린 것이므로 스냅샷만으로 전체 미체결 주문 상태를 확정하지 마세요. REST 조회를 병행하고 필요하면 지갑·마켓별로 상태 범위를 나눕니다. 전체 상태를 확보하지 못한 자동매매는 운영 확인이 필요합니다.\u003C\u002Fp>\n\u003Cp>스냅샷을 만드는 동안 대기한 이벤트는 이후에 순서대로 전달됩니다. 이미 snapshot의 누적 체결 수량에 포함된 체결은 같은 연결에서 중복 발행하지 않습니다.\u003C\u002Fp>\n\u003Ch2 id=\"이벤트-종류\">이벤트 종류\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>event\u003C\u002Fth>\n\u003Cth>sequence\u003C\u002Fth>\n\u003Cth>처리 방법\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>snapshot\u003C\u002Ftd>\n\u003Ctd>0\u003C\u002Ftd>\n\u003Ctd>주문·잔고의 초기 상태 구성\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>order\u003C\u002Ftd>\n\u003Ctd>연속 증가\u003C\u002Ftd>\n\u003Ctd>해당 주문의 절대 상태로 교체\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>fill\u003C\u002Ftd>\n\u003Ctd>연속 증가\u003C\u002Ftd>\n\u003Ctd>체결 증가분 처리와 누적 상태 확인\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>balance\u003C\u002Ftd>\n\u003Ctd>연속 증가\u003C\u002Ftd>\n\u003Ctd>지갑·통화의 절대 잔고로 교체\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>response\u003C\u002Ftd>\n\u003Ctd>없음\u003C\u002Ftd>\n\u003Ctd>id로 보낸 명령과 연결\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>error\u003C\u002Ftd>\n\u003Ctd>없음\u003C\u002Ftd>\n\u003Ctd>id로 보낸 명령의 오류 처리\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>order\u003C\u002Fcode>, \u003Ccode>fill\u003C\u002Fcode>, \u003Ccode>balance\u003C\u002Fcode>가 하나의 sequence를 공유합니다. 모든 이벤트를 순서대로 수신한 뒤 필요한 유형을 분배해야 합니다.\u003C\u002Fp>\n\u003Ch2 id=\"주문-이벤트\">주문 이벤트\u003C\u002Fh2>\n\u003Cp>\u003Ccode>updateType\u003C\u002Fcode>은 \u003Ccode>open\u003C\u002Fcode>, \u003Ccode>partiallyFilled\u003C\u002Fcode>, \u003Ccode>filled\u003C\u002Fcode>, \u003Ccode>canceled\u003C\u002Fcode>, \u003Ccode>unknown\u003C\u002Fcode> 중 하나입니다. 아래는 핵심 필드만 보인 예시이며 전체 주문 필드는 \u003Ca href=\"\u002Fapi-docs\u002Fgenerated\u002Fschemas\u002F#schema-userstreamorderevent\">UserStreamOrderEvent\u003C\u002Fa>에 있습니다.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"event\": \"order\",\n  \"updateType\": \"partiallyFilled\",\n  \"sequence\": 7,\n  \"data\": {\n    \"orderId\": \"987654\",\n    \"status\": \"partiallyFilled\",\n    \"filledQuantity\": \"0.040000000\",\n    \"remainingQuantity\": \"0.060000000\"\n  },\n  \"serverTime\": 1783420800123\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>수량·체결 금액·수수료는 누적값입니다. 이벤트의 절대 주문 상태로 기존 값을 교체합니다.\u003C\u002Fp>\n\u003Ch2 id=\"체결-이벤트\">체결 이벤트\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"event\": \"fill\",\n  \"sequence\": 8,\n  \"data\": {\n    \"executionId\": \"987654:0.040000000\",\n    \"orderId\": \"987654\",\n    \"symbol\": \"BTC-USDT\",\n    \"walletId\": 21,\n    \"side\": \"buy\",\n    \"type\": \"limit\",\n    \"liquidity\": \"maker\",\n    \"price\": \"65000.000000000\",\n    \"quantity\": \"0.010000000\",\n    \"quoteQuantity\": \"650.000000000\",\n    \"cumulativeQuantity\": \"0.040000000\",\n    \"cumulativeQuoteQuantity\": \"2600.000000000\",\n    \"cumulativeFee\": \"0.001000000\",\n    \"aggregated\": false,\n    \"baseCurrencyId\": 1002,\n    \"quoteCurrencyId\": 1001,\n    \"time\": 1783420800123,\n    \"microtime\": 1783420800123456\n  },\n  \"serverTime\": 1783420800123\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>executionId\u003C\u002Fcode>는 실시간 중복 확인용 불투명 ID입니다. REST \u003Ccode>\u002Fv1\u002Ffills\u003C\u002Fcode>의 \u003Ccode>fillId\u003C\u002Fcode>와 다릅니다.\u003C\u002Fli>\n\u003Cli>\u003Ccode>quantity\u003C\u002Fcode>와 \u003Ccode>quoteQuantity\u003C\u002Fcode>는 이번 이벤트의 체결 증가분입니다.\u003C\u002Fli>\n\u003Cli>\u003Ccode>cumulativeQuantity\u003C\u002Fcode>, \u003Ccode>cumulativeQuoteQuantity\u003C\u002Fcode>, \u003Ccode>cumulativeFee\u003C\u002Fcode>는 주문 전체의 누적값입니다.\u003C\u002Fli>\n\u003Cli>maker는 보통 한 번의 체결이며 \u003Ccode>aggregated: false\u003C\u002Fcode>입니다. taker가 여러 주문을 체결한 결과나 복구된 누적 차이는 \u003Ccode>aggregated: true\u003C\u002Fcode>일 수 있습니다. 이때 \u003Ccode>price\u003C\u002Fcode>는 해당 결과의 가중평균입니다.\u003C\u002Fli>\n\u003Cli>snapshot은 체결을 재생하지 않습니다. 연결이 끊긴 구간의 정확한 체결은 REST로 대조합니다.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"잔고-이벤트와-순서\">잔고 이벤트와 순서\u003C\u002Fh2>\n\u003Cp>주문 엔진의 체결 업데이트는 \u003Ccode>order\u003C\u002Fcode> → \u003Ccode>fill\u003C\u002Fcode> → 관련 기준·결제 통화의 \u003Ccode>balance\u003C\u002Fcode> 순서로 전달됩니다. 이체에 따른 잔고 변경도 balance 이벤트로 전달됩니다.\u003C\u002Fp>\n\u003Cp>잔고 필드는 \u003Ca href=\"\u002Fapi-docs\u002Fgenerated\u002Fschemas\u002F#schema-balance\">Balance\u003C\u002Fa>를 확인하세요. 잔고 이벤트를 기존 값에 더하지 말고, 지갑과 통화별 상태를 대체합니다. 연결 종료·sequence 누락·권한 변경 시에는 \u003Ca href=\"\u002Fapi-docs\u002Fwebsocket\u002Frecovery\u002F\">복구 절차\u003C\u002Fa>를 따릅니다.\u003C\u002Fp>\n",1793249660045]