Spaces:
Sleeping
Sleeping
import streamlit | |
from datetime import datetime, timedelta | |
st.set_page_config(page_title="Options Scanner", layout="wide") | |
st.title("Naked Options Play Finder") | |
ticker = st.text_input("Enter Ticker Symbol (e.g. GME, SPY, TSLA)", "GME") | |
max_price = st.slider("Max Option Price ($)", 5, 200, 50) | |
days_out = st.slider("Days Until Expiration", 1, 14, 7) | |
if st.button("Find Options"): | |
stock = yf.Ticker(ticker) | |
today = datetime.today().date() | |
try: | |
expirations = stock.options | |
st.success(f"Found {len(expirations)} expirations") | |
for exp in expirations: | |
exp_date = datetime.strptime(exp, "%Y-%m-%d").date() | |
if (exp_date - today).days > days_out: | |
continue | |
calls = stock.option_chain(exp).calls | |
puts = stock.option_chain(exp).puts | |
cheap_calls = calls[calls['lastPrice'] <= max_price] | |
cheap_puts = puts[puts['lastPrice'] <= max_price] | |
if not cheap_calls.empty: | |
st.subheader(f"Calls under ${max_price} expiring {exp}") | |
st.dataframe(cheap_calls[['strike', 'lastPrice', 'volume', 'impliedVolatility']]) | |
if not cheap_puts.empty: | |
st.subheader(f"Puts under ${max_price} expiring {exp}") | |
st.dataframe(cheap_puts[['strike', 'lastPrice', 'volume', 'impliedVolatility']]) | |
except Exception as e: | |
st.error(f"Error: {e}") |