From fc5a1be7e183f2c2634e8ee6c2ef53ee5808bf3e Mon Sep 17 00:00:00 2001 From: yanweidonog Date: Fri, 27 Feb 2026 13:26:22 +0800 Subject: [PATCH] fix bug --- cmd/total/main.go | 4 ---- internal/logic/mock/order.go | 2 +- internal/logic/restful/recommend.go | 22 ++++++++++--------- internal/logic/restful/starter.go | 21 ++++++++++++++++--- internal/logic/strategy/boot.go | 5 +++-- internal/logic/strategy/rule/amount.go | 2 +- internal/logic/strategy/total.go | 29 ++++++++++---------------- internal/models/strat_model.go | 2 +- 8 files changed, 47 insertions(+), 40 deletions(-) diff --git a/cmd/total/main.go b/cmd/total/main.go index 3c8d12e..14ddbcf 100644 --- a/cmd/total/main.go +++ b/cmd/total/main.go @@ -3,7 +3,6 @@ package main import ( "git.apinb.com/quant/gostock/internal/config" "git.apinb.com/quant/gostock/internal/impl" - "git.apinb.com/quant/gostock/internal/logic/strategy" ) var ( @@ -13,9 +12,6 @@ var ( func main() { config.New(ServiceKey) impl.NewImpl() - - ymd := lastYmd() - strategy.TotalScore(ymd) } func lastYmd() int { diff --git a/internal/logic/mock/order.go b/internal/logic/mock/order.go index c3b548e..6300e34 100644 --- a/internal/logic/mock/order.go +++ b/internal/logic/mock/order.go @@ -12,7 +12,7 @@ import ( func Run(key string, ymd int) { log.Println("Run Mock Order.") var stocks []*models.StratModel - impl.DBService.Where("strat_key=? and ymd=? and rsi_score>0 and macd_score>0 and ai_score>=?", key, ymd, 5).Find(&stocks) + impl.DBService.Where("strat_key=? and ymd=? and status=2 and ai_score>=?", key, ymd, 5).Find(&stocks) if len(stocks) == 0 { log.Println("No data to process.") return diff --git a/internal/logic/restful/recommend.go b/internal/logic/restful/recommend.go index fc52e29..fbec6e1 100644 --- a/internal/logic/restful/recommend.go +++ b/internal/logic/restful/recommend.go @@ -1,23 +1,25 @@ package restful import ( + "git.apinb.com/bsm-sdk/core/utils" "git.apinb.com/quant/gostock/internal/impl" - "git.apinb.com/quant/gostock/internal/logic/strategy" "git.apinb.com/quant/gostock/internal/models" "github.com/gin-gonic/gin" ) func Recommend(ctx *gin.Context) { - ymd := lastYmd() - strategy.TotalScore(ymd) + ymdQuery := ctx.DefaultQuery("ymd", "") + var ymd int + if ymdQuery != "" { + ymd = utils.String2Int(ymdQuery) + } + + if ymd == 0 { + ymd = models.GetYmd() + } + var stocks []string - impl.DBService.Model(&models.StratModel{}).Where("total_score>?", 0).Pluck("code", &stocks) + impl.DBService.Model(&models.StratModel{}).Where("status=2 and ai_score>=5 and ymd=?", ymd).Pluck("code", &stocks) ctx.JSON(200, stocks) return } -func lastYmd() int { - var ymd int - sql := "select ymd from strat_model sm group by ymd order by ymd desc limit 1" - impl.DBService.Raw(sql).Scan(&ymd) - return ymd -} diff --git a/internal/logic/restful/starter.go b/internal/logic/restful/starter.go index aa6d054..8d6f261 100644 --- a/internal/logic/restful/starter.go +++ b/internal/logic/restful/starter.go @@ -67,19 +67,34 @@ func Starter(ctx *gin.Context) { var allowStocks []*models.StratModel impl.DBService.Model(&models.StratModel{}).Where("status=1 and ymd=?", ymd).Find(&allowStocks) for _, m := range allowStocks { + upd := map[string]any{ + "recommend_desc": "策略规则", + } // CTA:RSI指标贴近下轨并成上涨趋势 rsiResult := indicator.RunRsi(m.Code) - impl.DBService.Model(m).Where("id=?", m.ID).Updates(map[string]any{"rsi_score": rsiResult.Score, "rsi_val_oversold": rsiResult.Oversold, "rsi_val_prve": rsiResult.Prve, "rsi_val_last": rsiResult.Last, "recommend_desc": m.RecommendDesc + "||Rsi:" + rsiResult.Desc}) + upd["rsi_score"] = rsiResult.Score + upd["rsi_val_oversold"] = rsiResult.Oversold + upd["rsi_val_prve"] = rsiResult.Prve + upd["rsi_val_last"] = rsiResult.Last + upd["total_desc"] = m.TotalDesc + "||Rsi:" + rsiResult.Desc // CTA:MACD指标红绿柱及价量关系 macdResult := indicator.RunMacd(m.Code) - impl.DBService.Model(m).Where("id=?", m.ID).Updates(map[string]any{"macd_score": macdResult.Score, "macd_val": macdResult.Val, "recommend_desc": m.RecommendDesc + "||Macd:" + macdResult.Desc}) + upd["macd_score"] = macdResult.Score + upd["macd_val"] = macdResult.Val + upd["total_desc"] = upd["total_desc"].(string) + "||Macd:" + macdResult.Desc + + // 更新数据 + impl.DBService.Model(&models.StratModel{}).Where("id=?", m.ID).Updates(upd) } + // 将满足条件的状态标记为2,待AI分析 + impl.DBService.Model(&models.StratModel{}).Where("ymd=? and rsi_score>0 and macd_score>0 and status=1", ymd).Updates(map[string]any{"status": 2}) + // 加入资金流向特大的标的 var codes []string impl.DBService.Model(&models.MoneyTotal{}).Where("is_greater_pervious = ? and last3_day_mf_amount>?", true, 100000).Pluck("code", &codes) - impl.DBService.Model(&models.StratModel{}).Where("ai_score=-2 and code in ?", codes).Updates(map[string]any{"ai_score": 0, "recommend_desc": "资金流向"}) + impl.DBService.Model(&models.StratModel{}).Where("ymd=? and code in ?", ymd, codes).Updates(map[string]any{"status": 2, "recommend_desc": "资金流向"}) // Todo: 舆论分析得出的标的 diff --git a/internal/logic/strategy/boot.go b/internal/logic/strategy/boot.go index 3f0415e..b5b9a78 100644 --- a/internal/logic/strategy/boot.go +++ b/internal/logic/strategy/boot.go @@ -16,7 +16,7 @@ func Boot() { // 启动 AI 分析任务 func BootAiStart(key string, ymd int) error { var datas []models.StratModel - err := impl.DBService.Where("strat_key=? and ymd=? and ai_score=0 and rsi_score>0 and macd_score>0", key, ymd).Find(&datas).Error + err := impl.DBService.Where("strat_key=? and ymd=? and status=2", key, ymd).Find(&datas).Error if err != nil { log.Printf("Failed to query data: %v", err) return fmt.Errorf("query failed: %w", err) @@ -25,8 +25,9 @@ func BootAiStart(key string, ymd int) error { // 构造任务列表 var tasks []func() for _, row := range datas { + r := row tasks = append(tasks, func() { - BootAiTask(row.ID, row.Code) + BootAiTask(r.ID, r.Code) }) } diff --git a/internal/logic/strategy/rule/amount.go b/internal/logic/strategy/rule/amount.go index 87a4325..c1fdafc 100644 --- a/internal/logic/strategy/rule/amount.go +++ b/internal/logic/strategy/rule/amount.go @@ -21,7 +21,7 @@ func (r *RuleFactory) RunAmount(code string) { check := true for _, row := range data { - if row.Amount < MinPrice { + if row.Amount < MinAmount { check = false break } diff --git a/internal/logic/strategy/total.go b/internal/logic/strategy/total.go index 012b808..01668ad 100644 --- a/internal/logic/strategy/total.go +++ b/internal/logic/strategy/total.go @@ -1,21 +1,14 @@ package strategy -import ( - "log" +// func TotalScore(ymd int) { +// log.Println("Total Score", ymd) +// where := " where up_date_day>360 and ymd=" + utils.Int2String(ymd) +// sql := "update strat_model set total_score=industry_score+st_score+gt_amount+gt_price+roe_score+rsi_score" + where - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/quant/gostock/internal/impl" -) - -func TotalScore(ymd int) { - log.Println("Total Score", ymd) - where := " where up_date_day>360 and ymd=" + utils.Int2String(ymd) - sql := "update strat_model set total_score=industry_score+st_score+gt_amount+gt_price+roe_score+rsi_score" + where - - log.Println("SQL:", sql) - err := impl.DBService.Exec(sql).Error - if err != nil { - log.Println("Failed to update total score:", err) - return - } -} +// log.Println("SQL:", sql) +// err := impl.DBService.Exec(sql).Error +// if err != nil { +// log.Println("Failed to update total score:", err) +// return +// } +// } diff --git a/internal/models/strat_model.go b/internal/models/strat_model.go index 896583b..0aa2c12 100644 --- a/internal/models/strat_model.go +++ b/internal/models/strat_model.go @@ -24,7 +24,7 @@ type StratModel struct { RoeScore int // ROE 是否大于设定值 ValRoe float64 // ROE 值 RecommendDesc string // 推荐描述 - Status int // 状态 -1:不推荐,0:正常 1:推荐 + Status int // 状态 -1:不推荐,0:未处理, 1:推荐待指标分析, 2:待AI分析 // macd MacdScore int `gorm:"default:0"`