From c1b29596063caf028bce9d887ecb204323e82ff8 Mon Sep 17 00:00:00 2001 From: Scott Grant Date: Thu, 1 Nov 2018 12:03:10 +1100 Subject: [PATCH] Adds more international withdrawal fee details for bithumb, gemini, itbit and lakebtc --- exchanges/bithumb/bithumb.go | 2 ++ exchanges/exchange.go | 1 + exchanges/gemini/gemini.go | 2 ++ exchanges/itbit/itbit.go | 14 ++++++++++++++ exchanges/itbit/itbit_test.go | 4 ++-- exchanges/lakebtc/lakebtc.go | 3 +++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/exchanges/bithumb/bithumb.go b/exchanges/bithumb/bithumb.go index d73cbdb2..7d405353 100644 --- a/exchanges/bithumb/bithumb.go +++ b/exchanges/bithumb/bithumb.go @@ -577,6 +577,8 @@ func (b *Bithumb) GetFee(feeBuilder exchange.FeeBuilder) (float64, error) { fee = getDepositFee(feeBuilder.FirstCurrency, feeBuilder.Amount) case exchange.CryptocurrencyWithdrawalFee: fee = getWithdrawalFee(feeBuilder.FirstCurrency) + case exchange.InternationalBankWithdrawalFee: + fee = getWithdrawalFee(feeBuilder.CurrencyItem) } if fee < 0 { fee = 0 diff --git a/exchanges/exchange.go b/exchanges/exchange.go index 018d31f7..2384a772 100644 --- a/exchanges/exchange.go +++ b/exchanges/exchange.go @@ -55,6 +55,7 @@ const ( Skrill InternationalBankTransactionType = "skrill" Simplex InternationalBankTransactionType = "simplex" SEPA InternationalBankTransactionType = "sepa" + Swift InternationalBankTransactionType = "swift" RapidTransfer InternationalBankTransactionType = "rapidTransfer" MisterTangoSEPA InternationalBankTransactionType = "misterTangoSepa" Qiwi InternationalBankTransactionType = "qiwi" diff --git a/exchanges/gemini/gemini.go b/exchanges/gemini/gemini.go index 6fe0eca8..b0556240 100644 --- a/exchanges/gemini/gemini.go +++ b/exchanges/gemini/gemini.go @@ -519,6 +519,8 @@ func (g *Gemini) GetFee(feeBuilder exchange.FeeBuilder) (float64, error) { case exchange.CryptocurrencyWithdrawalFee: // TODO: no free transactions after 10; Need database to know how many trades have been done // Could do via trade history, but would require analysis of response and dates to determine level of fee + case exchange.InternationalBankWithdrawalFee: + fee = 0 } if fee < 0 { fee = 0 diff --git a/exchanges/itbit/itbit.go b/exchanges/itbit/itbit.go index f3753bbe..61af064a 100644 --- a/exchanges/itbit/itbit.go +++ b/exchanges/itbit/itbit.go @@ -11,6 +11,7 @@ import ( "github.com/thrasher-/gocryptotrader/common" "github.com/thrasher-/gocryptotrader/config" + "github.com/thrasher-/gocryptotrader/currency/symbol" "github.com/thrasher-/gocryptotrader/exchanges" "github.com/thrasher-/gocryptotrader/exchanges/request" "github.com/thrasher-/gocryptotrader/exchanges/ticker" @@ -375,7 +376,10 @@ func (i *ItBit) GetFee(feeBuilder exchange.FeeBuilder) (float64, error) { switch feeBuilder.FeeType { case exchange.CryptocurrencyTradeFee: fee = calculateTradingFee(feeBuilder.PurchasePrice, feeBuilder.Amount, feeBuilder.IsMaker) + case exchange.InternationalBankWithdrawalFee: + fee = getInternationalBankWithdrawalFee(feeBuilder.CurrencyItem, feeBuilder.Amount, feeBuilder.BankTransactionType) } + if fee < 0 { fee = 0 } @@ -392,3 +396,13 @@ func calculateTradingFee(purchasePrice, amount float64, isMaker bool) float64 { } return feePercent * purchasePrice * amount } + +func getInternationalBankWithdrawalFee(currency string, amount float64, bankTransactionType exchange.InternationalBankTransactionType) float64 { + var fee float64 + if (bankTransactionType == exchange.Swift || bankTransactionType == exchange.WireTransfer) && currency == symbol.USD { + fee = 40 + } else if (bankTransactionType == exchange.SEPA || bankTransactionType == exchange.WireTransfer) && currency == symbol.EUR { + fee = 1 + } + return fee +} diff --git a/exchanges/itbit/itbit_test.go b/exchanges/itbit/itbit_test.go index 36468ad3..fc6683ae 100644 --- a/exchanges/itbit/itbit_test.go +++ b/exchanges/itbit/itbit_test.go @@ -224,8 +224,8 @@ func TestGetFee(t *testing.T) { feeBuilder = setFeeBuilder() feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee feeBuilder.CurrencyItem = symbol.USD - if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil { - t.Errorf("Test Failed - GetFee() error. Expected: %f, Recieved: %f", float64(0), resp) + if resp, err := i.GetFee(feeBuilder); resp != float64(40) || err != nil { + t.Errorf("Test Failed - GetFee() error. Expected: %f, Recieved: %f", float64(40), resp) t.Error(err) } } diff --git a/exchanges/lakebtc/lakebtc.go b/exchanges/lakebtc/lakebtc.go index 3afcbe59..ec34b6b2 100644 --- a/exchanges/lakebtc/lakebtc.go +++ b/exchanges/lakebtc/lakebtc.go @@ -354,6 +354,9 @@ func (l *LakeBTC) GetFee(feeBuilder exchange.FeeBuilder) (float64, error) { fee = calculateTradingFee(feeBuilder.PurchasePrice, feeBuilder.Amount, feeBuilder.IsMaker) case exchange.CyptocurrencyDepositFee: fee = getCryptocurrencyWithdrawalFee(feeBuilder.FirstCurrency) + case exchange.InternationalBankWithdrawalFee: + // fees for withdrawals are dynamic. They cannot be calculated in advance + // As they are manually performed via the website, it can only be determined when submitting the request } if fee < 0 {