mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-07 07:26:48 +00:00
exchange/order/limits: Migrate to new package and integrate with exchanges (#1860)
* move limits, transition to key gen * rollout NewExchangePairAssetKey everywhere * test improvements * self-review fixes * ok, lets go * fix merge issue * slower value func,assertify,drop IsValidPairString * remove binance reference for backtesting test * Redundant nil checks removed due to redundancy * Update order_test.go * Move limits back into /exchanges/ * puts limits in a different box again * SHAZBERT SPECIAL SUGGESTIONS * Update gateio_wrapper.go * fixes all build issues * Many niteroos! * something has gone awry * bugfix * gk's everywhere nits * lint * extra lint * re-remove IsValidPairString * lint fix * standardise test * revert some bads * dupe rm * another revert 360 mcgee * un-in-revertify * Update exchange/order/limits/levels_test.go Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> * fix * Update exchanges/binance/binance_test.go HERE'S HOPING GITHUB FORMATS THIS CORRECTLY! Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com> * update text * rn func, same line err gk4202000 --------- Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io> Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>
This commit is contained in:
@@ -3822,23 +3822,18 @@ func TestGetLatestFundingRates(t *testing.T) {
|
||||
|
||||
func TestUpdateOrderExecutionLimits(t *testing.T) {
|
||||
t.Parallel()
|
||||
err := e.UpdateOrderExecutionLimits(t.Context(), asset.Spot)
|
||||
require.NoErrorf(t, err, "Error fetching %s pairs for test: %v", asset.Spot, err)
|
||||
instrumentInfo, err := e.GetInstruments(t.Context(), currency.BTC, e.GetAssetKind(asset.Spot), false)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, instrumentInfo, "instrument information must not be empty")
|
||||
limits, err := e.GetOrderExecutionLimits(asset.Spot, spotTradablePair)
|
||||
require.NoErrorf(t, err, "Asset: %s Pair: %s Err: %v", asset.Spot, spotTradablePair, err)
|
||||
var instrumentDetail *InstrumentData
|
||||
for a := range instrumentInfo {
|
||||
if instrumentInfo[a].InstrumentName == spotTradablePair.String() {
|
||||
instrumentDetail = instrumentInfo[a]
|
||||
break
|
||||
}
|
||||
for _, a := range e.GetAssetTypes(false) {
|
||||
t.Run(a.String(), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
require.NoError(t, e.UpdateOrderExecutionLimits(t.Context(), a), "UpdateOrderExecutionLimits must not error")
|
||||
pairs, err := e.CurrencyPairs.GetPairs(a, true)
|
||||
require.NoError(t, err, "GetPairs must not error")
|
||||
l, err := e.GetOrderExecutionLimits(a, pairs[0])
|
||||
require.NoError(t, err, "GetOrderExecutionLimits must not error")
|
||||
assert.Positive(t, l.MinimumBaseAmount, "MinimumBaseAmount should be positive")
|
||||
assert.Positive(t, l.PriceStepIncrementSize, "PriceStepIncrementSize should be positive")
|
||||
})
|
||||
}
|
||||
require.NotNil(t, instrumentDetail, "instrument required to be found")
|
||||
require.Equalf(t, instrumentDetail.TickSize, limits.PriceStepIncrementSize, "Asset: %s Pair: %s Expected: %f Got: %f", asset.Spot, spotTradablePair, instrumentDetail.TickSize, limits.MinimumBaseAmount)
|
||||
assert.Equalf(t, instrumentDetail.MinimumTradeAmount, limits.MinimumBaseAmount, "Pair: %s Expected: %f Got: %f", spotTradablePair, instrumentDetail.MinimumTradeAmount, limits.MinimumBaseAmount)
|
||||
}
|
||||
|
||||
func TestGetLockedStatus(t *testing.T) {
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/common/key"
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchange/order/limits"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchange/websocket/buffer"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
@@ -1220,13 +1221,13 @@ func (e *Exchange) UpdateOrderExecutionLimits(ctx context.Context, a asset.Item)
|
||||
if !e.SupportsAsset(a) {
|
||||
return fmt.Errorf("%s: %w - %v", e.Name, asset.ErrNotSupported, a)
|
||||
}
|
||||
for _, x := range baseCurrencies {
|
||||
for _, bc := range baseCurrencies {
|
||||
var instrumentsData []*InstrumentData
|
||||
var err error
|
||||
if e.Websocket.IsConnected() {
|
||||
instrumentsData, err = e.WSRetrieveInstrumentsData(ctx, currency.NewCode(x), e.GetAssetKind(a), false)
|
||||
instrumentsData, err = e.WSRetrieveInstrumentsData(ctx, currency.NewCode(bc), e.GetAssetKind(a), false)
|
||||
} else {
|
||||
instrumentsData, err = e.GetInstruments(ctx, currency.NewCode(x), e.GetAssetKind(a), false)
|
||||
instrumentsData, err = e.GetInstruments(ctx, currency.NewCode(bc), e.GetAssetKind(a), false)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1234,21 +1235,20 @@ func (e *Exchange) UpdateOrderExecutionLimits(ctx context.Context, a asset.Item)
|
||||
continue
|
||||
}
|
||||
|
||||
limits := make([]order.MinMaxLevel, len(instrumentsData))
|
||||
for x, inst := range instrumentsData {
|
||||
l := make([]limits.MinMaxLevel, len(instrumentsData))
|
||||
for i, inst := range instrumentsData {
|
||||
var pair currency.Pair
|
||||
pair, err = currency.NewPairFromString(inst.InstrumentName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
limits[x] = order.MinMaxLevel{
|
||||
Pair: pair,
|
||||
Asset: a,
|
||||
l[i] = limits.MinMaxLevel{
|
||||
Key: key.NewExchangeAssetPair(e.Name, a, pair),
|
||||
PriceStepIncrementSize: inst.TickSize,
|
||||
MinimumBaseAmount: inst.MinimumTradeAmount,
|
||||
}
|
||||
}
|
||||
err = e.LoadLimits(limits)
|
||||
err = limits.Load(l)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1364,12 +1364,7 @@ func (e *Exchange) GetOpenInterest(ctx context.Context, k ...key.PairAsset) ([]f
|
||||
}
|
||||
for a := range oi {
|
||||
result = append(result, futures.OpenInterest{
|
||||
Key: key.ExchangePairAsset{
|
||||
Exchange: e.Name,
|
||||
Base: k[i].Base,
|
||||
Quote: k[i].Quote,
|
||||
Asset: k[i].Asset,
|
||||
},
|
||||
Key: key.NewExchangeAssetPair(e.Name, k[i].Asset, k[i].Pair()),
|
||||
OpenInterest: oi[a].OpenInterest,
|
||||
})
|
||||
break
|
||||
@@ -1413,7 +1408,7 @@ func (e *Exchange) GetCurrencyTradeURL(_ context.Context, a asset.Item, cp curre
|
||||
case asset.OptionCombo:
|
||||
return tradeBaseURL + tradeOptionsCombo + cp.Base.Upper().String(), nil
|
||||
default:
|
||||
return "", fmt.Errorf("%w %v", asset.ErrNotSupported, a)
|
||||
return "", fmt.Errorf("%w %q", asset.ErrNotSupported, a)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user