# go-match-engine **Repository Path**: liyongdada/go-match-engine ## Basic Information - **Project Name**: go-match-engine - **Description**: No description available - **Primary Language**: Go - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-13 - **Last Updated**: 2021-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README •conf:存放配置文件的目录。 •main:main 包只有一个 main.go 文件,定义了程序入口函数。 •enum:枚举包实现了几个枚举类型的数据结构,包括订单行为、买卖方向、订单类型和排序方向。 •errcode:存放错误码的包,errcode.go 定义了错误码的数据结构,有 code 和 msg 两个属性;code.go 则定义了一些错误码对象。 •handler:接收 HTTP 请求的函数都放在这个包里,目前也就只有三个 handler 函数。 •process:启动、关闭引擎和分发订单的处理过程都在这个包里,包里还维护着不同交易对的订单通道,用来分发不同交易对的订单。 •engine:引擎包,包含了委托单、交易委托账本、订单队列、成交记录这几个核心的数据结构,以及用于处理交易对撮合的入口函数。 •middleware:存放中间件的包,目前只用到了 Redis 一个中间件。 •cache:缓存包,只有一个 cache.go 文件,缓存操作都在这个文件里定义。 •mq:消息队列包,也只有一个 mq.go 文件,消息的发送就定义在这里。 •log:日志包,实现了日志消息按日期分割并输出到文件。 ## limit:普通限价。当委托账本里存在能与该订单匹配成交的委托单时,则可能生成一条或多条成交记录,每条成交记录都将产生异步输出;当委托账本里没有可匹配的委托单时,则将该订单(全部数量或剩余数量)添加到委托账本中,这时不会产生任何输出。 ## limit-ioc:IOC限价-即时成交剩余撤销。当委托账本里存在能与该订单匹配成交的委托单时,则可能生成一条或多条成交记录,每条成交记录都将产生异步输出;当委托账本里没有可匹配的委托单时,则将该订单(全部或剩余数量)进行撤单处理,这时会产生一条撤单成功的输出。 ## market:默认市价-即时成交剩余撤销。和 IOC 限价一样,当委托账本里与该订单相反方向的订单队列里(也称对手方)存在委托单时,则可能生成一条或多条成交记录, 每条成交记录都将产生异步输出;当委托账本里对手方没有委托单时,则将该订单(全部或剩余数量)进行撤单处理,这时会产生一条撤单成功的输出。 与 IOC 限价不同的在于:IOC 限价订单是由用户指定了委托价格的,而市价则无需指定委托价格,会直接与对手方的头部委托单成交,直到该订单已全部成交或对手方再无委托单为止。 ## market-top5:市价-最优五档即时成交剩余撤销。market 可以与对手方所有价格档位的订单成交,但 market-top5 最多只会和对手方的五个价格档位内的订单成交,超出五档外的订单将不会成交。剩余未成交的都将做撤单处理并产生一条撤单成功的输出。 ## market-top10:市价-最优十档即时成交剩余撤销。最多只会和对手方的十个价格档位内的订单成交。