证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所。

和传统的商品交易不同的是,证券交易系统提供的买卖标的物是标准的数字化资产,如USD、股票、BTC等,它们的特点是数字计价,可分割买卖。

证券交易系统通过买卖双方各自的报价,按照价格优先、时间优先的顺序,对买卖双方进行撮合,实现每秒成千上万的交易量,可以为市场提供高度的流动性和价格发现机制。

本文讨论如何设计并实现一个证券交易系统。

我们以一个美元计价的数字货币交易所为例,实现一个比特币的BTC/USD交易系统。

一个完整的证券交易系统是由用户系统、账户系统、订单系统、撮合系统以及清算系统等子系统构成的。各个子系统相互配合,完成证券报价交易。

1 ┌───────────┐ 2 ┌───────────┐ 7 ┌───────────┐

Request ────>│ User │────>│ Account │

└───────────┘ └───────────┘ └───────────┘

3│ ▲

▼ │

┌───────────┐ │

│ Order │ 6│

└───────────┘ │

4│ │

▼ │

┌───────────┐ 5 ┌───────────┐

│ Sequence │────>│ Match │

└───────────┘ └───────────┘

┌───────────┐

Market

└───────────┘

当一个请求进入交易系统后,首先由用户系统(User)识别用户身份,然后由账户系统(Account)对用户资产进行冻结,买入冻结USD,卖出冻结BTC,冻结如果成功,订单就进入定序系统(Sequence)。

为什么需要设计一个定序系统?因为交易系统的所有订单是一个有序队列。不同的用户在同一时刻下单,也必须由定序系统确定先后顺序。

经过定序的订单被送入撮合引擎(Match)。

撮合引擎是交易系统的核心。撮合引擎本质上就是维护一个买卖盘列表,然后按价格优先原则对订单进行撮合,能够成交的就输出成交结果,不能成交的放入买卖盘。这里注意没有时间优先原则,因为经过定序的订单队列已经是一个时间优先的队列了。

当撮合引擎输出了成交结果后,该成交记录由清算系统(Clearing)进行清算。清算的工作就是把买单冻结的USD扣掉,并加上买入所得的BTC,同时,把卖单冻结的BTC扣掉,并加上卖出所得的USD。根据taker/maker的费率,向买卖双方收取手续费。

清算系统完成清算后,更新订单状态,再通知用户,用户就可以查询到买卖的成交情况。

在撮合引擎输出成交记录给清算系统的同时,它还把去除用户和订单相关信息的成交记录输出给行情系统(Quotation),由行情系统保存市场的成交价、成交量等信息,并输出实时价格、K线图等技术数据,以便公开市场查询。

经过这样的模块化设计,一个证券交易系统就具备了雏型。

下一步,我们就需要把这个交易系统用代码实现出来。

先定义入口函数:

/**

* A crypto exchange.

*

* @author liaoxuefeng

*/

public class CryptoExchangeApplication {

public static void main(String[] args) {

// TODO:

}

}

接下来,实现各个模块的功能,一个证券交易系统就成功地开发出来了!

python系统开发_证券交易系统设计与开发相关推荐

  1. Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

    一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...

  2. 简单Android app开发_如何简单快速开发外卖app?

    如何开发一个外卖app?app开发需要多少钱?随着美团.饿了么的外卖app的发展,对餐饮.生鲜果蔬.超市便利店行业来说,app成为必不可缺少的一部分.与其向第三方交纳一定不开发一个自己的外卖平台.也有 ...

  3. android应用程序开发_抚顺小程序开发定制找谁,吉林小程序定制

    湖南庚午网络科技有限公司为您详细解读kpuZae抚顺小程序开发定制找谁的相关知识与详情,微信小法式,简称小法式,缩写XCX,英文名Mini Program,是一种不需要#安拆即可使用的应用,它实现了应 ...

  4. 如果成为一名高级安卓开发_什么是高级开发人员,我如何成为一名开发人员?

    如果成为一名高级安卓开发 Becoming a Senior Developer is something many of us strive for as we continue our code ...

  5. gwt前台开发_为GWT设置开发环境

    gwt前台开发 介绍 这是旨在用Java开发跨平台移动应用程序的系列文章的一部分 . 在此博客文章中,我们将了解GWT是什么,并为GWT设置开发环境. GWT是一个开源开发工具包,用于开发基于浏览器的 ...

  6. java云开发_快速入门云开发

    什么是云开发 这里引用官方的一段描述: 云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维.同 ...

  7. python房屋租赁系统的设计与实现_房屋租赁系统设计与开发

    实用标准文案 文档大全 目录 1. 弓 I 言 ........................................................................... ...

  8. python产品发布会_阅读虫师django开发发布会系统以及django开发Web接口分享

    最近阅读了虫师的书籍,关于虫师分析django Web开发以及django 开发Web接口,通过阅读虫师的书籍,学到了很多东西,在这里分享一下,和简友一起学习和讨论 1.创建项目django-admi ...

  9. js室内地图开发_如何组件化开发WebGIS系统

    本文同发于本人博客:http://giscafer.com/2017/01/10/modularization-webgis/ 先啰嗦两句 前面聊过<探讨如何使用流行的前端技术开发WebGIS系 ...

  10. python 人工智能编程_最适合人工智能开发的5种编程语言

    自从去年,AlphaGo打遍天下棋手无对手,人工智能的风头就一直无人能及.在刚刚过去的IT领袖峰会上,BAT三位大佬都看好人工智能的未来发展.今年年初,百度就做了一个大动作,在医疗方面押宝人工智能,所 ...

最新文章

  1. sorl实现商品快速搜索
  2. python timestamp转string_Python操作钉钉机器人发送各种消息
  3. latex常见编译错误和细节
  4. 学习Spring Boot:(二十四)多数据源配置与使用
  5. 错误之Only one usage of each socket address (protocol/network address/port)解决办法
  6. 【ubuntu】给新装好的UBUNTU系统配置静态IP
  7. oracle客户端ora 12541,Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
  8. Waymo真·无人车上路了!没司机的出租车推出在即 | 多图实拍
  9. json数据格式基础知识
  10. 如何使用IVT BlueSoleil 如何在电脑上使用蓝牙耳机
  11. 解决C#网络通信编程的阻塞问题
  12. ArcGIS 视域分析
  13. 【手写字母识别】基于matlab GUI模板匹配手写大写字母识别【含Matlab源码 115期】
  14. 联想电脑摄像头亮灯却无法正常显示解决
  15. 安卓开发:WebView下载文件
  16. Oracle修改expired状态,更改ORACLE 用户的 expired状态
  17. 用计算机rap歌词,Rap歌词
  18. 基于Android点菜系统的设计与实现,基于Android的手机点菜系统的设计与实现论文.doc...
  19. 红米note7支持html,红米Note 7
  20. Ubuntu 14.04 LTS 的安装和配置以及各种问题的解决

热门文章

  1. 【CSS】span标签设置宽度
  2. 斯蒂文斯理工学院计算机科学硕士,斯蒂文斯理工学院计算机科学硕士
  3. 基于AdaBoost的人脸检测 含源码
  4. 羊群效应?redis解决方案
  5. YY频道美化,模板修改工具【免费】可以闪动
  6. amr java 播放_Java ME中.amr文件的语音或音频播放器
  7. 应用于arcgis的代码,长期更新…
  8. panabit连接控制
  9. Windows10下自定义桌面快捷方式图标--以Spyder为例
  10. 数组添加/扩容和数组缩减