数字货币永续合约/币币交易所系统开发(开发案例),币币交易所/永续合约交易所开发源码及体验版

简介: Market analysis:Exchanges can also provide market charts and analysis tools for digital currencies,helping users understand market dynamics,trends,and price change

  Functional requirement of currency exchange system development:

  1.Digital currency exchange:The currency exchange system provides exchange services between digital currencies,and many digital currencies can be traded between these exchanges.

  2.Asset Custody:The exchange provides users with a digital currency wallet,in which their digital currency assets are placed for trading and asset storage.

  3.Trading matching:The Coin Exchange provides trading matching services to match the orders of buyers and sellers,connecting the two parties involved in the transaction.

  4.Market analysis:Exchanges can also provide market charts and analysis tools for digital currencies,helping users understand market dynamics,trends,and price change

  关于撮合交易引擎

  采用内存撮合的方式进行,以开发做撮合订单信息传输,MongoDB持久化订单成交明细,MySQL记录订单总体成交。其中行情模块主要负责订单成交持久化、行情生成、行情推送等服务,包括:

  K线数据,间隔分别为:1分钟、5分钟、15分钟、30分钟、1小时、1天、1周、1月

  所有交易对的市场深度(market depth)数据

  所有交易对的最新价格

  最近成交的交易对

  内存撮合交易支持的模式

  限价订单与限价订单撮合

  市价订单与限价订单撮合

  限价订单与市价订单撮合

  市价订单与市价订单撮合

  数字货币交易所系统开发示例代码如下:

  /**

  *限价委托单与市价队列匹配

  *param mpList市价对手单队列

  *param focusedOrder交易订单

  */

  public void matchLimitPriceWithMPList(LinkedList<ExchangeOrder>mpList,ExchangeOrder focusedOrder){

  List<ExchangeTrade>exchangeTrades=new ArrayList<>();

  List<ExchangeOrder>completedOrders=new ArrayList<>();

  synchronized(mpList){

  Iterator<ExchangeOrder>iterator=mpList.iterator();

  while(iterator.hasNext()){

  ExchangeOrder matchOrder=iterator.next();

  ExchangeTrade trade=processMatch(focusedOrder,matchOrder);

  logger.info(">>>>>"+trade);

  if(trade!=null){

  exchangeTrades.add(trade);

  }

  //判断匹配单是否完成,市价单amount为成交量

  if(matchOrder.isCompleted()){

  iterator.remove();

  completedOrders.add(matchOrder);

  }

  //判断吃单是否完成,判断成交量是否完成

  if(focusedOrder.isCompleted()){

  //交易完成

  completedOrders.add(focusedOrder);

  //退出循环

  break;

  }

  }

  }

  //如果还没有交易完,订单压入列表中

  if(focusedOrder.getTradedAmount().compareTo(focusedOrder.getAmount())<0){

  addLimitPriceOrder(focusedOrder);

  }

  //每个订单的匹配批量推送

  handleExchangeTrade(exchangeTrades);

  orderCompleted(completedOrders);

  }

  /**

  *市价委托单与限价对手单列表交易

  *param lpList限价对手单列表

  *param focusedOrder待交易订单

  */

  public void matchMarketPriceWithLPList(TreeMap<BigDecimal,MergeOrder>lpList,ExchangeOrder focusedOrder){

  List<ExchangeTrade>exchangeTrades=new ArrayList<>();

  List<ExchangeOrder>completedOrders=new ArrayList<>();

  synchronized(lpList){

  Iterator<Map.Entry<BigDecimal,MergeOrder>>mergeOrderIterator=lpList.entrySet().iterator();

  boolean exitLoop=false;

  while(!exitLoop&&mergeOrderIterator.hasNext()){

  Map.Entry<BigDecimal,MergeOrder>entry=mergeOrderIterator.next();

  MergeOrder mergeOrder=entry.getValue();

  Iterator<ExchangeOrder>orderIterator=mergeOrder.iterator();

  while(orderIterator.hasNext()){

  ExchangeOrder matchOrder=orderIterator.next();

  //处理匹配

  ExchangeTrade trade=processMatch(focusedOrder,matchOrder);

  if(trade!=null){

  exchangeTrades.add(trade);

  }

  //判断匹配单是否完成

  if(matchOrder.isCompleted()){

  //当前匹配的订单完成交易,删除该订单

  orderIterator.remove();

  completedOrders.add(matchOrder);

  }

  //判断焦点订单是否完成

  if(focusedOrder.isCompleted()){

  completedOrders.add(focusedOrder);

  //退出循环

  exitLoop=true;

  break;

  }

  }

  if(mergeOrder.size()==0){

  mergeOrderIterator.remove();

  }

  }

  }

  //如果还没有交易完,订单压入列表中,市价买单按成交量算

  if(focusedOrder.getDirection()==ExchangeOrderDirection.SELL&&focusedOrder.getTradedAmount().compareTo(focusedOrder.getAmount())<0

  ||focusedOrder.getDirection()==ExchangeOrderDirection.BUY&&focusedOrder.getTurnover().compareTo(focusedOrder.getAmount())<0){

  addMarketPriceOrder(focusedOrder);

  }

  //每个订单的匹配批量推送

  handleExchangeTrade(exchangeTrades);

  if(completedOrders.size()>0){

  orderCompleted(completedOrders);

  TradePlate plate=focusedOrder.getDirection()==ExchangeOrderDirection.BUY?sellTradePlate:buyTradePlate;

  sendTradePlateMessage(plate);

  }

  }

相关文章
|
存储 NoSQL 关系型数据库
InfluxDB 通识篇
InfluxDB 通识篇
2137 0
|
10月前
|
固态存储 安全 测试技术
别再用盗版镜像了!官方渠道获取Win10 ISO+VMware正版激活全流程
本文详细介绍了在VMware虚拟机上安装Windows 10系统的全流程,涵盖环境准备、虚拟机配置、系统安装及优化等关键步骤。内容包括软件资源获取(如VMware与Win10镜像下载链接)、硬件要求核查、虚拟机创建与参数设置(如UEFI/BIOS选择、处理器与内存分配),以及系统安装中的具体操作和常见问题解决方法。此外,还提供了性能调优方案(如显卡加速、快照管理)和高频问题解决方案,确保用户避开常见坑点。最后附有配套资源包和数据验证结果,帮助用户高效完成搭建并提升使用体验。
11274 17
|
10月前
|
NoSQL Java Redis
redisson分布式锁
Redisson 分布式锁提供了一种简单高效的方式来实现分布式系统中的锁机制。通过本文介绍的基本用法和高级用法,开发者可以根据具体的业务需求选择合适的锁类型来确保系统的稳定性和高并发性。希望本文能帮助读者更好地理解和使用 Redisson 分布式锁,提高系统的并发处理能力和可靠性。
556 10
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
848 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
算法 前端开发 Java
支撑每秒数百万订单无压力,SpringBoot + Disruptor 太猛了!
本文详细介绍如何通过 Spring Boot 集成 Disruptor 实现每秒处理数百万订单的高性能系统。Disruptor 是一种无锁并发框架,采用环形缓冲区和无锁算法,提供极低延迟和高吞吐量。文章涵盖 Maven 配置、事件工厂、处理器及生产者实现,并通过 REST API 和 Thymeleaf 展示订单创建流程。Disruptor 在高并发场景下表现出色,是解决高性能并发处理的理想方案。
|
存储 算法 区块链
合约跟单/永续合约/秒合约交易所系统开发详细逻辑丨源码说明
  基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。
|
存储 消息中间件 NoSQL
Redis为什么会这么快?Redis到底有多快?【大厂经典面试题】
Redis为什么会这么快?Redis到底有多快?【大厂经典面试题】
1060 1
|
消息中间件 存储 缓存
一文快速掌握高性能内存队列Disruptor
`Disruptor`是LMAX公司开源的高性能内存消息队列,单线程处理能力可达600w订单/秒。本文从使用和设计角度探讨这款Java消息队列。作者sharkChili是Java开发者,CSDN博客专家,Java Guide项目维护者。文章介绍了Disruptor的基础使用,包括前置步骤、消息模型、消息处理器配置、生产者实现,并展示了效果。同时,文章详细解析了Disruptor的工作流程和高效原因,如无锁操作、分支预测和缓存填充。最后,作者提供相关资源链接并邀请读者加入交流群。
3556 0
springfox-bridge:随心所欲地为非restful接口生成swagger api文档
### 一、引言     目前,利用swagger框架为restful接口编写API文档非常流行,在spring web项目中,利用springfox+swagger更是可以通过注解的方式直接进行API文档的生成,这样开发者在项目开发的同时就直接把文档准备好了,利用springfox的配置,可以在项目启动后直接浏览器访问查看API文档,同时还能