| | |
| | | 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; |
| | | import com.xcong.excoin.modules.blackchain.service.DateUtil; |
| | | import com.xcong.excoin.modules.okxNewPrice.celue.CaoZuoService; |
| | | import com.xcong.excoin.modules.okxNewPrice.indicator.TradingStrategy; |
| | | import com.xcong.excoin.modules.okxNewPrice.indicator.macdAndMatrategy.MacdMaStrategy; |
| | |
| | | BigDecimal lowPx = new BigDecimal(data.getString(3)); |
| | | BigDecimal closePx = new BigDecimal(data.getString(4)); |
| | | BigDecimal vol = new BigDecimal(data.getString(5)); |
| | | //ts String 开始时间,Unix时间戳的毫秒数格式,如 1597026383085 转日期:2020-08-07 15:13:03.085 |
| | | String time = DateUtil.TimeStampToDateTime(Long.parseLong(data.getString(0))); |
| | | /** |
| | | * K线状态 |
| | | * 0:K线未完结 |
| | |
| | | */ |
| | | String confirm = data.getString(8); |
| | | if ("1".equals(confirm)){ |
| | | log.info("{}K线已完结{}:{}",time,closePx,instId); |
| | | //调用策略 |
| | | // 创建策略实例 |
| | | 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("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(); |
| | | //如果为空,则直接返回 |