php引擎,PHP撮合引擎
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撮合引擎相关推荐
- 数据结构设计_撮合引擎开发:数据结构设计
价值超5万的撮合引擎:开篇 价值超5万的撮合引擎:MVP版本 交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保 ...
- 撮合引擎开发:MVP版本
欢迎关注「Keegan小钢」公众号获取更多文章 撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 撮合引擎开发:流程的代码实 ...
- 7个开源交易撮合引擎
如果你希望按照自己的需求打造金融交易平台,那么应当选择合适的交易撮合 引擎进行二次开发而不是基于完整的交易平台实现进行修改.本文将介绍 10个采用不同语言开发的开源的撮合引擎,你可以根据自己的需要选择 ...
- php+撮合引擎,撮合引擎开发:数据结构设计
交易委托账本 交易委托账本(OrderBook)是整个撮合引擎里最核心也是最复杂的数据结构,每个交易对都需要维护一份交易委托账本,账本里保存着指定交易对所有待撮合的委托单.每份账本都有两个队列,一个卖 ...
- 交易所撮合引擎原理及实现代码
交易撮合引擎(Matching/Trading Engine),顾名思义是用来撮合交易的软件,广泛地应用在金融.证券.加密货币交易等领域.交易引擎负责管理加密资产市场中所有的开口订单(Open Ord ...
- coinex02// 撮合引擎 RingBuffer Disruptor的构建与使用
目录 0. 课程视频地址 0.1 撮合引擎课程 0.1 RocketMQ安装 0.3 RocketMQ搭建成功后登录 1. docker 配置rocketmq 2 逻辑树 : 构建RingBuffer ...
- 开源证券交易撮合引擎 jOpenExchg V0.01 预览版
项目名称:Java Open Exchange Project (jOpenExchg / jopenexchg) 项目当前版本:V0.01 项目简介: 基于GPL Licence的Java的开源证券 ...
- OpenRaft实操分享(撮合引擎场景)
由于工作需要,一直对原子多播应用有非常浓厚的兴趣.通过一段时间的技术选型.我们非常幸运的得到了databend社群的热心支持.我也想通过我们的实际工作,对Openraft的未来应用尽一些微薄之力. 我 ...
- 撮合引擎开发:解密黑箱流程
撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 业务流程 前面的几篇文章已经陆续讲到了黑箱内部的一些设计,包括核心的软件结 ...
最新文章
- osi七层网络层_OSI层速成课程
- 【Boost】boost库中thread多线程详解6——线程组简单例子
- 从晶体管特性曲线看饱和问题(Z)
- 四位数码管树莓派c语言,用树莓派和四位数码管模块做一个时钟
- ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java
- 通过Main的Checkpoint Restore加快Java启动速度
- centos6.5 mysql主从_CentosMysql主从备份
- netframework 4.0内置处理JSON对象
- 笔记本电脑风扇声音大_如果您的笔记本电脑过热或发出声音,则可能需要对风扇进行大修。...
- 腾讯云服务器linux系统有图形界面,腾讯云服务器如何搭建Ubuntu可视化界面?
- 大学物理公式和名词整理
- 防止外包不给钱 php,程序员接私活,怎样防止做完不给钱?
- 机器人编程要学c语言吗,小孩学机器人编程入门学什么
- php 色彩空间转换,PHP Imagemagick将灰度转换为RGB
- PayPal信用卡付款401,商家不接受使用此付款类型
- AMD Software Adrenalin Edition 23.5.1驱动发布,快速获取驱动
- linux脚本获取经纬度,JS实现根据详细地址获取经纬度功能示例
- 改变ubuntu终端显示语言(桌面系统是中文,终端提示是英文)
- zxing换行_为什么我的word里的横线上写完一行字不能自动换行,?
- 拐道交叉的css3动画,CSS3图片翻转动画技术详解
热门文章
- 转自何海涛 编程面试的五个要点
- MFC组合框实现多列组合框功能
- python3 scrapy框架,Python3爬虫(十八) Scrapy框架(二)
- 危害网络计算机安全罪判刑几年,帮助信息网络犯罪活动行为涉嫌成立犯罪的一般判刑多少年...
- 《弃子长安》第五章 杀气惊蝉
- You-Get, Annie 视频下载器 一键安装脚本
- 【ML】range、arange和linspace函数
- 水经注能否下载行政区域的矢量文件?
- 利用搜索关键字爬取今日头条新闻评论信息案例
- 计算机科学与技术发表文章,计算机科学与技术学院粆倩文老师的文章在顶级学术期刊IEEE TVCG上发表...