Currency package update (#247)

* Initial currency overhaul before service system implementation

* Remove redundant currency string in orderbook.Base
Unexport lastupdated field in orderbook.Base as it was being instantiated multiple times
Add error handling for process orderbook

*  Remove redundant currency string in ticker.Price
 Unexport lastupdated field in ticker.Price
 Add error handling for process ticker function and fix tests

* Phase Two Update

* Update translations to use map type - thankyou to kempeng for spotting this

* Change pair method name from Display -> Format for better readability

* Fixes misspelling and tests

* Implement requested changes from GloriousCode

* Remove reduntant function and streamlined return in currency_translation.go

* Revert pair method naming conventions

* Change currency naming conventions

* Changed code type to exported Item type with underlying string to reduce complexity

* Added interim orderbook process method to orderbook.Base type

* Changed feebuilder struct field to currency.Pair

* Adds fall over system for backup fx providers

* deprecate function and children and fix linter issue with btcmarkets

* Fixed requested changes

* Fix bug and move mtx for rates

* Fixed after rebase oopsies

* Fix linter issues

* Fixes race conditions in testing functions

* Final phase coinmarketcap update

* fix linter issues

* Implement requested changes

* Adds configuration variables to increase/decrease time durations between updating currency file and fetching new currency rates

* Add a collection of tests to improve codecov

* After rebase oopsy fixes for btse

* Fix requested changes

* fix after rebase oopsies and add more efficient comparison checks within currency pair

* Fix linter issues
This commit is contained in:
Ryan O'Hara-Reid
2019-03-19 11:49:05 +11:00
committed by Adrian Gallagher
parent ed760e184e
commit 0990f9d118
189 changed files with 11982 additions and 8055 deletions

59
main.go
View File

@@ -15,7 +15,6 @@ import (
"github.com/thrasher-/gocryptotrader/config"
"github.com/thrasher-/gocryptotrader/currency"
"github.com/thrasher-/gocryptotrader/currency/coinmarketcap"
"github.com/thrasher-/gocryptotrader/currency/forexprovider"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
log "github.com/thrasher-/gocryptotrader/logger"
"github.com/thrasher-/gocryptotrader/portfolio"
@@ -61,6 +60,12 @@ func main() {
version := flag.Bool("version", false, "retrieves current GoCryptoTrader version")
verbosity := flag.Bool("verbose", false, "increases logging verbosity for GoCryptoTrader")
Coinmarketcap := flag.Bool("c", false, "overrides config and runs currency analaysis")
FxCurrencyConverter := flag.Bool("fxa", false, "overrides config and sets up foreign exchange Currency Converter")
FxCurrencyLayer := flag.Bool("fxb", false, "overrides config and sets up foreign exchange Currency Layer")
FxFixer := flag.Bool("fxc", false, "overrides config and sets up foreign exchange Fixer.io")
FxOpenExchangeRates := flag.Bool("fxd", false, "overrides config and sets up foreign exchange Open Exchange Rates")
flag.Parse()
if *version {
@@ -119,40 +124,30 @@ func main() {
bot.comms = communications.NewComm(&cfg)
bot.comms.GetEnabledCommunicationMediums()
if bot.config.GetCryptocurrencyProviderConfig().Enabled {
log.Debug("Seeding full market data...")
err = currency.SeedCryptocurrencyMarketData(coinmarketcap.Settings(bot.config.GetCryptocurrencyProviderConfig()))
if err != nil {
log.Warnf("Failure seeding cryptocurrency market data %s", err)
} else if *verbosity {
log.Debugf("Total market cryptocurrencies: %d",
len(currency.GetTotalMarketCryptocurrencies()))
}
err = currency.SeedExchangeMarketData(coinmarketcap.Settings(bot.config.GetCryptocurrencyProviderConfig()))
if err != nil {
log.Warnf("Failure seeding exchange market data %s", err)
} else if *verbosity {
log.Debugf("Total market exchanges: %d",
len(currency.GetTotalMarketExchanges()))
}
} else {
log.Debug("Cryptocurrency provider not enabled.")
var newFxSettings []currency.FXSettings
for _, d := range bot.config.Currency.ForexProviders {
newFxSettings = append(newFxSettings, currency.FXSettings(d))
}
log.Debugf("Fiat display currency: %s.", bot.config.Currency.FiatDisplayCurrency)
currency.BaseCurrency = bot.config.Currency.FiatDisplayCurrency
currency.FXProviders = forexprovider.StartFXService(bot.config.GetCurrencyConfig().ForexProviders)
log.Debugf("Primary forex conversion provider: %s.\n", bot.config.GetPrimaryForexProvider())
err = bot.config.RetrieveConfigCurrencyPairs(true)
err = currency.RunStorageUpdater(currency.BotOverrides{
Coinmarketcap: *Coinmarketcap,
FxCurrencyConverter: *FxCurrencyConverter,
FxCurrencyLayer: *FxCurrencyLayer,
FxFixer: *FxFixer,
FxOpenExchangeRates: *FxOpenExchangeRates,
},
currency.MainConfiguration{
ForexProviders: newFxSettings,
CryptocurrencyProvider: coinmarketcap.Settings(bot.config.Currency.CryptocurrencyProvider),
Cryptocurrencies: bot.config.Currency.Cryptocurrencies,
FiatDisplayCurrency: bot.config.Currency.FiatDisplayCurrency,
CurrencyDelay: bot.config.Currency.CurrencyFileUpdateDuration,
FxRateDelay: bot.config.Currency.ForeignExchangeUpdateDuration,
},
bot.dataDir,
*verbosity)
if err != nil {
log.Fatalf("Failed to retrieve config currency pairs. Error: %s", err)
}
log.Debugf("Successfully retrieved config currencies.")
log.Debugf("Fetching currency data from forex provider..")
err = currency.SeedCurrencyData(common.JoinStrings(currency.FiatCurrencies, ","))
if err != nil {
log.Fatalf("Unable to fetch forex data. Error: %s", err)
log.Warn("currency updater system failed to start", err)
}
bot.portfolio = &portfolio.Portfolio