netflypsb commited on
Commit
30f407a
·
1 Parent(s): 103b4f5

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -0
app.py ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import plotly.graph_objects as go
4
+ from plotly.subplots import make_subplots
5
+ import yfinance as yf
6
+
7
+ # Function to calculate Moving Averages and Parabolic SAR
8
+ def calculate_indicators(data, ema_periods=[5, 25, 50]):
9
+ for period in ema_periods:
10
+ data[f'EMA_{period}'] = data['Close'].ewm(span=period, adjust=False).mean()
11
+ data['high'] = data['High'].rolling(window=2).max()
12
+ data['low'] = data['Low'].rolling(window=2).min()
13
+ data['af'] = 0.02
14
+ data['psar'] = data['Close'][0]
15
+ for i in range(1, len(data)):
16
+ if data['Close'][i] > data['psar'][i-1]:
17
+ data['psar'][i] = data['psar'][i-1] + data['af'][i-1] * (data['high'][i-1] - data['psar'][i-1])
18
+ else:
19
+ data['psar'][i] = data['psar'][i-1] - data['af'][i-1] * (data['psar'][i-1] - data['low'][i-1])
20
+ if data['psar'][i] > data['Close'][i]:
21
+ data['psar'][i] = data['low'][i-1]
22
+ else:
23
+ data['psar'][i] = data['high'][i-1]
24
+ if (data['Close'][i] > data['Close'][i-1] and data['af'][i-1] < 0.2):
25
+ data['af'][i] = data['af'][i-1] + 0.02
26
+ elif (data['Close'][i] < data['Close'][i-1]):
27
+ data['af'][i] = 0.02
28
+ return data
29
+
30
+ # Function to plot the data
31
+ def plot_data(data):
32
+ fig = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02)
33
+ fig.add_trace(go.Candlestick(x=data.index,
34
+ open=data['Open'], high=data['High'],
35
+ low=data['Low'], close=data['Close'],
36
+ name='Candlestick'), row=1, col=1)
37
+ for ema in [5, 25, 50]:
38
+ fig.add_trace(go.Scatter(x=data.index, y=data[f'EMA_{ema}'], mode='lines', name=f'EMA {ema}'), row=1, col=1)
39
+ fig.add_trace(go.Scatter(x=data.index, y=data['psar'], mode='markers', marker_symbol='circle', name='Parabolic SAR'), row=1, col=1)
40
+ return fig
41
+
42
+ # Streamlit app layout
43
+ st.title('Profit Parabolic Trading Strategy Visualization')
44
+
45
+ st.sidebar.header('User Input Parameters')
46
+ ticker = st.sidebar.text_input('Ticker Symbol', 'AAPL')
47
+ start_date = st.sidebar.date_input('Start Date', pd.to_datetime('2020-01-01'))
48
+ end_date = st.sidebar.date_input('End Date', pd.to_datetime('today'))
49
+ button = st.sidebar.button('Analyze')
50
+
51
+ if button:
52
+ data = yf.download(ticker, start=start_date, end=end_date)
53
+ data = calculate_indicators(data)
54
+ fig = plot_data(data)
55
+ st.plotly_chart(fig, use_container_width=True)
56
+