match-trade超高效的交易所撮合引擎,采用伦敦外汇交易所LMAX开源的Disruptor框架,用Hazelcast进行分布式内存存取,以及原子性操作。使用数据流的方式进行计算撮合序列,才用价格水平独立撮合逻辑,实现高效大数据撮合。
用户输入包括:
委托单:
限价撮合:
市价撮合: 目前就实现这两种订单撮合
这个是一个简单流盘口计算demo
//获取匹配的订单薄数据 IMap<Long, Order> outMap = hzInstance.getMap(HzltUtil.getMatchKey(coinTeam, isBuy)); /** * -★ * -使用Java 8 Stream API中的并行流来计算最优 * -能快速的拿到撮合对象,不用排序取值,降低性能消耗 */ Order outOrder = outMap.values().parallelStream().min(HzltUtil::compareOrder).get(); //这种方式最难的,就是整理盘口深度数据了 /** * -★ * -获取行情深度 * * @param coinTeam 交易队 * @param isBuy 是否是买 * @return List<Depth> */ public List<Depth> getMarketDepth(String coinTeam, Boolean isBuy) { List<Depth> depths = new ArrayList<Depth>(); IMap<Long, Order> map = hzInstance.getMap(HzltUtil.getMatchKey(coinTeam, isBuy)); if (map.size() > 0) { /** * -这个流:主要是安价格分组和统计,使用并行流快速归集。 */ List<Depth> list = map.entrySet().parallelStream().map(mo -> mo.getValue()) .collect(Collectors.groupingBy(Order::getPrice)).entrySet().parallelStream() .map(ml -> new Depth(ml.getKey().toString(), ml.getValue().stream().map(o -> o.getUnFinishNumber()).reduce(BigDecimal.ZERO, BigDecimal::add) .toString(), "0", 1, coinTeam, isBuy)) .sorted((d1, d2) -> HzltUtil.compareTo(d1, d2)).collect(Collectors.toList()); /** * -这个流:主要是盘口的累计计算,因涉及排序选择串行流 */ list.stream().reduce(new Depth("0", "0", "0", 1, coinTeam, isBuy), (one, two) -> { one.setTotal((new BigDecimal(one.getTotal()).add(new BigDecimal(two.getNumber()))).toString()); depths.add(new Depth(two.getPrice(), two.getNumber(), one.getTotal(), two.getPlatform(), two.getCoinTeam(), two.getIsBuy())); return one; }); } else { Depth depth = new Depth("0", "0", "0", 1, coinTeam, isBuy); depths.add(depth); } return depths; }
在我8cpu,16G内存的开发win10系统上测试结果:
Tendermint允许您索引交易,然后查询或订阅它们的结果。 让我们来看看 [tx_index] 配置部分: Let's take a look at the [tx_index] config section: ##### transactions indexer configuration options ##### [tx_index] # What indexer to use for
问题内容: 我当时正在innoDB表中测试事务支持,只是出于好奇,我试图在MyIsam表上运行同一事务,但令人惊讶的是它起作用了。我假设在myIsam表上的查询是一个接一个地执行的,而不是在一个原子操作中执行的,并且我不会从START TRANSACTION以及COMMIT和ROLLBACK操作中得到任何错误。我有兴趣,是MyIsam引擎只是忽略此操作还是执行某些操作? 问题答案: MyISAM有
与智能合约交易 要与现有的智能合约进行交易,需要提供以下属性: to:智能合同地址 value:在智能合约中你希望存放的以太币Ether量(如果智能合约接受以太币Ether的话) data: 已编码的函数选择器和自变量参数 web3j负责函数编码,有关实现的进一步细节,请参阅应用程序二进制接口部分Application Binary Interface。 Function function = n
介绍 Ethereum是一个平台,旨在让人们轻松地使用blockchain技术编写分散式应用程序(Đapps)。分散应用程序是一种为其用户提供特定目的的应用程序,它具有重要的特性就是本身不依赖于现有的任何一方。Đapp不是作为销售的前端或者为特定方提供服务,而是一个交互应用的不同人员和组织走到一起的工具,且无需任何集中的中介。 通常在集中提供商的领域,例如过滤,身份管理,托管和争议解决,必要的“中
flying 是一个可以极大增加 mybatis 开发速度的插件组,它提供了一种全新的操作数据的方式,希望能对您有所帮助。 flying 主要特点: 以前我们在 mapper.xml 中要写很复杂的 sql 语句,但现在在 mapper.xml 中只需这样: <select id="select" resultMap="result"> flying#{?}:
我需要从我在春豆中收到的交换对象获取 SOAP 消息。 我有一个骆驼路由,它从服务endpoint路由到我的javabean。Spring宣布的Java Bean和Camel路线如下: 在我的java bean中,我接收交换对象: 问题是我无法从交换中获取SOAP消息。我骆驼网站,在这里我发现我必须使用这个来获取SOAP消息: 但是他给了我< code > NullPointerException