From 03bcce800783ab52d0c0d08661b33072e1fb5430 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Fri, 30 Jan 2026 20:03:50 +0800 Subject: [PATCH] deving --- cmd/cli/main.go | 87 ++----------------------------- internal/logic/strategy/filter.go | 87 +++++++++++++++++++++++++++++++ internal/logic/types/rule.go | 9 ++++ 3 files changed, 101 insertions(+), 82 deletions(-) create mode 100644 internal/logic/strategy/filter.go diff --git a/cmd/cli/main.go b/cmd/cli/main.go index e4337f1..ac36ed0 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -3,13 +3,11 @@ package main import ( "log" "os" - "strings" "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" - "git.apinb.com/quant/gostock/internal/models" + "git.apinb.com/quant/gostock/internal/logic/types" "github.com/gocarina/gocsv" ) @@ -17,15 +15,6 @@ var ( ServiceKey = "gostock" ) -type ResultData struct { // Our example struct, you can use "-" to ignore a field - Code string `csv:"code"` - Name string `csv:"name"` - ROE float64 `csv:"roe"` - RSI float64 `csv:"rsi"` - Desc string `csv:"desc"` - Pass string `csv:"pass"` -} - func main() { log.Println("Hello Cli!") config.New(ServiceKey) @@ -39,11 +28,11 @@ func main2() { config.New(ServiceKey) impl.NewImpl() - data_ok := []*ResultData{} - data_not := []*ResultData{} + data_ok := []*types.ResultData{} + data_not := []*types.ResultData{} for _, code := range strategy.GetStocks() { basic := strategy.GetBasic(code) - if ok, data := RuleFilter(basic); ok { + if ok, data := strategy.MustFilter(basic); ok { data_ok = append(data_ok, data) } else { data_not = append(data_not, data) @@ -56,7 +45,7 @@ func main2() { log.Println("Done!") } -func WriteResults(data []*ResultData, tag string) { +func WriteResults(data []*types.ResultData, tag string) { rf, err := os.OpenFile("./result/stocks_"+tag+".csv", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) if err != nil { panic(err) @@ -69,69 +58,3 @@ func WriteResults(data []*ResultData, tag string) { } } - -func RuleFilter(basic *models.StockBasic) (bool, *ResultData) { - var descripts []string - data := &ResultData{ - Code: basic.TsCode, - Name: basic.Name, - ROE: 0, - RSI: 0, - Desc: "", - Pass: "NOT", - } - if re := rule.NewUpDate().Run(basic.ListDate); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - descripts = append(descripts, re.Desc) - } - - if re := rule.NewST().Run(basic.Name); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - descripts = append(descripts, re.Desc) - } - - if re := rule.NewIdustry().Run(basic.Industry); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - descripts = append(descripts, re.Desc) - } - - if re := rule.NewPrice().Run(basic.TsCode); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - descripts = append(descripts, re.Desc) - } - - if re := rule.NewAmount().Run(basic.TsCode); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - descripts = append(descripts, re.Desc) - } - - if re := rule.NewRoe().Run(basic.TsCode); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - data.ROE = re.Roe - descripts = append(descripts, re.Desc) - } - - if re := rule.NewRsi(strategy.GetArgs(basic.TsCode)).Run(basic.TsCode); re.Score <= 0 { - data.Desc = re.Desc - return false, data - } else { - data.RSI = re.Rsi - descripts = append(descripts, re.Desc) - } - - data.Desc = strings.Join(descripts, "#") - data.Pass = "OK" - return true, data -} diff --git a/internal/logic/strategy/filter.go b/internal/logic/strategy/filter.go new file mode 100644 index 0000000..c8a4c8d --- /dev/null +++ b/internal/logic/strategy/filter.go @@ -0,0 +1,87 @@ +package strategy + +import ( + "strings" + + "git.apinb.com/quant/gostock/internal/logic/strategy/rule" + "git.apinb.com/quant/gostock/internal/logic/types" + "git.apinb.com/quant/gostock/internal/models" +) + +func MustFilter(basic *models.StockBasic) (bool, *types.ResultData) { + var descripts []string + data := &types.ResultData{ + Code: basic.TsCode, + Name: basic.Name, + ROE: 0, + RSI: 0, + Desc: "", + Pass: "NOT", + } + if re := rule.NewUpDate().Run(basic.ListDate); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + descripts = append(descripts, re.Desc) + } + + if re := rule.NewST().Run(basic.Name); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + descripts = append(descripts, re.Desc) + } + + if re := rule.NewIdustry().Run(basic.Industry); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + descripts = append(descripts, re.Desc) + } + + if re := rule.NewPrice().Run(basic.TsCode); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + descripts = append(descripts, re.Desc) + } + + if re := rule.NewAmount().Run(basic.TsCode); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + descripts = append(descripts, re.Desc) + } + + if re := rule.NewRoe().Run(basic.TsCode); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + data.ROE = re.Roe + descripts = append(descripts, re.Desc) + } + + if re := rule.NewRsi(GetArgs(basic.TsCode)).Run(basic.TsCode); re.Score <= 0 { + data.Desc = re.Desc + return false, data + } else { + data.RSI = re.Rsi + descripts = append(descripts, re.Desc) + } + + data.Desc = strings.Join(descripts, "#") + data.Pass = "OK" + return true, data +} + +func ClacFilter(basic *models.StockBasic) (bool, *types.ResultData) { + var descripts []string + data := &types.ResultData{ + Code: basic.TsCode, + Name: basic.Name, + ROE: 0, + RSI: 0, + Desc: "", + Pass: "NOT", + } +} diff --git a/internal/logic/types/rule.go b/internal/logic/types/rule.go index 73107da..e15507e 100644 --- a/internal/logic/types/rule.go +++ b/internal/logic/types/rule.go @@ -8,3 +8,12 @@ type RuleResult struct { Rsi float64 Desc string } + +type ResultData struct { // Our example struct, you can use "-" to ignore a field + Code string `csv:"code"` + Name string `csv:"name"` + ROE float64 `csv:"roe"` + RSI float64 `csv:"rsi"` + Desc string `csv:"desc"` + Pass string `csv:"pass"` +}