交易所撮合服务学习-(1)

admin 2025年3月3日09:42:13评论10 views字数 1026阅读3分25秒阅读模式
整理下最近手搓的撮合服务,记录下学习过程
撮合服务介绍

撮合引擎是所有撮合交易系统的核心组件,不管是股票交易系统——包括现货交易、期货交易、期权交易等,还是数字货币交易系统——包括币币交易、合约交易、杠杆交易等,以及各种不同的贵金属交易系统、大宗商品交易系统等,虽然各种不同交易系统的交易标的不同,但只要都是采用撮合交易模式,都离不开撮合引擎。

完整的交易流程如下

1.系统开放某个交易标的的交易功能。

2.用户提交该交易标的的买卖申报,即委托单。

3.系统验证委托单是否有效,包括交易标的是否处于可交易的状态、订单的价格和数量是否符合要求等。

4.确定该委托单的挂单(Maker)费率和吃单(Taker)费率。

5.检查用户的资产账户情况,包括账户状态是否交易受限,是否有足够资金用于下单等。

6.将详细的委托单数据持久化到数据库,并冻结用户账户中相应数量的资金。

7.将委托单进行撮合处理,即在交易委托账本(OrderBook)中寻找能与该委托单匹配成交的订单,匹配的结果可能是:全部成交、部分成交或无匹配。全部成交或部分成交时,可能在交易委托账本中存在一个或多个匹配的订单,即会产生一条或多条成交记录。当无匹配或部分成交时,委托单的部分数据包括剩余未成交的数量会暂时保存到交易委托账本中,等待与后续的委托单匹配撮合。

8.将撮合产生的成交记录持久化到数据库,并根据历史成交记录生成市场数据,如K线数据、今日涨跌幅等。

9.更新数据库中所有成交订单的委托单数据,以及更新订单用户的资产账户余额。

10.将更新的订单数据、市场数据等发送给到前台。

撮合竞价方式

- 集合竞价

- 连续竞价(web3都采用这个)

代码结构如下
交易所撮合服务学习-(1)
MatchService目前只实现了限价单撮合,市价要读取币对数据,没写
1. 首先读取开放的交易对,也就是币对 比如BTC/USDT ETH/USDT
交易所撮合服务学习-(1)
2. 读取币对的名称 精度,有多少个币对就创建多少个订单本(orderbook),并通过OrderEventHandler中的onevent事件进行监听
交易所撮合服务学习-(1)
交易所撮合服务学习-(1)
Disruptor的配置类
由于交易所对撮合服务的性能有要求,这里使用java的 Disruptor三方库
交易所撮合服务学习-(1)
交易所撮合服务学习-(1)
这里相当于white true循环读取队列,有内容就给到eventhandler处理
限价单的一些撮合逻辑
主要是做了一些业务逻辑判断
交易所撮合服务学习-(1)
交易所撮合服务学习-(1)
演示
用户下限价单,数据持久化到数据库,通过计划任务从数据库读取限价单 进行撮合
交易所撮合服务学习-(1)

原文始发于微信公众号(8ypass):交易所撮合服务学习-(1)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月3日09:42:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   交易所撮合服务学习-(1)https://cn-sec.com/archives/3786399.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息