| | |
| | | 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(); |
| | |
| | | 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); |
| | | } |
| | | } |