fix bug
This commit is contained in:
@@ -3,7 +3,6 @@ package main
|
|||||||
import (
|
import (
|
||||||
"git.apinb.com/quant/gostock/internal/config"
|
"git.apinb.com/quant/gostock/internal/config"
|
||||||
"git.apinb.com/quant/gostock/internal/impl"
|
"git.apinb.com/quant/gostock/internal/impl"
|
||||||
"git.apinb.com/quant/gostock/internal/logic/strategy"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -13,9 +12,6 @@ var (
|
|||||||
func main() {
|
func main() {
|
||||||
config.New(ServiceKey)
|
config.New(ServiceKey)
|
||||||
impl.NewImpl()
|
impl.NewImpl()
|
||||||
|
|
||||||
ymd := lastYmd()
|
|
||||||
strategy.TotalScore(ymd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func lastYmd() int {
|
func lastYmd() int {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
func Run(key string, ymd int) {
|
func Run(key string, ymd int) {
|
||||||
log.Println("Run Mock Order.")
|
log.Println("Run Mock Order.")
|
||||||
var stocks []*models.StratModel
|
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 {
|
if len(stocks) == 0 {
|
||||||
log.Println("No data to process.")
|
log.Println("No data to process.")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,23 +1,25 @@
|
|||||||
package restful
|
package restful
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"git.apinb.com/bsm-sdk/core/utils"
|
||||||
"git.apinb.com/quant/gostock/internal/impl"
|
"git.apinb.com/quant/gostock/internal/impl"
|
||||||
"git.apinb.com/quant/gostock/internal/logic/strategy"
|
|
||||||
"git.apinb.com/quant/gostock/internal/models"
|
"git.apinb.com/quant/gostock/internal/models"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Recommend(ctx *gin.Context) {
|
func Recommend(ctx *gin.Context) {
|
||||||
ymd := lastYmd()
|
ymdQuery := ctx.DefaultQuery("ymd", "")
|
||||||
strategy.TotalScore(ymd)
|
var ymd int
|
||||||
|
if ymdQuery != "" {
|
||||||
|
ymd = utils.String2Int(ymdQuery)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ymd == 0 {
|
||||||
|
ymd = models.GetYmd()
|
||||||
|
}
|
||||||
|
|
||||||
var stocks []string
|
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)
|
ctx.JSON(200, stocks)
|
||||||
return
|
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
|
var allowStocks []*models.StratModel
|
||||||
impl.DBService.Model(&models.StratModel{}).Where("status=1 and ymd=?", ymd).Find(&allowStocks)
|
impl.DBService.Model(&models.StratModel{}).Where("status=1 and ymd=?", ymd).Find(&allowStocks)
|
||||||
for _, m := range allowStocks {
|
for _, m := range allowStocks {
|
||||||
|
upd := map[string]any{
|
||||||
|
"recommend_desc": "策略规则",
|
||||||
|
}
|
||||||
// CTA:RSI指标贴近下轨并成上涨趋势
|
// CTA:RSI指标贴近下轨并成上涨趋势
|
||||||
rsiResult := indicator.RunRsi(m.Code)
|
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指标红绿柱及价量关系
|
// CTA:MACD指标红绿柱及价量关系
|
||||||
macdResult := indicator.RunMacd(m.Code)
|
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
|
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.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: 舆论分析得出的标的
|
// Todo: 舆论分析得出的标的
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func Boot() {
|
|||||||
// 启动 AI 分析任务
|
// 启动 AI 分析任务
|
||||||
func BootAiStart(key string, ymd int) error {
|
func BootAiStart(key string, ymd int) error {
|
||||||
var datas []models.StratModel
|
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 {
|
if err != nil {
|
||||||
log.Printf("Failed to query data: %v", err)
|
log.Printf("Failed to query data: %v", err)
|
||||||
return fmt.Errorf("query failed: %w", err)
|
return fmt.Errorf("query failed: %w", err)
|
||||||
@@ -25,8 +25,9 @@ func BootAiStart(key string, ymd int) error {
|
|||||||
// 构造任务列表
|
// 构造任务列表
|
||||||
var tasks []func()
|
var tasks []func()
|
||||||
for _, row := range datas {
|
for _, row := range datas {
|
||||||
|
r := row
|
||||||
tasks = append(tasks, func() {
|
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
|
check := true
|
||||||
for _, row := range data {
|
for _, row := range data {
|
||||||
if row.Amount < MinPrice {
|
if row.Amount < MinAmount {
|
||||||
check = false
|
check = false
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,14 @@
|
|||||||
package strategy
|
package strategy
|
||||||
|
|
||||||
import (
|
// func TotalScore(ymd int) {
|
||||||
"log"
|
// 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"
|
// log.Println("SQL:", sql)
|
||||||
"git.apinb.com/quant/gostock/internal/impl"
|
// err := impl.DBService.Exec(sql).Error
|
||||||
)
|
// if err != nil {
|
||||||
|
// log.Println("Failed to update total score:", err)
|
||||||
func TotalScore(ymd int) {
|
// return
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ type StratModel struct {
|
|||||||
RoeScore int // ROE 是否大于设定值
|
RoeScore int // ROE 是否大于设定值
|
||||||
ValRoe float64 // ROE 值
|
ValRoe float64 // ROE 值
|
||||||
RecommendDesc string // 推荐描述
|
RecommendDesc string // 推荐描述
|
||||||
Status int // 状态 -1:不推荐,0:正常 1:推荐
|
Status int // 状态 -1:不推荐,0:未处理, 1:推荐待指标分析, 2:待AI分析
|
||||||
|
|
||||||
// macd
|
// macd
|
||||||
MacdScore int `gorm:"default:0"`
|
MacdScore int `gorm:"default:0"`
|
||||||
|
|||||||
Reference in New Issue
Block a user