indicator: truncate values if length exceeded

This commit is contained in:
c9s 2021-06-28 14:28:44 +08:00
parent a8048703b3
commit 4ccbb82237
2 changed files with 13 additions and 0 deletions

View File

@ -9,6 +9,9 @@ import (
"github.com/c9s/bbgo/pkg/types" "github.com/c9s/bbgo/pkg/types"
) )
const MaxEWMAValues = 1_000
const EWMAValueTruncateSize = 500
//go:generate callbackgen -type EWMA //go:generate callbackgen -type EWMA
type EWMA struct { type EWMA struct {
types.IntervalWindow types.IntervalWindow
@ -24,6 +27,8 @@ func (inc *EWMA) Update(value float64) {
if len(inc.Values) == 0 { if len(inc.Values) == 0 {
inc.Values.Push(value) inc.Values.Push(value)
return return
} else if len(inc.Values) > MaxEWMAValues {
inc.Values = inc.Values[EWMAValueTruncateSize:]
} }
ema := (1-multiplier)*inc.Last() + multiplier*value ema := (1-multiplier)*inc.Last() + multiplier*value

View File

@ -9,6 +9,9 @@ import (
"github.com/c9s/bbgo/pkg/types" "github.com/c9s/bbgo/pkg/types"
) )
const MaxSMAValues = 1_000
const SMAValueTruncateSize = 500
var zeroTime time.Time var zeroTime time.Time
//go:generate callbackgen -type SMA //go:generate callbackgen -type SMA
@ -44,6 +47,11 @@ func (inc *SMA) calculateAndUpdate(kLines []types.KLine) {
return return
} }
inc.Values.Push(sma) inc.Values.Push(sma)
if len(inc.Values) > MaxSMAValues {
inc.Values = inc.Values[SMAValueTruncateSize:]
}
inc.EndTime = kLines[index].EndTime inc.EndTime = kLines[index].EndTime
inc.EmitUpdate(sma) inc.EmitUpdate(sma)