okx: Add fee fields for USDC pairs (#1244)

* okx: Add USDC quoted maker/taker fees

* thrasher: nits

* fix spelling

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
This commit is contained in:
Ryan O'Hara-Reid
2023-06-29 17:19:05 +10:00
committed by GitHub
parent 16d769a851
commit ef605a3c19
3 changed files with 25 additions and 28 deletions

View File

@@ -2158,42 +2158,36 @@ func (ok *Okx) GetFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) (flo
var fee float64
switch feeBuilder.FeeType {
case exchange.CryptocurrencyTradeFee:
var responses []TradeFeeRate
uly, err := ok.GetUnderlying(feeBuilder.Pair, asset.Spot)
if err != nil {
return 0, err
}
responses, err = ok.GetTradeFee(ctx, okxInstTypeSpot, uly, "")
responses, err := ok.GetTradeFee(ctx, okxInstTypeSpot, uly, "")
if err != nil {
return 0, err
} else if len(responses) == 0 {
return 0, errors.New("no trade fee response found")
}
if feeBuilder.IsMaker {
if fee, err = strconv.ParseFloat(responses[0].FeeRateMaker, 64); err != nil || fee == 0 {
fee, err = strconv.ParseFloat(responses[0].FeeRateMakerUSDT, 64)
if err != nil {
return fee, err
}
if feeBuilder.Pair.Quote.Equal(currency.USDC) {
fee = responses[0].FeeRateMakerUSDC.Float64()
} else if fee = responses[0].FeeRateMaker.Float64(); fee == 0 {
fee = responses[0].FeeRateMakerUSDT.Float64()
}
} else {
if fee, err = strconv.ParseFloat(responses[0].FeeRateTaker, 64); err != nil || fee == 0 {
fee, err = strconv.ParseFloat(responses[0].FeeRateTakerUSDT, 64)
if err != nil {
return fee, err
}
if feeBuilder.Pair.Quote.Equal(currency.USDC) {
fee = responses[0].FeeRateTakerUSDC.Float64()
} else if fee = responses[0].FeeRateTaker.Float64(); fee == 0 {
fee = responses[0].FeeRateTakerUSDT.Float64()
}
}
if fee < 0 {
fee = -fee
if fee != 0 {
fee = -fee // Negative fee rate means commission else rebate.
}
return fee * feeBuilder.Amount * feeBuilder.PurchasePrice, nil
case exchange.OfflineTradeFee:
return 0.0015 * feeBuilder.PurchasePrice * feeBuilder.Amount, nil
}
if fee < 0 {
fee = 0
}
return fee, nil
}

View File

@@ -1366,7 +1366,7 @@ func TestGetMaximumLoanOfInstrument(t *testing.T) {
}
}
func TestGetFeeRate(t *testing.T) {
func TestGetTradeFee(t *testing.T) {
t.Parallel()
sharedtestvalues.SkipTestIfCredentialsUnset(t, ok)

View File

@@ -5,6 +5,7 @@ import (
"strconv"
"time"
"github.com/thrasher-corp/gocryptotrader/common/convert"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
@@ -1484,16 +1485,18 @@ type MaximumLoanInstrument struct {
// TradeFeeRate holds trade fee rate information for a given instrument type.
type TradeFeeRate struct {
Category string `json:"category"`
DeliveryFeeRate string `json:"delivery"`
Exercise string `json:"exercise"`
InstrumentType asset.Item `json:"instType"`
FeeRateLevel string `json:"level"`
FeeRateMaker string `json:"maker"`
FeeRateMakerUSDT string `json:"makerU"`
FeeRateTaker string `json:"taker"`
FeeRateTakerUSDT string `json:"takerU"`
Timestamp okxUnixMilliTime `json:"ts"`
Category string `json:"category"`
DeliveryFeeRate string `json:"delivery"`
Exercise string `json:"exercise"`
InstrumentType asset.Item `json:"instType"`
FeeRateLevel string `json:"level"`
FeeRateMaker convert.StringToFloat64 `json:"maker"`
FeeRateMakerUSDT convert.StringToFloat64 `json:"makerU"`
FeeRateMakerUSDC convert.StringToFloat64 `json:"makerUSDC"`
FeeRateTaker convert.StringToFloat64 `json:"taker"`
FeeRateTakerUSDT convert.StringToFloat64 `json:"takerU"`
FeeRateTakerUSDC convert.StringToFloat64 `json:"takerUSDC"`
Timestamp okxUnixMilliTime `json:"ts"`
}
// InterestAccruedData represents interest rate accrued response