Curva de juros Nelson-Siegel-Svensson com PSO+L-BFGS: uma alternativa open source à curva ANBIMA prefixada
Democratizando a estrutura a termo: acesso gratuito, rigor técnico e replicabilidade
Introdução e objetivo do projeto
Obter a curva de juros de títulos públicos brasileiros historicamente nem sempre é trivial – a ANBIMA disponibiliza as curvas oficiais apenas para os últimos 5 dias úteis, limitando análises de longo prazo a menos que se pague por serviços de dados ou obtenha uma autorização especial. O projeto PQ Rate Curve (clique para acessar) surge com o objetivo de suprir essas limitações, oferecendo uma forma aberta de estimar a estrutura a termo da taxa de juros (curva zero-cupom) de títulos públicos federais prefixados. Em vez de depender de provedores pagos ou assinaturas do ANBIMA Data, o sistema utiliza dados públicos do Banco Central (BACEN) para gerar curvas com bom ajuste e estáveis. A ideia é permitir a pesquisadores e analistas acesso completo à curva de juros histórica, preenchendo a lacuna de disponibilidade de dados.
Principais funcionalidades do projeto incluem:
Estimativa paramétrica da curva de juros usando o modelo Nelson-Siegel-Svensson (NSS) de 6 parâmetros.
Remoção automática de outliers (preços anômalos) nos títulos, combinando critérios estatísticos (MAD - Median Absolute Deviation) e de liquidez.
Otimização híbrida PSO + L-BFGS para calibrar os parâmetros da curva com alta precisão (Particle Swarm Optimization - PSO para busca global e Levenberg-Marquardt para refinamento local).
Continuidade temporal: penalização de mudanças bruscas dia a dia, produzindo curvas suaves ao longo do tempo.
Validação cruzada walk-forward para escolha de hiperparâmetros ótimos, testando a robustez do modelo em diversos cenários econômicos.
Em resumo, o projeto visa democratizar o acesso a uma curva de juros de referência, sem as restrições da ANBIMA, e com rigor técnico comparável, servindo como uma alternativa open source para analistas de finanças quantitativas.
Diferenças entre os dados ANBIMA e a metodologia proposta
A curva de juros da ANBIMA (conhecida como “estrutura a termo” oficial) é obtida via um processo de coleta de taxas junto a instituições financeiras formadoras de mercado. Essas instituições fornecem cotações de compra e venda indicativas para diversos vencimentos, e a ANBIMA consolida tais informações em uma curva zero-cupom diária de referência. Uma consequência desse processo é que a curva oficial está disponível apenas recententemente (últimos dias) ao público, e geralmente representa um consenso de mercado (mesmo se determinados títulos não tiverem negociado naquele dia, ainda assim há uma cotação estimada).
Já a metodologia do projeto PQ Rate Curve utiliza dados de negociações efetivas de títulos públicos, disponibilizados pelo BACEN (DEMAB). Em outras palavras, a curva é ajustada a partir de preços médios de negociação e volumes de títulos (ex.: LTN e NTN-F) registrados em cada dia. Isso traz algumas diferenças importantes em relação à curva ANBIMA:
Origem dos dados: A ANBIMA baseia-se em taxas indicativas fornecidas por dealers, enquanto o projeto utiliza preços de transações reais. Assim, a curva resultante reflete efetivamente o mercado secundário observado, sujeita às imperfeições ou lacunas de negociação (e por isso adota remoção de outliers de preços muito desviantes).
Cobertura de vencimentos: Por depender de negociações realizadas, pode haver dias em que nenhum título de prazo muito longo (por exemplo 10+ anos) tenha sido negociado. Nesses casos, o projeto recorre a mecanismos de continuidade para preencher a informação de longo prazo. A ANBIMA, por sua vez, é suportada pelas cotações indicativas mesmo na ausência de negócios.
Metodologia de ajuste: A ANBIMA não divulga abertamente todos os detalhes de seu modelo, mas sabe-se que utiliza modelos matemáticos para extrair a curva zero-cupom garantindo certa suavidade. Já o PQ Rate Curve busca replicar a lógica básica de precificação (preço = valor presente de fluxos) com critérios inspirados na prática da ANBIMA – por exemplo, os erros de precificação de cada título são ponderados de acordo com sua duration, um peso que atribui menor influência a títulos de prazo longo.
Em termos de resultado final, espera-se que ambas as abordagens produzam curvas próximas na maioria dos dias (dado que se baseiam nos mesmos princípios financeiros). No entanto, pequenas discrepâncias podem ocorrer devido às diferenças de dados de entrada e detalhes do ajuste. O importante é que, com este projeto, analistas podem obter curvas históricas completas sem custo, permitindo estudos e backtests antes inviabilizados pela falta de dados abertos.
Aplicações da curva NSS e limitações de uso
Uma curva de juros ajustada via modelo Nelson-Siegel-Svensson traz diversas aplicações úteis no contexto de finanças quantitativas e gestão de renda fixa:
Marcação a mercado de títulos públicos: Ao extrair a curva zero-cupom, é possível precificar qualquer título (ou fluxo de caixa) de forma consistente. Instituições podem usar a curva estimada como referência para valorar suas carteiras de títulos prefixados diariamente.
Análises de política monetária e expectativas: Os parâmetros da curva (especialmente a estrutura a termo de taxas de juros) permitem inferir expectativas de juros futuros e prêmio de term structure. Por exemplo, o nível da curva de longo prazo reflete a expectativa de juros neutros/inflacionários, enquanto a inclinação indica expectativas de aperto ou afrouxamento monetário no curto prazo.
Gestão de riscos e ALM: A curva fornece insumos para medir duração e sensibilidade a taxa de juros de ativos e passivos. Bancos e gestores podem simular cenários de choque de curva de juros usando o modelo para avaliar impactos no valor de seus portfólios.
Precificação de novos títulos e derivativos: Em emissões do Tesouro ou criação de títulos sintéticos, a curva serve de base para precificar corretamente um novo papel de determinado vencimento (interpolando onde não há um título exatamente igual). Também é base para derivativos de taxa de juros (swaps, futuros), embora nesses casos geralmente combinada com modelos de arbitragem.
Entretanto, há limitações importantes a se considerar – casos em que a abordagem NSS paramétrica não é adequada ou exige cautela:
Estratégias de trading de curto prazo: A curva ajustada é geralmente uma média diária, suavizada e focada no equilíbrio geral do mercado. Para fazer trading ou arbitragem de curto prazo, essa suavização pode esconder oportunidades ou riscos idiossincráticos. Por exemplo, se um determinado título está precificado abaixo do valor teórico da curva (sinalizando possível arbitragem), pode ser devido a fatores de liquidez ou crédito específicos, e não necessariamente um mispricing certo de explorar. Traders profissionais preferem usar as cotações de mercado em tempo real e spreads entre títulos específicos, em vez de confiar em uma curva ajustada ex-post. Em suma, a curva NSS não deve ser utilizada diretamente como ferramenta de trading intradiário, pois não capta movimentos micro de mercado.
Precificação com arbitragem livre (derivativos): O modelo Nelson-Siegel-Svensson, sendo paramétrico e ajustado via mínimos quadrados, não garante aderência perfeita à condição de não-arbitragem entre diversos pontos da curva. Em aplicações como precificação de swaps, futuros de DI ou estruturados, é preferível construir a curva por métodos de bootstrap usando os instrumentos líquidos (por exemplo, combinando títulos curtos, contratos futuros de DI para médios prazos, e títulos longos) e interpolando taxas de forma que a estrutura a termo resultante seja monotonicamente crescente em termos de fator de desconto (assegurando ausência de arbitragem). Abordagens spline monotônicas ou modelos como HJM e CIR calibrados podem ser alternativas nesses casos. Ou seja, para precificar derivativos ou realizar hedge de forma consistente, um modelo paramétrico simples pode falhar – a abordagem correta envolve construção de curva forward day-by-day alinhada aos preços dos instrumentos base (bond stripping).
Curvas de inflação implícita e outros segmentos: O escopo do projeto atual foca em títulos prefixados (curva nominal de juros). Se o interesse for, por exemplo, extrair a inflação implícita (diferença entre curva nominal e curva atrelada à inflação, como dos títulos IPCA+), ou curvas de crédito privado, o modelo precisaria ser adaptado ou ampliado. A metodologia NSS pode até ser empregada nesses contextos, mas precisaria de dados e tratamentos adicionais (e possivelmente parâmetros iniciais distintos). Para alguns casos, modelos específicos ou técnicas diferentes podem ser mais acuradas.
Em resumo, a curva ajustada por este projeto é muito útil para análises de médio-longo prazo, pesquisa e suporte à tomada de decisão em renda fixa, mas não substitui modelos orientados a arbitragem ou dados de alta frequência quando o objetivo é negociação ativa ou precificação exata de derivativos. Para esses casos, deve-se optar por metodologias complementares conforme descrito (bootstrap de curva, uso de inputs de mercado ao vivo, etc.).
Modelo Nelson-Siegel-Svensson (NSS)
O coração do sistema é o modelo Nelson-Siegel-Svensson (NSS), uma parametrização consagrada para curvas de juros. Esse modelo descreve a taxa de juros spot em função do prazo (τ, em anos) através de 6 parâmetros (β₀, β₁, β₂, β₃, τ₁, τ₂):
Cada parâmetro tem uma interpretação econômica intuitiva, o que explica a popularidade do modelo entre praticantes:
β₀ – nível (level): corresponde ao patamar de longo prazo da curva de juros. É aproximadamente a taxa de juros para vencimentos muito longos (tende a β₀ quando τ → ∞). Captura o componente “permanente” da curva, relacionado a expectativas de inflação de longo prazo e prêmio de prazo constante.
β₁ – inclinação (slope): influencia principalmente os vencimentos curtos. No modelo Nelson-Siegel original, β₁ + β₀ dá a taxa instantânea no prazo zero (yield de prazo tendendo a 0). Assim, β₁ afeta a inclinação inicial da curva – valores negativos de β₁ geram curva ascendente (juros curtos menores que longos), enquanto valores positivos poderiam inverter a curva no curtíssimo prazo (pouco comum). Em termos econômicos, está ligado à postura de política monetária de curto prazo e ao prêmio de liquidez nos vértices mais curtos.
β₂ – curvatura 1 (curvature): gera um “ombro” ou curvatura na parte média da curva de juros. Esse parâmetro produz um efeito transitório (sobe e desce) com pico em torno de um certo prazo (dependente de τ₁). Normalmente, β₂ captura a presença de uma “barriga” na curva – por exemplo, taxas médias que desviam da linha entre curto e longo prazo, refletindo expectativas de médio prazo ou efeitos cíclicos. Valor positivo de β₂ forma uma concavidade (curva em formato de colina) enquanto negativo faria o oposto.
β₃ – curvatura 2 (curvature/hump): é um segundo fator de curvatura introduzido na extensão Svensson do modelo. Permite flexibilidade extra para a curva apresentar duas inflexões ou acomodar formatos mais complexos. atua similarmente a β₂, mas em um horizonte diferente determinado por τ₂. Em muitos casos práticos, β₃ captura um segundo “gomo” na parte longa da curva (por exemplo, a curva pode subir, descer e subir novamente levemente em prazos muito longos, algo que 3 parâmetros não permitiriam).
τ₁, τ₂ – Parâmetros de decaimento (decay): controlam a velocidade com que os efeitos de β₁, β₂ e β₃ se dissipam conforme aumenta o prazo. Em termos simples, definem aproximadamente a posição dos picos de curvatura gerados por β₂ e β₃. Valores menores de τ trazem a curvatura mais para prazos curtos; valores maiores empurram a curvatura para prazos longos. Esses parâmetros não têm um significado econômico direto isoladamente, mas ajudam a ajustar o modelo aos dados observados – por exemplo, τ₁ costuma estar na ordem de 1–2 anos para posicionar a primeira curvatura na parte curta/média, enquanto τ₂ pode ser maior (5–10 anos) para posicionar a segunda curvatura mais à frente.
A ANBIMA utiliza conceito similar de nível, inclinação e curvatura em suas divulgações, embora a nomenclatura interna possa diferir ligeiramente. Muitas vezes faz-se referência a “fator de nível”, “fator de inclinação” e “fator(es) de curvatura” para descrever a contribuição de cada componente na forma da curva. O importante é que, conceitualmente, tanto o modelo aberto aqui quanto o modelo ANBIMA partilham dessa interpretação – a curva de juros é decomposta em um fator praticamente constante (nível de longo prazo), um fator que diferencia o curto do longo prazo (inclinação) e fatores que criam formatos côncavos (curvatura intermediária). Essa decomposição facilita analisar mudanças na curva: por exemplo, em uma alta repentina de juros curtos pelo Banco Central, espera-se β₁ (inclinação) aumentar em magnitude negativa, refletindo uma curva mais inclinada para cima no curto prazo, enquanto β₀ (nível longo) pode permanecer estável se expectativas de longo prazo não mudaram.
Metodologia de otimização híbrida (PSO + L-BFGS)
A calibração dos parâmetros (β₀, β₁, β₂, β₃, τ₁, τ₂) é realizada através de um esquema híbrido de otimização em duas etapas:
PSO – Particle Swarm Optimization: primeiro, o algoritmo aplica otimização por enxame de partículas para explorar o espaço de parâmetros globalmente. O PSO simula a dinâmica de um “enxame” de partículas (possíveis soluções) que se movem no espaço de soluções orientadas por sua melhor posição individual e pela melhor posição global encontrada. Isso evita ficar preso em mínimos locais e dá uma solução inicial robusta. Os hiperparâmetros do PSO incluem:
N (número de partículas no enxame) – por exemplo, 80 partículas explorando simultaneamente.
C1 (aceleração cognitiva) – controla o quanto cada partícula tende a voltar à sua melhor posição individual anterior (exploração individual).
C2 (aceleração social) – controla o quanto cada partícula tende a ir em direção à melhor posição global do grupo (cooperação).
ω (peso de inércia) – define a tendência de manter a velocidade anterior da partícula; valores maiores favorecem exploração e menores favorecem convergência.
f_calls_limit (limite de avaliações da função) – número máximo de iterações/avaliações de custo para o PSO executar (por exemplo 1500 avaliações).
No contexto deste projeto, o PSO rapidamente encontra uma região promissora no espaço dos parâmetros NSS minimizando o erro de precificação dos títulos. É configurado para algumas centenas ou milhares de avaliações, equilibrando tempo de computação e qualidade da solução.
L-BFGS – Limited-memory BFGS: em seguida, a solução do PSO é refinada usando o L-BFGS, um método quasi-Newton para otimização não linear suave em larga escala. O L-BFGS realiza uma busca local determinística com line search, atualizando iterativamente uma aproximação de baixa memória da inversa do Hessiano a partir dos pares (sk,yk) (deslocamentos e variações de gradiente). Assim, obtém direções do tipo Newton usando apenas derivadas de primeira ordem. Partindo dos parâmetros sugeridos pelo PSO, o L-BFGS itera até convergir (ou até atingir o critério de parada), reduzindo ainda mais a função objetivo. Essa etapa aumenta a precisão do ajuste e a estabilidade numérica sem exigir o Hessiano completo, compensando a natureza estocástica do PSO com uma finalização eficiente.
Função de custo e tratamento de outliers
A função objetivo que o algoritmo minimiza reflete o compromisso entre ajustar bem os preços dos títulos no dia e cumprir os requisitos de realismo (ancoragem e suavidade). Em termos simplificados, o custo total a minimizar para cada dia é composto de:
Erro de precificação dos títulos (ponderado): a métrica base é o erro quadrático entre o preço teórico do título (calculado pelos fluxos de caixa descontados pela curva NSS candidata) e seu preço de mercado observado. Cada título i tem um peso definido como
\(w_i = \frac{1}{\sqrt{Duração_i}}\)Essa ponderação (inspirada na metodologia ANBIMA) dá menor peso relativo a títulos de vencimento longo – intuitivamente, títulos longos têm preços muito sensíveis à taxa e tendem a ter errors absolutos maiores, então a raiz da duração equaliza em parte a contribuição de erros ao longo da curva. O output desse termo de custo é essencialmente um erro quadrático ponderado dos preços.
Penalidade SELIC (curto prazo): um termo adicional que é zero quando r(1) = Taxa SELIC e cresce com o quadrado do desvio entre a taxa de 1 dia do modelo e a taxa Selic do dia. Com um coeficiente multiplicador alto, esse termo garante que a solução ótima praticamente sempre respeite a ancoragem no overnight. Contribui muito pouco ao custo (idealmente zero) se o ajuste estiver correto, ou um valor enorme se o modelo tentar gerar uma taxa curta inconsistente.
Penalidade de continuidade temporal: presente apenas se usamos os parâmetros do dia anterior como referência. Neste caso, calcula-se para alguns prazos (vértices) ao longo da curva a diferença entre a taxa calculada pelo modelo hoje e a taxa que o modelo de ontem projetava para hoje (ou diretamente a diferença entre parâmetros, equivalentemente), elevando ao quadrado e somando. Multiplica-se pela constante λ. Essa penalização atua como um regularizador que desacelera mudanças de parâmetros, a menos que os dados de mercado claramente indiquem a necessidade de grande reajuste.
Assim, a função objetivo final C pode ser entendida como:
Remoção de outliers: Antes (e durante) o ajuste, o projeto implementa uma rotina de identificação de outliers nos dados de títulos. Mesmo com ponderação por duração, preços muito desalinhados podem distorcer o fit. Utilizam-se dois critérios simultâneos para definir um outlier:
O erro absoluto de preço do título (diferença entre preço teórico atual e preço de mercado) excede um múltiplo do desvio absoluto mediano (MAD) dos erros de todos os títulos. Tipicamente, se o erro > 3 vezes o MAD, considera-se um erro exorbitante. Isso identifica pontos que estão muito fora da tendência dos demais.
A quantidade negociada daquele título no dia é muito baixa, inferior a uma fração (por exemplo 1%–5%) do volume total negociado no dia. Esse critério de liquidez visa pegar casos onde um preço estranho ocorreu em negócio isolado e pequeno, não refletindo preço de mercado de fato.
Somente se ambas condições se verificam para um título, ele é marcado como outlier e removido do conjunto de calibração. Essa dupla exigência evita eliminar títulos importantes (por exemplo, um título de volume alto que desviou um pouco não será descartado injustamente). O processo de detecção e remoção de outliers ocorre de forma iterativa: ajusta-se a curva preliminarmente, calcula erros e MAD, remove outliers detectados, recalibra com os restantes, e repete até não sobrar mais outlier ou atingir um limite de iterações. Em geral, converge em poucas iterações, entregando no final parâmetros ajustados sobre dados limpos e registrando quantos e quais títulos foram excluídos como discrepantes.
Este cuidado torna a curva resultante mais robusta e representativa. Na prática de mercado, é comum ignorar negociações muito esparsas ou preços fora do padrão (que podem ser erro de registro ou liquidez pontual). A metodologia alinha-se com isso automaticamente, sem intervenção manual.
Validação cruzada e escolha de hiperparâmetros
Para assegurar que os hiperparâmetros do modelo (parâmetros do PSO, o uso ou não do L-BFGS, peso de penalidade temporal, critérios de outlier etc.) fossem bem ajustados, o projeto realizou uma extensa validação cruzada do tipo walk-forward ao longo de vários regimes econômicos. Em resumo, a validação procedeu da seguinte forma:
Foram definidos períodos representativos entre 2015 e 2024 cobrindo diferentes cenários: por exemplo, a crise de 2015 (stress fiscal no Brasil), recessão de 2016, período de juros mínimos históricos 2019, choque da pandemia em 2020, retomada inflacionária 2021-2022 etc.. Esses recortes garantem testar o modelo em condições de mercado distintas – desde curvas muito inclinadas e voláteis até curvas mais estáveis e de baixa taxa.
Em cada regime, aplicou-se uma validação walk-forward contínua: isto é, dividiu-se o período em janelas deslizantes de treino e teste (por exemplo, calibrando o modelo em 30 dias e testando em seguida nos próximos 30 dias, em sequência). A cada janela, calculou-se métricas de performance fora-da-amostra. Esse procedimento reflete a situação real de usar parâmetros fixos para calibrar a curva ao longo do tempo sem recalibrá-los constantemente.
Uma otimização bayesiana de hiperparâmetros foi realizada sobre essas janelas: o algoritmo testou configurações diferentes (variações de N, C1, C2, ω, penalidade temporal, ativação do L-BFGS etc.), comparando os resultados em termos de erro médio de precificação out-of-sample. O objetivo foi achar a configuração que minimizasse o erro fora-da-amostra ao longo de todos os regimes – em outras palavras, uma configuração geral robusta. Durante esse processo, também comparou-se explicitamente o desempenho de usar apenas PSO versus PSO+L-BFGS, para quantificar o ganho da etapa de refinamento.
As métricas avaliadas incluiram: o custo médio fora-da-amostra (erro quadrático médio em preços no período de teste, medindo acurácia), um índice de sobreajuste (overfitting ratio) comparando erro de treino vs teste (para verificar se alguma configuração ajustava demais os dados de treino em detrimento de generalização) e medidas de estabilidade dos vértices da curva (variação dia-a-dia dos principais pontos da curva, para capturar se a configuração tornava a curva mais “nervosa” ou suave). Esse conjunto de métricas garantiu uma visão abrangente da qualidade do modelo sob diferentes perspectivas.
Como resultado da validação cruzada, obteve-se um conjunto de hiperparâmetros ótimos gravado em arquivo de configuração (optimal_config.toml
). De forma geral, a configuração escolhida favorece o uso do PSO com um enxame relativamente grande (dezenas de partículas), seguido do refinamento L-BFGS ativado, uma penalidade de continuidade temporal leve porém presente (evitando saltos desnecessários), e critérios de outlier relativamente tolerantes (um limiar de MAD alto, para remover apenas casos muito extremos, e ~1.5% do volume diário como filtro de liquidez). Essa configuração mostrou-se estável através dos regimes testados – ou seja, não foi algo calibrado apenas para um período específico, mas sim uma solução que funcionou bem em diferentes condições de mercado.
Em suma, a abordagem de validação garantiu que o modelo final não estivesse superajustado a um único conjunto de condições, mas sim apto a produzir curvas confiáveis em qualquer cenário (dentro do razoável) que o mercado brasileiro apresentou na última década. Para o usuário final, isso significa que a ferramenta já vem calibrada de forma inteligente, estando pronta para uso imediato sem necessidade de ajustar parâmetros "na mão". Ainda assim, todas as opções permanecem configuráveis, caso um analista queira testar configurações próprias ou adaptar a metodologia a novos contextos.
Resultados e visualização da curva
Para se ter uma ideia, segue o comportamento da curva no ano de 2024. Nas seções a seguir estão as instruções para o uso do modelo.
Como usar o modelo na prática
O projeto foi desenvolvido em Julia e disponibiliza scripts fáceis de usar, seguindo um fluxo típico em três passos:
Validação de hiperparâmetros (opcional, pré-treinamento): Para replicar o processo de busca dos melhores hiperparâmetros (que já acompanha uma configuração ótima por padrão), pode-se executar o script de validação cruzada:
julia run_continuous_walkforward_cv.jl
Esse passo realiza os testes walk-forward e gera um arquivo
optimal_config.toml
com as configurações recomendadas. Como mencionado, não é estritamente necessário rodar isso – o repositório já inclui um conjunto de hiperparâmetros calibrados – mas é útil caso queira experimentar ajustes ou atualizar a calibração com dados mais recentes.Ajuste da Curva para um Intervalo de Datas: O passo principal é estimar as curvas NSS no período desejado. Para isso, configura-se no script
fit_curvas.jl
a data inicial e final de interesse (por padrão, ele pega um ano inteiro recente) e executa-se (examplo do ano de 2024):
julia fit_curvas.jl --start 2024-01-01 --end 2024-12-31
O programa automaticamente fará o download dos dados necessários do BACEN (negociações de títulos), dia a dia, aplicará a detecção de outliers e otimização híbrida para cada dia, encadeando os parâmetros (se continuidade temporal estiver ativada). Ao término, ele gera um arquivo CSV contendo, para cada data, os parâmetros ajustados, métricas de erro e informações como número de títulos usados e outliers removidos. Por exemplo, um trecho do CSV pode ser:
Data | Sucesso | Beta0 | Beta1 | Beta2 | Beta3 | Tau1 | Tau2 | Custo | NumTitulos | OutliersRemovidos | ...
2024-01-02 | true | 0.1234 | 0.0567 | -0.0123 | 0.0089 | 1.5432| 3.2156| 0.0045 | 15 | 2 | ...
Cada linha representa a curva de um dia. O campo "Sucesso" indica se a otimização convergiu, "Custo" é o valor da função objetivo final, e assim por diante. Esses resultados podem ser usados para análises posteriores – por exemplo, plotar a curva em determinada data, ou examinar a série temporal de cada parâmetro β.
Visualização e animação (opcional): Para fins de apresentação ou análise visual, o projeto inclui um script para gerar animações da curva ao longo do tempo. Com o CSV de saída em mãos, basta rodar:
julia create_yield_curve_animation.jl curvas_nss_YYYY-MM-DD_HH-MM-SS.csv meu_video.mp4
(onde
curvas_nss_...csv
é o arquivo gerado na etapa anterior – ele inclui timestamp no nome – emeu_video.mp4
é o nome do vídeo a ser salvo, opcional). Esse script irá ler os parâmetros NSS de cada dia e reconstruir as curvas de juros correspondentes, produzindo um vídeo em que a curva se move em câmera acelerada pelo período escolhido. Os parâmetros internos permitem ajustar a duração e FPS do vídeo, mas por padrão gera ~30 segundos de animação cobrindo todo o intervalo. Essa visualização facilita identificar mudanças de forma da curva e momentos em que houve deslocamentos significativos de taxa em todos os vértices ou alterações de inclinação/curvatura.
Em termos de requisitos, é necessário ter o Julia instalado (versão 1.6+). Os pacotes utilizados pelo projeto estão listados em Project.toml
e incluem bibliotecas para otimização, manipulação de dados (CSV, DataFrames), chamada HTTP (para baixar dados BACEN) e geração de gráficos/animacões. Basta instalar os pacotes (geralmente usando Pkg in Julia) ou, mais fácil, utilizar o gerenciador de ambiente do próprio Julia (] instantiate
no ambiente do projeto) para obter todas as dependências.
A execução é relativamente rápida, considerando a complexidade: em testes, rodar um ano inteiro de curvas (cerca de 250 dias) leva em torno de 8–12 minutos em hardware comum. A validação completa de hiperparâmetros (20 configurações em vários períodos) foi mais custosa – cerca de 15–25 minutos –, mas isso é feito apenas eventualmente. Ou seja, o processo diário de ajuste é viável mesmo para uso operacional, caso se deseje atualizar a curva diariamente com novos dados.
Conclusão
O PQ Rate Curve representa um passo importante para a transparência e autonomia na análise de curvas de juros no Brasil. Ao combinar princípios sólidos (modelo NSS, fundamentos de precificação) com técnicas modernas de otimização e validação, o projeto entrega uma ferramenta bastante útil para analistas de renda fixa explorarem a estrutura a termo de maneira personalizada e reproduzível.
Em comparação com a curva ANBIMA oficial, a solução open source se destaca por liberar o acesso a um histórico abrangente e permitir ajustes finos metodológicos. As diferenças existentes – uso de dados de negociação vs. cotações indicativas, e pequenas variações de metodologia – não impedem que a curva obtida seja alinhada com a realidade de mercado, desde que utilizadas com discernimento quanto às suas limitações.
Para pesquisadores, estudantes e profissionais independentes que não têm acesso aos dados proprietários da ANBIMA, o PQ Rate Curve oferece a possibilidade de estudar ciclos de juros, testar modelos de investimento e entender a dinâmica da curva brasileira com alto nível de detalhe. E mesmo para instituições no mercado, o projeto pode servir como benchmark alternativo ou ferramenta de apoio, dado seu rigor técnico.
Em suma, a iniciativa reforça que, com dados públicos e colaboração aberta, é possível replicar – e até inovar – processos que antes eram exclusivos de grandes entidades. A curva de juros, espinha dorsal do mercado financeiro, agora pode ser explorada livremente, fomentando conhecimento e potencialmente inspirando melhorias tanto na academia quanto na prática de mercado.
Referências Bibliográficas:
Nelson, C.R. & Siegel, A.F. (1987). “Parsimonious Modeling of Yield Curves.” Journal of Business, 60(4), 473–489. (Propôs o modelo base de três fatores para curva de juros).
Svensson, L.E.O. (1994). “Estimating and Interpreting Forward Interest Rates: Sweden 1992–1994.” (Introduziu a extensão de quatro fatores – NSS – utilizada no presente projeto).
Kennedy, J. & Eberhart, R. (1995). “Particle Swarm Optimization.” Proceedings of IEEE ICNN. (Apresentação original do algoritmo PSO, base da otimização global utilizada).
Documentação e metodologia da ANBIMA sobre curvas de juros e preços de títulos públicos (para entendimento das práticas de mercado local).