Módulo 08 AdmTech · Aula 02 · 05/11/2026 · Semana 4 · Sprint 2

Material de apoio: Dados Financeiros, Do Preço ao Retorno

A Aula 01 deixou pronto o coletor parametrizado, com o Adj Close escolhido e a decisão de ausências registrada em ADR. Esta aula transforma esse preço em retornos diários, mede o risco de cada ativo, anualiza as duas métricas por 252 e compara a cesta com o CDI. É a base do A2, Módulo de Análise de Risco e Retorno Individual.

1. Preparação

O encontro abre medindo o preparo, com uma pergunta de Peer Instruction sobre o conteúdo desta seção. As três partes estão abaixo, e a trilha mínima diz por onde começar quando o tempo da semana não alcança todas.

Trilha mínima

PrioridadeItemTempoPara que serve no encontro
IndispensávelAutoestudo: Análise de uma ação em Python na prática45 minpreço, retorno e estatística descritiva em Python, o fluxo das duas práticas em dupla
IndispensávelAnimações 1 e 2 desta seçãosem duração declaradahistograma e caudas do Bloco 4 e raiz do tempo do Bloco 5
IndispensávelAutoverificação de cinco perguntas, sem notasem duração declaradamostra ao aluno o que rever antes do encontro
RecomendadoAutoestudo: Risco e retorno: passado e prólogo70 minbase conceitual de retorno, prêmio de risco e desvio padrão
AprofundamentoLeitura complementar: seção sobre prêmio de risco do autoestudo de risco e retornosem duração declaradadepois do encontro, relida com os números da cesta

A trilha indispensável soma 45 min de autoestudo, mais as duas animações e a autoverificação; com o autoestudo recomendado, a soma de autoestudo chega a 115 min. Os tempos dos autoestudos são os da Adalove, fixos. As animações e a autoverificação não têm duração declarada; pelo contrato de vídeo do acervo, cada animação tem até 60 segundos. Nesta semana não há Atividade Ponderada. O A2 é a entrega avaliada da Sprint 2 e fica fora do preparo.

Autoestudos da semana

  1. Risco e retorno: passado e prólogo (70 min)
  2. Análise de uma ação em Python na prática (45 min)

Os dois estão na Adalove. O primeiro é a base conceitual de retorno, prêmio de risco e desvio padrão; o segundo replica em Python o fluxo de preço, retorno, estatística descritiva e gráfico para um ativo.

Animação 1: o histograma dos retornos da PETR4 se formando

O que observar: os 1.907 retornos diários da PETR4 entram em ordem cronológica. Repare em que momento as barras coral de março de 2020 aparecem, para onde elas vão e como a curva normal do fim se compara com o que ficou além das linhas de 3 desvios.

Animação 2: a dispersão crescendo com a raiz do tempo

O que observar: cada ponto é o desvio do retorno acumulado do BOVA11 em um horizonte de 1 a 63 pregões. Compare os pontos com a curva tracejada, que multiplica o desvio de um pregão pela raiz do horizonte, e pense no que aconteceria se a multiplicação fosse pelo horizonte inteiro.

Autoverificação, sem nota

  1. Dois pregões seguidos rendem r1 e r2. O retorno dos dois juntos é r1 + r2?
    Resposta comentada

    Não. Os retornos simples compõem: (1 + r1) x (1 + r2) - 1. Quem soma no tempo é o retorno logarítmico, porque ln(1 + r1) + ln(1 + r2) = ln((1 + r1)(1 + r2)). Na crise de 2020, somar os 47 retornos simples da PETR4 dá -34,19%, e o acumulado de fato foi -40,92%.

  2. Na animação 1, onde caem os pregões de março de 2020?
    Resposta comentada

    Nas duas caudas. Março de 2020 tem as maiores quedas e também as maiores altas do período: 12 dos 26 pregões da PETR4 além de 3 desvios são desse mês.

  3. Uma distribuição normal com a mesma média e o mesmo desvio da PETR4 preveria quantos pregões além de 3 desvios? Quantos houve?
    Resposta comentada

    A normal preveria 5,1 pregões, e a PETR4 teve 26. As caudas reais são muito mais pesadas do que o desvio padrão sozinho sugere, e a pior queda, de -29,70%, fica a 12,06 desvios da média.

  4. Na animação 2, o desvio de 63 pregões do BOVA11 ficou perto de 63 vezes o desvio diário ou de raiz de 63 vezes?
    Resposta comentada

    De raiz de 63 vezes: 11,80% medido contra 11,80% previsto pela raiz. Multiplicar o desvio diário de 1,49% pelo horizonte inteiro daria um risco várias vezes maior do que o observado. É por isso que a volatilidade anual usa raiz de 252.

  5. O retorno que mede quanto rendeu quem reinvestiu todos os proventos sai de qual coluna, e com qual função do pandas?
    Resposta comentada

    Do Adj Close, a visão de preço escolhida na Aula 01, com pct_change. Calcular sobre o Close ignora os proventos; calcular sobre o preço negociado cria saltos falsos nos desdobramentos e grupamentos.

2. Retorno simples e retorno logarítmico

O retorno simples de um pregão é a variação percentual do preço. O retorno logarítmico é o logaritmo natural da razão entre os dois preços:

retorno simples       r = P_t / P_(t-1) - 1
retorno logarítmico   l = ln(P_t / P_(t-1)) = ln(1 + r)

Para qualquer movimento diferente de zero, ln(1 + r) fica abaixo de r. Em pregões calmos a diferença é desprezível; em movimentos grandes ela pesa. Na queda de 09/03/2020, a pior da cesta inteira na janela, o retorno simples da PETR4 é -29,70% e o logarítmico é -35,24%, 5,54 pontos abaixo. Na alta de 13/03/2020, os dois valem 22,22% e 20,07%.

CritérioRetorno simplesRetorno logarítmico
Vários pregões do mesmo ativocompõe pelo produto de (1 + r)soma direta
Vários ativos na mesma carteiramédia ponderada pelos pesossem soma ponderada exata
Uso no módulorisco e retorno da carteira de Markowitz (Aulas 03 e 04)acumular no tempo e a raiz do tempo (animação 2)

As duas medidas descrevem o mesmo pregão. A escolha depende da soma que a análise vai fazer: no tempo, o log soma; entre ativos de uma carteira, o simples soma ponderado pelos pesos. O A2 pode calcular as duas, desde que o ADR diga qual alimenta cada métrica.

3. A soma que erra de propósito

No Bloco 2 o deck soma os retornos simples da PETR4 entre 20/02/2020 e 30/04/2020 e compara com o acumulado do período. O erro é provocado de propósito.

47 pregões da PETR4, 20/02 a 30/04/2020Valor
Soma dos retornos simples-34,19%
Acumulado de fato, produto de (1 + r) menos 1-40,92%
Soma dos retornos logarítmicos-52,62%
ln(1 - 0,4092)-52,62%

A soma dos simples subestima a queda em 6,73 pontos. O motivo é a base de cálculo: cada retorno simples incide sobre o preço do pregão anterior. Na crise, quedas e altas fortes se alternaram, e uma alta que vem depois de uma queda incide sobre um preço já menor, recuperando menos reais do que a queda tirou. A soma trata cada percentual como se incidisse sobre o mesmo preço, e por isso enxerga uma recuperação que não aconteceu.

A soma dos logarítmicos acerta, mas acerta o log do acumulado: -52,62% é ln(1 - 0,4092). Para voltar ao retorno acumulado, aplica-se a exponencial: np.exp(soma_log) - 1. Confundir as duas escalas é o segundo erro mais comum desta aula, e aparece quando alguém reporta -52,62% ao parceiro como perda do período.

Por que provocar o erro em vez de só mostrar a conta certa: a soma de percentuais é o que qualquer pessoa faz de cabeça, e o resultado errado parece plausível. Só a comparação lado a lado, com o número do próprio dado, deixa claro que a diferença não é arredondamento.

4. Retornos em pandas sem preencher às escondidas

precos = ajustado.ffill()                                # decisão do ADR da Aula 01
simples = precos.pct_change(fill_method=None).iloc[1:]
log = np.log(precos / precos.shift(1)).iloc[1:]

O .iloc[1:] descarta a primeira linha, que não tem pregão anterior e sai vazia. O fill_method=None tem outro papel: em versões do pandas anteriores à 3.0, o padrão do pct_change era preencher ausências com o preço anterior antes de calcular. Isso aplicava, sem aviso, uma decisão de ausências que o grupo já tomou e registrou em ADR na Sprint 1. Declarar o argumento deixa o código com o mesmo resultado em qualquer versão, inclusive a do Colab.

Com o preenchimento ativo por ativo, a GOLD11 fica com 1.423 retornos e os demais ativos com 1.907: o fundo só tem cotação a partir de 11/12/2020, e o ADR da Aula 01 não inventa preço antes da estreia. Médias e desvios usam os retornos presentes de cada ativo.

5. Desvio padrão, histograma e caudas

O desvio padrão mede o quanto os retornos se afastam da média. É a medida de risco do autoestudo de risco e retorno e a que o otimizador das próximas sprints vai usar. Ele descreve bem o pregão típico e mal o pregão extremo.

PETR4, 1.907 retornos diáriosValor
Desvio padrão diário2,47%
Pior queda, 09/03/2020-29,70%
Distância da pior queda à média, em desvios12,06
Pregões além de 3 desvios26
O que a normal com a mesma média e desvio preveria5,1
Desses 26, em março de 202012
Curtose em excesso21,9

A curtose em excesso compara o peso das caudas com o da normal, que tem curtose em excesso zero. O valor de 21,9 confirma o que o histograma mostra: muitos pregões perto da média, poucos no meio do caminho e alguns muito longe. Dez das 15 piores quedas diárias da cesta, uma por ativo, caem em março de 2020.

Resposta à pergunta disparada do Bloco 4: o desvio padrão não diz qual foi a pior queda. Ele é uma média dos afastamentos ao quadrado, e um único pregão extremo some dentro de 1.907. Para falar de perda máxima, o A2 precisa mostrar o mínimo da série e o histograma, ao lado do desvio. A Aula 05 volta a esse ponto com o drawdown.

6. Anualização por 252 e raiz de 252

O ano da B3 tem cerca de 252 pregões, a convenção do mercado brasileiro. O retorno médio anual multiplica a média diária por 252. A volatilidade anual multiplica o desvio diário pela raiz de 252, que vale 15,87.

PETR4DiárioFatorAnual
Retorno médio0,1347%25233,94%
Volatilidade2,4727%raiz de 25239,25%
Erro comum: desvio vezes 2522,4727%252623,12%

Por que a raiz

Se os retornos de pregões diferentes são independentes, a variância da soma é a soma das variâncias. Um ano de 252 pregões tem 252 vezes a variância de um pregão, e o desvio, que é a raiz da variância, fica raiz de 252 vezes maior. A animação 2 mostra essa regra no BOVA11: em 21 pregões, 6,98% medido contra 6,81% previsto; em 63 pregões, 11,80% contra 11,80%.

Onde a regra perde precisão

Em horizontes mais longos, o desvio medido no BOVA11 fica abaixo do previsto: 12,68% contra 16,69% em 126 pregões, 15,70% contra 23,61% em 252. Dois motivos pesam. Sete anos e meio de amostra têm só sete janelas anuais sem sobreposição, então o desvio de 252 pregões é estimado com pouca informação. E a independência entre pregões é uma premissa: períodos de queda seguidos de recuperação, como 2020, reduzem a dispersão de longo prazo. A convenção da raiz de 252 continua sendo o padrão do mercado, e o ADR do grupo registra que é uma premissa.

Média anual e retorno composto

A média diária vezes 252 é uma média aritmética. O retorno logarítmico médio vezes 252 mede o crescimento composto, e fica abaixo dela, tanto mais quanto maior a volatilidade. Na PETR4, 33,94% contra 26,01%. Na MGLU3, a mais volátil da cesta, -9,45% contra -30,78%. O A2 deve dizer qual das duas está reportando.

7. Volatilidade em janela deslizante

A volatilidade da janela inteira resume sete anos e meio em um número. A janela deslizante recalcula o desvio anualizado a cada pregão, olhando para trás um número fixo de pregões.

vol_21 = simples["BOVA11"].rolling(21).std() * np.sqrt(252)
Pico em 2020BOVA11PETR4
21 pregões, um mês124,44% em 06/04/2020193,65% em 02/04/2020
63 pregões, um trimestre78,96% em 27/05/2020121,15% em 25/05/2020
252 pregões, um ano43,81% em 23/12/202067,97% em 23/12/2020
Janela inteira23,41%39,25%

A janela curta reage primeiro e sobe mais, porque um único mês de crise ocupa a janela inteira. A janela longa demora a subir e demora a descer: a crise de março de 2020 só sai da janela de 252 pregões em 2021. A escolha da janela é uma decisão de projeto, e entra em ADR quando o grupo usar volatilidade móvel no A2.

8. A cesta contra o CDI

O CDI é a referência de retorno sem risco do case. O arquivo cdi_diario.csv traz a taxa DI over em porcentagem ao dia, e o acumulado do período é o produto de (1 + taxa) em cada dia útil, menos 1:

cdi = ler_csv("cdi_diario.csv", index_col="data", parse_dates=["data"])["valor"] / 100
acumulado = (1 + cdi.loc[inicio:]).prod() - 1

Na janela inteira, o CDI acumulou 100,17%, ou 9,51% ao ano. A comparação justa usa o mesmo período de cada ativo: a GOLD11, que estreia em 11/12/2020, é comparada com os 84,04% do CDI desde essa data.

Nove dos 15 ativos renderam menos que o CDI no mesmo período: ABEV3, BBAS3, BBDC4, BOVA11, EGIE3, ITUB4, MGLU3, RENT3 e SUZB3. O BOVA11, que replica o Ibovespa, acumulou 98,84%. A PETR4 teve o maior retorno total, 616,00%, e a MGLU3, com a maior volatilidade, 65,41% ao ano, teve o menor, -90,26%. A volatilidade da MGLU3 é 3,3 vezes a da GOLD11, a menor da cesta.

A tabela não sustenta "quem oscila mais rende mais". Volatilidade mede a dispersão dos retornos, sem prometer retorno. A relação entre risco e prêmio de risco, do autoestudo, vale para carteiras diversificadas ao longo de muitos anos; sete anos e meio de uma ação individual podem contrariá-la, como a MGLU3 mostra.

9. O mínimo de covariância para o A2

O A2 pede matriz de correlação com heatmap e matriz de covariância anualizada, e a Aula 03, em 10/11/2026, é quem ensina esse conteúdo. A pendência P5 do plano de ensino registra o descompasso, em decisão com a coordenação. Até lá, este é o mínimo para a entrega de 06/11/2026:

covariancia_anual = simples.cov() * 252   # anualiza como a variância
correlacao = simples.corr()               # adimensional, não anualiza
  • A diagonal da covariância anual é a variância anual de cada ativo, o quadrado da volatilidade anual da seção 6.
  • A correlação vai de -1 a 1 e diz se dois ativos sobem e caem juntos, sem a escala de cada um.
  • O heatmap da seção 7 do notebook basta como visualização. A leitura dos pares que concentram e dos que diversificam é o assunto da Aula 03.

10. Depois do encontro

Desafio do notebook

Repetir as métricas anualizadas com a decisão de ausências invertida, descartando as datas com ausência na cesta inteira, e medir quanto a volatilidade de cada ativo muda. O resultado entra no ADR da anualização do grupo, com o número antes e depois. A seção 8 do notebook traz o ponto de partida.

Avanço do A2

  • SPEC.md com as interfaces do módulo de métricas e o plano de testes, com um caso usando os dados do grupo.
  • Histogramas por ativo com média e desvio destacados, e a leitura escrita comparando a cesta.
  • ADR da anualização por 252 e raiz de 252, com o impacto numérico.

O A2 vale 3 pontos. A review da Sprint 2 é em 06/11/2026, e a entrega vai até sexta, 06/11/2026, 23h59. As funções que o A2 entregar são importadas pelo motor de Monte Carlo do A3.

Leitura complementar

A seção sobre prêmio de risco do autoestudo de risco e retorno, relida com os números da cesta desta página. As demais fontes estão na página de referências.

Prof. José Romualdo · Módulo 08 AdmTech · Computação · 2026-2B-T19