Indicators: Add support for correlation coefficient (#519)

* Add support for correlation coefficient code

* Bump ta depends

* Bump gct-ta depends version
This commit is contained in:
Adrian Gallagher
2020-06-23 17:49:08 +10:00
committed by GitHub
parent 59edb47960
commit 9f775ca952
8 changed files with 162 additions and 59 deletions

View File

@@ -53,6 +53,8 @@ func WriteAsCSV(args ...objects.Object) (objects.Object, error) {
temp, err = convertRSI(args[i])
case indicators.SimpleMovingAverage:
temp, err = convertSMA(args[i])
case indicators.CorrelationCoefficient:
temp, err = convertCorrelationCoefficient(args[i])
case indicators.OHLCV:
temp, err = convertOHLCV(args[i])
front = true
@@ -387,6 +389,32 @@ func convertSMA(a objects.Object) ([][]string, error) {
return bucket, nil
}
func convertCorrelationCoefficient(a objects.Object) ([][]string, error) {
obj, ok := objects.ToInterface(a).(*indicators.Correlation)
if !ok {
return nil, errors.New("casting failure")
}
var bucket = [][]string{
{
indicators.CorrelationCoefficient,
},
{
fmt.Sprintf("Period:%d", obj.Period),
},
}
var val string
for i := range obj.Value {
val, ok = objects.ToString(obj.Value[i])
if !ok {
return nil, errors.New("cannot convert object to string")
}
bucket = append(bucket, []string{val})
}
return bucket, nil
}
func convertOHLCV(a objects.Object) ([][]string, error) {
obj, ok := objects.ToInterface(a).(*OHLCV)
if !ok {

View File

@@ -12,16 +12,17 @@ import (
)
var (
atrPayload = &indicators.ATR{Array: oneElement}
bbandsPayload = &indicators.BBands{Array: threeElement}
emaPayload = &indicators.EMA{Array: oneElement}
macdPayload = &indicators.MACD{Array: threeElement}
mfiPayload = &indicators.MFI{Array: oneElement}
obvPayload = &indicators.OBV{Array: oneElement}
rsiPayload = &indicators.RSI{Array: oneElement}
smaPayload = &indicators.SMA{Array: oneElement}
ohlcPayload = &OHLCV{Map: ohlcdata}
unhandled = &objects.Array{}
atrPayload = &indicators.ATR{Array: oneElement}
bbandsPayload = &indicators.BBands{Array: threeElement}
emaPayload = &indicators.EMA{Array: oneElement}
macdPayload = &indicators.MACD{Array: threeElement}
mfiPayload = &indicators.MFI{Array: oneElement}
obvPayload = &indicators.OBV{Array: oneElement}
rsiPayload = &indicators.RSI{Array: oneElement}
smaPayload = &indicators.SMA{Array: oneElement}
correlationPayload = &indicators.Correlation{Array: oneElement}
ohlcPayload = &OHLCV{Map: ohlcdata}
unhandled = &objects.Array{}
oneElement = objects.Array{
Value: []objects.Object{
@@ -157,6 +158,7 @@ func TestCommonWriteToCSV(t *testing.T) {
obvPayload,
rsiPayload,
smaPayload,
correlationPayload,
ohlcPayload)
if err != nil {
t.Fatal(err)