| | |
| | | accFillSz, avgPx,state, fillFee,posSide |
| | | ); |
| | | |
| | | |
| | | Map<String, String> accountMap = getAccountMap(accountName); |
| | | String stateStr = TradeOrderWs.getAccountMap(accountName).get("state"); |
| | | boolean longSell = CoinEnums.POSSIDE_LONG.getCode().equals(posSide) && CoinEnums.SIDE_SELL.getCode().equals(side); |
| | | boolean shortBuy = CoinEnums.POSSIDE_SHORT.getCode().equals(posSide) && CoinEnums.SIDE_BUY.getCode().equals(side); |
| | | if ( |
| | | CoinEnums.ORDER_FILLED.getCode().equals(state) |
| | | && (longSell || shortBuy) |
| | | ){ |
| | | WsMapBuild.saveStringToMap(accountMap, "orderPrice",avgPx); |
| | | } |
| | | |
| | | String clOrdIdStr = TradeOrderWs.getAccountMap(accountName).get("clOrdId"); |
| | | if ( |
| | | StrUtil.isNotBlank(clOrdIdStr) |
| | | && clOrdId.equals(clOrdIdStr) |
| | | && StrUtil.isNotBlank(stateStr) |
| | | && state.equals(stateStr) |
| | | ){ |
| | | //记录成交均价 |
| | | if (accountMap.get("orderPrice") == null){ |
| | | log.info("成交均价: {}", avgPx); |
| | | WsMapBuild.saveStringToMap(accountMap, "orderPrice",avgPx); |
| | | } |
| | | WsMapBuild.saveStringToMap(TradeOrderWs.getAccountMap(accountName), "state", CoinEnums.ORDER_LIVE.getCode()); |
| | | |
| | | if (StrUtil.isNotBlank(stateStr) && state.equals(stateStr)){ |
| | | // 使用账号特定的Map |
| | | String positionAccountName = PositionsWs.initAccountName(accountName, side); |
| | | Map<String, BigDecimal> positionsMap = PositionsWs.getAccountMap(positionAccountName); |
| | |
| | | |
| | | TradeRequestParam tradeRequestParam = new TradeRequestParam(); |
| | | tradeRequestParam.setAccountName(accountName); |
| | | BigDecimal zhiYingPx = getZhiYingPx( |
| | | accountName, |
| | | posSide, |
| | | fillFee, |
| | | WsMapBuild.parseBigDecimalSafe(InstrumentsWs.getAccountMap(accountName).get(CoinEnums.CTVAL.name())), |
| | | WsMapBuild.parseBigDecimalSafe(accFillSz), |
| | | WsMapBuild.parseBigDecimalSafe(InstrumentsWs.getAccountMap(accountName).get(CoinEnums.CONTRACTMULTIPLIER.name())), |
| | | WsMapBuild.parseBigDecimalSafe(avgPx), |
| | | WsMapBuild.parseBigDecimalSafe(CoinEnums.LEVERAGE.getCode()) |
| | | ); |
| | | tradeRequestParam.setMarkPx(String.valueOf(zhiYingPx)); |
| | | tradeRequestParam.setInstId(CoinEnums.HE_YUE.getCode()); |
| | | tradeRequestParam.setTdMode(CoinEnums.CROSS.getCode()); |
| | | tradeRequestParam.setPosSide(posSide); |
| | | tradeRequestParam.setOrdType(CoinEnums.ORDTYPE_LIMIT.getCode()); |
| | | tradeRequestParam.setTradeType(OrderParamEnums.TRADE_YES.getValue()); |
| | | tradeRequestParam.setSide(CoinEnums.POSSIDE_LONG.getCode().equals(posSide) ? CoinEnums.SIDE_SELL.getCode() : CoinEnums.SIDE_BUY.getCode()); |
| | | tradeRequestParam.setClOrdId(WsParamBuild.getOrderNum(side)); |
| | | tradeRequestParam.setSz(accFillSz); |
| | | tradeRequestParam.setMarkPx(String.valueOf(avgPx)); |
| | | String fanfangxiangPosside = CoinEnums.POSSIDE_LONG.getCode().equals(posSide) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode(); |
| | | tradeRequestParam.setPosSide(fanfangxiangPosside); |
| | | return tradeRequestParam; |
| | | |
| | | } |