撮合交易系统服务边界与设计_qq_18537055的博客-CSDN博客_activi撮合交易

标签: | 发表时间:2020-08-13 20:32 | 作者:
出处:https://blog.csdn.net


如何设计并实现一个数字货币交易系统     

        证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所。和传统的商品交易不同的是,证券交易系统提供的买卖标的物是标准的数字化资产,如USD、股票、BTC等,它们的特点是数字计价,可分割买卖。

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

        一个完整的数字货币交易系统是由用户系统(sso)、账户系统(account)、订单系统(order)、撮合系统(match)、以及清算系统(clearing)、行情系统(market)和钱包系统(wallet)构成的。各个子系统相互配合,完成数字货币报价交易。

  • SSO:用户全局登录,身份验证,权限现在;
  • account:用户用户数字货币相关操作,查看账户、划转、冻结等操作;
  • order:提供给下单,撤单,委托列表,历史交易记录;
  • match:撮合引擎是交易系统的核心。撮合引擎本质上就是维护一个买卖盘列表,然后按价格优先原则对订单进行撮合,能够成交的就输出成交结果,不能成交的放入买卖盘。这里注意没有时间优先原则,因为经过定序的订单队列已经是一个时间优先的队列了。
  • clearing:清算的工作就是把买单冻结的USD扣掉,并加上买入所得的BTC,同时,把卖单冻结的BTC扣掉,并加上卖出所得的USD。根据taker/maker的费率,向买卖双方收取手续费。
  • market:情系统保存市场的成交价、成交量等信息,并输出实时价格、K线图等技术数据,以便公开市场查询。
  • wallet:钱包系统就是提供给用户充值、提币等操作。

当然如果是自己的做的钱包,那么你可能还需要节点扫描上账系统,和离线签名系统(冷钱包),之前也看见过一些朋友说定序系统,我提供的方案是用mq队列的放手,先进先出。

说说核心代码,disruptor高性能环形队列无锁特性,使它成为交易所撮合引擎的核心技术,再加上分布式热备份内存技术,就基本上可以实现一个不错的撮合引擎了先看看disruptor:

DisruptorConfig:

      public class DisruptorConfig {
	
	static Disruptor<OrderEvent> disruptor;
	static{
		OrderEventFactory factory = new OrderEventFactory();
		int ringBufferSize = 1024*1024;
		ThreadFactory threadFactory = runnable -> new Thread(runnable);
		disruptor = new Disruptor<>(factory, ringBufferSize, threadFactory,ProducerType.MULTI, new YieldingWaitStrategy());
		disruptor.handleEventsWithWorkerPool(new MatchHandler(),new MatchHandler()).then(new DepthInputHandler(),new DepthOutHandler());
		disruptor.start();
	}
	
	public static void producer(OrderEvent input){
		RingBuffer<OrderEvent> ringBuffer = disruptor.getRingBuffer();
		OrderProducer producer = new OrderProducer(ringBuffer);
		producer.onData(input);
	}
}

OrderProducer:

      public class OrderProducer {

	private final RingBuffer<OrderEvent> ringBuffer;

	public OrderProducer(RingBuffer<OrderEvent> ringBuffer) {
		this.ringBuffer = ringBuffer;
	}

	private static final EventTranslatorOneArg<OrderEvent, OrderEvent> TRANSLATOR = new EventTranslatorOneArg<OrderEvent, OrderEvent>() {
		public void translateTo(OrderEvent event, long sequence, OrderEvent input) {
			BeanUtils.copyProperties(input,event);
		}
	};
 
	public void onData(OrderEvent input) {
		ringBuffer.publishEvent(TRANSLATOR, input);
	}
}

 

OrderEventFactory:

      /**
 * 事件生成工厂(用来初始化预分配事件对象)
 * 创建者 kinbug
 */
public class OrderEventFactory implements EventFactory<OrderEvent>{

	@Override
	public OrderEvent newInstance() {
		// TODO Auto-generated method stub
		return new OrderEvent();
	}

}

MatchHandler :

      /**
 * 撮合处理器
 * @author kinbug
 */
public class MatchHandler implements WorkHandler<OrderEvent> {
	
	@Override
	public void onEvent(OrderEvent event) throws Exception {
		// TODO Auto-generated method stub
		//处理你的撮合细节
	}

}

DepthInputHandler入订单的深度,和出订单的深度和MatchHandler类似;

具体代码见: 传送门

了解更多撮合: 传送门

相关 [交易 系统 服务] 推荐:

交易系统的消息服务如何保证100%可靠

- - 廖雪峰的官方网站
分布式应用中,消息系统被大量使用,主要原因有:. 发送方和接收方不需要相互知道对方,一个只管发,一个只管收,大大简化了处理逻辑. 如果发送方发送速度快于接收方的接收速度,消息系统就可以暂时将无法处理的消息缓存起来,让接收方慢慢处理. 没有消息系统时,发送方就不得不配合接收方降低处理速度,从而拖慢了整个系统的性能.

撮合交易系统服务边界与设计_qq_18537055的博客-CSDN博客_activi撮合交易

- -
如何设计并实现一个数字货币交易系统     .         证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所. 和传统的商品交易不同的是,证券交易系统提供的买卖标的物是标准的数字化资产,如USD、股票、BTC等,它们的特点是数字计价,可分割买卖.         证券交易系统通过买卖双方各自的报价,按照价格优先、时间优先的顺序,对买卖双方进行撮合,实现每秒成千上万的交易量,可以为市场提供高度的流动性和价格发现机制.

交易系统的历史回测应该注意什么

- - 知乎每日精选
交易系统必须能通过历史回测才可以投入使用. 无法通过历史回测的交易系统不可能在实际交易中获利. 历史回测是交易系统投入实盘的必要前置环节. 能通过历史回测的交易系统不一定是好用的交易系统,但不能通过历史回测,则一定不是好用的交易系统. 一般地,回测交易系统,需要从稳健性(Robustness)分析的角度特别留意以下四点.

王海亚:淘宝交易系统演进之路

- - CSDN博客研发管理推荐文章
淘宝的交易系统承载了购物车、下单、订单管理等多项淘宝的重要业务,随着淘宝业务量的不断上升,交易系统也随之几经改造. InfoQ此次专访了阿里巴巴架构师王海亚,另外作为ArchSummit深圳2014大会《电商,各走各的路》专题的讲师,王海亚将会分享淘宝交易平台的架构演变及并行化实践. InfoQ:淘宝的交易系统,主要承载了哪些业务.

常见分布式应用系统设计图解(十二):证券交易系统

- - 四火的唠叨
这篇讲的是证券交易系统,这类系统包含的内容很多,但是我们还是把目光放在核心的交易部分,比如说股票交易. 在某个可交易时间,如果卖家 A 要以至少 y 的价格卖掉股票 x,卖家 B 愿以至多 y 的价格买入股票 x,那么这个交易就可以发生. 虽说是交易系统,但是它和任何一个支付平台的交易系统有着显著的不同,它的核心是一个竞价匹配的机制,而非货币支付的机制,简单地说,这个机制包含了这样四个步骤:.

证券公司交易系统架构演进探析 - jimshi - 博客园

- -
券商作为证券市场的中介机构,承担了为广大投资者提供证券交易通道的市场责任. 你知道交易指令是如何传递到交易所并最终成交的吗. 上图是一个典型的券商交易系统逻辑架构,手机App、网上交易等系统称为渠道系统,职责是为投资者提供交易渠道,并对指令做初步的要素检查,最终所有合法交易指令都会发送到集中交易系统进行统一业务逻辑处理.

证券交易系统设计与开发 - 廖雪峰的官方网站

- -
证券交易系统是金融市场上能够提供的最有流动性,效率最高的交易场所. 和传统的商品交易不同的是,证券交易系统提供的买卖标的物是标准的数字化资产,如USD、股票、BTC等,它们的特点是数字计价,可分割买卖. 证券交易系统通过买卖双方各自的报价,按照价格优先、时间优先的顺序,对买卖双方进行撮合,实现每秒成千上万的交易量,可以为市场提供高度的流动性和价格发现机制.

八款企业用户反馈系统服务

- huige - 天涯海阁-Web2.0Share
去年一年电子商务发展很快,很多电子商务网站也广受投资人的青睐,对于电子商务而言,除了网站信息流,支付和物流以外,其实相关的基础配套服务也非常重要,比如用户反馈系统,一个好的用户反馈系统可以很好的提高用户满意度. 这方面的企业级服务国外相对较成熟,国内这一块相对发展还不是特别成熟,个人觉得有很大的潜力,当然用户反馈系统不仅仅可以用于电子商务领域,任何互联网产品和传统领域都是有用武之地的,这样的服务对于中小型企业尤其有价值.

Nokia 推出 Drive 导航系统、Mix Radio 和 ESPN Sports Hub 服务

- 米十三 - Engadget 中国版
Nokia 所说的「真正的」男子汉 Windows Phone 的杀手应用应该就在这了. 这次推出的 Lumia 800 即将成为首部内建完整导航的 WP7 手机,这个支持 Turn-by-Turn 的 Nokia Drive 导航应用,相信只要是 Nokia 的爱用者应该都会很习惯,主要是因为其接口看起来就有如其前身 Ovi Maps 一样简单易用,并且也拥有类似的功能 -- 脱机地图下载,让你不用担心没有网络信号时会找不着路.

如何选择服务器操作系统(Linux/Unix)

- - 标点符
Linux的发行版有上百种,如何选择也是一种难题. 一、Ubuntu Desktop 和 Ubuntu Server. 这个是最方便,也是最快捷的方式. 如果刚开始使用Ubuntu,且不太熟悉命令行的可以选用Ubuntu Desktop来学习. 继而转为Ubuntu Server. 对于初学者,Ubuntu可以更好地上手,并且提供了很好提供了apt软件管理方式(这个是目前最好的软件管理方式),使用起来非常方便,同事Ubuntu的社区也非常的活跃,使用的人数也较多.