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+'**')