import matplotlib matplotlib.use('Agg') #from turtle import width import streamlit as st from yahooquery import Ticker import pandas as pd import yfinance as yf # from fbprophet import Prophet import numpy as np import plotly.graph_objects as go import scrap as scraping import style as style import html01 as html01 def analise_tecnica_fundamentalista(): #código para ativar bootstrap css st.markdown( """ """,unsafe_allow_html=True ) col1, col2,col3 = st.columns([0.1,0.4,0.1]) with col2: st.title('Análise Técnica') st.subheader('Escolha o ativo que deseja analisar e pressione enter') #nome_do_ativo = st.text_input('Nome do ativo ex: PETR4, VALE3, WEGE3...') codigo_nome = pd.read_excel('data/classification_b3.xlsx') nome_do_ativo = st.selectbox('Esoolha a ação que deseja analisar', (codigo_nome['Código']) ) style.space(1) if nome_do_ativo != "": nome_do_ativo = str(nome_do_ativo + '.SA').upper() df = Ticker(nome_do_ativo,country='Brazil') time = df.history( period='max') # ------------------------------ RESUMO ---------------------------- resumo = pd.DataFrame(df.summary_detail) resumo = resumo.transpose() if len(nome_do_ativo) == 8: fundamentus = scraping.get_specific_data(nome_do_ativo[:5]) fundamentus = pd.DataFrame([fundamentus]) try: pfizer = yf.Ticker(nome_do_ativo) info = pfizer.info if info['recommendationKey'] == 'buy': recomendation = 'alta' else: recomendation = 'baixa' #KPIS metric1, metric2, metric3, metric4 = st.columns([1,1,1,1]) with metric1: st.metric(label="P/L",value=f"{fundamentus['P/L'][0]}") with metric2: st.metric(label="P/VP",value=f"{fundamentus['P/VP'][0]}") with metric3: st.metric(label="Tendência", value=f"{recomendation}") with metric4: st.metric(label="Próximo dividendo", value=f"{pfizer.calendar.transpose()['Earnings Date'].dt.strftime('%d/%m/%Y')[0]}") style.space(2) #card info html01.card_info(info['longName'], info['sector'], info['industry'], info['longBusinessSummary'], info['website']) style.space(2) except: exit else: st.write('---------------------------------------------------------------------') st.dataframe(resumo) pfizer = yf.Ticker(nome_do_ativo) info = pfizer.info st.title('Company Profile') st.subheader(info['longName']) try: st.markdown('** Sector **: ' + info['sector']) st.markdown('** Industry **: ' + info['industry']) st.markdown('** Website **: ' + info['website']) except: exit # ------------------------------ GRÁFICOS DE RENDIMENTO ---------------------------- if len(nome_do_ativo) == 8: import datetime fundamentalist = df.income_statement() fundamentalist['data'] = fundamentalist['asOfDate'].dt.strftime('%d/%m/%Y') fundamentalist = fundamentalist.drop_duplicates('asOfDate') fundamentalist = fundamentalist.loc[fundamentalist['periodType'] == '12M'] #volatilidade TRADING_DAYS = 360 returns = np.log(time['close']/time['close'].shift(1)) returns.fillna(0, inplace=True) volatility = returns.rolling(window=TRADING_DAYS).std()*np.sqrt(TRADING_DAYS) vol = pd.DataFrame(volatility.iloc[-360:]).reset_index() #sharpe ratio sharpe_ratio = returns.mean()/volatility sharpe = pd.DataFrame(sharpe_ratio.iloc[-360:]).reset_index() div = time.reset_index() div['year'] = pd.to_datetime(div['date']).dt.strftime('%Y') div_group = div.groupby('year').agg({'close':'mean','dividends':'sum'}) div_group['dividendo(%)'] = round((div_group['dividends'] * 100 ) / div_group['close'],4) from plotly.subplots import make_subplots fig = make_subplots( rows=3, cols=2, specs=[[{"type": "bar"}, {"type": "bar"}], [{"type": "bar"}, {"type": "bar"}], [{"type": "scatter"}, {"type": "scatter"}]], subplot_titles=("Receita Total","Lucro",'Dividendos (%)','Dividendos unitário R$','Volatilidade', 'Sharpe ratio (Retorno/ Risco)') ) fig.add_trace(go.Bar(x =pfizer.financials.transpose().index, y=pfizer.financials.transpose()['Total Revenue']), row=1, col=1) fig.add_trace(go.Bar(x =pfizer.financials.transpose().index, y=pfizer.financials.transpose()['Net Income From Continuing Ops']), row=1, col=2) fig.add_trace(go.Bar(x =div_group.reset_index().tail(5)['year'], y=div_group.reset_index().tail(5)['dividendo(%)']),row=2, col=1) fig.add_trace(go.Bar(x =div_group.reset_index().tail(5)['year'], y=div_group.reset_index().tail(5)['dividends']),row=2, col=2) fig.add_trace(go.Scatter(x =vol['date'], y=vol['close']),row=3, col=1) fig.add_trace(go.Scatter(x =sharpe['date'], y=sharpe['close']),row=3, col=2) fig.update_layout( height=800, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') col1, col2, col3 = st.columns([1,8,1]) #with col2: st.plotly_chart(fig,use_container_width=True) else: #volatilidade TRADING_DAYS = 160 returns = np.log(time['close']/time['close'].shift(1)) returns.fillna(0, inplace=True) volatility = returns.rolling(window=TRADING_DAYS).std()*np.sqrt(TRADING_DAYS) vol = pd.DataFrame(volatility.iloc[-160:]).reset_index() #sharpe ratio sharpe_ratio = returns.mean()/volatility sharpe = pd.DataFrame(sharpe_ratio.iloc[-160:]).reset_index() from plotly.subplots import make_subplots fig = make_subplots( rows=1, cols=2, specs=[[{"type": "scatter"}, {"type": "scatter"}]], subplot_titles=('Volatilidade', 'Sharpe ratio (Retorno/ Risco)') ) fig.add_trace(go.Scatter(x =vol['date'], y=vol['close']),row=1, col=1) fig.add_trace(go.Scatter(x =sharpe['date'], y=sharpe['close']),row=1, col=2) fig.update_layout( height=800, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') col1, col2, col3 = st.columns([1,8,1]) #with col2: st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE Candlestick---------------------------- with st.expander("Entenda o gráfico de Candlestick, clique para saber mais"): st.write("""Gráfico de Candlestick , O formato contém os valores dos preços que a ação atingiu durante o período de tempo que está sendo analisado. São os preços de:""") st.write('Abertura: preço pelo qual foi fechado o primeiro negócio do período') st.write('Fechamento: preço pelo qual foi fechado o último negócio do período') st.write('Máximo: maior preço negociado no período') st.write('Mínimo: menor preço negociado no período') fig = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.03, subplot_titles=('Candlestick', 'Volume'), row_width=[0.2, 0.7]) # Plot OHLC on 1st row fig.add_trace(go.Candlestick(x=time.reset_index()['date'][-90:], open=time['open'][-90:], high=time['high'][-90:], low=time['low'][-90:], close=time['close'][-90:], name="OHLC"), row=1, col=1) # Bar trace for volumes on 2nd row without legend fig.add_trace(go.Bar(x=time.reset_index()['date'][-90:], y=time['volume'][-90:], showlegend=False), row=2, col=1) # Do not show OHLC's rangeslider plot fig.update(layout_xaxis_rangeslider_visible=False) fig.update_layout( height=600, showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') #width=800 , fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE Retorno acumulado---------------------------- with st.expander("Entenda o gráfico de Retorno acumulado, clique para saber mais"): st.write("""Gráfico de Retorno acumulado, Acúmulo de retorno calculado desde a data de início escolhida até o dia de hoje.""") layout = go.Layout(title="Retorno acumulado",xaxis=dict(title="Data"), yaxis=dict(title="Retorno")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-365:], y=time.reset_index()['close'][-365:].pct_change().cumsum(), mode='lines', line_width=3,line_color='rgb(0,0,0)')) fig.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE Médias móveis---------------------------- with st.expander("Entenda o gráfico de Médias móveis, clique para saber mais"): st.write("""Gráfico de Médias móveis, Cada ponto no gráfico representa a média dos últimos x dias, exemplo MM20 = média móvel dos última 20 dias.""") st.write("""Com ela, é possível identificar o equilíbrio dos preços no mercado, observando tendências de alta, neutra ou baixa. A representação gráfica das Médias Móveis é normalmente feita por uma linha, que se movimenta conforme os dados novos recebidos para o cálculo.""") rolling_200 = time['close'].rolling(window=200) rolling_mean_200 = rolling_200.mean() rolling_50 = time['close'].rolling(window=72) rolling_mean_50 = rolling_50.mean() rolling_20 = time['close'].rolling(window=20) rolling_mean_20 = rolling_20.mean() rolling_10 = time['close'].rolling(window=9) rolling_mean_10 = rolling_10.mean() layout = go.Layout(title="Médias móveis - ative ou desative clicando na legenda da média",xaxis=dict(title="Data"), yaxis=dict(title="Preço R$")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-120:], y=time["close"][-120:], mode='lines', line_width=3,name='Real',line_color='rgb(0,0,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-120:], y=rolling_mean_200[-120:],mode='lines',name='MM(200)',opacity = 0.6)) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-120:], y=rolling_mean_50[-120:],mode='lines',name='MM(72)',opacity = 0.6)) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-120:], y=rolling_mean_20[-120:],mode='lines',name='MM(20)',opacity = 0.6)) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-120:], y=rolling_mean_10[-120:],mode='lines',name='MM(9)',opacity = 0.6,line_color='rgb(100,149,237)')) fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') fig.update_layout(autosize=True, height=600, width=800 ,showlegend=True, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE Retração de Fibonacci---------------------------- with st.expander("Entenda o gráfico de Retração de Fibonacci, clique para saber mais"): st.write("""Gráfico de Retração de Fibonacci, A retração de Fibonacci é composta por linhas horizontais que cortam a série de preços. A distância entre essas linhas varia obedecendo a chamada série numérica de Fibonacci. Na análise técnica esses valores são expressos em porcentagem e são: 100%, 61,8%, 38,2%, 23,6%, 0%.""") st.write("""Muito utilizado para tentar identificar uma tendência de alta ou de baixa. Uma das técnicas é analisar se a ação caiu até a linha de 38,2% (verde) para voltar a subir (retração com tendência de alta) ou se caiu passando os 38,2% pode representar uma tendência de baixa ou alta com pouca força.""") st.write('Tente sempre escolher a quantidade de dias analisados para começar a análise após o maior fundo de baixa histórico') time_fibo = time.copy() periodo_fibonacci = int(st.number_input(label='periodo fibonacci - traçada do menor valor encontrado no período de tempo setado abaixo até o maior valor encontrado para frente',value= 45 )) Price_Min =time_fibo[-periodo_fibonacci:]['low'].min() Price_Max =time_fibo[-periodo_fibonacci:]['high'].max() Diff = Price_Max-Price_Min level1 = Price_Max - 0.236 * Diff level2 = Price_Max - 0.382 * Diff level3 = Price_Max - 0.618 * Diff # st.write ('0% >>' f'{round(Price_Max,2)}') # st.write ('23,6% >>' f'{round(level1,2)}') # st.write ('38,2% >>' f'{round(level2,2)}') # st.write ('61,8% >>' f'{round(level3,2)}') # st.write ('100% >>' f'{round(Price_Min,2)}') time_fibo['Price_Min'] = Price_Min time_fibo['level1'] = level1 time_fibo['level2'] = level2 time_fibo['level3'] = level3 time_fibo['Price_Max'] = Price_Max layout = go.Layout(title=f'Retração de Fibonacci',xaxis=dict(title="Data"), yaxis=dict(title="Preço")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].close, mode='lines', line_width=3,name='Preço real',line_color='rgb(0,0,0)')) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].Price_Min, mode='lines', line_width=0.5,name='100%',line_color='rgb(255,0,0)',)) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].level3, mode='lines', line_width=0.5,name='61,8%',line_color='rgb(255,255,0)',fill= 'tonexty', fillcolor ="rgba(255, 0, 0, 0.2)")) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].level2, mode='lines', line_width=0.5,name='38,2%',line_color='rgb(0,128,0)',fill= 'tonexty', fillcolor ="rgba(255, 255, 0, 0.2)")) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].level1, mode='lines', line_width=0.5,name='23,6%',line_color='rgb(128,128,128)',fill= 'tonexty', fillcolor ="rgba(0, 128, 0, 0.2)")) fig.add_trace(go.Scatter(x=time_fibo[-periodo_fibonacci:].reset_index()['date'], y=time_fibo[-periodo_fibonacci:].Price_Max, mode='lines', line_width=0.5,name='0%',line_color='rgb(0,0,255)',fill= 'tonexty', fillcolor ="rgba(128, 128, 128, 0.2)")) fig.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE RSI---------------------------- try: delta = time['close'][-periodo_RSI:].diff() up, down = delta.copy(), delta.copy() up[up < 0] = 0 down[down > 0] = 0 period = 14 rUp = up.ewm(com=period - 1, adjust=False).mean() rDown = down.ewm(com=period - 1, adjust=False).mean().abs() time['RSI_' + str(period)] = 100 - 100 / (1 + rUp / rDown) time['RSI_' + str(period)].fillna(0, inplace=True) layout = go.Layout(title=f'RSI {periodo_RSI}',xaxis=dict(title="Data"), yaxis=dict(title="%RSI")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_RSI:], y=round(time['RSI_14'][-periodo_RSI:],2), mode='lines', line_width=3,name=f'RSI {periodo_RSI}',line_color='rgb(0,0,0)')) fig.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') periodo_RSI = int(st.number_input(label='periodo RSI',value=90)) with st.expander("Entenda o gráfico de Índice de Força Relativa (RSI), clique para saber mais"): st.write("""Gráfico de Índice de Força Relativa (RSI), é um indicador versátil que mede a velocidade e a mudança do movimento dos preços. O RSI pode ser usado para: Determine quando um instrumento está sobrecomprado ou sobrevendido.""") st.write('Comprar ativos que apresentem um baixo valor de RSI pode ser um bom indicador de desconto!') st.plotly_chart(fig,use_container_width=True) except: exit # ------------------------------ GRÁFICOS DE pivôs---------------------------- with st.expander("Entenda o gráfico de pivôs, clique para saber mais"): st.write("""O Pivot Point pode ser utilizado para calcular as possíveis zonas de suporte e resistência do ativo para o período desejado, o que ajuda a entender a pressão compradora (suporte) e a pressão vendedora (resistência).""") st.write(' Os pontos do pivô podem ser utilizados como valores de stop-loss (preço de saída com perda) ou stop-gain (preço de saída com lucro) por exemplo.') periodo_pivo = int(st.number_input(label='periodo pivô',value=20)) time['PP'] = pd.Series((time['high'] + time['low'] + time['close']) /3) time['R1'] = pd.Series(2 * time['PP'] - time['low']) time['S1'] = pd.Series(2 * time['PP'] - time['high']) time['R2'] = pd.Series(time['PP'] + time['high'] - time['low']) time['S2'] = pd.Series(time['PP'] - time['high'] + time['low']) layout = go.Layout(title=f'Pivô',xaxis=dict(title="Data"), yaxis=dict(title="Preço")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['close'][-periodo_pivo:],2), mode='lines', line_width=3,name=f'preço real',line_color='rgb(0,0,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['PP'][-periodo_pivo:],2), mode='lines', line_width=1,name=f'Ponto do pivô',line_color='rgb(0,128,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['R1'][-periodo_pivo:],2), mode='lines', line_width=1,name=f'Resistência 1',line_color='rgb(100,149,237)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['S1'][-periodo_pivo:],2), mode='lines', line_width=1,name=f'Suporte 1',line_color='rgb(100,149,237)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['R2'][-periodo_pivo:],2), mode='lines', line_width=1,name=f'Resistência 2',line_color='rgb(255,0,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_pivo:], y=round(time['S2'][-periodo_pivo:],2), mode='lines', line_width=1,name=f'Suporte 2',line_color='rgb(255,0,0)')) fig.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') st.plotly_chart(fig,use_container_width=True) # ------------------------------ GRÁFICOS DE Bolinger---------------------------- with st.expander("Entenda o gráfico de Bolinger, clique para saber mais"): st.write("""Quando o preço do ativo ultrapassa a banda superior, observamos uma tendência de alta do ativo. Por outro lado, se o preço fica abaixo da banda inferior, há então uma tendência de baixa. Entretanto, deve-se ficar atento aos sinais de força dos ativos ao ultrapassar as bandas.""") periodo_bolinger = int(st.number_input(label='periodo Bolinger',value=180)) time['MA20'] = time['close'].rolling(20).mean() time['20 Day STD'] = time['close'].rolling(window=20).std() time['Upper Band'] = time['MA20'] + (time['20 Day STD'] * 2) time['Lower Band'] = time['MA20'] - (time['20 Day STD'] * 2) layout = go.Layout(title=f'Banda de Bolinger',xaxis=dict(title="Data"), yaxis=dict(title="Preço")) fig = go.Figure(layout = layout) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_bolinger:], y=round(time['Upper Band'][-periodo_bolinger:],2), mode='lines', line_width=1,name=f'Banda superior',line_color='rgb(255,0,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_bolinger:], y=round(time['Lower Band'][-periodo_bolinger:],2), mode='lines', line_width=1,name=f'Banda inferior',line_color='rgb(255,0,0)',fill= 'tonexty', fillcolor ="rgba(255, 0, 0, 0.1)",opacity=0.2)) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_bolinger:], y=round(time['close'][-periodo_bolinger:],2), mode='lines', line_width=3,name=f'preço real',line_color='rgb(0,0,0)')) fig.add_trace(go.Scatter(x=time.reset_index()['date'][-periodo_bolinger:], y=round(time['MA20'][-periodo_bolinger:],2), mode='lines', line_width=2,name=f'MM 20',line_color='rgb(0,128,0)')) fig.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') fig.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') st.plotly_chart(fig,use_container_width=True) #with st.expander("Entenda o gráfico de Previsão, clique para saber mais"): # st.write("""Previsão que leva em conta apenas o movimento gráfico histórico do ativo, porém sabemos que o preço do ativo varia por outros diversos fatores. Com isso, esse é um parâmetro apenas como expectativa caso todos os outros fatores envolvidos se mantivessem.""") # # ------------------------------ Previsões---------------------------- # st.subheader('Previsões') # st.write('As previsões são feitas levando em conta apenas o movimento gráfico, porém o movimento do preço de um ativo é influenciado por diversos outros fatores, com isso, deve se considerar as previsões como uma hipótese de o preço do ativo variar somente pela sua variação gráfica') # st.write('Previsão considerando os últimos 365 dias, pode ser entendida como uma tendência dos dados segundo o último ano') # st.write('Opção de alterar a previsão: caso esteja buscando resultados a curto prazo é possível alterar o "periodo analisado" para fazer previsões apenas com base nos últimos x dias. Neste caso o movimento gráfico para trás dos dias selecionados não serão levados em conta') # periodo_analisado = int(st.number_input(label='período analisado (dias de resultados passados)',value=360)) # st.write('Opção de alterar a previsão: possibilidade de prever resultados futuros por mais de 30 dias') # periodo_futuro = int(st.number_input(label='período futuro a prever (dias)',value=30)) # time = time.reset_index() # time = time[['date','close']] # time.columns = ['ds','y'] # #Modelling # m = Prophet() # m.fit(time[-periodo_analisado:]) # future = m.make_future_dataframe(periods= periodo_futuro, freq='B') # forecast = m.predict(future[-periodo_futuro:]) # from fbprophet.plot import plot_plotly, plot_components_plotly # fig1 = plot_plotly(m, forecast) # fig1.update_layout( height=600, width=800 ,showlegend=False, paper_bgcolor='rgba(255,255,255,0.9)', plot_bgcolor='rgba(255,255,255,0.9)') # fig1.update_yaxes(showgrid=True, gridwidth=0.1, gridcolor = 'rgb(240,238,238)') # st.plotly_chart(fig1,use_container_width=True) # st.subheader('Tendência diária e semanal') # st.write('0 = segunda, 1 = terça, ... , 5 = sábado, 6 = domingo') # fig2 = m.plot_components(forecast,uncertainty = False,weekly_start=1) # st.plotly_chart(fig2,use_container_width=True) #st.write('Previsão considerando as últimas semanas, pode ser entendida como uma tendência dos dados segundo os últimos dias. Leva em consideração diversos fatores como: Índice de força relativa RSI, oscilador estocástico %K, Indicador Willian %R além do movimento gráfico dos últimos dias') #predict = stocker.predict.tomorrow(nome_do_ativo) #st.write('Previsão para o dia:',f'{predict[2]}','é que a ação feche no valor de: R$',f'{predict[0]}') #preço_ontem= round(time['y'][-1:].values[0],2) #if predict[0] < preço_ontem: #st.write('Previsão para o dia:',f'{predict[2]}','é que a ação caia de ',f'{preço_ontem}', 'para valor de: R$ ',f'{predict[0]}') #else: #st.write('Previsão para o dia:',f'{predict[2]}','é que a ação suba de ',f'{preço_ontem}', 'para valor de: R$ ',f'{predict[0]}')