|
@@ -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
|