fight_the_tiger / app.py
netflypsb's picture
Update app.py
b4db2f0 verified
import streamlit as st
import yfinance as yf
import plotly.graph_objs as go
from datetime import datetime
# Function to load data
def load_data(ticker, start_date, end_date):
data = yf.download(ticker, start=start_date, end=end_date)
data.reset_index(inplace=True)
return data
# Function to identify buy and sell signals
def identify_signals(data):
# Assume bearish and bullish candles that are significantly larger than usual as signals
data['Signal'] = 'None' # Default no signal
avg_body_size = (abs(data['Open'] - data['Close'])).mean() # Average body size of the candles
for i in range(1, len(data)):
body_size = abs(data['Open'][i] - data['Close'][i])
if body_size > avg_body_size * 1.5: # Threshold of 150% of average body size
if data['Close'][i] < data['Open'][i]:
data['Signal'][i] = 'Sell' # Bearish candle
elif data['Close'][i] > data['Open'][i]:
data['Signal'][i] = 'Buy' # Bullish candle
return data
# Function to plot candlestick chart with signals
def plot_candlestick_chart(data):
fig = go.Figure(data=[go.Candlestick(
x=data['Date'],
open=data['Open'], high=data['High'],
low=data['Low'], close=data['Close'],
increasing_line_color='green', decreasing_line_color='red',
name='Candlestick')])
# Add signals to the plot
buys = data[data['Signal'] == 'Buy']
sells = data[data['Signal'] == 'Sell']
for i in buys.index:
fig.add_annotation(x=buys['Date'][i], y=buys['High'][i],
text='Buy', showarrow=True, arrowhead=1, arrowcolor='green', arrowsize=3)
for i in sells.index:
fig.add_annotation(x=sells['Date'][i], y=sells['Low'][i],
text='Sell', showarrow=True, arrowhead=1, arrowcolor='red', arrowsize=3)
fig.update_layout(title='Candlestick Chart with Buy and Sell Signals', xaxis_rangeslider_visible=False)
return fig
# Streamlit user interface
st.sidebar.header('User Input Features')
ticker = st.sidebar.text_input('Ticker', 'AAPL')
start_date = st.sidebar.date_input('Start Date', datetime(2020, 1, 1))
end_date = st.sidebar.date_input('End Date', datetime.today())
button = st.sidebar.button('Analyze')
st.title('Fight the Tiger Trading Strategy Visualization')
st.markdown("""
This app analyzes and visualizes the "Fight the Tiger" trading strategy using historical stock data fetched from Yahoo Finance.
Enter a stock ticker and select a date range to view the candlestick chart with potential buy and sell signals based on significant candlestick formations.
""")
if button:
if start_date < end_date:
data = load_data(ticker, start_date, end_date)
data = identify_signals(data) # Call to identify signals
fig = plot_candlestick_chart(data)
st.plotly_chart(fig, use_container_width=True)
else:
st.error('Error: End date must be after start date.')