|
|
|
|
@ -4,8 +4,11 @@ import (
|
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
"io" |
|
|
|
|
"math" |
|
|
|
|
"sig-pub/api/pb" |
|
|
|
|
"sig-pub/pkg/publish" |
|
|
|
|
"sig-pub/pkg/types" |
|
|
|
|
"sig-pub/pkg/types/decimals" |
|
|
|
|
"sig-pub/pkg/zlog" |
|
|
|
|
"sync/atomic" |
|
|
|
|
|
|
|
|
|
@ -135,26 +138,48 @@ func (svr *ExchangeGrpcServer) HistoryKline(ctx context.Context, req *pb.ReqHist
|
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if total > DefaultHistoryKlines { |
|
|
|
|
err = fmt.Errorf("time range too large max %d", DefaultHistoryKlines) |
|
|
|
|
if total > MaxHistoryKlines { |
|
|
|
|
err = fmt.Errorf("time range too large max %d", MaxHistoryKlines) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rsp = new(pb.RspHistoryKline) |
|
|
|
|
rsp.Klines = make([]*pb.Kline, 0, total+1) |
|
|
|
|
rsp = &pb.RspHistoryKline{ |
|
|
|
|
Exchange: req.Series.Exchange, |
|
|
|
|
InstId: req.Series.InstId, |
|
|
|
|
Interval: req.Series.Interval, |
|
|
|
|
} |
|
|
|
|
live, err := svr.exchangeService.HistoryKline(req.Series, DefaultHistoryKlines, func(klines []*pb.Kline) error { |
|
|
|
|
rsp.Klines = append(rsp.Klines, klines...) |
|
|
|
|
|
|
|
|
|
kSeries := &pb.KlineSeries{ |
|
|
|
|
Interval: req.Series.Interval, |
|
|
|
|
Time: make([]int64, 0, total), |
|
|
|
|
Open: make([]float64, 0, total), |
|
|
|
|
High: make([]float64, 0, total), |
|
|
|
|
Low: make([]float64, 0, total), |
|
|
|
|
Close: make([]float64, 0, total), |
|
|
|
|
Vol: make([]float64, 0, total), |
|
|
|
|
VolQuote: make([]float64, 0, total), |
|
|
|
|
} |
|
|
|
|
live, err := svr.exchangeService.HistoryKline(req.Series, math.MaxInt, func(liveK *types.Kline, klines []*types.Kline) error { |
|
|
|
|
for _, kline := range klines { |
|
|
|
|
kSeries.Time = append(kSeries.Time, kline.Ts) |
|
|
|
|
kSeries.Open = append(kSeries.Open, decimals.MustToFloat64(kline.Open)) |
|
|
|
|
kSeries.High = append(kSeries.High, decimals.MustToFloat64(kline.High)) |
|
|
|
|
kSeries.Low = append(kSeries.Low, decimals.MustToFloat64(kline.Low)) |
|
|
|
|
kSeries.Close = append(kSeries.Close, decimals.MustToFloat64(kline.Close)) |
|
|
|
|
kSeries.Vol = append(kSeries.Vol, decimals.MustToFloat64(kline.Vol)) |
|
|
|
|
kSeries.VolQuote = append(kSeries.VolQuote, decimals.MustToFloat64(kline.VolQuote)) |
|
|
|
|
if liveK != nil { |
|
|
|
|
kSeries.Live = liveK.ToPBKline() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
rsp.Live = live |
|
|
|
|
rsp.Klines = kSeries |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -164,8 +189,12 @@ func (svr *ExchangeGrpcServer) HistoryKlineStream(req *pb.ReqHistoryKlineStream,
|
|
|
|
|
err = fmt.Errorf("series arg is required") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
_, err = svr.exchangeService.HistoryKline(req.Series, 200, func(klines []*pb.Kline) error { |
|
|
|
|
rsp := &pb.RspHistoryKlineStream{Klines: klines} |
|
|
|
|
_, err = svr.exchangeService.HistoryKline(req.Series, 200, func(_ *types.Kline, klines []*types.Kline) error { |
|
|
|
|
rsp := &pb.RspHistoryKlineStream{} |
|
|
|
|
rsp.Klines = make([]*pb.Kline, 0, len(klines)) |
|
|
|
|
for _, kline := range klines { |
|
|
|
|
rsp.Klines = append(rsp.Klines, kline.ToPBKline()) |
|
|
|
|
} |
|
|
|
|
return stream.Send(rsp) |
|
|
|
|
}) |
|
|
|
|
if err != nil { |
|
|
|
|
|