Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import yfinance as yf | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| def fetch_data(ticker, start_date, end_date): | |
| data = yf.download(ticker, start=start_date, end=end_date) | |
| return data | |
| def calculate_indicators(data): | |
| # High and low for the breakout signals | |
| data['20 Day High'] = data['High'].rolling(window=20).max() | |
| data['20 Day Low'] = data['Low'].rolling(window=20).min() | |
| data['55 Day High'] = data['High'].rolling(window=55).max() | |
| data['55 Day Low'] = data['Low'].rolling(window=55).min() | |
| return data | |
| def identify_signals(data): | |
| # Buy signals are generated when the price exceeds the 20-day high | |
| data['Buy Signal'] = (data['Close'] > data['20 Day High'].shift(1)) | |
| # Sell signals are generated when the price drops below the 20-day low | |
| data['Sell Signal'] = (data['Close'] < data['20 Day Low'].shift(1)) | |
| signals = [] | |
| for index, row in data.iterrows(): | |
| if row['Buy Signal']: | |
| signals.append({'Date': index, 'Signal Type': 'Buy', 'Price': row['Close']}) | |
| if row['Sell Signal']: | |
| signals.append({'Date': index, 'Signal Type': 'Sell', 'Price': row['Close']}) | |
| return data, pd.DataFrame(signals) | |
| def plot_data(data): | |
| plt.figure(figsize=(12, 6)) | |
| plt.plot(data['Close'], label='Close Price') | |
| buy_signals = data[data['Buy Signal']] | |
| sell_signals = data[data['Sell Signal']] | |
| plt.scatter(buy_signals.index, buy_signals['Close'], marker='^', color='green', s=100, label='Buy Signal') | |
| plt.scatter(sell_signals.index, sell_signals['Close'], marker='v', color='red', s=100, label='Sell Signal') | |
| plt.title('Stock Price and Turtle Trading Signals') | |
| plt.xlabel('Date') | |
| plt.ylabel('Price') | |
| plt.legend() | |
| plt.grid(True) | |
| plt.show() | |
| def main(): | |
| st.title("Turtle Trading Strategy Visualization") | |
| ticker = st.text_input("Enter the ticker symbol, e.g., 'AAPL'") | |
| start_date = st.date_input("Select the start date") | |
| end_date = st.date_input("Select the end date") | |
| if st.button("Analyze"): | |
| data = fetch_data(ticker, start_date, end_date) | |
| data = calculate_indicators(data) | |
| data, signals = identify_signals(data) | |
| plot_data(data) | |
| st.pyplot(plt) | |
| if not signals.empty: | |
| st.write("Trading Signals:") | |
| st.dataframe(signals) | |
| else: | |
| st.write("No trading signals found for the selected period.") | |
| if __name__ == "__main__": | |
| main() | |