From 56e585eb01d4ee22e81de71a3541cb615d8557fc Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sat, 13 Dec 2025 16:32:22 +0800
Subject: [PATCH] feat(okxNewPrice): 增加持仓初始化订单的异常处理
---
src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
index ed386d0..082e530 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/utils/WsParamBuild.java
@@ -4,10 +4,36 @@
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();
@@ -18,4 +44,31 @@
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);
+ }
}
--
Gitblit v1.9.1