mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-25 08:15:15 +00:00
58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
package drift
|
|
|
|
import (
|
|
"github.com/c9s/bbgo/pkg/indicator"
|
|
"github.com/c9s/bbgo/pkg/types"
|
|
)
|
|
|
|
type DriftMA struct {
|
|
types.SeriesBase
|
|
drift *indicator.WeightedDrift
|
|
ma1 types.UpdatableSeriesExtend
|
|
ma2 types.UpdatableSeriesExtend
|
|
}
|
|
|
|
func (s *DriftMA) Update(value, weight float64) {
|
|
s.ma1.Update(value)
|
|
if s.ma1.Length() == 0 {
|
|
return
|
|
}
|
|
s.drift.Update(s.ma1.Last(0), weight)
|
|
if s.drift.Length() == 0 {
|
|
return
|
|
}
|
|
s.ma2.Update(s.drift.Last(0))
|
|
}
|
|
|
|
func (s *DriftMA) Last(i int) float64 {
|
|
return s.ma2.Last(i)
|
|
}
|
|
|
|
func (s *DriftMA) Index(i int) float64 {
|
|
return s.ma2.Last(i)
|
|
}
|
|
|
|
func (s *DriftMA) Length() int {
|
|
return s.ma2.Length()
|
|
}
|
|
|
|
func (s *DriftMA) ZeroPoint() float64 {
|
|
return s.drift.ZeroPoint()
|
|
}
|
|
|
|
func (s *DriftMA) Clone() *DriftMA {
|
|
out := DriftMA{
|
|
drift: s.drift.Clone(),
|
|
ma1: types.Clone(s.ma1),
|
|
ma2: types.Clone(s.ma2),
|
|
}
|
|
out.SeriesBase.Series = &out
|
|
return &out
|
|
}
|
|
|
|
func (s *DriftMA) TestUpdate(v, weight float64) *DriftMA {
|
|
out := s.Clone()
|
|
out.Update(v, weight)
|
|
return out
|
|
}
|