You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
745 B
44 lines
745 B
package indicator |
|
|
|
import ( |
|
"fmt" |
|
"sig-pub/pkg/types" |
|
"sig-pub/pkg/types/series" |
|
|
|
"github.com/spf13/cast" |
|
) |
|
|
|
// RSI: 相对强弱指数 (RSI) |
|
// rsi define: https://www.investopedia.com/terms/r/rsi.asp |
|
type RSI struct { |
|
series.Series |
|
values series.Floats |
|
prices series.Floats |
|
|
|
baseline int32 |
|
} |
|
|
|
func NewRSI(baseline int32) *RSI { |
|
return &RSI{ |
|
baseline: baseline, |
|
} |
|
} |
|
|
|
func (ind *RSI) Init(prams map[string]any) { |
|
cast.ToIntE("1") |
|
} |
|
|
|
func (ind *RSI) Update(klines []types.Kline) (err error) { |
|
for _, kline := range klines { |
|
c, ok := kline.Close.Float64() |
|
if !ok { |
|
err = fmt.Errorf("kline close to float64 error: %s", kline.Close.String()) |
|
return |
|
} |
|
ind.prices.Push(c) |
|
} |
|
|
|
diff := ind.prices.Diff() |
|
_ = diff |
|
return |
|
}
|
|
|