Files
tastytrade/metrics.go

78 lines
2.1 KiB
Go
Raw Normal View History

2025-05-20 19:28:10 -04:00
package tastytrade
import (
"encoding/json"
"fmt"
"net/url"
)
type DividendInfo struct {
OccuredDate string `json:"occurred-date"`
Amount float32 `json:"amount"`
}
type MarketMetricDividendResponse struct {
Data struct {
Items []DividendInfo `json:"items"`
}
Context string `json:"context"`
}
type EarningsInfo struct {
OccuredDate string `json:"occurred-date"`
EPS float32 `json:"eps"`
}
type MarketMetricEarningResponse struct {
Data struct {
Items []EarningsInfo `json:"items"`
}
Context string `json:"context"`
}
2025-05-20 19:28:10 -04:00
type MarketMetricInfo struct {
Symbol string `json:"symbol"`
ImpliedVolatilityIndex float32 `json:"implied-volatility-index"`
ImpliedVolatilityIndex5DayChange float32 `json:"implied-volatility-index-5-day-change"`
ImpliedVolatilityRank float32 `json:"implied-volatility-rank"`
ImpliedVolatilityPercentile float32 `json:"implied-volatility-percentile"`
Liquidity float32 `json:"liquidity"`
LiquidityRank float32 `json:"liquidity-rank"`
LiquidityRating int32 `json:"liquidity-rating"`
OptionExpirationImpliedVolatilities []struct {
ExpirationDate string `json:"expiration-date"`
SettlementType string `json:"settlement-type"`
OptionChainType string `json:"option-chain-type"`
ImpliedVolatility float64 `json:"implied-volatility"`
} `json:"option-expiration-implied-volatilities"`
}
type MarketMetricResponse struct {
Data struct {
Items []MarketMetricInfo `json:"items"`
}
Context string `json:"context"`
}
func (api *TastytradeAPI) GetMarketMetricInfo(symbol string) (MarketMetricResponse, error) {
2025-05-20 19:28:10 -04:00
urlVal := fmt.Sprintf("%s/market-metrics/%s", api.host, url.PathEscape(symbol))
data, err := api.fetchData(urlVal)
if err != nil {
return MarketMetricResponse{}, err
2025-05-20 19:28:10 -04:00
}
var response MarketMetricResponse
2025-05-20 19:28:10 -04:00
jsonData, err := json.Marshal(data)
if err != nil {
return MarketMetricResponse{}, err
2025-05-20 19:28:10 -04:00
}
err = json.Unmarshal(jsonData, &response)
if err != nil {
return MarketMetricResponse{}, err
2025-05-20 19:28:10 -04:00
}
return response, nil
}