Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Problema de Otimização de carteira Safety first - Abordagem de Roy

+1 voto
8 visitas
perguntada Nov 22 em Finanças por João Melo (21 pontos)  

Considere a classe de problemas de otimização de carteira conhecida como Safety First. Tomando por base a formulação proposta por Roy, formule explicitamente o problema, justique a formulação e resolva o numericamente o problema.

Compartilhe

1 Resposta

+1 voto
respondida Nov 22 por João Melo (21 pontos)  
editado Nov 22 por João Melo

A principal referência teórica para responder essa questão é o livro "Moderna Teoria de Carteiras e Análise de Investimentos", de Edwin Elton, Martin Gruber, Stephen Brown e William Goetzman, oitava edição(2012), p 224-227.

O critério safety first parte do pressuposto de que "os tomadores de decisão não são capazes nem estão dispostos a ter o trabalho matemático exigido pelo teorema da utilidade esperada." A alternativa é a utilização de um modelo de decisão mais simples focado nos (possíveis) resultados ruins.

Nessa seara, o critério de Roy "afirma que a melhor carteira é aquela que tem a menor probabilidade de ter retorno abaixo de algum nível especificado."

Define-se \(X\) como o retorno esperado dos ativos disponíveis no mercado, P como uma probabilidade, o objetivo do problema é minimizar P(\(R_m\)< \(R_l\)), em que:

\(R_m\): \(w.X\), retorno de uma carteira com o vetor de pesos w, de sorte que \(\sum_{i=1}^{k} w=1\), k=número de ativos do mercado
\(R_l\)= retorno mínimo desejado pelo investidor.

Ainda segundo Gruber et al, "se os retornos têm distribuição normal, a carteira ótima seria aquela em que \(R_l\) seria o número máximo dos desvios padrão (\(\sigma_m\)) da média.

Conforme essa formulação, o problema é descrito abaixo:

\(Min \frac{R_l-R_m}{\sigma_m}\) ou
\(Max \frac{R_m-R_l}{\sigma_m}\) = K (parâmetro definido no livro citado, e aqui utilizado também para fins de simplificação).

Note que, a substituição de \(R_l\) pelo ativo livre de risco traz a razão de Sharpe. Isto posto, o problema é semelhante à escolha da carteira pelo critério da maximização do índice de Sharpe, com a distinção de que \(R_l\) é definido de forma arbitrária.

Utilizando-se a notação matricial e definindo \(R_l=0\), novamente apresenta-se o problema.

\(Max_{w} \frac{w'X}{\sigma_m}\)
s.a. \(\sum_{i=1}^{k} w=1\)

A solução analítica para o problema da maximização do índice de Sharpe está disponível neste tópico, de onde se extrai os principais resultados utilizados no exemplo aqui proposto.

A CPO do problema resulta em que, para quaisquer ativos i e j:

\(x_i.\sigma_m\) \(-K. \langle{s_i},w\rangle\) = \(x_j.\sigma_m\) \(-K. \langle{s_j},w\rangle\) \( \tag{1}\)

Em que:
\(s_i\) é uma partição da matriz de covariância, correspondente ao ativo i (e à linha de mesmo índice).

Esse resultado vale para o problema sem restrição de vendas a descoberto. Ao se impor \(w_i\ge{0}\), valem os seguintes resultados, para quaisquer i, j:

\( \begin{cases} wi = 0;\quad ou
\\ w
j = 0;\quad ou \tag{2}
\\ vale\ a\ CPO\ (1) \end{cases} \)

Isto posto, segue-se para um exemplo numérico.

Foram selecionadas as ações de Ambev (ABEV3) e Magazine Luiza (MGLU3), com os respectivos rendimentos diários no período compreendido entre 31/10/2016 e 03/11/2017 (252 dias úteis). Os principais inputs do problema podem ser acessados aqui.

Outra simplificação utilizada na resposta da questão foi supor que os rendimentos futuros esperados são semelhantes aos valores passados, com 100% de certeza.

No Python, conforme será exposto abaixo, o critério utilizado para buscar a carteira ótima sob Roy foi a busca pela raiz da função CPO (1), a partir dos rendimentos de cada ativo e da matriz de covariância para cada vetor w testado.

import scipy.optimize
import numpy
import pandas as pd
import math

#Declaração da matriz de retornos
Ret = numpy.zeros((2,1))
Ret[0]=0.09399894
Ret[1] = 4.32266436
#Declaração da matriz de variância e covariância
dp = pd.read_excel("C:\Abev Mglu Cov.xlsm")
dp.as_matrix()
cov_matrix = dp.as_matrix()

#Declaração das matrizes de pesos, de sua transposta e da função a ser zerada
w = numpy.zeros((2))
w_t=numpy.zeros((1,2))
f = numpy.zeros((2))

w[0]=0.1 #parâmetro inicial para w1

def max(w):
    #Declaração da matriz transposta
    w_t[0,0]=w[0]
    w_t[0,1]=w[1]
    #Particionamento de f nos quatro integrantes da CPO (1)
    a1 = Ret[0]*(math.sqrt(numpy.dot(w_t,numpy.dot(cov_matrix,w))))
    a2 = (numpy.dot(w_t,Ret)/math.sqrt(numpy.dot(w_t,numpy.dot(cov_matrix,w))))*(numpy.dot(cov_matrix [0,[0,1]],w))
    a3 = Ret[1]*(math.sqrt(numpy.dot(w_t,numpy.dot(cov_matrix,w))))
    a4 = ((numpy.dot(w_t,Ret))/math.sqrt(numpy.dot(w_t,numpy.dot(cov_matrix,w))))*((numpy.dot(cov_matrix [1,[0,1]],w)))
    print a1
    print a2
    print a3
    print a4
    #Definição de f seguida da restrição de igualdade do problema
    f[0] = a1-a2-a3+a4
    f[1] = w[0] - (1- w[1])
    return f 
root = scipy.optimize.fsolve(max, w) 
resposta=root
print resposta

O resultado para o exercío (w*)' é exposto abaixo:

[-0.55366661 1.55366661]

Nota-se que, para as duas ações escolhidas, e tendo em vista as hipóteses colocadas, a alocação ótima sob a hipótese de Roy para o critério Safety First é a exposição em MGLU3 em ~155%, e a posição em ABEV3 em ~-55% (venda a descoberto).

É fácil perceber que, se a restrição de venda a descoberto fosse imposta \(wi\ge{0}\), a alocação seria total em MGLU3 pois, como a restrição nesse caso seria ativa (\(\lambda_i\neq{0}\)) para ABEV3, dos resultados (2) tem-se que \(w_{1=ABEV3}=0\), e \(w_{2=MGLU3}=1\)

...