Helius
2020-08-11 458ff544df46a0b03e891454698a256b35610f98
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -16,7 +16,7 @@
    /**
     * 计算预估强平价
     *
     * @param bondAmount        保证金
     * @param bondAmount      保证金
     * @param openPrice       开仓价
     * @param symbolSkuNumber 张数
     * @param lotNumber       规格
@@ -26,26 +26,20 @@
    public static BigDecimal getForceSetPrice(BigDecimal bondAmount, BigDecimal openPrice, int symbolSkuNumber, BigDecimal lotNumber,
                                              int type, MemberEntity member) {
        CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class);
        PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
        BigDecimal forcePrice = BigDecimal.ZERO;
        BigDecimal money = bondAmount.divide(new BigDecimal(symbolSkuNumber).multiply(lotNumber), 8, BigDecimal.ROUND_DOWN);
        log.info("--->{}", member.getIsForce());
        //卖空
        if (type == 2) {
            forcePrice = money.add(openPrice);
            if (member.getIsForce() == 1) {
                log.info("预估强评价:{},{},{}", forcePrice, tradeSetting.getForceParam(), "空");
                //预估强平价 = 预估强平价-预估强平价*系数
                forcePrice = forcePrice.subtract(forcePrice.multiply(tradeSetting.getForceParam()));
                log.info("预估强评价:{}", forcePrice);
                forcePrice = forcePrice.subtract(forcePrice.multiply(member.getForceParam() == null ? BigDecimal.ZERO : member.getForceParam()));
            }
        } else {//开多
            forcePrice = openPrice.subtract(money);
            if (member.getIsForce() == 1) {
                log.info("预估强评价:{},{},{}", forcePrice, tradeSetting.getForceParam(), "多");
                //预估强平价 = 预估强平价-预估强平价*系数
                forcePrice = forcePrice.add(forcePrice.multiply(tradeSetting.getForceParam()));
                log.info("预估强评价:{}", forcePrice);
                forcePrice = forcePrice.add(forcePrice.multiply(member.getForceParam() == null ? BigDecimal.ZERO : member.getForceParam()));
            }
        }
        if (forcePrice.compareTo(BigDecimal.ZERO) < 0) {
@@ -53,4 +47,19 @@
        }
        return forcePrice;
    }
    /**
     * 计算保证金 -- 建仓价*规格*手数*(1/杠杆倍率)
     *
     * @param openingPrice 开仓价
     * @param lotNumber    规格
     * @param symbolCnt    张数
     * @param leverRatio   杠杆倍率
     * @return
     */
    public static BigDecimal getBondAmount(BigDecimal openingPrice, BigDecimal lotNumber, Integer symbolCnt, Integer leverRatio) {
        return openingPrice.multiply(lotNumber).multiply(new BigDecimal(symbolCnt))
                .multiply(BigDecimal.ONE.divide(new BigDecimal(leverRatio)))
                .setScale(8, BigDecimal.ROUND_DOWN);
    }
}