exchanges: Use singular futures settlement currency (#2092)

* Change settlement to singular currency

* whoops.go

* bitmex fix

* minor updates

* 64 divided by 2

* whoops2.go

* ROBOT ROCK

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* ROCK ROCK ROCK ROCK ROBOT

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* shazNit

* currencies unmarshal and code use

* Update currency/currencies.go

Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>

* Update exchanges/btse/btse_wrapper.go

Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>

* reuse comment for better clarity

* collapses entire thing

* shazLint

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>
This commit is contained in:
Scott
2025-11-10 13:21:54 +11:00
committed by GitHub
parent 9441f33f42
commit 61d720b72f
19 changed files with 399 additions and 471 deletions

View File

@@ -97,9 +97,9 @@ type InstrumentInfo struct {
MinNotionalValue types.Number `json:"minNotionalValue"`
MaxMarketOrderQuantity types.Number `json:"maxMktOrderQty"`
} `json:"lotSizeFilter"`
UnifiedMarginTrade bool `json:"unifiedMarginTrade"`
FundingInterval int64 `json:"fundingInterval"`
SettleCoin string `json:"settleCoin"`
UnifiedMarginTrade bool `json:"unifiedMarginTrade"`
FundingInterval int64 `json:"fundingInterval"`
SettleCoin currency.Code `json:"settleCoin"`
}
// RestResponse represents a REST response instance.

View File

@@ -1771,7 +1771,7 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
case asset.CoinMarginedFutures:
resp := make([]futures.Contract, 0, len(inverseContracts.List))
for i := range inverseContracts.List {
if inverseContracts.List[i].SettleCoin == "USDT" || inverseContracts.List[i].SettleCoin == "USDC" {
if inverseContracts.List[i].SettleCoin.Equal(currency.USDT) || inverseContracts.List[i].SettleCoin.Equal(currency.USDC) {
continue
}
var cp, underlying currency.Pair
@@ -1810,18 +1810,18 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
}
resp = append(resp, futures.Contract{
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: start,
EndDate: end,
SettlementType: futures.Inverse,
IsActive: strings.EqualFold(inverseContracts.List[i].Status, "trading"),
Status: inverseContracts.List[i].Status,
Type: ct,
SettlementCurrencies: currency.Currencies{currency.NewCode(inverseContracts.List[i].SettleCoin)},
MaxLeverage: inverseContracts.List[i].LeverageFilter.MaxLeverage.Float64(),
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: start,
EndDate: end,
SettlementType: futures.Inverse,
IsActive: strings.EqualFold(inverseContracts.List[i].Status, "trading"),
Status: inverseContracts.List[i].Status,
Type: ct,
SettlementCurrency: inverseContracts.List[i].SettleCoin,
MaxLeverage: inverseContracts.List[i].LeverageFilter.MaxLeverage.Float64(),
})
}
return resp, nil
@@ -1834,13 +1834,13 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
var instruments []*InstrumentInfo
for i := range linearContracts.List {
if linearContracts.List[i].SettleCoin != "USDC" {
if !linearContracts.List[i].SettleCoin.Equal(currency.USDC) {
continue
}
instruments = append(instruments, linearContracts.List[i])
}
for i := range inverseContracts.List {
if inverseContracts.List[i].SettleCoin != "USDC" {
if !inverseContracts.List[i].SettleCoin.Equal(currency.USDC) {
continue
}
instruments = append(instruments, inverseContracts.List[i])
@@ -1888,19 +1888,19 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
}
resp = append(resp, futures.Contract{
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: instruments[i].LaunchTime.Time(),
EndDate: instruments[i].DeliveryTime.Time(),
SettlementType: futures.Linear,
IsActive: strings.EqualFold(instruments[i].Status, "trading"),
Status: instruments[i].Status,
Type: ct,
SettlementCurrencies: currency.Currencies{currency.USDC},
MaxLeverage: instruments[i].LeverageFilter.MaxLeverage.Float64(),
Multiplier: instruments[i].LeverageFilter.LeverageStep.Float64(),
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: instruments[i].LaunchTime.Time(),
EndDate: instruments[i].DeliveryTime.Time(),
SettlementType: futures.Linear,
IsActive: strings.EqualFold(instruments[i].Status, "trading"),
Status: instruments[i].Status,
Type: ct,
SettlementCurrency: currency.USDC,
MaxLeverage: instruments[i].LeverageFilter.MaxLeverage.Float64(),
Multiplier: instruments[i].LeverageFilter.LeverageStep.Float64(),
})
}
return resp, nil
@@ -1913,13 +1913,13 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
var instruments []*InstrumentInfo
for i := range linearContracts.List {
if linearContracts.List[i].SettleCoin != "USDT" {
if !linearContracts.List[i].SettleCoin.Equal(currency.USDT) {
continue
}
instruments = append(instruments, linearContracts.List[i])
}
for i := range inverseContracts.List {
if inverseContracts.List[i].SettleCoin != "USDT" {
if !inverseContracts.List[i].SettleCoin.Equal(currency.USDT) {
continue
}
instruments = append(instruments, inverseContracts.List[i])
@@ -1961,19 +1961,19 @@ func (e *Exchange) GetFuturesContractDetails(ctx context.Context, item asset.Ite
}
resp = append(resp, futures.Contract{
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: start,
EndDate: end,
SettlementType: futures.Linear,
IsActive: strings.EqualFold(instruments[i].Status, "trading"),
Status: instruments[i].Status,
Type: ct,
SettlementCurrencies: currency.Currencies{currency.USDT},
MaxLeverage: instruments[i].LeverageFilter.MaxLeverage.Float64(),
Multiplier: instruments[i].LeverageFilter.LeverageStep.Float64(),
Exchange: e.Name,
Name: cp.Format(format),
Underlying: underlying,
Asset: item,
StartDate: start,
EndDate: end,
SettlementType: futures.Linear,
IsActive: strings.EqualFold(instruments[i].Status, "trading"),
Status: instruments[i].Status,
Type: ct,
SettlementCurrency: currency.USDT,
MaxLeverage: instruments[i].LeverageFilter.MaxLeverage.Float64(),
Multiplier: instruments[i].LeverageFilter.LeverageStep.Float64(),
})
}
return resp, nil