Optionflow / app.py
nick5363's picture
Upload 2 files
6adba8e verified
raw
history blame
1.63 kB
import requests
import pandas as pd
import gradio as gr
def scrape_barchart_unusual():
url = "https://www.barchart.com/proxies/core-api/v1/options/unusual-activity"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123 Safari/537.36",
"Accept": "application/json",
}
params = {
"assetType": "STOCK",
"fields": "symbol,optionType,strikePrice,expirationDate,tradeVolume,tradePremium",
"meta": "field.shortName,field.type",
"orderBy": "tradePremium",
"orderDir": "desc",
"page": 1,
"limit": 50
}
response = requests.get(url, headers=headers, params=params)
data = response.json()
if "data" not in data:
return pd.DataFrame(columns=["Symbol", "Type", "Strike", "Expiry", "Volume", "Premium ($)"])
rows = []
for item in data["data"]:
symbol = item.get("symbol", "")
opt_type = item.get("optionType", "")
strike = item.get("strikePrice", "")
expiry = item.get("expirationDate", "")
volume = item.get("tradeVolume", "")
premium = item.get("tradePremium", "")
rows.append([symbol, opt_type, strike, expiry, volume, f"${premium:,}"])
df = pd.DataFrame(rows, columns=["Symbol", "Type", "Strike", "Expiry", "Volume", "Premium ($)"])
return df
with gr.Blocks() as app:
gr.Markdown("# Barchart Unusual Options Flow (Realtime Top 50)")
table = gr.Dataframe(scrape_barchart_unusual, every=30, label="Unusual Options Activity")
app.launch(server_name="0.0.0.0", server_port=7860)