| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.json.JSONException; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | |
| | | */ |
| | | private void handleWebSocketMessage(String message) { |
| | | try { |
| | | if ("pong".equals(message)) { |
| | | log.debug("{}: 收到心跳响应"); |
| | | cancelPongTimeout(); |
| | | return; |
| | | } |
| | | JSONObject response = JSON.parseObject(message); |
| | | String event = response.getString("event"); |
| | | |
| | |
| | | // 创建策略实例 |
| | | MacdMaStrategy strategy = new MacdMaStrategy(); |
| | | |
| | | // 生成100个15分钟价格数据点 |
| | | // 生成200个1m价格数据点 |
| | | List<Kline> kline1MinuteData = getKlineDataByInstIdAndBar(instId, "1m"); |
| | | List<BigDecimal> historicalPrices1M = kline1MinuteData.stream() |
| | | .map(Kline::getC) |
| | | .collect(Collectors.toList()); |
| | | log.info("生成100个1分钟价格数据点成功!"); |
| | | |
| | | log.info("1m:{}", JSONUtil.parse( kline1MinuteData)); |
| | | |
| | | // 生成200个1D价格数据点 |
| | | List<Kline> kline1DayData = getKlineDataByInstIdAndBar(instId, "1D"); |
| | | List<BigDecimal> historicalPrices1D = kline1DayData.stream() |
| | | .map(Kline::getC) |
| | | .collect(Collectors.toList()); |
| | | log.info("1D:{}", JSONUtil.parse( historicalPrices1D)); |
| | | // 使用策略分析最新价格数据 |
| | | MacdMaStrategy.TradingOrder tradingOrderOpen1M = strategy.generateTradingOrder(historicalPrices1M,MacdMaStrategy.OperationType.open.name()); |
| | | MacdMaStrategy.TradingOrder tradingOrderOpen1M = strategy.generateTradingOrder(historicalPrices1M,historicalPrices1D,MacdMaStrategy.OperationType.open.name()); |
| | | if (tradingOrderOpen1M == null ){ |
| | | return; |
| | | } |
| | | |
| | | List<Kline> kline15MinuteData = getKlineDataByInstIdAndBar(instId, "15m"); |
| | | List<BigDecimal> historicalPrices15M = kline15MinuteData.stream() |
| | | .map(Kline::getC) |
| | | .collect(Collectors.toList()); |
| | | // 使用策略分析最新价格数据 |
| | | MacdMaStrategy.TradingOrder tradingOrderOpen15M = strategy.generateTradingOrder(historicalPrices15M,MacdMaStrategy.OperationType.open.name()); |
| | | if (tradingOrderOpen15M == null ){ |
| | | if (historicalPrices1D == null ){ |
| | | return; |
| | | } |
| | | |
| | | if (!tradingOrderOpen1M.getPosSide().equals(tradingOrderOpen15M.getPosSide())){ |
| | | return; |
| | | } |
| | | |
| | | log.info("1分钟和15分钟K线方向一致,开始执行交易操作!"); |
| | | |
| | | |
| | | Collection<OkxQuantWebSocketClient> allClients = clientManager.getAllClients(); |
| | | //如果为空,则直接返回 |
| | |
| | | requestParam.put("bar", bar); |
| | | requestParam.put("limit", "200"); |
| | | String result = ExchangeLoginService.getInstance(ExchangeInfoEnum.OKX_UAT.name()).lineHistory(requestParam); |
| | | log.info("加载OKX-KLINE,{}", result); |
| | | |
| | | JSONObject json = JSON.parseObject(result); |
| | | String data = json.getString("data"); |
| | | |
| | |
| | | private void sendPing() { |
| | | try { |
| | | if (webSocketClient != null && webSocketClient.isOpen()) { |
| | | JSONObject ping = new JSONObject(); |
| | | ping.put("op", "ping"); |
| | | webSocketClient.send(ping.toJSONString()); |
| | | webSocketClient.send("ping"); |
| | | log.debug("发送ping请求"); |
| | | } |
| | | } catch (Exception e) { |