From e17421a2f3d9b60929d03f53401d711e2b357cc3 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Tue, 27 Jan 2026 02:09:44 +0800 Subject: [PATCH] deving --- cmd/cli/main.go | 17 +++++++-- internal/logic/strategy/data.go | 27 +++++++++++++++ internal/logic/strategy/result.go | 1 + internal/logic/strategy/rule/industry.go | 44 ++++++++++++++++++++++++ internal/logic/strategy/rule/st.go | 27 +++++++++++++++ internal/logic/strategy/rule/up_date.go | 21 +++++++++++ internal/logic/types/rule.go | 8 +++++ 7 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 internal/logic/strategy/data.go create mode 100644 internal/logic/strategy/result.go create mode 100644 internal/logic/strategy/rule/industry.go create mode 100644 internal/logic/strategy/rule/st.go create mode 100644 internal/logic/strategy/rule/up_date.go create mode 100644 internal/logic/types/rule.go diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 4805bb0..91b8039 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -1,13 +1,26 @@ package main -import "log" +import ( + "log" + + "git.apinb.com/bsm-sdk/core/printer" + "git.apinb.com/quant/gostock/internal/config" + "git.apinb.com/quant/gostock/internal/impl" + "git.apinb.com/quant/gostock/internal/logic/strategy" + "git.apinb.com/quant/gostock/internal/logic/strategy/rule" +) var ( - ServiceKey = "Restful" + ServiceKey = "gostock" ) func main() { log.Println("Hello Cli!") + config.New(ServiceKey) + impl.NewImpl() + data := strategy.GetData("000012.SZ") + result := rule.NewIdustry().Run(data.Basic.Industry) + printer.Json(result) log.Println("Done!") } diff --git a/internal/logic/strategy/data.go b/internal/logic/strategy/data.go new file mode 100644 index 0000000..049b62d --- /dev/null +++ b/internal/logic/strategy/data.go @@ -0,0 +1,27 @@ +package strategy + +import ( + "git.apinb.com/quant/gostock/internal/impl" + "git.apinb.com/quant/gostock/internal/models" +) + +type StockData struct { + Basic models.StockBasic + Daily []models.StockDaily + Indicator []models.StockIndicator + FinaIndicator []models.StockFinaIndicator +} + +func GetData(code string) *StockData { + var data StockData + impl.DBService.Where("ts_code = ?", code).First(&data.Basic) + impl.DBService.Where("ts_code = ?", code).Order("trade_date desc").Find(&data.Daily) + impl.DBService.Where("ts_code = ?", code).Order("trade_date desc").Find(&data.Indicator) + impl.DBService.Where("ts_code = ?", code).Order("period desc").Find(&data.FinaIndicator) + return &data +} + +func GetIndustry() (industry []string) { + impl.DBService.Model(&models.StockBasic{}).Group("industry").Pluck("industry", &industry) + return +} diff --git a/internal/logic/strategy/result.go b/internal/logic/strategy/result.go new file mode 100644 index 0000000..4271d52 --- /dev/null +++ b/internal/logic/strategy/result.go @@ -0,0 +1 @@ +package strategy diff --git a/internal/logic/strategy/rule/industry.go b/internal/logic/strategy/rule/industry.go new file mode 100644 index 0000000..83b5035 --- /dev/null +++ b/internal/logic/strategy/rule/industry.go @@ -0,0 +1,44 @@ +package rule + +import ( + "strings" + + "git.apinb.com/quant/gostock/internal/logic/types" +) + +var ( + // 热门行业 + hotIndustries = "半导体,软件服务,互联网,IT设备,通信设备,元器件,电气设备,汽车配件,汽车整车,生物制药,化学制药,中成药,医疗保健,环境保护,新型电力,仓储物流,小金属,黄金,航空,铅锌,铝,铜" + + // 夕阳行业 + sunsetIndustries = "全国地产,区域地产,房产服务,火力发电,煤炭开采,焦炭加工,普钢,钢加工,纺织,纺织机械,染料涂料,化纤,造纸,陶瓷,玻璃,百货,超市连锁,电器连锁,公路,铁路,出版业,摩托车" + + // 中性/周期型行业 + neutralIndustries = "银行,证券,保险,建筑工程,装修装饰,水泥,其他建材,化工原料,农药化肥,汽车服务,运输设备,旅游服务,酒店餐饮,旅游景点,食品,乳制品,白酒,啤酒,家用电器,家居用品,港口,水运,空运,农业综合,种植业,渔业,多元金融,工程机械,轻工机械,机械基件,机床制造,专用机械,化工机械,电器仪表,塑料,橡胶,化纤,服饰,日用化工,文教休闲,影视音像,广告包装,批发业,商贸代理,其他商业,商品城,电信运营,供气供热,软饮料,红黄酒,公共交通,机场,路桥,水力发电,石油加工,石油开采,石油贸易,园区开发,综合类,林业,特种钢" +) + +type Industry struct { + Key string + Name string +} + +func NewIdustry() *Industry { + return &Industry{ + Key: "industry", + Name: "行业", + } +} + +func (r *Industry) Run(in string) *types.RuleResult { + score := 0 + desc := "中性/周期型行业" + if strings.Contains(hotIndustries, in) { + score = 1 + desc = "热门行业" + } else if strings.Contains(sunsetIndustries, in) { + score = -1 + desc = "夕阳行业" + } + + return &types.RuleResult{Key: r.Key, Name: r.Name, Score: score, Desc: desc} +} diff --git a/internal/logic/strategy/rule/st.go b/internal/logic/strategy/rule/st.go new file mode 100644 index 0000000..034189d --- /dev/null +++ b/internal/logic/strategy/rule/st.go @@ -0,0 +1,27 @@ +package rule + +import ( + "strings" + + "git.apinb.com/quant/gostock/internal/logic/types" +) + +type ST struct { + Key string + Name string +} + +func NewST() *ST { + return &ST{ + Key: "ST", + Name: "ST", + } +} + +func (r *ST) Run(in string) *types.RuleResult { + if strings.Contains(in, "ST") { + return &types.RuleResult{Key: r.Key, Name: r.Name, Score: -1, Desc: "有退市风险"} + } + + return &types.RuleResult{Key: r.Key, Name: r.Name, Score: 1, Desc: "无退市风险"} +} diff --git a/internal/logic/strategy/rule/up_date.go b/internal/logic/strategy/rule/up_date.go new file mode 100644 index 0000000..a45fd1d --- /dev/null +++ b/internal/logic/strategy/rule/up_date.go @@ -0,0 +1,21 @@ +package rule + +import ( + "git.apinb.com/quant/gostock/internal/logic/types" +) + +type UpDate struct { + Key string + Name string +} + +func NewUpDate() *UpDate { + return &UpDate{ + Key: "UpDate", + Name: "上市时间", + } +} + +func (r *UpDate) Run(in string) *types.RuleResult { + return &types.RuleResult{Key: r.Key, Name: r.Name, Score: 0, Desc: "暂不计算"} +} diff --git a/internal/logic/types/rule.go b/internal/logic/types/rule.go new file mode 100644 index 0000000..6d09e85 --- /dev/null +++ b/internal/logic/types/rule.go @@ -0,0 +1,8 @@ +package types + +type RuleResult struct { + Key string + Name string + Score int + Desc string +}