Files
qsdk/schema/stock_daily.go
2026-05-01 11:03:19 +08:00

59 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package schema
import "strconv"
// StockDaily 股票日线数据(两仓库结构一致)。
type StockDaily struct {
ID uint `gorm:"primarykey;autoIncrement" json:"id"`
TsCode string `gorm:"type:varchar(20);not null;index:idx_ts_code;uniqueIndex:un_code_date;comment:股票代码" json:"ts_code"`
TradeDate int `gorm:"index:idx_trade_date;uniqueIndex:un_code_date;comment:交易日期" json:"trade_date"`
Open float64 `gorm:"type:decimal(10,4);comment:开盘价" json:"open"`
High float64 `gorm:"type:decimal(10,4);comment:最高价" json:"high"`
Low float64 `gorm:"type:decimal(10,4);comment:最低价" json:"low"`
Close float64 `gorm:"type:decimal(10,4);comment:收盘价" json:"close"`
PreClose float64 `gorm:"type:decimal(10,4);comment:昨收价(除权价)" json:"pre_close"`
Change float64 `gorm:"type:decimal(10,4);comment:涨跌额" json:"change"`
PctChg float64 `gorm:"type:decimal(10,6);comment:涨跌幅(%)" json:"pct_chg"`
DayChg float64 `gorm:"type:decimal(6,2);comment:日均振幅(%)" json:"day_chg"`
Vol float64 `gorm:"type:decimal(15,2);comment:成交量(手)" json:"vol"`
Amount float64 `gorm:"type:decimal(20,2);comment:成交额(千元)" json:"amount"`
}
func (StockDaily) TableName() string {
return "stock_daily"
}
// Key 业务主键ts_code + 交易日。
func (d *StockDaily) Key() string {
if d.TsCode == "" && d.TradeDate == 0 {
return ""
}
return d.TsCode + "#" + strconv.Itoa(d.TradeDate)
}
// IsRising 是否收涨(昨收有效且收盘高于昨收)。
func (d *StockDaily) IsRising() bool {
return d.PreClose > 0 && d.Close > d.PreClose
}
// IsFalling 是否收跌。
func (d *StockDaily) IsFalling() bool {
return d.PreClose > 0 && d.Close < d.PreClose
}
// PctChangeFromPre 由昨收计算的涨跌幅(%);昨收无效时返回 0。
func (d *StockDaily) PctChangeFromPre() float64 {
if d.PreClose <= 0 {
return 0
}
return (d.Close - d.PreClose) / d.PreClose * 100
}
// AmplitudePct 振幅(相对昨收,%(最高-最低)/昨收*100。
func (d *StockDaily) AmplitudePct() float64 {
if d.PreClose <= 0 {
return 0
}
return (d.High - d.Low) / d.PreClose * 100
}