ratulsur commited on
Commit
59e86d2
·
verified ·
1 Parent(s): 27816ae

Upload market_overview.py

Browse files
Files changed (1) hide show
  1. market_overview.py +139 -0
market_overview.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import plotly.graph_objects as go
3
+ import pandas as pd # Added import statement for pandas
4
+ from utils.data_loader import load_nifty50_symbols, fetch_stock_data, get_stock_info
5
+
6
+ st.title("Market Overview")
7
+
8
+ # Create sector categories
9
+ sectors = {
10
+ "IT": ["TCS.NS", "INFY.NS", "HCLTECH.NS", "TECHM.NS", "WIPRO.NS"],
11
+ "Banking & Finance": ["HDFCBANK.NS", "ICICIBANK.NS", "SBIN.NS", "AXISBANK.NS", "KOTAKBANK.NS",
12
+ "BAJFINANCE.NS", "BAJAJFINSV.NS", "HDFC.NS", "INDUSINDBK.NS"],
13
+ "Energy & Oil": ["RELIANCE.NS", "ONGC.NS", "POWERGRID.NS", "NTPC.NS", "BPCL.NS"],
14
+ "Automobile": ["TATAMOTORS.NS", "M&M.NS", "MARUTI.NS", "HEROMOTOCO.NS", "EICHERMOT.NS"],
15
+ "Consumer Goods": ["HINDUNILVR.NS", "ITC.NS", "NESTLEIND.NS", "BRITANNIA.NS", "TITAN.NS"],
16
+ "Metals & Mining": ["TATASTEEL.NS", "HINDALCO.NS", "JSWSTEEL.NS", "COALINDIA.NS"],
17
+ "Pharmaceuticals": ["SUNPHARMA.NS", "DRREDDY.NS", "CIPLA.NS", "DIVISLAB.NS"],
18
+ "Infrastructure": ["LT.NS", "ADANIPORTS.NS", "ULTRACEMCO.NS", "SHREECEM.NS", "GRASIM.NS"],
19
+ "Others": ["BHARTIARTL.NS", "ASIANPAINT.NS", "HDFCLIFE.NS", "SBILIFE.NS", "UPL.NS",
20
+ "ADANIENT.NS", "BAJAJ-AUTO.NS", "APOLLOHOSP.NS", "DMART.NS", "PIDILITIND.NS"]
21
+ }
22
+
23
+ # Sector selection
24
+ selected_sector = st.selectbox("Select Sector", list(sectors.keys()))
25
+
26
+ # Load data for selected sector
27
+ cols = st.columns(3)
28
+
29
+ # Market Movers for selected sector
30
+ with cols[0]:
31
+ st.subheader("Top Gainers")
32
+ gainers_data = []
33
+ for symbol in sectors[selected_sector]:
34
+ data = fetch_stock_data(symbol, period='1d')
35
+ if data is not None:
36
+ change = ((data['Close'][-1] - data['Open'][0]) / data['Open'][0]) * 100
37
+ info = get_stock_info(symbol)
38
+ company_name = info['name'] if info else symbol
39
+ gainers_data.append({
40
+ 'Company': company_name,
41
+ 'Symbol': symbol,
42
+ 'Change%': change
43
+ })
44
+
45
+ # Sort gainers by change percentage
46
+ gainers_data = sorted(gainers_data, key=lambda x: x['Change%'], reverse=True)[:3]
47
+ st.dataframe(pd.DataFrame(gainers_data))
48
+
49
+ with cols[1]:
50
+ st.subheader("Top Losers")
51
+ losers_data = []
52
+ for symbol in sectors[selected_sector]:
53
+ data = fetch_stock_data(symbol, period='1d')
54
+ if data is not None:
55
+ change = ((data['Close'][-1] - data['Open'][0]) / data['Open'][0]) * 100
56
+ info = get_stock_info(symbol)
57
+ company_name = info['name'] if info else symbol
58
+ losers_data.append({
59
+ 'Company': company_name,
60
+ 'Symbol': symbol,
61
+ 'Change%': change
62
+ })
63
+
64
+ # Sort losers by change percentage
65
+ losers_data = sorted(losers_data, key=lambda x: x['Change%'])[:3]
66
+ st.dataframe(pd.DataFrame(losers_data))
67
+
68
+ with cols[2]:
69
+ st.subheader("Most Active")
70
+ active_data = []
71
+ for symbol in sectors[selected_sector]:
72
+ info = get_stock_info(symbol)
73
+ if info:
74
+ active_data.append({
75
+ 'Company': info['name'],
76
+ 'Symbol': symbol,
77
+ 'Volume': info['volume']
78
+ })
79
+
80
+ # Sort by volume
81
+ active_data = sorted(active_data, key=lambda x: x['Volume'], reverse=True)[:3]
82
+ st.dataframe(pd.DataFrame(active_data))
83
+
84
+ # Sector Performance Heat Map
85
+ st.subheader(f"{selected_sector} Performance Heat Map")
86
+ heat_map_data = []
87
+ for symbol in sectors[selected_sector]:
88
+ data = fetch_stock_data(symbol, period='1d')
89
+ info = get_stock_info(symbol)
90
+ if data is not None and info:
91
+ change = ((data['Close'][-1] - data['Open'][0]) / data['Open'][0]) * 100
92
+ heat_map_data.append({
93
+ 'Company': info['name'],
94
+ 'Symbol': symbol,
95
+ 'Change%': change,
96
+ 'Market Cap': info['market_cap'],
97
+ 'Volume': info['volume']
98
+ })
99
+
100
+ if heat_map_data:
101
+ fig = go.Figure(data=[go.Treemap(
102
+ labels=[f"{d['Company']}<br>{d['Symbol']}" for d in heat_map_data],
103
+ parents=[''] * len(heat_map_data),
104
+ values=[d['Market Cap'] for d in heat_map_data],
105
+ textinfo="label+value+percent",
106
+ marker=dict(
107
+ colors=[d['Change%'] for d in heat_map_data],
108
+ colorscale='RdYlGn',
109
+ showscale=True
110
+ ),
111
+ hovertemplate="""
112
+ Company: %{label}<br>
113
+ Change: %{color:.2f}%<br>
114
+ Market Cap: ₹%{value:,.0f}<br>
115
+ <extra></extra>
116
+ """
117
+ )])
118
+
119
+ fig.update_layout(title=f"{selected_sector} Companies Heat Map")
120
+ st.plotly_chart(fig, use_container_width=True)
121
+
122
+ # Detailed Sector Analysis
123
+ st.subheader(f"{selected_sector} Companies")
124
+ detailed_data = []
125
+ for symbol in sectors[selected_sector]:
126
+ info = get_stock_info(symbol)
127
+ if info:
128
+ detailed_data.append({
129
+ 'Company': info['name'],
130
+ 'Symbol': symbol,
131
+ 'Market Cap (Cr)': info['market_cap'] / 10000000, # Convert to Crores
132
+ 'P/E Ratio': info['pe_ratio'],
133
+ 'Volume': info['volume'],
134
+ 'Recommendation': info['recommendation'],
135
+ 'Target Price': info['target_price']
136
+ })
137
+
138
+ if detailed_data:
139
+ st.dataframe(pd.DataFrame(detailed_data))