|
@@ -411,7 +411,7 @@ func ProfitChartChartData(baseDataList []*models.EdbDataList, futureGoodEdbInfoM
|
|
|
xEdbInfoIdList := make([]int, 0) // 当前数据的指标id列表
|
|
|
|
|
|
// 现货指标
|
|
|
- realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, baseDataList, baseEdbDateData)
|
|
|
+ realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, baseDataList, baseEdbDateData, edbDataMap)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
@@ -437,7 +437,9 @@ func ProfitChartChartData(baseDataList []*models.EdbDataList, futureGoodEdbInfoM
|
|
|
//findDateTime
|
|
|
|
|
|
// 获取当前日期相对开始日期的期数
|
|
|
- tmpN := (currDate.Year()-findDateTime.Year())*12 + int(currDate.Month()-findDateTime.Month())
|
|
|
+ //tmpN := (currDate.Year()-findDateTime.Year())*12 + int(currDate.Month()-findDateTime.Month())
|
|
|
+ // 用实际日期的月份作为基准,往前推12个月(2024-5-13 16:26:43修改)
|
|
|
+ tmpN := (currDate.Year()-realDateTime.Year())*12 + int(currDate.Month()-realDateTime.Month())
|
|
|
if tmpN <= 0 {
|
|
|
continue
|
|
|
}
|
|
@@ -834,7 +836,7 @@ func GetFormulaMap() map[string]string {
|
|
|
}
|
|
|
|
|
|
// GetNeedDateData 获取合约内需要的日期数据
|
|
|
-func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edbDataMap map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
+func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edbDataMap map[string]float64, allEdbDataMap map[int]map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
//dataList := edbDataListMap[edbInfoId] //指标的所有数据值
|
|
|
if len(dataList) <= 0 {
|
|
|
// 没有数据的指标id
|
|
@@ -847,18 +849,43 @@ func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edb
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ // 该日期存在数据的期货指标的最小数量,目前是现货和期货各1个,总共2个
|
|
|
+ maxCount := 1
|
|
|
+
|
|
|
for tmpDateTime := needDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
|
|
|
tmpDate := tmpDateTime.Format(utils.FormatDate)
|
|
|
- if tmpValue, ok := edbDataMap[tmpDate]; ok { //如果能找到数据,那么就返回
|
|
|
- // 数据为0,也直接返回,做无值处理
|
|
|
- if tmpValue == 0 {
|
|
|
- return
|
|
|
+ tmpValue, ok := edbDataMap[tmpDate]
|
|
|
+ if !ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ // 该日期存在数据的指标数量
|
|
|
+ count := 0
|
|
|
+
|
|
|
+ for _, currEdbDataMap := range allEdbDataMap {
|
|
|
+ _, tmpIsFind := currEdbDataMap[tmpDate]
|
|
|
+ if tmpIsFind {
|
|
|
+ count++
|
|
|
+ if count >= maxCount {
|
|
|
+ continue
|
|
|
+ }
|
|
|
}
|
|
|
- findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
- findDataValue = tmpValue
|
|
|
- isFind = true
|
|
|
+ }
|
|
|
+
|
|
|
+ // 该日期存在数据的期货指标数量小于2个,那么要继续往前找
|
|
|
+ if count < maxCount {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果能找到数据,那么就返回
|
|
|
+ // 数据为0,也直接返回,做无值处理
|
|
|
+ if tmpValue == 0 {
|
|
|
return
|
|
|
}
|
|
|
+ findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
+ findDataValue = tmpValue
|
|
|
+ isFind = true
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
return
|