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.
 
 

49 lines
1.3 KiB

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
}