Files
stock/internal/logic/a/indicator.go

79 lines
2.2 KiB
Go
Raw Normal View History

2026-01-17 01:14:19 +08:00
package a
import (
"log"
2026-01-17 01:24:49 +08:00
"strings"
2026-01-19 19:49:13 +08:00
"time"
2026-01-17 01:14:19 +08:00
2026-01-21 19:08:44 +08:00
"git.apinb.com/bsm-sdk/core/utils"
2026-01-17 01:14:19 +08:00
"git.apinb.com/dataset/stock/internal/impl"
"git.apinb.com/dataset/stock/internal/models"
)
func GetStockIndicator() {
2026-01-19 19:49:13 +08:00
end := time.Now().Format("20060102")
2026-01-17 01:14:19 +08:00
for _, code := range GetStockCodes() {
2026-01-19 19:49:13 +08:00
var start string = "20230101"
var last models.StockIndicator
err := impl.DBService.Where("ts_code=?", code).Order("trade_date DESC").First(&last).Error
2026-01-21 17:13:37 +08:00
if err == nil {
2026-01-21 19:08:44 +08:00
start = utils.Int2String(last.TradeDate)
2026-01-19 19:49:13 +08:00
}
2026-01-17 01:14:19 +08:00
params := map[string]string{
"ts_code": code,
2026-01-19 19:49:13 +08:00
"start_date": start,
"end_date": end,
2026-01-17 01:14:19 +08:00
}
2026-01-19 19:49:13 +08:00
if start == end {
2026-01-17 01:14:19 +08:00
continue
}
2026-01-17 01:24:49 +08:00
fields := strings.Split("ts_code,trade_date,close,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,dv_ratio,dv_ttm,total_share,float_share,free_share,total_mv,circ_mv", ",")
2026-01-21 02:33:50 +08:00
reply, err := TushareClient.DailyBasic(params, fields)
2026-01-17 01:14:19 +08:00
if err != nil {
2026-01-21 17:13:37 +08:00
log.Println("ERROR", "GetStockIndicator", err, "PARAMS", params)
2026-01-17 01:14:19 +08:00
return
}
2026-01-21 19:08:44 +08:00
records := make([]*models.StockIndicator, 0)
2026-01-17 01:14:19 +08:00
for _, item := range reply.Data.Items {
2026-01-21 19:08:44 +08:00
t := utils.String2Int(item[1].(string))
if t == 0 {
continue
}
2026-01-17 01:14:19 +08:00
var cnt int64
2026-01-21 19:08:44 +08:00
impl.DBService.Model(&models.StockIndicator{}).Where("ts_code=? and trade_date=?", item[0].(string), t).Count(&cnt)
2026-01-17 01:14:19 +08:00
if cnt == 0 {
2026-01-21 19:08:44 +08:00
records = append(records, &models.StockIndicator{
2026-01-17 01:14:19 +08:00
TsCode: item[0].(string),
2026-01-21 17:13:37 +08:00
TradeDate: t,
2026-01-21 02:33:50 +08:00
Close: Any2Float(item[2]),
TurnoverRate: Any2Float(item[3]),
TurnoverRateF: Any2Float(item[4]),
VolumeRatio: Any2Float(item[5]),
Pe: Any2Float(item[6]),
PeTtm: Any2Float(item[7]),
Pb: Any2Float(item[8]),
Ps: Any2Float(item[9]),
PsTtm: Any2Float(item[10]),
DvRatio: Any2Float(item[11]),
DvTtm: Any2Float(item[12]),
TotalShare: Any2Float(item[13]),
FloatShare: Any2Float(item[14]),
FreeShare: Any2Float(item[15]),
TotalMv: Any2Float(item[16]),
CircMv: Any2Float(item[17]),
2026-01-17 01:14:19 +08:00
})
}
}
2026-01-21 19:08:44 +08:00
if len(records) > 0 {
impl.DBService.CreateInBatches(records, 100)
}
time.Sleep(200 * time.Microsecond)
2026-01-17 01:14:19 +08:00
}
}