/h_math_engine

Memory transaction matching engine

Primary LanguageGoGNU Affero General Public License v3.0AGPL-3.0

限价订单内存撮合引擎核心服务

目前具备:

1、每秒可撮合1W笔订单(通过HTTP转发的情况下),如通过TCP的方式,每秒可撮合100W订单;

2、内存可循环使用自动回收;

3、可扩展,占用资源低,100万订单只需要1.2G内存;

4、内部采用skiplist结构,提高订单排序和查找效率,撮合效率高,订单撮合算法时间复杂度为: O(LOG N)

5、交易按价格优先、时间优先原则进行匹配撮合。

业务流程:

用户提交订单 ==》 接收数据 ==》处理数据(校验资产信息、冻结资产) ==》 推送到撮合引擎 ==》 进行撮合

==========================

软件启动:

打开命令行跳转到软件matchEngine所在目录执行以下命令:

./matchEngine

期间会提示是否允许接入网络,请点击允许,如无提示则忽略。 当你看到命令行有此提示就表示服务启动成功。

[Success]: Market初始化成功,共初始化[ 1 ] 个Market。Demo Market:CEO-QC

软件启动后,由于目前是第一版,相对简陋,完整版需要更大的工作量, 所以撮合引擎数据将在命令行中回显出来,主要的关键信息如下:

1、order input list . 表示接收到订单 2、Bid 表示接收到买单并进入买单撮合 3、Ask 表示接收到卖单并进入卖单撮合 4、成交信息: 例子: 卖单成交: 成交价: 8.1 成交量: 100 交易额: 810 买单费率: 30 卖单费率: 162 2018/11/24 13:06:51 Side:[ 2 ],order [ 200001 ] 已经完成 2018/11/24 13:06:51 Side: [ 1 ] ,Order[ 3000001 ] is Finish

5、Side : 订单方向,1为卖,2为买

=======================================

软件启动后会自动开启HTTP API并提供部分接口(测试使用)

API 地址:http://localhost:32777/

API列表:

1、http://localhost:32777/putLimitOrder

功能:提交限价委托订单

接收JSON 字符串为body的请求并返回数据接收提示。

Example:

正确的订单数据:

{"order_id":"1","user_id":"2","market":"CEO-QC","side":"1","amount":"100","price":"8.100","take_fee":"0.2","make_fee":"0.3","source":"postman"}

参数解析: order_id: 订单ID,纯数字,必须唯一,并且每次提交的订单ID都应比之前提交的大,例如这次提交的为 1 ,那么下次必须为2,这里因为是测试数据,所以需要手动控制, 正式流程中此ID为软件自动生成全局唯一ID

user_id: 用户ID,纯数字,任意填写,最大支持 int64位

market : 撮合市场,字符串,必须填写 "CEO-QC",目前因为是功能验证版本,所以默认只支持 "CEO-QC" MARKET, 后续可以扩展N个,由具体情况配置实现。

side: 订单方向,1 为卖 ,2为买

amount: 委托数量,必须填写,可以为任意小数

price: 委托价格,必须填写,可为任意小数

take_fee: 吃单手续费,必须填写,可为任意小数

make_fee: 挂单手续费,必须填写,可为任意小数

source: 订单来源,字符串,任意

以上json格式中,所有键的值均需要以双引号包裹,也就是说无论是什么格式,传输中均以json字符串类型传输,因是内部系统,没有做过多过滤筛选,务必注意。

返回:

如订单数据正常,则得到JSON:

{ "status": 1, "Msg": "Success", "Data": null }

==========================

2、http://localhost:32777/asklist

查询订单薄卖单列表订单总量

3、http://localhost:32777/bidlist

查询订单薄买单列表订单总量

4、http://localhost:32777/gc

执行内存回收操作