mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 15:09:51 +00:00
* Add support for correlation coefficient code * Bump ta depends * Bump gct-ta depends version
178 lines
3.8 KiB
Go
178 lines
3.8 KiB
Go
package gct
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
objects "github.com/d5/tengo/v2"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
|
"github.com/thrasher-corp/gocryptotrader/gctscript/modules/ta/indicators"
|
|
)
|
|
|
|
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}
|
|
correlationPayload = &indicators.Correlation{Array: oneElement}
|
|
ohlcPayload = &OHLCV{Map: ohlcdata}
|
|
unhandled = &objects.Array{}
|
|
|
|
oneElement = objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 1},
|
|
&objects.Float{Value: 2},
|
|
&objects.Float{Value: 3},
|
|
&objects.Float{Value: 4},
|
|
&objects.Float{Value: 5},
|
|
},
|
|
}
|
|
|
|
threeElement = objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 11},
|
|
&objects.Float{Value: 12},
|
|
&objects.Float{Value: 13},
|
|
},
|
|
},
|
|
&objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 21},
|
|
&objects.Float{Value: 22},
|
|
&objects.Float{Value: 23},
|
|
},
|
|
},
|
|
&objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 31},
|
|
&objects.Float{Value: 32},
|
|
&objects.Float{Value: 33},
|
|
},
|
|
},
|
|
&objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 41},
|
|
&objects.Float{Value: 42},
|
|
&objects.Float{Value: 43},
|
|
},
|
|
},
|
|
&objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Float{Value: 51},
|
|
&objects.Float{Value: 52},
|
|
&objects.Float{Value: 53},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
ohlcv = []objects.Object{
|
|
&objects.Time{Value: time.Now()},
|
|
&objects.Float{Value: 100},
|
|
&objects.Float{Value: 100},
|
|
&objects.Float{Value: 100},
|
|
&objects.Float{Value: 100},
|
|
&objects.Float{Value: 1},
|
|
}
|
|
|
|
ohlcdata = objects.Map{
|
|
Value: map[string]objects.Object{
|
|
"exchange": &objects.String{Value: "exchange"},
|
|
"pair": &objects.String{Value: "BTC-USD"},
|
|
"asset": &objects.String{Value: asset.Spot.String()},
|
|
"intervals": &objects.String{Value: time.Minute.String()},
|
|
"candles": &objects.Array{
|
|
Value: []objects.Object{
|
|
&objects.Array{
|
|
Value: ohlcv,
|
|
},
|
|
&objects.Array{
|
|
Value: ohlcv,
|
|
},
|
|
&objects.Array{
|
|
Value: ohlcv,
|
|
},
|
|
&objects.Array{
|
|
Value: ohlcv,
|
|
},
|
|
&objects.Array{
|
|
Value: ohlcv,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
)
|
|
|
|
func TestCommonWriteToCSV(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
OutputDir = filepath.Join(os.TempDir(), "script-temp")
|
|
defer func() {
|
|
err := os.RemoveAll(OutputDir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}()
|
|
|
|
_, err := WriteAsCSV()
|
|
if err == nil {
|
|
t.Fatal("error cannot be nil")
|
|
}
|
|
|
|
_, err = WriteAsCSV(nil)
|
|
if err == nil {
|
|
t.Fatal("error cannot be nil")
|
|
}
|
|
|
|
_, err = WriteAsCSV(&objects.String{Value: "something.txt"})
|
|
if err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, err = WriteAsCSV(&objects.String{Value: "something.txt"},
|
|
&objects.String{Value: "extra string"})
|
|
if err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, err = WriteAsCSV(&objects.String{Value: "script-temp.csv"}, unhandled)
|
|
if err == nil {
|
|
t.Fatal("error cannot be nil")
|
|
}
|
|
|
|
_, err = WriteAsCSV(&objects.String{Value: "script-temp.csv"},
|
|
atrPayload,
|
|
bbandsPayload,
|
|
emaPayload,
|
|
macdPayload,
|
|
mfiPayload,
|
|
obvPayload,
|
|
rsiPayload,
|
|
smaPayload,
|
|
correlationPayload,
|
|
ohlcPayload)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, err = WriteAsCSV(atrPayload)
|
|
if err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, err = WriteAsCSV(&objects.String{Value: "test.gct-script-temp2"},
|
|
atrPayload)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|