You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

96 lines
3.0 KiB

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"`
}