package trading import ( "sig-pub/pkg/indicator" "sig-pub/pkg/types/series" ) // WindowIndicatorSeries 封装 type WindowIndicatorSeries struct { indicator.IIndicatorSeries window int16 indicator indicator.IWindowIndicator indicatorContext IOffsetIndicatorContext } func NewWindowIndicatorSeries(window int16, indicator indicator.IWindowIndicator, indicatorContext IOffsetIndicatorContext) *WindowIndicatorSeries { return &WindowIndicatorSeries{ window: window, indicator: indicator, indicatorContext: indicatorContext, } } func (s *WindowIndicatorSeries) Get(offset int16) (vector float64) { s.indicatorContext.SetOffset(offset) vector = s.indicator.Calculate(s.indicatorContext, s.window) return } func (s *WindowIndicatorSeries) Series(offset, count int16) (matrix series.Floats) { for i := range count { offset += i s.indicatorContext.SetOffset(offset) vector := s.indicator.Calculate(s.indicatorContext, s.window) matrix.Push(vector) } return }