回形针换别墅 - openBarter (古人的物物交换市场) 泛撮合交易系统

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

标签

PostgreSQL , 物物交换 , 无货币时代 , openBarter , 交易系统 , 撮合交易 , 证券 , limit order , market order , central limit order book (CLOB)


背景

很久以前有一则这样的新闻:一个男孩用一个回形针,换回了一套别墅,他是怎么做到的呢?

pic

先不管他是怎么做到的,这让我联想到了古人物物交换的场景,没错古人还没有发明货币之前,都是通过物物交换的方式来得到其他人的东西的。(但是这样效率实在太低了)。另外,现在的证券交易也与之类似,只是更加的简化了的交换系统。

撮合交易是证券交易系统最频繁,也是非常复杂的一个业务。撮合交易是咋回事呢:

https://baike.baidu.com/item/%E6%92%AE%E5%90%88%E6%88%90%E4%BA%A4%E4%BB%B7

概述

什么是撮合成交价?

当买入价等于卖出价时,成交价就是买入价或卖出价,这一点大家是不会有疑义的。问题是当买入价大于卖出价时成交价应该如何确定?

举例说明

计算机在撮合时实际上是依据前一笔成交价而定出最新成交价的。如果前一笔成交价低于或等于卖出价,则最新成交价就是卖出价;如果前一笔成交价高于或等于买入价,则最新成交价就是买入价;如果前一笔成交价在卖出价与买入价之间,则最新成交价就是前一笔的成交价。下面不妨以例明之。

买方出价1399点,卖方出价是1397点。如果前一笔成交价为1397或1397点以下,最新成交价就是1397点;如果前一笔成交价为1399或1399点以上,则最新成交价就是1399点;如果前一笔成交价是1398点,则最新成交价就是1398点。

这种撮合方法的好处是既显示了公平性,又使成交价格具有相对连续性,避免了不必要的无规律跳跃。

(也就是说:用户可能卖到比委托价更高的价格,而买家则可能买到比委托价更低的价格。 关键看上一次交易的价格,以及用户委托的卖出和买入价。)

撮合成交原则

中金所计算机交易系统在撮合成交时,基本原则按价格优先、时间优先的原则进行(有的情况下为了控制风险的需要,会采取在价格相同情况下,平仓单优先)。

该原则的完整解释是:买家出价高的优先,卖家出价低的优先,如果出价相同则挂单时间最早的优先。

举例说明:

例如,某交易者卖出3月沪深300指数期货10手,挂出价格为1400点,交易者甲挂出10手买单,报价为1398点;随后,交易者乙也想买10手,挂价为1399点,由于乙的价格比甲高,按照价格优先原则,乙的单子排在甲的前面;后来,丙也挂出10手买单,价格同样为1399点,由于挂价与乙相同,按照时间优先原则,只能排在乙的后面,但仍在甲之前。假如这时有一个交易者以1397点卖出10手,买方优先成交者就是乙。

回到古代 - 没有货币的物物交换

相对撮合交易系统,还有一个更古老、更复杂的系统,物物交换系统,因为在古代还没有货币的时候,人们要像得到其他人生产的东西,必须以交换的形式进行。

例如:

A生产棉花,B生产玉米,C生产小麦。

A需要小麦,B需要棉花,C需要玉米。

怎么交易呢?

A和B更换,然后A和C换,然后B和C换。

商品越多,换法可能会更加复杂。

openBarter

openBarter是一个物物交换系统插件,撮合物物交换的交易。

原理详见:

http://olivierch.github.io/openBarter/

https://api.pgxn.org/src/openbarter/openbarter-0.8.2/doc/doc-ob.pdf

https://api.pgxn.org/src/openbarter/openbarter-0.7.0/doc/barterUtopia.pdf

1、openBarter用到了4张表 (torder, tstack, tmvt, towner):

The order book stored in a table torder

a stack accepting orders as input tstack

a stack tmvt storing movements to be consumed.

A table towner is used to store names of owners of the orders of the order book。

2、通过UDF实现的接口:

报价:

Interactions with the order book can be submissions of orders to be executed or administrative tasks.

Orders submitted are recorded in a table tstack representing a stack.

The stack is consumed to execute orders.

撮合交易:

Results of interactions are recorded in the table tmvt.

Records of this table represent movements for barter orders, a barter order producing several movements.

A record of this table can also represent the result of other interactions.

小结

1、证券交易,由于存在委托买卖价格不一致的情况,实际上需要根据上一比交易的价格,以及委托价来定,所以并不是绝对只接受委托价。为了撮合交易,满足买低不买高,卖高不卖低的原则,需要记录每个股票上一比交易的成交价(撮合价)。同时还需要满足时间优先、价格优先的原则。

2、快速匹配,消除订单是物物交换系统、证券交易撮合委托交易的核心诉求。

3、几个股票交易相关的术语

https://www.zhihu.com/question/24118706

作者:放开那个猕猴桃

链接:https://www.zhihu.com/question/24118706/answer/30372783

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Market Order: 市价订单。就是如果你下单后,基本上会马上执行的,该订单价格就是下单后的市场价格。

Limit order: 限价订单。这个也容易理解,就是限定一个价格买入和卖出。比如某股票市价可能是15,你希望大跌后买入,你想设定10刀,这时候就用limit order,买入价格就是10刀。偶尔可能有一点点的不同,比如9.99这样。如果你是买入,实际买入价格应该和你设定的limit price一样或略低,如果你是卖出,实际卖出价格应该和你设定的limit price一样或略高,

Stop order(stop-loss order): 通常用来止损或者锁定利润。和limit order最大的差别是, Limit order在你下单后你的券商是马上将这个订单推送到市场。但是stop order不是,提交stop order后,这个订单在券商这里,拿下跌止损来说,比如当前股价是15,你希望如果股价下跌,最多损失5刀每股,你设定stop order price是10,只有当股票大跌的时候并且跌穿10刀的时候,这时候券商会将订单推向市场,成为一个market order, 以低于10刀的价格尽快卖出。但是券商无法保证卖出价格是多少。

stop limit order: 可以这么理解stop order是一个trigger,触发条件, limit order是你严格限制的价格,券商只能按照你设置的limit price来买卖(可能会有微小差异,可以忽略)。所以stop limit order就是给你更多的控制权,你设定2个价格stop price和limit price,当达到stop price的时候,这时候这个stop limit order 就成为了一个limit order,接下来的行为和limit order一样了.比如你15买入一只股票,股票在下跌途中,你想在10刀止损,但是不想股票跌到10刀就马上止损,因为股票下跌过程中也是波动的,如果跌到10刀马上反弹了呢,止损止在最低点怎么办?你可以设定stop price,比如9.5刀,只有跌穿9.5刀后,然后才执行limit order。

PS:stop order不是在券商手里,而是在market maker手里,券商已经将stop order route到市场中了,给了做市商。

4、撮合系统和交易系统不同,买卖双方是需要撮合的,撮合系统类似红娘,牵线搭桥。

一个简单的设计如下:

买方报价,为了提高并发度,每个股票代码一张表:

create table buy_000001 (  -- 每个股票代码一个表    
  uid int,          -- 用户ID    
  bucket int,       -- 报价数量    
  price numeric,    -- 报价    
  ts timestamp,     -- 时间    
  order_type int2   -- 报价类别(限价、市价等)    
);    

卖方报价,为了提高并发度,每个股票代码一张表:

create table sell_000001 (  -- 每个股票代码一个表    
  uid int,          -- 用户ID    
  bucket int,       -- 报价数量    
  price numeric,    -- 报价    
  ts timestamp,     -- 时间    
  order_type int2   -- 报价类别(限价、市价等)    
);    

撮合:

do language plpgsql $$    
declare    
  声明 游标1 buy order by ts    
  声明 游标2 sell order by ts    
begin    
  loop 游标1    
    loop 游标2    
      逻辑    
      更新、删除 复合条件的 游标1、游标2 的current tuple.    
      符合条件后退出loop游标2(例如该笔BUY已撮合完成)    
    end loop;    
    符合条件后退出loop游标1(例如sell游标已没有数据)    
  end loop;    
end;    
$$;    

每只股票的交易量也是惊人的,每分钟交易百万笔是很常见的,要做好撮合系统,还需要继续探索和良好的设计,加油PostgreSQL,你一定能搞定的,有空闲时间会继续思考这个场景,非常有意思。

pic

参考

https://baike.baidu.com/item/%E6%92%AE%E5%90%88%E6%88%90%E4%BA%A4%E4%BB%B7

https://www.zhihu.com/question/24118706

http://olivierch.github.io/openBarter/

https://api.pgxn.org/src/openbarter/openbarter-0.8.2/doc/doc-ob.pdf

https://api.pgxn.org/src/openbarter/openbarter-0.7.0/doc/barterUtopia.pdf

目录
相关文章
|
机器学习/深度学习 数据采集 人工智能
人工智能安全(下)
人工智能安全(下)
1029 0
人工智能安全(下)
|
监控 安全
网络传输介质
本文介绍了有线传输介质和无线传输介质。有线传输介质包括双绞线、同轴电缆和光纤,其中双绞线因其成本低、安装便捷而广泛应用;同轴电缆适合长距离传输视频信号;光纤则具有高速、抗干扰等优势。无线传输介质涵盖无线电波、微波、红外线和蓝牙,适用于不同场景下的无线通信需求。
921 1
网络传输介质
|
机器学习/深度学习 搜索推荐 语音技术
前沿探索:融合语音克隆与TTS技术实现个性化语音助手
【10月更文挑战第20天】随着人工智能技术的迅猛发展,语音助手已经成为我们日常生活不可或缺的一部分。然而,传统的语音助手往往缺乏个性化元素,无法充分满足用户的独特需求。作为技术专家或研究人员,我一直致力于探索如何将语音克隆(Voice Cloning)技术与文本到语音(Text-to-Speech, TTS)技术相结合,创造出更加个性化且自然流畅的语音助手。本文将分享我的研究成果和个人观点,希望能为这一领域的未来发展提供一些启示。
736 2
前沿探索:融合语音克隆与TTS技术实现个性化语音助手
|
人工智能
写歌词的技巧和方法:打造完美歌词结构,妙笔生词AI智能写歌词软件
写歌词的技巧包括:开头吸引人,主体逻辑清晰,结尾画龙点睛。使用《妙笔生词智能写歌词软件》的AI功能,如智能写词、押韵优化等,可助你克服创作瓶颈,打造完美歌词结构,适用于民谣、摇滚、流行等多种风格。
|
运维 Kubernetes 网络协议
运维之道:从新手到专家的成长之路
【10月更文挑战第21天】 本文旨在探讨运维领域的成长路径,通过分享个人经历和行业见解,为读者提供一条从入门到精通的清晰路线图。我们将从基础技能的学习开始,逐步深入到高级技巧的应用,最终达到专业水平的提升。文章强调了持续学习和实践的重要性,并鼓励读者在面对挑战时保持积极态度,不断探索未知领域。
475 6
|
供应链 搜索推荐 数据挖掘
有哪些备受好评的流程管理工具?为复杂工作流程“做减法”
流程管理是企业运营的关键环节,通过系统化、标准化和持续优化,提升效率、降低成本、提高服务质量,增强市场竞争力。本文介绍了六款流程管理工具:板栗看板、Kissflow、Nintex、Appian、Tibco BPM 和 Pega,它们各自具备直观易用、强大功能、高定制性和良好集成能力等特点,帮助企业实现高效流程管理。
|
存储 传感器 数据采集
大数据
大数据是指数据量庞大(Volume)、增长迅速(Velocity)、类型多样(Variety)、价值密度低(Value)但潜力巨大的数据集。其来源包括互联网、物联网及企业内部数据。处理技术涵盖采集、预处理、存储、分析与可视化。应用领域涉及商业智能、金融、医疗、交通及公共服务等,助力决策优化与创新。
1064 8
|
消息中间件 安全 Shell
国货之光——jdchain1.6.5测试网络部署
国货之光——jdchain1.6.5测试网络部署
528 13
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。
8172 1
|
前端开发 JavaScript
HTML的a标签如何做返回顶部的功能
HTML的a标签如何做返回顶部的功能
646 0