Administrator
1 days ago 900c9b20cca19df60d14b9ea61d336ba640250f0
fix(gateApi): 修复网格交易中仓位大小更新逻辑

- 在多头仓位中正确定位longPositionSize赋值以避免重复设置
- 为多头仓位添加条件判断仅当新尺寸大于当前仓位大小时才更新
- 在空头仓位中正确定位shortPositionSize赋值以避免重复设置
- 为空头仓位添加条件判断仅当新尺寸绝对值大于当前仓位大小时才更新
- 保持在所有条件下都正确更新仓位大小确保数据一致性
1 files modified
14 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 14 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -305,17 +305,20 @@
            if (hasPosition) {
                longActive = true;
                longEntryPrice = entryPrice;
                longPositionSize = size;
                if (!baseLongOpened) {
                    longPositionSize = size;
                    longBaseEntryPrice = entryPrice;
                    baseLongOpened = true;
                    log.info("[Gate] 基底多成交价: {}", longBaseEntryPrice);
                    tryGenerateQueues();
                } else {
                } else if (size.compareTo(longPositionSize) > 0) {
                    longPositionSize = size;
                    BigDecimal tpPrice = entryPrice.multiply(BigDecimal.ONE.add(config.getGridRate())).setScale(1, RoundingMode.HALF_UP);
                    executor.placeTakeProfit(tpPrice,
                            FuturesPriceTrigger.RuleEnum.NUMBER_1, ORDER_TYPE_CLOSE_LONG, negate(config.getQuantity()));
                    log.info("[Gate] 多单止盈已设, entry:{}, tp:{}, size:{}", entryPrice, tpPrice, negate(config.getQuantity()));
                } else {
                    longPositionSize = size;
                }
            } else {
                longActive = false;
@@ -325,17 +328,20 @@
            if (hasPosition) {
                shortActive = true;
                shortEntryPrice = entryPrice;
                shortPositionSize = size.abs();
                if (!baseShortOpened) {
                    shortPositionSize = size.abs();
                    shortBaseEntryPrice = entryPrice;
                    baseShortOpened = true;
                    log.info("[Gate] 基底空成交价: {}", shortBaseEntryPrice);
                    tryGenerateQueues();
                } else {
                } else if (size.abs().compareTo(shortPositionSize) > 0) {
                    shortPositionSize = size.abs();
                    BigDecimal tpPrice = entryPrice.multiply(BigDecimal.ONE.subtract(config.getGridRate())).setScale(1, RoundingMode.HALF_UP);
                    executor.placeTakeProfit(tpPrice,
                            FuturesPriceTrigger.RuleEnum.NUMBER_2, ORDER_TYPE_CLOSE_SHORT, config.getQuantity());
                    log.info("[Gate] 空单止盈已设, entry:{}, tp:{}, size:{}", entryPrice, tpPrice, config.getQuantity());
                } else {
                    shortPositionSize = size.abs();
                }
            } else {
                shortActive = false;