netflypsb commited on
Commit
cbd6be0
·
verified ·
1 Parent(s): 3b2ea29

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -0
app.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import yfinance as yf
3
+ import pandas as pd
4
+ import matplotlib.pyplot as plt
5
+ from matplotlib import dates as mdates
6
+ import plotly.graph_objects as go
7
+
8
+ # Initialize the Streamlit app
9
+ st.title('Momentum Reversal Trading Strategy Analysis')
10
+
11
+ # User input for asset ticker, start date, and end date
12
+ ticker = st.text_input('Enter the ticker symbol of the asset:', 'AAPL')
13
+ start_date = st.date_input('Start Date')
14
+ end_date = st.date_input('End Date')
15
+ analyze_button = st.button('Analyze')
16
+
17
+ if analyze_button:
18
+ # Fetch historical data from Yahoo Finance
19
+ data = yf.download(ticker, start=start_date, end=end_date)
20
+
21
+ # Calculate RSI
22
+ delta = data['Adj Close'].diff()
23
+ gain = (delta.where(delta > 0, 0)).fillna(0)
24
+ loss = (-delta.where(delta < 0, 0)).fillna(0)
25
+ avg_gain = gain.rolling(window=14, min_periods=14).mean()
26
+ avg_loss = loss.rolling(window=14, min_periods=14).mean()
27
+ rs = avg_gain / avg_loss
28
+ rsi = 100 - (100 / (1 + rs))
29
+
30
+ # Calculate MACD
31
+ exp1 = data['Adj Close'].ewm(span=12, adjust=False).mean()
32
+ exp2 = data['Adj Close'].ewm(span=26, adjust=False).mean()
33
+ macd = exp1 - exp2
34
+ signal = macd.ewm(span=9, adjust=False).mean()
35
+
36
+ # Identify buy and sell signals
37
+ buy_signals = (macd > signal) & (macd.shift(1) <= signal.shift(1))
38
+ sell_signals = (macd < signal) & (macd.shift(1) >= signal.shift(1))
39
+ data['Buy Signal'] = buy_signals
40
+ data['Sell Signal'] = sell_signals
41
+
42
+ # Plotting
43
+ fig = go.Figure()
44
+ fig.add_trace(go.Candlestick(x=data.index,
45
+ open=data['Open'],
46
+ high=data['High'],
47
+ low=data['Low'],
48
+ close=data['Close'], name='Market data'))
49
+ fig.add_trace(go.Scatter(x=data.index, y=rsi, name='RSI'))
50
+ fig.add_trace(go.Scatter(x=data.index, y=macd, name='MACD', line=dict(color='blue')))
51
+ fig.add_trace(go.Scatter(x=data.index, y=signal, name='Signal Line', line=dict(color='orange')))
52
+ fig.update_layout(title='Trading Signals', xaxis_title='Date', yaxis_title='Price')
53
+ st.plotly_chart(fig)
54
+
55
+ # Display Buy and Sell Signals in a table
56
+ signals = pd.DataFrame(index=data.index)
57
+ signals['Price'] = data['Adj Close']
58
+ signals['Buy'] = data['Buy Signal']
59
+ signals['Sell'] = data['Sell Signal']
60
+ signals_filtered = signals[(signals['Buy'] | signals['Sell'])]
61
+ st.table(signals_filtered)
62
+
63
+ # Streamlit app will run when this script is called