Administrator
2025-12-14 a2532aafed1eaeee130f01f3fde90276a8ea040b
feat(okxNewPrice): 调整平仓收益比例并增加手续费和资金费用计算

- 将平仓收益比例从0.05调整为0.1
- 在 PositionsWs 中增加 fee 和 fundingFee 字段的解析与存储
- 在减仓逻辑中引入手续费和资金费用的计算
- 更新 realizedPnl 的计算方式,加入手续费和资金费用
- 优化平仓条件判断中的日志输出内容
3 files modified
16 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java 12 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/enums/CoinEnums.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -162,10 +162,18 @@
                AscBigDecimal pingCang = queuePingCang.peek();
                if (pingCang != null && markPx.compareTo(pingCang.getValue()) >= 0 && avgPx.compareTo(pingCang.getValue()) < 0) {
                    log.info("开始减仓...平仓队列价格小于当前价格{}<={}", pingCang.getValue(), markPx);
                    // 判断当前是否盈利
                    // 手续费
                    BigDecimal feeValue = PositionsWs.POSITIONSWSMAP.get("fee").multiply(new BigDecimal("2"));
                    // 资金费用
                    BigDecimal fundingFeeValue = PositionsWs.POSITIONSWSMAP.get("fundingFee");
                    //未实现收益
                    BigDecimal uplValue = PositionsWs.POSITIONSWSMAP.get("upl");
                    BigDecimal imr = PositionsWs.POSITIONSWSMAP.get("imr");
                    //已实现收益
                    BigDecimal realizedPnlValue = PositionsWs.POSITIONSWSMAP.get("realizedPnl");
                    realizedPnlValue = realizedPnlValue.add(feeValue).add(fundingFeeValue);
                    //持仓保证金
                    BigDecimal imr = PositionsWs.POSITIONSWSMAP.get("imr");
                    String pingCangImr = InstrumentsWs.INSTRUMENTSWSMAP.get(CoinEnums.PING_CANG_SHOUYI.name());
                    BigDecimal imrValue = imr.multiply(new BigDecimal(pingCangImr));
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java
@@ -114,6 +114,8 @@
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, "markPx", WsMapBuild.parseBigDecimalSafe(posData.getString("markPx")));
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, "bePx", WsMapBuild.parseBigDecimalSafe(posData.getString("bePx")));
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, "realizedPnl", WsMapBuild.parseBigDecimalSafe(posData.getString("realizedPnl")));
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, "fee", WsMapBuild.parseBigDecimalSafe(posData.getString("fee")));
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, "fundingFee", WsMapBuild.parseBigDecimalSafe(posData.getString("fundingFee")));
        WsMapBuild.saveBigDecimalToMap(POSITIONSWSMAP, CoinEnums.READY_STATE.name(), WsMapBuild.parseBigDecimalSafe(CoinEnums.READY_STATE_YES.getCode()));
    }
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/enums/CoinEnums.java
@@ -40,7 +40,7 @@
    READY_STATE_YES("准备就绪ready_state", "1"),
    READY_STATE_NO("未准备就绪ready_state", "0"),
    PING_CANG_SHOUYI("平仓收益比例", "0.05"),
    PING_CANG_SHOUYI("平仓收益比例", "0.1"),
    //下单的总保障金为账户总金额cashBal * TOTAL_ORDER_USDT用来做保证金
    TOTAL_ORDER_USDTPECENT("总保证金比例total_order_usdtpecent","0.2"),
    TOTAL_ORDER_USDT("总保证金totalOrderUsdt","0"),