From ff6c7a1877500c2045ebdac7ae2153a92c8a5837 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 28 Feb 2026 23:11:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BB=BD=E9=A2=9D=E5=8D=95=E4=BD=8D=E7=BB=9F=E4=B8=80=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/views/TradeDetail.md | 2 +- src/views/TradeDetail.vue | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/views/TradeDetail.md b/docs/views/TradeDetail.md index f709dfe..4d970f5 100644 --- a/docs/views/TradeDetail.md +++ b/docs/views/TradeDetail.md @@ -10,7 +10,7 @@ ## 核心能力 - 分时图:ECharts 渲染,支持 Past、时间粒度切换 -- 订单簿:`OrderBook` 组件,通过 **ClobSdk** 对接 CLOB WebSocket 实时数据(全量快照、增量更新、成交推送) +- 订单簿:`OrderBook` 组件,通过 **ClobSdk** 对接 CLOB WebSocket 实时数据(全量快照、增量更新、成交推送);份额接口按 6 位小数传(1_000_000 = 1 share),`priceSizeToRows` 与 `mergeDelta` 会将 raw 值除以 `ORDER_BOOK_SIZE_SCALE` 转为展示值 - 交易:`TradeComponent`,传入 `market`、`initialOption`、`positions`(持仓数据) - 持仓列表:通过 `getPositionList` 获取当前市场持仓,传递给 `TradeComponent` 用于计算可合并份额 - 限价订单:通过 `getOrderList` 获取当前市场未成交限价单,支持撤单 diff --git a/src/views/TradeDetail.vue b/src/views/TradeDetail.vue index d4ac9a3..39f004e 100644 --- a/src/views/TradeDetail.vue +++ b/src/views/TradeDetail.vue @@ -556,13 +556,16 @@ const clobLastPriceNo = computed(() => clobLastPriceByToken.value[1]) const clobSpreadYes = computed(() => clobSpreadByToken.value[0]) const clobSpreadNo = computed(() => clobSpreadByToken.value[1]) +/** 订单簿份额接口按 6 位小数传(1_000_000 = 1 share),需除以该系数转为展示值 */ +const ORDER_BOOK_SIZE_SCALE = 1_000_000 + function priceSizeToRows(record: Record | undefined): OrderBookRows { if (!record) return [] return Object.entries(record) - .filter(([, shares]) => shares > 0) - .map(([p, shares]) => ({ + .filter(([, rawShares]) => rawShares > 0) + .map(([p, rawShares]) => ({ price: Math.round(parseFloat(p) / 100), - shares, + shares: rawShares / ORDER_BOOK_SIZE_SCALE, })) } @@ -597,8 +600,9 @@ function applyPriceSizeDelta(msg: PriceSizePolyMsg) { ) => { const map = new Map(current.map((r) => [r.price, r.shares])) if (delta) { - Object.entries(delta).forEach(([p, shares]) => { + Object.entries(delta).forEach(([p, rawShares]) => { const price = Math.round(parseFloat(p) / 100) + const shares = rawShares / ORDER_BOOK_SIZE_SCALE if (shares <= 0) map.delete(price) else map.set(price, shares) })