From 6d3e27af9770c248e0487f7082fe18183cde9fc7 Mon Sep 17 00:00:00 2001 From: wangfeng Date: Thu, 9 Feb 2023 18:04:57 +0800 Subject: [PATCH] =?UTF-8?q?#I6E1KS=20=E5=AE=9E=E7=8E=B0CROSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formula/README.md | 2 +- formula/cross.go | 23 +++++++++++++++++++++++ formula/cross_test.go | 17 +++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 formula/cross.go create mode 100644 formula/cross_test.go diff --git a/formula/README.md b/formula/README.md index 3334258..a723b40 100644 --- a/formula/README.md +++ b/formula/README.md @@ -38,7 +38,7 @@ formula | 1 | BARSLAST | 上一次条件成立到当前的周期数 | BARSLAST(X) | [√] | [√] | | 1 | BARSLASTCOUNT | 统计连续满足S条件的周期数 | BARSLASTCOUNT(X) | [√] | [ ] | | 1 | BARSSINCEN | N周期内第一次S条件成立到现在的周期数 | BARSSINCEN(S,N) | [√] | [√] | -| 1 | CROSS | 判断向上金叉穿越,两个序列互换就是判断向下死叉穿越 | CROSS(MA(C,5),MA(C,10)) | [X] | [X] | +| 1 | CROSS | 判断向上金叉穿越,两个序列互换就是判断向下死叉穿越 | CROSS(MA(C,5),MA(C,10)) | [√] | [ ] | | 1 | LONGCROSS | 两条线维持一定周期后交叉,S1在N周期内都小于S2,本周期从S1下方向上穿过S2时返回1,否则返回0 | LONGCROSS(MA(C,5),MA(C,10),5) | [X] | [X] | | 1 | VALUEWHEN | 当S条件成立时,取X的当前值,否则取VALUEWHEN的上个成立时的X值 | VALUEWHEN(S,X) | [X] | [X] | | 1 | BETWEEN | S处于A和B之间时为真。 包括 AS>B | BETWEEN(S,A,B) | [X] | [X] | diff --git a/formula/cross.go b/formula/cross.go new file mode 100644 index 0000000..635665f --- /dev/null +++ b/formula/cross.go @@ -0,0 +1,23 @@ +package formula + +import ( + "gitee.com/quant1x/pandas" + "github.com/viterin/vek" +) + +// CROSS +// +// 判断向上金叉穿越 CROSS(MA(C,5),MA(C,10)) +// 判断向下死叉穿越 CROSS(MA(C,10),MA(C,5)) +func CROSS(S1, S2 pandas.Series) []bool { + r1 := S1.DTypes() + r2 := S2.DTypes() + r11 := S1.Ref(1).DTypes() + r12 := S2.Ref(1).DTypes() + + b1 := CompareLt(r11, r12) + b2 := CompareGte(r1, r2) + + c := vek.And(b1, b2) + return c +} diff --git a/formula/cross_test.go b/formula/cross_test.go new file mode 100644 index 0000000..3a3d293 --- /dev/null +++ b/formula/cross_test.go @@ -0,0 +1,17 @@ +package formula + +import ( + "fmt" + "gitee.com/quant1x/pandas" + "testing" +) + +func TestCROSS(t *testing.T) { + d1 := []float64{1, 2, 3, 4, 5, 6, 7, 8, 8, 10} + d2 := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} + + s1 := pandas.NewSeriesWithoutType("d1", d1) + s2 := pandas.NewSeriesWithoutType("d2", d2) + + fmt.Println(CROSS(s1, s2)) +} -- Gitee