| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.xcong.excoin.common.contants.AppContants; |
| | | import com.xcong.excoin.common.enumerates.CoinTypeEnum; |
| | | import com.xcong.excoin.common.enumerates.OrderClosingTypeEnum; |
| | |
| | | // 保证金 |
| | | BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, closeCnt, holdOrderEntity.getLeverRatio()); |
| | | |
| | | BigDecimal rewardRatio = profitOrLoss.divide(bondAmount, 8, BigDecimal.ROUND_DOWN); |
| | | |
| | | log.info("bondAmount:{}", bondAmount); |
| | | // 平仓手续费 TODO 可能需要修复手续费 |
| | | BigDecimal fee = BigDecimal.ZERO; |
| | |
| | | contractOrderEntity.setRewardAmount(profitOrLoss); |
| | | contractOrderEntity.setBondAmount(bondAmount); |
| | | contractOrderEntity.setClosingFeeAmount(fee); |
| | | contractOrderEntity.setRewardRatio(rewardRatio); |
| | | contractOrderDao.insert(contractOrderEntity); |
| | | |
| | | if (holdOrderEntity.getSymbolCntSale() != 0) { |
| | | holdOrderEntity.setOpeningFeeAmount(holdOrderEntity.getOpeningFeeAmount().subtract(fee)); |
| | | holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().subtract(bondAmount)); |
| | | BigDecimal rewardAmount = holdOrderEntity.getRewardAmount() == null ? BigDecimal.ZERO : holdOrderEntity.getRewardAmount(); |
| | | holdOrderEntity.setRewardAmount(rewardAmount.add(profitOrLoss)); |
| | | contractHoldOrderDao.updateById(holdOrderEntity); |
| | | } else { |
| | | contractHoldOrderDao.deleteById(holdOrderEntity.getId()); |
| | | |
| | | // 若平掉所有张数,若存在委托平仓,则删除委托平仓记录 |
| | | List<ContractEntrustOrderEntity> entrustOrders = contractEntrustOrderDao.selectEntrustOrderByOrderNo(holdOrderEntity.getOrderNo()); |
| | | if (CollUtil.isNotEmpty(entrustOrders)) { |
| | | for (ContractEntrustOrderEntity entrustOrder : entrustOrders) { |
| | | contractEntrustOrderDao.deleteById(entrustOrder.getId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | BigDecimal changeAmount = profitOrLoss.add(bondAmount); |
| | |
| | | log.info("执行平仓委托"); |
| | | |
| | | Long memberId = entrustOrder.getMemberId(); |
| | | int orderType = entrustOrder.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE ? ContractHoldOrderEntity.OPENING_TYPE_MORE : ContractHoldOrderEntity.OPENING_TYPE_LESS; |
| | | int orderType = entrustOrder.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE ? ContractOrderEntity.ORDER_TYPE_CLOSE_MORE : ContractOrderEntity.ORDER_TYPE_CLOSE_LESS; |
| | | String symbol = entrustOrder.getSymbol(); |
| | | |
| | | MemberEntity memberEntity = memberDao.selectById(memberId); |
| | |
| | | int closeCnt = entrustOrder.getSymbolCnt(); |
| | | |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectWholeHoldOrderByOrderType(memberId, orderType, symbol); |
| | | |
| | | List<Object> types = redisUtils.lGet(AppContants.RABBIT_TYPE + holdOrderEntity.getId(), 0, -1); |
| | | if(types.contains(9) || types.contains(10) || types.contains(11) || types.contains(12)) { |
| | | log.info("存在止盈/止损 orderId : {}, types : {}", holdOrderEntity.getId(), JSONObject.toJSONString(types)); |
| | | return; |
| | | } |
| | | |
| | | BigDecimal profitOrLoss; |
| | | int closingType; |
| | | // 平多 |