Skip to content

Commit d93f24a

Browse files
committed
Adding wrapper function
1 parent 490c117 commit d93f24a

File tree

2 files changed

+48
-37
lines changed

2 files changed

+48
-37
lines changed

exchanges/cryptodotcom/cryptodotcom_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/thrasher-corp/gocryptotrader/config"
1313
"github.com/thrasher-corp/gocryptotrader/core"
1414
"github.com/thrasher-corp/gocryptotrader/currency"
15+
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
1516
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
1617
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
1718
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
@@ -833,3 +834,27 @@ func TestWsConnect(t *testing.T) {
833834
}
834835
time.Sleep(time.Second * 30)
835836
}
837+
838+
// TestGetFeeByTypeOfflineTradeFee logic test
839+
func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
840+
feeBuilder := &exchange.FeeBuilder{
841+
FeeType: exchange.CryptocurrencyTradeFee,
842+
Pair: currency.NewPair(currency.BTC, currency.USD),
843+
IsMaker: true,
844+
Amount: 1,
845+
PurchasePrice: 1000,
846+
}
847+
_, err := cr.GetFeeByType(context.Background(), feeBuilder)
848+
if err != nil {
849+
t.Fatal(err)
850+
}
851+
if !areTestAPIKeysSet() {
852+
if feeBuilder.FeeType != exchange.OfflineTradeFee {
853+
t.Errorf("Expected %v, received %v", exchange.OfflineTradeFee, feeBuilder.FeeType)
854+
}
855+
} else {
856+
if feeBuilder.FeeType != exchange.CryptocurrencyTradeFee {
857+
t.Errorf("Expected %v, received %v", exchange.CryptocurrencyTradeFee, feeBuilder.FeeType)
858+
}
859+
}
860+
}

exchanges/cryptodotcom/cryptodotcom_wrapper.go

Lines changed: 23 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,39 +1021,20 @@ func (cr *Cryptodotcom) GetFeeByType(ctx context.Context, feeBuilder *exchange.F
10211021
if feeBuilder == nil {
10221022
return 0, fmt.Errorf("%T %w", feeBuilder, common.ErrNilPointer)
10231023
}
1024-
if !cr.AreCredentialsValid(ctx) && // Todo check connection status
1024+
if !cr.AreCredentialsValid(ctx) &&
10251025
feeBuilder.FeeType == exchange.CryptocurrencyTradeFee {
10261026
feeBuilder.FeeType = exchange.OfflineTradeFee
10271027
}
1028-
10291028
var fee float64
1030-
10311029
switch feeBuilder.FeeType {
10321030
case exchange.CryptocurrencyTradeFee:
1033-
fee = cr.calculateTradingFee(ctx, feeBuilder) * feeBuilder.Amount * feeBuilder.PurchasePrice
1031+
fee = calculateTradingFee(feeBuilder) * feeBuilder.Amount * feeBuilder.PurchasePrice
10341032
case exchange.CryptocurrencyWithdrawalFee:
1035-
switch feeBuilder.Pair.Base {
1036-
case currency.USDT:
1037-
fee = 1.08
1038-
case currency.TUSD:
1039-
fee = 1.09
1040-
case currency.BTC:
1041-
fee = 0.0005
1042-
case currency.ETH:
1043-
fee = 0.01
1044-
case currency.LTC:
1045-
fee = 0.001
1046-
}
1047-
case exchange.InternationalBankDepositFee:
1048-
fee = getInternationalBankDepositFee(feeBuilder.Amount)
1049-
case exchange.InternationalBankWithdrawalFee:
1050-
fee = getInternationalBankWithdrawalFee(feeBuilder.Amount)
1033+
fee = 0.5 * feeBuilder.PurchasePrice * feeBuilder.Amount
10511034
case exchange.OfflineTradeFee:
10521035
fee = getOfflineTradeFee(feeBuilder.PurchasePrice, feeBuilder.Amount)
10531036
}
10541037
return fee, nil
1055-
1056-
return 0, common.ErrNotYetImplemented
10571038
}
10581039

10591040
func (cr *Cryptodotcom) checkCredentials(ctx context.Context) bool {
@@ -1067,26 +1048,31 @@ func getOfflineTradeFee(price, amount float64) float64 {
10671048
}
10681049

10691050
// calculateTradingFee return fee based on users current fee tier or default values
1070-
func (b *Cryptodotcom) calculateTradingFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) float64 {
1071-
formattedPair, err := b.FormatExchangeCurrency(feeBuilder.Pair, asset.Spot)
1072-
if err != nil {
1051+
func calculateTradingFee(feeBuilder *exchange.FeeBuilder) float64 {
1052+
switch {
1053+
case feeBuilder.Amount <= 250:
1054+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.075
1055+
case feeBuilder.Amount < 1000000:
10731056
if feeBuilder.IsMaker {
1074-
return 0.001
1057+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.07
10751058
}
1076-
return 0.002
1077-
}
1078-
feeTiers, err := dy.GetFeeInformation(ctx, formattedPair.String())
1079-
if err != nil {
1080-
// TODO: Return actual error, we shouldn't pivot around errors.
1059+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.072
1060+
case feeBuilder.Amount < 5000000:
10811061
if feeBuilder.IsMaker {
1082-
return 0.001
1062+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.065
10831063
}
1084-
return 0.002
1085-
}
1086-
if feeBuilder.IsMaker {
1087-
return feeTiers[0].MakerFee
1064+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.069
1065+
case feeBuilder.Amount <= 10000000:
1066+
if feeBuilder.IsMaker {
1067+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.06
1068+
}
1069+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.065
1070+
default:
1071+
if !feeBuilder.IsMaker {
1072+
return feeBuilder.PurchasePrice * feeBuilder.Amount * 0.05
1073+
}
1074+
return 0
10881075
}
1089-
return feeTiers[0].TakerFee
10901076
}
10911077

10921078
// ValidateCredentials validates current credentials used for wrapper

0 commit comments

Comments
 (0)