diff --git a/backend/internal/services/stock_sync.go b/backend/internal/services/stock_sync.go index 6e9809f..c67e788 100644 --- a/backend/internal/services/stock_sync.go +++ b/backend/internal/services/stock_sync.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "math" "sync" "time" @@ -95,18 +96,27 @@ func (s *StockSyncService) doSync(ctx context.Context) (int, error) { records := make([]models.StockDailyQuote, 0, len(quotes)) for _, q := range quotes { tradeDate := msToDate(q.Timestamp) + open := round2(q.Open) + high := round2(q.High) + low := round2(q.Low) + close := round2(q.Close) + prevClose := round2(q.PrevClose) + var changePct float64 + if prevClose != 0 { + changePct = (close - prevClose) / prevClose + } records = append(records, models.StockDailyQuote{ Symbol: q.Symbol, Name: q.DisplayName(), TradeDate: tradeDate, - Open: q.Open, - High: q.High, - Low: q.Low, - Close: q.Close, - PrevClose: q.PrevClose, + Open: open, + High: high, + Low: low, + Close: close, + PrevClose: prevClose, Volume: q.Volume, Amount: q.Amount, - ChangePct: q.ChangePct(), + ChangePct: changePct, TurnoverRate: q.TurnoverRate(), Region: q.Region, }) @@ -140,3 +150,7 @@ func today() time.Time { func msToDate(ms int64) time.Time { return time.UnixMilli(ms).In(chinaLoc).Truncate(24 * time.Hour) } + +func round2(v float64) float64 { + return math.Round(v*100) / 100 +}