package com.xcong.excoin.modules.okxNewPrice.utils; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; /** * @author Administrator */ public class WsParamBuild { public static String getOrderNum(String prefix) { SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String dd=df.format(new Date()); if (StrUtil.isNotBlank(prefix)) { return prefix+dd+getRandomNum(5); } return dd+getRandomNum(5); } public static String getRandomNum(int length) { String str = "0123456789"; Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; ++i) { int number = random.nextInt(str.length()); sb.append(str.charAt(number)); } return sb.toString(); } public static JSONObject buildJsonObject(String connId, String option, JSONArray argsArray) { JSONObject jsonObject = new JSONObject(); if (StrUtil.isNotEmpty(connId)){ jsonObject.put("id", connId); } jsonObject.put("op", option); jsonObject.put("args", argsArray); return jsonObject; } /** * 计算购买合约的数量 * * USDT 币本位合约 * 公式:张数 = 保证金 / (面值 * 标记价格 / 杠杆倍数) * * @param margin 用户的保证金金额 * @param leverage 杠杆倍数 * @param faceValue 合约面值 * @param markPrice 标记价格 * @param minLotSz 最小下单精度 * @return 返回用户可以购买的合约数量 */ public static BigDecimal buyCnt(BigDecimal margin, BigDecimal leverage, BigDecimal faceValue, BigDecimal markPrice, int minLotSz) { if (margin.compareTo(BigDecimal.ZERO) <= 0 || leverage.compareTo(BigDecimal.ZERO) <= 0 || faceValue.compareTo(BigDecimal.ZERO) <= 0 || markPrice.compareTo(BigDecimal.ZERO) <= 0) { return BigDecimal.ZERO; } BigDecimal divisor = markPrice.divide(leverage, 10, BigDecimal.ROUND_DOWN); BigDecimal denominator = faceValue.multiply(divisor); return margin.divide(denominator, minLotSz, BigDecimal.ROUND_DOWN); } }