优化:订单份额单位统一优化

This commit is contained in:
ivan 2026-02-28 23:11:54 +08:00
parent 1ac53ffb79
commit ff6c7a1877
2 changed files with 9 additions and 5 deletions

View File

@ -10,7 +10,7 @@
## 核心能力 ## 核心能力
- 分时图ECharts 渲染,支持 Past、时间粒度切换 - 分时图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`(持仓数据) - 交易:`TradeComponent`,传入 `market``initialOption``positions`(持仓数据)
- 持仓列表:通过 `getPositionList` 获取当前市场持仓,传递给 `TradeComponent` 用于计算可合并份额 - 持仓列表:通过 `getPositionList` 获取当前市场持仓,传递给 `TradeComponent` 用于计算可合并份额
- 限价订单:通过 `getOrderList` 获取当前市场未成交限价单,支持撤单 - 限价订单:通过 `getOrderList` 获取当前市场未成交限价单,支持撤单

View File

@ -556,13 +556,16 @@ const clobLastPriceNo = computed(() => clobLastPriceByToken.value[1])
const clobSpreadYes = computed(() => clobSpreadByToken.value[0]) const clobSpreadYes = computed(() => clobSpreadByToken.value[0])
const clobSpreadNo = computed(() => clobSpreadByToken.value[1]) const clobSpreadNo = computed(() => clobSpreadByToken.value[1])
/** 订单簿份额接口按 6 位小数传1_000_000 = 1 share需除以该系数转为展示值 */
const ORDER_BOOK_SIZE_SCALE = 1_000_000
function priceSizeToRows(record: Record<string, number> | undefined): OrderBookRows { function priceSizeToRows(record: Record<string, number> | undefined): OrderBookRows {
if (!record) return [] if (!record) return []
return Object.entries(record) return Object.entries(record)
.filter(([, shares]) => shares > 0) .filter(([, rawShares]) => rawShares > 0)
.map(([p, shares]) => ({ .map(([p, rawShares]) => ({
price: Math.round(parseFloat(p) / 100), 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])) const map = new Map(current.map((r) => [r.price, r.shares]))
if (delta) { if (delta) {
Object.entries(delta).forEach(([p, shares]) => { Object.entries(delta).forEach(([p, rawShares]) => {
const price = Math.round(parseFloat(p) / 100) const price = Math.round(parseFloat(p) / 100)
const shares = rawShares / ORDER_BOOK_SIZE_SCALE
if (shares <= 0) map.delete(price) if (shares <= 0) map.delete(price)
else map.set(price, shares) else map.set(price, shares)
}) })