BTCMarkets: Add automatic available pair updates

This commit is contained in:
Adrian Gallagher
2018-10-11 12:25:58 +11:00
parent 7c21cb6f84
commit 9b85b431ab
6 changed files with 82 additions and 43 deletions

File diff suppressed because one or more lines are too long

View File

@@ -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) {

View File

@@ -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")

View File

@@ -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"`

View File

@@ -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)
}
}
}

File diff suppressed because one or more lines are too long