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.
 
 

35 lines
818 B

package indicator
import "sig-pub/pkg/types/series"
// ATR = SMA(TR, N)
// 平均真实波幅 (ATR) atr define: https://www.investopedia.com/terms/a/atr.asp
type ATR struct {
}
// indicator interface
func (c *ATR) Name() string {
return "atr"
}
// Calculate 计算单根k线rsi指标
func (c *ATR) Calculate(ctx IIndicatorContext, window int16) (vector float64) {
klineSeries := ctx.Series(0, int16(window)+1)
highs := klineSeries.High()
lows := klineSeries.Low()
closes := klineSeries.Close()
trs := make([]float64, 0, window)
for i := range window {
high := highs[i]
low := lows[i]
close1 := closes[i+1]
// 计算TR
tr := max(high-low, high-close1, low-close1)
trs = append(trs, tr)
}
// 计算TR平均值得到ATR
seriesTR := series.NewFloats(trs...)
atr := seriesTR.Avg()
return atr
}