import streamlit as st import pandas as pd import yfinance as yf from babel.numbers import format_currency chart_data = pd.DataFrame([[]]) text = '' ativos = [ 'BBAS3', 'PETR4', 'MGLU3', 'IRBR3', 'BBSE3', 'B3SA3', 'BOVA11', 'BBDC4', 'ITUB4', 'TRPL4', 'SAPR4', 'TAEE11', 'VIVT3', ] ativos.sort() option = st.selectbox( 'Selecione um ativo:', ativos) start_date = st.date_input('Selecione a data da primeira compra:') taxa_renda_fixa = st.number_input("Taxa mensal de renda fixa:") patrimonio_renda_fixa = '' patrimonio_variavel = '' invested = '' period_time=0 def simulate(): global chart_data, patrimonio_renda_fixa,patrimonio_variavel, invested, period_time ticker=yf.download(f'{option}.SA', start=str(start_date), actions=True) actions = ticker[(ticker.Dividends!=0) | (ticker['Stock Splits'] !=0)] new_index = pd.date_range(start=ticker.index[0], end=ticker.index[-1], freq='MS') first_monday = pd.offsets.WeekOfMonth(week=0, weekday=0) # 0 is Monday first_monday_index = new_index + first_monday first_monday_index_set = [] for date in set(first_monday_index.values): first_monday_index_set.append(str(date).split('T')[0]) final_index = first_monday_index.union(actions.index) df = ticker.reindex(final_index) df=df.dropna() df['BUY'] = df.apply(lambda row: str(row.name).split(' ')[0] in first_monday_index_set , axis=1) wallet_variavel = {"stocks": 0, "money": 0, "invested": 1000} wallet_fixo = {"stocks": 0, "money": 0, "invested": 1000} for _, row in df.iterrows(): div = 0 if row.Dividends != 0: div = wallet_variavel['stocks']*row.Dividends if row['Stock Splits'] != 0: wallet_variavel['stocks'] *= row['Stock Splits'] if row.BUY: period_time += 1 wallet_variavel['invested'] += 1000 wallet_variavel['stocks'] += int(wallet_variavel['money']/row.Open) wallet_variavel['money'] = 1000 + int(wallet_variavel['money']%row.Open) wallet_fixo['money'] = 1000 + int(wallet_fixo['money']*(1.0+(taxa_renda_fixa/100))) wallet_fixo['invested'] += 1000 wallet_variavel['money'] += div patrimonio_variavel_val = format_currency(ticker.iloc[-1].Close * wallet_variavel["stocks"], 'BRL', locale='pt_BR') patrimonio_variavel = f'Você teria acumulado um total de {patrimonio_variavel_val}. Tendo acumulado {wallet_variavel["stocks"]} ações de {option}.' patrimonio_renda_fixa_val = format_currency(wallet_fixo["money"], 'BRL', locale='pt_BR') patrimonio_renda_fixa = f'Você teria acumulado um total de {patrimonio_renda_fixa_val} investindo em renda fixa com uma taxa de {taxa_renda_fixa} ao mês.' invested_val = format_currency(wallet_fixo['invested'], 'BRL', locale='pt_BR') invested = invested_val chart_data = ticker[['Open']] clicked = st.button('Simular') if clicked: simulate() st.markdown(f"##### * Você teria investido um total de {invested}") st.markdown(f"##### * O prazo selecionado foi de {period_time} mes(es).") st.markdown(f"##### * O investimento esta sendo feito na primeira segunda feira de cada mês.") st.markdown(f"##### * A cada mes é feito um aporte de R$ 1000,00.") st.markdown(f"##### * Os dividendos recebidos são sempre aportados no mes seguinte.") st.markdown(f"##### * A taxa média do CDI desde 2000 no Brasil foi de 0.9494 ao mês.") st.markdown(f"##### * A taxa média do IGPM desde 2000 no Brasil foi de 0.68122 ao mês.") st.markdown(f"##### * A taxa média do IPCA desde 2000 no Brasil foi de 0.5124 ao mês.") left_column, right_column = st.columns(2) with right_column: st.markdown("### Patrimonio em renda fixa com os mesmos aportes:") st.markdown('**'+patrimonio_renda_fixa+'**') with left_column: st.markdown("### Patrimonio comprando o ativo:") st.markdown("##### Gráfico de variação do preço da ação no período:") line_chart = st.line_chart(chart_data) st.markdown('**'+patrimonio_variavel+'**')