| | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | import com.xcong.excoin.modules.gateApi.wsHandler.handler.CandlestickChannelHandler; |
| | | import com.xcong.excoin.modules.gateApi.wsHandler.handler.PositionClosesChannelHandler; |
| | |
| | | log.info("[Gate] 网格元素列表已构建, 共{}个元素 (空仓:{} 位置:0 多仓:{})", elements.size(), shortSize, longSize); |
| | | } |
| | | |
| | | |
| | | private void processShortGrid(BigDecimal currentPrice) { |
| | | BigDecimal matched = BigDecimal.ZERO; |
| | | synchronized (totalLongPriceQueue) { |
| | | for (BigDecimal p : totalLongPriceQueue) { |
| | | if (p.compareTo(currentPrice) >= 0) { |
| | | matched = p; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | log.info("[Gate-1] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | // log.info("[Gate-1] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (BigDecimal.ZERO.compareTo( matched) == 0) { |
| | | return; |
| | | } |
| | |
| | | GridElement newEntryGrid = GridElement.findById(upId); |
| | | |
| | | if (newEntryGrid != null) { |
| | | log.info("[Gate-2] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | // log.info("[Gate-2] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (!newEntryGrid.isHasLongOrder()) { |
| | | BigDecimal triggerPrice = newEntryGrid.getGridPrice(); |
| | | String size = config.getBaseQuantity(); |
| | |
| | | GridElement cancelGridElement = GridElement.findById(newEntryGrid.getUpId()); |
| | | if (cancelGridElement != null && cancelGridElement.isHasLongOrder()) { |
| | | String longOrderId = cancelGridElement.getLongOrderId(); |
| | | longEntryTraderIdParam(cancelGridElement, null, false); |
| | | executor.cancelConditionalOrder(longOrderId, oid -> { |
| | | longEntryTraderIdParam(cancelGridElement, null, false); |
| | | log.info("[Gate] 多仓仓位归零, 取消gridId:{}的多单,{}", cancelGridElement.getId(),longOrderId); |
| | | }); |
| | | } |
| | |
| | | for (BigDecimal p : totalShortPriceQueue) { |
| | | if (p.compareTo(currentPrice) <= 0) { |
| | | matched = p; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | log.info("[Gate-3] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | // log.info("[Gate-3] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (BigDecimal.ZERO.compareTo( matched) == 0) { |
| | | return; |
| | | } |
| | |
| | | GridElement newEntryGrid = GridElement.findById(downId); |
| | | |
| | | if (newEntryGrid != null) { |
| | | log.info("[Gate-4] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | // log.info("[Gate-4] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (!newEntryGrid.isHasShortOrder()){ |
| | | BigDecimal triggerPrice = newEntryGrid.getGridPrice(); |
| | | String size = config.getBaseQuantity(); |
| | |
| | | */ |
| | | if (cancelGridElement != null && cancelGridElement.isHasShortOrder()) { |
| | | String shortOrderId = cancelGridElement.getShortOrderId(); |
| | | shortEntryTraderIdParam(cancelGridElement, null, false); |
| | | executor.cancelConditionalOrder(shortOrderId, oid -> { |
| | | shortEntryTraderIdParam(cancelGridElement, null, false); |
| | | log.info("[Gate] 空仓仓位归零, 取消gridId:{}的多单{}", cancelGridElement.getId(),shortOrderId); |
| | | }); |
| | | } |