mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-19 15:10:05 +00:00
* initial concept of a nice validation tester for exchanges * adds some datahandler design * expand testing * more tests and fixes * minor end of day fix for bithumb * fixes implementation issues * more test coverage and improvements, but not sure if i should continue * fix more wrapper implementations * adds error type, more fixes * changes signature, fixes implementations * fixes more wrapper implementations * one more bit * more cleanup * WOW things work? * lintle 1/1337 * mini bump * fixes all linting * neaten * GetOrderInfo+ asset pair fixes+improvements * adds new websocket test * expand ws testing * fix bug, expand tests, improve implementation * code coverage of a lot of new codes * fixes everything * reverts accidental changes * minor fixes from reviewing code * removes Bitfinex cancelBatchOrder implementation * fixes dumb baby typo for babies * mini nit fixes * so many nits to address * addresses all the nits * Titlecase * switcheroo * removes websocket testing for now * fix appveyor, minor test fix * fixes typo, re-kindles killed kode * skip binance wrapper tests when running CI * expired context, huobi okx fixes * kodespull * fix ordering * time fix because why not * fix exmo, others * hopefully this fixes all of my life's problems * last thing today * huobi, more like hypotrophy * golangci-lint, more like mypooroldknee-splint * fix huobi times by removing them * should fix okx currency issues * blocks the application * adds last little contingency for pairs * addresses most nits and new problems * lovely fixed before seeing why okx sucks * fixes issues with okx websocket * the classic receieieivaier * lintle * adds test and fixes existing tests * expands error handling messages during setup * fixes dumb okx bugs introduced * quick fix for lint and exmo * fixes nixes * fix exmo deposit issue * lint * fixes issue with extra asset runs missing * fix surprise race * all the lint and merge fixes * fixes surprise bugs in OKx * fixes issues with times and chains * fixing all the merge stuff * merge fix * rm logs and a panic potential * lovely lint lament * an easy demonstration of scenario, but not of initial purpose * put it in the bin * Revert "put it in the bin" This reverts commit 15c6490f713233d43f10957367fcbf18e3818bdd. * re-add after immediate error popup * fix mini poor test design * okx okay * merge fixes * fixes issues discovered in lovely test * I FORGOT TO COMMIT THIS * nit fixaroonaboo * forgoetten test fix * revert old okx asset intrument work * fixes * revert problems I didnt understand. update bybit * fix merge bugs * test cleanup * further improvements * reshuffle and lint * rm redundant CI_TEST by rm the CI_TEST field that is redundant * path fix * move to its own section, dont run on 32 bit + appveyor * lint * fix lbank * address nits * let it rip * fix failing test time range * niteroo boogaloo * mod tidy, use common.SimpleTimeFormat
148 lines
4.1 KiB
Go
148 lines
4.1 KiB
Go
package currency
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
var errEmptyPairString = errors.New("empty pair string")
|
|
|
|
// GetDefaultExchangeRates returns the currency exchange rates based off the
|
|
// default fiat values
|
|
func GetDefaultExchangeRates() (Conversions, error) {
|
|
return storage.GetDefaultForeignExchangeRates()
|
|
}
|
|
|
|
// GetExchangeRates returns the full fiat currency exchange rates base off
|
|
// configuration parameters supplied to the currency storage
|
|
func GetExchangeRates() (Conversions, error) {
|
|
return storage.GetExchangeRates()
|
|
}
|
|
|
|
// UpdateBaseCurrency updates storage base currency
|
|
func UpdateBaseCurrency(c Code) error {
|
|
return storage.UpdateBaseCurrency(c)
|
|
}
|
|
|
|
// GetBaseCurrency returns the storage base currency
|
|
func GetBaseCurrency() Code {
|
|
return storage.GetBaseCurrency()
|
|
}
|
|
|
|
// GetDefaultBaseCurrency returns storage default base currency
|
|
func GetDefaultBaseCurrency() Code {
|
|
return storage.GetDefaultBaseCurrency()
|
|
}
|
|
|
|
// GetCryptocurrencies returns the storage enabled cryptocurrencies
|
|
func GetCryptocurrencies() Currencies {
|
|
return storage.GetCryptocurrencies()
|
|
}
|
|
|
|
// GetDefaultCryptocurrencies returns a list of default cryptocurrencies
|
|
func GetDefaultCryptocurrencies() Currencies {
|
|
return storage.GetDefaultCryptocurrencies()
|
|
}
|
|
|
|
// GetFiatCurrencies returns the storage enabled fiat currencies
|
|
func GetFiatCurrencies() Currencies {
|
|
return storage.GetFiatCurrencies()
|
|
}
|
|
|
|
// GetDefaultFiatCurrencies returns a list of default fiat currencies
|
|
func GetDefaultFiatCurrencies() Currencies {
|
|
return storage.GetDefaultFiatCurrencies()
|
|
}
|
|
|
|
// UpdateCurrencies updates the local cryptocurrency or fiat currency store
|
|
func UpdateCurrencies(c Currencies, isCryptocurrency bool) {
|
|
if isCryptocurrency {
|
|
storage.UpdateEnabledCryptoCurrencies(c)
|
|
return
|
|
}
|
|
storage.UpdateEnabledFiatCurrencies(c)
|
|
}
|
|
|
|
// ConvertFiat converts a fiat amount from one currency to another
|
|
func ConvertFiat(amount float64, from, to Code) (float64, error) {
|
|
return storage.ConvertCurrency(amount, from, to)
|
|
}
|
|
|
|
// GetForeignExchangeRate returns the foreign exchange rate for a fiat pair.
|
|
func GetForeignExchangeRate(quotation Pair) (float64, error) {
|
|
return storage.ConvertCurrency(1, quotation.Base, quotation.Quote)
|
|
}
|
|
|
|
// SeedForeignExchangeData seeds FX data with the currencies supplied
|
|
func SeedForeignExchangeData(c Currencies) error {
|
|
return storage.SeedForeignExchangeRatesByCurrencies(c)
|
|
}
|
|
|
|
// GetTotalMarketCryptocurrencies returns the full market cryptocurrencies
|
|
func GetTotalMarketCryptocurrencies() ([]Code, error) {
|
|
return storage.GetTotalMarketCryptocurrencies()
|
|
}
|
|
|
|
// RunStorageUpdater runs a new foreign exchange updater instance
|
|
func RunStorageUpdater(o BotOverrides, m *Config, filepath string) error {
|
|
return storage.RunUpdater(o, m, filepath)
|
|
}
|
|
|
|
// ShutdownStorageUpdater cleanly shuts down and saves to currency.json
|
|
func ShutdownStorageUpdater() error {
|
|
return storage.Shutdown()
|
|
}
|
|
|
|
// CopyPairFormat copies the pair format from a list of pairs once matched
|
|
func CopyPairFormat(p Pair, pairs []Pair, exact bool) Pair {
|
|
for x := range pairs {
|
|
if exact {
|
|
if p.Equal(pairs[x]) {
|
|
return pairs[x]
|
|
}
|
|
continue
|
|
}
|
|
if p.EqualIncludeReciprocal(pairs[x]) {
|
|
return pairs[x]
|
|
}
|
|
}
|
|
return EMPTYPAIR
|
|
}
|
|
|
|
// FormatPairs formats a string array to a list of currency pairs with the
|
|
// supplied currency pair format
|
|
func FormatPairs(pairs []string, delimiter, index string) (Pairs, error) {
|
|
var result = make(Pairs, len(pairs))
|
|
for x := range pairs {
|
|
if pairs[x] == "" {
|
|
return nil, fmt.Errorf("%w in slice %v", errEmptyPairString, pairs)
|
|
}
|
|
var err error
|
|
switch {
|
|
case delimiter != "":
|
|
result[x], err = NewPairDelimiter(pairs[x], delimiter)
|
|
case index != "":
|
|
result[x], err = NewPairFromIndex(pairs[x], index)
|
|
default:
|
|
result[x], err = NewPairFromStrings(pairs[x][:3], pairs[x][3:])
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// IsEnabled returns if the individual foreign exchange config setting is
|
|
// enabled
|
|
func (settings AllFXSettings) IsEnabled(name string) bool {
|
|
for x := range settings {
|
|
if !strings.EqualFold(settings[x].Name, name) {
|
|
continue
|
|
}
|
|
return settings[x].Enabled
|
|
}
|
|
return false
|
|
}
|