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.
 
 

38 lines
1017 B

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
}