|
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" |
|
|
|
|
|
startdate = st.sidebar.date_input("Select Start Date", pd.to_datetime(default_startdate)) |
|
|
|
|
|
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: |
|
|
|
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')}" |
|
|
|
|
|
profit_color = "green" if total_profit >= 0 else "red" |
|
st.write(f"Total Profit: <span style='color:{profit_color}'>{total_profit}₹</span>", unsafe_allow_html=True) |
|
st.write(f"Trading Duration: {trading_duration}") |
|
|
|
|
|
st.write("Backtesting Results:") |
|
st.write(result_df) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|