package types import ( "sig-pub/api/pb" "sig-pub/pkg/types/decimals" "github.com/govalues/decimal" ) // 时序数据 k线 type Kline struct { // InstId string `json:"instId"` // 交易产品id // Tid int64 `json:"tid"` // ts除interval // Exchange string `json:"exchange"` // 交易所 Interval Interval `json:"interval"` // 周期 Ts int64 `json:"ts"` // k线时间戳ms Open decimal.Decimal `json:"open"` // 开盘 High decimal.Decimal `json:"high"` // 最高 Low decimal.Decimal `json:"low"` // 最低 Close decimal.Decimal `json:"close"` // 收盘 Vol decimal.Decimal `json:"vol"` // 交易量 如果是币币,数值为交易货币的数量。 VolQuote decimal.Decimal `json:"volQuote"` // 交易额 (交易量,以计价货币为单位) Confirm bool `json:"confirm"` // k线是否完结 } // okx.CandleData{[]string{"1746842757000", "0.20545", "0.20545", "0.2054", "0.2054", "7.57", "7570", "1555.2542", "1"}} func (k *Kline) ParsePBKline(exchange pb.ExchangeType, kline *pb.Kline) { // k.Exchange = exchange.String() k.Ts = kline.Time k.Interval = Interval(kline.Interval) k.Confirm = kline.Confirm // k.Open = decimal.MustParse(kline.Open) // k.High = decimal.MustParse(kline.High) // k.Low = decimal.MustParse(kline.Low) // k.Close = decimal.MustParse(kline.Close) // k.Vol = decimal.MustParse(kline.Vol) // k.VolQuote = decimal.MustParse(kline.VolQuote) k.Open = decimals.MustFromFloat64(kline.Open) k.High = decimals.MustFromFloat64(kline.High) k.Low = decimals.MustFromFloat64(kline.Low) k.Close = decimals.MustFromFloat64(kline.Close) k.Vol = decimals.MustFromFloat64(kline.Vol) k.VolQuote = decimals.MustFromFloat64(kline.VolQuote) } func (k *Kline) ToPBKline() (kline *pb.Kline) { kline = &pb.Kline{ Time: k.Ts, Interval: string(k.Interval), Confirm: k.Confirm, Open: decimals.MustToFloat64(k.Open), High: decimals.MustToFloat64(k.High), Low: decimals.MustToFloat64(k.Low), Close: decimals.MustToFloat64(k.Close), Vol: decimals.MustToFloat64(k.Vol), VolQuote: decimals.MustToFloat64(k.VolQuote), } return } func (k Kline) OpenF64() float64 { return decimals.MustToFloat64(k.Open) } func (k Kline) CloseF64() float64 { return decimals.MustToFloat64(k.Close) } func (k Kline) HighF64() float64 { return decimals.MustToFloat64(k.High) } func (k Kline) LowF64() float64 { return decimals.MustToFloat64(k.Low) } func (k Kline) VolF64() float64 { return decimals.MustToFloat64(k.Vol) } func (k Kline) VolQtyF64() float64 { return decimals.MustToFloat64(k.VolQuote) } func (k Kline) HL2() float64 { return (k.HighF64() + k.LowF64()) / 2 } // ChannelKline k线订阅消息 type ChannelKline struct { ExgInstId string `json:"instId"` // 交易所交易产品id,如 BTC_USDT_SWAP Exchange pb.ExchangeType `json:"exchange"` // 交易所 Klines []*Kline `json:"klines"` }