Spaces:
Running
Running
import streamlit as st | |
from tradingview_ta import TA_Handler, Interval | |
import yfinance as yf | |
from datetime import datetime, timedelta | |
from newsapi import NewsApiClient | |
SCREENER = { | |
"america": "United States", | |
"forex": "Forex", | |
"crypto": "Cryptocurrency", | |
"indonesia": "Indonesia", | |
"india": "India", | |
"italy": "Italy", | |
"cfd": "CFD", | |
"uk": "United Kingdom", | |
"brazil": "Brazil", | |
"vietnam": "Vietnam", | |
"rsa": "South Africa", | |
"ksa": "Saudi Arabia", | |
"australia": "Australia", | |
"russia": "Russia", | |
"thailand": "Thailand", | |
"philippines": "Philippines", | |
"taiwan": "Taiwan", | |
"sweden": "Sweden", | |
"france": "France", | |
"turkey": "Turkey", | |
"euronext": "Euronext", | |
"germany": "Germany", | |
"spain": "Spain", | |
"hongkong": "Hong Kong", | |
"korea": "South Korea", | |
"malaysia": "Malaysia", | |
"canada": "Canada", | |
"crypto": "crypto", | |
} | |
def get_tradingview_analysis(symbol, exchange, screener, interval): | |
try: | |
stock = TA_Handler( | |
symbol=symbol, | |
screener=screener, | |
exchange=exchange, | |
interval=interval, | |
) | |
analysis_summary = stock.get_analysis() | |
return analysis_summary | |
except Exception as e: | |
return {"error": str(e)} | |
def get_chart_data(symbol, start_date, end_date): | |
stock_data = yf.download(symbol, start=start_date, end=end_date) | |
return stock_data['Close'] | |
def get_latest_news(api_key, query, language='en', count=7): | |
newsapi = NewsApiClient(api_key=api_key) | |
news = newsapi.get_everything(q=query, language=language, sort_by='publishedAt', page_size=count) | |
return news['articles'] | |
def main(): | |
st.title("TradingView Analysis Summary") | |
symbol = st.text_input("Enter Stock Symbol (e.g., TSLA):") | |
exchange = st.text_input("Enter Exchange (e.g., NASDAQ):") | |
screenerlist = list(SCREENER.values()) | |
screener = st.selectbox("Select Screener:", screenerlist) | |
interval_options = [ | |
Interval.INTERVAL_1_MINUTE, | |
Interval.INTERVAL_5_MINUTES, | |
Interval.INTERVAL_15_MINUTES, | |
Interval.INTERVAL_30_MINUTES, | |
Interval.INTERVAL_1_HOUR, | |
Interval.INTERVAL_4_HOURS, | |
Interval.INTERVAL_1_DAY, | |
Interval.INTERVAL_1_WEEK, | |
Interval.INTERVAL_1_MONTH, | |
] | |
interval = st.selectbox("Select Interval:", interval_options) | |
if st.button("Get Analysis"): | |
st.spinner("Fetching Analysis...") | |
analysis_summary = get_tradingview_analysis( | |
symbol=symbol, | |
exchange=exchange, | |
screener=screener, | |
interval=interval, | |
) | |
st.success("Analysis Fetched Successfully!") | |
st.title("Analysis Summary") | |
st.dataframe(analysis_summary.summary) | |
query = f"{symbol} stock" | |
details = { | |
"symbol": symbol, | |
"exchange": exchange, | |
"screener": screener, | |
"interval": interval, | |
} | |
st.title("Details") | |
st.dataframe(details) | |
st.title("Oscillator Analysis") | |
st.dataframe(analysis_summary.oscillators) | |
st.title("Moving Averages") | |
st.dataframe(analysis_summary.moving_averages) | |
st.title("Summary") | |
st.dataframe(analysis_summary.summary) | |
st.title("Indicators") | |
st.dataframe(analysis_summary.indicators) | |
# Latest News | |
st.title("Latest News") | |
api_key = 'a697bf1b28974e6bbc0f3d4813d1cb3f' | |
news = get_latest_news(api_key, query, count=7) | |
for article in news: | |
st.markdown( | |
f"### [{article['title']}]({article['url']})\n" | |
f" {article['description']}\n \n \n" | |
f" Source: {article['source']['name']}\n \n \n" | |
f" Published at: {article['publishedAt']}" | |
) | |
st.image(article['urlToImage'], caption=article['title'], use_column_width=True) | |
if __name__ == "__main__": | |
main() | |