Negociação quantitativa - página 34

 

Projeto de alto nível de um ambiente comercial local!


Projeto de alto nível de um ambiente comercial local!

Olá pessoal! Meu nome é Denis, e você está assistindo "Close to AlgoTrading".

Em nosso último vídeo, discutimos a estrutura comum de um sistema de negociação algorítmica. Hoje, quero criar um design simples de alto nível para um ambiente de negociação doméstico.

Vamos começar identificando o que esperamos do nosso ambiente. Queremos a capacidade de adicionar novas estratégias e fontes de dados no futuro. A escalabilidade é importante, pois atualmente focamos no mercado de ações, mas podemos nos aventurar na negociação de criptomoedas no futuro. Portanto, precisamos apoiar novos mercados. Além disso, queremos flexibilidade para alterar facilmente os componentes do sistema.

Agora, vamos dar uma olhada na estrutura geral do ambiente de negociação.

Os dois componentes principais são os dados e o sistema de negociação. Também queremos incluir uma interface de usuário para controlar o ambiente de forma eficaz. Como um bloco adicional, vamos considerar a incorporação de um sistema de simulação.

O componente de dados dirige todo o sistema. Inicialmente, planejamos usar dados de nosso corretor e arquivos no disco rígido. No entanto, podemos posteriormente decidir acessar diferentes bancos de dados e agências de notícias. Como queremos oferecer suporte a várias fontes de dados, precisamos acomodar diferentes drivers.

Os drivers fornecem funcionalidades simples, como ler e gravar dados, abrir ou fechar conexões e muito mais. No entanto, não queremos que nosso sistema de negociação interaja diretamente com a API dos drivers. Para resolver isso, introduzimos uma camada de manipuladores de dados.

Os manipuladores de dados trabalham diretamente com os drivers e implementam funcionalidades lógicas, como serialização de dados, desserialização e conversão para um formato especial. Embora tenhamos um conjunto de manipuladores de dados, ainda precisamos de uma interface unificada para nossa camada de aplicativo.

Para fornecer essas interfaces, apresentamos um Data Manager e um Order Manager. O Data Manager oferece uma interface comum para trabalhar com fontes de dados, enquanto o Order Manager fornece uma interface comum para execução de ordens. Ao utilizar ambas as interfaces, o sistema pode acessar várias fontes de dados e serviços de corretagem.

Aqui entra um aspecto importante. Definimos componentes que fornecem uma interface comum para acessar fontes de dados. Isso significa que, se nosso sistema de negociação quiser recuperar notícias, por exemplo, ele usará a mesma interface, independentemente de a fonte ser nossa corretora ou um banco de dados. Esse design garante que a interface permaneça inalterada quando alternamos os provedores de dados. Portanto, podemos adicionar novas fontes de dados ou alterar corretores sem interromper a funcionalidade do aplicativo.

Agora que projetamos a parte de manipulação de dados, vamos nos concentrar no principal usuário de nossos dados - o sistema de negociação. Se você assistiu ao meu vídeo anterior, está familiarizado com os cinco blocos do sistema de negociação: modelo alfa, modelo de risco, modelo de custo de transação, modelo de construção de portfólio e modelo de execução. Esses blocos utilizam o Gerenciador de Dados e o Gerenciador de Pedidos para acessar dados e serviços de corretagem.

Descrevemos os dados e os componentes do sistema de negociação, mas agora precisamos definir quem controlará tudo. Precisamos de um componente responsável por todo o sistema - um aplicativo básico. Este aplicativo irá lidar com a sequência de inicialização, inicialização de driver e componente e implementará a máquina de estado principal.

Depois de definir o aplicativo principal, precisamos considerar a interface do usuário. Pode ser uma interface de PC ou uma interface da Web, mas geralmente é uma boa prática separar o front-end do back-end. Para conseguir isso, criamos uma camada de comunicação entre a GUI e nosso aplicativo principal.

Além disso, precisamos incluir um componente logger. Este componente implementa a interface do logger e armazena logs em um banco de dados ou arquivo de log. Também podemos utilizar um sistema de monitoramento baseado na web para rastrear nosso ambiente, que pode acessar diretamente o servidor de banco de dados e ler os dados de lá. O aplicativo front-end pode usar o Data Manager para acessar dados e o Order Manager para interagir com os serviços do corretor.

Por último, não vamos esquecer a possibilidade de execução manual de ordens. Também podemos integrar essa funcionalidade ao sistema.

Embora não tenhamos nos aprofundado no ambiente de simulação neste vídeo, ele pode ser implementado de forma semelhante a um serviço de corretor adicional sem nenhuma alteração no sistema existente.

Olhando para o design do nosso ambiente de negociação, podemos dizer com confiança que ele nos permite atingir nossos objetivos. Dividimos nosso aplicativo em domínios separados e os conectamos por meio de camadas de interface. Os Gerenciadores de Dados e Pedidos fornecem interfaces comuns, simplificando o acesso aos recursos. Com esse design, podemos alterar facilmente os fornecedores ou corretores de dados e usar diferentes interfaces de usuário. Também podemos fazer alterações em partes específicas do sistema sem precisar atualizar todo o aplicativo.

Isso é tudo por hoje. Se eu perdi alguma coisa ou se você tem alguma opinião sobre este design, deixe seus comentários e não se esqueça de se inscrever neste canal. Vejo você no próximo vídeo!

 

Ambiente de negociação IB API - QT C++ - Flask - Modelo RL. Exemplo de trabalho completo.


Ambiente de negociação IB API - QT C++ - Flask - Modelo RL. Exemplo de trabalho completo.

Meu nome é Denis, e bem-vindo ao Close to Algo Trading. Hoje, tenho um vídeo especial onde demonstrarei como todos os componentes que discutimos nos episódios anteriores podem funcionar juntos na negociação real. Você pode encontrar todo o código-fonte no GitHub e experimentá-lo.

Para esta demonstração, usarei a API Interactive Brokers e meu antigo projeto chamado IBTrader. Comecei a trabalhar no IBTrader há muitos anos, mas nunca tive tempo de terminar. No entanto, estou pensando em renovar o projeto agora. Se você estiver interessado neste projeto especial, informe-me na seção de comentários deste vídeo. Então, vamos mergulhar no que vamos fazer neste vídeo. Começaremos com uma breve atualização e visão geral de nosso agente e ambiente de aprendizado por reforço. Em seguida, fornecerei uma rápida introdução à implantação do modelo com o Flask.

Como usaremos um aplicativo Qt para conectar ao broker, precisamos usar uma API REST para interagir com nosso modelo. No final do vídeo, veremos como todas essas partes funcionam juntas perfeitamente.

Antes de começar, recomendo assistir meus vídeos anteriores para entender melhor os conceitos discutidos aqui. Se você já viu esses vídeos, deve se lembrar de como criar um agente RL usando a biblioteca TF-Agent. Fiz algumas alterações no agente e no ambiente para esta demonstração. O agente ainda é DQN, como usamos antes, mas agora usaremos QNetwork em vez de QRnnNetwork. Da mesma forma, simplifiquei o ambiente. Em vez de usar vários dias de dados históricos, agora temos apenas a observação de preço do dia atual.

No entanto, confiar apenas na observação atual não é o ideal. Para resolver isso, transformaremos nossa observação de um dia para incluir três dias históricos. Podemos conseguir isso usando o wrapper de histórico do pacote de ambientes tf-agent e definindo o parâmetro history_length como 3. Agora, se verificarmos as observações do ambiente, descobriremos que temos três de nossas observações normais combinadas. Cada observação contém os dados OHLC (aberto, alto, baixo, fechado) juntamente com o volume.

Para garantir um intervalo consistente, realizei algumas transformações e agora nossos dados de entrada devem representar as alterações de porcentagem de preço de log. Finalmente, precisamos alimentar nosso modelo com três observações: o dia atual e os dois dias históricos. Também precisamos nos lembrar dos estados de posição dos últimos dias. Uma vez treinado o agente, teremos uma política que pode prever ações como comprar, vender, pular ou fechar posição. A política é implementada usando uma rede neural e podemos usar uma API direta para trabalhar com ela.

No entanto, e se não quisermos acoplar firmemente nosso aplicativo ao modelo de recomendação? Ou se nosso modelo for implementado em Python e quisermos usá-lo em diferentes aplicativos? Para resolver isso, podemos implantar nosso modelo como um pequeno serviço da Web usando o Flask. Flask é um micro framework web escrito em Python. Escolhi o Flask para este vídeo porque é simples e não requer muito tempo de configuração. Também nos permite usar JSON para transferir dados entre nosso aplicativo e o modelo.

Para depurar e implantar nosso aplicativo Flask, podemos usar um Dockerfile. A Microsoft tem um bom tutorial sobre como criar um Dockerfile, portanto, verifique o link na descrição para obter mais detalhes. Nosso aplicativo Flask terá uma rota chamada "predict", que manipulará solicitações POST contendo dados de entrada no formato JSON. A resposta também estará no formato JSON. Escreveremos o código para transformar os dados JSON e passá-los para o modelo de política para previsão.

Agora, vamos para a aplicação que se conecta à corretora, recebe os dados e envia as ordens para o servidor. Embora pudéssemos implementar nossa estratégia diretamente no aplicativo, para este exemplo, não faremos isso. Em vez disso, usaremos o aplicativo QtIBTrade, que está conectado ao corretor e se comunica com nosso modelo de seleção de estratégia e ação usando a API REST. QtIBTrade é um aplicativo baseado em Qt que criei há algum tempo para explorar negociação algorítmica usando C++. É multiplataforma e bem documentado.

No entanto, observe que o QtIBTrade ainda está em desenvolvimento porque não tive tempo suficiente para trabalhar nele. Se alguém estiver interessado em colaborar neste projeto, por favor me avise ou verifique o código no GitHub (link fornecido na descrição).

Agora, vamos ver como todos esses componentes funcionam juntos. Primeiro, precisamos iniciar nosso aplicativo Flask. Eu o iniciei no modo de depuração, então precisamos lembrar o número da porta e atualizá-lo em nosso aplicativo Qt. Em seguida, precisamos nos conectar ao aplicativo IB ou gateway. Antes de clicar no botão "Conectar", vamos verificar se a API está ativada e se temos a porta correta configurada.

Depois que tudo estiver configurado, podemos iniciar nosso aplicativo de teste, que usa nosso modelo. Como você pode ver, a cada cinco segundos, enviamos uma solicitação ao servidor com dados de preços diferentes. Cada vez que recebemos dados de preço do corretor, acionamos nosso modelo e recebemos a ação correspondente de volta.

Espero que você tenha achado esta demonstração interessante. Se sim, inscreva-se no canal para mais vídeos. Obrigado por assistir, e até o próximo vídeo!

 

Com que facilidade e simplicidade fazer backtest de uma carteira de ações


Com que facilidade e simplicidade fazer backtest de uma carteira de ações

Olá pessoal! Bem-vindo ao "Perto da AlgoTrading". Sou Denis e hoje quero compartilhar com vocês uma estrutura muito útil e simples que desenvolvi para testar diferentes portfólios. É baseado em uma ideia anterior que discuti em um dos meus vídeos anteriores.

Embora existam implementações mais poderosas disponíveis, como a fornecida pela quantconnect, acredito que é sempre bom ter uma solução local e simples que nos permita testar ideias sem depender de serviços adicionais.

O núcleo dessa estrutura é o Backtrader, uma estrutura Python para backtesting e negociação. Implementei uma estratégia genérica de reequilíbrio que usaremos, mas a estrutura foi projetada de forma a permitir testar diferentes ideias sem ter que mergulhar nas especificidades do Backtrader.

Vamos dar uma olhada mais de perto na estrutura e nos componentes dessa estrutura. A estratégia de reequilíbrio é o componente chave e segue uma estrutura específica. Primeiro, precisamos selecionar o conjunto de ativos com os quais trabalharemos. Para isso, temos um modelo que implementa um processo de seleção baseado em nosso universo, chamado de modelo de seleção. Depois de selecionar os ativos, eles são passados para o modelo alfa. O modelo alfa é o núcleo do nosso algoritmo e gera os sinais de negociação. Esses sinais são então usados para construir nosso portfólio.

O modelo de construção de portfólio pega os sinais gerados pelo modelo alfa e gera uma alocação de ativos. Essa alocação é um dicionário onde a chave é o ticker do ativo e o valor é o peso. Após a construção do portfólio inicial, passamos para a etapa de rebalanceamento. Aqui, podemos remover ativos antigos, adicionar novos ou ajustar a quantidade de ativos na carteira com base nos pesos definidos.

Em seguida, podemos querer verificar algumas condições de risco usando o modelo de risco. Esse modelo recebe a saída da etapa de rebalanceamento, faz as alterações necessárias e, em seguida, passa para o modelo de execução. O modelo de execução, por padrão, coloca ordens para comprar ou vender o número solicitado de ativos.

Se você der uma olhada no código da estratégia de reequilíbrio, verá a implementação de cada uma dessas etapas. Antes do modelo de seleção, chamo uma função que retorna um dataframe apenas com os preços de fechamento. Isso porque, para essa estratégia, precisamos apenas dos preços de fechamento.

Agora, vamos examinar brevemente a implementação dos modelos dentro da estrutura. O modelo de seleção é simples. Seu principal objetivo é descartar ativos com preços ausentes ou zero para garantir que todos os dados que usamos sejam válidos. O modelo alfa é uma estratégia de impulso genérica simples. Nesse caso, compramos ativos com maior impulso. Para o modelo de alocação, implementamos um modelo que atribui pesos iguais a todos os ativos.

Por fim, o modelo de rebalanceamento realiza um rebalanceamento simples com base nos pesos atribuídos. Depois de implementar todos os modelos, vamos ver como usá-los.

Primeiro, precisamos de alguns dados. Para este exemplo, vou usar a lista atual de tickers S&P 500 como nosso universo. Faremos o download dos dados históricos de preços de todas essas ações a partir de janeiro de 2007. Em seguida, preenchemos nossa configuração. Definimos a estrutura de nossa fonte de dados, especificando que usaremos apenas os preços de abertura e fechamento. O preço de abertura é necessário porque queremos abrir e fechar posições com base no preço de abertura do dia seguinte.

Também definimos nossa lista de ativos, ticker de referência, caixa inicial, negociação de opções em aberto e definimos um período de aquecimento para nosso algoritmo calcular o impulso com base no último ano. Em seguida, criamos nossa configuração de estratégia. Nesta configuração, definimos a opção rebalanceDay como 22, o que significa que reequilibraremos nosso portfólio uma vez por mês. Também temos um parâmetro de caixa de reserva para evitar erros de execução devido a fundos insuficientes.

Em seguida, definimos todos os nossos modelos e seus parâmetros. Antes de iniciar o backtest, precisamos atribuir dois conjuntos de dados à nossa configuração: um contendo os dados de todos os nossos ativos e outro contendo os dados de benchmark. Por fim, podemos chamar a função backtest e aguardar a geração do relatório. O relatório é gerado usando o pacote quantstats e fornece muitas informações úteis.

Você pode encontrar o código completo na minha página do GitHub. O link está na descrição.

Isso é tudo por hoje. Obrigado por assistir, e se você tiver quaisquer perguntas ou comentários, deixe-os abaixo. Não se esqueça de se inscrever no meu canal para mais conteúdo interessante.

 

Como Vencer o Mercado. Momentum e Otimização de Portfólio


Como Vencer o Mercado. Momentum e Otimização de Portfólio

Olá pessoal! Meu nome é Denis, e você está assistindo "Close to AlgoTrading".

Neste breve vídeo, exploraremos duas estratégias básicas de investimento de portfólio: Momentum of Return e Momentum como a diferença entre preço e tendência. Também veremos como os métodos de otimização de portfólio podem nos ajudar a melhorar nossos resultados de investimento.

Momentum é essencialmente a diferença entre dois preços tomados em um intervalo fixo. Representa a velocidade ou taxa de mudança. No contexto do mercado de ações, o momento pode ser expresso como retornos diários. A ideia por trás da estratégia de momentum é simples: se o preço aumentou no passado, é provável que continue aumentando no futuro. É conveniente expressar todos os mercados na mesma notação para facilitar as comparações.

Para o mercado de ações, o momento é frequentemente definido como a diferença entre o preço de hoje e um valor médio móvel correspondente. Quando o momento se torna maior, os preços estão se afastando da média móvel. Por outro lado, quando o momento se torna menor, a velocidade da mudança de preço diminui e os preços se aproximam ou até mesmo na direção negativa em relação à média móvel.

Para implementar esses dois tipos de impulso, já criei um modelo alfa. Isso nos permite testá-los com diferentes parâmetros.

Vamos calcular o momentum durante um período de um ano e selecionar as 10 principais ações com o maior momentum. Reequilibraremos nosso portfólio uma vez por mês e todos os ativos receberão alocações iguais. Agora, vamos copiar nossa configuração e definir outro tipo de momentum. Podemos adicionar essas configurações ao nosso teste e testá-las novamente no período de 2005 a 2015.

Você pode ver que ambas as estratégias exibem volatilidade e rebaixamento semelhantes e superam o investimento no índice. No entanto, é importante observar que aceitamos um pouco mais de risco em comparação com a manutenção do índice. Para reduzir o risco ao nível do índice, podemos tentar usar alguns métodos de otimização de portfólio. Em vez do modelo de alocação igual, usaremos um modelo que implementa vários métodos de otimização do pacote pyportfolioopt, que discuti em um vídeo anterior sobre otimização de portfólio.

Aqui, mostrarei como alterar nossa configuração para usar o modelo de alocação de otimização de portfólio. Vamos testar dois métodos bem conhecidos, CLA e HRP, bem como dois métodos mais específicos: Efficient CVaR (Conditional Value at Risk) e Efficient CDaR (Conditional Drawdown at Risk). Para obter informações mais detalhadas sobre esses métodos, consulte a documentação oficial. Lembre-se de que esses métodos de otimização podem levar algum tempo para serem executados, pois não são muito rápidos. Vamos esperar pacientemente até que o backtesting seja concluído.

Você pode observar que todos os métodos melhoram nossos resultados. Nossa estratégia de impulso inicial de retorno, que usa alocação com base no valor condicional no otimizador de risco, reduz o rebaixamento em quase 12%. A mesma estratégia, com o rebaixamento condicional no otimizador de risco, melhora nosso retorno em 3%. Vimos que a simples mudança do modelo de alocação pode melhorar significativamente nossos resultados. Existem muitas outras maneiras de aprimorar essa estratégia inicial. O mais importante é que a simples ideia de usar o momentum funciona e supera o mercado, e podemos implementá-la com apenas algumas etapas simples.

Isso é tudo por hoje. Vejo você no próximo vídeo!

 

Além do índice de Sharpe: revelando uma avaliação eficaz da estratégia de negociação


Além do índice de Sharpe: revelando uma avaliação eficaz da estratégia de negociação

Olá pessoal! Bem-vindo ao "Perto da AlgoTrading". Hoje, estamos mergulhando no excitante mundo da avaliação de estratégias de negociação. Descobriremos por que a proporção de Sharpe, embora popular, nem sempre pode ser a melhor ferramenta para o trabalho.

Neste vídeo, abordaremos quatro áreas principais. Primeiro, definiremos o índice de Sharpe e explicaremos sua fórmula. Em seguida, discutiremos as limitações do índice de Sharpe. Em terceiro lugar, apresentaremos os índices Sortino e Calmar como métricas alternativas. Por fim, compararemos duas estratégias de negociação hipotéticas usando todas essas métricas. Então, o que é o índice de Sharpe? Nomeado em homenagem ao Prêmio Nobel William F. Sharpe, ele mede o desempenho de um investimento em comparação com um ativo livre de risco após o ajuste de seu risco. Em outras palavras, o índice de Sharpe busca caracterizar o quanto o retorno de um ativo compensa o investidor pelo risco assumido.

A fórmula do índice de Sharpe é a seguinte: Índice de Sharpe = (Retorno esperado - Taxa livre de risco) / Desvio padrão.

Vamos considerar uma estratégia com retorno esperado de 8%, taxa livre de risco de 2% e desvio padrão de 15%. A proporção de Sharpe seria (8 - 2) / 15, que é aproximadamente 0,4. No entanto, o índice de Sharpe possui várias limitações que devemos considerar. Primeiro, assume que os retornos seguem uma distribuição normal, o que muitas vezes não é o caso de muitas estratégias de negociação que exibem distribuições não normais com retornos assimétricos ou de cauda gorda. Isso pode levar a resultados enganosos ao usar a proporção de Sharpe.

Em segundo lugar, o índice de Sharpe favorece estratégias que geram lucros pequenos e frequentes e assume que esses lucros podem ser aumentados proporcionalmente. Essa suposição pode não ser verdadeira para todos os tipos de estratégias, especialmente estratégias de negociação de alta frequência. Como resultado, as estratégias de negociação de alta frequência podem parecer mais bem-sucedidas quando avaliadas usando o índice de Sharpe. Em terceiro lugar, o índice de Sharpe não considera explicitamente o risco de cauda, que se refere à probabilidade de eventos extremos ou perdas significativas. Estratégias com maior risco de cauda podem não ser adequadamente refletidas no índice de Sharpe, potencialmente subestimando o risco associado a tais estratégias.

Dadas essas limitações, os traders geralmente recorrem a métricas alternativas, como o índice Sortino e o índice Calmar. Essas métricas fornecem informações adicionais e podem ajudar a superar algumas das limitações do índice de Sharpe. O índice Sortino mede o retorno ajustado ao risco de um investimento considerando apenas a volatilidade negativa. Ele se concentra no desvio dos retornos abaixo de um limite especificado, normalmente a taxa livre de risco. Este índice fornece uma avaliação mais específica do risco e se alinha com a preocupação comum dos investidores em relação aos riscos negativos.

Por outro lado, o índice Calmar avalia o retorno ajustado ao risco comparando a taxa de retorno média anual com o rebaixamento máximo. Essa proporção é particularmente útil para estratégias em que o rebaixamento máximo é um fator crítico. Destaca o retorno gerado em relação ao risco de sofrer perdas significativas. Ao considerar essas métricas alternativas, os traders obtêm uma perspectiva mais abrangente sobre as características de risco e retorno de suas estratégias de negociação. O índice Sortino se concentra na volatilidade negativa, enquanto o índice Calmar mede o retorno em relação ao rebaixamento máximo.

Agora, vamos comparar duas estratégias hipotéticas usando essas métricas. Vamos chamá-los de Estratégia A e Estratégia B. A Estratégia A tem um retorno anual de 15%, um desvio padrão de 10%, um desvio negativo de 7% e um rebaixamento máximo de -20%. Isso nos dá um índice de Sharpe de 1,3, um índice de Sortino de 1,86 e um índice de Calmar de 0,8. Por outro lado, a Estratégia B tem um retorno anual de 12%, um desvio padrão de 8%, um desvio negativo de 5% e um rebaixamento máximo de -15%. O índice Sharpe para a Estratégia B é 1,25, o índice Sortino é 2,0 e o índice Calmar é 0,8.

Como podemos ver, embora a Estratégia A tenha um retorno maior, a Estratégia B o supera quando levamos em consideração o desvio para baixo e o rebaixamento máximo, apresentando menor risco para o retorno. Portanto, a Estratégia B oferece mais retorno para cada unidade de risco, o que é uma consideração importante em qualquer decisão de investimento. A escolha entre o índice de Sharpe e métricas alternativas depende das características e objetivos específicos de sua estratégia de negociação. Aqui estão algumas recomendações para ajudá-lo a decidir quando focar no índice de Sharpe e quando considerar outras métricas:

Quando prestar mais atenção ao índice de Sharpe: O índice de Sharpe pode ser uma ferramenta valiosa ao avaliar estratégias que se enquadram em determinadas categorias. Por exemplo, se você tiver uma carteira de investimentos de longo prazo bem diversificada, focada em ativos tradicionais, como ações e títulos, o índice de Sharpe fornece uma medida adequada de desempenho ajustado ao risco. É particularmente relevante para estratégias com retornos relativamente estáveis, risco moderado e foco em retornos ajustados ao risco geral.

Quando considerar métricas alternativas: Por outro lado, métricas alternativas, como o índice Sortino e o índice Calmar, entram em jogo para estratégias que podem não estar de acordo com as suposições do índice Sharpe. Por exemplo, se você estiver envolvido em estratégias de negociação de alto risco, como negociação de opções, estratégias baseadas em alavancagem ou estratégias com posições concentradas, métricas alternativas se tornam mais valiosas. Essas estratégias geralmente exibem distribuições de retorno não normais, maior risco de cauda e podem exigir um foco no gerenciamento de risco negativo. O índice Sortino e o índice Calmar oferecem informações mais específicas sobre desempenho ajustado ao risco, risco de cauda e rebaixamentos, fornecendo uma melhor avaliação da viabilidade da estratégia nesses contextos.

Lembre-se de que nenhuma métrica pode capturar totalmente a complexidade e as nuances de uma estratégia de negociação. É essencial considerar uma combinação de métricas para obter uma compreensão abrangente de risco e retorno. Ao usar várias métricas, como índice de Sharpe, índice de Sortino e índice de Calmar, você pode avaliar os pontos fortes e fracos de sua estratégia de diferentes perspectivas, permitindo uma avaliação mais robusta e uma tomada de decisão informada.

Isso é tudo para o tutorial de hoje. Obrigado por se juntar a nós, e esperamos que você tenha achado este vídeo útil.

 

Simulação rápida de Monte Carlo para estimativa de redução máxima esperada (execute código python x2000 mais rápido)


Simulação rápida de Monte Carlo para estimativa de redução máxima esperada (execute código python x2000 mais rápido)

Sejam todos bem-vindos! Eu sou Denis, e você está assistindo CloseToalgotrading.

Neste vídeo, vamos nos aprofundar no processo de melhorar significativamente o desempenho de execução de um código Python, potencialmente em mais de mil vezes. Nosso objetivo não é apenas torná-lo interessante, mas também altamente útil. Para conseguir isso, empregaremos o exemplo da simulação de Monte Carlo para calcular um rebaixamento máximo esperado.

Para começar, vamos abordar a questão fundamental do que significa o rebaixamento máximo e como ele pode ser calculado. A redução máxima serve como um indicador do risco negativo durante um período especificado. Normalmente expresso em termos percentuais, é determinado usando a seguinte fórmula.

Embora a fórmula pareça promissora, podemos obter uma precisão ainda maior aplicando-a a dados reais. Vamos pegar o exemplo do SPY e definir o período de tempo para 100 dias. O gráfico mostra os preços de fechamento do SPY nesses 100 dias. Dois rebaixamentos são evidentes, com o segundo parecendo ser o máximo. Para calcular o rebaixamento, podemos realizar um cálculo simples. O preço mais alto atingiu cerca de 212,1 e o mais baixo foi de 204,4. Utilizando a fórmula mencionada anteriormente, podemos estimar o rebaixamento máximo em aproximadamente 3,6%.

No entanto, esse resultado carece de precisão devido às suposições feitas sobre o nível de preços. Para obter um cálculo mais preciso, utilizaremos uma função Python desenvolvida especificamente para esse fim. Uma implementação possível é a seguinte:

[Código Python para calcular o rebaixamento máximo]

Esta função calcula o rebaixamento máximo, resultando em um valor de 3,5%. O tempo de execução desta função é de aproximadamente 16,3 microssegundos, o que é respeitável. Mas podemos aprimorar ainda mais esse tempo sem recorrer a técnicas complexas e intrincadas? A resposta é um retumbante sim, e a medida mais simples para melhorar a execução é empregar o Numba.

Numba é um compilador JIT (Just-In-Time) de código aberto que traduz um subconjunto de código Python e NumPy em código de máquina altamente eficiente. Ao converter nosso código Python para Numba, podemos melhorar significativamente seu desempenho. No entanto, a implementação inicial de nossa função não funcionará com Numba porque ele não reconhece a função "acumular máximo". No entanto, podemos conceber um método alternativo para calcular o rebaixamento máximo sem usar esta função. O cálculo de rebaixamento modificado pode ser implementado da seguinte forma:

[Código Python para cálculo de rebaixamento modificado usando Numba]

Como você pode observar, adicionamos um decorador Numba acima da definição da função. Com essa implementação, o Numba não gera reclamações e o tempo de execução é reduzido para apenas 4,8 microssegundos. Isso representa uma melhoria de mais de três vezes em termos de velocidade. É bem simples, não é? Pessoalmente, prefiro essa implementação porque descreve o algoritmo de maneira direta.

Assim, podemos calcular com precisão o rebaixamento máximo, que é de 3,5%. Vamos nos referir a isso como o "rebaixamento máximo histórico". Com base nessa métrica de risco, podemos supor que, se as condições de mercado permanecerem inalteradas, nosso risco máximo será de apenas 3,5%. No entanto, levanta a questão de saber se podemos colocar nossa confiança apenas em um valor derivado de uma única observação específica. Não seria melhor ter mais algumas observações de situações semelhantes? Na verdade, seria benéfico, e é aqui que o método de Monte Carlo entra em ação.

Vamos tirar um momento para esclarecer o que o método de Monte Carlo envolve. Envolve a descrição de um processo por meio de um modelo matemático usando geradores de variáveis aleatórias. O modelo é então calculado repetidamente e as características probabilísticas do processo são derivadas com base nos dados adquiridos.

No nosso caso, o processo envolve uma série de retornos de ações, que simulamos usando o modelo Geometric Brown Motion (GBM). O modelo GBM assume que os retornos das ações seguem um processo estocástico de tempo contínuo e é amplamente utilizado em modelagem financeira. Ao simular retornos de ações usando GBM, podemos gerar vários cenários e calcular o rebaixamento máximo para cada cenário. Isso nos dará uma distribuição de rebaixamentos máximos, fornecendo uma estimativa mais robusta do risco de queda.

Para implementar a simulação de Monte Carlo, precisamos definir os parâmetros para o modelo GBM. Esses parâmetros incluem a taxa de desvio (μ), volatilidade (σ) e horizonte de tempo (T). Também especificaremos o número de execuções de simulação (N) e o número de passos de tempo (M) dentro de cada execução. Com esses parâmetros definidos, podemos prosseguir com a simulação.

Aqui está um exemplo de implementação da simulação de Monte Carlo para calcular o rebaixamento máximo esperado usando Python:

import numpy as np

def monte_carlo_max_drawdown(S0, mu, sigma, T, N, M):
    dt = T / M

    S = np.zeros((N, M+ 1 ))
    S[:, 0 ] = S0

     for i in range( 1 , M+ 1 ):
        epsilon = np.random.normal( 0 , 1 , N)
        S[:, i] = S[:, i- 1 ] * np. exp ((mu - 0.5 * sigma** 2 ) * dt + sigma * np. sqrt (dt) * epsilon)

    drawdowns = np.zeros(N)

     for i in range(N):
        peak = np.maximum.accumulate(S[i])
        drawdowns[i] = np.max((peak - S[i]) / peak)

    expected_max_drawdown = np.mean(drawdowns)

     return expected_max_drawdown

# Example usage
S0 = 100.0    # Initial stock price
mu = 0.05    # Drift rate
sigma = 0.2    # Volatility
T = 1.0    # Time horizon in years
N = 10000    # Number of simulation runs
M = 252    # Number of time steps (assuming 252 trading days in a year)

expected_max_drawdown = monte_carlo_max_drawdown(S0, mu, sigma, T, N, M)
print( "Expected Maximum Drawdown:" , expected_max_drawdown)

Neste exemplo, usamos o NumPy para lidar com operações de matriz com eficiência. Inicializamos um array S para armazenar os preços simulados das ações para cada execução e intervalo de tempo. Nós iteramos ao longo das etapas de tempo e simulamos as mudanças no preço das ações usando a fórmula GBM. Depois de simular todas as execuções, calculamos o rebaixamento para cada execução encontrando o valor máximo e subtraindo-o do preço atual. Finalmente, calculamos o rebaixamento máximo esperado tomando a média de todos os rebaixamentos.

Ao executar esta simulação de Monte Carlo, podemos estimar o rebaixamento máximo esperado com base em vários cenários simulados. Isso fornece uma compreensão mais abrangente do risco negativo em comparação com uma única observação de dados históricos.

Em conclusão, exploramos o conceito de rebaixamento máximo, seu cálculo usando dados históricos e a aplicação do método de Monte Carlo para estimar o rebaixamento máximo esperado. Também discutimos como melhorar o desempenho do cálculo de rebaixamento usando Numba. A incorporação dessas técnicas pode melhorar muito a eficiência e a precisão dos cálculos financeiros, capacitando traders e investidores com valiosas métricas de risco para a tomada de decisões.

Obrigado por assistir CloseToalgotrading! Espero que você tenha achado este vídeo informativo e útil. Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los abaixo. Fique atento para tópicos mais interessantes sobre negociação algorítmica e finanças quantitativas.

 

Otimização de portfólio para maximizar o Sharpe Ratio usando R Studio (CRAN)


Otimização de portfólio para maximizar o Sharpe Ratio usando R Studio (CRAN)

Olá amigos, bem-vindos ao Macro Sapiens. No tutorial de hoje, aprenderemos como otimizar um portfólio para maximizar o índice de Sharpe. O índice de Sharpe mede os retornos da carteira por unidade de risco assumida. Para fazer isso, usaremos as bibliotecas quantmod, PortfolioAnalytics, PerformanceAnalytics e NSE2R. A biblioteca quantmod nos ajudará a buscar dados do Yahoo Finance, o PortfolioAnalytics fornecerá a função de otimização, o PerformanceAnalytics ajudará na visualização e o NSE2R é uma biblioteca dedicada para a Bolsa de Valores Nacional da Índia.

Primeiro, definimos uma variável chamada "stock_names" para armazenar os nomes das ações. Usamos a biblioteca quantmod para buscar os dados do Yahoo Finance para os 50 símbolos de ações do índice Nifty 50 na Índia. Extraímos a coluna do símbolo e a armazenamos em uma nova variável chamada "símbolos".

Em seguida, precisamos especificar as datas de início e término dos dados que desejamos recuperar. Usamos a variável "since" para definir a data inicial como 1º de janeiro de 2018 e a data final como a data atual. Nós nos concentramos nos preços de fechamento ajustados, pois eles fornecem uma melhor representação do desempenho da ação e os armazenamos em uma variável chamada "prices_data".

Para calcular o retorno do portfólio, usamos a fórmula de retornos diários: (Preço de fechamento do dia 2 - Preço de fechamento do dia 1) / Preço de fechamento do dia 1. Modificamos a função para lidar com quaisquer valores ausentes (NAs) nos dados.

Em seguida, definimos os nomes das colunas do conjunto de dados de retorno do portfólio como "fundos". Isso será usado posteriormente no processo de otimização.

Agora, podemos iniciar o processo de otimização usando a biblioteca PortfolioAnalytics. Criamos um portfólio inicial e adicionamos restrições. Uma restrição garante que o peso total do portfólio seja igual a 1, e a outra restrição especifica que queremos um portfólio somente longo, o que significa que não há pesos negativos.

Acrescentamos a função objetivo, que é o retorno médio da carteira usando os preços_dados. Definimos o número máximo de iterações para o processo de otimização em 2.000.

Para calcular o índice de Sharpe, precisamos definir a taxa de retorno livre de risco. Neste caso, consideramos como 0%. Usamos a função da biblioteca PerformanceAnalytics para analisar os retornos da carteira e calcular o índice de Sharpe.

Criamos uma tabela para exibir os resultados, incluindo o retorno máximo da taxa de Sharpe obtido por meio da otimização aleatória e os retornos do otimizador de ROI. Traçamos a fronteira eficiente para visualizar os portfólios otimizados.

Além disso, comparamos os retornos do portfólio com os retornos do investimento no índice Nifty 50. Calculamos os retornos cumulativos para cada abordagem e os plotamos para analisar o desempenho.

Com base nos resultados, observamos que o método de otimização de portfólio aleatório fornece um índice de Sharpe e retornos cumulativos maiores em comparação com o otimizador de ROI e o índice Nifty 50.

Esses pesos otimizados podem ser usados para criar uma cesta de ações para investimento. Ao acompanhar o desempenho da cesta durante um período de tempo, os investidores podem tomar decisões informadas sobre o investimento nas ações selecionadas.

Esperamos que você tenha achado este tutorial útil. Se você tiver alguma dúvida, sinta-se à vontade para perguntar. Não se esqueça de curtir, compartilhar e se inscrever em nosso canal. Obrigado!

 

Taxa Spot vs. Taxas de Encaminhamento (Cálculos para Exames CFA® e FRM®)


Taxa Spot vs. Taxas de Encaminhamento (Cálculos para Exames CFA® e FRM®)

Bom dia a todos! Eu gostaria de apresentar o conceito de hoje para nossa discussão. Exploraremos o cálculo de taxas futuras a partir de taxas à vista, mas, em vez de usar a fórmula, empregaremos o método da linha do tempo. Essa abordagem eliminará a necessidade de memorizar fórmulas complexas e tornará o processo mais intuitivo.

Antes de nos aprofundarmos nos detalhes, vamos recapitular brevemente as definições de taxas a termo e à vista. A taxa à vista refere-se a qualquer taxa de juros disponível no mercado no momento. Representa a taxa na qual se pode investir por um período específico, como dois, três, quatro ou cinco anos a partir de hoje. A taxa à vista é uma taxa que pode ser investida, permitindo que os indivíduos obtenham retornos investindo no mercado.

Por outro lado, a taxa a prazo é uma taxa teórica muitas vezes referida como a taxa a prazo implícita. Representa a taxa de juros projetada entre dois períodos de tempo futuros. Por exemplo, podemos querer determinar a taxa entre o ano três e o ano quatro se estivermos atualmente no período zero. A taxa a termo é calculada com base nas taxas à vista atuais e serve como uma previsão da taxa de juros em um ponto futuro.

É importante observar que a taxa a termo não é uma taxa que pode ser investida, a menos que seja bloqueada usando um instrumento derivativo, como um contrato a termo ou contrato futuro. Até então, permanece uma taxa implícita, o que significa que pode ou não existir na realidade quando o período de tempo especificado chegar no futuro.

Para tornar a taxa a termo implícita passível de investimento, deve-se celebrar um contrato a termo. Isso garante que a taxa seja fixa e possa ser utilizada em transações financeiras no momento futuro designado.

Agora, vamos explorar o método da linha do tempo para calcular as taxas futuras. Primeiro examinaremos a fórmula, mas lembre-se de que o objetivo é deixar de depender de fórmulas e adotar o método da linha do tempo. Ao comparar as duas abordagens, você perceberá que o método da linha do tempo produz os mesmos resultados sem a necessidade de memorização de fórmulas.

A fórmula para calcular as taxas a prazo é a seguinte:

(1 + za)^a * (1 + ifr) = (1 + zb)^b

Nesta fórmula, "a" representa o vencimento mais curto, "b" denota o vencimento mais longo, "za" e "zb" referem-se às respectivas taxas à vista para os vencimentos mais curtos e mais longos, e "ifr" representa a taxa a termo implícita entre período de tempo "a" e "b".

Agora, vamos ilustrar um exemplo para solidificar nosso entendimento. Temos as seguintes taxas à vista: a taxa à vista de um ano é de 5% e a taxa à vista de dois anos é de 6%. Nosso objetivo é determinar a taxa a termo de um ano daqui a um ano.

Usando a fórmula, podemos substituir as taxas à vista fornecidas na equação:

(1 + 0,05)^1 * (1 + ifr) = (1 + 0,06)^2

Simplificando ainda mais, obtemos:

1,05 * (1 + ifr) = 1,1236

Agora, vamos explorar o método da linha do tempo para o mesmo cálculo. Desenhe uma linha do tempo com período de tempo zero, um e dois. Plote as taxas spot de acordo. Para a taxa à vista de dois anos, marque 6% de zero a dois. Para a taxa à vista de um ano, marque 5% de zero a um. Nosso objetivo é calcular a taxa futura de um ano daqui a um ano, denotada como "f".

Para determinar a taxa a termo implícita usando o método da linha do tempo, utilizamos o princípio de não arbitragem. Este princípio afirma que, independentemente da rota escolhida na linha do tempo, devemos terminar com o mesmo valor futuro. Nesse caso, podemos investir $ 1 por dois anos com juros de 6% ou investir $ 1 por um ano com juros de 5% e depois reinvestir esse valor por mais um ano à taxa futura "f".

Para calcular a taxa futura de um ano, começamos investindo $ 1 por um ano à taxa à vista de um ano de 5%. Esse investimento cresce para US$ 1,05 após um ano.

Agora, pegamos $ 1,05 e reinvestimos por mais um ano à taxa futura "f". O valor futuro desse investimento deve ser o mesmo que investir $ 1 por dois anos à taxa à vista de dois anos de 6%.

Vamos supor que a taxa a termo "f" seja x%. Podemos montar a equação da seguinte forma:

(1 + 0,05) * (1 + x%) = (1 + 0,06)^2

Simplificando ainda mais, temos:

1,05 * (1 + x%) = 1,1236

Dividindo ambos os lados por 1,05:

1 + x% = 1,1236 / 1,05

1 + x% = 1,07

x% = 1,07 - 1

x% = 0,07

Portanto, a taxa a termo de um ano daqui a um ano, denotada como "f", é de 7%.

Usando o método da linha do tempo, conseguimos calcular a taxa futura sem depender da fórmula. Essa abordagem fornece uma representação visual da linha do tempo e permite uma compreensão mais intuitiva da taxa de avanço implícita.

 

Sharpe Ratio, Treynor Ratio e Jensen's Alpha (Cálculos para exames CFA® e FRM®)


Sharpe Ratio, Treynor Ratio e Jensen's Alpha (Cálculos para exames CFA® e FRM®)

Senhoras e senhores, estendo minhas calorosas saudações a todos vocês. Hoje, vamos nos aprofundar em um tópico importante, ou seja, as várias medidas de desempenho do portfólio. Especificamente, exploraremos a proporção de Sharpe, a proporção de Treynor e o alfa de Jensen. Embora existam várias outras medidas de desempenho do portfólio, essas três são amplamente reconhecidas como fundamentais. Compreender a inter-relação entre essas medidas e seu significado prático é crucial, não apenas para seus próximos exames CFA ou FRM, mas também para sua aplicação na vida real. Esses conceitos permeiam todos os três níveis do currículo CFA, enfatizando sua importância ao longo de sua jornada de exame.

Vamos começar com o índice de Sharpe, que, até hoje, continua sendo o índice mais estimado no campo. Seu apelo reside em sua simplicidade, apesar de algumas limitações inerentes. No entanto, continua a ser o índice preferencial ao comparar fundos, como é comumente relatado por fundos de hedge e fundos mútuos. Da mesma forma, tanto o índice de Treynor quanto o alfa de Jensen são amplamente utilizados na indústria. Portanto, é essencial compreender esses conceitos, não apenas para seus exames, mas também por sua relevância prática.

O índice de Sharpe, formulado a seguir, merece nossa atenção:

Índice de Sharpe = (Retorno da carteira - Taxa livre de risco) / Desvio padrão da carteira

No numerador, "Retorno da carteira (rp)" representa o excesso de retorno sobre a taxa livre de risco (rf). Ao investir em uma carteira, espera-se retornos superiores à taxa livre de risco, pois assumir riscos implica em buscar maiores recompensas. Portanto, focamos no excesso de retorno, que significa o retorno obtido além da taxa livre de risco. No denominador, temos o desvio padrão, que serve como medida de risco. Aqui, é essencial observar que o desvio padrão contabiliza riscos diversificáveis e não diversificáveis. Os riscos diversificáveis podem ser eliminados através da diversificação, enquanto os riscos não diversificáveis persistem. Consequentemente, o índice de Sharpe avalia o excesso de retorno por unidade de risco total, combinando riscos sistemáticos e não sistemáticos.

É fundamental destacar que o valor do índice de Sharpe é mais relevante quando comparado aos índices de Sharpe de outras carteiras. Ele encontra significado ao avaliar portfólios em relação um ao outro. Na verdade, os profissionais do setor costumam se referir aos índices de Sharpe como "sustenidos". Por exemplo, os gerentes de portfólio podem dizer: "Estou retornando dois sustenidos" ou "três sustenidos", indicando seus respectivos índices de Sharpe.

Um índice de Sharpe mais alto é considerado favorável. Um índice mais alto indica a capacidade de uma carteira de gerar mais retorno para o mesmo nível de risco, tornando-a uma escolha preferível. Assim, ao selecionar uma carteira com base no índice de Sharpe, opte por aquela com o maior índice.

Agora, vamos voltar nossa atenção para a razão de Treynor, que tem uma notável semelhança com a razão de Sharpe em seu numerador, mas diverge em seu denominador. O índice Treynor mede o excesso de retorno por unidade de risco sistemático, denotado por beta. Beta representa o risco sistemático não diversificável inerente a um investimento. Essa medida mais restrita se concentra apenas no risco sistemático, ao contrário do escopo mais amplo do índice de Sharpe. Da mesma forma, o índice Treynor é mais valioso quando comparado aos índices de outros fundos comparáveis. Selecionar uma carteira com base no índice Treynor implica escolher aquele com o maior índice, pois um valor maior indica um maior excesso de retorno por unidade de risco sistemático.

Antes de explorarmos o alfa de Jensen, vamos rever o Capital Asset Pricing Model (CAPM). O CAPM nos auxilia a entender o alfa de Jensen, pois ajuda a determinar o retorno esperado ou retorno exigido de uma carteira. O CAPM calcula o retorno esperado começando com a taxa livre de risco e adicionando beta vezes o prêmio de risco de mercado (a diferença entre o retorno de mercado e o risco.

O alfa de Jensen, também conhecido como índice de desempenho de Jensen ou simplesmente alfa, é uma medida do excesso de retorno de uma carteira em comparação com seu retorno esperado com base no Capital Asset Pricing Model (CAPM). O CAPM relaciona o retorno esperado de um ativo ou portfólio ao seu beta, que representa o risco sistemático ou a sensibilidade aos movimentos do mercado.

O alfa de Jensen é calculado da seguinte forma:

Alfa de Jensen = Retorno do portfólio - [Taxa livre de risco + Beta × (Retorno do mercado - Taxa livre de risco)]

Nessa fórmula, o retorno do portfólio representa o retorno real obtido pelo portfólio, a taxa livre de risco é o retorno de um investimento sem risco, como um título do governo, o beta mede a sensibilidade do portfólio aos movimentos do mercado e o retorno do mercado é o retorno médio do mercado como um todo.

O alfa de Jensen indica se o portfólio superou ou não o retorno esperado com base no CAPM. Um alfa positivo sugere que o portfólio gerou retornos excessivos além do que seria esperado devido ao seu risco sistemático, enquanto um alfa negativo indica baixo desempenho. Portanto, investidores e gerentes de portfólio geralmente buscam alfas positivos ao avaliar o desempenho do investimento.

É importante observar que o alfa de Jensen considera apenas o risco sistemático e não contabiliza o risco total ou os riscos específicos associados ao portfólio. Como resultado, é recomendável usar o alfa de Jensen em conjunto com outras medidas de desempenho, como o índice de Sharpe e o índice de Treynor, para obter uma compreensão mais abrangente do desempenho de um portfólio.

Em resumo, o índice de Sharpe, o índice de Treynor e o alfa de Jensen são medidas valiosas para avaliar o desempenho do portfólio. O índice de Sharpe avalia o excesso de retorno por unidade de risco total, enquanto o índice de Treynor se concentra no excesso de retorno por unidade de risco sistemático. O alfa de Jensen compara o retorno real de uma carteira com seu retorno esperado com base no CAPM, considerando apenas o risco sistemático. Essas medidas fornecem diferentes perspectivas sobre o desempenho do portfólio e podem ser usadas em conjunto para tomar decisões de investimento informadas.

 

Covariância e correlação (cálculos para exames CFA® e FRM®)


Covariância e correlação (cálculos para exames CFA® e FRM®)

Olá a todos, vamos começar discutindo o conceito de covariância e correlação. O tópico de hoje pode ser confuso para muitas pessoas porque correlação é um termo comumente ouvido, enquanto covariância geralmente não é familiar quando se trata de cálculos. Além disso, tanto a covariância quanto a correlação destinam-se a medir a mesma coisa, o que pode ser confuso. Exploraremos por que temos duas medidas diferentes para o mesmo propósito e determinaremos quando usar a covariância e quando usar a correlação. Além disso, examinaremos como calcular a covariância e a correlação.

Antes de mergulhar na covariância, vamos revisar rapidamente como calcular a variância porque ela forma a base de nossa discussão. Uma vez que entendemos como calcular a variância, podemos prosseguir para a covariância e explorar a relação entre as duas medidas. Isso nos ajudará a entender a origem dessas medidas e sua relação com a correlação.

Agora, vamos considerar um exemplo para entender o cálculo da variância. Temos uma série de dados representando os retornos da carteira por cinco anos. Os retornos são dados em porcentagens para cada ano. Para calcular a variância, primeiro precisamos determinar a média ou média da série de dados. Somamos todos os retornos e dividimos a soma pelo número de observações, que neste caso é de cinco anos. Isso nos fornece a média da série de dados.

Em seguida, calculamos o desvio da média para cada observação. Subtraímos a média de cada valor de retorno. Isso nos dá o desvio da média para cada observação. Os desvios ao quadrado são então calculados ao quadrado de cada desvio. Somamos todos os desvios ao quadrado e dividimos o resultado pelo número de observações para obter a variância. Finalmente, tiramos a raiz quadrada da variância para encontrar o desvio padrão, que é uma medida relacionada.

É importante observar que, embora estejamos calculando a variância manualmente aqui, em cenários do mundo real ou exames como CFA ou FRM, esses cálculos geralmente são feitos usando funções integradas em calculadoras como a BA2 Plus ou BA2 Plus Professional.

Passando para a covariância, é uma medida do co-movimento ou relação entre duas séries de dados diferentes. Ao contrário da variância, que lida com uma única série de dados, a covariância nos permite examinar como duas séries de dados se movem juntas. Por exemplo, podemos usar a covariância para analisar o co-movimento entre um ETF e um índice de referência. A covariância positiva indica que as duas variáveis se movem na mesma direção, enquanto a covariância negativa sugere movimentos opostos. Uma covariância de zero indica nenhuma relação entre as variáveis.

Para calcular a covariância, subtraímos a média da primeira série de dados de cada observação dessa série e a multiplicamos pelo desvio da média da segunda série de dados. Repetimos esse processo para todas as observações, multiplicamos os desvios, somamos os resultados e dividimos pelo número de observações para obter a covariância.

Vale a pena notar que a covariância compartilha semelhanças com a variância, mas envolve duas séries de dados diferentes em vez de apenas uma. Na verdade, a variância pode ser considerada um caso especial de covariância em que as duas variáveis são idênticas.

No entanto, há uma limitação em usar apenas a covariância. Embora a covariância forneça informações sobre a relação entre duas variáveis, ela não fornece uma noção da magnitude da relação. Isso representa um desafio ao comparar relacionamentos entre diferentes séries de dados. É aqui que a correlação entra em jogo.

A correlação é uma versão padronizada da covariância. É calculado dividindo a covariância pelo produto dos desvios padrão das duas séries de dados. Esse processo de normalização nos permite comparar relacionamentos em uma escala padronizada, variando de -1 a +1. Uma correlação de +1 indica um relacionamento positivo perfeito, -1 representa um relacionamento negativo perfeito e 0 denota nenhum relacionamento.

Covariância e correlação são medidas que nos ajudam a entender a relação entre diferentes séries de dados. A covariância fornece uma indicação de co-movimento entre as variáveis, enquanto a correlação padroniza essa medida e facilita.

Razão: