|
@@ -479,53 +479,7 @@ public class CoinServiceImpl implements CoinService {
|
|
|
public String monitorJob() {
|
|
public String monitorJob() {
|
|
|
// BITGET开仓平仓监控报警
|
|
// BITGET开仓平仓监控报警
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
|
- if (!"1".equals(getMonitorJobStatus("bitget-mix-order"))) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- LocalDateTime endTime = LocalDateTime.now();
|
|
|
|
|
- // 全部历史委托列表
|
|
|
|
|
- Map<String, String> paramMap = new LinkedHashMap<>();
|
|
|
|
|
- paramMap.put("productType", "umcbl");
|
|
|
|
|
- paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusMinutes(1))));
|
|
|
|
|
- paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
|
|
|
|
|
- paramMap.put("pageSize", "100");
|
|
|
|
|
-
|
|
|
|
|
- String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
|
|
- try {
|
|
|
|
|
- JSONObject response = requestApi4Common("/api/mix/v1/order/historyProductType", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
|
|
|
|
|
- JSONArray orderList = response.getJSONObject("data").getJSONArray("orderList");
|
|
|
|
|
- if (null == orderList) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- for (int i = 0; i < orderList.size(); i++) {
|
|
|
|
|
- JSONObject order = orderList.getJSONObject(i);
|
|
|
|
|
- LocalDateTime cTime = DateUtils.longToLocalDateTime(order.getLong("cTime"));
|
|
|
|
|
- String orderId = order.getString("orderId");
|
|
|
|
|
- String symbol = order.getString("symbol");
|
|
|
|
|
- if (Duration.between(cTime, endTime).getSeconds() < 50 && !orderMap.containsKey(orderId)) {
|
|
|
|
|
- orderMap.put(orderId, "1");
|
|
|
|
|
- log.warn("bitget-mix-order exec,orderId={}", orderId);
|
|
|
|
|
-
|
|
|
|
|
- String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
|
|
|
|
|
- "<div>交易方向:" + InitRunner.publicParamsMap.get("tradeSide").getString(order.getString("tradeSide")) + "</div>" +
|
|
|
|
|
- "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +
|
|
|
|
|
- "<div>成交均价:" + order.getString("priceAvg") + "</div>" +
|
|
|
|
|
- "<div>委托价格:" + order.getString("price") + "</div>" +
|
|
|
|
|
- "<div>订单状态:" + InitRunner.publicParamsMap.get("state").getString(order.getString("state")) + "</div>" +
|
|
|
|
|
- "<div>订单类型:" + InitRunner.publicParamsMap.get("orderType").getString(order.getString("orderType")) + "</div>" +
|
|
|
|
|
- "<div class=\"gray\">订单时间:" + DateUtils.longToString(order.getLong("cTime")) + "</div>";
|
|
|
|
|
- JSONObject params = new JSONObject();
|
|
|
|
|
- params.put("title", (order.getString("side").contains("open") ? "BITGET合约开单" : "BITGET合约平单") + "报警");
|
|
|
|
|
- params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail2/" + orderId + "/" + symbol);
|
|
|
|
|
- params.put("btnTxt", "订单详情");
|
|
|
|
|
- SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params, null);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("bitget-mix-order error", e);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ monitorBitgetMixOrder();
|
|
|
}, 0, 10, TimeUnit.SECONDS);
|
|
}, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
// OKX开仓平仓监控报警
|
|
// OKX开仓平仓监控报警
|
|
@@ -567,98 +521,8 @@ public class CoinServiceImpl implements CoinService {
|
|
|
}, 0, 10, TimeUnit.SECONDS);
|
|
}, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
|
- if (!"1".equals(getMonitorJobStatus("bitget-mix-returnrate"))) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // BITGET全部合约仓位信息V2
|
|
|
|
|
- Map<String, String> paramMap = new HashMap<>();
|
|
|
|
|
- paramMap.put("productType", "umcbl");
|
|
|
|
|
-
|
|
|
|
|
- String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
|
|
- try {
|
|
|
|
|
- JSONObject response = requestApi4Common("/api/mix/v1/position/allPosition-v2", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
|
|
|
|
|
- JSONArray mixList = response.getJSONArray("data");
|
|
|
|
|
- for (int i = 0; i < mixList.size(); i++) {
|
|
|
|
|
- JSONObject mixData = mixList.getJSONObject(i);
|
|
|
|
|
-
|
|
|
|
|
- String symbol = mixData.getString("symbol");
|
|
|
|
|
- String margin = mixData.getString("margin");
|
|
|
|
|
- String averageOpenPrice = mixData.getString("averageOpenPrice");
|
|
|
|
|
- String key = symbol + margin + averageOpenPrice;
|
|
|
|
|
-
|
|
|
|
|
- // 回报率=未实现盈亏/保证金
|
|
|
|
|
-
|
|
|
|
|
- // 持仓方向 long:多头 short:空头
|
|
|
|
|
- String holdSide = mixData.getString("holdSide");
|
|
|
|
|
- BigDecimal returnRate = new BigDecimal(mixData.getString("unrealizedPL")).divide(new BigDecimal(margin), 4, RoundingMode.HALF_UP);
|
|
|
|
|
- for (int j = 1; j <= 10; j++) {
|
|
|
|
|
- BigDecimal grid = BigDecimal.valueOf(0.5).multiply(BigDecimal.valueOf(j));
|
|
|
|
|
- BigDecimal minusGrid = BigDecimal.valueOf(-0.5).multiply(BigDecimal.valueOf(j));
|
|
|
|
|
- if (returnRate.compareTo(grid) < 0) {
|
|
|
|
|
- if (mixMap.containsKey(key)) {
|
|
|
|
|
- mixMap.get(key).put("returnRate", returnRate);
|
|
|
|
|
- } else {
|
|
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
|
- jsonObject.put("returnRate", returnRate);
|
|
|
|
|
- mixMap.put(key, jsonObject);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (returnRate.compareTo(grid) > 0) {
|
|
|
|
|
- if (mixMap.containsKey(key)) {
|
|
|
|
|
- mixMap.get(key).put("returnRate", returnRate);
|
|
|
|
|
- if (mixMap.get(key).containsKey(grid.toPlainString())) {
|
|
|
|
|
- continue;
|
|
|
|
|
- } else {
|
|
|
|
|
- mixMap.get(key).put(grid.toPlainString(), true);
|
|
|
|
|
-
|
|
|
|
|
- String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
|
|
|
|
|
- String last = "--";
|
|
|
|
|
- try {
|
|
|
|
|
- Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
|
|
|
|
|
- last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- }
|
|
|
|
|
- String content = "币对名称:" + symbol + "\n" +
|
|
|
|
|
- "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
|
|
|
|
|
- "杠杆倍数:" + mixData.getString("leverage") + "\n" +
|
|
|
|
|
- "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
|
|
|
|
|
- "当前价格:" + last + "\n" +
|
|
|
|
|
- "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
- SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
|
- jsonObject.put("returnRate", returnRate);
|
|
|
|
|
- jsonObject.put(grid.toPlainString(), true);
|
|
|
|
|
- mixMap.put(key, jsonObject);
|
|
|
|
|
-
|
|
|
|
|
- String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
|
|
|
|
|
- String last = "--";
|
|
|
|
|
- try {
|
|
|
|
|
- Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
|
|
|
|
|
- last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- }
|
|
|
|
|
- String content = "币对名称:" + symbol + "\n" +
|
|
|
|
|
- "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
|
|
|
|
|
- "杠杆倍数:" + mixData.getString("leverage") + "\n" +
|
|
|
|
|
- "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
|
|
|
|
|
- "当前价格:" + last + "\n" +
|
|
|
|
|
- "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
- SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
|
|
|
|
|
-
|
|
|
|
|
- //break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("bitget-mix-returnrate error", e);
|
|
|
|
|
- }
|
|
|
|
|
- }, 0, 5, TimeUnit.SECONDS);
|
|
|
|
|
|
|
+ monitorBitgetMixReturnrate();
|
|
|
|
|
+ }, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
// BITGET跟单员监控报警
|
|
// BITGET跟单员监控报警
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
@@ -714,7 +578,7 @@ public class CoinServiceImpl implements CoinService {
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("bitget-mix-trader top error", e);
|
|
log.error("bitget-mix-trader top error", e);
|
|
|
}
|
|
}
|
|
|
- }, 0, 3, TimeUnit.SECONDS);
|
|
|
|
|
|
|
+ }, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
// 星球日报新闻快讯监控报警
|
|
// 星球日报新闻快讯监控报警
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
@@ -770,7 +634,7 @@ public class CoinServiceImpl implements CoinService {
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("news-odaily top error", e);
|
|
log.error("news-odaily top error", e);
|
|
|
}
|
|
}
|
|
|
- }, 0, 5, TimeUnit.SECONDS);
|
|
|
|
|
|
|
+ }, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
// 律动日报新闻快讯监控报警
|
|
// 律动日报新闻快讯监控报警
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
@@ -850,7 +714,7 @@ public class CoinServiceImpl implements CoinService {
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("news-theblockbeats top error", e);
|
|
log.error("news-theblockbeats top error", e);
|
|
|
}
|
|
}
|
|
|
- }, 0, 5, TimeUnit.SECONDS);
|
|
|
|
|
|
|
+ }, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
// coingecko
|
|
// coingecko
|
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
scheduler.scheduleWithFixedDelay(() -> {
|
|
@@ -948,7 +812,7 @@ public class CoinServiceImpl implements CoinService {
|
|
|
} catch (InterruptedException ex) {
|
|
} catch (InterruptedException ex) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }, 0, 5, TimeUnit.SECONDS);
|
|
|
|
|
|
|
+ }, 0, 10, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
@@ -1182,6 +1046,154 @@ public class CoinServiceImpl implements CoinService {
|
|
|
return R.ok().data("success");
|
|
return R.ok().data("success");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void monitorBitgetMixOrder() {
|
|
|
|
|
+ if (!"1".equals(getMonitorJobStatus("bitget-mix-order"))) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ LocalDateTime endTime = LocalDateTime.now();
|
|
|
|
|
+ // 全部历史委托列表
|
|
|
|
|
+ Map<String, String> paramMap = new LinkedHashMap<>();
|
|
|
|
|
+ paramMap.put("productType", "umcbl");
|
|
|
|
|
+ paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusMinutes(1))));
|
|
|
|
|
+ //paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusDays(3))));
|
|
|
|
|
+ paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
|
|
|
|
|
+ paramMap.put("pageSize", "100");
|
|
|
|
|
+
|
|
|
|
|
+ String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
|
|
+ try {
|
|
|
|
|
+ JSONObject response = requestApi4Common("/api/mix/v1/order/historyProductType", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
|
|
|
|
|
+ JSONArray orderList = response.getJSONObject("data").getJSONArray("orderList");
|
|
|
|
|
+ if (null == orderList) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.warn("bitget-mix-order exec,orderList={}", orderList.size());
|
|
|
|
|
+ for (int i = 0; i < orderList.size(); i++) {
|
|
|
|
|
+ JSONObject order = orderList.getJSONObject(i);
|
|
|
|
|
+ LocalDateTime cTime = DateUtils.longToLocalDateTime(order.getLong("cTime"));
|
|
|
|
|
+ String orderId = order.getString("orderId");
|
|
|
|
|
+ String symbol = order.getString("symbol");
|
|
|
|
|
+ if (Duration.between(cTime, endTime).getSeconds() < 200 && !orderMap.containsKey(orderId)) {
|
|
|
|
|
+ orderMap.put(orderId, "1");
|
|
|
|
|
+ log.warn("bitget-mix-order exec,orderId={}", orderId);
|
|
|
|
|
+
|
|
|
|
|
+ String content = "<div class=\"highlight\">交易对:" + order.getString("symbol") + "</div>" +
|
|
|
|
|
+ "<div>交易方向:" + InitRunner.publicParamsMap.get("tradeSide").getString(order.getString("tradeSide")) + "</div>" +
|
|
|
|
|
+ "<div>杠杆倍数:" + order.getString("leverage") + "</div>" +
|
|
|
|
|
+ "<div>成交均价:" + order.getString("priceAvg") + "</div>" +
|
|
|
|
|
+ "<div>委托价格:" + order.getString("price") + "</div>" +
|
|
|
|
|
+ "<div>订单状态:" + InitRunner.publicParamsMap.get("state").getString(order.getString("state")) + "</div>" +
|
|
|
|
|
+ "<div>订单类型:" + InitRunner.publicParamsMap.get("orderType").getString(order.getString("orderType")) + "</div>" +
|
|
|
|
|
+ "<div class=\"gray\">订单时间:" + DateUtils.longToString(order.getLong("cTime")) + "</div>";
|
|
|
|
|
+ JSONObject params = new JSONObject();
|
|
|
|
|
+ params.put("title", (order.getString("side").contains("open") ? "BITGET合约开单" : "BITGET合约平单") + "报警");
|
|
|
|
|
+ params.put("logUrl", "https://jav.lvzhiqiang.top/coin/orderDetail2/" + orderId + "/" + symbol);
|
|
|
|
|
+ params.put("btnTxt", "订单详情");
|
|
|
|
|
+ SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4APP_TEXT_CARD(content, params, null);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("bitget-mix-order error", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void monitorBitgetMixReturnrate() {
|
|
|
|
|
+ if (!"1".equals(getMonitorJobStatus("bitget-mix-returnrate"))) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // BITGET全部合约仓位信息V2
|
|
|
|
|
+ Map<String, String> paramMap = new HashMap<>();
|
|
|
|
|
+ paramMap.put("productType", "umcbl");
|
|
|
|
|
+
|
|
|
|
|
+ String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
|
|
|
|
|
+ try {
|
|
|
|
|
+ JSONObject response = requestApi4Common("/api/mix/v1/position/allPosition-v2", signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
|
|
|
|
|
+ JSONArray mixList = response.getJSONArray("data");
|
|
|
|
|
+ for (int i = 0; i < mixList.size(); i++) {
|
|
|
|
|
+ JSONObject mixData = mixList.getJSONObject(i);
|
|
|
|
|
+
|
|
|
|
|
+ String symbol = mixData.getString("symbol");
|
|
|
|
|
+ String margin = mixData.getString("margin");
|
|
|
|
|
+ String averageOpenPrice = mixData.getString("averageOpenPrice");
|
|
|
|
|
+ String key = symbol + margin + averageOpenPrice;
|
|
|
|
|
+
|
|
|
|
|
+ // 回报率=未实现盈亏/保证金
|
|
|
|
|
+
|
|
|
|
|
+ // 持仓方向 long:多头 short:空头
|
|
|
|
|
+ String holdSide = mixData.getString("holdSide");
|
|
|
|
|
+ BigDecimal returnRate = new BigDecimal(mixData.getString("unrealizedPL")).divide(new BigDecimal(margin), 4, RoundingMode.HALF_UP);
|
|
|
|
|
+ for (int j = 1; j <= 10; j++) {
|
|
|
|
|
+ BigDecimal grid = BigDecimal.valueOf(0.5).multiply(BigDecimal.valueOf(j));
|
|
|
|
|
+ BigDecimal minusGrid = BigDecimal.valueOf(-0.5).multiply(BigDecimal.valueOf(j));
|
|
|
|
|
+ if (returnRate.compareTo(grid) < 0) {
|
|
|
|
|
+ if (mixMap.containsKey(key)) {
|
|
|
|
|
+ mixMap.get(key).put("returnRate", returnRate);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
|
|
+ jsonObject.put("returnRate", returnRate);
|
|
|
|
|
+ mixMap.put(key, jsonObject);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (returnRate.compareTo(grid) > 0) {
|
|
|
|
|
+ if (mixMap.containsKey(key)) {
|
|
|
|
|
+ mixMap.get(key).put("returnRate", returnRate);
|
|
|
|
|
+ if (mixMap.get(key).containsKey(grid.toPlainString())) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mixMap.get(key).put(grid.toPlainString(), true);
|
|
|
|
|
+
|
|
|
|
|
+ String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
|
|
|
|
|
+ String last = "--";
|
|
|
|
|
+ try {
|
|
|
|
|
+ Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
|
|
|
|
|
+ last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ String content = "币对名称:" + symbol + "\n" +
|
|
|
|
|
+ "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
|
|
|
|
|
+ "杠杆倍数:" + mixData.getString("leverage") + "\n" +
|
|
|
|
|
+ "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
|
|
|
|
|
+ "当前价格:" + last + "\n" +
|
|
|
|
|
+ "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
+ SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
|
|
+ jsonObject.put("returnRate", returnRate);
|
|
|
|
|
+ jsonObject.put(grid.toPlainString(), true);
|
|
|
|
|
+ mixMap.put(key, jsonObject);
|
|
|
|
|
+
|
|
|
|
|
+ String requestUrl = mainUrl + "/api/mix/v1/market/ticker?symbol=" + symbol;
|
|
|
|
|
+ String last = "--";
|
|
|
|
|
+ try {
|
|
|
|
|
+ Connection.Response responseTicker = JsoupUtil.requestBody(requestUrl, JsoupUtil.HTTP_GET, InitRunner.proxy, null, null);
|
|
|
|
|
+ last = JSONObject.parseObject(responseTicker.body()).getJSONObject("data").getString("last");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ String content = "币对名称:" + symbol + "\n" +
|
|
|
|
|
+ "持仓方向:" + InitRunner.publicParamsMap.get("holdSide").getString(mixData.getString("holdSide")) + "\n" +
|
|
|
|
|
+ "杠杆倍数:" + mixData.getString("leverage") + "\n" +
|
|
|
|
|
+ "开仓均价:" + mixData.getString("averageOpenPrice") + "\n" +
|
|
|
|
|
+ "当前价格:" + last + "\n" +
|
|
|
|
|
+ "回报率:" + returnRate.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString() + ",超过" + grid.multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
+ SpringUtils.getBean(CoinServiceImpl.class).monitorAlarm4CHAT_BOT(content, null);
|
|
|
|
|
+
|
|
|
|
|
+ //break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("bitget-mix-returnrate error", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void initCexSpotFlag(Map<String, CoinWatchlistOther> coinWatchlistOtherMap4Symbol) {
|
|
private void initCexSpotFlag(Map<String, CoinWatchlistOther> coinWatchlistOtherMap4Symbol) {
|
|
|
// spot
|
|
// spot
|
|
|
String coingeckoExchangeTickersUrl = InitRunner.dicCodeMap.get("coingecko_exchange_tickers_url").getCodeValue();
|
|
String coingeckoExchangeTickersUrl = InitRunner.dicCodeMap.get("coingecko_exchange_tickers_url").getCodeValue();
|