package binance import ( "context" "net/url" "strconv" "cryptoHermes/internal/entity" ) func (c *Client) GetCurrentFunding(ctx context.Context, symbol string) (*entity.FundingRate, error) { q := url.Values{} q.Set("symbol", symbol) var dto premiumIndexDTO if err := c.get(ctx, "/fapi/v1/premiumIndex", q, &dto); err != nil { return nil, err } return mapPremiumIndex(&dto), nil } func (c *Client) GetFundingHistory(ctx context.Context, symbol string, limit int) ([]entity.FundingRate, error) { if limit <= 0 { limit = 100 } if limit > 1000 { limit = 1000 } q := url.Values{} q.Set("symbol", symbol) q.Set("limit", strconv.Itoa(limit)) var dto []fundingRateDTO if err := c.get(ctx, "/fapi/v1/fundingRate", q, &dto); err != nil { return nil, err } return mapFundingHistory(dto), nil } func (c *Client) GetCurrentOpenInterest(ctx context.Context, symbol string) (*entity.OpenInterest, error) { q := url.Values{} q.Set("symbol", symbol) var dto openInterestDTO if err := c.get(ctx, "/fapi/v1/openInterest", q, &dto); err != nil { return nil, err } return mapOpenInterest(&dto, "current"), nil } func (c *Client) GetOpenInterestHistory(ctx context.Context, symbol, period string, limit int) ([]entity.OpenInterest, error) { if limit <= 0 { limit = 30 } if limit > 500 { limit = 500 } q := url.Values{} q.Set("symbol", symbol) q.Set("period", period) q.Set("limit", strconv.Itoa(limit)) var dto []openInterestHistDTO if err := c.get(ctx, "/futures/data/openInterestHist", q, &dto); err != nil { return nil, err } return mapOpenInterestHistory(dto, period), nil } func (c *Client) GetGlobalLongShortRatio(ctx context.Context, symbol, period string, limit int) ([]entity.LongShortRatio, error) { dto, err := c.fetchLongShort(ctx, "/futures/data/globalLongShortAccountRatio", symbol, period, limit) if err != nil { return nil, err } return mapLongShort(dto, period, entity.RatioTypeGlobalAccount), nil } func (c *Client) GetTopTraderPositionRatio(ctx context.Context, symbol, period string, limit int) ([]entity.LongShortRatio, error) { dto, err := c.fetchLongShort(ctx, "/futures/data/topLongShortPositionRatio", symbol, period, limit) if err != nil { return nil, err } return mapLongShort(dto, period, entity.RatioTypeTopTraderPosition), nil } func (c *Client) fetchLongShort(ctx context.Context, path, symbol, period string, limit int) ([]longShortRatioDTO, error) { if limit <= 0 { limit = 30 } if limit > 500 { limit = 500 } q := url.Values{} q.Set("symbol", symbol) q.Set("period", period) q.Set("limit", strconv.Itoa(limit)) var dto []longShortRatioDTO if err := c.get(ctx, path, q, &dto); err != nil { return nil, err } return dto, nil } func (c *Client) GetTakerBuySellVolume(ctx context.Context, symbol, period string, limit int) ([]entity.TakerBuySellVolume, error) { if limit <= 0 { limit = 30 } if limit > 500 { limit = 500 } q := url.Values{} q.Set("symbol", symbol) q.Set("period", period) q.Set("limit", strconv.Itoa(limit)) var dto []takerVolumeDTO if err := c.get(ctx, "/futures/data/takerlongshortRatio", q, &dto); err != nil { return nil, err } return mapTakerVolume(dto, symbol, period), nil }