exchanges: Initial context propagation (#744)

* gct: phase one context awareness pass

* exchanges: context propagation pass

* common/requester: force context requirement

* gctcli/exchanges: linter fix

* rpcserver: fix test using dummy rpc server

* backtester: fix comments

* grpc: add correct cancel and timeout for commands

* rpcserver_test: add comment on dummy server

* common: deprecated SendHTTPGetRequest

* linter: fix

* linter: turn on no context check

* apichecker: fix context linter issue

* binance: use param context

* common: remove checks as this gets executed before main

* common: change mutex to RW as clients can be used by multiple go routines.

* common: remove init and JIT default client. Unexport global variables and add protection.

* common: Add comments

* bithumb: after dinner mints fix
This commit is contained in:
Ryan O'Hara-Reid
2021-09-11 13:52:07 +10:00
committed by GitHub
parent 72516f7268
commit d636049fb2
168 changed files with 8085 additions and 6996 deletions

View File

@@ -1,6 +1,7 @@
package backtest
import (
"context"
"errors"
"fmt"
"path/filepath"
@@ -245,7 +246,7 @@ func (bt *BackTest) setupExchangeSettings(cfg *config.Config) (exchange.Exchange
}
if makerFee == 0 || takerFee == 0 {
var apiMakerFee, apiTakerFee float64
apiMakerFee, apiTakerFee = getFees(exch, pair)
apiMakerFee, apiTakerFee = getFees(context.TODO(), exch, pair)
if makerFee == 0 {
makerFee = apiMakerFee
}
@@ -400,26 +401,28 @@ func (bt *BackTest) setupBot(cfg *config.Config, bot *engine.Engine) error {
}
// getFees will return an exchange's fee rate from GCT's wrapper function
func getFees(exch gctexchange.IBotExchange, fPair currency.Pair) (makerFee, takerFee float64) {
func getFees(ctx context.Context, exch gctexchange.IBotExchange, fPair currency.Pair) (makerFee, takerFee float64) {
var err error
takerFee, err = exch.GetFeeByType(&gctexchange.FeeBuilder{
FeeType: gctexchange.OfflineTradeFee,
Pair: fPair,
IsMaker: false,
PurchasePrice: 1,
Amount: 1,
})
takerFee, err = exch.GetFeeByType(ctx,
&gctexchange.FeeBuilder{
FeeType: gctexchange.OfflineTradeFee,
Pair: fPair,
IsMaker: false,
PurchasePrice: 1,
Amount: 1,
})
if err != nil {
log.Errorf(log.BackTester, "Could not retrieve taker fee for %v. %v", exch.GetName(), err)
}
makerFee, err = exch.GetFeeByType(&gctexchange.FeeBuilder{
FeeType: gctexchange.OfflineTradeFee,
Pair: fPair,
IsMaker: true,
PurchasePrice: 1,
Amount: 1,
})
makerFee, err = exch.GetFeeByType(ctx,
&gctexchange.FeeBuilder{
FeeType: gctexchange.OfflineTradeFee,
Pair: fPair,
IsMaker: true,
PurchasePrice: 1,
Amount: 1,
})
if err != nil {
log.Errorf(log.BackTester, "Could not retrieve maker fee for %v. %v", exch.GetName(), err)
}
@@ -621,7 +624,7 @@ func loadAPIData(cfg *config.Config, exch gctexchange.IBotExchange, fPair curren
if err != nil {
return nil, err
}
candles, err := api.LoadData(
candles, err := api.LoadData(context.TODO(),
dataType,
cfg.DataSettings.APIData.StartDate,
cfg.DataSettings.APIData.EndDate,
@@ -942,7 +945,7 @@ func (bt *BackTest) RunLive() error {
// from live. Its purpose is to be able to perform strategy analysis against current data
func (bt *BackTest) loadLiveDataLoop(resp *kline.DataFromKline, cfg *config.Config, exch gctexchange.IBotExchange, fPair currency.Pair, a asset.Item, dataType int64) {
startDate := time.Now()
candles, err := live.LoadData(
candles, err := live.LoadData(context.TODO(),
exch,
dataType,
cfg.DataSettings.Interval,
@@ -981,7 +984,7 @@ func (bt *BackTest) loadLiveData(resp *kline.DataFromKline, cfg *config.Config,
if exch == nil {
return errNilExchange
}
candles, err := live.LoadData(
candles, err := live.LoadData(context.TODO(),
exch,
dataType,
cfg.DataSettings.Interval,
@@ -992,7 +995,7 @@ func (bt *BackTest) loadLiveData(resp *kline.DataFromKline, cfg *config.Config,
}
resp.Item.Candles = append(resp.Item.Candles, candles.Candles...)
_, err = exch.FetchOrderbook(fPair, a)
_, err = exch.FetchOrderbook(context.TODO(), fPair, a)
if err != nil {
return err
}