Spaces:
Runtime error
Runtime error
File size: 4,162 Bytes
34c6c93 fe80152 f060224 fe80152 f060224 876c387 f060224 876c387 f060224 fe80152 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
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+'**')
|