diff --git a/formula/README.md b/formula/README.md index 435a18f07b559a059157db14becaa8950a02587a..fee1677f20889d92634918ec9617c9990a953d2e 100644 --- a/formula/README.md +++ b/formula/README.md @@ -16,6 +16,7 @@ formula | 0 | HHVBARS | 求N周期内S最高值到当前周期数, 返回序列 | HHVBARS(HIGH,5) | [x] | [x] | | 0 | LLV | 计算N周期内最低 | LLV(HLOW,5) | [√] | [√] | | 0 | LLVBARS | 求N周期内S最低值到当前周期数, 返回序列 | LLVBARS(HLOW,5) | [x] | [x] | +| 0 | SQRT | 计算S的平方根 | SQRT(CLOSE) | [√] | [√] | | 0 | MAX | 计算AB最大值 | MAX(CLOSE,HIGH) | [√] | [√] | | 0 | MIN | 计算AB最小值 | MIN(CLOSE,HIGH) | [√] | [√] | | 0 | MA | 计算N周期的移动平均值, 简称均线 | MA(CLOSE,5) | [√] | [√] | diff --git a/formula/sqrt.go b/formula/sqrt.go new file mode 100644 index 0000000000000000000000000000000000000000..58945556802768830d1da2d9da3ae8b0355ce474 --- /dev/null +++ b/formula/sqrt.go @@ -0,0 +1,12 @@ +package formula + +import ( + "gitee.com/quant1x/pandas" + "gitee.com/quant1x/pandas/stat" +) + +// SQRT 求S的平方根 +func SQRT(S pandas.Series) []stat.DType { + fs := S.DTypes() + return stat.Sqrt(fs) +} diff --git a/formula/sqrt_test.go b/formula/sqrt_test.go new file mode 100644 index 0000000000000000000000000000000000000000..da950fe99b29d0ba45fd574b4232633e55b64c16 --- /dev/null +++ b/formula/sqrt_test.go @@ -0,0 +1,16 @@ +package formula + +import ( + "fmt" + "gitee.com/quant1x/pandas" + "testing" +) + +func TestSQRT(t *testing.T) { + f1 := []float32{1.1, 2.2, 1.3, 1.4} + f2 := []float64{70, 80, 75, 83, 86} + s1 := pandas.NewSeries(pandas.SERIES_TYPE_FLOAT32, "s1", f1) + s2 := pandas.NewSeries(pandas.SERIES_TYPE_FLOAT64, "s2", f2) + fmt.Println(SQRT(s1)) + fmt.Println(SQRT(s2)) +} diff --git a/stat/sqrt.go b/stat/sqrt.go new file mode 100644 index 0000000000000000000000000000000000000000..7db77556b15aa69bf2cc4d989174b9da6271de73 --- /dev/null +++ b/stat/sqrt.go @@ -0,0 +1,22 @@ +package stat + +import ( + "github.com/viterin/vek" + "github.com/viterin/vek/vek32" +) + +// Sqrt 求平方根 +func Sqrt[T StatType](v []T) []T { + var d any + var values any = v + switch fs := values.(type) { + case []float32: + d = vek32.Sqrt(fs) + case []float64: + d = vek.Sqrt(fs) + default: + panic(ErrUnsupportedType) + } + + return d.([]T) +} diff --git a/stat/sqrt_test.go b/stat/sqrt_test.go new file mode 100644 index 0000000000000000000000000000000000000000..55884c14b1037b3f20aae7416fd953c86dd6d1af --- /dev/null +++ b/stat/sqrt_test.go @@ -0,0 +1,15 @@ +package stat + +import ( + "fmt" + "testing" +) + +func TestSqrt(t *testing.T) { + f0 := []float32{1.1, 2.2, 1.3, 1.4} + f1 := []float64{70, 80, 75, 83, 86} + f2 := []float64{90, 69, 60, 88, 87} + fmt.Println(Sqrt(f0)) + fmt.Println(Sqrt(f1)) + fmt.Println(Sqrt(f2)) +}