import streamlit as st import pandas as pd import warnings from stratagy.rsi_stratagy import eqt warnings.simplefilter(action='ignore', category=FutureWarning) def backtest(ticker, startdate, enddate, share_qty): try: df = eqt(ticker, startdate, enddate, share_qty) return df except Exception as e: st.error(f"Please check input stock name of date.") def main(): st.title("RSI Backtesting App") st.sidebar.title("Input Parameters") default_ticker = 'MRF' default_startdate = '2019-02-01' default_enddate = '2023-11-28' default_share_qty = 90 ticker = st.sidebar.text_input("Enter Ticker", default_ticker) ticker = ticker.upper() + ".NS" # Date picker for start date startdate = st.sidebar.date_input("Select Start Date", pd.to_datetime(default_startdate)) # Date picker for end date enddate = st.sidebar.date_input("Select End Date", pd.to_datetime(default_enddate)) share_qty = st.sidebar.number_input("Enter Share Quantity", value=default_share_qty) if st.sidebar.button("Backtest"): if startdate > enddate: st.error("End Date must be after Start Date.") else: st.write("Backtesting with the following parameters:") st.write(f"- Ticker: {ticker}") st.write(f"- Start Date: {startdate.strftime('%Y-%m-%d')}") st.write(f"- End Date: {enddate.strftime('%Y-%m-%d')}") st.write(f"- Share Quantity: {share_qty}") result_df = backtest(ticker, startdate.strftime('%Y-%m-%d'), enddate.strftime('%Y-%m-%d'), share_qty) if result_df is not None: # Calculate total profit and trading duration total_profit = round(result_df['profit'].sum(), 2) trading_duration = f"{result_df.iloc[0]['Start'].strftime('%Y-%m-%d')} to {result_df.iloc[-1]['End'].strftime('%Y-%m-%d')}" # Display profit in green if positive, else in red profit_color = "green" if total_profit >= 0 else "red" st.write(f"Total Profit: {total_profit}₹", unsafe_allow_html=True) st.write(f"Trading Duration: {trading_duration}") # Display backtesting results table st.write("Backtesting Results:") st.write(result_df) if __name__ == "__main__": main()