Skip to content

Commit

Permalink
exchanges: add setTimeWindow boolean to GetKlineRequest param (thrash…
Browse files Browse the repository at this point in the history
…er-corp#1160)

* exchanges: add setTimeWindow boolean to GetKlineRequest params to differentiate between a set time period return from endpoint.

* glorious: nits

* exchange: conjugation

* Update exchanges/exchange.go

Co-authored-by: Scott <[email protected]>

* glorious: nits and an assortment of differences

* exchanges: remove some comments

* glorious: nits

* cleanup

* tests: fix

* Update exchanges/hitbtc/hitbtc_wrapper.go

Co-authored-by: Scott <[email protected]>

* Update exchanges/kline/kline.go

Co-authored-by: Scott <[email protected]>

* Update exchanges/kline/kline_test.go

Co-authored-by: Scott <[email protected]>

* glorious: nits

* kline: fix test

* rm unused variables

* almost: nits

* glorious: nits

* linter: fix

* rm unused variable

* Refactored comment in the okex tests to ensure that it accurately reflects the variable name and the issue related to the time window, as requested by GloriousCode. The previous comment did not align with the identifier assigned to the property, which could cause confusion and misunderstanding among other programmers or stakeholders. The updated comment will improve the clarity and readability of the codebase and make it easier to understand the intended purpose of the associated variables. The change was made with the aim of improving the overall quality and maintainability of the code.

---------

Co-authored-by: Ryan O'Hara-Reid <[email protected]>
Co-authored-by: Scott <[email protected]>
  • Loading branch information
3 people authored Apr 27, 2023
1 parent 668d083 commit 42475bf
Show file tree
Hide file tree
Showing 36 changed files with 806 additions and 468 deletions.
9 changes: 8 additions & 1 deletion backtester/engine/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -815,12 +815,19 @@ func (bt *BackTest) loadData(cfg *config.Config, exch gctexchange.IBotExchange,
if cfg.DataSettings.APIData.InclusiveEndDate {
cfg.DataSettings.APIData.EndDate = cfg.DataSettings.APIData.EndDate.Add(cfg.DataSettings.Interval.Duration())
}

var limit int64
limit, err = b.Features.Enabled.Kline.GetIntervalResultLimit(cfg.DataSettings.Interval)
if err != nil {
return nil, err
}

resp, err = loadAPIData(
cfg,
exch,
fPair,
a,
b.Features.Enabled.Kline.ResultLimit,
uint32(limit),
dataType)
if err != nil {
return resp, err
Expand Down
2 changes: 1 addition & 1 deletion engine/rpcserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2530,7 +2530,7 @@ func TestGetTechnicalAnalysis(t *testing.T) {
Enabled: currency.Pairs{cp},
}

b.Features.Enabled.Kline.Intervals = kline.DeployExchangeIntervals(kline.OneDay)
b.Features.Enabled.Kline.Intervals = kline.DeployExchangeIntervals(kline.IntervalCapacity{Interval: kline.OneDay})
err = em.Add(fExchange{IBotExchange: exch})
if !errors.Is(err, nil) {
t.Fatalf("received: '%v' but expected: '%v'", err, nil)
Expand Down
38 changes: 19 additions & 19 deletions exchanges/binance/binance_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,23 +167,23 @@ func (b *Binance) SetDefaults() {
AutoPairUpdates: true,
Kline: kline.ExchangeCapabilitiesEnabled{
Intervals: kline.DeployExchangeIntervals(
kline.OneMin,
kline.ThreeMin,
kline.FiveMin,
kline.FifteenMin,
kline.ThirtyMin,
kline.OneHour,
kline.TwoHour,
kline.FourHour,
kline.SixHour,
kline.EightHour,
kline.TwelveHour,
kline.OneDay,
kline.ThreeDay,
kline.OneWeek,
kline.OneMonth,
kline.IntervalCapacity{Interval: kline.OneMin},
kline.IntervalCapacity{Interval: kline.ThreeMin},
kline.IntervalCapacity{Interval: kline.FiveMin},
kline.IntervalCapacity{Interval: kline.FifteenMin},
kline.IntervalCapacity{Interval: kline.ThirtyMin},
kline.IntervalCapacity{Interval: kline.OneHour},
kline.IntervalCapacity{Interval: kline.TwoHour},
kline.IntervalCapacity{Interval: kline.FourHour},
kline.IntervalCapacity{Interval: kline.SixHour},
kline.IntervalCapacity{Interval: kline.EightHour},
kline.IntervalCapacity{Interval: kline.TwelveHour},
kline.IntervalCapacity{Interval: kline.OneDay},
kline.IntervalCapacity{Interval: kline.ThreeDay},
kline.IntervalCapacity{Interval: kline.OneWeek},
kline.IntervalCapacity{Interval: kline.OneMonth},
),
ResultLimit: 1000,
GlobalResultLimit: 1000,
},
},
}
Expand Down Expand Up @@ -1686,7 +1686,7 @@ func (b *Binance) FormatExchangeKlineInterval(interval kline.Interval) string {

// GetHistoricCandles returns candles between a time period for a set time interval
func (b *Binance) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := b.GetKlineRequest(pair, a, interval, start, end)
req, err := b.GetKlineRequest(pair, a, interval, start, end, false)
if err != nil {
return nil, err
}
Expand All @@ -1701,7 +1701,7 @@ func (b *Binance) GetHistoricCandles(ctx context.Context, pair currency.Pair, a
Symbol: req.Pair,
StartTime: req.Start,
EndTime: req.End,
Limit: int(b.Features.Enabled.Kline.ResultLimit),
Limit: int(req.RequestLimit),
})
if err != nil {
return nil, err
Expand Down Expand Up @@ -1741,7 +1741,7 @@ func (b *Binance) GetHistoricCandlesExtended(ctx context.Context, pair currency.
Symbol: req.Pair,
StartTime: req.RangeHolder.Ranges[x].Start.Time,
EndTime: req.RangeHolder.Ranges[x].End.Time,
Limit: int(b.Features.Enabled.Kline.ResultLimit),
Limit: int(req.RequestLimit),
})
if err != nil {
return nil, err
Expand Down
38 changes: 19 additions & 19 deletions exchanges/binanceus/binanceus_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,23 +124,23 @@ func (bi *Binanceus) SetDefaults() {
AutoPairUpdates: true,
Kline: kline.ExchangeCapabilitiesEnabled{
Intervals: kline.DeployExchangeIntervals(
kline.OneMin,
kline.ThreeMin,
kline.FiveMin,
kline.FifteenMin,
kline.ThirtyMin,
kline.OneHour,
kline.TwoHour,
kline.FourHour,
kline.SixHour,
kline.EightHour,
kline.TwelveHour,
kline.OneDay,
kline.ThreeDay,
kline.OneWeek,
kline.OneMonth,
kline.IntervalCapacity{Interval: kline.OneMin},
kline.IntervalCapacity{Interval: kline.ThreeMin},
kline.IntervalCapacity{Interval: kline.FiveMin},
kline.IntervalCapacity{Interval: kline.FifteenMin},
kline.IntervalCapacity{Interval: kline.ThirtyMin},
kline.IntervalCapacity{Interval: kline.OneHour},
kline.IntervalCapacity{Interval: kline.TwoHour},
kline.IntervalCapacity{Interval: kline.FourHour},
kline.IntervalCapacity{Interval: kline.SixHour},
kline.IntervalCapacity{Interval: kline.EightHour},
kline.IntervalCapacity{Interval: kline.TwelveHour},
kline.IntervalCapacity{Interval: kline.OneDay},
kline.IntervalCapacity{Interval: kline.ThreeDay},
kline.IntervalCapacity{Interval: kline.OneWeek},
kline.IntervalCapacity{Interval: kline.OneMonth},
),
ResultLimit: 1000,
GlobalResultLimit: 1000,
},
},
}
Expand Down Expand Up @@ -869,7 +869,7 @@ func (bi *Binanceus) ValidateCredentials(ctx context.Context, assetType asset.It

// GetHistoricCandles returns candles between a time period for a set time interval
func (bi *Binanceus) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := bi.GetKlineRequest(pair, a, interval, start, end)
req, err := bi.GetKlineRequest(pair, a, interval, start, end, false)
if err != nil {
return nil, err
}
Expand All @@ -879,7 +879,7 @@ func (bi *Binanceus) GetHistoricCandles(ctx context.Context, pair currency.Pair,
Symbol: req.Pair,
StartTime: req.Start,
EndTime: req.End,
Limit: int64(bi.Features.Enabled.Kline.ResultLimit),
Limit: req.RequestLimit,
})
if err != nil {
return nil, err
Expand Down Expand Up @@ -914,7 +914,7 @@ func (bi *Binanceus) GetHistoricCandlesExtended(ctx context.Context, pair curren
Symbol: req.Pair,
StartTime: req.RangeHolder.Ranges[x].Start.Time,
EndTime: req.RangeHolder.Ranges[x].End.Time,
Limit: int64(bi.Features.Enabled.Kline.ResultLimit),
Limit: req.RequestLimit,
})
if err != nil {
return nil, err
Expand Down
33 changes: 17 additions & 16 deletions exchanges/bitfinex/bitfinex_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,20 +147,20 @@ func (b *Bitfinex) SetDefaults() {
AutoPairUpdates: true,
Kline: kline.ExchangeCapabilitiesEnabled{
Intervals: kline.DeployExchangeIntervals(
kline.OneMin,
kline.FiveMin,
kline.FifteenMin,
kline.ThirtyMin,
kline.OneHour,
kline.ThreeHour,
kline.SixHour,
kline.TwelveHour,
kline.OneDay,
kline.OneWeek,
kline.TwoWeek,
kline.OneMonth,
kline.IntervalCapacity{Interval: kline.OneMin},
kline.IntervalCapacity{Interval: kline.FiveMin},
kline.IntervalCapacity{Interval: kline.FifteenMin},
kline.IntervalCapacity{Interval: kline.ThirtyMin},
kline.IntervalCapacity{Interval: kline.OneHour},
kline.IntervalCapacity{Interval: kline.ThreeHour},
kline.IntervalCapacity{Interval: kline.SixHour},
kline.IntervalCapacity{Interval: kline.TwelveHour},
kline.IntervalCapacity{Interval: kline.OneDay},
kline.IntervalCapacity{Interval: kline.OneWeek},
kline.IntervalCapacity{Interval: kline.TwoWeek},
kline.IntervalCapacity{Interval: kline.OneMonth},
),
ResultLimit: 10000,
GlobalResultLimit: 10000,
},
},
}
Expand Down Expand Up @@ -1084,7 +1084,7 @@ func (b *Bitfinex) FormatExchangeKlineInterval(in kline.Interval) string {

// GetHistoricCandles returns candles between a time period for a set time interval
func (b *Bitfinex) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := b.GetKlineRequest(pair, a, interval, start, end)
req, err := b.GetKlineRequest(pair, a, interval, start, end, false)
if err != nil {
return nil, err
}
Expand All @@ -1099,7 +1099,8 @@ func (b *Bitfinex) GetHistoricCandles(ctx context.Context, pair currency.Pair, a
b.FormatExchangeKlineInterval(req.ExchangeInterval),
req.Start.UnixMilli(),
req.End.UnixMilli(),
b.Features.Enabled.Kline.ResultLimit, true)
uint32(req.RequestLimit),
true)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1138,7 +1139,7 @@ func (b *Bitfinex) GetHistoricCandlesExtended(ctx context.Context, pair currency
b.FormatExchangeKlineInterval(req.ExchangeInterval),
req.RangeHolder.Ranges[x].Start.Ticks*1000,
req.RangeHolder.Ranges[x].End.Ticks*1000,
b.Features.Enabled.Kline.ResultLimit,
uint32(req.RequestLimit),
true)
if err != nil {
return nil, err
Expand Down
6 changes: 3 additions & 3 deletions exchanges/bithumb/bithumb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func TestMain(m *testing.M) {

err = b.UpdateTradablePairs(context.Background(), false)
if err != nil {
log.Fatal("Bithumb Setup() init error")
log.Fatal("Bithumb Setup() init error", err)
}

os.Exit(m.Run())
Expand Down Expand Up @@ -617,8 +617,8 @@ func TestGetHistoricCandles(t *testing.T) {
if err != nil {
t.Fatal(err)
}
startTime := time.Now().AddDate(0, 0, -1)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.OneMin, startTime, time.Now())
startTime := time.Now().AddDate(0, -2, 0)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.OneDay, startTime, time.Now())
if err != nil {
t.Fatal(err)
}
Expand Down
27 changes: 16 additions & 11 deletions exchanges/bithumb/bithumb_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,17 +115,22 @@ func (b *Bithumb) SetDefaults() {
AutoPairUpdates: true,
Kline: kline.ExchangeCapabilitiesEnabled{
Intervals: kline.DeployExchangeIntervals(
kline.OneMin,
kline.ThreeMin,
kline.FiveMin,
kline.TenMin,
kline.ThirtyMin,
kline.OneHour,
kline.SixHour,
kline.TwelveHour,
kline.OneDay,
kline.IntervalCapacity{Interval: kline.OneMin},
kline.IntervalCapacity{Interval: kline.ThreeMin},
kline.IntervalCapacity{Interval: kline.FiveMin},
kline.IntervalCapacity{Interval: kline.TenMin},
kline.IntervalCapacity{Interval: kline.ThirtyMin},
kline.IntervalCapacity{Interval: kline.OneHour},
// NOTE: The supported time intervals below are returned
// offset to the Asia/Seoul time zone. This may lead to
// issues with candle quality and conversion as the
// intervals may be broken up. Therefore the below intervals
// are constructed from hourly candles.
// kline.IntervalCapacity{Interval: kline.SixHour},
// kline.IntervalCapacity{Interval: kline.TwelveHour},
// kline.IntervalCapacity{Interval: kline.OneDay},
),
ResultLimit: 1500,
GlobalResultLimit: 1500,
},
},
}
Expand Down Expand Up @@ -784,7 +789,7 @@ func (b *Bithumb) FormatExchangeKlineInterval(in kline.Interval) string {

// GetHistoricCandles returns candles between a time period for a set time interval
func (b *Bithumb) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := b.GetKlineRequest(pair, a, interval, start, end)
req, err := b.GetKlineRequest(pair, a, interval, start, end, true)
if err != nil {
return nil, err
}
Expand Down
32 changes: 16 additions & 16 deletions exchanges/bitstamp/bitstamp_wrapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,20 +111,20 @@ func (b *Bitstamp) SetDefaults() {
AutoPairUpdates: true,
Kline: kline.ExchangeCapabilitiesEnabled{
Intervals: kline.DeployExchangeIntervals(
kline.OneMin,
kline.ThreeMin,
kline.FiveMin,
kline.FifteenMin,
kline.ThirtyMin,
kline.OneHour,
kline.TwoHour,
kline.FourHour,
kline.SixHour,
kline.TwelveHour,
kline.OneDay,
kline.ThreeDay,
kline.IntervalCapacity{Interval: kline.OneMin},
kline.IntervalCapacity{Interval: kline.ThreeMin},
kline.IntervalCapacity{Interval: kline.FiveMin},
kline.IntervalCapacity{Interval: kline.FifteenMin},
kline.IntervalCapacity{Interval: kline.ThirtyMin},
kline.IntervalCapacity{Interval: kline.OneHour},
kline.IntervalCapacity{Interval: kline.TwoHour},
kline.IntervalCapacity{Interval: kline.FourHour},
kline.IntervalCapacity{Interval: kline.SixHour},
kline.IntervalCapacity{Interval: kline.TwelveHour},
kline.IntervalCapacity{Interval: kline.OneDay},
kline.IntervalCapacity{Interval: kline.ThreeDay},
),
ResultLimit: 1000,
GlobalResultLimit: 1000,
},
},
}
Expand Down Expand Up @@ -855,7 +855,7 @@ func (b *Bitstamp) ValidateCredentials(ctx context.Context, assetType asset.Item

// GetHistoricCandles returns candles between a time period for a set time interval
func (b *Bitstamp) GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error) {
req, err := b.GetKlineRequest(pair, a, interval, start, end)
req, err := b.GetKlineRequest(pair, a, interval, start, end, false)
if err != nil {
return nil, err
}
Expand All @@ -865,7 +865,7 @@ func (b *Bitstamp) GetHistoricCandles(ctx context.Context, pair currency.Pair, a
req.Start,
req.End,
b.FormatExchangeKlineInterval(req.ExchangeInterval),
strconv.FormatInt(int64(b.Features.Enabled.Kline.ResultLimit), 10))
strconv.FormatInt(req.RequestLimit, 10))
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -903,7 +903,7 @@ func (b *Bitstamp) GetHistoricCandlesExtended(ctx context.Context, pair currency
req.RangeHolder.Ranges[x].Start.Time,
req.RangeHolder.Ranges[x].End.Time,
b.FormatExchangeKlineInterval(req.ExchangeInterval),
strconv.FormatInt(int64(b.Features.Enabled.Kline.ResultLimit), 10),
strconv.FormatInt(req.RequestLimit, 10),
)
if err != nil {
return nil, err
Expand Down
25 changes: 24 additions & 1 deletion exchanges/bittrex/bittrex_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -697,20 +697,43 @@ func TestGetHistoricTrades(t *testing.T) {
}

func TestGetHistoricCandles(t *testing.T) {
t.Parallel()
pair, err := currency.NewPairFromString("btc-usdt")
if err != nil {
t.Fatal(err)
}

start := time.Unix(1546300800, 0)
end := time.Unix(1577836799, 0)
end := start.AddDate(0, 12, 0)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.OneDay, start, end)
if err != nil {
t.Fatal(err)
}

end = time.Now()
start = end.AddDate(0, -12, 0)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.OneDay, start, end)
if err != nil {
t.Fatal(err)
}

end = time.Now()
start = end.AddDate(0, 0, -30)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.OneHour, start, end)
if err != nil {
t.Fatal(err)
}

end = time.Now()
start = end.AddDate(0, 0, -1).Add(time.Minute * 5)
_, err = b.GetHistoricCandles(context.Background(), pair, asset.Spot, kline.FiveMin, start, end)
if err != nil {
t.Fatal(err)
}
}

func TestGetHistoricCandlesExtended(t *testing.T) {
t.Parallel()
pair, err := currency.NewPairFromString("btc-usdt")
if err != nil {
t.Fatal(err)
Expand Down
Loading

0 comments on commit 42475bf

Please sign in to comment.