Skip to content

Commit def46a4

Browse files
committedApr 13, 2019
Update Variance and StdDev Indicators to modern syntax
1 parent 363b0c3 commit def46a4

5 files changed

+31
-29
lines changed
 

‎indicator_standard_deviation.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ import (
44
"github.com/sdcoffey/big"
55
)
66

7-
// StandardDeviationIndicator calculates the standard deviation of a base indicator.
7+
// NewStandardDeviationIndicator calculates the standard deviation of a base indicator.
88
// See https://www.investopedia.com/terms/s/standarddeviation.asp
9-
type StandardDeviationIndicator struct {
10-
Indicator Indicator
9+
func NewStandardDeviationIndicator(ind Indicator) Indicator {
10+
return standardDeviationIndicator{
11+
indicator: NewVarianceIndicator(ind),
12+
}
13+
}
14+
15+
type standardDeviationIndicator struct {
16+
indicator Indicator
1117
}
1218

1319
// Calculate returns the standard deviation of a base indicator
14-
func (sdi StandardDeviationIndicator) Calculate(index int) big.Decimal {
15-
return VarianceIndicator{
16-
Indicator: sdi.Indicator,
17-
}.Calculate(index).Sqrt()
20+
func (sdi standardDeviationIndicator) Calculate(index int) big.Decimal {
21+
return sdi.indicator.Calculate(index).Sqrt()
1822
}

‎indicator_standard_deviation_test.go

+2-6
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import (
99
func TestStandardDeviationIndicator(t *testing.T) {
1010
t.Run("when index is less than 1, returns 0", func(t *testing.T) {
1111
series := mockTimeSeries("0", "10")
12-
stdDev := StandardDeviationIndicator{
13-
Indicator: NewClosePriceIndicator(series),
14-
}
12+
stdDev := NewStandardDeviationIndicator(NewClosePriceIndicator(series))
1513

1614
assert.EqualValues(t, "0", stdDev.Calculate(0).String())
1715
})
@@ -26,9 +24,7 @@ func TestStandardDeviationIndicator(t *testing.T) {
2624
23,
2725
21)
2826

29-
stdDev := StandardDeviationIndicator{
30-
Indicator: NewClosePriceIndicator(series),
31-
}
27+
stdDev := NewStandardDeviationIndicator(NewClosePriceIndicator(series))
3228

3329
assert.EqualValues(t, "4.00", stdDev.Calculate(1).FormattedString(2))
3430
assert.EqualValues(t, "15.43", stdDev.Calculate(2).FormattedString(2))

‎indicator_variance.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@ package techan
22

33
import "github.com/sdcoffey/big"
44

5-
// VarianceIndicator provides a way to find the variance in a base indicator, where variances is the sum of squared
5+
// NewVarianceIndicator provides a way to find the variance in a base indicator, where variances is the sum of squared
66
// deviations from the mean at any given index in the time series.
7-
type VarianceIndicator struct {
7+
func NewVarianceIndicator(ind Indicator) Indicator {
8+
return varianceIndicator{
9+
Indicator: ind,
10+
}
11+
}
12+
13+
type varianceIndicator struct {
814
Indicator Indicator
915
}
1016

1117
// Calculate returns the Variance for this indicator at the given index
12-
func (vi VarianceIndicator) Calculate(index int) big.Decimal {
18+
func (vi varianceIndicator) Calculate(index int) big.Decimal {
1319
if index < 1 {
1420
return big.ZERO
1521
}

‎indicator_variance_test.go

+8-12
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import (
99
func TestVarianceIndicator(t *testing.T) {
1010
t.Run("when index is less than 1, returns 0", func(t *testing.T) {
1111
series := mockTimeSeries("0", "10")
12-
stdDev := StandardDeviationIndicator{
13-
Indicator: NewClosePriceIndicator(series),
14-
}
12+
stdDev := NewStandardDeviationIndicator(NewClosePriceIndicator(series))
1513

1614
assert.EqualValues(t, "0", stdDev.Calculate(0).String())
1715
})
@@ -26,15 +24,13 @@ func TestVarianceIndicator(t *testing.T) {
2624
23,
2725
21)
2826

29-
stdDev := VarianceIndicator{
30-
Indicator: NewClosePriceIndicator(series),
31-
}
27+
varInd := NewVarianceIndicator(NewClosePriceIndicator(series))
3228

33-
assert.EqualValues(t, "16.00", stdDev.Calculate(1).FormattedString(2))
34-
assert.EqualValues(t, "238.22", stdDev.Calculate(2).FormattedString(2))
35-
assert.EqualValues(t, "186.19", stdDev.Calculate(3).FormattedString(2))
36-
assert.EqualValues(t, "211.36", stdDev.Calculate(4).FormattedString(2))
37-
assert.EqualValues(t, "176.22", stdDev.Calculate(5).FormattedString(2))
38-
assert.EqualValues(t, "151.27", stdDev.Calculate(6).FormattedString(2))
29+
assert.EqualValues(t, "16.00", varInd.Calculate(1).FormattedString(2))
30+
assert.EqualValues(t, "238.22", varInd.Calculate(2).FormattedString(2))
31+
assert.EqualValues(t, "186.19", varInd.Calculate(3).FormattedString(2))
32+
assert.EqualValues(t, "211.36", varInd.Calculate(4).FormattedString(2))
33+
assert.EqualValues(t, "176.22", varInd.Calculate(5).FormattedString(2))
34+
assert.EqualValues(t, "151.27", varInd.Calculate(6).FormattedString(2))
3935
})
4036
}

‎timeseries.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func NewTimeSeries() (t *TimeSeries) {
2121
// If the candle is added, AddCandle will return true, otherwise it will return false.
2222
func (ts *TimeSeries) AddCandle(candle *Candle) bool {
2323
if candle == nil {
24-
panic(fmt.Errorf("Error adding Candle: candle cannot be nil"))
24+
panic(fmt.Errorf("error adding Candle: candle cannot be nil"))
2525
}
2626

2727
if ts.LastCandle() == nil || candle.Period.Since(ts.LastCandle().Period) >= 0 {

0 commit comments

Comments
 (0)
Please sign in to comment.