| | |
| | | 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; |
| | |
| | | longPositionSize = size; |
| | | longEntryPrice = entryPrice; |
| | | } else { |
| | | |
| | | log.info("[Gate-0]多仓: {}", shortBaseEntryPrice); |
| | | longActive = false; |
| | | longPositionSize = BigDecimal.ZERO; |
| | | longEntryPrice = BigDecimal.ZERO; |
| | |
| | | shortPositionSize = size.abs(); |
| | | shortEntryPrice = entryPrice; |
| | | } else { |
| | | |
| | | log.info("[Gate-0]空仓: {}", shortBaseEntryPrice); |
| | | shortActive = false; |
| | | shortPositionSize = BigDecimal.ZERO; |
| | | shortEntryPrice = BigDecimal.ZERO; |
| | |
| | | longPriceQueue.sort(BigDecimal::compareTo); |
| | | log.info("[Gate] 多队列:{}", longPriceQueue); |
| | | totalShortPriceQueue.sort((a, b) -> b.compareTo(a)); |
| | | log.info("[Gate] 队列从大到小:{}", totalShortPriceQueue); |
| | | totalLongPriceQueue.sort(BigDecimal::compareTo); |
| | | log.info("[Gate] 队列从小到大:{}", totalLongPriceQueue); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | | if (BigDecimal.ZERO.compareTo( matched) == 0) { |
| | | return; |
| | | } |
| | |
| | | GridElement newEntryGrid = GridElement.findById(upId); |
| | | |
| | | if (newEntryGrid != null) { |
| | | log.info("[Gate] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | log.info("[Gate-2] 多仓仓位归零 空仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (!newEntryGrid.isHasLongOrder()) { |
| | | BigDecimal triggerPrice = newEntryGrid.getGridPrice(); |
| | | String size = config.getBaseQuantity(); |
| | |
| | | for (BigDecimal p : totalShortPriceQueue) { |
| | | if (p.compareTo(currentPrice) <= 0) { |
| | | matched = p; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | log.info("[Gate-3] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (BigDecimal.ZERO.compareTo( matched) == 0) { |
| | | return; |
| | | } |
| | |
| | | GridElement newEntryGrid = GridElement.findById(downId); |
| | | |
| | | if (newEntryGrid != null) { |
| | | log.info("[Gate] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | log.info("[Gate-4] 空仓仓位归零 多仓队列触发, 匹配:{},当前价:{}", matched, currentPrice); |
| | | if (!newEntryGrid.isHasShortOrder()){ |
| | | BigDecimal triggerPrice = newEntryGrid.getGridPrice(); |
| | | String size = config.getBaseQuantity(); |