欢迎光临
我们一直在努力

web3现货交易撮合逻辑怎么做?

现货交易撮合逻辑怎么做?一篇讲透核心流程

原创声明:本文为原创首发内容。 适合人群:后端工程师、交易系统开发者、微服务架构实践者 关键词:现货交易、撮合引擎、订单簿、价格优先、时间优先、成交回报 阅读收益:看完可独立设计一版可落地的现货撮合主流程


前言

“撮合”本质上就是一句话:

把买单和卖单,按照既定规则配对成交。

但工程实现里,真正难的是:

  • 高并发下的顺序一致性
  • 成交与资产变更的一致性
  • 部分成交、撤单、重复请求等边界处理

这篇文章从第一性原理拆解:规则 -> 数据结构 -> 流程 -> 一致性 -> 工程落地。


1. 先定交易规则(不先定规则,代码一定乱)

现货交易最常见规则是:

  • 价格优先
  • 时间优先(同价位按先来后到)
  • 买卖方向约束
  • 解释:

    • 买单想“买便宜”,优先与最低卖价撮合
    • 卖单想“卖贵点”,优先与最高买价撮合

    1.1 可成交条件

    • 买单价格 >= 最优卖价,可成交
    • 卖单价格 <= 最优买价,可成交

    1.2 常见订单类型

    • 限价单:指定价格上限/下限
    • 市价单:按当前盘口最优价格立即成交(需风控保护)

    2. 核心数据模型(最小闭环)

    建议至少包含这 5 类对象:

  • Order(订单)
  • OrderBook(订单簿)
  • Trade(成交)
  • Position/Balance(资产与冻结)
  • Event(事件流:下单、成交、撤单)
  • 2.1 订单关键字段

    • orderId
    • userId
    • symbol(如 BTC/USDT)
    • side(BUY/SELL)
    • type(LIMIT/MARKET)
    • price
    • quantity
    • filledQuantity
    • status(NEW/PARTIAL/FILLED/CANCELED)
    • createTime

    2.2 订单簿结构建议

    • 买盘:按价格从高到低
    • 卖盘:按价格从低到高
    • 每个价位下是 FIFO 队列(时间优先)

    Java 常见实现:

    • TreeMap<Price, Deque<Order>>(买盘可用逆序比较器)

    3. 撮合主流程(下单到成交)

    3.1 限价买单示例

    假设用户下限价买单:买 2 BTC @ 100

    当前卖盘:

    • 卖1:99,数量 0.8
    • 卖2:100,数量 0.7
    • 卖3:101,数量 1.5

    撮合过程:

  • 先吃卖1(99)0.8,剩余 1.2
  • 再吃卖2(100)0.7,剩余 0.5
  • 卖3价格 101 > 买价 100,不可成交
  • 剩余
  • 赞(0)
    未经允许不得转载:171主机测评 » web3现货交易撮合逻辑怎么做?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址