Olá a todos!
Vi um negócio interessante no youtube, e consegui copiar alguns trechos de código através do video e adpatei pra minha necessidade, e não é que o negócio funciona mesmo, baixou cotações dos ativos, até do CDI do site do BC, acho que vou estudar um pouco disso futuramente.
Confiram o código que adaptei:
!pip install bt
!pip -q install yfinance
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.express as px
from datetime import date
import bt
import matplotlib
matplotlib.style.use('seaborn-darkgrid')
%matplotlib inline
#baixar dados cdi
def consulta_bc(codigo_bcb):
url = 'http://api.bcb.gov.br/dados/serie/bcda.sgs.{}/dados?formato=json'.format(codigo_bcb)
df = pd.read_json(url)
df['data'] = pd.to_datetime(df['data'], dayfirst=True)
df.set_index('data', inplace= True)
return df
def cdi_acumulado (data_inicio, data_fim):
cdi = consulta_bc(12)
cdi_acumulado = (
1+cdi[data_inicio : data_fim]/100
).cumprod()
cdi_acumulado.iloc[0] = 1
return cdi_acumulado
data_inicio = '2021-01-20'
data_fim = '2023-01-20'
cdi = cdi_acumulado(data_inicio = data_inicio, data_fim = data_fim)
cdi
tickers_carteira_acoes = ['PIBB11.SA', 'IVVB11.SA']
carteira_acoes = yf.download(tickers_carteira_acoes, start = data_inicio, end=data_fim)['Adj Close']
carteira_acoes
carteira_acoes['renda_fixa'] = cdi
carteira_acoes
rebalanceamento_acoes = bt.Strategy(
'rebalanceamento_acoes',
[bt.algos.RunMonthly(run_on_end_of_period=True),
bt.algos.SelectAll(),
bt.algos.WeighEqually(),
bt.algos.Rebalance()]
)
buy_and_hold = bt.Strategy(
'Buy&Hold',
[bt.algos.RunOnce(),
bt.algos.SelectAll(),
bt.algos.WeighEqually(),
bt.algos.Rebalance()
]
)
bt_acoes_1 = bt.Backtest(rebalanceamento_acoes, carteira_acoes)
bt_acoes_2 = bt.Backtest(buy_and_hold, carteira_acoes)
resultados_acoes = bt.run( bt_acoes_1, bt_acoes_2)
resultados_acoes.display()
resultados_acoes.display_monthly_returns()
resultados_acoes.plot()
Resultados |
Então, interessante né?! Compartilhei esse código no link https://colab.research.google.com/drive/1NaR28o0J_4dvQ_y3siZ3b7VD9OIPS5Ad?usp=sharing