Laravel Package for Matching Engine

Matching Engine For Laravel(基于redis的撮合引擎),PHP高性能撮合引擎

快速开始 github地址

安装: composer require sting_bo/mengine

复制配置文件: php artisan vendor:publish

依赖 predis

号外 已经出Golang微服务撮合啦,欢迎使用并提issue

使用说明 已有数据的系统如果使用此库,可以自己写一个初始化脚本,先把数据跑入队列

用户下单

下单后,先存入数据库,然后才开始下面步骤,实例化单据对象 use StingBoMengineCoreOrder;

$uuid = 3; // 用户唯一标识

$oid = 4; // 订单唯一标识

$symbol = 'abc2usdt'; // 交易对

$transaction = 'buy'; // 交易方向,buy/sale

$price = 0.4; // 交易价格,会根据设置精度转化为整数

$volume = 15; // 交易数量,会根据设置精度转化为整数

$order = new Order($uuid, $oid, $symbol, $transaction, $volume, $price);

交易方向与交易精度可在配置文件灵活设置return [

'mengine' => [

// 交易类型,不可更改

'transaction' => [

'buy',

'sale',

],

// 精度,可更改

'accuracy' => 8, //default

'test2usdt_accuracy' => 4, //设置交易对精度则使用,没有则取accuracy

],

]; push到队列,队列任务需要手动开启 use StingBoMengineServicesMengineService;

$ms = new MengineService();

$ms->pushQueue($order);

开启队列任务: php artisan queue:work --queue=abc2usdt 也可以使用horizon与supervisor来辅助,事半功倍!

队列消费时会进入撮合程序,大概的步骤如下:获取匹配委托订单

如果没有匹配的订单,则进入委托池,触发委托池变更事件,详见第5点

如果有匹配的委托,程序撮合,更新委托池数据

交易成功会触发事件,开发者要在监听器里处理有交易的委托单,比如更新数据库数据,WebSocket通知等 在EventServiceProvider里为撮合成功的事件注册监听器: // 撮合成功通知,参数分别是:当前订单,被匹配的单据,交易数量

event(new MatchEvent($order, $match_order, $match_volume));

// 注册监听器

protected $listen = [

'StingBoMengineEventsMatchEvent' => [

'AppListenersYourListener', // 你自己的监听器,应该也使用异步来实现

],

]; 如果只是部分成交,则剩余部分进入委托池,触发委托池变更事件,K线或者深度列表变更通知等, 注册监听器如下: // 委托池数据变更事件

event(new PushQueueEvent($order));

// 注册监听器

protected $listen = [

'StingBoMengineEventsPushQueueEvent' => [

'AppListenersYourListener', // 你自己的监听器,应该也使用异步来实现

],

]; 用户撤单

撤单流程应该是先查询数据库确认是否可撤销,再从redis里删除数据成功,最后更新回数据库$order = new Order($uuid, $oid, $symbol, $transaction, $volume, $price);

$ms = new MengineService();

$ms->deleteOrder($order);

此撮合引擎没有实现像数据库那样的锁机制,为了防止有单子在被撮合时又有撤销的命令出现,所以下单与撤单都走的同一个队列,保证了顺序性,每个交易对是隔离的队列,效率也有一定的保证,但开发需要实现异步通知用户功能,注册监听器如下:// 撤单成功通知

event(new DeleteOrderSuccEvent($order));

// 注册监听器

protected $listen = [

'StingBoMengineEventsDeleteOrderSuccEvent' => [

'AppListenersYourListener', // 你自己的监听器,应该也使用异步来实现

],

]; 获取某个交易对买/卖深度列表 $symbol = 'abc2cny';

$transaction = 'buy';

$ms = new MengineService();

$ms->getDepth($symbol, $transaction);

总结

本地垃圾笔记本上测试,交易对撮合速度平均在200笔/s,后续将继续优化撮合速度

php引擎,PHP撮合引擎相关推荐

  1. 数据结构设计_撮合引擎开发:数据结构设计

    价值超5万的撮合引擎:开篇 价值超5万的撮合引擎:MVP版本 交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保 ...

  2. 撮合引擎开发:MVP版本

    欢迎关注「Keegan小钢」公众号获取更多文章 撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 撮合引擎开发:流程的代码实 ...

  3. 7个开源交易撮合引擎

    如果你希望按照自己的需求打造金融交易平台,那么应当选择合适的交易撮合 引擎进行二次开发而不是基于完整的交易平台实现进行修改.本文将介绍 10个采用不同语言开发的开源的撮合引擎,你可以根据自己的需要选择 ...

  4. php+撮合引擎,撮合引擎开发:数据结构设计

    交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保存着指定交易对所有待撮合的委托单.每份账本都有两个队列,一个卖 ...

  5. 交易所撮合引擎原理及实现代码

    交易撮合引擎(Matching/Trading Engine),顾名思义是用来撮合交易的软件,广泛地应用在金融.证券.加密货币交易等领域.交易引擎负责管理加密资产市场中所有的开口订单(Open Ord ...

  6. coinex02// 撮合引擎 RingBuffer Disruptor的构建与使用

    目录 0. 课程视频地址 0.1 撮合引擎课程 0.1 RocketMQ安装 0.3 RocketMQ搭建成功后登录 1. docker 配置rocketmq 2 逻辑树 : 构建RingBuffer ...

  7. 开源证券交易撮合引擎 jOpenExchg V0.01 预览版

    项目名称:Java Open Exchange Project (jOpenExchg / jopenexchg) 项目当前版本:V0.01 项目简介: 基于GPL Licence的Java的开源证券 ...

  8. OpenRaft实操分享(撮合引擎场景)

    由于工作需要,一直对原子多播应用有非常浓厚的兴趣.通过一段时间的技术选型.我们非常幸运的得到了databend社群的热心支持.我也想通过我们的实际工作,对Openraft的未来应用尽一些微薄之力. 我 ...

  9. 撮合引擎开发:解密黑箱流程

    撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 业务流程 前面的几篇文章已经陆续讲到了黑箱内部的一些设计,包括核心的软件结 ...

最新文章

  1. osi七层网络层_OSI层速成课程
  2. 【Boost】boost库中thread多线程详解6——线程组简单例子
  3. 从晶体管特性曲线看饱和问题(Z)
  4. 四位数码管树莓派c语言,用树莓派和四位数码管模块做一个时钟
  5. ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java
  6. 通过Main的Checkpoint Restore加快Java启动速度
  7. centos6.5 mysql主从_CentosMysql主从备份
  8. netframework 4.0内置处理JSON对象
  9. 笔记本电脑风扇声音大_如果您的笔记本电脑过热或发出声音,则可能需要对风扇进行大修。...
  10. 腾讯云服务器linux系统有图形界面,腾讯云服务器如何搭建Ubuntu可视化界面?
  11. 大学物理公式和名词整理
  12. 防止外包不给钱 php,程序员接私活,怎样防止做完不给钱?
  13. 机器人编程要学c语言吗,小孩学机器人编程入门学什么
  14. php 色彩空间转换,PHP Imagemagick将灰度转换为RGB
  15. PayPal信用卡付款401,商家不接受使用此付款类型
  16. AMD Software Adrenalin Edition 23.5.1驱动发布,快速获取驱动
  17. linux脚本获取经纬度,JS实现根据详细地址获取经纬度功能示例
  18. 改变ubuntu终端显示语言(桌面系统是中文,终端提示是英文)
  19. zxing换行_为什么我的word里的横线上写完一行字不能自动换行,?
  20. 拐道交叉的css3动画,CSS3图片翻转动画技术详解

热门文章

  1. 转自何海涛 编程面试的五个要点
  2. MFC组合框实现多列组合框功能
  3. python3 scrapy框架,Python3爬虫(十八) Scrapy框架(二)
  4. 危害网络计算机安全罪判刑几年,帮助信息网络犯罪活动行为涉嫌成立犯罪的一般判刑多少年...
  5. 《弃子长安》第五章 杀气惊蝉
  6. You-Get, Annie 视频下载器 一键安装脚本
  7. 【ML】range、arange和linspace函数
  8. 水经注能否下载行政区域的矢量文件?
  9. 利用搜索关键字爬取今日头条新闻评论信息案例
  10. 计算机科学与技术发表文章,计算机科学与技术学院粆倩文老师的文章在顶级学术期刊IEEE TVCG上发表...