coinex03 // level2数据展示

阅读: 评论:0

coinex03 // level2数据展示

coinex03 // level2数据展示


1. 委托账本的设计

1.0 课程视频

=51&spm_id_from=pageDriver&vd_source=ff8b7f852278821525f11666b36f180a

1.1 数据库表设计

1. model-> OrderBooks // 不同价格的数据库表
2. model-> MergeOrder // 相同价格的不同时间的数据库表
3. 枚举类的使用

2. 构建数据处理方法

2.1 数据初始化方法

public void initialize() {log.info("init CoinTrader for symbol {}", symbol);// 载入比较器buyLimitPrice = new TreeMap<>(verseOrder()); //价格从大到小 Comparator 比较器sellLimitPrice = new TreeMap<>(Comparator.naturalOrder()); // 价格从小到大buyTradePlate = new TradePlate(symbol, OrderDirection.BUY);sellTradePlate = new TradePlate(symbol, OrderDirection.SELL);dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");}

2.2 获取当前的交易的队列方法

public TreeMap<BigDecimal, MergeOrder> getCurrentLimitPrices(OrderDirection direction) {return direction == OrderDirection.BUY ? buyLimitPrice : sellLimitPrice;}

2.3 添加 删除使用的迭代器方法

public Iterator<Map.Entry<BigDecimal, MergeOrder>> getCurrentLimitPriceIterator(OrderDirection direction) { // 之后 删除 添加 操作使用的return getCurrentLimitPrices(direction).entrySet().iterator();}

2.4 添加订单到队列的方法

// 原理:横向mergeOrder数据库表, 通过价格不同 判断是否存在mergeOrder 不存在就添加mergerOrder 再添加数据, 存在就直接在里面添加数据
public void addOrder(Order order) {TreeMap<BigDecimal, MergeOrder> currentLimitPrices = OrderDirection());MergeOrder mergeOrder = (Price());//if (mergeOrder == null) { // 之前在红黑树里面没有这个价格的keymergeOrder = new MergeOrder();currentLimitPrices.Price(), mergeOrder);}//mergeOrder.add(order);// 将新的订单添加到盘口里面OrderDirection()==OrderDirection.BUY){buyTradePlate.add(order);}else{sellTradePlate.add(order);}}

2.5 取消订单 -> 使用迭代器

// 原理: 取消订单 并判断 取消后 mergeOrder表中这个价格 是否还有其他订单,有则删取消的订单,无 则删除此价格的mergeOrder
public void cancelOrder(Order order) {TreeMap<BigDecimal, MergeOrder> currentLimitPrices = OrderDirection());MergeOrder mergeOrder = (order);if (mergeOrder == null) {return;}Iterator<Order> iterator = mergeOrder.iterator();while (iterator.hasNext()) {Order next = ();// 找到之前的我们的订单记录if (OrderId().OrderId())) {ve(); // 使用迭代器}}int size = mergeOrder.size(); // 删除之前,我们看合并订单的大小if (size == 0) { // 若我们的红黑树里面的合并订单的数据为空,我们摘除Price());}OrderDirection()==OrderDirection.BUY){ve(order);}ve(order);}}

2.6  获取队列第一个数据

public Map.Entry<BigDecimal, MergeOrder> getBestSuitOrder(OrderDirection orderDirection) {return getCurrentLimitPrices(orderDirection).firstEntry();}

2.7 OrderBooks构造器方法-> 初始化时数据构造 实时使用时数据构造

public OrderBooks(String symbol) {this(symbol, 4, 4);} // 小数点后4位// 构造器public OrderBooks(String symbol, int coinScale, int baseCoinScale) { // MatchEngineProperties 在这里面定义的方法类this.symbol = inScale = coinScale; // 交易币种的精度this.baseCoinScale = baseCoinScale; //基币的精度this.initialize(); // 初始化方法}

2.8 数据 交易对的加载器

// 配置类
@Data
@ConfigurationProperties(prefix = "spring.match")
public class MatchEngineProperties {/*** 交易对的信息*/private Map<String,CoinScale> symbols ; // CoinScale 精度@Datapublic static  class  CoinScale {/*** 交易币种的精度*/private int coinScale;/*** 基币的精度*/private int baseCoinScale;}
}
@Bean("eventHandlers") // 事件处理器 ->  加载交易对public EventHandler<OrderEvent>[] eventHandlers() {Map<String, MatchEngineProperties.CoinScale> symbols = Symbols();Set<Map.Entry<String, MatchEngineProperties.CoinScale>> entries = Set();EventHandler<OrderEvent>[] eventHandlers = new EventHandler[symbols.size()];int i = 0;for (Map.Entry<String, MatchEngineProperties.CoinScale> entry : entries) {String symbol = Key();MatchEngineProperties.CoinScale value = Value();OrderBooks orderBooks = null;if (value != null) {orderBooks = new OrderBooks(symbol, CoinScale(), BaseCoinScale());} else {orderBooks = new OrderBooks(symbol);}eventHandlers[i++] = new OrderEventHandler(orderBooks);}return eventHandlers;}


本文发布于:2024-01-28 02:59:00,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063819444287.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23