JOURNAL / 随笔

我用一个月时间实现了股票交易所?

我用一个月时间实现了股票交易所? 封面
本文目录
  1. 一. 写在前面
  2. 二. 项目的整体结构
    1. 2.1 委托终端(柜台)🔨
    2. 2.2 网关🔨
    3. 2.3 排队机🔨
    4. 2.4 撮合引擎(核心)🔨
    5. 2.6 行情引擎🔨
  3. 三. 项目介绍以及技术选型
    1. 2.1 项目介绍📡
    2. 2.2 各个微服务的技术选型📡
      1. 1. 柜台📡
      2. 3. 排队机📡
      3. 4. 撮合引擎📡
      4. 5. 行情引擎以及 K 线发布📡
  4. 四. 写在最后🎃

前言:持续更新ing 本篇只作为项目介绍,架构设计,技术选型等。 😜


一. 写在前面

国内目前我所见过开源的交易所没有几个,这里我说一下我找到的两个其中一个是:Crypto-Exchange 这个在 gitee 上可以搜到的(文末会给出地址),我的这套项目的撮合引擎设计也有参考这个,这套的文档非常清晰,功能也十分全面,而且通过架构和技术选型可以看出这套的代码质量非常高,作者应该也是个技术大牛,但是对于想尝试的新手(比如我)非常不友好,不过这套项目面向的对象也不是小白,而是对于企业想进行二次开发的最好选择。😊

还有一个是尚学堂的 基于 SpringCloudAlibaba 货币交易系统(Coin-Exchange)。这个 B 站上是有教学视频的,但是有几个问题,这套的文档非常不规范,乱七八糟,数据还不全,我不知道是什么原因,可能是因为网上流传太多导致这个项目越来越模糊,但是如果你有底子的话有些地方也是能参考的。😅

上面我说的这两套项目我都有部署测试过,第一个太专业了,而且很多功能需要你对技术栈的配置非常熟练,而且对于服务器的配置有一定的要求(文档中有个服务器配置要求感兴趣的可以去看看)。有一些核心功能开源中并没有给出来需要联系作者,所以我也是跑了一些基础的功能。第二个我就不说了,写的乱七八糟,只有一些业务逻辑还能参考参考。而且这两个的有些核心东西都很像,我也不太清楚是谁抄谁的。


我在做这个项目之前搜遍了全网,随便一个交易所的代码,搞个第三方的平台都能卖几千块钱,如果对这个有兴趣的可以联系我,我给你网址 hhhhh。关于交易所的项目国内网上所拥有的资源可以说是屈指可数。

我个人认为有几个原因:首先是中国人对钱太敏感了,涉及到资金流相关的项目都是很保密的;其次就是接触过证券行业的同学应该都知道,整个交易所系统(我这里就拿其中一个业务:柜台 来举个例子)现在的供应商的行业现状就是国外一些比较大的供应商都是自主研发。回到国内,无论大大小小券商都是进行采购(买买买)👍 ,拿来就用的类型。

国内目前占据绝大市场份额的供应商比较出名的就是杭州的恒生电子,这家上市公司的大股东非常的有来头,就是非常出名的蚂蚁金服。除了这家以外,其他的都是一些中小型的供应商,比如金证…等等。很多供应商都说自己使用的是自研的,但是据我了解多多少少都是使用的恒生的进行二次开发,然后让恒生的工程师过来进行调试,因为恒生目前在国内属于绝对的龙头企业。这是大概目前国内的行业现状。☔


说说我为啥要做这个项目:
没有为啥,因为我想做。

免责声明:
按照中国国家相关法律政策规定,不得向中国大陆境内公民提供数字货币资产交易服务,不得提供人民币对数字货币的兑换以及支付服务,如不予配合履行以上职责,造成一切后果与本人无关。

技术参考说明:
本项目相关的业务逻辑只要有参考或者模仿第三方平台或有关开源仓库的都会在文末进行说明并贴出相关传送门。


二. 项目的整体结构

2.1 委托终端(柜台)🔨

根据国内监管会要求,客户无法直接连接交易所系统,中间必须经过证券公司的系统,即柜台系统。

交易柜台是连接交易所的下单系统,这里保存着用户所有的数据,通过经纪公司交易柜台再将交易所委托汇报和成交回报反馈给投资者(用户)。券商根据这些数据和商业银行清算资金和登记结算公司清算股份,最后和所有的客户清算资金和股份。

现实生活中的清算业务是一个非常复杂的业务流程,感兴趣的可以自己去研究一下。

柜台第二个核心功能就是路由,例如,我现在想要购买茅台的股票,柜台在收到客户从终端发过来的委托之后,柜台需要判断这支股票是在哪里上市的,是深交所上市的股票,还是上交所上市的股票。判断发现是上交所上市的股票之后,它就会通过和上交所的交易网关把这笔委托发送过去,这个选择路由发送过去的过程就叫做订单路由。💨


2.2 网关🔨

负责收集用户订单,并将其派发给撮合引擎。柜台通过 TCP 协议向交易所网关传递数据,前置网关对于柜台的业务并不做出具体答复。柜台流向网关的数据流是单向的,目的是将委托送到撮合核心的数据的优先级达到最高。💨


2.3 排队机🔨

排队机所作的工作有两个:

  1. 按照固定的频率从各个委托网关收集订单。
  2. 对于所有收集到的订单进行排序。💨

另外排队机中最为核心的概念就是定序

存在三个规则:

  • 时间优先
  • 价格优先
  • 量优先

核心目标是让更多的交易撮合成交,使市场成交量达到最大。

同时排队机必须保证:

  • 高可用:服务不能宕机。
  • 一致性:所有节点保存的数据必须完全一致。


2.4 撮合引擎(核心)🔨

交易系统中最为核心的部分,用于接收订单并根据业务逻辑实现撮合,生成交易记录,反馈用户。💨


2.6 行情引擎🔨

接收撮合交易引擎的结果,将数据持久化,并定时生成多时间周期的 K 线数据(开盘价、收盘价、交易量、最高价、最低价)。💨


三. 项目介绍以及技术选型

2.1 项目介绍📡

本项目核心架构参考 CoinExchangeSpring Cloud + Vertx + Disruptor 撮合交易系统实战(慕课网)。💨

核心功能说明:

  • 登录 / 注册 / 权限验证
  • 基础查询(资金持仓)
  • 股票买入卖出
  • 委托成交查询
  • 银行业务
  • K 线展示


2.2 各个微服务的技术选型📡

1. 柜台📡

使用 Nacos、Ribbon、Sentinel。


3. 排队机📡

基于 SOFAJRaft-RheaKV 实现,使用 Raft 一致性算法保证高可用与一致性。💨


4. 撮合引擎📡

采用 Disruptor 框架实现高性能撮合,未来考虑引入 UDP 通信优化。💨


5. 行情引擎以及 K 线发布📡

前端采用 Vue,K 线图来源于第三方库(未使用 TradingView)。


四. 写在最后🎃

这个项目应该是我目前能力的巅峰了,复盘整个流程时脑子很乱,后续可能还会更新。涉及微服务 80% 的主流中间件与框架,还需一定金融知识储备。

感谢所有帮助过我的朋友与开源社区,衷心希望国内开发社区越来越好。

代码胜于雄辩!⚡


参考链接: 🔍

分享我用一个月时间实现了股票交易所?

交流与讨论

评论由 Valine / LeanCloud 提供,点击后连接第三方服务。

搜索文章