mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-29 15:10:37 +00:00
BTCMarkets: Add automatic available pair updates
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -59,7 +59,7 @@ func (b *BTCMarkets) SetDefaults() {
|
||||
b.Ticker = make(map[string]Ticker)
|
||||
b.RequestCurrencyPairFormat.Delimiter = ""
|
||||
b.RequestCurrencyPairFormat.Uppercase = true
|
||||
b.ConfigCurrencyPairFormat.Delimiter = ""
|
||||
b.ConfigCurrencyPairFormat.Delimiter = "-"
|
||||
b.ConfigCurrencyPairFormat.Uppercase = true
|
||||
b.AssetTypes = []string{ticker.Spot}
|
||||
b.SupportsAutoPairUpdating = true
|
||||
@@ -112,6 +112,28 @@ func (b *BTCMarkets) GetFee() float64 {
|
||||
return b.Fee
|
||||
}
|
||||
|
||||
// GetMarkets returns the BTCMarkets instruments
|
||||
func (b *BTCMarkets) GetMarkets() ([]Market, error) {
|
||||
type marketsResp struct {
|
||||
Response
|
||||
Markets []Market `json:"markets"`
|
||||
}
|
||||
|
||||
var resp marketsResp
|
||||
path := fmt.Sprintf("%s/v2/market/active", b.APIUrl)
|
||||
|
||||
err := b.SendHTTPRequest(path, &resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !resp.Success {
|
||||
return nil, fmt.Errorf("%s unable to get markets: %s", b.Name, resp.ErrorMessage)
|
||||
}
|
||||
|
||||
return resp.Markets, nil
|
||||
}
|
||||
|
||||
// GetTicker returns a ticker
|
||||
// symbol - example "btc" or "ltc"
|
||||
func (b *BTCMarkets) GetTicker(firstPair, secondPair string) (Ticker, error) {
|
||||
|
||||
@@ -45,6 +45,14 @@ func TestGetFee(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetMarkets(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := bm.GetMarkets()
|
||||
if err != nil {
|
||||
t.Error("Test failed - GetMarkets() error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetTicker(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := bm.GetTicker("BTC", "AUD")
|
||||
|
||||
@@ -17,6 +17,12 @@ type Response struct {
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
// Market holds a tradable market instrument
|
||||
type Market struct {
|
||||
Instrument string `json:"instrument"`
|
||||
Currency string `json:"currency"`
|
||||
}
|
||||
|
||||
// Ticker holds ticker information
|
||||
type Ticker struct {
|
||||
BestBID float64 `json:"bestBid"`
|
||||
|
||||
@@ -29,29 +29,32 @@ func (b *BTCMarkets) Run() {
|
||||
log.Printf("%s %d currencies enabled: %s.\n", b.GetName(), len(b.EnabledPairs), b.EnabledPairs)
|
||||
}
|
||||
|
||||
if !common.StringDataContains(b.EnabledPairs, "AUD") || !common.StringDataContains(b.EnabledPairs, "AUD") {
|
||||
enabledPairs := []string{}
|
||||
for x := range b.EnabledPairs {
|
||||
enabledPairs = append(enabledPairs, b.EnabledPairs[x]+"AUD")
|
||||
markets, err := b.GetMarkets()
|
||||
if err != nil {
|
||||
log.Printf("%s failed to get active market. Err: %s", b.Name, err)
|
||||
} else {
|
||||
forceUpgrade := false
|
||||
if !common.StringDataContains(b.EnabledPairs, "-") || !common.StringDataContains(b.AvailablePairs, "-") {
|
||||
forceUpgrade = true
|
||||
}
|
||||
|
||||
availablePairs := []string{}
|
||||
for x := range b.AvailablePairs {
|
||||
availablePairs = append(availablePairs, b.AvailablePairs[x]+"AUD")
|
||||
var currencies []string
|
||||
for x := range markets {
|
||||
currencies = append(currencies, markets[x].Instrument+"-"+markets[x].Currency)
|
||||
}
|
||||
|
||||
log.Println("BTCMarkets: Upgrading available and enabled pairs")
|
||||
if forceUpgrade {
|
||||
enabledPairs := []string{"BTC-AUD"}
|
||||
log.Println("WARNING: Available pairs for BTC Makrets reset due to config upgrade, please enable the pairs you would like again.")
|
||||
|
||||
err := b.UpdateCurrencies(enabledPairs, true, true)
|
||||
err = b.UpdateCurrencies(enabledPairs, true, true)
|
||||
if err != nil {
|
||||
log.Printf("%s failed to update currencies. Err: %s", b.Name, err)
|
||||
}
|
||||
}
|
||||
err = b.UpdateCurrencies(currencies, false, forceUpgrade)
|
||||
if err != nil {
|
||||
log.Printf("%s Failed to get config.\n", b.GetName())
|
||||
return
|
||||
}
|
||||
|
||||
err = b.UpdateCurrencies(availablePairs, false, true)
|
||||
if err != nil {
|
||||
log.Printf("%s Failed to get config.\n", b.GetName())
|
||||
return
|
||||
log.Printf("%s failed to update currencies. Err: %s", b.Name, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
25
testdata/configtest.json
vendored
25
testdata/configtest.json
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user