aboutsummaryrefslogtreecommitdiff
path: root/services/data_service.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/data_service.py')
-rw-r--r--services/data_service.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/services/data_service.py b/services/data_service.py
index f0f981b..3de2484 100644
--- a/services/data_service.py
+++ b/services/data_service.py
@@ -158,6 +158,36 @@ def get_insider_transactions(ticker: str) -> pd.DataFrame:
return pd.DataFrame()
+@st.cache_data(ttl=900)
+def get_options_chain(ticker: str) -> dict:
+ """Return options chain data for the nearest available expirations.
+
+ Returns:
+ {
+ "expirations": [str, ...], # all available expiry dates
+ "chains": [
+ {"expiry": str, "calls": DataFrame, "puts": DataFrame},
+ ...
+ ]
+ }
+ """
+ try:
+ t = yf.Ticker(ticker.upper())
+ expirations = t.options
+ if not expirations:
+ return {}
+ chains = []
+ for exp in expirations[:8]:
+ try:
+ chain = t.option_chain(exp)
+ chains.append({"expiry": exp, "calls": chain.calls, "puts": chain.puts})
+ except Exception:
+ pass
+ return {"expirations": list(expirations), "chains": chains}
+ except Exception:
+ return {}
+
+
@st.cache_data(ttl=3600)
def get_sec_filings(ticker: str) -> list[dict]:
"""Return SEC filings from yfinance.