29 lines
394 B
Go
29 lines
394 B
Go
package com
|
|
|
|
import "math"
|
|
|
|
type Ema struct {
|
|
Alpha float64
|
|
Val float64
|
|
}
|
|
|
|
func NewEMA(alpha float64) *Ema {
|
|
return &Ema{Alpha: alpha}
|
|
}
|
|
|
|
func (e *Ema) Update(val float64) float64 {
|
|
if math.IsNaN(val) || math.IsInf(val, 0) {
|
|
return math.NaN()
|
|
}
|
|
if e.Val == 0 {
|
|
e.Val = val
|
|
} else {
|
|
e.Val = e.Val*(1-e.Alpha) + val*e.Alpha
|
|
}
|
|
return e.Val
|
|
}
|
|
|
|
func (e *Ema) Reset() {
|
|
e.Val = 0
|
|
}
|