From 0122f6413774a0c9c3d78f5f2e542ef3318fcdb9 Mon Sep 17 00:00:00 2001 From: sjc Date: Tue, 20 May 2025 19:28:10 -0400 Subject: [PATCH] Added First Metrics --- metrics.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 metrics.go diff --git a/metrics.go b/metrics.go new file mode 100644 index 0000000..7fa5820 --- /dev/null +++ b/metrics.go @@ -0,0 +1,46 @@ +package tastytrade + +import ( + "encoding/json" + "fmt" + "net/url" +) + +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"` +} + +func (api *TastytradeAPI) GetMarketMetricInfo(symbol string) (MarketMetricInfo, error) { + urlVal := fmt.Sprintf("%s/market-metrics/%s", api.host, url.PathEscape(symbol)) + data, err := api.fetchData(urlVal) + if err != nil { + return MarketMetricInfo{}, err + } + + var response MarketMetricInfo + jsonData, err := json.Marshal(data) + if err != nil { + return MarketMetricInfo{}, err + } + + err = json.Unmarshal(jsonData, &response) + if err != nil { + return MarketMetricInfo{}, err + } + + return response, nil +} +