Files
gocryptotrader/backtester/data/kline/kline_test.go
Adrian Gallagher f0d45aa1d2 golangci-lint/CI: Bump versions and introduce new linters (#798)
* golangci-lint/CI: Bump versions

Fix remaining linter issues

* Specifically set AppVeyor version

* Fix the infamous typos 👀

* Add go env cmd to AppVeyor

* Add go version cmd to AppVeyor

* Specify AppVeyor image, adjust linters

* Update go get to go install due to deprecation

* Bump golangci-lint timeout time for AppVeyor

* Change NW contract to NQ

* Address nitters

* GetRandomPair -> Pair{}

* Address nits

* Address time nitterinos plus additional tweaks

* More time inception upgrades!

* Bending time and space
2021-10-14 16:38:53 +11:00

298 lines
5.8 KiB
Go

package kline
import (
"errors"
"testing"
"time"
"github.com/shopspring/decimal"
"github.com/thrasher-corp/gocryptotrader/backtester/common"
"github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/event"
"github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/kline"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
gctkline "github.com/thrasher-corp/gocryptotrader/exchanges/kline"
)
const testExchange = "binance"
var elite = decimal.NewFromInt(1337)
func TestLoad(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
tt := time.Now()
d := DataFromKline{}
err := d.Load()
if !errors.Is(err, errNoCandleData) {
t.Errorf("received: %v, expected: %v", err, errNoCandleData)
}
d.Item = gctkline.Item{
Exchange: exch,
Pair: p,
Asset: a,
Interval: gctkline.FifteenMin,
Candles: []gctkline.Candle{
{
Time: tt,
Open: 1337,
High: 1337,
Low: 1337,
Close: 1337,
Volume: 1337,
},
},
}
err = d.Load()
if err != nil {
t.Error(err)
}
}
func TestHasDataAtTime(t *testing.T) {
t.Parallel()
dStart := time.Date(2020, 1, 0, 0, 0, 0, 0, time.UTC)
dInsert := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
dEnd := time.Date(2020, 1, 2, 0, 0, 0, 0, time.UTC)
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{}
has := d.HasDataAtTime(time.Now())
if has {
t.Error("expected false")
}
d.Item = gctkline.Item{
Exchange: exch,
Pair: p,
Asset: a,
Interval: gctkline.OneDay,
Candles: []gctkline.Candle{
{
Time: dInsert,
Open: 1337,
High: 1337,
Low: 1337,
Close: 1337,
Volume: 1337,
},
},
}
if err := d.Load(); err != nil {
t.Error(err)
}
has = d.HasDataAtTime(dInsert)
if has {
t.Error("expected false")
}
ranger, err := gctkline.CalculateCandleDateRanges(dStart, dEnd, gctkline.OneDay, 100000)
if err != nil {
t.Error(err)
}
d.RangeHolder = ranger
d.RangeHolder.SetHasDataFromCandles(d.Item.Candles)
has = d.HasDataAtTime(dInsert)
if !has {
t.Error("expected true")
}
}
func TestAppend(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{
RangeHolder: &gctkline.IntervalRangeHolder{},
}
item := gctkline.Item{
Exchange: exch,
Pair: p,
Asset: a,
Interval: gctkline.OneDay,
Candles: []gctkline.Candle{
{
Time: time.Now(),
Open: 1337,
High: 1337,
Low: 1337,
Close: 1337,
Volume: 1337,
},
},
}
d.AppendResults(&item)
}
func TestStreamOpen(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{}
bad := d.StreamOpen()
if len(bad) > 0 {
t.Error("expected no stream")
}
d.SetStream([]common.DataEventHandler{
&kline.Kline{
Base: event.Base{
Exchange: exch,
Time: time.Now(),
Interval: gctkline.OneDay,
CurrencyPair: p,
AssetType: a,
},
Open: elite,
High: elite,
Low: elite,
Close: elite,
Volume: elite,
},
})
d.Next()
open := d.StreamOpen()
if len(open) == 0 {
t.Error("expected open")
}
}
func TestStreamVolume(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{}
bad := d.StreamVol()
if len(bad) > 0 {
t.Error("expected no stream")
}
d.SetStream([]common.DataEventHandler{
&kline.Kline{
Base: event.Base{
Exchange: exch,
Time: time.Now(),
Interval: gctkline.OneDay,
CurrencyPair: p,
AssetType: a,
},
Open: elite,
High: elite,
Low: elite,
Close: elite,
Volume: elite,
},
})
d.Next()
open := d.StreamVol()
if len(open) == 0 {
t.Error("expected volume")
}
}
func TestStreamClose(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{}
bad := d.StreamClose()
if len(bad) > 0 {
t.Error("expected no stream")
}
d.SetStream([]common.DataEventHandler{
&kline.Kline{
Base: event.Base{
Exchange: exch,
Time: time.Now(),
Interval: gctkline.OneDay,
CurrencyPair: p,
AssetType: a,
},
Open: elite,
High: elite,
Low: elite,
Close: elite,
Volume: elite,
},
})
d.Next()
open := d.StreamClose()
if len(open) == 0 {
t.Error("expected close")
}
}
func TestStreamHigh(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{}
bad := d.StreamHigh()
if len(bad) > 0 {
t.Error("expected no stream")
}
d.SetStream([]common.DataEventHandler{
&kline.Kline{
Base: event.Base{
Exchange: exch,
Time: time.Now(),
Interval: gctkline.OneDay,
CurrencyPair: p,
AssetType: a,
},
Open: elite,
High: elite,
Low: elite,
Close: elite,
Volume: elite,
},
})
d.Next()
open := d.StreamHigh()
if len(open) == 0 {
t.Error("expected high")
}
}
func TestStreamLow(t *testing.T) {
t.Parallel()
exch := testExchange
a := asset.Spot
p := currency.NewPair(currency.BTC, currency.USDT)
d := DataFromKline{
RangeHolder: &gctkline.IntervalRangeHolder{},
}
bad := d.StreamLow()
if len(bad) > 0 {
t.Error("expected no stream")
}
d.SetStream([]common.DataEventHandler{
&kline.Kline{
Base: event.Base{
Exchange: exch,
Time: time.Now(),
Interval: gctkline.OneDay,
CurrencyPair: p,
AssetType: a,
},
Open: elite,
High: elite,
Low: elite,
Close: elite,
Volume: elite,
},
})
d.Next()
open := d.StreamLow()
if len(open) == 0 {
t.Error("expected low")
}
}