futures: Implement GetLatestFundingRates across exchanges (#1339)

* adds funding rate implementations and improvements

* merge fixes x1

* lint

* kucoin funding rates func make

* migrate sync-manager to keys

* some kucoin work

* adds some kucoin wrapper funcs

* ehhh, todo

* kucoin position

* start of orders

* adds the kucoin tests yay

* multiplier

* nits, EWS includes order limits

* NotYetImplemented, IsPerp improvements, cleaning

* lint, test fix, huobi time

* fixes issues, improves testing

* fixes linters I WRECKED

* local lint but remote lint, lint, lint, lint

* fixes err

* skip CI

* lint

* Supported rates, binance endpoints

* fixes weird mocktest problems

* no, CZ is invalid

* fixes some new EWS test errors
This commit is contained in:
Scott
2023-11-03 10:01:32 +10:00
committed by GitHub
parent f9437dbd08
commit 70690d9a04
78 changed files with 4088 additions and 527 deletions

View File

@@ -4463,8 +4463,8 @@ func (s *RPCServer) GetFuturesPositionsSummary(ctx context.Context, r *gctrpc.Ge
if !stats.AverageOpenPrice.IsZero() {
positionStats.AverageOpenPrice = stats.AverageOpenPrice.String()
}
if !stats.PositionPNL.IsZero() {
positionStats.RecentPnl = stats.PositionPNL.String()
if !stats.UnrealisedPNL.IsZero() {
positionStats.RecentPnl = stats.UnrealisedPNL.String()
}
if !stats.MaintenanceMarginFraction.IsZero() {
positionStats.MarginFraction = stats.MaintenanceMarginFraction.String()
@@ -4701,7 +4701,7 @@ func (s *RPCServer) GetFundingRates(ctx context.Context, r *gctrpc.GetFundingRat
return nil, fmt.Errorf("%w %v", errPairNotEnabled, cp)
}
funding, err := exch.GetFundingRates(ctx, &fundingrate.RatesRequest{
funding, err := exch.GetHistoricalFundingRates(ctx, &fundingrate.HistoricalRatesRequest{
Asset: a,
Pair: cp,
StartDate: start,
@@ -4799,7 +4799,7 @@ func (s *RPCServer) GetLatestFundingRate(ctx context.Context, r *gctrpc.GetLates
return nil, fmt.Errorf("%w %v", errPairNotEnabled, cp)
}
funding, err := exch.GetLatestFundingRate(ctx, &fundingrate.LatestRateRequest{
fundingRates, err := exch.GetLatestFundingRates(ctx, &fundingrate.LatestRateRequest{
Asset: a,
Pair: cp,
IncludePredictedRate: r.IncludePredicted,
@@ -4807,27 +4807,30 @@ func (s *RPCServer) GetLatestFundingRate(ctx context.Context, r *gctrpc.GetLates
if err != nil {
return nil, err
}
if len(fundingRates) != 1 {
return nil, fmt.Errorf("expected 1 funding rate, received %v", len(fundingRates))
}
var response gctrpc.GetLatestFundingRateResponse
fundingData := &gctrpc.FundingData{
Exchange: r.Exchange,
Asset: r.Asset,
Pair: &gctrpc.CurrencyPair{
Delimiter: funding.Pair.Delimiter,
Base: funding.Pair.Base.String(),
Quote: funding.Pair.Quote.String(),
Delimiter: fundingRates[0].Pair.Delimiter,
Base: fundingRates[0].Pair.Base.String(),
Quote: fundingRates[0].Pair.Quote.String(),
},
LatestRate: &gctrpc.FundingRate{
Date: funding.LatestRate.Time.Format(common.SimpleTimeFormatWithTimezone),
Rate: funding.LatestRate.Rate.String(),
Date: fundingRates[0].LatestRate.Time.Format(common.SimpleTimeFormatWithTimezone),
Rate: fundingRates[0].LatestRate.Rate.String(),
},
}
if !funding.TimeOfNextRate.IsZero() {
fundingData.TimeOfNextRate = funding.TimeOfNextRate.Format(common.SimpleTimeFormatWithTimezone)
if !fundingRates[0].TimeOfNextRate.IsZero() {
fundingData.TimeOfNextRate = fundingRates[0].TimeOfNextRate.Format(common.SimpleTimeFormatWithTimezone)
}
if r.IncludePredicted {
fundingData.UpcomingRate = &gctrpc.FundingRate{
Date: funding.PredictedUpcomingRate.Time.Format(common.SimpleTimeFormatWithTimezone),
Rate: funding.PredictedUpcomingRate.Rate.String(),
Date: fundingRates[0].PredictedUpcomingRate.Time.Format(common.SimpleTimeFormatWithTimezone),
Rate: fundingRates[0].PredictedUpcomingRate.Rate.String(),
}
}
response.Rate = fundingData