Skip to content

Commit

Permalink
indicator: add v2 CMA indicator
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Jun 1, 2023
1 parent 3e94584 commit 8ebf572
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 62 deletions.
12 changes: 0 additions & 12 deletions pkg/indicator/ad.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,3 @@ func (inc *AD) CalculateAndUpdate(kLines []types.KLine) {
inc.EmitUpdate(inc.Last(0))
inc.EndTime = kLines[len(kLines)-1].EndTime.Time()
}

func (inc *AD) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) {
if inc.Interval != interval {
return
}

inc.CalculateAndUpdate(window)
}

func (inc *AD) Bind(updater KLineWindowUpdater) {
updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate)
}
11 changes: 0 additions & 11 deletions pkg/indicator/alma.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,3 @@ func (inc *ALMA) CalculateAndUpdate(allKLines []types.KLine) {
inc.Update(allKLines[len(allKLines)-1].Close.Float64())
inc.EmitUpdate(inc.Last(0))
}

func (inc *ALMA) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) {
if inc.Interval != interval {
return
}
inc.CalculateAndUpdate(window)
}

func (inc *ALMA) Bind(updater KLineWindowUpdater) {
updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate)
}
4 changes: 2 additions & 2 deletions pkg/indicator/ca_callbacks.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 0 additions & 12 deletions pkg/indicator/cci.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,3 @@ func (inc *CCI) CalculateAndUpdate(allKLines []types.KLine) {
inc.EmitUpdate(inc.Last(0))
}
}

func (inc *CCI) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) {
if inc.Interval != interval {
return
}

inc.CalculateAndUpdate(window)
}

func (inc *CCI) Bind(updater KLineWindowUpdater) {
updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate)
}
15 changes: 2 additions & 13 deletions pkg/indicator/cma.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ type CA struct {
Interval types.Interval
Values floats.Slice
length float64
UpdateCallbacks []func(value float64)
updateCallbacks []func(value float64)
}

func (inc *CA) Update(x float64) {
if len(inc.Values) == 0 {
inc.SeriesBase.Series = inc
}

newVal := (inc.Values.Last(0)*inc.length + x) / (inc.length + 1.)
inc.length += 1
inc.Values.Push(newVal)
Expand Down Expand Up @@ -54,15 +55,3 @@ func (inc *CA) CalculateAndUpdate(allKLines []types.KLine) {
inc.EmitUpdate(inc.Last(0))
}
}

func (inc *CA) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) {
if inc.Interval != interval {
return
}

inc.CalculateAndUpdate(window)
}

func (inc *CA) Bind(updater KLineWindowUpdater) {
updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate)
}
12 changes: 0 additions & 12 deletions pkg/indicator/dmi.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,3 @@ func (inc *DMI) CalculateAndUpdate(allKLines []types.KLine) {
inc.EmitUpdate(inc.DIPlus.Last(0), inc.DIMinus.Last(0), inc.ADX.Last(0))
}
}

func (inc *DMI) handleKLineWindowUpdate(interval types.Interval, window types.KLineWindow) {
if inc.Interval != interval {
return
}

inc.CalculateAndUpdate(window)
}

func (inc *DMI) Bind(updater KLineWindowUpdater) {
updater.OnKLineWindowUpdate(inc.handleKLineWindowUpdate)
}
23 changes: 23 additions & 0 deletions pkg/indicator/v2_cma.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package indicator

type CMAStream struct {
Float64Series
}

func CMA2(source Float64Source) *CMAStream {
s := &CMAStream{
Float64Series: NewFloat64Series(),
}
s.Bind(source, s)
return s
}

func (s *CMAStream) Calculate(x float64) float64 {
l := float64(s.slice.Length())
cma := (s.slice.Last(0)*l + x) / (l + 1.)
return cma
}

func (s *CMAStream) Truncate() {
s.slice.Truncate(MaxNumOfEWMA)
}

0 comments on commit 8ebf572

Please sign in to comment.