mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-22 06:53:52 +00:00
Merge pull request #1189 from c9s/feature/v2-indicator-stddev
This commit is contained in:
commit
a107f4be07
|
@ -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)
|
||||
}
|
||||
|
|
28
pkg/indicator/v2_stddev.go
Normal file
28
pkg/indicator/v2_stddev.go
Normal file
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user