fix bug
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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: 舆论分析得出的标的
|
||||
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user