Update app.py
Browse files
app.py
CHANGED
@@ -2,7 +2,12 @@ import streamlit as st
|
|
2 |
import yfinance as yf
|
3 |
import pandas as pd
|
4 |
import plotly.graph_objs as go
|
|
|
5 |
|
|
|
|
|
|
|
|
|
6 |
|
7 |
def fetch_data(ticker, start_date, end_date):
|
8 |
data = yf.download(ticker, start=start_date, end=end_date)
|
@@ -24,7 +29,7 @@ def calculate_indicators(data):
|
|
24 |
|
25 |
return data
|
26 |
|
27 |
-
def identify_signals(data
|
28 |
# Calculate Buy and Sell signals on daily data
|
29 |
data['Buy Signal'] = ((data['Close'] < data['Lower Band']) & (data['Close'].shift(1) > data['Lower Band'])) | \
|
30 |
((data['Close'] > data['MA5']) & (data['Close'].shift(1) < data['MA5']))
|
@@ -35,14 +40,24 @@ def identify_signals(data, weekly_data):
|
|
35 |
avg_volume = data['Volume'].rolling(window=20).mean()
|
36 |
data['Buy Signal'] = data['Buy Signal'] & (data['Volume'] > avg_volume)
|
37 |
data['Sell Signal'] = data['Sell Signal'] & (data['Volume'] > avg_volume)
|
|
|
|
|
38 |
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
weekly_data = calculate_indicators(weekly_data)
|
|
|
41 |
data['Weekly Buy Signal'] = weekly_data['Buy Signal'].reindex(data.index, method='ffill')
|
42 |
data['Weekly Sell Signal'] = weekly_data['Sell Signal'].reindex(data.index, method='ffill')
|
43 |
data['Buy Signal'] = data['Buy Signal'] & data['Weekly Buy Signal']
|
44 |
data['Sell Signal'] = data['Sell Signal'] & data['Weekly Sell Signal']
|
45 |
-
|
46 |
return data
|
47 |
|
48 |
def plot_data(data):
|
@@ -82,7 +97,8 @@ def main():
|
|
82 |
data = fetch_data(ticker, start_date, end_date)
|
83 |
weekly_data = fetch_weekly_data(ticker, start_date, end_date)
|
84 |
data = calculate_indicators(data)
|
85 |
-
data = identify_signals(data
|
|
|
86 |
fig = plot_data(data)
|
87 |
st.plotly_chart(fig, use_container_width=True)
|
88 |
|
|
|
2 |
import yfinance as yf
|
3 |
import pandas as pd
|
4 |
import plotly.graph_objs as go
|
5 |
+
from st_pages import show_pages_from_config, add_page_title
|
6 |
|
7 |
+
# Load pages from the TOML configuration file
|
8 |
+
show_pages_from_config(".streamlit/pages_sections.toml")
|
9 |
+
|
10 |
+
add_page_title("BBMA Oma Ally", "🌐") # Optionally add a title and icon to the current page
|
11 |
|
12 |
def fetch_data(ticker, start_date, end_date):
|
13 |
data = yf.download(ticker, start=start_date, end=end_date)
|
|
|
29 |
|
30 |
return data
|
31 |
|
32 |
+
def identify_signals(data):
|
33 |
# Calculate Buy and Sell signals on daily data
|
34 |
data['Buy Signal'] = ((data['Close'] < data['Lower Band']) & (data['Close'].shift(1) > data['Lower Band'])) | \
|
35 |
((data['Close'] > data['MA5']) & (data['Close'].shift(1) < data['MA5']))
|
|
|
40 |
avg_volume = data['Volume'].rolling(window=20).mean()
|
41 |
data['Buy Signal'] = data['Buy Signal'] & (data['Volume'] > avg_volume)
|
42 |
data['Sell Signal'] = data['Sell Signal'] & (data['Volume'] > avg_volume)
|
43 |
+
|
44 |
+
return data
|
45 |
|
46 |
+
def identify_weekly_signals(weekly_data):
|
47 |
+
weekly_data['Buy Signal'] = ((weekly_data['Close'] < weekly_data['Lower Band']) & (weekly_data['Close'].shift(1) > weekly_data['Lower Band'])) | \
|
48 |
+
((weekly_data['Close'] > weekly_data['MA5']) & (weekly_data['Close'].shift(1) < weekly_data['MA5']))
|
49 |
+
weekly_data['Sell Signal'] = ((weekly_data['Close'] > weekly_data['Upper Band']) & (weekly_data['Close'].shift(1) < weekly_data['Upper Band'])) | \
|
50 |
+
((weekly_data['Close'] < weekly_data['MA5']) & (weekly_data['Close'].shift(1) > weekly_data['MA5']))
|
51 |
+
return weekly_data
|
52 |
+
|
53 |
+
def confirm_signals_with_weekly(data, weekly_data):
|
54 |
weekly_data = calculate_indicators(weekly_data)
|
55 |
+
weekly_data = identify_weekly_signals(weekly_data)
|
56 |
data['Weekly Buy Signal'] = weekly_data['Buy Signal'].reindex(data.index, method='ffill')
|
57 |
data['Weekly Sell Signal'] = weekly_data['Sell Signal'].reindex(data.index, method='ffill')
|
58 |
data['Buy Signal'] = data['Buy Signal'] & data['Weekly Buy Signal']
|
59 |
data['Sell Signal'] = data['Sell Signal'] & data['Weekly Sell Signal']
|
60 |
+
|
61 |
return data
|
62 |
|
63 |
def plot_data(data):
|
|
|
97 |
data = fetch_data(ticker, start_date, end_date)
|
98 |
weekly_data = fetch_weekly_data(ticker, start_date, end_date)
|
99 |
data = calculate_indicators(data)
|
100 |
+
data = identify_signals(data)
|
101 |
+
data = confirm_signals_with_weekly(data, weekly_data)
|
102 |
fig = plot_data(data)
|
103 |
st.plotly_chart(fig, use_container_width=True)
|
104 |
|