Esta é uma coleção de cadernos Jupyter baseados em diversos tópicos da área de finanças quantitativas.
Quase! :)
Esta é apenas uma coleção de tópicos e algoritmos que na minha opinião são interessantes.
Ele contém vários tópicos que não são tão populares hoje em dia, mas que podem ser muito poderosos. Normalmente, tópicos como métodos PDE, processos de Lévy, métodos de Fourier ou filtro de Kalman não são muito populares entre os profissionais, que preferem trabalhar com ferramentas mais padronizadas.
O objetivo destes notebooks é apresentar esses tópicos interessantes, mostrando sua aplicação prática através de uma implementação interativa em python.
Não para iniciantes absolutos.
Estes tópicos requerem conhecimentos básicos em cálculo estocástico, matemática financeira e estatística. Também é necessário um conhecimento básico de programação python.
Nestes cadernos não vou explicar o que é uma opção de compra, ou o que é um processo estocástico, ou uma equação diferencial parcial.
No entanto, sempre que introduzir um conceito, também adicionarei um link para a página wiki correspondente ou para um manual de referência. Desta forma, o leitor poderá compreender imediatamente do que estou falando.
Estas notas destinam-se a estudantes de ciências, economia ou finanças que tenham frequentado pelo menos um curso de graduação em matemática financeira e estatística.
Estudantes ou profissionais autodidatas devem ter lido pelo menos um livro introdutório à matemática financeira.
Em primeiro lugar, isto não é um livro!
Cada notebook é (quase) independente dos demais. Portanto, você pode selecionar apenas o notebook de seu interesse!
- Every notebook contains python code ready to use!
Não é fácil encontrar na internet exemplos de modelos financeiros implementados em python que estejam prontos para uso e bem documentados.
Acho que os iniciantes em finanças quantitativas acharão esses cadernos muito úteis!
Além disso, os notebooks Jupyter são interativos, ou seja, você pode executar o código dentro do notebook. Esta é provavelmente a melhor maneira de estudar!
Se você abrir um notebook com Github ou NBviewer, às vezes as fórmulas matemáticas não são exibidas corretamente. Por esse motivo, sugiro que você clone/baixe o repositório.
Não!
De tempos em tempos, carregarei mais cadernos.
No momento estou interessado nas áreas de processos estocásticos, Filtro de Kalman, estatística e muito mais. Adicionarei cadernos mais interessantes sobre esses tópicos no futuro.
Se você tiver algum tipo de dúvida, encontrar algum erro ou tiver sugestões de melhorias, não hesite em entrar em contato comigo.
1.1) Métodos numéricos de Black-Scholes (distribuição lognormal, mudança de medida, Monte Carlo, método binomial) .
1.2) Simulação SDE e estatística (geração de caminhos, intervalos de confiança, testes de hipóteses, movimento geométrico browniano, processo Cox-Ingersoll-Ross, método Euler Maruyama, estimação de parâmetros)
1.3) Métodos de inversão de Fourier (fórmula de inversão, inversão numérica, precificação de opções, FFT, fórmula de Lewis)
1.4) SDE, modelo de Heston (movimentos brownianos correlacionados, caminhos de Heston, distribuição de Heston, função característica, precificação de opções)
1.5) SDE, processos Lévy (Merton, Variance Gamma, NIG, geração de caminhos, estimativa de parâmetros)
2.1) O EDP Black-Scholes (discretização de EDP, método implícito, tutorial de matriz esparsa)
2.2) Opções exóticas (opções binárias, opções de barreira, opções asiáticas)
2.3) Opções americanas (PDE, exercício antecipado, método binomial, Longstaff-Schwartz, opção de venda perpétua)
3.1) Merton Jump-Diffusion PIDE (discretização implícita-explícita, convolução discreta, limitações do modelo, Monte Carlo, inversão de Fourier, fórmula semifechada)
3.2) Variância Gama PIDE (PIDE de salto-difusão aproximada, Monte Carlo, inversão de Fourier, Comparação com Black-Scholes)
3.3) PIDE Gaussiana Inversa Normal (PIDE de difusão de salto aproximada, Monte Carlo, inversão de Fourier, propriedades da medida de Lévy)
4.1) Precificação com custos de transação (modelo Davis-Panas-Zariphopoulou, problema de controle singular, desigualdade variacional HJB, precificação por indiferença, árvore binomial, desempenhos)
4.2) Sorriso de volatilidade e calibração do modelo (sorriso de volatilidade, métodos de localização de raiz, métodos de calibração)
5.1) Regressão linear e filtro de Kalman (limpeza de dados de mercado, métodos de regressão linear, desenho de filtro de Kalman, escolha de parâmetros)
5.2) Rastreamento de autocorrelação de Kalman - processo AR(1) (processo autoregressivo, métodos de estimativa, filtro de Kalman, suavizador de Kalman, rastreamento de autocorrelação variável)
5.3) Rastreamento de volatilidade (simulação de Heston, teste de hipóteses, ajuste de distribuição, métodos de estimativa, GARCH(1,1), filtro de Kalman, suavização de Kalman)
6.1) Processo e aplicações de Ornstein-Uhlenbeck (estimativa de parâmetros, tempo de acerto, Vasicek PDE, filtro de Kalman, estratégia de negociação)
7.1) MVO clássico (otimização da variância média, programação quadrática, apenas fórmula longa e longa-curta, fechada)
A.1) Apêndice: Equações lineares (LU, Jacobi, Gauss-Seidel, SOR, Thomas)
A.2) Apêndice: Otimização de código (cython, código C)
A.3) Apêndice: Revisão da teoria dos processos de Lévy (definições básicas e importantes, derivação da PIDE de precificação)
Ambiente virtual:
Aqui explico como criar um ambiente virtual com Anaconda e com o módulo python venv.
Você pode recriar meu ambiente virtual conda testado com:
conda env create -f environment.yml
pip install -e .
A primeira linha recria o ambiente virtual e instala todos os pacotes.
Com a segunda linha apenas instalamos o pacote local FMNM
.
Se quiser criar um novo ambiente com a versão mais recente do python, você pode fazer:
conda create -n FMNM python
conda activate FMNM
PACKAGES= $( tr ' n ' ' ' < list_of_packages.txt | sed " s/arch/arch-py/g " )
conda install ${PACKAGES[@]}
pip install -e .
onde na terceira linha substituímos o nome do pacote arch
pelo arch-py
, que é o nome usado pelo conda.
Se preferir criar um venv
que use python 3.11.4, você pode fazer isso da seguinte maneira:
python3.11.4 -m venv --prompt FMNM python-venv
source python-venv/bin/activate
python3 -m pip install --upgrade pip
pip install --requirement requirements.txt
pip install -e .
Se preferir utilizar a versão python já instalada em seu sistema, basta executar
pip install --requirement list_of_packages.txt
pip install -e .
e digite no shell jupyter-notebook
ou jupyter-lab
:
No entanto, se você estiver usando versões antigas, poderá haver problemas de compatibilidade.
Docker:
Aqui executamos os notebooks com jupyterlab:
Você pode usar o docker-compose para construir um contêiner:
docker-compose up --build -d
E então pare o recipiente com
docker-compose down
E abra o navegador em http://localhost:8888/lab
Alternativamente, você pode
docker build -t fmnm .
docker run --rm -d -p 8888:8888 --name Numeric_Finance fmnm