|
@@ -3,8 +3,6 @@ package com.smppw.core;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.collection.ListUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import com.smppw.common.pojo.IStrategy;
|
|
|
import com.smppw.common.pojo.IndexesTradeDate;
|
|
|
import com.smppw.common.pojo.dto.CompoundRet;
|
|
|
import com.smppw.common.pojo.dto.DateValue;
|
|
@@ -14,6 +12,8 @@ import com.smppw.common.pojo.dto.calc.IndicatorCalcTimeRangeDto;
|
|
|
import com.smppw.common.pojo.dto.indicator.CalcMultipleSecMultipleTimeRangeIndicatorReq;
|
|
|
import com.smppw.common.pojo.dto.indicator.DateIntervalDto;
|
|
|
import com.smppw.common.pojo.enums.*;
|
|
|
+import com.smppw.common.pojo.enums.strategy.IStrategy;
|
|
|
+import com.smppw.common.pojo.enums.strategy.Strategy;
|
|
|
import com.smppw.utils.DateIntervalUtil;
|
|
|
import com.smppw.utils.IndicatorCalcUtil;
|
|
|
import com.smppw.utils.NavUtil;
|
|
@@ -21,9 +21,9 @@ import com.smppw.utils.TradeDateUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author wangzaijun
|
|
@@ -39,6 +39,27 @@ public class IndicatorService {
|
|
|
}
|
|
|
|
|
|
public Map<String, List<IndicatorCalcPropertyDto>> getMultipleSecTrend(List<String> mainSecIdList, Map<String, String> secBenchmarkIdMap, List<String> indexIdList,
|
|
|
+ DateIntervalDto dateIntervalDto, Frequency frequency, List<TrendType> trendTypeV2List,
|
|
|
+ Map<String, Frequency> secFreqMap, Map<String, List<DateValue>> allNavMap) {
|
|
|
+ return this.getMultipleSecTrend(mainSecIdList, secBenchmarkIdMap, indexIdList, dateIntervalDto, null, null, frequency, trendTypeV2List, secFreqMap, allNavMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算多标的的业绩走势图
|
|
|
+ *
|
|
|
+ * @param mainSecIdList
|
|
|
+ * @param secBenchmarkIdMap
|
|
|
+ * @param indexIdList
|
|
|
+ * @param dateIntervalDto
|
|
|
+ * @param fixedIncome
|
|
|
+ * @param initValue
|
|
|
+ * @param frequency
|
|
|
+ * @param trendTypeV2List
|
|
|
+ * @param secFreqMap
|
|
|
+ * @param allNavMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String, List<IndicatorCalcPropertyDto>> getMultipleSecTrend(List<String> mainSecIdList, Map<String, String> secBenchmarkIdMap, List<String> indexIdList,
|
|
|
DateIntervalDto dateIntervalDto, BigDecimal fixedIncome, BigDecimal initValue, Frequency frequency,
|
|
|
List<TrendType> trendTypeV2List, Map<String, Frequency> secFreqMap, Map<String, List<DateValue>> allNavMap) {
|
|
|
// 实际频率时净值还是取日频的
|
|
@@ -107,13 +128,11 @@ public class IndicatorService {
|
|
|
* @param req 请求参数
|
|
|
* @param allNavMap 所有标的的净值
|
|
|
* @param secFreqMap 标的的净值频率
|
|
|
- * @param tradeDates 所有要计算的交易日序列
|
|
|
* @return /
|
|
|
*/
|
|
|
public Map<String, List<IndicatorCalcPropertyDto>> calcMultipleSecMultipleTimeRangeIndicator(CalcMultipleSecMultipleTimeRangeIndicatorReq req,
|
|
|
Map<String, List<DateValue>> allNavMap,
|
|
|
- Map<String, Frequency> secFreqMap,
|
|
|
- List<IndexesTradeDate> tradeDates) {
|
|
|
+ Map<String, Frequency> secFreqMap) {
|
|
|
|
|
|
List<String> mainSecIdList = req.getMainSecIdList();
|
|
|
Map<String, String> secBenchmarkIdMap = req.getSecBenchmarkIdMap();
|
|
@@ -156,13 +175,9 @@ public class IndicatorService {
|
|
|
theFirstNavDate = mainSecIdNavList.get(0).getDate();
|
|
|
theLastNavDate = mainSecIdNavList.get(mainSecIdNavList.size() - 1).getDate();
|
|
|
}
|
|
|
- if (StrUtil.isAllNotBlank(theFirstNavDate, theLastNavDate)) {
|
|
|
- String finalTheFirstNavDate = theFirstNavDate;
|
|
|
- String finalTheLastNavDate = theLastNavDate;
|
|
|
- tradeDates = tradeDates.stream().filter(e -> e.getTradeDate().compareTo(finalTheFirstNavDate) >= 0)
|
|
|
- .filter(e -> e.getTradeDate().compareTo(finalTheLastNavDate) <= 0).collect(Collectors.toList());
|
|
|
- }
|
|
|
- List<DateValue> validMainSecNavList = NavUtil.filterFrequencyNav(mainSecIdNavList, tradeDates, navFrequency);
|
|
|
+ List<IndexesTradeDate> indexesTradeDateList = TradeDateUtil.listInfoByDateInterval(theFirstNavDate, theLastNavDate);
|
|
|
+
|
|
|
+ List<DateValue> validMainSecNavList = NavUtil.filterFrequencyNav(mainSecIdNavList, indexesTradeDateList, navFrequency);
|
|
|
secAllNavMap.put(mainSecId, validMainSecNavList);
|
|
|
|
|
|
Frequency defaultFrequency = secFreqMap.getOrDefault(mainSecId, Frequency.Daily);
|
|
@@ -175,9 +190,9 @@ public class IndicatorService {
|
|
|
|
|
|
for (DateIntervalDto dateIntervalDto : dateIntervalDtoList) {
|
|
|
|
|
|
- rollFindStartDate(mainSecId, dateIntervalDto, tradeDates, allNavMap, calcFrequency);
|
|
|
+ rollFindStartDate(mainSecId, dateIntervalDto, indexesTradeDateList, allNavMap, calcFrequency);
|
|
|
|
|
|
- List<IndicatorCalcTimeRangeDto> indicatorCalcTimeRangeDtoList = DateIntervalUtil.getIndicatorCalcTimeRangeDto(dateIntervalDto, validMainSecNavList, tradeDates
|
|
|
+ List<IndicatorCalcTimeRangeDto> indicatorCalcTimeRangeDtoList = DateIntervalUtil.getIndicatorCalcTimeRangeDto(dateIntervalDto, validMainSecNavList, indexesTradeDateList
|
|
|
, dateIntervalDto.getId());
|
|
|
|
|
|
for (IndicatorCalcTimeRangeDto indicatorCalcTimeRangeDto : indicatorCalcTimeRangeDtoList) {
|
|
@@ -209,6 +224,127 @@ public class IndicatorService {
|
|
|
return indicatorCalcPropertyDtoListMap;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 提供给指标计算服务的接口,支持多标的多频率的指标计算
|
|
|
+ *
|
|
|
+ * @param mainSecIdList
|
|
|
+ * @param secBenchmarkIdMap
|
|
|
+ * @param indexIdList
|
|
|
+ * @param dateIntervalDtoList
|
|
|
+ * @param dataFrequencyList
|
|
|
+ * @param dataFrequencyIndicatorListMap
|
|
|
+ * @param dataFrequencyGeoExtraIndicatorListMap
|
|
|
+ * @param riskOfFreeId
|
|
|
+ * @param riskOfFreeValue
|
|
|
+ * @param ifAnnualize
|
|
|
+ * @param calcIndexRetIndicatorValue
|
|
|
+ * @param needRet
|
|
|
+ * @param needExtraRet
|
|
|
+ * @param leastRetNum
|
|
|
+ * @param allNavMap
|
|
|
+ * @param secFreqMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String, Map<Frequency, List<IndicatorCalcPropertyDto>>> calcMultipleSecMultipleTimeRangeIndicator(List<String> mainSecIdList, Map<String, String> secBenchmarkIdMap, List<String> indexIdList, List<DateIntervalDto> dateIntervalDtoList,
|
|
|
+ List<Frequency> dataFrequencyList, Map<Frequency, List<Indicator>> dataFrequencyIndicatorListMap,
|
|
|
+ Map<Frequency, List<Indicator>> dataFrequencyGeoExtraIndicatorListMap, String riskOfFreeId, Double riskOfFreeValue,
|
|
|
+ boolean ifAnnualize, boolean calcIndexRetIndicatorValue, boolean needRet, boolean needExtraRet,
|
|
|
+ int leastRetNum, Map<String, List<DateValue>> allNavMap, Map<String, Frequency> secFreqMap) {
|
|
|
+
|
|
|
+ Map<String, Map<Frequency, List<IndicatorCalcPropertyDto>>> indicatorCalcPropertyDtoListMapMap = MapUtil.newHashMap(mainSecIdList.size());
|
|
|
+ for (String mainSecId : mainSecIdList) {
|
|
|
+
|
|
|
+ String benchmarkId = secBenchmarkIdMap.get(mainSecId);
|
|
|
+
|
|
|
+ Map<Frequency, List<IndicatorCalcPropertyDto>> indicatorCalcPropertyDtoListMap = MapUtil.newHashMap(dataFrequencyList.size());
|
|
|
+ for (Frequency dataFrequency : dataFrequencyList) {
|
|
|
+ Map<String, List<DateValue>> secAllNavMap = MapUtil.newHashMap(3 + indexIdList.size());
|
|
|
+ secAllNavMap.put(mainSecId, NavUtil.getNewNavList(allNavMap.get(mainSecId)));
|
|
|
+ secAllNavMap.put(benchmarkId, NavUtil.getNewNavList(allNavMap.get(benchmarkId)));
|
|
|
+ for (String indexId : indexIdList) {
|
|
|
+ secAllNavMap.put(indexId, NavUtil.getNewNavList(allNavMap.get(indexId)));
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(riskOfFreeId)) {
|
|
|
+ secAllNavMap.put(riskOfFreeId, NavUtil.getNewNavList(allNavMap.get(riskOfFreeId)));
|
|
|
+ }
|
|
|
+
|
|
|
+ Frequency navFrequency = dataFrequency == null || dataFrequency == Frequency.Default ? Frequency.Daily : dataFrequency;
|
|
|
+ List<DateValue> mainSecIdNavList = secAllNavMap.get(mainSecId);
|
|
|
+
|
|
|
+ String theFirstNavDate = "";
|
|
|
+ String theLastNavDate = "";
|
|
|
+ if (mainSecIdNavList != null && mainSecIdNavList.size() > 0) {
|
|
|
+ theFirstNavDate = mainSecIdNavList.get(0).getDate();
|
|
|
+ theLastNavDate = mainSecIdNavList.get(mainSecIdNavList.size() - 1).getDate();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<IndexesTradeDate> indexesTradeDateDoList = TradeDateUtil.listInfoByDateInterval(theFirstNavDate, theLastNavDate);
|
|
|
+
|
|
|
+ List<DateValue> validMainSecNavList = NavUtil.filterFrequencyNav(mainSecIdNavList, indexesTradeDateDoList, navFrequency);
|
|
|
+ secAllNavMap.put(mainSecId, validMainSecNavList);
|
|
|
+
|
|
|
+ Frequency calcFrequency = null;
|
|
|
+ Frequency defaultFrequency = secFreqMap.get(mainSecId);
|
|
|
+ if (dataFrequency == Frequency.Default) {
|
|
|
+ calcFrequency = defaultFrequency;
|
|
|
+ } else {
|
|
|
+ calcFrequency = dataFrequency;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Indicator> indicatorList = dataFrequencyIndicatorListMap.get(dataFrequency);
|
|
|
+ List<Indicator> geoExtraIndicatorList = dataFrequencyGeoExtraIndicatorListMap.get(dataFrequency);
|
|
|
+
|
|
|
+ List<IndicatorCalcPropertyDto> indicatorCalcPropertyDtoList = new ArrayList<>();
|
|
|
+ for (DateIntervalDto dateIntervalDto : dateIntervalDtoList) {
|
|
|
+
|
|
|
+ rollFindStartDate(mainSecId, dateIntervalDto, indexesTradeDateDoList, allNavMap, defaultFrequency);
|
|
|
+
|
|
|
+ List<IndicatorCalcTimeRangeDto> indicatorCalcTimeRangeDtoList = DateIntervalUtil.getIndicatorCalcTimeRangeDto(dateIntervalDto, validMainSecNavList, indexesTradeDateDoList
|
|
|
+ , dateIntervalDto.getId());
|
|
|
+
|
|
|
+ for (IndicatorCalcTimeRangeDto indicatorCalcTimeRangeDto : indicatorCalcTimeRangeDtoList) {
|
|
|
+
|
|
|
+ Map<String, List<DateValue>> dateSecAllNavMap = MapUtil.newHashMap(3 + indexIdList.size());
|
|
|
+ dateSecAllNavMap.put(mainSecId, NavUtil.getNewNavList(secAllNavMap.get(mainSecId)));
|
|
|
+ dateSecAllNavMap.put(benchmarkId, NavUtil.getNewNavList(secAllNavMap.get(benchmarkId)));
|
|
|
+ for (String indexId : indexIdList) {
|
|
|
+ dateSecAllNavMap.put(indexId, NavUtil.getNewNavList(secAllNavMap.get(indexId)));
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(riskOfFreeId)) {
|
|
|
+ dateSecAllNavMap.put(riskOfFreeId, NavUtil.getNewNavList(secAllNavMap.get(riskOfFreeId)));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (validMainSecNavList.size() > 0) {
|
|
|
+ IndicatorCalcReqPropertyDto indicatorCalcReq = prepareIndicatorCalcReq(mainSecId, benchmarkId, indexIdList, indicatorCalcTimeRangeDto,
|
|
|
+ dateSecAllNavMap, riskOfFreeId, riskOfFreeValue, null, calcFrequency, defaultFrequency, indicatorList, geoExtraIndicatorList, ifAnnualize, calcIndexRetIndicatorValue,
|
|
|
+ needRet, needExtraRet, false);
|
|
|
+ indicatorCalcReq.setLeastRetNum(leastRetNum);
|
|
|
+
|
|
|
+ IndicatorCalcPropertyDto indicatorCalcPropertyDto = CalcService.getInstance().indicatorCalc(indicatorCalcReq);
|
|
|
+
|
|
|
+ indicatorCalcPropertyDto.getIndicatorCalcReq().setAllNavMap(null);
|
|
|
+ indicatorCalcPropertyDto.setRiskFreeData(null);
|
|
|
+ indicatorCalcPropertyDto.getSecData().setOriNavList(null);
|
|
|
+ indicatorCalcPropertyDto.getSecData().setExtraNavList(null);
|
|
|
+ indicatorCalcPropertyDto.getSecData().setRetList(null);
|
|
|
+ indicatorCalcPropertyDto.getSecData().setExtraRetGeoList(null);
|
|
|
+ indicatorCalcPropertyDto.getBenchmarkData().setBenchmarkNavList(null);
|
|
|
+ indicatorCalcPropertyDto.getBenchmarkData().setOriBenchmarkNavList(null);
|
|
|
+ indicatorCalcPropertyDto.getBenchmarkData().setBenchmarkRetList(null);
|
|
|
+
|
|
|
+ indicatorCalcPropertyDtoList.add(indicatorCalcPropertyDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ indicatorCalcPropertyDtoListMap.put(dataFrequency, indicatorCalcPropertyDtoList);
|
|
|
+ }
|
|
|
+ indicatorCalcPropertyDtoListMapMap.put(mainSecId, indicatorCalcPropertyDtoListMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ return indicatorCalcPropertyDtoListMapMap;
|
|
|
+ }
|
|
|
+
|
|
|
public List<IndicatorCalcTimeRangeDto> getSecTimeRange(String mainSecId, Frequency frequency, Map<String, List<DateValue>> allNavMap) {
|
|
|
List<IndicatorCalcTimeRangeDto> indicatorCalcTimeRangeDtoList = CollectionUtil.newArrayList();
|
|
|
|
|
@@ -261,9 +397,17 @@ public class IndicatorService {
|
|
|
|
|
|
public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIdList, Frequency frequency,
|
|
|
Frequency rollingFrequency, String startDate, String endDate,
|
|
|
+ boolean ifExcessReturn, String benchmarkId, NavType navType,
|
|
|
+ Map<String, List<DateValue>> allNavMap, Map<String, Frequency> secFreqMap) {
|
|
|
+ return this.getMultiSecRetListNew(mainSecIdList, indexIdList, frequency, rollingFrequency, startDate, endDate, ifExcessReturn,
|
|
|
+ benchmarkId, RaiseType.Both, Strategy.All, Visibility.Both, navType, allNavMap, secFreqMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<String, List<IndicatorCalcPropertyDto>> getMultiSecRetListNew(List<String> mainSecIdList, List<String> indexIdList, Frequency frequency,
|
|
|
+ Frequency rollingFrequency, String startDate, String endDate,
|
|
|
boolean ifExcessReturn, String benchmarkId, RaiseType raiseType, IStrategy strategy,
|
|
|
Visibility visibility, NavType navType,
|
|
|
- Map<String, List<DateValue>> allNavMap, Map<String, Frequency> secFreqMap, List<IndexesTradeDate> tradeDates) {
|
|
|
+ Map<String, List<DateValue>> allNavMap, Map<String, Frequency> secFreqMap) {
|
|
|
List<DateIntervalDto> dateIntervalDtoList = ListUtil.list(false);
|
|
|
DateIntervalDto defaultIntervalDto = new DateIntervalDto();
|
|
|
defaultIntervalDto.setStartDate(startDate);
|
|
@@ -310,191 +454,9 @@ public class IndicatorService {
|
|
|
calcMultipleSecMultipleTimeRangeIndicatorReq.setNeedExtraRet(false);
|
|
|
calcMultipleSecMultipleTimeRangeIndicatorReq.setIfConvertPerformanceConsistencyWord(true);
|
|
|
|
|
|
- return calcMultipleSecMultipleTimeRangeIndicator(calcMultipleSecMultipleTimeRangeIndicatorReq, allNavMap, secFreqMap, tradeDates);
|
|
|
+ return calcMultipleSecMultipleTimeRangeIndicator(calcMultipleSecMultipleTimeRangeIndicatorReq, allNavMap, secFreqMap);
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
-// public Map<Integer, Map<String, String>> calcMultipleSecMultipleTimeRangeIndicator(List<String> mainSecIdList, List<Integer> idList, Map<String, String> idBenchmarkMap, List<String> indexIdList,
|
|
|
-// Map<String, DateIntervalDto> idDateIntervalDtoMap, Map<String, Frequency> idNavFrequencyMap,
|
|
|
-// Map<String, Frequency> idCalcFrequencyMap, Map<String, NavType> idNavTypeMap,
|
|
|
-// Map<String, List<Indicator>> idIndicatorListMap, Map<String, List<Indicator>> idGeoExtraindicatorListMap,
|
|
|
-// Map<String, String> idRiskOfFreeIdMap, Map<String, Double> idRiskOfFreeValueMap, Map<String, Benchmark> benchmarkMap) {
|
|
|
-//
|
|
|
-// List<String> benchmarkIdList = ListUtil.list(false);
|
|
|
-// for (Map.Entry<String, String> secBenchmarkIdMapEntry : idBenchmarkMap.entrySet()) {
|
|
|
-// String benchmarkId = secBenchmarkIdMapEntry.getValue();
|
|
|
-// if (BenchmarkConfig.rz_strategy.name().equals(benchmarkId)) {
|
|
|
-// for (Map.Entry<String, Benchmark> benchmarkMapEntry : benchmarkMap.entrySet()) {
|
|
|
-// String bk = benchmarkMapEntry.getValue().getBenchmarkId();
|
|
|
-// if (StringUtils.isNotEmpty(bk) && !benchmarkIdList.contains(bk)) {
|
|
|
-// benchmarkIdList.add(bk);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else if (BenchmarkConfig.rz_bfi.name().equals(benchmarkId)) {
|
|
|
-// for (Map.Entry<String, Benchmark> benchmarkMapEntry : benchmarkMap.entrySet()) {
|
|
|
-// String bk = benchmarkMapEntry.getValue().getRZIndexId();
|
|
|
-// if (StringUtils.isNotEmpty(bk) && !benchmarkIdList.contains(bk)) {
|
|
|
-// benchmarkIdList.add(bk);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// } else {
|
|
|
-// if (StringUtils.isNotEmpty(benchmarkId) && !benchmarkIdList.contains(benchmarkId)) {
|
|
|
-// benchmarkIdList.add(benchmarkId);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<NavType> navTypeList = ListUtil.list(false);
|
|
|
-// Map<NavType, List<String>> navTypeIdListMap = new HashMap<>();
|
|
|
-// for (Map.Entry<String, NavType> idNavTypeMapEntry : idNavTypeMap.entrySet()) {
|
|
|
-// NavType value = idNavTypeMapEntry.getValue();
|
|
|
-// if (!navTypeIdListMap.containsKey(value)) {
|
|
|
-// List<String> list = ListUtil.list(false);
|
|
|
-// list.add(idNavTypeMapEntry.getKey());
|
|
|
-// navTypeIdListMap.put(value, list);
|
|
|
-// } else {
|
|
|
-// navTypeIdListMap.get(value).add(idNavTypeMapEntry.getKey());
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<String> riskOfFreeIdList = ListUtil.list(false);
|
|
|
-// for (Map.Entry<String, String> idRiskOfFreeIdMapEntry : idRiskOfFreeIdMap.entrySet()) {
|
|
|
-// String value = idRiskOfFreeIdMapEntry.getValue();
|
|
|
-// if (StringUtils.isNotEmpty(value) && !riskOfFreeIdList.contains(value)) {
|
|
|
-// riskOfFreeIdList.add(value);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// benchmarkIdList.addAll(riskOfFreeIdList);
|
|
|
-//
|
|
|
-// Map<NavType, Map<String, List<DateValue>>> navTypeAllNavMapMap = new HashMap<>();
|
|
|
-// for (Map.Entry<NavType, List<String>> navTypeIdListMapEntry : navTypeIdListMap.entrySet()) {
|
|
|
-// Map<String, List<DateValue>> allNavList = navService.getSecIdDateValueNavListMapFromRedisAndDB(navTypeIdListMapEntry.getValue(), benchmarkIdList, indexIdList,
|
|
|
-// null, null, NavType.CumulativeNav, Visibility.Both, 1, 0, new HashMap<>(), false, null);
|
|
|
-// navTypeAllNavMapMap.put(navTypeIdListMapEntry.getKey(), allNavList);
|
|
|
-// }
|
|
|
-//
|
|
|
-// Map<String, Frequency> secDefaultFrequency = fundInformationDao.getNavFrequency(mainSecIdList);
|
|
|
-//
|
|
|
-// Map<String, Map<Frequency, List<DateValue>>> secFreValidMainSecNavListMapMap = new HashMap<>();
|
|
|
-//
|
|
|
-// Map<Integer, Map<String, String>> result = new HashMap<>();
|
|
|
-// for (Integer id : idList) {
|
|
|
-// String idStr = id + "";
|
|
|
-// String benchmarkId = idBenchmarkMap.get(idStr);
|
|
|
-// NavType navType = idNavTypeMap.get(idStr);
|
|
|
-// Map<String, List<DateValue>> allNavMap = navTypeAllNavMapMap.get(navType);
|
|
|
-// String riskOfFreeId = idRiskOfFreeIdMap.get(idStr);
|
|
|
-//
|
|
|
-// Double riskOfFreeValue = idRiskOfFreeValueMap.get(idStr);
|
|
|
-//
|
|
|
-// Frequency navFrequency = idNavFrequencyMap.get(idStr);
|
|
|
-// Frequency calcFrequency = idCalcFrequencyMap.get(idStr);
|
|
|
-//
|
|
|
-// List<Indicator> indicatorList = idIndicatorListMap.get(idStr);
|
|
|
-// List<Indicator> geoExtraindicatorList = idGeoExtraindicatorListMap.get(idStr);
|
|
|
-//
|
|
|
-// Map<String, String> secIdValueMap = new HashMap<>();
|
|
|
-// for (String mainSecId : mainSecIdList) {
|
|
|
-// if (StringUtils.isNotEmpty(benchmarkId)) {
|
|
|
-// Benchmark benchmark = benchmarkMap.get(mainSecId);
|
|
|
-// if (BenchmarkConfig.rz_strategy.name().equals(benchmarkId)) {
|
|
|
-// if (benchmark != null) {
|
|
|
-// benchmarkId = benchmark.getBenchmarkId();
|
|
|
-// }
|
|
|
-// } else if (BenchmarkConfig.rz_bfi.name().equals(benchmarkId)) {
|
|
|
-// if (benchmark != null) {
|
|
|
-// benchmarkId = benchmark.getRZIndexId();
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// Map<String, List<DateValue>> secAllNavMap = new HashMap();
|
|
|
-// secAllNavMap.put(mainSecId, NavUtil.getNewNavList(allNavMap.get(mainSecId)));
|
|
|
-// secAllNavMap.put(benchmarkId, NavUtil.getNewNavList(allNavMap.get(benchmarkId)));
|
|
|
-// for (String indexId : indexIdList) {
|
|
|
-// secAllNavMap.put(indexId, NavUtil.getNewNavList(allNavMap.get(indexId)));
|
|
|
-// }
|
|
|
-// if (StringUtils.isNotEmpty(riskOfFreeId)) {
|
|
|
-// secAllNavMap.put(riskOfFreeId, NavUtil.getNewNavList(allNavMap.get(riskOfFreeId)));
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<IndicatorCalcPropertyDto> indicatorCalcPropertyDtoList = ListUtil.list(false);
|
|
|
-//
|
|
|
-// List<DateValue> mainSecIdNavList = secAllNavMap.get(mainSecId);
|
|
|
-//
|
|
|
-// String theFirstNavDate = "";
|
|
|
-// String theLastNavDate = "";
|
|
|
-// if (mainSecIdNavList != null && mainSecIdNavList.size() > 0) {
|
|
|
-// theFirstNavDate = mainSecIdNavList.get(0).getDate();
|
|
|
-// theLastNavDate = mainSecIdNavList.get(mainSecIdNavList.size() - 1).getDate();
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<IndexesTradeDateDo> indexesTradeDateDoList = TradeDateUtil.listInfoByDateInterval(theFirstNavDate, theLastNavDate);
|
|
|
-//
|
|
|
-// List<DateValue> validMainSecNavList = null;
|
|
|
-// if (secFreValidMainSecNavListMapMap.containsKey(mainSecId)) {
|
|
|
-// Map<Frequency, List<DateValue>> frequencyListMap = secFreValidMainSecNavListMapMap.get(mainSecId);
|
|
|
-// if (frequencyListMap.containsKey(navFrequency)) {
|
|
|
-// validMainSecNavList = frequencyListMap.get(navFrequency);
|
|
|
-// secAllNavMap.put(mainSecId, NavUtil.getNewNavList(validMainSecNavList));
|
|
|
-// } else {
|
|
|
-// validMainSecNavList = NavUtil.filterFrequencyNav(mainSecIdNavList, indexesTradeDateDoList, navFrequency);
|
|
|
-// secAllNavMap.put(mainSecId, NavUtil.getNewNavList(validMainSecNavList));
|
|
|
-// frequencyListMap.put(navFrequency, validMainSecNavList);
|
|
|
-// }
|
|
|
-// } else {
|
|
|
-// validMainSecNavList = NavUtil.filterFrequencyNav(mainSecIdNavList, indexesTradeDateDoList, navFrequency);
|
|
|
-// secAllNavMap.put(mainSecId, NavUtil.getNewNavList(validMainSecNavList));
|
|
|
-// Map<Frequency, List<DateValue>> freValidMainSecNavListMap = new HashMap<>();
|
|
|
-// freValidMainSecNavListMap.put(navFrequency, validMainSecNavList);
|
|
|
-// secFreValidMainSecNavListMapMap.put(mainSecId, freValidMainSecNavListMap);
|
|
|
-// }
|
|
|
-//
|
|
|
-// Frequency defaultFrequency = secDefaultFrequency.get(mainSecId);
|
|
|
-//
|
|
|
-// DateIntervalDto dateIntervalDto = idDateIntervalDtoMap.get(idStr);
|
|
|
-//
|
|
|
-// List<IndicatorCalcTimeRangeDto> indicatorCalcTimeRangeDtoList = DateIntervalUtil.getIndicatorCalcTimeRangeDto(dateIntervalDto, secAllNavMap.get(mainSecId), indexesTradeDateDoList
|
|
|
-// , dateIntervalDto.getId());
|
|
|
-// for (IndicatorCalcTimeRangeDto indicatorCalcTimeRangeDto : indicatorCalcTimeRangeDtoList) {
|
|
|
-//
|
|
|
-// Map<String, List<DateValue>> dateSecAllNavMap = new HashMap();
|
|
|
-// dateSecAllNavMap.put(mainSecId, NavUtil.getNewNavList(secAllNavMap.get(mainSecId)));
|
|
|
-// dateSecAllNavMap.put(benchmarkId, NavUtil.getNewNavList(secAllNavMap.get(benchmarkId)));
|
|
|
-// for (String indexId : indexIdList) {
|
|
|
-// dateSecAllNavMap.put(indexId, NavUtil.getNewNavList(secAllNavMap.get(indexId)));
|
|
|
-// }
|
|
|
-// if (StringUtils.isNotEmpty(riskOfFreeId)) {
|
|
|
-// dateSecAllNavMap.put(riskOfFreeId, NavUtil.getNewNavList(secAllNavMap.get(riskOfFreeId)));
|
|
|
-// }
|
|
|
-//
|
|
|
-// IndicatorCalcReqPropertyDto indicatorCalcReq = prepareIndicatorCalcReq(mainSecId, benchmarkId, indexIdList, indicatorCalcTimeRangeDto,
|
|
|
-// dateSecAllNavMap, riskOfFreeId, riskOfFreeValue, null, calcFrequency, defaultFrequency, indicatorList, geoExtraindicatorList, true, true,
|
|
|
-// false, false, true);
|
|
|
-//
|
|
|
-// IndicatorCalcPropertyDto indicatorCalcPropertyDto = calcService.indicatorCalc(indicatorCalcReq);
|
|
|
-//
|
|
|
-// indicatorCalcPropertyDtoList.add(indicatorCalcPropertyDto);
|
|
|
-// }
|
|
|
-//
|
|
|
-// String value = null;
|
|
|
-// if (indicatorCalcPropertyDtoList != null && indicatorCalcPropertyDtoList.size() > 0) {
|
|
|
-// IndicatorCalcPropertyDto indicatorCalcPropertyDto = indicatorCalcPropertyDtoList.get(0);
|
|
|
-// if (indicatorList.size() > 0) {
|
|
|
-// value = indicatorCalcPropertyDto.getSecData().getIndicatorValueMap().get(indicatorList.get(0).name());
|
|
|
-// } else {
|
|
|
-// value = indicatorCalcPropertyDto.getSecData().getExtraGeoIndicatorValueMap().get(geoExtraindicatorList.get(0).name());
|
|
|
-// }
|
|
|
-// }
|
|
|
-// secIdValueMap.put(mainSecId, value);
|
|
|
-// }
|
|
|
-//
|
|
|
-// result.put(id, secIdValueMap);
|
|
|
-// }
|
|
|
-//
|
|
|
-// return result;
|
|
|
-// }
|
|
|
-
|
|
|
private IndicatorCalcReqPropertyDto prepareTrendReq(String mainSecId, String benchmarkId, List<String> indexList, IndicatorCalcTimeRangeDto indicatorCalcTimeRangeDto,
|
|
|
Map<String, List<DateValue>> allNavMap, Frequency frequency, Frequency defaultFrequency,
|
|
|
List<TrendType> trendTypeV2List, BigDecimal fixedIncome, BigDecimal initValue) {
|