diff --git a/pkg/indicator/tma.go b/pkg/indicator/tma.go index fd1c416dba..36e3ad15f8 100644 --- a/pkg/indicator/tma.go +++ b/pkg/indicator/tma.go @@ -48,28 +48,3 @@ var _ types.SeriesExtend = &TMA{} func (inc *TMA) PushK(k types.KLine) { inc.Update(k.Close.Float64()) } - -func (inc *TMA) CalculateAndUpdate(allKLines []types.KLine) { - if inc.s1 == nil { - for _, k := range allKLines { - inc.PushK(k) - inc.EmitUpdate(inc.Last(0)) - } - } else { - k := allKLines[len(allKLines)-1] - inc.PushK(k) - inc.EmitUpdate(inc.Last(0)) - } -} - -func (inc *TMA) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) { - if inc.Interval != interval { - return - } - - inc.CalculateAndUpdate(window) -} - -func (inc *TMA) Bind(updater KLineWindowUpdater) { - updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate) -} diff --git a/pkg/indicator/v2_stddev.go b/pkg/indicator/v2_stddev.go new file mode 100644 index 0000000000..28a5a4d070 --- /dev/null +++ b/pkg/indicator/v2_stddev.go @@ -0,0 +1,28 @@ +package indicator + +import "github.com/c9s/bbgo/pkg/types" + +type StdDevStream struct { + Float64Series + + rawValues *types.Queue + + window int + multiplier float64 +} + +func StdDev2(source Float64Source, window int) *StdDevStream { + s := &StdDevStream{ + Float64Series: NewFloat64Series(), + rawValues: types.NewQueue(window), + window: window, + } + s.Bind(source, s) + return s +} + +func (s *StdDevStream) Calculate(x float64) float64 { + s.rawValues.Update(x) + var std = s.rawValues.Stdev() + return std +}