Download technical_analysis.py from ratulsur/DagonGod: direct link, hf CLI and curl.
- Browser
- Download file 5.1 kB
-
https://huggingface.co/spaces/ratulsur/DagonGod/resolve/main/technical_analysis.py
- Command line
-
hf download hf://spaces/ratulsur/DagonGod/technical_analysis.py
-
curl -L -o technical_analysis.py https://huggingface.co/spaces/ratulsur/DagonGod/resolve/main/technical_analysis.py
5.1 kB
| import streamlit as st | |
| import plotly.graph_objects as go | |
| from plotly.subplots import make_subplots | |
| import pandas as pd | |
| from utils.data_loader import load_nifty50_symbols, fetch_stock_data | |
| from utils.technical_indicators import ( | |
| calculate_rsi, | |
| calculate_macd, | |
| calculate_bollinger_bands, | |
| calculate_support_resistance | |
| ) | |
| st.title("Technical Analysis") | |
| # Stock selection | |
| symbol = st.selectbox("Select Stock", load_nifty50_symbols()) | |
| timeframe = st.selectbox( | |
| "Select Timeframe", | |
| options=["1w", "1mo", "3mo", "6mo", "1y", "3y", "5y"], | |
| format_func=lambda x: { | |
| "1w": "1 Week", | |
| "1mo": "1 Month", | |
| "3mo": "1 Quarter", | |
| "6mo": "6 Months", | |
| "1y": "1 Year", | |
| "3y": "3 Years", | |
| "5y": "5 Years" | |
| }[x] | |
| ) | |
| # Fetch data | |
| data = fetch_stock_data(symbol, period=timeframe) | |
| if data is not None: | |
| # Create tabs for different analysis | |
| tab1, tab2, tab3 = st.tabs(["Price & Volume", "Technical Indicators", "Support & Resistance"]) | |
| with tab1: | |
| # Candlestick chart with volume | |
| fig = make_subplots(rows=2, cols=1, shared_xaxes=True, | |
| vertical_spacing=0.03, | |
| row_heights=[0.7, 0.3]) | |
| # Candlestick | |
| fig.add_trace(go.Candlestick( | |
| x=data.index, | |
| open=data['Open'], | |
| high=data['High'], | |
| low=data['Low'], | |
| close=data['Close'], | |
| name='OHLC' | |
| ), row=1, col=1) | |
| # Volume | |
| fig.add_trace(go.Bar( | |
| x=data.index, | |
| y=data['Volume'], | |
| name='Volume', | |
| marker_color='rgba(0,184,148,0.3)' | |
| ), row=2, col=1) | |
| fig.update_layout( | |
| title=f"{symbol} Price and Volume", | |
| yaxis_title="Price", | |
| yaxis2_title="Volume", | |
| xaxis_rangeslider_visible=False, | |
| height=800 | |
| ) | |
| st.plotly_chart(fig, use_container_width=True) | |
| with tab2: | |
| # Technical indicators | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| # RSI | |
| rsi = calculate_rsi(data) | |
| fig_rsi = go.Figure() | |
| fig_rsi.add_trace(go.Scatter( | |
| x=data.index, | |
| y=rsi, | |
| name='RSI', | |
| line=dict(color='#00B894') | |
| )) | |
| fig_rsi.add_hline(y=70, line_dash="dash", line_color="red") | |
| fig_rsi.add_hline(y=30, line_dash="dash", line_color="green") | |
| fig_rsi.update_layout(title="RSI (14)", height=400) | |
| st.plotly_chart(fig_rsi, use_container_width=True) | |
| with col2: | |
| # MACD | |
| macd, signal = calculate_macd(data) | |
| fig_macd = go.Figure() | |
| fig_macd.add_trace(go.Scatter( | |
| x=data.index, | |
| y=macd, | |
| name='MACD', | |
| line=dict(color='#00B894') | |
| )) | |
| fig_macd.add_trace(go.Scatter( | |
| x=data.index, | |
| y=signal, | |
| name='Signal', | |
| line=dict(color='#FFA500') | |
| )) | |
| fig_macd.update_layout(title="MACD", height=400) | |
| st.plotly_chart(fig_macd, use_container_width=True) | |
| # Bollinger Bands | |
| upper_band, middle_band, lower_band = calculate_bollinger_bands(data) | |
| fig_bb = go.Figure() | |
| fig_bb.add_trace(go.Scatter( | |
| x=data.index, | |
| y=upper_band, | |
| name='Upper Band', | |
| line=dict(color='gray', dash='dash') | |
| )) | |
| fig_bb.add_trace(go.Scatter( | |
| x=data.index, | |
| y=middle_band, | |
| name='Middle Band', | |
| line=dict(color='blue') | |
| )) | |
| fig_bb.add_trace(go.Scatter( | |
| x=data.index, | |
| y=lower_band, | |
| name='Lower Band', | |
| line=dict(color='gray', dash='dash') | |
| )) | |
| fig_bb.add_trace(go.Scatter( | |
| x=data.index, | |
| y=data['Close'], | |
| name='Close Price', | |
| line=dict(color='#00B894') | |
| )) | |
| fig_bb.update_layout(title="Bollinger Bands", height=500) | |
| st.plotly_chart(fig_bb, use_container_width=True) | |
| with tab3: | |
| # Support and Resistance | |
| support, resistance = calculate_support_resistance(data) | |
| fig_sr = go.Figure() | |
| fig_sr.add_trace(go.Scatter( | |
| x=data.index, | |
| y=data['Close'], | |
| name='Price', | |
| line=dict(color='#00B894') | |
| )) | |
| fig_sr.add_trace(go.Scatter( | |
| x=data.index, | |
| y=support, | |
| name='Support', | |
| line=dict(color='green', dash='dash') | |
| )) | |
| fig_sr.add_trace(go.Scatter( | |
| x=data.index, | |
| y=resistance, | |
| name='Resistance', | |
| line=dict(color='red', dash='dash') | |
| )) | |
| fig_sr.update_layout( | |
| title="Support and Resistance Levels", | |
| height=600 | |
| ) | |
| st.plotly_chart(fig_sr, use_container_width=True) | |
| else: | |
| st.error("Unable to fetch data. Please try again later.") |