| | |
| | | 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; |
| | |
| | | // 创建策略实例 |
| | | 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( historicalPrices1M)); |
| | | |
| | | // 生成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 ){ |
| | | // return; |
| | | // } |
| | | // |
| | | // if (!tradingOrderOpen1M.getPosSide().equals(tradingOrderOpen15M.getPosSide())){ |
| | | // return; |
| | | // } |
| | | |
| | | // log.info("1分钟和15分钟K线方向一致,开始执行交易操作!"); |
| | | |
| | | if (historicalPrices1D == null ){ |
| | | return; |
| | | } |
| | | |
| | | 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"); |
| | | |