From 28eb26d68f7a2a4e6b316c3ea9f511aa143db66e Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 30 Sep 2024 16:57:18 +0800
Subject: [PATCH] 55测试环境
---
src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java | 68 +++++++++++++++++++++++----------
1 files changed, 47 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java b/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
index ca6dc28..e4a08b8 100644
--- a/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
+++ b/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.huobi.client.model.Candlestick;
+import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.trade.ExchangeTrade;
import com.xcong.excoin.utils.RedisUtils;
import lombok.ToString;
@@ -62,7 +63,7 @@
calendar.set(Calendar.HOUR_OF_DAY, 0);
long firstTimeOfToday = calendar.getTimeInMillis();
String period = "1min";
- logger.info("initializeThumb from {} to {}", firstTimeOfToday, nowTime);
+ //logger.info("initializeThumb from {} to {}", firstTimeOfToday, nowTime);
List<Candlestick> lines = service.findAllKLine(this.symbol, firstTimeOfToday, nowTime, period);
coinThumb = new CoinThumb();
synchronized (coinThumb) {
@@ -202,7 +203,7 @@
//处理K线
processTrade(currentKLine, exchangeTrade);
//处理今日概况信息
- logger.debug("处理今日概况信息");
+ //logger.debug("处理今日概况信息");
handleThumb(exchangeTrade);
//存储并推送成交信息
handleTradeStorage(exchangeTrade);
@@ -212,7 +213,7 @@
}
public void processTrade(Candlestick kLine, ExchangeTrade exchangeTrade) {
- if (kLine.getClose().compareTo(BigDecimal.ZERO) == 0) {
+ if (kLine.getClose()==null || kLine.getClose().compareTo(BigDecimal.ZERO)==0) {
//第一次设置K线值
kLine.setOpen(exchangeTrade.getPrice());
kLine.setHigh(exchangeTrade.getPrice());
@@ -224,15 +225,19 @@
kLine.setClose(exchangeTrade.getPrice());
}
kLine.setCount(kLine.getCount() + 1);
- kLine.setVolume(kLine.getVolume().add(exchangeTrade.getAmount()));
+ if(kLine.getVolume()==null){
+ kLine.setVolume(BigDecimal.ZERO);
+ }
+ kLine.setAmount(kLine.getVolume().add(exchangeTrade.getAmount()));
BigDecimal turnover = exchangeTrade.getPrice().multiply(exchangeTrade.getAmount());
- // kLine.setTurnover(kLine.getTurnover().add(turnover));
+ kLine.setVolume(kLine.getVolume().add(turnover));
+ //kLine.setTimestamp(System.currentTimeMillis());
}
public void handleTradeStorage(ExchangeTrade exchangeTrade) {
- for (MarketHandler storage : handlers) {
- storage.handleTrade(symbol, exchangeTrade, coinThumb);
- }
+// for (MarketHandler storage : handlers) {
+// storage.handleTrade(symbol, exchangeTrade, coinThumb);
+// }
}
public void handleKLineStorage(Candlestick kLine) {
@@ -243,7 +248,7 @@
}
public void handleThumb(ExchangeTrade exchangeTrade) {
- logger.info("handleThumb symbol = {}", this.symbol);
+ //logger.info("handleThumb symbol = {}", this.symbol);
synchronized (coinThumb) {
if (coinThumb.getOpen().compareTo(BigDecimal.ZERO) == 0) {
//第一笔交易记为开盘价
@@ -265,7 +270,7 @@
coinThumb.setChg(change.divide(coinThumb.getLow(), 4, BigDecimal.ROUND_UP));
}
if ("USDT".equalsIgnoreCase(baseCoin)) {
- logger.info("setUsdRate", exchangeTrade.getPrice());
+ // logger.info("setUsdRate", exchangeTrade.getPrice());
coinThumb.setUsdRate(exchangeTrade.getPrice());
} else {
@@ -304,17 +309,17 @@
calendar.add(field, -range);
String fromTime = df.format(calendar.getTime());
long startTick = calendar.getTimeInMillis();
- System.out.println("time range from " + fromTime + " to " + endTime);
+ //System.out.println("time range from " + fromTime + " to " + endTime);
List<ExchangeTrade> exchangeTrades = service.findTradeByTimeRange(this.symbol, startTick, endTick);
Candlestick kLine = new Candlestick();
kLine.setTimestamp(endTick);
kLine.setAmount(BigDecimal.ZERO);
- kLine.setClose(BigDecimal.ZERO);
- kLine.setLow(BigDecimal.ZERO);
- kLine.setOpen(BigDecimal.ZERO);
+ kLine.setClose(AppContants.DEFAULT_PRICE);
+ kLine.setLow(AppContants.DEFAULT_PRICE);
+ kLine.setOpen(AppContants.DEFAULT_PRICE);
kLine.setVolume(BigDecimal.ZERO);
- kLine.setHigh(BigDecimal.ZERO);
+ kLine.setHigh(AppContants.DEFAULT_PRICE);
String rangeUnit = "";
if (field == Calendar.MINUTE) {
rangeUnit = "min";
@@ -335,12 +340,26 @@
}
// 如果开盘价为0,则设置为前一个价格
if(kLine.getOpen().compareTo(BigDecimal.ZERO) == 0) {
- kLine.setOpen(coinThumb.getClose());
- kLine.setClose(coinThumb.getClose());
- kLine.setLow(coinThumb.getClose());
- kLine.setHigh(coinThumb.getClose());
+ // 查询前一根K线 TODO
+ String key = "KINE_" + symbol + "/USDT_" + period;
+ Object data = redisUtils.get(key);
+ List list = new ArrayList();
+ if (data != null) {
+ list = (List) data;
+ Candlestick o = (Candlestick)list.get(list.size() - 1);
+ kLine.setOpen(o.getClose());
+ kLine.setClose(o.getClose());
+ kLine.setLow(o.getClose());
+ kLine.setHigh(o.getClose());
+ }else{
+ kLine.setOpen(coinThumb.getClose());
+ kLine.setClose(coinThumb.getClose());
+ kLine.setLow(coinThumb.getClose());
+ kLine.setHigh(coinThumb.getClose());
+ }
+
}
- logger.info("generate " + range + rangeUnit + " kline in {},data={}", df.format(new Date(kLine.getTimestamp())), JSON.toJSONString(kLine));
+ //logger.info("generate " + range + rangeUnit + " kline in {},data={}", df.format(new Date(kLine.getTimestamp())), JSON.toJSONString(kLine));
service.saveKLine(symbol,period, kLine);
// 生成一个对应的新K线 后续的交易会更新这个最新K线数据
Candlestick newKline = new Candlestick();
@@ -352,11 +371,18 @@
newKline.setOpen(kLine.getClose());
newKline.setVolume(BigDecimal.ZERO);
newKline.setHigh(kLine.getClose());
+ calendar.add(field, 2*range);
+ newKline.setTimestamp(calendar.getTimeInMillis());
currentKlineMap.put(period,newKline);
// 存储昨日K线
if("day".equals(rangeUnit)){
- redisUtils.set("NEKK/USDT",kLine);
+ System.out.println("存储日K线");
+ kLine.setOpen(kLine.getClose());
+ kLine.setLow(kLine.getClose());
+ kLine.setHigh(kLine.getClose());
+ kLine.setVolume(BigDecimal.ZERO);
+ redisUtils.set("GRICE/USDT",kLine);
}
}
--
Gitblit v1.9.1