|
@@ -13,7 +13,7 @@ import (
|
|
|
|
|
|
// InitPositionTask 统计今日交易所的持仓分析数据
|
|
|
func InitPositionTask(cont context.Context) (err error) {
|
|
|
- exchanges := []string{"zhengzhou", "dalian", "shanghai", "cffex", "ine"} //郑商所,大商所,上期所,中金所,上期能源
|
|
|
+ exchanges := []string{"zhengzhou", "dalian", "shanghai", "cffex", "ine", "guangzhou"} //郑商所,大商所,上期所,中金所,上期能源,广期所
|
|
|
for i := 1; i >= 0; i-- {
|
|
|
startDate := time.Now().AddDate(0, 0, -i).Format(utils.FormatDate)
|
|
|
endDate := startDate
|
|
@@ -25,7 +25,110 @@ func InitPositionTask(cont context.Context) (err error) {
|
|
|
|
|
|
fmt.Println("开始" + startDate + "结束" + endDate)
|
|
|
utils.FileLog.Info(fmt.Sprintf("InitTradePosition:开始:%s; 结束:%s", startDate, endDate))
|
|
|
- tErr, errMsg := InitTradePosition(exchange, startDate, endDate)
|
|
|
+ var tradePosition TradePositionInterface
|
|
|
+ if exchange == "guangzhou" {
|
|
|
+ tradePosition = &GuangzhouTradePosition{}
|
|
|
+ } else {
|
|
|
+ tradePosition = &BaseTradePosition{}
|
|
|
+ }
|
|
|
+ tErr, errMsg := InitTradePosition(exchange, startDate, endDate, tradePosition)
|
|
|
+ if tErr != nil {
|
|
|
+ err = tErr
|
|
|
+ fmt.Println("InitTradePosition: 操作失败:" + errMsg + tErr.Error())
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("InitTradePosition: 操作失败:%s:%s", errMsg, tErr.Error()))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Println("InitTradePosition:" + exchange + "已完成")
|
|
|
+ utils.FileLog.Info("InitTradePosition:" + exchange + "已完成")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理交易所的分类
|
|
|
+ {
|
|
|
+ allBaseFromTradeClassify, tmpErr := data_manage.GetAllBaseFromTradeClassify()
|
|
|
+ if tmpErr != nil {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("获取所有交易所分类失败,;err:%s", tmpErr.Error()))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ tradeClassifyMap := make(map[string]*data_manage.BaseFromTradeClassify)
|
|
|
+ for _, v := range allBaseFromTradeClassify {
|
|
|
+ key := fmt.Sprintf("%s_%s_%s", v.Exchange, v.ClassifyName, v.ClassifyType)
|
|
|
+ tradeClassifyMap[key] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ baseFromTradeClassifyList := make([]*data_manage.BaseFromTradeClassify, 0)
|
|
|
+ for _, v := range exchanges {
|
|
|
+ tradeClassifyNameList, tmpErr := data_manage.GetExchangeClassify(v)
|
|
|
+ if tmpErr != nil {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("获取%s分类失败,;err:%s", v, tmpErr.Error()))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, classify := range tradeClassifyNameList {
|
|
|
+ key := fmt.Sprintf("%s_%s_%s", v, classify.ClassifyName, classify.ClassifyType)
|
|
|
+
|
|
|
+ if tradeClassify, ok := tradeClassifyMap[key]; !ok {
|
|
|
+ baseFromTradeClassifyList = append(baseFromTradeClassifyList, &data_manage.BaseFromTradeClassify{
|
|
|
+ Id: 0,
|
|
|
+ ClassifyName: classify.ClassifyName,
|
|
|
+ ClassifyType: classify.ClassifyType,
|
|
|
+ Exchange: v,
|
|
|
+ LatestDate: classify.DataTime,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ ModifyTime: classify.ModifyTime,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ if tradeClassify.LatestDate.Before(classify.DataTime) {
|
|
|
+ tradeClassify.LatestDate = classify.DataTime
|
|
|
+ tradeClassify.ModifyTime = classify.ModifyTime
|
|
|
+ tradeClassify.Update([]string{"LatestDate", "ModifyTime"})
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ lenAddList := len(baseFromTradeClassifyList)
|
|
|
+ if lenAddList > 0 {
|
|
|
+ baseAddNum := 500
|
|
|
+ num := lenAddList / baseAddNum
|
|
|
+ lastNum := lenAddList % baseAddNum
|
|
|
+ for i := 0; i <= num; i++ {
|
|
|
+ tmpNum := baseAddNum
|
|
|
+ if i == num && lastNum > 0 {
|
|
|
+ tmpNum = lastNum
|
|
|
+ }
|
|
|
+ data_manage.MultiAddBaseFromTradeClassify(baseFromTradeClassifyList[i*baseAddNum : (i*baseAddNum + tmpNum)])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// InitGuangzhouPositionTask 初始化广期所持仓分析排名情况
|
|
|
+func InitGuangzhouPositionTask() (err error) {
|
|
|
+ //exchanges := []string{"zhengzhou", "dalian", "shanghai", "cffex", "ine", "guangzhou"} //郑商所,大商所,上期所,中金所,上期能源
|
|
|
+ exchanges := []string{"guangzhou"} //郑商所,大商所,上期所,中金所,上期能源
|
|
|
+ for i := 0; i >= 0; i-- {
|
|
|
+ //startDate := time.Now().AddDate(0, 0, -i).Format(utils.FormatDate)
|
|
|
+ startDate := "2023-09-20"
|
|
|
+ endDate := startDate
|
|
|
+ for _, v := range exchanges {
|
|
|
+ exchange := v
|
|
|
+ err = nil
|
|
|
+ fmt.Println("InitPositionTask: 启动:" + exchange)
|
|
|
+ utils.FileLog.Info("InitPositionTask: 启动:" + exchange)
|
|
|
+
|
|
|
+ fmt.Println("开始" + startDate + "结束" + endDate)
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("InitTradePosition:开始:%s; 结束:%s", startDate, endDate))
|
|
|
+ var tradePosition TradePositionInterface
|
|
|
+ if exchange == "guangzhou" {
|
|
|
+ tradePosition = &GuangzhouTradePosition{}
|
|
|
+ } else {
|
|
|
+ tradePosition = &BaseTradePosition{}
|
|
|
+ }
|
|
|
+ tErr, errMsg := InitTradePosition(exchange, startDate, endDate, tradePosition)
|
|
|
if tErr != nil {
|
|
|
err = tErr
|
|
|
fmt.Println("InitTradePosition: 操作失败:" + errMsg + tErr.Error())
|
|
@@ -100,7 +203,7 @@ func InitPositionTask(cont context.Context) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg string) {
|
|
|
+func InitTradePosition(exchange, startDate, endDate string, tradePosition TradePositionInterface) (err error, errMsg string) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
tips := fmt.Sprintf("统计今日交易所的持仓分析数据失败, Exchange: %s, Err: %s, Msg: %s", exchange, err.Error(), errMsg)
|
|
@@ -119,7 +222,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
|
|
|
//数据存在不同步的情况,有些合约会提早更新,有些合约会延迟更新
|
|
|
//判断合约数是否一致
|
|
|
|
|
|
- originNum, tmpErr := data_manage.GetTradePositionOriginClassifyCountByExchangeDataTime(exchange, startDate, endDate)
|
|
|
+ originNum, tmpErr := tradePosition.GetTradePositionOriginClassifyCountByExchangeDataTime(exchange, startDate, endDate)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
errMsg = "查询原始数据分类个数失败,GetTradePositionOriginClassifyCountByExchangeDataTime() Err: "
|
|
@@ -142,7 +245,8 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
- err = data_manage.MultiInsertTradeBaseDataToTop(exchange, startDate, endDate)
|
|
|
+
|
|
|
+ err = tradePosition.MultiInsertTradeBaseDataToTop(exchange, startDate, endDate)
|
|
|
if err != nil {
|
|
|
errMsg = "新增原始数据失败,MultiInsertTradeBaseDataToTop() Err: "
|
|
|
return
|
|
@@ -167,7 +271,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
|
|
|
}
|
|
|
|
|
|
// 原始数据日期
|
|
|
- dates, e := data_manage.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
+ dates, e := tradePosition.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
if e != nil {
|
|
|
err = fmt.Errorf("GetTradePositionTopOriginDataTimes err: %s", e.Error())
|
|
|
return
|
|
@@ -258,13 +362,13 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
|
|
|
}
|
|
|
|
|
|
//生成净多单,净空单榜单
|
|
|
- err = createAnalysisCleanTop(exchange, startDate, endDate)
|
|
|
+ err = createAnalysisCleanTop(exchange, startDate, endDate, tradePosition)
|
|
|
if err != nil {
|
|
|
errMsg = "创建净多单,净空单数据失败,createAnalysisCleanTop() Err: "
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = DealYesterdayData(exchange, startDate)
|
|
|
+ err = DealYesterdayData(exchange, startDate, tradePosition)
|
|
|
if err != nil {
|
|
|
errMsg = "处理昨日数据失败,DealYesterdayData() Err: "
|
|
|
return
|
|
@@ -329,9 +433,9 @@ func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, o
|
|
|
}
|
|
|
|
|
|
// DealYesterdayData 更新昨日数据
|
|
|
-func DealYesterdayData(exchange, startDate string) (err error) {
|
|
|
+func DealYesterdayData(exchange, startDate string, tradePosition TradePositionInterface) (err error) {
|
|
|
// 查询最早的日期
|
|
|
- firstItem, err := data_manage.GetFirstBaseFromTradeIndexByDate(exchange)
|
|
|
+ firstItem, err := tradePosition.GetFirstBaseFromTradeIndexByDate(exchange)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -340,7 +444,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
|
|
|
}
|
|
|
|
|
|
// 前一个交易日, 前两个交易日
|
|
|
- dates, e := data_manage.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
+ dates, e := tradePosition.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
if e != nil {
|
|
|
err = fmt.Errorf("GetTradePositionTopOriginDataTimes err: %s", e.Error())
|
|
|
return
|
|
@@ -462,7 +566,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
|
|
|
}
|
|
|
|
|
|
//重新生成净多单和净空单的榜单
|
|
|
- err = createAnalysisCleanTop(exchange, yesterdayStr, yesterdayStr)
|
|
|
+ err = createAnalysisCleanTop(exchange, yesterdayStr, yesterdayStr, tradePosition)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -478,7 +582,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
|
|
|
}
|
|
|
|
|
|
// createAnalysisCleanTop 生成净多单,净空单榜单
|
|
|
-func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
|
|
|
+func createAnalysisCleanTop(exchange, startDate, endDate string, tradePosition TradePositionInterface) (err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
fmt.Println("createAnalysisCleanTop err: " + err.Error())
|
|
@@ -493,7 +597,7 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
|
|
|
subChangeMap2 := make(map[string]int) //净空单map
|
|
|
|
|
|
// 2023-05-10 此处取前一个交易日, 不一定是昨日
|
|
|
- dates, e := data_manage.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
+ dates, e := tradePosition.GetTradePositionTopOriginDataTimes(exchange)
|
|
|
if e != nil {
|
|
|
err = fmt.Errorf("GetTradePositionTopOriginDataTimes err: %s", e.Error())
|
|
|
return
|