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

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

开源的订单匹配引擎

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

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

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

一个典型的基于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文档。

相关文章
|
Linux Shell 数据安全/隐私保护
使用 useradd 命令创建新用户
在Linux中创建新用户使用`useradd`命令。打开终端,以`sudo`运行`useradd [选项] 用户名`创建用户,如`sudo useradd newuser`。接着,使用`sudo passwd newuser`设置密码。要添加用户到其他组,如`sudo`组,用`sudo usermod -aG sudo newuser`。验证用户创建可执行`id newuser`。更多配置选项可查看`man useradd`或`useradd --help`。
670 3
|
运维 搜索推荐 数据安全/隐私保护
什么是C端 什么是B端 这里告诉你
C端产品早已将运营专业化,并细化到各维度的运营了,比如运营的工种可以细分为“活动运营岗、用户运营岗、增长裂变岗、内容运营岗”等等。
18658 0
什么是C端 什么是B端 这里告诉你
|
2月前
|
数据采集 运维 自然语言处理
2025设备管理系统推荐指南:如何通过预防性维护与知识传承化解运维难题
制造业智能化转型中,设备运维面临维护不准与经验流失双重挑战。树根科技根云平台凭借实时监测、智能分析与知识传承一体化方案,助力企业实现精准维护与效率提升,成为2025年设备管理系统优选。
137 0
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
280 0
MySQL执行流程
|
数据库 开发者 Python
Tornado框架:速度与简洁的完美结合,但它真的适合你吗?
【8月更文挑战第31天】在Web开发领域,框架的选择至关重要,影响着项目的结构、效率及扩展性。Tornado作为一个兼具性能与易用性的框架,提供了非阻塞I/O和异步支持,适用于高性能Web应用。与需配合WSGI服务器的Django和Flask不同,Tornado集成了HTTP服务器,能独立处理高并发请求。通过简单的安装和示例代码即可搭建HTTP服务器,并利用其异步机制提升资源利用率。尽管Tornado在处理I/O密集型任务时表现出色,但对于不熟悉异步编程的开发者来说,学习曲线较陡。总体而言,Tornado适合高并发场景,但在快速开发和复杂业务逻辑上,Django和Flask仍是不错的选择。
589 0
|
运维 应用服务中间件 调度
自动化运维:使用Ansible实现服务器批量管理
【10月更文挑战第26天】在当今快速发展的IT领域,自动化运维已成为提升效率、降低人为错误的关键技术手段。本文通过介绍如何使用Ansible这一强大的自动化工具,来简化和加速服务器的批量管理工作,旨在帮助读者理解自动化运维的核心概念和实践方法。文章将围绕Ansible的基础使用、配置管理、任务调度等方面展开,通过实际案例引导读者深入理解自动化运维的实现过程,最终达到提高运维效率和质量的目的。
|
缓存 关系型数据库 MySQL
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
26627 0
|
虚拟化 Docker 容器
【Docker】Docker容器和虚拟机的区别是什么?
【4月更文挑战第20天】【Docker】Docker容器和虚拟机的区别是什么?