import streamlit as st import pandas as pd import numpy as np import yfinance as yf import matplotlib.pyplot as plt # Function to fetch data def fetch_data(ticker, start_date, end_date): data = yf.download(ticker, start=start_date, end=end_date) return data # Function to calculate support and resistance def calculate_support_resistance(data): data['Support'] = data['Low'].rolling(window=20, min_periods=1).min() data['Resistance'] = data['High'].rolling(window=20, min_periods=1).max() return data # Function to plot data def plot_data(data): plt.figure(figsize=(10, 5)) plt.plot(data['Close'], label='Close Price', color='blue') plt.plot(data['Support'], label='Support', linestyle='--', color='green') plt.plot(data['Resistance'], label='Resistance', linestyle='--', color='red') plt.title('Range Trading Strategy Visualization') plt.xlabel('Date') plt.ylabel('Price') plt.legend() plt.grid(True) st.pyplot(plt) # Sidebar st.sidebar.header('User Input Parameters') ticker = st.sidebar.text_input('Ticker Symbol', value='AAPL') start_date = st.sidebar.date_input('Start Date', pd.to_datetime('2020-01-01')) end_date = st.sidebar.date_input('End Date', pd.to_datetime('today')) if st.sidebar.button('Analyze'): data = fetch_data(ticker, start_date, end_date) if not data.empty: data = calculate_support_resistance(data) plot_data(data) else: st.error("No data found for the given ticker and date range. Please adjust your inputs and try again.") # Main screen st.title('Range Trading Strategy Visualizer') st.markdown(""" This app retrieves stock data from Yahoo Finance and visualizes the range trading strategy by identifying and plotting support and resistance levels. To use this app: - Enter the stock ticker symbol in the sidebar. - Choose the start and end date for your analysis. - Click on the 'Analyze' button to display the stock chart with marked support and resistance levels. """)