Long-Short através de Cointegração – Parte 3

Este post é parte de uma série sobre como fazer operações de arbitragem estatística (long-short) através da técnica de cointegração. No primeiro post da série, introduzi intuitivamente o conceito de cointegração, que permite encontrar pares (ou outras combinações) de ativos que “andam juntos”. No segundo post, expliquei conceitualmente um teste simples de estacionariedade, conhecido como teste de Dickey-Fuller (DF), apresentei sua versão “aumentada”, e introduzi o Método de Engle-Granger, que permite testar se duas séries não-estacionárias são cointegradas.

Neste post, darei um exemplo prático da aplicação deste teste utilizando o Excel. É necessário ter o pacote de Análise de Dados instalado.

Relembrando, o processo para testar se duas séries são cointegradas consiste em primeiro testar se elas são não-estacionárias. Caso ambas sejam, é feita uma regressão entre as séries de preços, e utiliza-se o teste DF (ou o teste DF Aumentado) para testar a estacionariedade dos resíduos. Se os resíduos forem estacionários, a série é cointegrada.

Escolhi as ações QUAL3 (QualiCorp SA, uma empresa do ramo de seguro-saúde) e RENT3 (Localiza Rent a Car SA, uma locadora de automóveis) para o exercício. Os dados compreendem o período entre outubro de 2012 e outubro de 2014. Estas duas ações são cointegradas ao nível de 1% de significância neste período, o que é um tanto contra-intuitivo, considerando que são de setores totalmente diferentes. Todos os cálculos mencionados estão demonstrados e explicados na planilha que acompanha o post, disponível no link abaixo:

Download-Button_1700x1000_zpsce011000

 

 

Ressalto que esta escolha foi arbitrária e ilustrativa, e não quer dizer que seja possível operar este par de maneira lucrativa.

Comecemos por analisar as séries de preços das duas ações. Conforme podemos ver no gráfico abaixo, os preços das duas ações parecem se comportar, à primeira vista, de maneira similar:

Precos QUAL3 RENT3

 

Passo 1 – Testar se cada série é não-estacionária

Vamos começar. O primeiro passo é testar se cada uma das séries é não-estacionária, aplicando o teste DF em cada série de preços. A hipótese nula do teste DF é que a série é não-estacionária, portanto neste primeiro teste queremos que a hipótese nula não seja rejeitada.

Para aplicar o teste DF, precisamos primeiro calcular os valores defasados (lags) de cada série e o delta (diferença entre o preço do dia e o preço do dia anterior), e após isto fazer regressão do delta no lag. Por exemplo, para QUAL3 esta regressão seria:

\Delta P_t^{QUAL3}= a + b P_{t-1}^{QUAL3} + e_t^{QUAL3}

onde P_t^{QUAL3} representa o preço de QUAL3 no dia t e \Delta P_t^{QUAL3} = P_t^{QUAL3} - P_{t-1}^{QUAL3} é o delta do preço de QUAL3.

Ao estimar esta regressão (aba “Teste Estac. QUAL3”), obtemos a seguinte equação:

\Delta P_t^{QUAL3}= 21.37 -0.45 \times P_{t-1}^{QUAL3}

e o valor da estatística t para o coeficiente b é -1.29. O valor crítico do teste DF (ver tabela no segundo post da série) é de -2.87. Portanto concluímos com base no teste DF que a série é não-estacionária (não rejeitamos a hipótese nula pois a estatística do teste é menor do que o valor crítico).

O teste para RENT3 chega à mesma conclusão (ver aba “Teste Estac. RENT3”). Podemos então seguir para o próximo passo.

Passo 2 – Aplicar Metodologia de Engle-Granger

No segundo passo temos duas etapas: primeiro estimaremos uma regressão dos preços de QUAL3 em RENT3 e salvaremos os resíduos desta regressão. A seguir, aplicaremos o teste DF nestes resíduos. Neste teste queremos que a hipótese nula de não-estacionariedade seja rejeitada, o que implicará que uma combinação linear dos preços das ações é estacionária e portanto elas são cointegradas.

Estes passos estão detalhados na aba “Regressão Engle-Granger”. Primeiramente é feita a regressão dos preços de QUAL3 em RENT3:

P_t^{QUAL3}=\alpha P_t^{RENT3}+u_t

Os resíduos \hat{u}_t (também chamados de spread do par) são salvos para a segunda etapa, que consiste em estimar a regressão:

\Delta u_t=a +b u_{t-1}+v_t

A estimação desta segunda regressão resulta em uma estatística t de -4.60 para o coeficiente b. Como o valor crítico é -2.87 a 5% de significância, e -3.44 a 1% de significância, podemos rejeitar a hipótese nula de não-estacionariedade ao nível de 1% de significância, concluindo portanto que as duas séries são cointegradas.

O teste de cointegração em si está concluído, porém isto não implica que o par possa ser operado com sucesso. Para isto é necessário avaliar se o comportamento do spread é adequado e realizar algum tipo de simulação (backtest). Idealmente queremos que o spread apresente o seguinte comportamento:

  • Relação de cointegração estável ao longo do tempo
  • Reversão frequente do spread à média
  • Variabilidade razoavelmente grande nas divergências

Com relação ao primeiro ponto, podemos nos questionar se a relação de cointegração entre duas ações de setores tão diferentes será estável ao longo do tempo; pode ser que seja um resultado espúrio, afinal estamos falando de um teste estatístico que possui uma probabilidade de erro. É importante ressaltar que relações de cointegração podem “quebrar” a qualquer momento. Um resultado positivo em um teste de cointegração é um indício de que o par pode ser operável, mas não garante resultado futuro. É preciso reavaliar periodicamente a relação de cointegração para detectar possíveis mudanças no comportamento das séries.

O gráfico abaixo apresenta a evolução do spread ao longo do tempo, com duas bandas representando -2 e 2 vezes o desvio padrão dos resíduos. Vemos que, apesar de os resíduos apresentarem certa persistência, comportam-se de maneira aparentemente desejável: flutuam razoavelmente ao redor da média, visitando-a com certa frequência. Uma regra possível de operação consistiria em vender o par quando o resíduo estiver acima da banda, e comprar o par quando estiver abaixo da banda. O trade pode ser encerrado quando o par voltar a média ou a um percentual qualquer da média. A simulação do resultado deste tipo de estratégia pode ser feita de maneira muito similar à que introduzi neste post.

spread

 

Automatização

Conforme o leitor deve ter percebido, o processo de teste de cointegração de 1 par utilizando o Excel é complicado e possui vários passos. Na prática, um modelo para operar pares precisa avaliar milhares de combinações possíveis e torna-se inviável ou pouco prático fazer isto no Excel. O número de pares possíveis com N ações é N(N-1)/2, ou seja, com 100 ações (uma estimativa razoável do número de ações líquidas no mercado brasileiro) temos 4950 pares possíveis. Neste caso é recomendável utilizar alguma plataforma matemática como o R ou o Matlab. No R pode-se utilizar por exemplo o pacote tseries, que possui a função adf.test para fazer o teste DF. No Matlab há o toolbox de Econometria, que possui a função similar adftest.

No próximo post, falarei em linhas gerais sobre como montar um modelo geral para operar pares cointegrados, e potencialmente dar alguns exemplos em Matlab.

Anúncios

Long-Short através de Cointegração – Parte 2

No primeiro post desta série, introduzi de maneira intuitiva o conceito de cointegração, que permite encontrar pares de ativos que “andam juntos”. Estes pares são bons candidatos para se construir um modelo de operação com pares.

Neste post, explicarei como realizar um teste simples, mas amplamente utilizado, de cointegração*. Aviso: usarei alguns conceitos de Estatística como regressão linear e teste de hipótese. No próximo post, o teste será demonstrado com exemplos reais no Excel e também comentarei como realizá-lo em programas como R e Matlab.

Teste de Estacionariedade (teste de Dickey-Fuller)

Como podemos testar a estacionariedade de uma série? Podemos começar considerando  um modelo simples de séries temporais, o modelo autoregressivo de ordem 1, ou AR(1). Este modelo tem a seguinte forma:

y_t = a + b y_{t-1} + e_t

onde y_t é o valor da série temporal no instante t, e e_t é um choque aleatório. A equação acima mostra que no modelo AR(1), o valor presente da série depende do valor anterior, multiplicado por uma constante b, mais um choque aleatório.

O modelo AR(1) é importante porque ele pode ser estacionário ou não, dependendo do valor de b. Se b<1, o modelo é estacionário, enquanto se b=1 o modelo é não-estacionário (dizemos que possui uma raiz unitária). Se subtrairmos y_{t-1} dos dois lados da equação acima, temos:

y_t -t_{t-1}= a + (b-1) y_{t-1} + e_t

\Delta y_t = a + b^* y_{t-1} + e_t

onde \Delta y_t = y_t -y_{t-1} e b^*=b-1. Agora podemos realizar um teste de estacionariedade com as seguintes hipóteses:

H_0: b^*=0\quad\textrm{(a s\'erie \'e n\~ao-estacion\'aria) VS}\quad H_1: b^*<0\quad\textrm{(a s\'erie \'e estacion\'aria)}

Caso o leitor ainda esteja acordado, este teste pode ser feito de maneira muito simples, fazendo uma regressão linear de \Delta y_t em y_{t-1}. Este teste é conhecido como teste de Dickey-Fuller**. A estatística do teste é simplesmente a estatística-t para o coeficiente b^* acima, porém os valores críticos não são os mesmos de um teste t normal (ver tabela no final do post).

Como este teste nos ajudará a encontrar pares de ações cointegradas? Simples. Em primeiro lugar, para que o par seja cointegrado, ambas as séries de preços precisam ser não-estacionárias, pois lembre-se que a cointegração é uma relação entre duas séries integradas. Após utilizarmos o teste acima para verificar que os preços das duas ações são não-estacionários, aplicaremos um segundo teste para verificar se o spread entre as duas séries é estacionário. Este segundo passo é conhecido como metodologia de Engle-Granger.

Teste de Cointegração (metodologia de Engle-Granger)

No post anterior, definimos cointegração da seguinte maneira: dizemos que duas séries temporais (não-estacionárias) X e Y são cointegradas se existe um número \alpha tal que a série Z=X-\alpha Y  é estacionária. Ou seja, dadas duas séries não-estacionárias, se uma combinação linear delas for estacionária, elas são cointegradas.

A metodologia de Engle-Granger consiste em dois passos: primeiro fazemos uma regressão linear de uma série temporal contra a outra. Em seguida, aplicamos um teste de estacionariedade (como por exemplo o teste de Dickey-Fuller) nos resíduos desta regressão. Se os resíduos forem estacionários, isto significa que encontramos a combinação linear tal que as duas séries são cointegradas

O processo completo para fazer um teste de cointegração entre duas séries de preços (vamos chamá-las de X_t e Y_t) segue portanto os seguintes passos:

1. Usar um teste de estacionariedade para verificar se X_t e Y_t são não-estacionárias. Para haver cointegração, ambas devem ser não-estacionárias.

2. Usando dados das duas séries temporais, rodar uma regressão com a forma abaixo:

Y_t=\alpha X_t+u_t

e calcular os resíduos \hat{u} = Y_t - \hat{\alpha} X_t

3. Testar a estacionariedade dos resíduos \hat{u_t} desta regressão. Caso eles sejam estacionários, as séries são cointegradas.

No próximo post veremos alguns exemplos de aplicação destes testes a pares de ações brasileiras. É importante ressaltar que esta é apenas uma das metodologias de cointegração existentes. Existem outros tipos de testes, como por exemplo a metodologia de Johansen.

———————————————————————————-

Tabela de valores críticos do teste Dickey-Fuller:

Níve de significância
Tamanho amostral 1% 5% 10%
25 -3,75 -3,00 -2,62
50 -3,58 -2,93 -2,60
100 -3,51 -2,89 -2,58
250 -3,46 -2,88 -2,57
500 -3,44 -2,87 -2,57
∞∞ -3,43 -2,86 -2,57
Fonte: Market Risk Analysis, Vol II, Carol Alexander.

* O objetivo deste post é introduzir o leitor aos conceitos básicos de cointegração.Há inúmeros detalhes técnicos que devem ser considerados para aplicar os testes corretamente. Algumas referências técnicas com mais detalhes: o segundo volume da série Market Risk Analysis daCarol Alexander ou o livro Analysis of Financial Time Series deTsay.

** Uma versão mais sofisticada do teste possui o infeliz nome de Teste de Dickey-Fuller Aumentado. A diferença entre este teste e o teste de Dickey-Fuller normal é que ele inclui mais lags da série temporal na regressão.

Long-Short através de Cointegração – Parte 1

Em alguns posts anteriores, falei em linhas gerais sobre arbitragem estatística (aqui e aqui) e descrevi um modelo genérico para operar pares de ações, com uma aplicação usando o modelo de bandas de Bollinger. Nesta sequência de posts, explicarei um modelo mais sofisticado de arbitragem estatística, através do conceito de cointegração.

Estratégias de arbitragem estatística são baseadas em encontrar uma série temporal que possua a característica de estacionariedade ou reversão à média. Isto significa que é possível identificar situações em que a série divergiu de seu comportamento histórico, e prever com alguma segurança que a série convergirá ou reverterá para um comportamento “médio”. O conceito de cointegração formaliza matematicamente este comportamento e permite a realização de testes estatísticos para detectar séries com este comportamento. No contexto de operações com pares de ativos (pairs trading), a existência de uma relação de cointegração entre as séries de preços de dois ativos significa que pode ser possível realizar operações lucrativas de arbitragem. Por outro lado, se o par não for cointegrado, será impossível encontrar uma relação consistente para operar o par.

A Metáfora do Bêbado e seu Cachorro

Antes de definirmos matematicamente a cointegração, convém explicarmos com uma metáfora. Imagine que um bêbado está passeando pelo parque, andando a esmo. Sua direção é imprevisível: às vezes ele vira para a direita, às vezes ele vira para a esquerda. A trajetória do bêbado é chamada, na Estatística, de passeio aleatório: é um processo imprevisível*. Supondo que o bêbado continuará andando indefinidamente, é impossível prever onde ele estará após um certo tempo, e a melhor previsão da sua posição é o último lugar em que ele foi visto.

Se representarmos graficamente a posição do bêbado ao longo do tempo (distância entre o bêbado e um ponto qualquer de referência), o resultado será algo parecido com isto:

Este gráfico mostra a posição de um bêbado andando aleatoriamente (passeio aleatório Gaussiano)

Este gráfico mostra a posição de um bêbado andando aleatoriamente (passeio aleatório Gaussiano)

Agora imaginemos que o bêbado possui um cachorro, que o acompanha onde quer que ele vá. O cachorro não possui coleira e tende a se afastar do dono, atraído pelos diferentes cheiros e estímulos que sente ao andar pelo parque. Porém o bêbado, sempre que percebe que o cachorro não está por perto, o chama, e o cachorro retorna. O gráfico com a posição do bêbado e do cachorro será algo assim:

Este gráfico mostra as posições de um bêbado e seu cachorro (passeio aleatório Gaussiano e processo cointegrado)

Este gráfico mostra as posições de um bêbado e seu cachorro (passeio aleatório Gaussiano e processo cointegrado)

Podemos ver que, apesar de a posição do bêbado no parque ser imprevisível, a posição do cachorro em relação ao bêbado é relativamente previsível: o cachorro nunca está muito longe do dono. Podemos ir um passo adiante e quantificar isto, medindo a distância entre os dois, ou seja, a diferença entre as duas séries temporais do gráfico acima. O gráfico abaixo apresenta esta diferença e duas “bandas”, que representam pontos extremos na distribuição desta distância.

Distância entre o bêbado e o cachorro e bandas de confiança

Distância entre o bêbado e o cachorro e bandas de confiança

Podemos ver que, na média, o cachorro está sempre próximo do bêbado. Além disto, quando a distância se aproxima de +1 ou -1, há uma probabilidade muito grande de que no próximo instante a distância reverterá para sua média próxima de zero. Isto sugere que é possível apostar, com alta chance de ganhar, que o cachorro estará junto ao dono logo após se distanciar acima das bandas  mostradas. As bandas podem ser estimadas, por exemplo, através de uma medida de dispersão como o desvio padrão. No gráfico acima, as bandas representam um intervalo de +2 ou -2 desvios-padrão da média da distância. Este conceito é o mesmo utilizado no modelo de bandas de Bollinger.

Voltando ao mundo financeiro…

Talvez você esteja se perguntando porque estou falando de bêbados e cachorros em um blog sobre mercado financeiro. Transferindo a analogia acima para o mercado de ações, suponha que seja possível encontrar um par de ações que possui um comportamento similar, ou seja, que “andam juntas”. Se as séries de preços das ações forem cointegradas, ou seja, se uma das empresas for o bêbado e a outra, o cachorro, então será possível quantificar quanto a distância entre os preços das ações, que chamamos de spread, varia ao longo do tempo, e explorar situações nas quais esta distância divergiu de seu comportamento histórico.

É importante lembrar que o número de pares possíveis de ações aumenta rapidamente com o tamanho do mercado. Por exemplo, com um universo de 50 ações, existem 1125 pares possíveis. Com 100 ações, o número de pares sobre para 4950. Podemos ver como simular estratégias de operação com todos os pares possíveis pode se tornar um processo oneroso ou mesmo inviável. Sabemos também que, se um par não for cointegrado, é inútil tentar encontrar uma estratégia de reversão a média. Portanto é necessário termos um teste para identificar quais pares de ações são cointegrados. Mesmo dentro do universos dos pares que são cointegrados, não há garantia de sucesso. É preciso que o par possua algumas características específicas para que uma estratégia de arbitragem seja consistentemente lucrativa:

  • Relação de cointegração estável ao longo do tempo
  • Reversão frequente do spread à média
  • Variabilidade razoavelmente grande nas divergências

Definindo Cointegração

Para definir cointegração, definiremos primeiro alguns conceitos básicos:

Série temporal: uma série temporal é uma coleção de valores ordenados no tempo. Por exemplo, os preços diários de uma ação constituem uma série temporal. Se denotarmos por P^A_{t} o preço da ação A no instante t, então a coleção de valores {P^A_{1}, P^A_{2}, P^A_{3},... } etc é uma série temporal.

Estacionariedade: uma série temporal é estacionária** se (i) a sua média é constante, (ii) a sua variância é constante e (iii) a covariância entre dois instantes da série temporal t e s depende apenas da diferença entre t e s.

Uma série estacionária é chamada em Estatística de I(0) ou “integrada de ordem zero”. Uma série não-estacionária, mas cuja primeira diferença é estacionária, é chamada de integrada de ordem 1, ou I(1).

Por exemplo, a série temporal da distância entre o bêbado e o cachorro, mostrada acima, é estacionária: sua média é constante (de fato é igual a zero), sua variância é constante, e é possível mostrar que a covariância entre dois pontos quaisquer da série depende apenas da distância entre estes pontos. Já a posição do bêbado ou do cachorro são exemplos de séries não estacionárias. Não existe uma posição média na qual espera-se encontrá-los.

Em geral, séries de preços de ativos são não-estacionárias, ou seja, não é possível, definir um preço médio em torno do qual uma ação oscila consistentemente. O preço da ação pode subir indefinidamente ou pode chegar a zero, caso a empresa vá à falência.

Podemos agora definir cointegração para o caso de duas séries temporais não-estacionárias X e Y.  Dizemos que X e Y são cointegradas se existe um número \alpha tal que a série Z=X-\alpha Y  é estacionária. Ou seja, dadas duas séries não-estacionárias, se uma combinação linear delas for estacionária, elas são cointegradas.

Cointegração vs Correlação

Muitas vezes o conceito de correlação é utilizado para construir estratégias com pares de ações. Isto não é indicado, pois o fato de duas séries terem alta correlação não garante que o seu spread seja estacionário. Cointegração e correlação são conceitos relacionados, porém diferentes. Em particular, alta correlação não implica em cointegração, nem tampouco um alto nível de cointegração implica em correlação alta. Por exemplo, o gráfico abaixo mostra duas séries temporais cointegradas, mas cuja correlação é apenas 0.30. As séries estarão, no longo prazo, andando juntas, porém, no curto prazo, seus movimentos tem pouca relação entre si. Note que a diferença entre as duas séries é estacionária.

Séries cointegradas mas com baixa correlação

Séries cointegradas mas com baixa correlação

O oposto também é possível. O gráfico abaixo mostra duas séries altamente correlacionadas (correlação = 0.78) mas que não são cointegradas. Note que as séries estão se distanciando uma da outra e a sua diferença não é estacionária.

Séries altamente correlacionadas, mas não cointegradas.

Séries altamente correlacionadas, mas não cointegradas.

No próximo post, explicarei como fazer um teste de cointegração.

Uma boa referência para estes conceitos é o segundo volume da série Market Risk Analysis daCarol Alexander.

 

* Porém é possível demonstrar matematicamente que o bêbado sempre encontra o caminho para casa!

** Esta é a definição de estacionariedade fraca. Ver as referências para maior formalismo.

 

Otimimização de uma carteira de ações – exemplo em Excel

Alguns leitores me pediram um exemplo de como fazer otimização de carteiras utilizando o Excel. Atendendo a estes pedidos, preparei um exemplo que permite otimizar uma carteira com até 50 ações do mercado brasileiro. Informações úteis para entender as contas feitas na planilha podem ser encontradas aqui, aqui e aqui.

Faça o download da planilha:

Download-Button_1700x1000_zpsce011000

 

 

Vamos aos detalhes.

Dados

Os dados na planilha dizem respeito às 50 ações com maior volume no período de agosto 2012 a agosto de 2013. Esta escolha é arbitrária e o leitor pode modificar a planilha à vontade para refletir melhor o universo de ações que lhe for mais conveniente. 

Estimação dos parâmetros de mercado

Para realizar a otimização de carteiras dentro do paradigma de Markowitz, é necessário estimar as seguintes quantidades para o horizonte de investimento do investidor:

  • Retornos esperados de todos os ativos
  • Matriz de covariância dos ativos

Os retornos esperados, como o próprio nome diz, são a expectativa que o investidor tem sobre o retorno total de cada ativo. A matriz de covariância possui informações sobre a variabilidade de cada ativo e também sobre como os preços dos ativos se movimentam de maneira conjunta. Esta informação permite que se explore um benefício de diversificação.

Existem diversas maneiras de estimar estes valores. Para este exemplo, optei por utilizar dados históricos em frequência diárias. Um ponto crucial em um problema de alocação de ativos é o horizonte de investimento do investidor. Para que o problema de otimização esteja bem definido, é necessário que as quantidades acima sejam projetadas para este horizonte. Por exemplo, se o horizonte do investidor é mensal, mas os dados utilizados na estimação são diários, é necessário de alguma maneira transformar as estimativas diárias para quantidades mensais.

Aqui surge uma complicação relacionada ao tipo de retorno que utilizamos. O paradigma média-variância de Markowitz é definido em termos de retornos lineares. O retorno linear de um ativo entre os tempos t-1 e t pode ser definido por

R_t = \frac{P_{t}}{P_{t-1}}-1,

onde P_t é o preço do ativo no instante t . Os retornos lineares possuem a característica importante de que eles podem ser agregados ou somados entre ativos diferentes. Ou seja, dada uma carteira de N ativos representada por um vetor de pesos \boldsymbol w = \left(w_1, \cdots, w_N \right) , onde w_i corresponde à proporção do valor da carteira investida no ativo i, o retorno da carteira pode ser calculado como uma combinação linear dos retornos dos ativos:

R_t^{Carteira} = \boldsymbol w ' \mathbf{R}_t=\sum_{i=1}^{N}{w_i R_{i,t}}

Por outro lado, para agregar retornos ao longo do tempo, a relação é multiplicativa. Por exemplo, o retorno total entre t-2 e t pode ser calculado como

R_{t-2,t} = (1+R_{t-2,t})(1+R_{t-1,t})-1.

A relação acima não é particularmente conveniente, especialmente para transformar retornos entre horizontes diferentes. Um alternativa é trabalhar com retornos compostos, também conhecido como log-retornos. O log-retorno entre os tempos t-1 e t pode ser definido por

r_t = \log{\left(\frac{P_{t}}{P_{t-1}}\right)}.

Os log-retornos tem a característica conveniente de poderem ser agregados ao longo do tempo. O log-retorno entre os tempos t-2 e t pode ser calculado como

r_{t-2,t} = r_{t-2,t}+r_{t-1,t}.

Para valores pequenos, por exemplo em horizontes diários, o log-retorno é uma aproximação boa do retorno. Porém, quanto maior o retorno, pior é esta aproximação.

Ao escolher trabalhar com log-retornos diários, torna-se trivial projetar as estimativas para qualquer horizonte de investimento desejado. Por exemplo, se o horizonte desejado é mensal, então a projeção dos retornos esperados e da matriz de covariância são obtidos através da multiplicação das estimativas diárias por 21 (número de dias úteis em um mês). Caso o horizonte seja anual, multiplicamos por 252, e assim por diante.

Há um segundo motivo para trabalhar com log-retornos. Do ponto de vista de modelagem, a escolha de modelar os log-retornos como variáveis com distribuição normal implica em uma distribuição log-normal para os preços dos ativos. Isto é mais intuitivo e realista do que modelar os retornos como variáveis normais, o que implicaria que os preços teriam distribuições normais e permitiria, por exemplo, a possibilidade de preços negativos.

Apesar destas vantagens, os log-retornos não são agregáveis entre ativos diferentes, ou seja, o log-retorno de uma carteira de ativos não é uma combinação linear dos retornos dos ativos. Logo, para obter estimativas de retorno esperado e matriz de covariância dos retornos lineares, uma transformação é necessária. Esta transformação é realizada de maneira interna pela planilha. Os detalhes podem ser obtidos neste artigo.

Otimização

A otimização realizada pela planilha é a descrita aqui. Há três opções principais:

  • Calcular Fronteira Eficiente – esta opção realiza o cálculo de 20 portfolios na fronteira eficiente. Os portfolios são definidos a partir de retornos esperados mínimos igualmente espaçados entre o retorno esperado da carteira de variância mínima e o maior retorno esperado dentre todos os ativos.
  • Otimizar Carteira – esta opção realiza a otimização da carteira com os parâmetros que estiverem selecionados.
  • Carteira de Variância Mínima – esta opção calcula a carteira de variância mínima global.

Finalmente, é necessário fazer alguns comentários e observações sobre as escolhas feitas na construção  da planilha:

  • As ações foram selecionadas entre as de maior volume. O número de ações (50) também representa uma escolha arbitrária. O leitor pode modificar a planilha para utilizar um número maior ou menor de ações.
  • A janela e frequência dos dados utilizados na estimação também representam uma escolha arbitrária. Outras escolhas são possíveis e podem levar a resultados diferentes.
  • Um grande número das ações escolhidas apresenta retorno negativo no período utilizada na planilha. Isto implica que algumas carteiras “otimizadas” podem apresentar retorno esperado negativo.
  • O otimizador do Excel (Solver) não é a melhor escolha para se realizar otimizações com um grande número de variáveis. Apesar de teoricamente ser possível expandir a planilha para um número arbitrário de ações, é improvável que os resultados obtidos com o Solver sejam confiáveis. Ao leitor interessado em realizar otimizações de maior escala, sugiro a utilização de um software como R (gratuito) ou Matlab.
  • Apesar de o exemplo utilizar apenas ações, a estrutura pode ser usada para otimizar carteiras com outras classes de ativos, desde que possa-se modelar os ativos através dos (log)retornos. Isto seria viável por exemplo com ETFs e moedas, por exemplo, mas não com títulos do governo.
  • A fronteira eficiente calculada é a fronteira no contexto de Markowitz. Caso o leitor queira introduzir um ativo livre de risco (que no caso brasileiro pode ser proxied pelo CDI, por exemplo), é possível construir uma nova fronteira eficiente, definida pela Reta de Alocação de Capital.
  • A estimativa da matriz de covariância utilizada na planilha é a covariância amostral. Em alguns casos, esta matriz pode não ser bem comportada. Neste caso outras alternativas (shrinkage, modelo de fatores) precisam ser utilizadas.
  • A planilha é oferecida gratuitamente aos leitores “no estado” e sem garantias de qualquer tipo. O uso desta planilha é de responsabilidade do leitor e, como sempre, vale o velho e bom disclaimer.

A planilha pode ser baixada na seção de Downloads ou diretamente neste link.
PlanilhaOtimizacao

Como obter cotações históricas e em tempo real no Matlab

O Yahoo! tem um site de finanças onde é possível, além de se obter várias informações sobre balanços de empresas, cotações etc, baixar as séries de preços históricos. O problema é que fazer isso no site é maçante quando o número de ativos é grande. Para quem usa Matlab, uma possibilidade interessante de se obter dados históricos de várias ações de uma só vez é escrever um script que se conecta ao servidor do Yahoo!.

Existem vários scripts disponíveis no site da Mathworks, enviados por usuários. Um dos pacotes permite baixar as séries históricas de uma lista de nomes, e retorna uma matriz consolidada com os preços em cada data. Aparentemente funciona no Excel também, porém nunca testei. Para quem deseja escrever os próprios scripts, faz sentido dar uma olhada neste outro pacote, no qual o primeiro é baseado.

Para buscar cotações em tempo real, pode-se conectar ao servidor da Google. Este script faz isso (outros scripts úteis no mesmo site).