package com.nq.utils; import java.math.BigDecimal; import java.math.RoundingMode; public class TradeFeeUtil { /** 默认买入手续费率 0.0035 = 0.35% */ public static final BigDecimal BUY_FEE_RATE = new BigDecimal("0.0035"); private TradeFeeUtil() { } public static BigDecimal resolveBuyFeeRate(BigDecimal configured) { if (configured == null || configured.compareTo(BigDecimal.ZERO) <= 0) { return BUY_FEE_RATE; } return configured; } public static BigDecimal calcBuyFee(BigDecimal buyAmt) { return calcBuyFee(buyAmt, BUY_FEE_RATE); } public static BigDecimal calcBuyFee(BigDecimal buyAmt, BigDecimal feeRate) { if (buyAmt == null) { return BigDecimal.ZERO; } return buyAmt.multiply(resolveBuyFeeRate(feeRate)).setScale(2, RoundingMode.HALF_UP); } public static BigDecimal calcBuyFeeByNotional(BigDecimal notional, Integer lever, BigDecimal feeRate) { return calcBuyFee(notional, feeRate); } public static BigDecimal calcBuyFeeByNotional(BigDecimal notional, Integer lever) { return calcBuyFee(notional); } public static BigDecimal calcBuyDebit(BigDecimal margin, BigDecimal fee) { BigDecimal marginAmt = margin == null ? BigDecimal.ZERO : margin; BigDecimal feeAmt = fee == null ? BigDecimal.ZERO : fee; return marginAmt.add(feeAmt).setScale(2, RoundingMode.HALF_UP); } }