-
Notifications
You must be signed in to change notification settings - Fork 1
/
Streamlit_app.py
192 lines (153 loc) · 6.65 KB
/
Streamlit_app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import streamlit as st
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from datetime import datetime, timedelta
import requests
from bs4 import BeautifulSoup
def market_sentiment():
st.write("Market sentiment analysis placeholder")
def news_sentiment():
st.write("News sentiment analysis placeholder")
def correlation_matrix():
st.write("Correlation matrix placeholder")
def portfolio_simulator():
st.write("Portfolio simulator placeholder")
# AI-Powered Stock Predictions
def ai_stock_prediction(ticker):
st.subheader(f"AI-Powered Prediction for {ticker}")
data = yf.download(ticker, start=datetime.now() - timedelta(days=365*2), end=datetime.now())
data['Prediction'] = data['Close'].shift(-1)
data = data.dropna()
X = np.array(data.drop(['Prediction'], 1))
Y = np.array(data['Prediction'])
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
model = RandomForestRegressor().fit(X_train, Y_train)
prediction = model.predict(X_test)
fig = go.Figure()
fig.add_trace(go.Scatter(x=data.index[-len(X_test):], y=Y_test, name="Actual"))
fig.add_trace(go.Scatter(x=data.index[-len(X_test):], y=prediction, name="Predicted"))
st.plotly_chart(fig)
# Options Chain Analysis
def options_chain_analysis(ticker):
st.subheader(f"Options Chain for {ticker}")
stock = yf.Ticker(ticker)
expirations = stock.options
if expirations:
expiration = st.selectbox("Select expiration date", expirations)
opt = stock.option_chain(expiration)
calls = opt.calls
puts = opt.puts
st.write("Calls:")
st.dataframe(calls[['strike', 'lastPrice', 'volume', 'openInterest', 'impliedVolatility']])
st.write("Puts:")
st.dataframe(puts[['strike', 'lastPrice', 'volume', 'openInterest', 'impliedVolatility']])
else:
st.write("No options data available for this stock.")
# Social Media Sentiment Analysis
def social_media_sentiment(ticker):
st.subheader(f"Social Media Sentiment for {ticker}")
sentiments = ['Positive', 'Negative', 'Neutral']
sentiment_counts = np.random.randint(1, 100, size=3)
fig = px.pie(values=sentiment_counts, names=sentiments, title=f"{ticker} Social Media Sentiment")
st.plotly_chart(fig)
# Sector Performance Heatmap
def sector_performance_heatmap():
st.subheader("Sector Performance Heatmap")
sectors = ['Technology', 'Healthcare', 'Financials', 'Consumer Discretionary', 'Industrials', 'Energy']
performance = np.random.uniform(-5, 5, size=len(sectors))
fig = go.Figure(data=go.Heatmap(
z=[performance],
x=sectors,
y=['Performance'],
colorscale='RdYlGn'))
st.plotly_chart(fig)
# Volatility Analysis
def volatility_analysis(ticker):
st.subheader(f"Volatility Analysis for {ticker}")
data = yf.download(ticker, start=datetime.now() - timedelta(days=365), end=datetime.now())
data['Returns'] = data['Close'].pct_change()
data['Volatility'] = data['Returns'].rolling(window=21).std() * np.sqrt(252) * 100
fig = go.Figure()
fig.add_trace(go.Scatter(x=data.index, y=data['Volatility'], name="21-Day Volatility"))
st.plotly_chart(fig)
# Dividend Calendar
def dividend_calendar():
st.subheader("Dividend Calendar")
dividends = [
{"Date": "2023-07-25", "Stock": "AAPL", "Dividend": "$0.24"},
{"Date": "2023-08-10", "Stock": "MSFT", "Dividend": "$0.68"},
{"Date": "2023-08-15", "Stock": "JNJ", "Dividend": "$1.13"},
]
st.table(pd.DataFrame(dividends))
# Insider Trading Tracker
def insider_trading_tracker():
st.subheader("Recent Insider Trading")
insider_trades = [
{"Date": "2023-07-15", "Insider": "John Doe", "Company": "AAPL", "Action": "Buy", "Shares": 1000},
{"Date": "2023-07-17", "Insider": "Jane Smith", "Company": "GOOGL", "Action": "Sell", "Shares": 500},
{"Date": "2023-07-20", "Insider": "Bob Johnson", "Company": "MSFT", "Action": "Buy", "Shares": 2000},
]
st.table(pd.DataFrame(insider_trades))
# Global Market Hours Tracker
def global_market_hours():
st.subheader("Global Market Hours")
markets = {
"New York (NYSE)": {"Open": "9:30 AM", "Close": "4:00 PM", "Timezone": "ET"},
"London (LSE)": {"Open": "8:00 AM", "Close": "4:30 PM", "Timezone": "BST"},
"Tokyo (TSE)": {"Open": "9:00 AM", "Close": "3:00 PM", "Timezone": "JST"},
"Hong Kong (HKEX)": {"Open": "9:30 AM", "Close": "4:00 PM", "Timezone": "HKT"},
}
for market, hours in markets.items():
st.write(f"{market}: {hours['Open']} - {hours['Close']} {hours['Timezone']}")
# Modify the main app structure
st.markdown("<h1 style='text-align: center; color: #00FFFF;'>Elite Cosmic Market Analyzer</h1>", unsafe_allow_html=True)
# Sidebar navigation
page = st.sidebar.radio("Navigate", [
"Dashboard", "Stocks", "Cryptocurrencies", "Market Trends", "Portfolio Simulator",
"Options Analysis", "Social Sentiment", "Sector Performance", "Volatility",
"Dividends", "Insider Trading", "Global Markets"
])
if page == "Dashboard":
market_sentiment()
news_sentiment()
sector_performance_heatmap()
elif page == "Stocks":
ticker = st.text_input("Enter stock ticker", "AAPL")
ai_stock_prediction(ticker)
volatility_analysis(ticker)
elif page == "Cryptocurrencies":
st.write("Cryptocurrency analysis placeholder")
elif page == "Market Trends":
correlation_matrix()
elif page == "Portfolio Simulator":
portfolio_simulator()
elif page == "Options Analysis":
ticker = st.text_input("Enter stock ticker for options analysis", "AAPL")
options_chain_analysis(ticker)
elif page == "Social Sentiment":
ticker = st.text_input("Enter stock ticker for social sentiment", "AAPL")
social_media_sentiment(ticker)
elif page == "Sector Performance":
sector_performance_heatmap()
elif page == "Volatility":
ticker = st.text_input("Enter stock ticker for volatility analysis", "AAPL")
volatility_analysis(ticker)
elif page == "Dividends":
dividend_calendar()
elif page == "Insider Trading":
insider_trading_tracker()
elif page == "Global Markets":
global_market_hours()
st.markdown(
"""
<div style='position: fixed; bottom: 0; left: 0; right: 0; text-align: center; padding: 10px; background-color: rgba(0,0,0,0.7);'>
<p style='color: #00FFFF;'>Powered by Cosmic AI • Real-time Galactic Market Analysis • © 2024 Cosmic Market Analyzer</p>
</div>
""",
unsafe_allow_html=True
)