Skip to content

Commit

Permalink
implement futures PremiumIndex support
Browse files Browse the repository at this point in the history
  • Loading branch information
c9s committed Oct 19, 2021
1 parent 379dcb7 commit 16fca01
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions pkg/exchange/binance/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package binance
import (
"context"
"fmt"
"github.com/adshao/go-binance/v2/futures"
"os"
"strconv"
"strings"
Expand Down Expand Up @@ -919,6 +920,57 @@ type FundingRate struct {
Time time.Time
}

type PremiumIndex struct {
Symbol string `json:"symbol"`
MarkPrice fixedpoint.Value `json:"markPrice"`
LastFundingRate fixedpoint.Value `json:"lastFundingRate"`
NextFundingTime time.Time `json:"nextFundingTime"`
Time time.Time `json:"time"`
}

func convertPremiumIndex(index *futures.PremiumIndex) (*PremiumIndex, error) {
markPrice, err := fixedpoint.NewFromString(index.MarkPrice)
if err != nil {
return nil, err
}

lastFundingRate, err := fixedpoint.NewFromString(index.LastFundingRate)
if err != nil {
return nil, err
}

nextFundingTime := time.Unix(0, index.NextFundingTime*int64(time.Millisecond))
t := time.Unix(0, index.Time*int64(time.Millisecond))

return &PremiumIndex{
Symbol: index.Symbol,
MarkPrice: markPrice,
NextFundingTime: nextFundingTime,
LastFundingRate: lastFundingRate,
Time: t,
}, nil
}

func (e *Exchange) QueryPremiumIndex(ctx context.Context, symbol string) ([]PremiumIndex, error) {
futuresClient := binance.NewFuturesClient(e.key, e.secret)
indexes, err := futuresClient.NewPremiumIndexService().Symbol(symbol).Do(ctx)
if err != nil {
return nil, err
}

var globalIndexes []PremiumIndex
for _, index := range indexes {
globalIndex, err := convertPremiumIndex(index)
if err != nil {
return nil, err
}

globalIndexes = append(globalIndexes, *globalIndex)
}

return globalIndexes, nil
}

func (e *Exchange) QueryFundingRateHistory(ctx context.Context, symbol string) (*FundingRate, error) {
futuresClient := binance.NewFuturesClient(e.key, e.secret)
rates, err := futuresClient.NewFundingRateService().
Expand Down

0 comments on commit 16fca01

Please sign in to comment.