mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-24 07:26:47 +00:00
Bitstamp: Fix currency pair handling (#762)
* Fix Bitstamp pair handling * Fix spelling * Populate namerinos * Address nitterinos * Revert trade currency code, introduces races between engine / this and rely on OB test instead * One liner
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
//+build mock_test_off
|
||||
//go:build mock_test_off
|
||||
// +build mock_test_off
|
||||
|
||||
// This will build if build tag mock_test_off is parsed and will do live testing
|
||||
// using all tests in (exchange)_test.go
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
//+build !mock_test_off
|
||||
//go:build !mock_test_off
|
||||
// +build !mock_test_off
|
||||
|
||||
// This will build if build tag mock_test_off is not parsed and will try to mock
|
||||
// all tests in _test.go
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,7 @@
|
||||
package bitstamp
|
||||
|
||||
import "errors"
|
||||
|
||||
// Transaction types
|
||||
const (
|
||||
Deposit = iota
|
||||
@@ -14,6 +16,8 @@ const (
|
||||
SellOrder
|
||||
)
|
||||
|
||||
var errWSPairParsingError = errors.New("unable to parse currency pair from wsResponse.Channel")
|
||||
|
||||
// Ticker holds ticker information
|
||||
type Ticker struct {
|
||||
Last float64 `json:"last,string"`
|
||||
|
||||
@@ -88,8 +88,24 @@ func (b *Bitstamp) wsHandleData(respRaw []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
currencyPair := strings.Split(wsResponse.Channel, currency.UnderscoreDelimiter)
|
||||
p, err := currency.NewPairFromString(strings.ToUpper(currencyPair[2]))
|
||||
var currencyPair string
|
||||
splitter := strings.Split(wsResponse.Channel, currency.UnderscoreDelimiter)
|
||||
if len(splitter) == 3 {
|
||||
currencyPair = splitter[2]
|
||||
} else {
|
||||
return errWSPairParsingError
|
||||
}
|
||||
pFmt, err := b.GetPairFormat(asset.Spot, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enabledPairs, err := b.GetEnabledPairs(asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := currency.NewPairFromFormattedPairs(currencyPair, enabledPairs, pFmt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -107,8 +123,25 @@ func (b *Bitstamp) wsHandleData(respRaw []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
currencyPair := strings.Split(wsResponse.Channel, currency.UnderscoreDelimiter)
|
||||
p, err := currency.NewPairFromString(strings.ToUpper(currencyPair[2]))
|
||||
|
||||
var currencyPair string
|
||||
splitter := strings.Split(wsResponse.Channel, currency.UnderscoreDelimiter)
|
||||
if len(splitter) == 3 {
|
||||
currencyPair = splitter[2]
|
||||
} else {
|
||||
return errWSPairParsingError
|
||||
}
|
||||
pFmt, err := b.GetPairFormat(asset.Spot, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enabledPairs, err := b.GetEnabledPairs(asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := currency.NewPairFromFormattedPairs(currencyPair, enabledPairs, pFmt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -151,8 +184,12 @@ func (b *Bitstamp) generateDefaultSubscriptions() ([]stream.ChannelSubscription,
|
||||
var subscriptions []stream.ChannelSubscription
|
||||
for i := range channels {
|
||||
for j := range enabledCurrencies {
|
||||
p, err := b.FormatExchangeCurrency(enabledCurrencies[j], asset.Spot)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
subscriptions = append(subscriptions, stream.ChannelSubscription{
|
||||
Channel: channels[i] + enabledCurrencies[j].Lower().String(),
|
||||
Channel: channels[i] + p.String(),
|
||||
Asset: asset.Spot,
|
||||
})
|
||||
}
|
||||
@@ -256,7 +293,11 @@ func (b *Bitstamp) seedOrderBook() error {
|
||||
}
|
||||
|
||||
for x := range p {
|
||||
orderbookSeed, err := b.GetOrderbook(p[x].String())
|
||||
pairFmt, err := b.FormatExchangeCurrency(p[x], asset.Spot)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
orderbookSeed, err := b.GetOrderbook(pairFmt.String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -56,8 +56,11 @@ func (b *Bitstamp) SetDefaults() {
|
||||
b.API.CredentialsValidator.RequiresKey = true
|
||||
b.API.CredentialsValidator.RequiresSecret = true
|
||||
b.API.CredentialsValidator.RequiresClientID = true
|
||||
requestFmt := ¤cy.PairFormat{Uppercase: true}
|
||||
configFmt := ¤cy.PairFormat{Uppercase: true}
|
||||
requestFmt := ¤cy.PairFormat{}
|
||||
configFmt := ¤cy.PairFormat{
|
||||
Uppercase: true,
|
||||
Delimiter: currency.ForwardSlashDelimiter,
|
||||
}
|
||||
err := b.SetGlobalPairsManager(requestFmt, configFmt, asset.Spot)
|
||||
if err != nil {
|
||||
log.Errorln(log.ExchangeSys, err)
|
||||
@@ -204,11 +207,61 @@ func (b *Bitstamp) Run() {
|
||||
b.PrintEnabledPairs()
|
||||
}
|
||||
|
||||
if !b.GetEnabledFeatures().AutoPairUpdates {
|
||||
forceUpdate := false
|
||||
format, err := b.GetPairFormat(asset.Spot, false)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s failed to get pair format. Err %s\n",
|
||||
b.Name,
|
||||
err)
|
||||
return
|
||||
}
|
||||
|
||||
err := b.UpdateTradablePairs(false)
|
||||
enabled, err := b.CurrencyPairs.GetPairs(asset.Spot, true)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s failed to get enabled currencies. Err %s\n",
|
||||
b.Name,
|
||||
err)
|
||||
return
|
||||
}
|
||||
|
||||
avail, err := b.CurrencyPairs.GetPairs(asset.Spot, false)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s failed to get available currencies. Err %s\n",
|
||||
b.Name,
|
||||
err)
|
||||
return
|
||||
}
|
||||
|
||||
if !common.StringDataContains(enabled.Strings(), format.Delimiter) ||
|
||||
!common.StringDataContains(avail.Strings(), format.Delimiter) {
|
||||
var enabledPairs currency.Pairs
|
||||
enabledPairs, err = currency.NewPairsFromStrings([]string{
|
||||
currency.BTC.String() + format.Delimiter + currency.USD.String(),
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys, "%s failed to update currencies. Err %s\n",
|
||||
b.Name,
|
||||
err)
|
||||
} else {
|
||||
log.Warn(log.ExchangeSys,
|
||||
"Bitstamp: Enabled and available pairs reset due to config upgrade, please enable the ones you would like to use again")
|
||||
forceUpdate = true
|
||||
|
||||
err = b.UpdatePairs(enabledPairs, asset.Spot, true, true)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s failed to update currencies. Err: %s\n",
|
||||
b.Name,
|
||||
err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !b.GetEnabledFeatures().AutoPairUpdates && !forceUpdate {
|
||||
return
|
||||
}
|
||||
|
||||
err = b.UpdateTradablePairs(forceUpdate)
|
||||
if err != nil {
|
||||
log.Errorf(log.ExchangeSys,
|
||||
"%s failed to update tradable pairs. Err: %s",
|
||||
@@ -229,9 +282,7 @@ func (b *Bitstamp) FetchTradablePairs(asset asset.Item) ([]string, error) {
|
||||
if pairs[x].Trading != "Enabled" {
|
||||
continue
|
||||
}
|
||||
|
||||
pair := strings.Split(pairs[x].Name, "/")
|
||||
products = append(products, pair[0]+pair[1])
|
||||
products = append(products, pairs[x].Name)
|
||||
}
|
||||
|
||||
return products, nil
|
||||
@@ -672,9 +723,16 @@ func (b *Bitstamp) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
"%s GetActiveOrders unable to parse time: %s\n", b.Name, err)
|
||||
}
|
||||
|
||||
pair, err := currency.NewPairFromString(resp[i].Currency)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var p currency.Pair
|
||||
if currPair == "all" {
|
||||
// Currency pairs are returned as format "currency_pair": "BTC/USD"
|
||||
// only when all is specified
|
||||
p, err = currency.NewPairFromString(resp[i].Currency)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
p = req.Pairs[0]
|
||||
}
|
||||
|
||||
orders = append(orders, order.Detail{
|
||||
@@ -684,7 +742,7 @@ func (b *Bitstamp) GetActiveOrders(req *order.GetOrdersRequest) ([]order.Detail,
|
||||
Type: order.Limit,
|
||||
Side: orderSide,
|
||||
Date: tm,
|
||||
Pair: pair,
|
||||
Pair: p,
|
||||
Exchange: b.Name,
|
||||
})
|
||||
}
|
||||
|
||||
1002
testdata/http_mock/bitstamp/bitstamp.json
vendored
1002
testdata/http_mock/bitstamp/bitstamp.json
vendored
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user