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

简介: 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);

  }

  }

相关文章
|
网络协议 Java 中间件
2024年最新阿里Java高级岗200+面试题,掌握80%进阿里没问题
更新的阿里集团Java岗JD标准,信息来源于阿里集团的招聘专场,包括天猫、蚂蚁金服、中间件团队的高级Java、技术专家岗位。文末随附BATJTMD等一线互联网企业的Java高级研发岗位的面试题目及答案。
|
存储 NoSQL 关系型数据库
InfluxDB 通识篇
InfluxDB 通识篇
1515 0
|
6月前
|
固态存储 安全 测试技术
别再用盗版镜像了!官方渠道获取Win10 ISO+VMware正版激活全流程
本文详细介绍了在VMware虚拟机上安装Windows 10系统的全流程,涵盖环境准备、虚拟机配置、系统安装及优化等关键步骤。内容包括软件资源获取(如VMware与Win10镜像下载链接)、硬件要求核查、虚拟机创建与参数设置(如UEFI/BIOS选择、处理器与内存分配),以及系统安装中的具体操作和常见问题解决方法。此外,还提供了性能调优方案(如显卡加速、快照管理)和高频问题解决方案,确保用户避开常见坑点。最后附有配套资源包和数据验证结果,帮助用户高效完成搭建并提升使用体验。
6388 17
|
6月前
|
NoSQL Java Redis
redisson分布式锁
Redisson 分布式锁提供了一种简单高效的方式来实现分布式系统中的锁机制。通过本文介绍的基本用法和高级用法,开发者可以根据具体的业务需求选择合适的锁类型来确保系统的稳定性和高并发性。希望本文能帮助读者更好地理解和使用 Redisson 分布式锁,提高系统的并发处理能力和可靠性。
425 10
|
存储 算法 区块链
合约跟单/永续合约/秒合约交易所系统开发详细逻辑丨源码说明
  基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。
|
消息中间件 缓存 运维
永续合约丨秒合约丨交易所系统开发正式版/方案详情/开发功能
永续合约开发技术是指开发和实现永续合约交易的技术。永续合约是一种无固定到期日的合约,与传统的期货合约不同,它没有到期日,可以一直持有。永续合约的交易方式类似于现货交易,但是具有杠杆交易的特点。
|
资源调度 前端开发 数据可视化
去中心化交易所开发(演示源码)
去中心化交易所开发(演示源码)
|
安全 前端开发 JavaScript
JAVA原生交易所系统开发正式版丨原生交易所系统开发指南教程/源码项目
确定项目需求:明确交易所系统的功能需求,包括支持的交易对、交易类型、用户操作流程、安全性需求等。
|
供应链 区块链 数据库
永续合约交易所系统开发|秒合约系统开发案例
区块链与普通数据库的主要区别在于,有关于如何将数据放入数据库,有一些特定规则。