国王小组:搭建交易所开源的订单匹配引擎

简介: 开源的订单匹配引擎国王小组提供了构成订单匹配引擎的底层组件。订单匹配是接受证券(或其他可替换资产)的买单和卖单的过程,并对其进行匹配,以允许原本互不相识的各方之间进行交易。订单匹配引擎是每个金融交易所的核心,并可用于许多其他情况,包括交易非金融资产,作为交易算法的测试平台,等等。

开源的订单匹配引擎

国王小组提供了构成订单匹配引擎的底层组件。

订单匹配是接受证券(或其他可替换资产)的买单和卖单的过程,并对其进行匹配,以允许原本互不相识的各方之间进行交易。

订单匹配引擎是每个金融交易所的核心,并可用于许多其他情况,包括交易非金融资产,作为交易算法的测试平台,等等。

一个典型的基于Liquibook的应用可能看起来是这样的。

image.png
除了订单匹配过程本身,Liquibook可以被配置为维护一个 "深度簿",记录未结订单的数量和这些订单在各个价格水平上代表的总数量。

深度簿的例子
符号XYZ。
买入方。
每股53.20美元。1203笔订单;150,398股。
每股53.19美元。87张订单;63,28股
每股52.00美元 3笔订单;2150股
卖方
每股54.00美元 507笔订单;120,700股
等等...
由Liquibook支持的订单属性。
Liquibook知道以下订单属性。

侧面。买或卖
数量
代表要交易的资产的符号
Liquibook对符号没有任何限制。它被视为一个简单的字符串。
期望的价格或 "市场",接受市场定义的当前价格。
交易将在指定的价格或任何更好的价格产生(卖出订单的价格较高,买入订单的价格较低)。
止损价格,保持订单,直到市场价格达到指定值。
这通常被称为简单的停止价格。
全部或无标志,指定整个订单应被填满或没有交易发生。
立即或取消标志,指定在所有可以针对市场上现有订单进行的交易完成后,订单的剩余部分应被取消。
注意结合 "全部或无 "和 "立即或取消 "产生的订单通常被描述为 "成交或取消"。
唯一需要的属性是边、数量和价格。其他属性可使用默认值。

应用程序可以根据需要在订单对象上定义额外的属性。这些属性对Liquibook的行为没有影响。

对订单的操作除了提交订单外,交易者还可以提交取消或修改现有订单的请求。(修改也被称为取消/替换)这些请求可能会成功或失败,这取决于之前针对该订单执行的交易。

返回给应用程序的通知。
当重大事件发生时,Liquibook将通知应用程序,以使应用程序能够实际执行Liquibook确定的交易,并使应用程序能够发布市场数据供交易者使用。

产生的通知包括:。

旨在为交易商提交订单的通知。
订单被接受
订单被拒绝
订单已完成(全部或部分)。
订单被替换
替换请求被拒绝
取消的订单
取消请求被拒绝。
拟作为市场数据发布的通知
交易
注意这也应该触发应用程序做它需要做的事情,以使交易发生。
证券变更
由任何影响证券的事件触发
不包括被拒绝的请求。
深度簿变化的通知(如果启用)。
深度记录改变
最佳买入或最佳卖出(BBO)改变。
性能
Liquibook是用C++编写的,使用了现代高性能技术。这个资源库包括一个测试程序的源代码,可以用来测量Liquibook的性能。
用这个程序进行的基准测试显示,持续速率为
每秒200万到250万次的插入。
像往常一样,这种类型的性能测试的结果会因你运行测试的硬件和操作系统的不同而不同,所以把这些数字作为你的应用程序可以从Liquibook期望的性能类型的一个粗略的数量级的估计。

适用于你的设计
允许一个应用程序使用智能或普通的指针到订单。
与现有的订单模型兼容。
需要一个微不足道的接口,它可以被添加到现有的订单对象中或包裹起来。
与现有的证券、账户、交易所、订单、填充的标识符兼容。
例子
这个资源库包含两个完整的示例程序。这些程序可以用来评估Liquibook,看它是否满足你的需求。它们也可以作为你的应用程序的模型,甚至可以直接并入你的应用程序,这要归功于Liquibook发行的自由许可。

这些例子是。

深度提要发布者和订阅者

产生提交给Liquibook的订单,并发布由此产生的市场数据。
使用QuickFAST来发布市场数据
手动输入订单

允许从控制台读取订单和其他请求,或通过脚本(文本文件)提交。
将这些提交给Liquibook。
将从Liquibook收到的通知显示在控制台或日志文件中。
详细说明在 README_ORDER_ENTRY.md 文件中。
构建Liquibook
好消息是你不需要构建Liquibook。Liquibook的核心是一个纯头文件库,所以你可以简单地把Liquibook/src添加到你的include路径中,然后把#include <book/order_book.h>添加到你的源代码中,Liquibook就可以在你的应用程序中使用了。

然而,这个资源库包括Liquibook的测试和示例程序。这些程序需要被编译和构建,以便运行它们。本节的其余部分将描述如何做到这一点。

依赖性
Liquibook没有运行时的依赖性。它可以在任何可以运行C++程序的环境中运行。

为了从源码构建Liquibook测试和示例程序,你需要创建makefiles(用于Linux等)或Windows Visual Studio的Project和Solution文件。

Liquibook使用MPC从一个通用的构建定义来创建这些与平台相关的文件。

用于跨平台构建的MPC。

MPC本身是用perl写的,所以你的环境需要一个工作的Perl编译器。大多数linux系统已经有了这个。如果你在Windows上需要一个Perl编译器,OCI推荐Active State Perl V5.x或更高版本。

如果你想为Liquibook构建单元测试,你还需要boost测试库。

BOOST(可选)用于单元测试。
其中一个示例程序(发布和订阅市场数据)使用QuickFAST来编码和解码市场数据信息。如果你想运行这个例子,你需要QuickFAST。

QuickFAST(可选)用于构建深度馈送发布者/订阅者的例子。

QuickFAST有自己的依赖性,在其网页上有描述。

子模块说明
Assertive测试框架在以前的版本中使用,但现在已经不需要了。
如果你已经导入这个子模块来支持以前的版本,你可以删除liquibook/test/unit/assertiv目录。

准备好构建测试和示例程序。
Boost测试
如果你想运行Liquibook的单元测试(强烈推荐!),你应该在尝试构建Liquibook之前安装和/或构建boost测试。Boost测试是在多文件测试模式下使用的,而不是简单的只用头的模式,所以编译后的boost测试库必须可用。

请按照boost网站上的说明,在你的环境中构建/安装该库。当你完成后,你应该导出$BOOST_ROOT的环境变量。

由于有许多boost构建选项,请检查以确保包含文件和库文件都在预期的位置。MPC希望能找到。

包含文件在$BOOST_ROOT/include/boost中。
库文件在$BOOST_ROOT/lib中
如果你不想安装boost,你可以编辑liquibook.features文件,将相应的一行改为boost=0,这将禁止构建单元测试。

QuickFAST
发布和订阅示例程序使用QuickFAST。如果你想运行这个例子程序,请看QuickFAST网站下载和构建这个库。

设置环境变量$QUICKFAST_ROOT,指向你安装和构建QuickFAST的位置。

在运行MPC之前,你还应该编辑liquibook.features文件,设置QuickFAST=1的值。

如果你不打算运行这个示例程序,将环境变量QUICKFAST_ROOT设置为liquibook/noQuickFAST。

在Linux上构建Liquibook
env.sh脚本使用大多数Linux/Unix系统上都有的readlink程序。如果你没有 readlink,在运行 env.sh 之前,将 $LIQUIBOOK_ROOT 环境变量设置为包含 liquibook 的目录。

打开一个shell并输入

$ cd liquibook
$ . ./env.sh
$MPC_ROOT/mwc.pl -type make liquibook.mwc
$ make depend
$ make all
构建的输出
Liquibook测试和示例库将在$LIQUIBOOK_ROOT/lib中。
Liquibook的例子程序将在$LQUIBOOK_ROOT/bin中。
Liquibook的测试程序将在$LQUIBOOK_ROOT/bin/test中。
用Visual Studio构建Liquibook示例和测试程序
使用以下命令来设置构建环境并创建Visual Studio项目和解决方案文件。注意,如果你使用MinGW或其他linux-on-Windows技术,请遵循Linux的说明;但是,OCI通常不会对此进行测试。

cd liquibook
copy winenv.bat w.bat #optional if you want to keep the original
                    # note that single character batch file names are ignored in 
                    # .getignore so the customized
                    # file will not be checked into the git repository (a good thing.)
edit w.bat # edit is your choice of text editor
                    # follow the instructions in the file itself.
w.bat # sets and verifies environment variables
mpc.bat # generate the visual studio solution and project files.
然后。
区块链交易所开发的玩法介绍
数字区块链交易所系统开发的玩法
东南亚比特币区块链交易所系统项目开发
币币,,法币,合约交易所源码,适合二次开发有技术的团队
关于数字货币现货期权合约交易所系统开发详情源码
Search for 原生APP高仿火币合约交易所完整USDT源码
区块链交易所|java交易所源码|币币交易|多币种|
花火奇点交易所原生APP源码/交易/币币交易/永续倒序加权/
交易所源码出售
区块链合约交易所源码新币币交易所USDT秒合约杠杆C2C法币
区块链交易所开发源码,数字货币交易所app开发
数字币交易所源码网站
加密数字货币交易所开发——分步指南
数字货币交易所系统开发
数字货币- 智能合约交易所app系统开发
数字货币交易所开发现成源码案例
数字货币交易所交易系统开发解决方案
数字货币交易所开发解决方案,数字交易系统搭建
交易所开发源码,数字货币永续合约交易平台搭建
数字货币交易平台开发_数字货币交易所系统搭建
数字货币交易所- 开源软件分享
现成数字货币交易所源码系统开发
Search Results for 数字货币交易所源代码
区块链交易所搭建, 币币交易系统搭建
去中心化交易所搭建|区块链数字货币交易平台开发
区块链交易所搭建,币币交易系统搭建
数字货币交易所系统开发技术原理丨数字货币交易所开发(源码案例)
从命令行输入liquibook.sln来启动Visual Studio,或
从Windows菜单中启动Visual Studio,使用菜单File|Open|Project or Solution来加载liquibook.sln。
对于任何平台
Liquibook应该可以在任何具有现代C++编译器的平台上工作(至少支持C++11。)

用于创建构建文件的MPC程序和测试中使用的Boost库以及一些例子都支持各种各样的平台。

有关在你的环境中使用MPC的细节,请参见MPC文档。

相关文章
|
6月前
|
安全
期权现货外汇交易所系统开发详细规则/需求设计/方案逻辑/教程指南/源码功能
Developing an options, spot, and foreign exchange system involves complex financial products and trading rules, requiring consideration of the combination of technological implementation and financial rules. The following are possible detailed development rules and functional requirements for your r
|
安全 前端开发 区块链
IPPSWAP去中心化交易所兑换底池项目系统开发稳定版/规则案例/逻辑方案/源码程序
dapp是一个运行在区块链上的应用程序。智能合约是一种在区块链上运行的代码,它可以自动执行交易。
|
设计模式 XML 安全
【开源项目】银行查询服务的设计和实现
银行查询服务的设计初衷是:为提供更加便利的查询服务,我们在分布式系统架构下,独立开发了与各大银行对接的查询服务。该独立服务支持用户轻松查询账户余额和消费明细的信息,同时保证用户消费的可见性。这种架构设计,不仅提升了用户的查询体验、保证了用户的信息安全,更为整个分布式系统的性能和可维护性提供了保障,为用户和第三方支付机构的长期合作奠定了良好的基础。该服务设计以微服务为基础,使用多种设计模式。
184 0
【开源项目】银行查询服务的设计和实现
合约跟单/现货量化跟单/一键跟单/对接API火币/币安/OK交易所系统开发稳定版/成熟案例/案例详细/源码程序
、合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易。The buying and selling objects of contract trading are standardized contracts formulated by the exchange,which specifies standardized information such as the type of goods,trading time,and quantity.The contract represents the rights and obligations of both
|
机器学习/深度学习 数据可视化 算法
「首席架构师推荐」统计软件一览表
「首席架构师推荐」统计软件一览表
|
机器学习/深度学习 算法 JavaScript
去中心化交易所套利机器人模型建立及开发源码示例
去中心化交易所套利机器人是一种用于从去中心化交易所中套利的机器人。这些机器人通过监测市场价格变动、执行交易操作并快速获利,为套利者提供了一种高效的投资策略。 套利机器人的工作原理是通过分析市场数据,预测价格涨跌趋势,并在价格出现异常时迅速进行交易,从而实现套利收益。套利机器人通常使用高速计算机和复杂的算法来捕捉市场中的套利机会,以最大化收益并减少风险。
|
消息中间件 SQL 网络协议
国王小组:开发数字货币交易所源码搭建数据反馈处理器如何设置
DAPP交易所系统开发(开发案例)丨DAPP交易所系统开发(源码及方案) 交易所开发成品丨交易所系统开发(演示版)丨交易所APP源码设计 区块链交易所开发详细丨区块链交易所系统开发(开发方案)丨区块链交易所源码案例部署 Uniswap交易所开发稳定版丨Uniswap交易所系统开发(开发模板)丨Uniswap交易所系统源码案例部署 数字货币交易所开发详情版丨数字货币交易所系统开发(web3.0技术开发)丨数字货币交易所开发源码成品 交易所APP开发功能丨交易所系统开发(成熟及案例)丨交易所系统源码平台 DAPP交易所系统开发(开发案例)丨DAPP交易所系统开发(源码及方案)
国王小组:开发数字货币交易所源码搭建数据反馈处理器如何设置
|
存储 区块链 C++
ACE双币拆分理财dapp系统开发|智能合约开发详情
ACE双币拆分理财dapp系统开发|智能合约开发详情
交易所开发系统搭建,应该这样细化ICO模块功能(国王小组)
交易所开发系统搭建,应该这样细化ICO模块功能(国王小组)
国王小组:开发交易所搭建|如何实现分布式事务
开发交易所搭建|如何实现分布式事务 在 Hyperf 中,您可以使用 dtm-client 库在您的应用程序中实现分布式事务。 以下是如何使用 dtm-client 为用户下订单编写交易代码的示例: