Composição de portfólio e backtesting

Introdução ao Gerenciamento de Risco de Portfólio em Python

Dakota Wixom

Quantitative Analyst | QuantCourse.com

Calculando retornos de portfólio

Fórmula do retorno do portfólio:

$$ R_p = R_{a_1} w_{a_1} + R_{a_2} w_{a_2} + ... + R_{a_n} w_{a_1} $$

  • $ R_p$: Retorno do portfólio
  • $ R_{a_n}$: Retorno do ativo n
  • $ w_{a_n}$: Peso do ativo n
Introdução ao Gerenciamento de Risco de Portfólio em Python

Supondo que StockReturns seja um DataFrame do pandas com retornos de ações, você pode calcular o retorno do portfólio para um conjunto de pesos assim:

import numpy as np
portfolio_weights = np.array([0.25, 0.35, 0.10, 0.20, 0.10])
port_ret = StockReturns.mul(portfolio_weights, axis=1).sum(axis=1)
port_ret
Date
2017-01-03    0.008082
2017-01-04    0.000161
2017-01-05    0.003448
         ...
StockReturns["Portfolio"] = port_ret
Introdução ao Gerenciamento de Risco de Portfólio em Python

Portfólios equiponderados em Python

Supondo que StockReturns seja um DataFrame do pandas com retornos de ações, você pode calcular o retorno de um portfólio equiponderado assim:

import numpy as np
numstocks = 5
portfolio_weights_ew = np.repeat(1/numstocks, numstocks)
StockReturns.iloc[:,0:numstocks].mul(portfolio_weights_ew, axis=1).sum(axis=1)
Date
2017-01-03    0.008082
2017-01-04    0.000161
2017-01-05    0.003448
         ...
Introdução ao Gerenciamento de Risco de Portfólio em Python

Plotando retornos de portfólio em Python

Para plotar os retornos diários no Python:

StockPrices["Returns"] = StockPrices["Adj Close"].pct_change()
StockReturns = StockPrices["Returns"]
StockReturns.plot()

Introdução ao Gerenciamento de Risco de Portfólio em Python

Plotando retornos acumulados do portfólio

Para plotar os retornos acumulados de vários portfólios:

import matplotlib.pyplot as plt
CumulativeReturns = ((1 + StockReturns).cumprod() - 1)
CumulativeReturns[["Portfolio","Portfolio_EW"]].plot()

Introdução ao Gerenciamento de Risco de Portfólio em Python

Valor de mercado

Introdução ao Gerenciamento de Risco de Portfólio em Python

Valor de mercado

Valor de mercado (market capitalization): O valor das ações negociadas publicamente de uma empresa.

Também chamado de market cap.

Introdução ao Gerenciamento de Risco de Portfólio em Python

Portfólios ponderados por valor de mercado

Para calcular o peso por valor de mercado de uma ação n:

$$ w_{mcap_n} = \frac{mcap_n}{ \sum_{i=1}^n mcap_i } $$

Introdução ao Gerenciamento de Risco de Portfólio em Python

Pesos por valor de mercado em Python

Para calcular pesos por valor de mercado no Python, supondo que você tenha os valores de mercado de cada empresa:

import numpy as np
market_capitalizations = np.array([100, 200, 100, 100])
mcap_weights = market_capitalizations/sum(market_capitalizations)
mcap_weights
array([0.2, 0.4, 0.2, 0.2])
Introdução ao Gerenciamento de Risco de Portfólio em Python

Vamos praticar!

Introdução ao Gerenciamento de Risco de Portfólio em Python

Preparing Video For Download...