Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import yfinance as yf | |
| import pandas as pd | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| # Streamlit Title | |
| st.title("Turtle Strategy Implementation for NIFTY 500 Stocks") | |
| # Stock Symbol Input | |
| st.sidebar.header("Stock Selection & Parameters") | |
| symbol = st.sidebar.text_input("Enter Stock Ticker (e.g., RELIANCE.NS):", value='RELIANCE.NS') | |
| # Parameters for the Turtle Strategy | |
| entry_days = st.sidebar.slider("Entry Lookback Period (days)", min_value=10, max_value=60, value=20, step=1) | |
| exit_days = st.sidebar.slider("Exit Lookback Period (days)", min_value=5, max_value=30, value=10, step=1) | |
| # Fetch Stock Data | |
| data = yf.download(symbol, start='2022-01-01', end='2023-01-01') | |
| st.write(f"### Historical Data for {symbol}") | |
| st.dataframe(data.tail(10)) | |
| # Turtle Strategy Calculations | |
| data['20D_High'] = data['High'].rolling(window=entry_days).max() | |
| data['10D_Low'] = data['Low'].rolling(window=exit_days).min() | |
| # Entry and Exit Signals | |
| data['Long'] = np.where(data['Close'] > data['20D_High'].shift(1), 1, 0) | |
| data['Exit'] = np.where(data['Close'] < data['10D_Low'].shift(1), -1, 0) | |
| # Position Management | |
| data['Position'] = 0 | |
| data.loc[data['Long'] == 1, 'Position'] = 1 | |
| data.loc[data['Exit'] == -1, 'Position'] = 0 | |
| data['Position'] = data['Position'].ffill().shift(1).fillna(0) | |
| # Strategy Returns Calculation | |
| data['Strategy Returns'] = data['Position'] * data['Close'].pct_change() | |
| data['Cumulative Returns'] = (1 + data['Strategy Returns']).cumprod() | |
| # Plotting Strategy Performance | |
| st.subheader("Turtle Strategy vs Buy and Hold Returns") | |
| plt.figure(figsize=(14, 7)) | |
| plt.plot(data['Cumulative Returns'], label='Turtle Strategy Returns') | |
| plt.plot((1 + data['Close'].pct_change()).cumprod(), label='Buy and Hold Returns') | |
| plt.title(f'Turtle Strategy vs Buy and Hold for {symbol}') | |
| plt.legend() | |
| st.pyplot(plt) | |
| # Show Raw Data | |
| st.subheader("Strategy Data Preview") | |
| st.write(data.tail(20)) | |