| | |
| | | realKuiSunAmount = realKuiSunAmount.multiply(new BigDecimal("-1")); |
| | | // 账户预期亏损金额比这个还小时,立即止损 |
| | | if (realKuiSunAmount.compareTo(zhiSunAmount) > 0){ |
| | | log.warn("账户冷静止损......"); |
| | | log.error("账户冷静止损......"); |
| | | //目前止损掉损失较大的一个方向 |
| | | String positionAccountName = PositionsWs.initAccountName(accountName, posSide); |
| | | BigDecimal upl = PositionsWs.getAccountMap(positionAccountName).get("upl"); |
| | | String posSideOther = CoinEnums.POSSIDE_LONG.getCode().equals(posSide) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode(); |
| | | String positionAccountOther = PositionsWs.initAccountName(accountName, posSideOther); |
| | | BigDecimal uplOther = PositionsWs.getAccountMap(positionAccountOther).get("upl"); |
| | | if (upl.compareTo(uplOther) > 0){ |
| | | log.error("{}的亏损{},{}的亏损{},止损{}......",posSide,upl,posSideOther,uplOther,uplOther); |
| | | posSide = posSideOther; |
| | | } |
| | | |
| | | WsMapBuild.saveStringToMap(InstrumentsWs.getAccountMap(accountName), CoinEnums.OUT.name(), OrderParamEnums.OUT_YES.getValue()); |
| | | tradeRequestParam.setTradeType(OrderParamEnums.TRADE_YES.getValue()); |
| | | return caoZuoZhiSunEvent(accountName, markPx, posSide); |
| | |
| | | tradeRequestParam.setTradeType(OrderParamEnums.TRADE_NO.getValue()); |
| | | } |
| | | tradeRequestParam.setSz(String.valueOf( pos)); |
| | | log.info("止损订单:{},方向:{}-{},数量:{}",clOrdId,posSide, side, pos); |
| | | log.error("止损订单:{},方向:{}-{},数量:{}",clOrdId,posSide, side, pos); |
| | | return tradeRequestParam; |
| | | |
| | | } |
| | |
| | | BigDecimal divide = subtract.divide(new BigDecimal(buyCntTime), 0, RoundingMode.DOWN).add(BigDecimal.ONE); |
| | | log.info("倍数次数{}", divide); |
| | | String buyCntInit = InstrumentsWs.getAccountMap(accountName).get(CoinEnums.BUY_CNT_INIT.name()); |
| | | return String.valueOf(divide.multiply(new BigDecimal(buyCntInit))); |
| | | // return String.valueOf(divide.multiply(new BigDecimal(buyCntInit))); |
| | | return buyCntInit; |
| | | } |
| | | |
| | | private String buyCntTimeShortEvent(String accountName, BigDecimal avgPx, BigDecimal markPx){ |
| | |
| | | BigDecimal divide = subtract.divide(new BigDecimal(buyCntTime), 0, RoundingMode.DOWN).add(BigDecimal.ONE); |
| | | log.info("倍数次数{}", divide); |
| | | String buyCntInit = InstrumentsWs.getAccountMap(accountName).get(CoinEnums.BUY_CNT_INIT.name()); |
| | | return String.valueOf(divide.multiply(new BigDecimal(buyCntInit))); |
| | | // return String.valueOf(divide.multiply(new BigDecimal(buyCntInit))); |
| | | return buyCntInit; |
| | | } |
| | | |
| | | /** |