package trading import ( "sig-pub/api/pb" vmts "sig-pub/pkg/storage/tsdb/victoria_metrics" "sig-pub/pkg/types" "sig-pub/pkg/utils/collect" ) type KlineStore struct { vmdb vmts.VictoriaMetricsTSDB store [3]*collect.ConcurrentMap[string, *collect.ConcurrentMap[types.Interval, *KlineSeries]] // K线列表: []exchange } func NewKlineSeriesStore() (kss *KlineStore) { kss = &KlineStore{} kss.store[pb.ExchangeType_OKX] = collect.NewConcurrentMap[string, *collect.ConcurrentMap[types.Interval, *KlineSeries]](64, func(s string) string { return s }) // kss.klines[pb.ExchangeType_BINANCE] = return } func (s *KlineStore) Update(exchange pb.ExchangeType, instId string, kline *types.Kline) (k types.Kline) { // klineSeries Update intervals := s.store[exchange].ComputeIfAbsent(instId, func(k string) *collect.ConcurrentMap[types.Interval, *KlineSeries] { return collect.NewConcurrentMap[types.Interval, *KlineSeries](8, func(t types.Interval) string { return string(t) }) }) klineSeries := intervals.ComputeIfAbsent(kline.Interval, func(interval types.Interval) *KlineSeries { return NewKlineSeries(0, interval, s) }) klineSeries.Update(kline) return }