| | |
| | | shortPositionSize = BigDecimal.ZERO; |
| | | baseLongOpened = false; |
| | | baseShortOpened = false; |
| | | config.setBaseLongTraderParam(null); |
| | | config.setBaseShortTraderParam(null); |
| | | longActive = false; |
| | | shortActive = false; |
| | | accumulatedLongLossCount = 0; |
| | |
| | | .entryOrderId(orderId) |
| | | .build(); |
| | | config.setBaseLongTraderParam(baseLongTp); |
| | | tryGenerateQueues(); |
| | | }, null); |
| | | executor.openShort(negate(size), (orderId) -> { |
| | | TraderParam baseShortTp = TraderParam.builder() |
| | | .entryOrderId(orderId) |
| | | .build(); |
| | | config.setBaseShortTraderParam(baseShortTp); |
| | | tryGenerateQueues(); |
| | | }, null); |
| | | return; |
| | | } |
| | |
| | | * <li>状态切换为 ACTIVE</li> |
| | | * </ol> |
| | | */ |
| | | private void tryGenerateQueues() { |
| | | if (baseLongOpened && baseShortOpened) { |
| | | private synchronized void tryGenerateQueues() { |
| | | // 幂等保护:生成队列后 state 切换为 ACTIVE,避免多线程重复执行 |
| | | if (state != StrategyState.OPENING) { |
| | | return; |
| | | } |
| | | TraderParam baseLongTraderParam = config.getBaseLongTraderParam(); |
| | | TraderParam baseShortTraderParam = config.getBaseShortTraderParam(); |
| | | // 需同时满足:多空基底均已成交,且两个下单参数(orderId)均已通过下单成功回调拿到。 |
| | | // IOC 市价单成交后 WS 持仓推送可能先于 REST 下单响应返回,必须等参数就绪再生成队列。 |
| | | if (!(baseLongOpened && baseShortOpened) |
| | | || baseLongTraderParam == null || baseShortTraderParam == null) { |
| | | return; |
| | | } |
| | | { |
| | | generateShortQueue(); |
| | | generateLongQueue(); |
| | | updateGridElements(); |
| | | |
| | | GridElement baseGridElement = GridElement.findById(0); |
| | | TraderParam baseLongTraderParam = config.getBaseLongTraderParam(); |
| | | baseGridElement.setLongOrderId(baseLongTraderParam.getEntryOrderId()); |
| | | baseGridElement.setHasLongOrder(true); |
| | | TraderParam baseShortTraderParam = config.getBaseShortTraderParam(); |
| | | baseGridElement.setShortOrderId(baseShortTraderParam.getEntryOrderId()); |
| | | baseGridElement.setHasShortOrder(true); |
| | | |