限价订单内存撮合引擎核心服务
目前具备:
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
查询订单薄买单列表订单总量
执行内存回收操作