From dc313a24f5d6209a8e414ed39f73e7028d9659b9 Mon Sep 17 00:00:00 2001 From: Scott Date: Mon, 14 Mar 2016 21:20:32 +1100 Subject: [PATCH 1/2] Each bot inherits from an interface and can be called as such to minimise duplicate code --- anxhttp.go | 41 ++++++ bitfinexhttp.go | 19 +++ bitstamphttp.go | 19 +++ brightonpeakhttp.go | 20 +++ btcchttp.go | 20 +++ btcehttp.go | 20 +++ btcmarkets.go | 20 +++ coinbasehttp.go | 20 +++ geminihttp.go | 19 +++ huobihttp.go | 20 +++ interfaces.go | 11 ++ itbithttp.go | 20 +++ kraken.go | 21 +++ lakebtchttp.go | 20 +++ localbitcoinshttp.go | 20 +++ main.go | 308 +++++++------------------------------------ okcoinhttp.go | 19 +++ poloniexhttp.go | 20 +++ 18 files changed, 397 insertions(+), 260 deletions(-) create mode 100644 interfaces.go diff --git a/anxhttp.go b/anxhttp.go index b5d46f4f..a749ab64 100644 --- a/anxhttp.go +++ b/anxhttp.go @@ -100,6 +100,45 @@ func (a *ANX) SetDefaults() { a.RESTPollingDelay = 10 } + + +/// +func (a *ANX) InterfaceSetDefaults() { + a.Name = "ANX" + a.Enabled = true + a.TakerFee = 0.6 + a.MakerFee = 0.3 + a.Verbose = false + a.Websocket = false + println("This is working using interfaces") + a.RESTPollingDelay = 10 +} +/// + + +//Setup is run on startup to setup exchange with config values +func (a *ANX) Setup(exch Exchanges) { + if !exch.Enabled { + a.SetEnabled(false) + } else { + a.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + a.SetAPIKeys(exch.APIKey, exch.APISecret) + a.RESTPollingDelay = exch.RESTPollingDelay + a.Verbose = exch.Verbose + a.Websocket = exch.Websocket + a.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + a.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + a.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} +//Start is run if exchange is enabled, after Setup +func(a *ANX) Start() { + if(a.Enabled) { + go a.Run() + } +} + + func (a *ANX) GetName() string { return a.Name } @@ -112,6 +151,8 @@ func (a *ANX) IsEnabled() bool { return a.Enabled } + + func (a *ANX) SetAPIKeys(apiKey, apiSecret string) { if !a.AuthenticatedAPISupport { return diff --git a/bitfinexhttp.go b/bitfinexhttp.go index 73de79fc..b120d5eb 100644 --- a/bitfinexhttp.go +++ b/bitfinexhttp.go @@ -195,6 +195,25 @@ func (b *Bitfinex) GetName() string { return b.Name } +func (b *Bitfinex) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (b *Bitfinex) Start() { + go b.Run() +} + func (b *Bitfinex) SetEnabled(enabled bool) { b.Enabled = enabled } diff --git a/bitstamphttp.go b/bitstamphttp.go index 9d6ffdf7..7648863f 100644 --- a/bitstamphttp.go +++ b/bitstamphttp.go @@ -145,10 +145,29 @@ func (b *Bitstamp) SetDefaults() { b.RESTPollingDelay = 10 } +func (b *Bitstamp) Start() { + go b.Run() +} + func (b *Bitstamp) GetName() string { return b.Name } +func (b *Bitstamp) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + func (b *Bitstamp) SetEnabled(enabled bool) { b.Enabled = enabled } diff --git a/brightonpeakhttp.go b/brightonpeakhttp.go index b587c57e..469df746 100644 --- a/brightonpeakhttp.go +++ b/brightonpeakhttp.go @@ -45,6 +45,26 @@ func (b *BrightonPeak) SetEnabled(enabled bool) { b.Enabled = enabled } +func (b *BrightonPeak) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (b *BrightonPeak) Start() { + go b.Run() +} + + func (b *BrightonPeak) IsEnabled() bool { return b.Enabled } diff --git a/btcchttp.go b/btcchttp.go index 06e93c02..7cad69a4 100644 --- a/btcchttp.go +++ b/btcchttp.go @@ -181,6 +181,26 @@ func (b *BTCC) SetDefaults() { b.RESTPollingDelay = 10 } +//Setup is run on startup to setup exchange with config values +func (b *BTCC) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} +//Start is run if exchange is enabled, after Setup +func(b *BTCC) Start() { + go b.Run() +} + func (b *BTCC) GetName() string { return b.Name } diff --git a/btcehttp.go b/btcehttp.go index 7a42a06c..c4b15532 100644 --- a/btcehttp.go +++ b/btcehttp.go @@ -99,6 +99,26 @@ func (b *BTCE) IsEnabled() bool { return b.Enabled } +func(b *BTCE) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + + } +} + +func(b *BTCE) Start() { + go b.Run() +} + func (b *BTCE) SetAPIKeys(apiKey, apiSecret string) { b.APIKey = apiKey b.APISecret = apiSecret diff --git a/btcmarkets.go b/btcmarkets.go index e7d5c3e9..df2d2663 100644 --- a/btcmarkets.go +++ b/btcmarkets.go @@ -108,6 +108,26 @@ func (b *BTCMarkets) IsEnabled() bool { return b.Enabled } +func (b *BTCMarkets) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + + } +} + +func(b *BTCMarkets) Start() { + go b.Run() +} + func (b *BTCMarkets) SetAPIKeys(apiKey, apiSecret string) { if !b.AuthenticatedAPISupport { return diff --git a/coinbasehttp.go b/coinbasehttp.go index 005e585d..c836981d 100644 --- a/coinbasehttp.go +++ b/coinbasehttp.go @@ -143,6 +143,26 @@ func (c *Coinbase) IsEnabled() bool { return c.Enabled } +func (c *Coinbase) Setup(exch Exchanges) { + if !exch.Enabled { + c.SetEnabled(false) + } else { + c.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + c.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) + c.RESTPollingDelay = exch.RESTPollingDelay + c.Verbose = exch.Verbose + c.Websocket = exch.Websocket + c.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + c.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + c.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + + } +} + +func (c *Coinbase) Start() { + go c.Run() +} + func (c *Coinbase) GetFee(maker bool) float64 { if maker { return c.MakerFee diff --git a/geminihttp.go b/geminihttp.go index 4acc43bb..25b88c0c 100644 --- a/geminihttp.go +++ b/geminihttp.go @@ -121,6 +121,25 @@ func (g *Gemini) IsEnabled() bool { return g.Enabled } +func (g *Gemini) Setup(exch Exchanges) { + if !exch.Enabled { + g.SetEnabled(false) + } else { + g.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + g.SetAPIKeys(exch.APIKey, exch.APISecret) + g.RESTPollingDelay = exch.RESTPollingDelay + g.Verbose = exch.Verbose + g.Websocket = exch.Websocket + g.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + g.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + g.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (g *Gemini) Start() { + go g.Run() +} + func (g *Gemini) SetAPIKeys(apiKey, apiSecret string) { g.APIKey = apiKey g.APISecret = apiSecret diff --git a/huobihttp.go b/huobihttp.go index 042f2559..d2e677d4 100644 --- a/huobihttp.go +++ b/huobihttp.go @@ -63,6 +63,26 @@ func (h *HUOBI) IsEnabled() bool { return h.Enabled } + +func (h *HUOBI) Setup(exch Exchanges) { + if !exch.Enabled { + h.SetEnabled(false) + } else { + h.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + h.SetAPIKeys(exch.APIKey, exch.APISecret) + h.RESTPollingDelay = exch.RESTPollingDelay + h.Verbose = exch.Verbose + h.Websocket = exch.Websocket + h.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + h.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + h.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (h *HUOBI) Start() { + go h.Run() +} + func (h *HUOBI) SetAPIKeys(apiKey, apiSecret string) { h.AccessKey = apiKey h.SecretKey = apiSecret diff --git a/interfaces.go b/interfaces.go new file mode 100644 index 00000000..ff3a5715 --- /dev/null +++ b/interfaces.go @@ -0,0 +1,11 @@ +package main + +/// +type IBotExchange interface { + Setup(exch Exchanges) + Start() + SetDefaults() + GetName() string + IsEnabled() bool +} +/// \ No newline at end of file diff --git a/itbithttp.go b/itbithttp.go index e968785b..6939326b 100644 --- a/itbithttp.go +++ b/itbithttp.go @@ -70,6 +70,26 @@ func (i *ItBit) IsEnabled() bool { return i.Enabled } +func (i *ItBit) Setup(exch Exchanges) { + if !exch.Enabled { + i.SetEnabled(false) + } else { + i.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + i.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) + i.RESTPollingDelay = exch.RESTPollingDelay + i.Verbose = exch.Verbose + i.Websocket = exch.Websocket + i.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + i.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + i.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (i *ItBit) Start() { + go i.Run() +} + + func (i *ItBit) SetAPIKeys(apiKey, apiSecret, userID string) { i.ClientKey = apiKey i.APISecret = apiSecret diff --git a/kraken.go b/kraken.go index fef1e055..6a597cbc 100644 --- a/kraken.go +++ b/kraken.go @@ -74,6 +74,27 @@ func (k *Kraken) IsEnabled() bool { return k.Enabled } + +func (k *Kraken) Setup(exch Exchanges) { + if !exch.Enabled { + k.SetEnabled(false) + } else { + k.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + k.SetAPIKeys(exch.APIKey, exch.APISecret) + k.RESTPollingDelay = exch.RESTPollingDelay + k.Verbose = exch.Verbose + k.Websocket = exch.Websocket + k.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + k.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + k.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (k *Kraken) Start() { + go k.Run() +} + + func (k *Kraken) SetAPIKeys(apiKey, apiSecret string) { k.ClientKey = apiKey k.APISecret = apiSecret diff --git a/lakebtchttp.go b/lakebtchttp.go index 31d68774..6280f94c 100644 --- a/lakebtchttp.go +++ b/lakebtchttp.go @@ -79,6 +79,26 @@ func (l *LakeBTC) IsEnabled() bool { return l.Enabled } +func (l *LakeBTC)Setup(exch Exchanges) { + if !exch.Enabled { + l.SetEnabled(false) + } else { + l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + l.SetAPIKeys(exch.APIKey, exch.APISecret) + l.RESTPollingDelay = exch.RESTPollingDelay + l.Verbose = exch.Verbose + l.Websocket = exch.Websocket + l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (l *LakeBTC) Start() { + go l.Run() +} + + func (l *LakeBTC) SetAPIKeys(apiKey, apiSecret string) { l.Email = apiKey l.APISecret = apiSecret diff --git a/localbitcoinshttp.go b/localbitcoinshttp.go index b27d811b..95f0cfad 100644 --- a/localbitcoinshttp.go +++ b/localbitcoinshttp.go @@ -58,6 +58,26 @@ func (l *LocalBitcoins) IsEnabled() bool { return l.Enabled } +func (l *LocalBitcoins)Setup(exch Exchanges) { + if !exch.Enabled { + l.SetEnabled(false) + } else { + l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + l.SetAPIKeys(exch.APIKey, exch.APISecret) + l.RESTPollingDelay = exch.RESTPollingDelay + l.Verbose = exch.Verbose + l.Websocket = exch.Websocket + l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (l *LocalBitcoins) Start() { + go l.Run() +} + + func (l *LocalBitcoins) GetFee(maker bool) float64 { if maker { return l.MakerFee diff --git a/main.go b/main.go index 89925182..2d935866 100644 --- a/main.go +++ b/main.go @@ -33,12 +33,28 @@ type Exchange struct { type Bot struct { config Config exchange Exchange + exchanges []IBotExchange shutdown chan bool } var bot Bot +func SetupBotConfiguration(s IBotExchange, exch Exchanges) { + if(s.GetName() == exch.Name) { + if(s.IsEnabled()) { + log.Println("Bot " + s.GetName() + " is enabled, starting") + s.Start() + } + } +} + + func main() { + /// + //var anx ANX + //exchCfg := ExchangeConfig{Name: "ANX" } + + /// HandleInterrupt() log.Println("Loading config file config.json..") @@ -94,26 +110,32 @@ func main() { log.Printf("Available Exchanges: %d. Enabled Exchanges: %d.\n", len(bot.config.Exchanges), GetEnabledExchanges()) log.Println("Bot Exchange support:") - bot.exchange.anx.SetDefaults() - bot.exchange.kraken.SetDefaults() - bot.exchange.btcc.SetDefaults() - bot.exchange.bitstamp.SetDefaults() - bot.exchange.brightonpeak.SetDefaults() - bot.exchange.bitfinex.SetDefaults() - bot.exchange.btce.SetDefaults() - bot.exchange.btcmarkets.SetDefaults() - bot.exchange.coinbase.SetDefaults() - bot.exchange.gemini.SetDefaults() - bot.exchange.okcoinChina.SetURL(OKCOIN_API_URL_CHINA) - bot.exchange.okcoinChina.SetDefaults() - bot.exchange.okcoinIntl.SetURL(OKCOIN_API_URL) - bot.exchange.okcoinIntl.SetDefaults() - bot.exchange.itbit.SetDefaults() - bot.exchange.lakebtc.SetDefaults() - bot.exchange.localbitcoins.SetDefaults() - bot.exchange.poloniex.SetDefaults() - bot.exchange.huobi.SetDefaults() - + bot.exchanges = []IBotExchange{ + &bot.exchange.anx, + &bot.exchange.kraken, + &bot.exchange.btcc, + &bot.exchange.bitstamp, + &bot.exchange.brightonpeak, + &bot.exchange.bitfinex, + &bot.exchange.btce, + &bot.exchange.btcmarkets, + &bot.exchange.coinbase, + &bot.exchange.gemini, + &bot.exchange.okcoinChina, + &bot.exchange.okcoinIntl, + &bot.exchange.itbit, + &bot.exchange.lakebtc, + &bot.exchange.localbitcoins, + &bot.exchange.poloniex, + &bot.exchange.huobi, + } + for i := 0; i < len(bot.exchanges); i++ { + if(bot.exchanges[i] != nil) { + bot.exchanges[i].SetDefaults() + log.Println("Bot: %s successfully set defaults", bot.exchanges[i].GetName()) + } + } + err = RetrieveConfigCurrencyPairs(bot.config) if err != nil { @@ -126,246 +148,12 @@ func main() { } else { log.Printf("%s: Exchange support: %s\n", exch.Name, IsEnabled(exch.Enabled)) } - - if bot.exchange.anx.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.anx.SetEnabled(false) - } else { - bot.exchange.anx.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.anx.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.anx.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.anx.Verbose = exch.Verbose - bot.exchange.anx.Websocket = exch.Websocket - bot.exchange.anx.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.anx.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.anx.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.anx.Run() - } - } else if bot.exchange.btcc.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.btcc.SetEnabled(false) - } else { - bot.exchange.btcc.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.btcc.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.btcc.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.btcc.Verbose = exch.Verbose - bot.exchange.btcc.Websocket = exch.Websocket - bot.exchange.btcc.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.btcc.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.btcc.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.btcc.Run() - } - } else if bot.exchange.bitstamp.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.bitstamp.SetEnabled(false) - } else { - bot.exchange.bitstamp.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.bitstamp.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) - bot.exchange.bitstamp.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.bitstamp.Verbose = exch.Verbose - bot.exchange.bitstamp.Websocket = exch.Websocket - bot.exchange.bitstamp.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.bitstamp.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.bitstamp.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.bitstamp.Run() - } - } else if bot.exchange.bitfinex.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.bitfinex.SetEnabled(false) - } else { - bot.exchange.bitfinex.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.bitfinex.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.bitfinex.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.bitfinex.Verbose = exch.Verbose - bot.exchange.bitfinex.Websocket = exch.Websocket - bot.exchange.bitfinex.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.bitfinex.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.bitfinex.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.bitfinex.Run() - } - } else if bot.exchange.brightonpeak.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.brightonpeak.SetEnabled(false) - } else { - bot.exchange.brightonpeak.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.brightonpeak.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) - bot.exchange.brightonpeak.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.brightonpeak.Verbose = exch.Verbose - bot.exchange.brightonpeak.Websocket = exch.Websocket - bot.exchange.brightonpeak.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.brightonpeak.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.brightonpeak.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.brightonpeak.Run() - } - } else if bot.exchange.btce.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.btce.SetEnabled(false) - } else { - bot.exchange.btce.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.btce.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.btce.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.btce.Verbose = exch.Verbose - bot.exchange.btce.Websocket = exch.Websocket - bot.exchange.btce.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.btce.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.btce.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.btce.Run() - } - } else if bot.exchange.btcmarkets.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.btcmarkets.SetEnabled(false) - } else { - bot.exchange.btcmarkets.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.btcmarkets.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.btcmarkets.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.btcmarkets.Verbose = exch.Verbose - bot.exchange.btcmarkets.Websocket = exch.Websocket - bot.exchange.btcmarkets.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.btcmarkets.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.btcmarkets.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.btcmarkets.Run() - } - } else if bot.exchange.coinbase.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.coinbase.SetEnabled(false) - } else { - bot.exchange.coinbase.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.coinbase.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) - bot.exchange.coinbase.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.coinbase.Verbose = exch.Verbose - bot.exchange.coinbase.Websocket = exch.Websocket - bot.exchange.coinbase.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.coinbase.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.coinbase.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.coinbase.Run() - } - } else if bot.exchange.gemini.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.gemini.SetEnabled(false) - } else { - bot.exchange.gemini.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.gemini.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.gemini.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.gemini.Verbose = exch.Verbose - bot.exchange.gemini.Websocket = exch.Websocket - bot.exchange.gemini.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.gemini.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.gemini.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.gemini.Run() - } - } else if bot.exchange.okcoinChina.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.okcoinChina.SetEnabled(false) - } else { - bot.exchange.okcoinChina.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.okcoinChina.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.okcoinChina.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.okcoinChina.Verbose = exch.Verbose - bot.exchange.okcoinChina.Websocket = exch.Websocket - bot.exchange.okcoinChina.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.okcoinChina.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.okcoinChina.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.okcoinChina.Run() - } - } else if bot.exchange.okcoinIntl.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.okcoinIntl.SetEnabled(false) - } else { - bot.exchange.okcoinIntl.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.okcoinIntl.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.okcoinIntl.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.okcoinIntl.Verbose = exch.Verbose - bot.exchange.okcoinIntl.Websocket = exch.Websocket - bot.exchange.okcoinIntl.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.okcoinIntl.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.okcoinIntl.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.okcoinIntl.Run() - } - } else if bot.exchange.itbit.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.itbit.SetEnabled(false) - } else { - bot.exchange.itbit.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.itbit.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) - bot.exchange.itbit.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.itbit.Verbose = exch.Verbose - bot.exchange.itbit.Websocket = exch.Websocket - bot.exchange.itbit.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.itbit.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.itbit.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.itbit.Run() - } - } else if bot.exchange.kraken.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.kraken.SetEnabled(false) - } else { - bot.exchange.kraken.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.kraken.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.kraken.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.kraken.Verbose = exch.Verbose - bot.exchange.kraken.Websocket = exch.Websocket - bot.exchange.kraken.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.kraken.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.kraken.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.kraken.Run() - } - } else if bot.exchange.lakebtc.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.lakebtc.SetEnabled(false) - } else { - bot.exchange.lakebtc.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.lakebtc.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.lakebtc.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.lakebtc.Verbose = exch.Verbose - bot.exchange.lakebtc.Websocket = exch.Websocket - bot.exchange.lakebtc.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.lakebtc.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.lakebtc.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.lakebtc.Run() - } - } else if bot.exchange.localbitcoins.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.localbitcoins.SetEnabled(false) - } else { - bot.exchange.localbitcoins.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.localbitcoins.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.localbitcoins.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.localbitcoins.Verbose = exch.Verbose - bot.exchange.localbitcoins.Websocket = exch.Websocket - bot.exchange.localbitcoins.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.localbitcoins.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.localbitcoins.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.localbitcoins.Run() - } - } else if bot.exchange.poloniex.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.poloniex.SetEnabled(false) - } else { - bot.exchange.poloniex.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.poloniex.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.poloniex.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.poloniex.Verbose = exch.Verbose - bot.exchange.poloniex.Websocket = exch.Websocket - bot.exchange.poloniex.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.poloniex.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.poloniex.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.poloniex.Run() - } - } else if bot.exchange.huobi.GetName() == exch.Name { - if !exch.Enabled { - bot.exchange.huobi.SetEnabled(false) - } else { - bot.exchange.huobi.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - bot.exchange.huobi.SetAPIKeys(exch.APIKey, exch.APISecret) - bot.exchange.huobi.RESTPollingDelay = exch.RESTPollingDelay - bot.exchange.huobi.Verbose = exch.Verbose - bot.exchange.huobi.Websocket = exch.Websocket - bot.exchange.huobi.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - bot.exchange.huobi.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - bot.exchange.huobi.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - go bot.exchange.huobi.Run() - } - } + + for i := 0; i < len(bot.exchanges); i++ { + if(bot.exchanges[i] != nil) { + SetupBotConfiguration(bot.exchanges[i], exch) + } + } } <-bot.shutdown Shutdown() diff --git a/okcoinhttp.go b/okcoinhttp.go index 3f0868ac..f32f4028 100644 --- a/okcoinhttp.go +++ b/okcoinhttp.go @@ -176,6 +176,25 @@ func (o *OKCoin) IsEnabled() bool { return o.Enabled } +func (o *OKCoin) Setup(exch Exchanges) { + if !exch.Enabled { + o.SetEnabled(false) + } else { + o.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + o.SetAPIKeys(exch.APIKey, exch.APISecret) + o.RESTPollingDelay = exch.RESTPollingDelay + o.Verbose = exch.Verbose + o.Websocket = exch.Websocket + o.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + o.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + o.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (o *OKCoin) Start() { + go o.Run() +} + func (o *OKCoin) SetURL(url string) { o.APIUrl = url } diff --git a/poloniexhttp.go b/poloniexhttp.go index 43ac589c..b08b1158 100644 --- a/poloniexhttp.go +++ b/poloniexhttp.go @@ -87,6 +87,26 @@ func (p *Poloniex) IsEnabled() bool { return p.Enabled } + +func (p *Poloniex) Setup(exch Exchanges) { + if !exch.Enabled { + p.SetEnabled(false) + } else { + p.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + p.SetAPIKeys(exch.APIKey, exch.APISecret) + p.RESTPollingDelay = exch.RESTPollingDelay + p.Verbose = exch.Verbose + p.Websocket = exch.Websocket + p.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + p.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + p.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} + +func (p *Poloniex) Start() { + go p.Run() +} + func (p *Poloniex) SetAPIKeys(apiKey, apiSecret string) { p.AccessKey = apiKey p.SecretKey = apiSecret From fc6809621b9b9e5daed2c7c4df1a06636d1710aa Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Sat, 19 Mar 2016 16:10:39 +1100 Subject: [PATCH 2/2] Made slight amendments to interface code, ran gofmt. --- anxhttp.go | 55 ++++++++----------------- bitfinexhttp.go | 27 ++++++------ bitstamphttp.go | 27 ++++++------ brightonpeakhttp.go | 28 ++++++------- btcchttp.go | 30 +++++++------- btcehttp.go | 33 +++++++-------- btcmarkets.go | 31 +++++++------- coinbasehttp.go | 28 ++++++------- geminihttp.go | 29 ++++++------- huobihttp.go | 30 +++++++------- interfaces.go | 12 +++--- itbithttp.go | 32 +++++++-------- kraken.go | 33 ++++++++------- lakebtchttp.go | 34 ++++++++-------- localbitcoinshttp.go | 34 ++++++++-------- main.go | 97 +++++++++++++++++++++----------------------- okcoinhttp.go | 29 ++++++------- poloniexhttp.go | 30 +++++++------- 18 files changed, 300 insertions(+), 319 deletions(-) diff --git a/anxhttp.go b/anxhttp.go index a749ab64..05dbbb95 100644 --- a/anxhttp.go +++ b/anxhttp.go @@ -100,44 +100,27 @@ func (a *ANX) SetDefaults() { a.RESTPollingDelay = 10 } - - -/// -func (a *ANX) InterfaceSetDefaults() { - a.Name = "ANX" - a.Enabled = true - a.TakerFee = 0.6 - a.MakerFee = 0.3 - a.Verbose = false - a.Websocket = false - println("This is working using interfaces") - a.RESTPollingDelay = 10 -} -/// - - //Setup is run on startup to setup exchange with config values -func (a *ANX) Setup(exch Exchanges) { - if !exch.Enabled { - a.SetEnabled(false) - } else { - a.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - a.SetAPIKeys(exch.APIKey, exch.APISecret) - a.RESTPollingDelay = exch.RESTPollingDelay - a.Verbose = exch.Verbose - a.Websocket = exch.Websocket - a.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - a.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - a.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} -//Start is run if exchange is enabled, after Setup -func(a *ANX) Start() { - if(a.Enabled) { - go a.Run() - } +func (a *ANX) Setup(exch Exchanges) { + if !exch.Enabled { + a.SetEnabled(false) + } else { + a.Enabled = true + a.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + a.SetAPIKeys(exch.APIKey, exch.APISecret) + a.RESTPollingDelay = exch.RESTPollingDelay + a.Verbose = exch.Verbose + a.Websocket = exch.Websocket + a.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + a.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + a.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } +//Start is run if exchange is enabled, after Setup +func (a *ANX) Start() { + go a.Run() +} func (a *ANX) GetName() string { return a.Name @@ -151,8 +134,6 @@ func (a *ANX) IsEnabled() bool { return a.Enabled } - - func (a *ANX) SetAPIKeys(apiKey, apiSecret string) { if !a.AuthenticatedAPISupport { return diff --git a/bitfinexhttp.go b/bitfinexhttp.go index b120d5eb..6052d96a 100644 --- a/bitfinexhttp.go +++ b/bitfinexhttp.go @@ -196,22 +196,23 @@ func (b *Bitfinex) GetName() string { } func (b *Bitfinex) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.APIKey, exch.APISecret) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } func (b *Bitfinex) Start() { - go b.Run() + go b.Run() } func (b *Bitfinex) SetEnabled(enabled bool) { diff --git a/bitstamphttp.go b/bitstamphttp.go index 7648863f..efd5dcdc 100644 --- a/bitstamphttp.go +++ b/bitstamphttp.go @@ -146,7 +146,7 @@ func (b *Bitstamp) SetDefaults() { } func (b *Bitstamp) Start() { - go b.Run() + go b.Run() } func (b *Bitstamp) GetName() string { @@ -154,18 +154,19 @@ func (b *Bitstamp) GetName() string { } func (b *Bitstamp) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } func (b *Bitstamp) SetEnabled(enabled bool) { diff --git a/brightonpeakhttp.go b/brightonpeakhttp.go index 469df746..1f47f154 100644 --- a/brightonpeakhttp.go +++ b/brightonpeakhttp.go @@ -46,25 +46,25 @@ func (b *BrightonPeak) SetEnabled(enabled bool) { } func (b *BrightonPeak) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } func (b *BrightonPeak) Start() { - go b.Run() + go b.Run() } - func (b *BrightonPeak) IsEnabled() bool { return b.Enabled } diff --git a/btcchttp.go b/btcchttp.go index 7cad69a4..157cd617 100644 --- a/btcchttp.go +++ b/btcchttp.go @@ -183,22 +183,24 @@ func (b *BTCC) SetDefaults() { //Setup is run on startup to setup exchange with config values func (b *BTCC) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.APIKey, exch.APISecret) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } + //Start is run if exchange is enabled, after Setup -func(b *BTCC) Start() { - go b.Run() +func (b *BTCC) Start() { + go b.Run() } func (b *BTCC) GetName() string { diff --git a/btcehttp.go b/btcehttp.go index c4b15532..6296a629 100644 --- a/btcehttp.go +++ b/btcehttp.go @@ -99,24 +99,25 @@ func (b *BTCE) IsEnabled() bool { return b.Enabled } -func(b *BTCE) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.APIKey, exch.APISecret) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - - } +func (b *BTCE) Setup(exch Exchanges) { + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + + } } -func(b *BTCE) Start() { - go b.Run() +func (b *BTCE) Start() { + go b.Run() } func (b *BTCE) SetAPIKeys(apiKey, apiSecret string) { diff --git a/btcmarkets.go b/btcmarkets.go index df2d2663..b4173e65 100644 --- a/btcmarkets.go +++ b/btcmarkets.go @@ -109,23 +109,24 @@ func (b *BTCMarkets) IsEnabled() bool { } func (b *BTCMarkets) Setup(exch Exchanges) { - if !exch.Enabled { - b.SetEnabled(false) - } else { - b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - b.SetAPIKeys(exch.APIKey, exch.APISecret) - b.RESTPollingDelay = exch.RESTPollingDelay - b.Verbose = exch.Verbose - b.Websocket = exch.Websocket - b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - - } + if !exch.Enabled { + b.SetEnabled(false) + } else { + b.Enabled = true + b.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + b.SetAPIKeys(exch.APIKey, exch.APISecret) + b.RESTPollingDelay = exch.RESTPollingDelay + b.Verbose = exch.Verbose + b.Websocket = exch.Websocket + b.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + b.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + b.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + + } } -func(b *BTCMarkets) Start() { - go b.Run() +func (b *BTCMarkets) Start() { + go b.Run() } func (b *BTCMarkets) SetAPIKeys(apiKey, apiSecret string) { diff --git a/coinbasehttp.go b/coinbasehttp.go index c836981d..a3be7d1d 100644 --- a/coinbasehttp.go +++ b/coinbasehttp.go @@ -144,23 +144,23 @@ func (c *Coinbase) IsEnabled() bool { } func (c *Coinbase) Setup(exch Exchanges) { - if !exch.Enabled { - c.SetEnabled(false) - } else { - c.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - c.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) - c.RESTPollingDelay = exch.RESTPollingDelay - c.Verbose = exch.Verbose - c.Websocket = exch.Websocket - c.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - c.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - c.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - - } + if !exch.Enabled { + c.SetEnabled(false) + } else { + c.Enabled = true + c.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + c.SetAPIKeys(exch.ClientID, exch.APIKey, exch.APISecret) + c.RESTPollingDelay = exch.RESTPollingDelay + c.Verbose = exch.Verbose + c.Websocket = exch.Websocket + c.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + c.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + c.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } func (c *Coinbase) Start() { - go c.Run() + go c.Run() } func (c *Coinbase) GetFee(maker bool) float64 { diff --git a/geminihttp.go b/geminihttp.go index 25b88c0c..25402bc9 100644 --- a/geminihttp.go +++ b/geminihttp.go @@ -122,22 +122,23 @@ func (g *Gemini) IsEnabled() bool { } func (g *Gemini) Setup(exch Exchanges) { - if !exch.Enabled { - g.SetEnabled(false) - } else { - g.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - g.SetAPIKeys(exch.APIKey, exch.APISecret) - g.RESTPollingDelay = exch.RESTPollingDelay - g.Verbose = exch.Verbose - g.Websocket = exch.Websocket - g.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - g.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - g.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} + if !exch.Enabled { + g.SetEnabled(false) + } else { + g.Enabled = true + g.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + g.SetAPIKeys(exch.APIKey, exch.APISecret) + g.RESTPollingDelay = exch.RESTPollingDelay + g.Verbose = exch.Verbose + g.Websocket = exch.Websocket + g.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + g.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + g.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} func (g *Gemini) Start() { - go g.Run() + go g.Run() } func (g *Gemini) SetAPIKeys(apiKey, apiSecret string) { diff --git a/huobihttp.go b/huobihttp.go index d2e677d4..8fe1f6cf 100644 --- a/huobihttp.go +++ b/huobihttp.go @@ -63,24 +63,24 @@ func (h *HUOBI) IsEnabled() bool { return h.Enabled } - func (h *HUOBI) Setup(exch Exchanges) { - if !exch.Enabled { - h.SetEnabled(false) - } else { - h.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - h.SetAPIKeys(exch.APIKey, exch.APISecret) - h.RESTPollingDelay = exch.RESTPollingDelay - h.Verbose = exch.Verbose - h.Websocket = exch.Websocket - h.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - h.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - h.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} + if !exch.Enabled { + h.SetEnabled(false) + } else { + h.Enabled = true + h.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + h.SetAPIKeys(exch.APIKey, exch.APISecret) + h.RESTPollingDelay = exch.RESTPollingDelay + h.Verbose = exch.Verbose + h.Websocket = exch.Websocket + h.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + h.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + h.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} func (h *HUOBI) Start() { - go h.Run() + go h.Run() } func (h *HUOBI) SetAPIKeys(apiKey, apiSecret string) { diff --git a/interfaces.go b/interfaces.go index ff3a5715..8fd4bfd2 100644 --- a/interfaces.go +++ b/interfaces.go @@ -1,11 +1,9 @@ package main -/// type IBotExchange interface { - Setup(exch Exchanges) - Start() - SetDefaults() - GetName() string - IsEnabled() bool + Setup(exch Exchanges) + Start() + SetDefaults() + GetName() string + IsEnabled() bool } -/// \ No newline at end of file diff --git a/itbithttp.go b/itbithttp.go index 6939326b..68932979 100644 --- a/itbithttp.go +++ b/itbithttp.go @@ -71,24 +71,24 @@ func (i *ItBit) IsEnabled() bool { } func (i *ItBit) Setup(exch Exchanges) { - if !exch.Enabled { - i.SetEnabled(false) - } else { - i.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - i.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) - i.RESTPollingDelay = exch.RESTPollingDelay - i.Verbose = exch.Verbose - i.Websocket = exch.Websocket - i.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - i.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - i.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} - -func (i *ItBit) Start() { - go i.Run() + if !exch.Enabled { + i.SetEnabled(false) + } else { + i.Enabled = true + i.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + i.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID) + i.RESTPollingDelay = exch.RESTPollingDelay + i.Verbose = exch.Verbose + i.Websocket = exch.Websocket + i.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + i.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + i.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } +func (i *ItBit) Start() { + go i.Run() +} func (i *ItBit) SetAPIKeys(apiKey, apiSecret, userID string) { i.ClientKey = apiKey diff --git a/kraken.go b/kraken.go index 6a597cbc..de2a1a20 100644 --- a/kraken.go +++ b/kraken.go @@ -74,26 +74,25 @@ func (k *Kraken) IsEnabled() bool { return k.Enabled } - func (k *Kraken) Setup(exch Exchanges) { - if !exch.Enabled { - k.SetEnabled(false) - } else { - k.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - k.SetAPIKeys(exch.APIKey, exch.APISecret) - k.RESTPollingDelay = exch.RESTPollingDelay - k.Verbose = exch.Verbose - k.Websocket = exch.Websocket - k.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - k.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - k.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} - -func (k *Kraken) Start() { - go k.Run() + if !exch.Enabled { + k.SetEnabled(false) + } else { + k.Enabled = true + k.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + k.SetAPIKeys(exch.APIKey, exch.APISecret) + k.RESTPollingDelay = exch.RESTPollingDelay + k.Verbose = exch.Verbose + k.Websocket = exch.Websocket + k.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + k.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + k.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } +func (k *Kraken) Start() { + go k.Run() +} func (k *Kraken) SetAPIKeys(apiKey, apiSecret string) { k.ClientKey = apiKey diff --git a/lakebtchttp.go b/lakebtchttp.go index 6280f94c..a80c67e7 100644 --- a/lakebtchttp.go +++ b/lakebtchttp.go @@ -79,25 +79,25 @@ func (l *LakeBTC) IsEnabled() bool { return l.Enabled } -func (l *LakeBTC)Setup(exch Exchanges) { - if !exch.Enabled { - l.SetEnabled(false) - } else { - l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - l.SetAPIKeys(exch.APIKey, exch.APISecret) - l.RESTPollingDelay = exch.RESTPollingDelay - l.Verbose = exch.Verbose - l.Websocket = exch.Websocket - l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} - -func (l *LakeBTC) Start() { - go l.Run() +func (l *LakeBTC) Setup(exch Exchanges) { + if !exch.Enabled { + l.SetEnabled(false) + } else { + l.Enabled = true + l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + l.SetAPIKeys(exch.APIKey, exch.APISecret) + l.RESTPollingDelay = exch.RESTPollingDelay + l.Verbose = exch.Verbose + l.Websocket = exch.Websocket + l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } +func (l *LakeBTC) Start() { + go l.Run() +} func (l *LakeBTC) SetAPIKeys(apiKey, apiSecret string) { l.Email = apiKey diff --git a/localbitcoinshttp.go b/localbitcoinshttp.go index 95f0cfad..bbeadcc3 100644 --- a/localbitcoinshttp.go +++ b/localbitcoinshttp.go @@ -58,25 +58,25 @@ func (l *LocalBitcoins) IsEnabled() bool { return l.Enabled } -func (l *LocalBitcoins)Setup(exch Exchanges) { - if !exch.Enabled { - l.SetEnabled(false) - } else { - l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - l.SetAPIKeys(exch.APIKey, exch.APISecret) - l.RESTPollingDelay = exch.RESTPollingDelay - l.Verbose = exch.Verbose - l.Websocket = exch.Websocket - l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} - -func (l *LocalBitcoins) Start() { - go l.Run() +func (l *LocalBitcoins) Setup(exch Exchanges) { + if !exch.Enabled { + l.SetEnabled(false) + } else { + l.Enabled = true + l.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + l.SetAPIKeys(exch.APIKey, exch.APISecret) + l.RESTPollingDelay = exch.RESTPollingDelay + l.Verbose = exch.Verbose + l.Websocket = exch.Websocket + l.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + l.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + l.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } } +func (l *LocalBitcoins) Start() { + go l.Run() +} func (l *LocalBitcoins) GetFee(maker bool) float64 { if maker { diff --git a/main.go b/main.go index 2d935866..9ce75fc5 100644 --- a/main.go +++ b/main.go @@ -31,30 +31,27 @@ type Exchange struct { } type Bot struct { - config Config - exchange Exchange - exchanges []IBotExchange - shutdown chan bool + config Config + exchange Exchange + exchanges []IBotExchange + shutdown chan bool } var bot Bot func SetupBotConfiguration(s IBotExchange, exch Exchanges) { - if(s.GetName() == exch.Name) { - if(s.IsEnabled()) { - log.Println("Bot " + s.GetName() + " is enabled, starting") - s.Start() - } - } + s.Setup(exch) + if s.GetName() == exch.Name { + if s.IsEnabled() { + log.Printf("%s: Exchange support: %s (Authenticated API support: %s - Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.AuthenticatedAPISupport), IsEnabled(exch.Verbose)) + s.Start() + } else { + log.Printf("%s: Exchange support: %s\n", exch.Name, IsEnabled(exch.Enabled)) + } + } } - func main() { - /// - //var anx ANX - //exchCfg := ExchangeConfig{Name: "ANX" } - - /// HandleInterrupt() log.Println("Loading config file config.json..") @@ -110,32 +107,36 @@ func main() { log.Printf("Available Exchanges: %d. Enabled Exchanges: %d.\n", len(bot.config.Exchanges), GetEnabledExchanges()) log.Println("Bot Exchange support:") + bot.exchange.okcoinIntl.APIUrl = OKCOIN_API_URL + bot.exchange.okcoinChina.APIUrl = OKCOIN_API_URL_CHINA + bot.exchanges = []IBotExchange{ - &bot.exchange.anx, - &bot.exchange.kraken, - &bot.exchange.btcc, - &bot.exchange.bitstamp, - &bot.exchange.brightonpeak, - &bot.exchange.bitfinex, - &bot.exchange.btce, - &bot.exchange.btcmarkets, - &bot.exchange.coinbase, - &bot.exchange.gemini, - &bot.exchange.okcoinChina, - &bot.exchange.okcoinIntl, - &bot.exchange.itbit, - &bot.exchange.lakebtc, - &bot.exchange.localbitcoins, - &bot.exchange.poloniex, - &bot.exchange.huobi, - } - for i := 0; i < len(bot.exchanges); i++ { - if(bot.exchanges[i] != nil) { - bot.exchanges[i].SetDefaults() - log.Println("Bot: %s successfully set defaults", bot.exchanges[i].GetName()) - } - } - + &bot.exchange.anx, + &bot.exchange.kraken, + &bot.exchange.btcc, + &bot.exchange.bitstamp, + &bot.exchange.brightonpeak, + &bot.exchange.bitfinex, + &bot.exchange.btce, + &bot.exchange.btcmarkets, + &bot.exchange.coinbase, + &bot.exchange.gemini, + &bot.exchange.okcoinChina, + &bot.exchange.okcoinIntl, + &bot.exchange.itbit, + &bot.exchange.lakebtc, + &bot.exchange.localbitcoins, + &bot.exchange.poloniex, + &bot.exchange.huobi, + } + + for i := 0; i < len(bot.exchanges); i++ { + if bot.exchanges[i] != nil { + bot.exchanges[i].SetDefaults() + log.Printf("Exchange %s successfully set default settings.\n", bot.exchanges[i].GetName()) + } + } + err = RetrieveConfigCurrencyPairs(bot.config) if err != nil { @@ -143,17 +144,11 @@ func main() { } for _, exch := range bot.config.Exchanges { - if exch.Enabled { - log.Printf("%s: Exchange support: %s (Authenticated API support: %s - Verbose mode: %s).\n", exch.Name, IsEnabled(exch.Enabled), IsEnabled(exch.AuthenticatedAPISupport), IsEnabled(exch.Verbose)) - } else { - log.Printf("%s: Exchange support: %s\n", exch.Name, IsEnabled(exch.Enabled)) + for i := 0; i < len(bot.exchanges); i++ { + if bot.exchanges[i] != nil { + SetupBotConfiguration(bot.exchanges[i], exch) + } } - - for i := 0; i < len(bot.exchanges); i++ { - if(bot.exchanges[i] != nil) { - SetupBotConfiguration(bot.exchanges[i], exch) - } - } } <-bot.shutdown Shutdown() diff --git a/okcoinhttp.go b/okcoinhttp.go index f32f4028..a0a7c6f8 100644 --- a/okcoinhttp.go +++ b/okcoinhttp.go @@ -177,22 +177,23 @@ func (o *OKCoin) IsEnabled() bool { } func (o *OKCoin) Setup(exch Exchanges) { - if !exch.Enabled { - o.SetEnabled(false) - } else { - o.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - o.SetAPIKeys(exch.APIKey, exch.APISecret) - o.RESTPollingDelay = exch.RESTPollingDelay - o.Verbose = exch.Verbose - o.Websocket = exch.Websocket - o.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - o.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - o.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} + if !exch.Enabled { + o.SetEnabled(false) + } else { + o.Enabled = true + o.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + o.SetAPIKeys(exch.APIKey, exch.APISecret) + o.RESTPollingDelay = exch.RESTPollingDelay + o.Verbose = exch.Verbose + o.Websocket = exch.Websocket + o.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + o.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + o.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} func (o *OKCoin) Start() { - go o.Run() + go o.Run() } func (o *OKCoin) SetURL(url string) { diff --git a/poloniexhttp.go b/poloniexhttp.go index b08b1158..3c2dcd36 100644 --- a/poloniexhttp.go +++ b/poloniexhttp.go @@ -87,24 +87,24 @@ func (p *Poloniex) IsEnabled() bool { return p.Enabled } - func (p *Poloniex) Setup(exch Exchanges) { - if !exch.Enabled { - p.SetEnabled(false) - } else { - p.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - p.SetAPIKeys(exch.APIKey, exch.APISecret) - p.RESTPollingDelay = exch.RESTPollingDelay - p.Verbose = exch.Verbose - p.Websocket = exch.Websocket - p.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") - p.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") - p.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") - } -} + if !exch.Enabled { + p.SetEnabled(false) + } else { + p.Enabled = true + p.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + p.SetAPIKeys(exch.APIKey, exch.APISecret) + p.RESTPollingDelay = exch.RESTPollingDelay + p.Verbose = exch.Verbose + p.Websocket = exch.Websocket + p.BaseCurrencies = SplitStrings(exch.BaseCurrencies, ",") + p.AvailablePairs = SplitStrings(exch.AvailablePairs, ",") + p.EnabledPairs = SplitStrings(exch.EnabledPairs, ",") + } +} func (p *Poloniex) Start() { - go p.Run() + go p.Run() } func (p *Poloniex) SetAPIKeys(apiKey, apiSecret string) {