jarvisx17 commited on
Commit
e711955
·
verified ·
1 Parent(s): ab7e883

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import warnings
4
+ from stratagy.rsi_stratagy import eqt
5
+
6
+ warnings.simplefilter(action='ignore', category=FutureWarning)
7
+
8
+ def backtest(ticker, startdate, enddate, share_qty):
9
+ try:
10
+ df = eqt(ticker, startdate, enddate, share_qty)
11
+ return df
12
+ except Exception as e:
13
+ st.error(f"Please check input stock name of date.")
14
+
15
+ def main():
16
+ st.title("RSI Backtesting App")
17
+ st.sidebar.title("Input Parameters")
18
+
19
+ default_ticker = 'MRF'
20
+ default_startdate = '2019-02-01'
21
+ default_enddate = '2023-11-28'
22
+ default_share_qty = 90
23
+
24
+ ticker = st.sidebar.text_input("Enter Ticker", default_ticker)
25
+ ticker = ticker.upper() + ".NS"
26
+
27
+ # Date picker for start date
28
+ startdate = st.sidebar.date_input("Select Start Date", pd.to_datetime(default_startdate))
29
+
30
+ # Date picker for end date
31
+ enddate = st.sidebar.date_input("Select End Date", pd.to_datetime(default_enddate))
32
+
33
+ share_qty = st.sidebar.number_input("Enter Share Quantity", value=default_share_qty)
34
+
35
+ if st.sidebar.button("Backtest"):
36
+ if startdate > enddate:
37
+ st.error("End Date must be after Start Date.")
38
+ else:
39
+ st.write("Backtesting with the following parameters:")
40
+ st.write(f"- Ticker: {ticker}")
41
+ st.write(f"- Start Date: {startdate.strftime('%Y-%m-%d')}")
42
+ st.write(f"- End Date: {enddate.strftime('%Y-%m-%d')}")
43
+ st.write(f"- Share Quantity: {share_qty}")
44
+
45
+ result_df = backtest(ticker, startdate.strftime('%Y-%m-%d'), enddate.strftime('%Y-%m-%d'), share_qty)
46
+ if result_df is not None:
47
+ # Calculate total profit and trading duration
48
+ total_profit = round(result_df['profit'].sum(), 2)
49
+ trading_duration = f"{result_df.iloc[0]['Start'].strftime('%Y-%m-%d')} to {result_df.iloc[-1]['End'].strftime('%Y-%m-%d')}"
50
+
51
+ # Display profit in green if positive, else in red
52
+ profit_color = "green" if total_profit >= 0 else "red"
53
+ st.write(f"Total Profit: <span style='color:{profit_color}'>{total_profit}₹</span>", unsafe_allow_html=True)
54
+ st.write(f"Trading Duration: {trading_duration}")
55
+
56
+ # Display backtesting results table
57
+ st.write("Backtesting Results:")
58
+ st.write(result_df)
59
+
60
+ if __name__ == "__main__":
61
+ main()