| | |
| | | import com.yami.trading.common.config.RequestDataHelper; |
| | | import com.yami.trading.common.constants.Constants; |
| | | import com.yami.trading.common.util.DateUtils; |
| | | import com.yami.trading.huobi.data.AdjustmentValueCache; |
| | | import com.yami.trading.huobi.data.DataCache; |
| | | import com.yami.trading.huobi.hobi.HobiDataService; |
| | | import com.yami.trading.service.data.KlineDBService; |
| | |
| | | import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | |
| | | @Component |
| | |
| | | private SysparaService sysparaService; |
| | | @Autowired |
| | | private NamedParameterJdbcOperations namedParameterJdbcTemplate; |
| | | |
| | | @Override |
| | | public void initBySql(String symbol) { |
| | | this.bulidBySql(symbol, Kline.PERIOD_1MIN); |
| | | this.bulidBySql(symbol, Kline.PERIOD_5MIN); |
| | | this.bulidBySql(symbol, Kline.PERIOD_15MIN); |
| | | this.bulidBySql(symbol, Kline.PERIOD_30MIN); |
| | | this.bulidBySql(symbol, Kline.PERIOD_60MIN); |
| | | this.bulidBySql(symbol, Kline.PERIOD_4HOUR); |
| | | this.bulidBySql(symbol, Kline.PERIOD_1DAY); |
| | | this.bulidBySql(symbol, Kline.PERIOD_1MON); |
| | | this.bulidBySql(symbol, Kline.PERIOD_1WEEK); |
| | | } |
| | | |
| | | @Override |
| | | public void init(String symbol) { |
| | | this.bulid(symbol, Kline.PERIOD_1MIN); |
| | | this.bulid(symbol, Kline.PERIOD_5MIN); |
| | | this.bulid(symbol, Kline.PERIOD_15MIN); |
| | | this.bulid(symbol, Kline.PERIOD_30MIN); |
| | | this.bulid(symbol, Kline.PERIOD_60MIN); |
| | | this.bulid(symbol, Kline.PERIOD_4HOUR); |
| | | this.bulid(symbol, Kline.PERIOD_1DAY); |
| | | this.bulid(symbol, Kline.PERIOD_1MON); |
| | | this.bulid(symbol, Kline.PERIOD_1WEEK); |
| | | } |
| | | |
| | | @Override |
| | | public void saveInit(String symbol) { |
| | |
| | | |
| | | } |
| | | |
| | | public void bulidBySql(String symbol, String line) { |
| | | RequestDataHelper.set("symbol", symbol); |
| | | LambdaQueryWrapper<Kline> queryWrapper = new LambdaQueryWrapper<Kline>() |
| | | .eq(Kline::getSymbol, symbol) |
| | | .eq(Kline::getPeriod, line) |
| | | .orderByAsc(Kline::getTs); |
| | | List<Kline> list = klineDBService.list(queryWrapper); |
| | | |
| | | KlineTimeObject model = new KlineTimeObject(); |
| | | Collections.sort(list); // 按时间升序 |
| | | model.setKline(list); |
| | | model.setLastTime(new Date()); |
| | | DataCache.putKline(symbol, line, model); |
| | | RequestDataHelper.clear(); |
| | | |
| | | } |
| | | |
| | | public void bulid(String symbol, String line) { |
| | | RequestDataHelper.set("symbol", symbol); |
| | | List<Kline> list = hobiDataService.kline(itemService.findBySymbol(symbol).getSymbol(), line, null, |
| | | 0); |
| | | KlineTimeObject model = new KlineTimeObject(); |
| | | Collections.sort(list); // 按时间升序 |
| | | model.setKline(list); |
| | | model.setLastTime(new Date()); |
| | | DataCache.putKline(symbol, line, model); |
| | | RequestDataHelper.clear(); |
| | | |
| | | } |
| | | |
| | | public void bulidInit(String symbol, String line) { |
| | | RequestDataHelper.set("symbol", symbol); |
| | | List<Kline> list = hobiDataService.kline(itemService.findBySymbol(symbol).getSymbol(), line, null, |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void saveOne(String symbol, String line) { |
| | | RequestDataHelper.set("symbol", symbol); |
| | | saveOneByHuoBi(symbol, line); |
| | | /*RequestDataHelper.set("symbol", symbol); |
| | | Realtime realtime = DataCache.getRealtime(symbol); |
| | | if (realtime == null) { |
| | | logger.error("saveOne error, realtime is null,symbol [" + symbol + "]"); |
| | |
| | | |
| | | String key = symbol + "_" + line; |
| | | Kline hobiOne = DataCache.getKline_hobi().get(key); |
| | | if (hobiOne == null || lastOne == null) { |
| | | *//*if (hobiOne == null || lastOne == null) { |
| | | logger.error("saveOne error, hobiOne is null,symbol [" + symbol + "]"); |
| | | // 取不到远程数据,直接退出 |
| | | return; |
| | | } |
| | | }*//* |
| | | RequestDataHelper.set("symbol", symbol); |
| | | Kline kline = this.bulidKline(realtime, lastOne, hobiOne, line); |
| | | Kline kline = this.bulidKline(realtime, lastOne, null, line); |
| | | kline.setPeriod(line); |
| | | klineDBService.save(kline); |
| | | |
| | |
| | | timeObject.getKline().add(kline); |
| | | timeObject.setLastTime(new Date()); |
| | | DataCache.putKline(symbol, line, timeObject); |
| | | RequestDataHelper.clear(); |
| | | RequestDataHelper.clear();*/ |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void saveOneByHuoBi(String symbol, String line) { |
| | | RequestDataHelper.set("symbol", symbol); |
| | | List<Kline> list = hobiDataService.kline(itemService.findBySymbol(symbol).getSymbol(), line, 2, |
| | | 0); |
| | | if (list == null || list.isEmpty()) { |
| | | return; |
| | | } |
| | | Kline kline = list.get(0); |
| | | BigDecimal currentValue = AdjustmentValueCache.getCurrentValue().get(symbol); |
| | | if (currentValue != null && currentValue.compareTo(BigDecimal.ZERO) > 0) { |
| | | if (!kline.isAdjusted()){ |
| | | kline.setClose(kline.getClose().add(currentValue)); |
| | | kline.setOpen(kline.getOpen().add(currentValue)); |
| | | kline.setLow(kline.getLow().add(currentValue)); |
| | | kline.setHigh(kline.getHigh().add(currentValue)); |
| | | kline.setAdjusted(true); |
| | | } |
| | | } |
| | | klineDBService.save(kline); |
| | | KlineTimeObject timeObject = DataCache.getKline(symbol, line); |
| | | if (timeObject == null) { |
| | | timeObject = new KlineTimeObject(); |
| | | } |
| | | timeObject.getKline().add(kline); |
| | | timeObject.setLastTime(new Date()); |
| | | DataCache.putKline(symbol, line, timeObject); |
| | | RequestDataHelper.clear(); |
| | | } |
| | | |
| | | public Kline bulidKline(Realtime realtime, Kline lastOne, Kline hobiOne, String line) { |
| | |
| | | |
| | | if (lastOne != null) { |
| | | kline.setOpen(lastOne.getClose()); |
| | | kline.setHigh(lastOne.getClose()); |
| | | kline.setLow(lastOne.getClose()); |
| | | |
| | | if (realtime.getClose().compareTo(kline.getHigh()) > 0) { |
| | | kline.setHigh(realtime.getClose()); |
| | | } |
| | | if (realtime.getClose().compareTo(kline.getLow()) < 0) { |
| | | kline.setLow(realtime.getClose()); |
| | | } |
| | | } |
| | | int interval = this.sysparaService.find("data_interval").getInteger().intValue() / 1000; |
| | | /*int interval = this.sysparaService.find("data_interval").getInteger().intValue() / 1000; |
| | | |
| | | HighLow highLow = null; |
| | | switch (line) { |
| | |
| | | } |
| | | if (highLow != null && highLow.getLow() != null) { |
| | | kline.setLow(highLow.getLow()); |
| | | } |
| | | }*/ |
| | | |
| | | kline.setVolume(hobiOne.getVolume()); |
| | | |
| | | //kline.setVolume(hobiOne.getVolume()); |
| | | |
| | | return kline; |
| | | } |