From 83f9014a75f572154ae7732f0fc78d6467edde93 Mon Sep 17 00:00:00 2001
From: peter <908253177@qq.com>
Date: Tue, 08 Jul 2025 14:56:52 +0800
Subject: [PATCH] 外汇
---
trading-order-huobi/src/main/java/com.yami.trading.huobi/hobi/internal/FakeKlineInitService.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 105 insertions(+), 11 deletions(-)
diff --git a/trading-order-huobi/src/main/java/com.yami.trading.huobi/hobi/internal/FakeKlineInitService.java b/trading-order-huobi/src/main/java/com.yami.trading.huobi/hobi/internal/FakeKlineInitService.java
index e14d90e..739d4a2 100644
--- a/trading-order-huobi/src/main/java/com.yami.trading.huobi/hobi/internal/FakeKlineInitService.java
+++ b/trading-order-huobi/src/main/java/com.yami.trading.huobi/hobi/internal/FakeKlineInitService.java
@@ -12,14 +12,21 @@
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.huobi.data.internal.KlineConstant;
import com.yami.trading.huobi.data.internal.KlineService;
+import com.yami.trading.huobi.data.model.AllticktradeResult;
+import com.yami.trading.huobi.hobi.constant.AllticktradeMadeOptions;
+import com.yami.trading.huobi.hobi.constant.TraderMadeOptions;
import com.yami.trading.huobi.hobi.http.HttpHelper;
import com.yami.trading.service.etf.EtfMinuteKLineService;
import com.yami.trading.service.item.ItemService;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
import org.checkerframework.checker.units.qual.K;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
+import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
@@ -29,6 +36,9 @@
private KlineService klineService;
@Autowired
private EtfMinuteKLineService etfMinuteKLineService;
+
+ @Value("${alltick.trade-kline}")
+ private String tradeKline;
public final void saveInit(String symbol) {
Item bySymbol = itemService.findBySymbol(symbol);
@@ -46,9 +56,9 @@
kline.setPeriod(Kline.PERIOD_1MIN);
return kline;
}).collect(Collectors.toList());
- Map<String, List<Kline>> dailyWeekMonthHistoryMap = getDailyWeekMonthHistory(symbol, klineList);
+// Map<String, List<Kline>> dailyWeekMonthHistoryMap = getDailyWeekMonthHistory(symbol, klineList);
Map<String, List<Kline>> hourlyAndMinuteHistoryMap = getHourlyAndMinuteHistory(symbol, klineList);
- klineService.saveInit(symbol, dailyWeekMonthHistoryMap, hourlyAndMinuteHistoryMap);
+ klineService.saveInit(symbol, null, hourlyAndMinuteHistoryMap);
}
@Autowired
@@ -58,31 +68,115 @@
* 获取分钟数据
*/
public Map<String, List<Kline>> getHourlyAndMinuteHistory(String symbol , List<Kline> klineList) {
+// Map<String, List<Kline>> map = new HashMap<>();
+//
+// List<Kline> fourHourlyList = getTimeseriesForFourHourly(symbol, klineList);
+// map.put(KlineConstant.PERIOD_4HOUR, fourHourlyList);
+//
+// List<Kline> twoHourlyList = getTimeseriesForTwoHourly(symbol, klineList);
+// map.put(KlineConstant.PERIOD_2HOUR, twoHourlyList);
+//
+// List<Kline> oneHourlyList = getTimeseriesForOneHourly(symbol, klineList);
+// map.put(KlineConstant.PERIOD_60MIN, oneHourlyList);
+//
+// List<Kline> thirtyMinuteList = getTimeseriesThirtyMinute(symbol, klineList);
+// map.put(KlineConstant.PERIOD_30MIN, thirtyMinuteList);
+//
+// List<Kline> fifteenMinuteList = getTimeseriesFifteenMinute(symbol, klineList);
+// map.put(KlineConstant.PERIOD_15MIN, fifteenMinuteList);
+//
+// List<Kline> fiveMinuteList = getTimeseriesFiveMinute(symbol, klineList);
+// map.put(KlineConstant.PERIOD_5MIN, fiveMinuteList);
+//
+// List<Kline> oneMinuteList = klineList;
+// map.put(KlineConstant.PERIOD_1MIN, oneMinuteList);
+// return map;
Map<String, List<Kline>> map = new HashMap<>();
- List<Kline> fourHourlyList = getTimeseriesForFourHourly(symbol, klineList);
- map.put(KlineConstant.PERIOD_4HOUR, fourHourlyList);
+ List<Kline> monthList = getTimeseries(symbol,KlineConstant.PERIOD_1MON, AllticktradeMadeOptions.monthPeriod);
+ map.put(KlineConstant.PERIOD_1MON, monthList);
- List<Kline> twoHourlyList = getTimeseriesForTwoHourly(symbol, klineList);
- map.put(KlineConstant.PERIOD_2HOUR, twoHourlyList);
+ List<Kline> weekList = getTimeseries(symbol,KlineConstant.PERIOD_1WEEK,AllticktradeMadeOptions.weekPeriod);
+ map.put(KlineConstant.PERIOD_1WEEK, weekList);
- List<Kline> oneHourlyList = getTimeseriesForOneHourly(symbol, klineList);
+ List<Kline> dayList = getTimeseries(symbol,KlineConstant.PERIOD_1DAY,AllticktradeMadeOptions.dayPeriod);
+ map.put(KlineConstant.PERIOD_1DAY, dayList);
+
+ List<Kline> towHourlyList = getTimeseries(symbol,KlineConstant.PERIOD_2HOUR,AllticktradeMadeOptions.towHourPeriod);
+ map.put(KlineConstant.PERIOD_2HOUR, towHourlyList);
+
+ List<Kline> oneHourlyList = getTimeseries(symbol,KlineConstant.PERIOD_60MIN,AllticktradeMadeOptions.hourPeriod);
map.put(KlineConstant.PERIOD_60MIN, oneHourlyList);
- List<Kline> thirtyMinuteList = getTimeseriesThirtyMinute(symbol, klineList);
+ List<Kline> thirtyMinuteList = getTimeseries(symbol,KlineConstant.PERIOD_30MIN,AllticktradeMadeOptions.thirtyPeriod);
map.put(KlineConstant.PERIOD_30MIN, thirtyMinuteList);
- List<Kline> fifteenMinuteList = getTimeseriesFifteenMinute(symbol, klineList);
+ List<Kline> fifteenMinuteList = getTimeseries(symbol,KlineConstant.PERIOD_15MIN,AllticktradeMadeOptions.fifteenPeriod);
map.put(KlineConstant.PERIOD_15MIN, fifteenMinuteList);
- List<Kline> fiveMinuteList = getTimeseriesFiveMinute(symbol, klineList);
+ List<Kline> fiveMinuteList = getTimeseries(symbol,KlineConstant.PERIOD_5MIN,AllticktradeMadeOptions.fivePeriod);
map.put(KlineConstant.PERIOD_5MIN, fiveMinuteList);
- List<Kline> oneMinuteList = klineList;
+ List<Kline> oneMinuteList = getTimeseries(symbol,KlineConstant.PERIOD_1MIN,AllticktradeMadeOptions.minutePeriod);
map.put(KlineConstant.PERIOD_1MIN, oneMinuteList);
return map;
}
+ public List<Kline> getTimeseries(String symbol,String period,int periodType){
+ List<Kline> resList = new ArrayList<>();
+ // 每次只能取一个月的数据,需要遍历3个月
+ for (int i = 0; i < TraderMadeOptions.thirtyMinutePeriod; i++) {
+ String resultStr = null;
+ try {
+ resultStr = getTradeKline(symbol,periodType,AllticktradeMadeOptions.dayKlineNumPeriod);
+ } catch (Exception e) {
+ continue;
+ }
+ JSONObject resultJson = JSON.parseObject(resultStr);
+ if(null == resultJson || 200 != resultJson.getInteger("ret")){
+ }
+ JSONObject tempdata = resultJson.getJSONObject("data");
+ JSONArray dataArray = tempdata.getJSONArray("kline_list");
+ if (dataArray.size() > 0) {
+ List<AllticktradeResult> list = JSONObject.parseArray(JSONObject.toJSONString(dataArray), AllticktradeResult.class);
+ for (AllticktradeResult result : list) {
+ Kline kline = new Kline();
+ kline.setSymbol(symbol);
+ kline.setPeriod(period);
+ // 毫秒
+ kline.setTs(Long.parseLong(result.getTimestamp()));
+ kline.setOpen(result.getOpen_price());
+ kline.setClose(result.getClose_price());
+ kline.setHigh(result.getHigh_price());
+ kline.setLow(result.getLow_price());
+ kline.setVolume(result.getVolume());
+ resList.add(kline);
+ }
+ }
+ }
+ return resList;
+ }
+
+ public String getTradeKline(String symbol,int type,int num){
+ JSONObject json = new JSONObject();
+ json.put("trace", UUID.randomUUID().toString());
+ JSONObject data = new JSONObject();
+ data.put("code", symbol);
+ data.put("kline_type", type);
+ data.put("kline_timestamp_end", 0);
+ data.put("query_kline_num", num);
+ json.put("data", data);
+ try {
+ String url = tradeKline.replace("{1}", URLEncoder.encode(json.toString(), "UTF-8"));
+ HttpGet request = new HttpGet(url);
+ HttpResponse response = HttpHelper.getHttpclient().execute(request);
+ return HttpHelper.responseProc(response);
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ }
+ return null;
+ }
+
/**
* 1day 历史数据 : 周期 1年
--
Gitblit v1.9.3