Skip to content

Commit 05b8083

Browse files
committed
change sma and roc back to prings defaults
1 parent 97b2799 commit 05b8083

File tree

2 files changed

+90
-79
lines changed

2 files changed

+90
-79
lines changed

momentum/prings_special_k.go

Lines changed: 83 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -12,108 +12,117 @@ import (
1212
type PringsSpecialK[T helper.Float] struct {
1313
Roc10 *trend.Roc[T]
1414
Roc15 *trend.Roc[T]
15-
Roc50 *trend.Roc[T]
15+
Roc20 *trend.Roc[T]
16+
Roc30 *trend.Roc[T]
17+
Roc40 *trend.Roc[T]
1618
Roc65 *trend.Roc[T]
1719
Roc75 *trend.Roc[T]
1820
Roc100 *trend.Roc[T]
19-
Roc130 *trend.Roc[T]
2021
Roc195 *trend.Roc[T]
22+
Roc265 *trend.Roc[T]
23+
Roc390 *trend.Roc[T]
24+
Roc530 *trend.Roc[T]
2125

22-
Sma10 *trend.Sma[T]
23-
Sma15 *trend.Sma[T]
24-
Sma20 *trend.Sma[T]
25-
Sma30 *trend.Sma[T]
26-
Sma40 *trend.Sma[T]
27-
Sma65 *trend.Sma[T]
28-
Sma75 *trend.Sma[T]
29-
Sma100 *trend.Sma[T]
30-
Sma195 *trend.Sma[T]
31-
Sma265 *trend.Sma[T]
32-
Sma390 *trend.Sma[T]
33-
Sma530 *trend.Sma[T]
26+
Sma10Roc10 *trend.Sma[T]
27+
Sma10Roc15 *trend.Sma[T]
28+
Sma10Roc20 *trend.Sma[T]
29+
Sma15Roc30 *trend.Sma[T]
30+
Sma50Roc40 *trend.Sma[T]
31+
Sma65Roc65 *trend.Sma[T]
32+
Sma75Roc75 *trend.Sma[T]
33+
Sma100Roc100 *trend.Sma[T]
34+
Sma130Roc195 *trend.Sma[T]
35+
Sma130Roc265 *trend.Sma[T]
36+
Sma130Roc390 *trend.Sma[T]
37+
Sma195Roc530 *trend.Sma[T]
3438
}
3539

3640
// NewPringsSpecialK function initializes a new Martin Pring's Special K instance.
3741
func NewPringsSpecialK[T helper.Float]() *PringsSpecialK[T] {
3842
return &PringsSpecialK[T]{
3943
Roc10: trend.NewRocWithPeriod[T](10),
4044
Roc15: trend.NewRocWithPeriod[T](15),
41-
Roc50: trend.NewRocWithPeriod[T](50),
45+
Roc20: trend.NewRocWithPeriod[T](20),
46+
Roc30: trend.NewRocWithPeriod[T](30),
47+
Roc40: trend.NewRocWithPeriod[T](40),
4248
Roc65: trend.NewRocWithPeriod[T](65),
4349
Roc75: trend.NewRocWithPeriod[T](75),
4450
Roc100: trend.NewRocWithPeriod[T](100),
45-
Roc130: trend.NewRocWithPeriod[T](130),
4651
Roc195: trend.NewRocWithPeriod[T](195),
52+
Roc265: trend.NewRocWithPeriod[T](265),
53+
Roc390: trend.NewRocWithPeriod[T](390),
54+
Roc530: trend.NewRocWithPeriod[T](530),
4755

48-
Sma10: trend.NewSmaWithPeriod[T](10),
49-
Sma15: trend.NewSmaWithPeriod[T](15),
50-
Sma20: trend.NewSmaWithPeriod[T](20),
51-
Sma30: trend.NewSmaWithPeriod[T](30),
52-
Sma40: trend.NewSmaWithPeriod[T](40),
53-
Sma65: trend.NewSmaWithPeriod[T](65),
54-
Sma75: trend.NewSmaWithPeriod[T](75),
55-
Sma100: trend.NewSmaWithPeriod[T](100),
56-
Sma195: trend.NewSmaWithPeriod[T](195),
57-
Sma265: trend.NewSmaWithPeriod[T](265),
58-
Sma390: trend.NewSmaWithPeriod[T](390),
59-
Sma530: trend.NewSmaWithPeriod[T](530),
56+
Sma10Roc10: trend.NewSmaWithPeriod[T](10),
57+
Sma10Roc15: trend.NewSmaWithPeriod[T](10),
58+
Sma10Roc20: trend.NewSmaWithPeriod[T](10),
59+
Sma15Roc30: trend.NewSmaWithPeriod[T](15),
60+
Sma50Roc40: trend.NewSmaWithPeriod[T](50),
61+
Sma65Roc65: trend.NewSmaWithPeriod[T](65),
62+
Sma75Roc75: trend.NewSmaWithPeriod[T](75),
63+
Sma100Roc100: trend.NewSmaWithPeriod[T](100),
64+
Sma130Roc195: trend.NewSmaWithPeriod[T](130),
65+
Sma130Roc265: trend.NewSmaWithPeriod[T](130),
66+
Sma130Roc390: trend.NewSmaWithPeriod[T](130),
67+
Sma195Roc530: trend.NewSmaWithPeriod[T](195),
6068
}
6169
}
6270

6371
func (p *PringsSpecialK[T]) Compute(closings <-chan T) <-chan T {
64-
c := helper.Duplicate(closings, 8)
72+
c := helper.Duplicate(closings, 12)
6573

6674
roc10 := p.Roc10.Compute(c[0])
6775
roc15 := p.Roc15.Compute(c[1])
68-
roc50 := p.Roc50.Compute(c[2])
69-
roc65 := p.Roc65.Compute(c[3])
70-
roc75 := p.Roc75.Compute(c[4])
71-
roc100 := p.Roc100.Compute(c[5])
72-
roc130 := p.Roc130.Compute(c[6])
73-
roc195 := p.Roc195.Compute(c[7])
76+
roc20 := p.Roc20.Compute(c[2])
77+
roc30 := p.Roc30.Compute(c[3])
78+
roc40 := p.Roc40.Compute(c[4])
79+
roc65 := p.Roc65.Compute(c[5])
80+
roc75 := p.Roc75.Compute(c[6])
81+
roc100 := p.Roc100.Compute(c[7])
82+
roc195 := p.Roc195.Compute(c[8])
83+
roc265 := p.Roc265.Compute(c[9])
84+
roc390 := p.Roc390.Compute(c[10])
85+
roc530 := p.Roc530.Compute(c[11])
7486

75-
roc10s := helper.Duplicate(roc10, 3)
76-
sma10 := p.Sma10.Compute(roc10s[0])
77-
sma15 := p.Sma15.Compute(roc10s[1])
78-
sma20 := p.Sma20.Compute(roc10s[2])
79-
sma30 := p.Sma30.Compute(roc15)
80-
sma40 := p.Sma40.Compute(roc50)
81-
sma65 := p.Sma65.Compute(roc65)
82-
sma75 := p.Sma75.Compute(roc75)
83-
sma100 := p.Sma100.Compute(roc100)
84-
roc130s := helper.Duplicate(roc130, 3)
85-
sma195 := p.Sma195.Compute(roc130s[0])
86-
sma265 := p.Sma265.Compute(roc130s[1])
87-
sma390 := p.Sma390.Compute(roc130s[2])
88-
sma530 := p.Sma530.Compute(roc195)
87+
sma10Roc10 := p.Sma10Roc10.Compute(roc10)
88+
sma10Roc15 := p.Sma10Roc15.Compute(roc15)
89+
sma10Roc20 := p.Sma10Roc20.Compute(roc20)
90+
sma15Roc30 := p.Sma15Roc30.Compute(roc30)
91+
sma50Roc40 := p.Sma50Roc40.Compute(roc40)
92+
sma65Roc65 := p.Sma65Roc65.Compute(roc65)
93+
sma75Roc75 := p.Sma75Roc75.Compute(roc75)
94+
sma100Roc100 := p.Sma100Roc100.Compute(roc100)
95+
sma130Roc195 := p.Sma130Roc195.Compute(roc195)
96+
sma130Roc265 := p.Sma130Roc265.Compute(roc265)
97+
sma130Roc390 := p.Sma130Roc390.Compute(roc390)
98+
sma195Roc530 := p.Sma195Roc530.Compute(roc530)
8999

90-
maxIdle := p.Sma530.IdlePeriod() + p.Roc195.IdlePeriod()
100+
maxIdle := p.Sma195Roc530.IdlePeriod() + p.Roc530.IdlePeriod()
91101

92-
sma10 = helper.Skip(sma10, maxIdle-p.Sma10.IdlePeriod()-p.Roc10.IdlePeriod())
93-
sma15 = helper.Skip(sma15, maxIdle-p.Sma15.IdlePeriod()-p.Roc10.IdlePeriod())
94-
sma20 = helper.Skip(sma20, maxIdle-p.Sma20.IdlePeriod()-p.Roc10.IdlePeriod())
95-
sma30 = helper.Skip(sma30, maxIdle-p.Sma30.IdlePeriod()-p.Roc15.IdlePeriod())
96-
sma40 = helper.Skip(sma40, maxIdle-p.Sma40.IdlePeriod()-p.Roc50.IdlePeriod())
97-
sma65 = helper.Skip(sma65, maxIdle-p.Sma65.IdlePeriod()-p.Roc65.IdlePeriod())
98-
sma75 = helper.Skip(sma75, maxIdle-p.Sma75.IdlePeriod()-p.Roc75.IdlePeriod())
99-
sma100 = helper.Skip(sma100, maxIdle-p.Sma100.IdlePeriod()-p.Roc100.IdlePeriod())
100-
sma195 = helper.Skip(sma195, maxIdle-p.Sma195.IdlePeriod()-p.Roc130.IdlePeriod())
101-
sma265 = helper.Skip(sma265, maxIdle-p.Sma265.IdlePeriod()-p.Roc130.IdlePeriod())
102-
sma390 = helper.Skip(sma390, maxIdle-p.Sma390.IdlePeriod()-p.Roc130.IdlePeriod())
103-
//sma530 = helper.Skip(sma530, p.Sma530.IdlePeriod()-p.Sma530.IdlePeriod())
102+
sma10Roc10 = helper.Skip(sma10Roc10, maxIdle-p.Sma10Roc10.IdlePeriod()-p.Roc10.IdlePeriod())
103+
sma10Roc15 = helper.Skip(sma10Roc15, maxIdle-p.Sma10Roc15.IdlePeriod()-p.Roc15.IdlePeriod())
104+
sma10Roc20 = helper.Skip(sma10Roc20, maxIdle-p.Sma10Roc20.IdlePeriod()-p.Roc20.IdlePeriod())
105+
sma15Roc30 = helper.Skip(sma15Roc30, maxIdle-p.Sma15Roc30.IdlePeriod()-p.Roc30.IdlePeriod())
106+
sma50Roc40 = helper.Skip(sma50Roc40, maxIdle-p.Sma50Roc40.IdlePeriod()-p.Roc40.IdlePeriod())
107+
sma65Roc65 = helper.Skip(sma65Roc65, maxIdle-p.Sma65Roc65.IdlePeriod()-p.Roc65.IdlePeriod())
108+
sma75Roc75 = helper.Skip(sma75Roc75, maxIdle-p.Sma75Roc75.IdlePeriod()-p.Roc75.IdlePeriod())
109+
sma100Roc100 = helper.Skip(sma100Roc100, maxIdle-p.Sma100Roc100.IdlePeriod()-p.Roc100.IdlePeriod())
110+
sma130Roc195 = helper.Skip(sma130Roc195, maxIdle-p.Sma130Roc195.IdlePeriod()-p.Roc195.IdlePeriod())
111+
sma130Roc265 = helper.Skip(sma130Roc265, maxIdle-p.Sma130Roc265.IdlePeriod()-p.Roc265.IdlePeriod())
112+
sma130Roc390 = helper.Skip(sma130Roc390, maxIdle-p.Sma130Roc390.IdlePeriod()-p.Roc390.IdlePeriod())
104113

105-
p0 := helper.MultiplyBy(sma10, 1)
106-
p1 := helper.Add(p0, helper.MultiplyBy(sma15, 2))
107-
p2 := helper.Add(p1, helper.MultiplyBy(sma20, 3))
108-
p3 := helper.Add(p2, helper.MultiplyBy(sma30, 4))
109-
p4 := helper.Add(p3, helper.MultiplyBy(sma40, 1))
110-
p5 := helper.Add(p4, helper.MultiplyBy(sma65, 2))
111-
p6 := helper.Add(p5, helper.MultiplyBy(sma75, 3))
112-
p7 := helper.Add(p6, helper.MultiplyBy(sma100, 4))
113-
p8 := helper.Add(p7, helper.MultiplyBy(sma195, 1))
114-
p9 := helper.Add(p8, helper.MultiplyBy(sma265, 2))
115-
p10 := helper.Add(p9, helper.MultiplyBy(sma390, 3))
116-
p11 := helper.Add(p10, helper.MultiplyBy(sma530, 4))
114+
p0 := helper.MultiplyBy(sma10Roc10, 1)
115+
p1 := helper.Add(p0, helper.MultiplyBy(sma10Roc15, 2))
116+
p2 := helper.Add(p1, helper.MultiplyBy(sma10Roc20, 3))
117+
p3 := helper.Add(p2, helper.MultiplyBy(sma15Roc30, 4))
118+
p4 := helper.Add(p3, helper.MultiplyBy(sma50Roc40, 1))
119+
p5 := helper.Add(p4, helper.MultiplyBy(sma65Roc65, 2))
120+
p6 := helper.Add(p5, helper.MultiplyBy(sma75Roc75, 3))
121+
p7 := helper.Add(p6, helper.MultiplyBy(sma100Roc100, 4))
122+
p8 := helper.Add(p7, helper.MultiplyBy(sma130Roc195, 1))
123+
p9 := helper.Add(p8, helper.MultiplyBy(sma130Roc265, 2))
124+
p10 := helper.Add(p9, helper.MultiplyBy(sma130Roc390, 3))
125+
p11 := helper.Add(p10, helper.MultiplyBy(sma195Roc530, 4))
117126

118127
return p11
119128
}

momentum/prings_special_k_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ import (
1111
func TestNewPringsSpecialKInitialization(t *testing.T) {
1212
psk := NewPringsSpecialK[float64]()
1313

14-
if psk.Roc10 == nil || psk.Roc15 == nil || psk.Roc50 == nil || psk.Roc65 == nil ||
15-
psk.Roc75 == nil || psk.Roc100 == nil || psk.Roc130 == nil || psk.Roc195 == nil {
14+
if psk.Roc10 == nil || psk.Roc15 == nil || psk.Roc20 == nil || psk.Roc30 == nil ||
15+
psk.Roc40 == nil || psk.Roc65 == nil || psk.Roc75 == nil || psk.Roc100 == nil ||
16+
psk.Roc195 == nil || psk.Roc265 == nil || psk.Roc390 == nil || psk.Roc530 == nil {
1617
t.Error("ROC pointers should be initialized")
1718
}
18-
if psk.Sma10 == nil || psk.Sma15 == nil || psk.Sma20 == nil || psk.Sma30 == nil ||
19-
psk.Sma40 == nil || psk.Sma65 == nil || psk.Sma75 == nil || psk.Sma100 == nil ||
20-
psk.Sma195 == nil || psk.Sma265 == nil || psk.Sma390 == nil || psk.Sma530 == nil {
19+
if psk.Sma10Roc10 == nil || psk.Sma10Roc15 == nil || psk.Sma10Roc20 == nil ||
20+
psk.Sma15Roc30 == nil || psk.Sma50Roc40 == nil || psk.Sma65Roc65 == nil ||
21+
psk.Sma75Roc75 == nil || psk.Sma100Roc100 == nil || psk.Sma130Roc195 == nil ||
22+
psk.Sma130Roc265 == nil || psk.Sma130Roc390 == nil || psk.Sma195Roc530 == nil {
2123
t.Error("SMA pointers should be initialized")
2224
}
2325
}

0 commit comments

Comments
 (0)