python系统开发_证券交易系统设计与开发
证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所。
和传统的商品交易不同的是,证券交易系统提供的买卖标的物是标准的数字化资产,如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系统开发_证券交易系统设计与开发相关推荐
- Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)
一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...
- 简单Android app开发_如何简单快速开发外卖app?
如何开发一个外卖app?app开发需要多少钱?随着美团.饿了么的外卖app的发展,对餐饮.生鲜果蔬.超市便利店行业来说,app成为必不可缺少的一部分.与其向第三方交纳一定不开发一个自己的外卖平台.也有 ...
- android应用程序开发_抚顺小程序开发定制找谁,吉林小程序定制
湖南庚午网络科技有限公司为您详细解读kpuZae抚顺小程序开发定制找谁的相关知识与详情,微信小法式,简称小法式,缩写XCX,英文名Mini Program,是一种不需要#安拆即可使用的应用,它实现了应 ...
- 如果成为一名高级安卓开发_什么是高级开发人员,我如何成为一名开发人员?
如果成为一名高级安卓开发 Becoming a Senior Developer is something many of us strive for as we continue our code ...
- gwt前台开发_为GWT设置开发环境
gwt前台开发 介绍 这是旨在用Java开发跨平台移动应用程序的系列文章的一部分 . 在此博客文章中,我们将了解GWT是什么,并为GWT设置开发环境. GWT是一个开源开发工具包,用于开发基于浏览器的 ...
- java云开发_快速入门云开发
什么是云开发 这里引用官方的一段描述: 云开发(Tencent CloudBase,TCB)是云端一体化的后端云服务 ,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维.同 ...
- python房屋租赁系统的设计与实现_房屋租赁系统设计与开发
实用标准文案 文档大全 目录 1. 弓 I 言 ........................................................................... ...
- python产品发布会_阅读虫师django开发发布会系统以及django开发Web接口分享
最近阅读了虫师的书籍,关于虫师分析django Web开发以及django 开发Web接口,通过阅读虫师的书籍,学到了很多东西,在这里分享一下,和简友一起学习和讨论 1.创建项目django-admi ...
- js室内地图开发_如何组件化开发WebGIS系统
本文同发于本人博客:http://giscafer.com/2017/01/10/modularization-webgis/ 先啰嗦两句 前面聊过<探讨如何使用流行的前端技术开发WebGIS系 ...
- python 人工智能编程_最适合人工智能开发的5种编程语言
自从去年,AlphaGo打遍天下棋手无对手,人工智能的风头就一直无人能及.在刚刚过去的IT领袖峰会上,BAT三位大佬都看好人工智能的未来发展.今年年初,百度就做了一个大动作,在医疗方面押宝人工智能,所 ...
最新文章
- sorl实现商品快速搜索
- python timestamp转string_Python操作钉钉机器人发送各种消息
- latex常见编译错误和细节
- 学习Spring Boot:(二十四)多数据源配置与使用
- 错误之Only one usage of each socket address (protocol/network address/port)解决办法
- 【ubuntu】给新装好的UBUNTU系统配置静态IP
- oracle客户端ora 12541,Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
- Waymo真·无人车上路了!没司机的出租车推出在即 | 多图实拍
- json数据格式基础知识
- 如何使用IVT BlueSoleil 如何在电脑上使用蓝牙耳机
- 解决C#网络通信编程的阻塞问题
- ArcGIS 视域分析
- 【手写字母识别】基于matlab GUI模板匹配手写大写字母识别【含Matlab源码 115期】
- 联想电脑摄像头亮灯却无法正常显示解决
- 安卓开发:WebView下载文件
- Oracle修改expired状态,更改ORACLE 用户的 expired状态
- 用计算机rap歌词,Rap歌词
- 基于Android点菜系统的设计与实现,基于Android的手机点菜系统的设计与实现论文.doc...
- 红米note7支持html,红米Note 7
- Ubuntu 14.04 LTS 的安装和配置以及各种问题的解决