package sig import ( "sig-pub/pkg/indicator" "sig-pub/pkg/types/series" ) // WindowIndicatorSeries 封装 type WindowIndicatorSeries struct { indicator.IIndicatorSeries indicator indicator.IIndicator indicatorContext IOffsetIndicatorContext } func NewWindowIndicatorSeries(indicator indicator.IIndicator, indicatorContext IOffsetIndicatorContext) *WindowIndicatorSeries { return &WindowIndicatorSeries{ indicator: indicator, indicatorContext: indicatorContext, } } func (s *WindowIndicatorSeries) CandlePeriods() int16 { return s.indicator.CandlePeriods(s.indicatorContext) } func (s *WindowIndicatorSeries) Get(offset int16) (vector float64) { // 根据当前相对offset s.indicatorContext.AddOffset(offset) vector = s.indicator.Calculate(s.indicatorContext) // 计算结束后还原 s.indicatorContext.AddOffset(-offset) return } // Series 返回指标值序列降序 func (s *WindowIndicatorSeries) Series(offset, count int16) (matrix series.Floats) { // 设置当前相对offset s.indicatorContext.AddOffset(offset) for range count { vector := s.indicator.Calculate(s.indicatorContext) matrix.Push(vector) offset++ s.indicatorContext.AddOffset(1) } // 计算结束后还原 s.indicatorContext.AddOffset(-offset) return }