| | |
| | | if (state != StrategyState.ACTIVE) { |
| | | return; |
| | | } |
| | | // processLongGrid(closePrice); |
| | | // processShortGrid(closePrice); |
| | | processLongGrid(closePrice); |
| | | processShortGrid(closePrice); |
| | | } |
| | | |
| | | // ---- 仓位推送回调 ---- |
| | |
| | | return; |
| | | } |
| | | cumulativePnl = cumulativePnl.add(pnl); |
| | | updateUnrealizedPnl(); |
| | | BigDecimal totalPnl = cumulativePnl.add(unrealizedPnl); |
| | | log.info("[Gate] 已实现:{}, 未实现:{}, 合计:{}", |
| | | cumulativePnl, unrealizedPnl, totalPnl); |
| | |
| | | null, |
| | | false |
| | | ); |
| | | TPonUserTradeShortEntry(byShortTakeProfitOrderId); |
| | | // TPonUserTradeShortEntry(byShortTakeProfitOrderId); |
| | | } |
| | | GridElement byLongTakeProfitOrderId = GridElement.findByLongTakeProfitOrderId(orderId); |
| | | if (byLongTakeProfitOrderId != null){ |
| | |
| | | null, |
| | | false |
| | | ); |
| | | TPonUserTradeLongEntry(byLongTakeProfitOrderId); |
| | | // TPonUserTradeLongEntry(byLongTakeProfitOrderId); |
| | | } |
| | | |
| | | /** |
| | |
| | | // 判断网格是否能开多空仓,如果不能则跳过 |
| | | if (gridElement != null) { |
| | | |
| | | TraderParam downLongTraderParam = gridElement.getLongTraderParam(); |
| | | if ( |
| | | !gridElement.isHasLongOrder() && |
| | | newLongFirst.compareTo(shortEntryPrice) >= 0 && |
| | | newLongFirst.compareTo(longEntryPrice) <= 0 |
| | | ){ |
| | | placeEntryOrderWithPreFlag(gridElement, true, |
| | | downLongTraderParam.getEntryPrice(), |
| | | FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | config.getQuantity()); |
| | | |
| | | } |
| | | // TraderParam downLongTraderParam = gridElement.getLongTraderParam(); |
| | | // if ( |
| | | // !gridElement.isHasLongOrder() && |
| | | // newLongFirst.compareTo(shortEntryPrice) >= 0 && |
| | | // newLongFirst.compareTo(longEntryPrice) <= 0 |
| | | // ){ |
| | | // placeEntryOrderWithPreFlag(gridElement, true, |
| | | // downLongTraderParam.getEntryPrice(), |
| | | // FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | // config.getQuantity()); |
| | | // |
| | | // } |
| | | |
| | | TraderParam shortTraderParam = gridElement.getShortTraderParam(); |
| | | if ( |
| | |
| | | int longSize = longPriceQueue.size(); |
| | | //根据精度转换成小数 |
| | | int prec = config.getPriceScale(); |
| | | BigDecimal minTick = BigDecimal.ONE.scaleByPowerOfTen(-prec); |
| | | BigDecimal step = config.getStep().subtract(minTick); |
| | | // BigDecimal minTick = BigDecimal.ONE.scaleByPowerOfTen(-prec); |
| | | // BigDecimal step = config.getStep().subtract(minTick); |
| | | BigDecimal step = config.getStep(); |
| | | String qty = config.getQuantity(); |
| | | |
| | | // 空仓队列:id 从 -1 自减, shortPriceQueue[i] → id=-(i+1) |
| | |
| | | // 判断网格是否能开空仓,如果不能则跳过 |
| | | if (UpGridElement != null) { |
| | | |
| | | if (!UpGridElement.isHasShortOrder() && shortEntryPrice.compareTo(newLongFirst) > 0) { |
| | | |
| | | TraderParam upShortTraderParam = UpGridElement.getShortTraderParam(); |
| | | placeEntryOrderWithPreFlag(UpGridElement, false, |
| | | upShortTraderParam.getEntryPrice(), |
| | | FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | negate(upShortTraderParam.getQuantity())); |
| | | } |
| | | // if (!UpGridElement.isHasShortOrder() && shortEntryPrice.compareTo(newLongFirst) > 0) { |
| | | // |
| | | // TraderParam upShortTraderParam = UpGridElement.getShortTraderParam(); |
| | | // placeEntryOrderWithPreFlag(UpGridElement, false, |
| | | // upShortTraderParam.getEntryPrice(), |
| | | // FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | // negate(upShortTraderParam.getQuantity())); |
| | | // } |
| | | int i = UpGridElement.getId() + 2; |
| | | GridElement downGridElement = GridElement.findById(i); |
| | | if (downGridElement != null){ |
| | | |
| | | BigDecimal downGridPrice = downGridElement.getGridPrice(); |
| | | |
| | | TraderParam downShortTraderParam = downGridElement.getShortTraderParam(); |
| | | if ( |
| | | !downGridElement.isHasShortOrder() && |
| | | downGridPrice.compareTo(longEntryPrice) <= 0 && |
| | | downGridPrice.compareTo(shortEntryPrice) >= 0 |
| | | ){ |
| | | placeEntryOrderWithPreFlag(downGridElement, false, |
| | | downShortTraderParam.getEntryPrice(), |
| | | FuturesPriceTrigger.RuleEnum.NUMBER_1, |
| | | negate(downShortTraderParam.getQuantity())); |
| | | |
| | | } |
| | | // TraderParam downShortTraderParam = downGridElement.getShortTraderParam(); |
| | | // if ( |
| | | // !downGridElement.isHasShortOrder() && |
| | | // downGridPrice.compareTo(longEntryPrice) <= 0 && |
| | | // downGridPrice.compareTo(shortEntryPrice) >= 0 |
| | | // ){ |
| | | // placeEntryOrderWithPreFlag(downGridElement, false, |
| | | // downShortTraderParam.getEntryPrice(), |
| | | // FuturesPriceTrigger.RuleEnum.NUMBER_1, |
| | | // negate(downShortTraderParam.getQuantity())); |
| | | // |
| | | // } |
| | | |
| | | TraderParam downLongTraderParam = downGridElement.getLongTraderParam(); |
| | | if ( |
| | |
| | | // 判断网格是否能开多仓,如果不能则跳过 |
| | | if (UpGridElement != null) { |
| | | |
| | | if (!UpGridElement.isHasLongOrder() && longEntryPrice.compareTo(newLongFirst) < 0) { |
| | | TraderParam upLongTraderParam = UpGridElement.getLongTraderParam(); |
| | | placeEntryOrderWithPreFlag(UpGridElement, true, |
| | | upLongTraderParam.getEntryPrice(), |
| | | FuturesPriceTrigger.RuleEnum.NUMBER_1, |
| | | config.getQuantity()); |
| | | } |
| | | // if (!UpGridElement.isHasLongOrder() && longEntryPrice.compareTo(newLongFirst) < 0) { |
| | | // TraderParam upLongTraderParam = UpGridElement.getLongTraderParam(); |
| | | // placeEntryOrderWithPreFlag(UpGridElement, true, |
| | | // upLongTraderParam.getEntryPrice(), |
| | | // FuturesPriceTrigger.RuleEnum.NUMBER_1, |
| | | // config.getQuantity()); |
| | | // } |
| | | |
| | | int i = UpGridElement.getId() - 2; |
| | | GridElement downGridElement = GridElement.findById(i); |
| | |
| | | |
| | | BigDecimal downGridPrice = downGridElement.getGridPrice(); |
| | | |
| | | TraderParam downLongTraderParam = downGridElement.getLongTraderParam(); |
| | | if ( |
| | | !downGridElement.isHasLongOrder() && |
| | | downGridPrice.compareTo(shortEntryPrice) >= 0 && |
| | | downGridPrice.compareTo(longEntryPrice) <= 0 |
| | | ){ |
| | | placeEntryOrderWithPreFlag(downGridElement, true, |
| | | downLongTraderParam.getEntryPrice(), |
| | | FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | config.getQuantity()); |
| | | |
| | | } |
| | | // TraderParam downLongTraderParam = downGridElement.getLongTraderParam(); |
| | | // if ( |
| | | // !downGridElement.isHasLongOrder() && |
| | | // downGridPrice.compareTo(shortEntryPrice) >= 0 && |
| | | // downGridPrice.compareTo(longEntryPrice) <= 0 |
| | | // ){ |
| | | // placeEntryOrderWithPreFlag(downGridElement, true, |
| | | // downLongTraderParam.getEntryPrice(), |
| | | // FuturesPriceTrigger.RuleEnum.NUMBER_2, |
| | | // config.getQuantity()); |
| | | // |
| | | // } |
| | | |
| | | TraderParam shortTraderParam = downGridElement.getShortTraderParam(); |
| | | if ( |