Ver código fonte

fix: 持仓分析图表顺序

hsun 6 meses atrás
pai
commit
0c356000e9
1 arquivos alterados com 11 adições e 46 exclusões
  1. 11 46
      services/data/trade_analysis/trade_analysis_data.go

+ 11 - 46
services/data/trade_analysis/trade_analysis_data.go

@@ -273,7 +273,7 @@ func GetOriginTradeData(exchange, classifyName string, contracts, companies []st
 	}
 
 	// 以[公司]为组, 计算合约加总
-	companyTradeData = make([]*tradeAnalysisModel.ContractCompanyTradeData, 0)
+	mussyTradeData := make(map[string]*tradeAnalysisModel.ContractCompanyTradeData)
 	for k, v := range companyContracts {
 		companyData := new(tradeAnalysisModel.ContractCompanyTradeData)
 		companyData.CompanyName = k
@@ -342,14 +342,22 @@ func GetOriginTradeData(exchange, classifyName string, contracts, companies []st
 			return companyData.DataList[i].Date.Before(companyData.DataList[j].Date)
 		})
 		companyData.ClassifyType = strings.Join(contractArr, ",")
-		companyTradeData = append(companyTradeData, companyData)
+		mussyTradeData[k] = companyData
+	}
+
+	// 数据根据公司排序, 不然会随机乱
+	companyTradeData = make([]*tradeAnalysisModel.ContractCompanyTradeData, 0)
+	for _, v := range companies {
+		if mussyTradeData[v] != nil {
+			companyTradeData = append(companyTradeData, mussyTradeData[v])
+		}
 	}
 	return
 }
 
 // PredictingTradeData 根据数据库中的多空数据填充预估数据
 func PredictingTradeData(originData []*tradeAnalysisModel.ContractCompanyTradeDataList, lastBuyDateVal, lastSoldDateVal map[time.Time]int, predictRatio float64) (newData []*tradeAnalysisModel.ContractCompanyTradeDataList, firstDate, endDate time.Time, err error) {
-	// TODO:测试用的验证数据
+	// 测试用的验证数据
 	//lastBuyDateVal, lastSoldDateVal = make(map[time.Time]int), make(map[time.Time]int)
 	//lastBuyDateVal[time.Date(2024, 7, 16, 0, 0, 0, 0, time.Local)] = 4602
 	//lastBuyDateVal[time.Date(2024, 7, 17, 0, 0, 0, 0, time.Local)] = 5116
@@ -445,43 +453,6 @@ func PredictingTradeData(originData []*tradeAnalysisModel.ContractCompanyTradeDa
 		dateVal[v.Date] = v
 	}
 
-	// 末位补充-计算净多函数
-	//fillingFunc := func(dateData map[time.Time]*tradeAnalysisModel.ContractCompanyTradeDataList, lastBuyMap, lastSoldMap map[time.Time]int, currDate time.Time) map[time.Time]*tradeAnalysisModel.ContractCompanyTradeDataList {
-	//	// 多空均有的情况下计算净多单
-	//	if dateData[currDate].BuyVal != nil && dateData[currDate].SoldVal != nil {
-	//		pureVal := *dateData[currDate].BuyVal - *dateData[currDate].SoldVal
-	//		dateData[currDate].PureBuyVal = &pureVal
-	//		dateData[currDate].PureBuyValType = 0 // 原始值算出来的
-	//	}
-	//
-	//	// 仅有多单, 空单取末位
-	//	if dateData[currDate].BuyVal != nil && dateData[currDate].SoldVal == nil {
-	//		if sv, ok := lastSoldMap[currDate]; ok {
-	//			soldVal := int(predictRatio*float64(sv) + 0.5) // 估计参数*末位值, 向上取整
-	//			dateData[currDate].SoldVal = &soldVal
-	//			dateData[currDate].SoldValType = 1
-	//			// 计算净多单
-	//			pureVal := *dateData[currDate].BuyVal - *dateData[currDate].SoldVal
-	//			dateData[currDate].PureBuyVal = &pureVal
-	//			dateData[currDate].PureBuyValType = 1
-	//		}
-	//	}
-	//
-	//	// 仅有空单, 多单取末位
-	//	if dateData[currDate].SoldVal != nil && dateData[currDate].BuyVal == nil {
-	//		if sv, ok := lastBuyMap[currDate]; ok {
-	//			buyVal := int(predictRatio*float64(sv) + 0.5) // 估计参数*末位值, 向上取整
-	//			dateData[currDate].BuyVal = &buyVal
-	//			dateData[currDate].BuyValType = 1
-	//			// 计算净多单
-	//			pureVal := *dateData[currDate].BuyVal - *dateData[currDate].SoldVal
-	//			dateData[currDate].PureBuyVal = &pureVal
-	//			dateData[currDate].PureBuyValType = 1
-	//		}
-	//	}
-	//	return dateData
-	//}
-
 	// 生成开始日期-1d(可能会往前面推算一天)至结束日期间的交易日, 以交易日为时间序列遍历
 	tradeDays := utils.GetTradingDays(originData[0].Date.AddDate(0, 0, -1), originData[len(originData)-1].Date)
 	for k, v := range tradeDays {
@@ -548,14 +519,8 @@ func PredictingTradeData(originData []*tradeAnalysisModel.ContractCompanyTradeDa
 				}
 				continue
 			}
-
-			// 通过原始值可以推出来, 那么补充数据
-			//fillingFunc(dateVal, lastBuyDateVal, lastSoldDateVal, v)
-			//continue
 		}
 
-		//fillingFunc(dateVal, lastBuyDateVal, lastSoldDateVal, v)
-
 		// 多空均有的情况下计算净多单
 		if dateVal[v].BuyValType == tradeAnalysisModel.TradeDataTypeOrigin && dateVal[v].SoldValType == tradeAnalysisModel.TradeDataTypeOrigin {
 			dateVal[v].PureBuyVal = dateVal[v].BuyVal - dateVal[v].SoldVal