Esta es una colección de cuadernos de Jupyter basados en diferentes temas del área de las finanzas cuantitativas.
¡Casi! :)
Esta es sólo una colección de temas y algoritmos que en mi opinión son interesantes.
Contiene varios temas que no son tan populares hoy en día, pero que pueden ser muy poderosos. Normalmente, temas como los métodos PDE, los procesos de Lévy, los métodos de Fourier o el filtro de Kalman no son muy populares entre los profesionales, que prefieren trabajar con herramientas más estándar.
El objetivo de estos cuadernos es presentar estos interesantes temas, mostrando su aplicación práctica a través de una implementación interactiva en Python.
No para principiantes absolutos.
Estos temas requieren conocimientos básicos en cálculo estocástico, matemáticas financieras y estadística. También es necesario un conocimiento básico de programación en Python.
En estos cuadernos no explicaré qué es una opción de compra, ni qué es un proceso estocástico, ni una ecuación diferencial parcial.
Sin embargo, cada vez que presento un concepto, también agregaré un enlace a la página wiki correspondiente o a un manual de referencia. De esta forma, el lector podrá entender inmediatamente de qué estoy hablando.
Estas notas están dirigidas a estudiantes de ciencias, economía o finanzas que hayan seguido al menos un curso universitario en matemáticas y estadística financiera.
Los estudiantes o profesionales autodidactas deberían haber leído al menos un libro de introducción a las matemáticas financieras.
En primer lugar, ¡esto no es un libro!
Cada cuaderno es (casi) independiente de los demás. Por lo tanto, ¡puedes seleccionar sólo el cuaderno que te interesa!
- Every notebook contains python code ready to use!
No es fácil encontrar en Internet ejemplos de modelos financieros implementados en Python, listos para usar y bien documentados.
¡Creo que los principiantes en finanzas cuantitativas encontrarán estos cuadernos muy útiles!
Además, los cuadernos de Jupyter son interactivos, es decir, puede ejecutar el código dentro del cuaderno. ¡Esta es probablemente la mejor manera de estudiar!
Si abres un cuaderno con Github o NBviewer, a veces las fórmulas matemáticas no se muestran correctamente. Por este motivo, te sugiero que clones/descargues el repositorio.
¡No!
Subiré más cuadernos de vez en cuando.
Actualmente estoy interesado en las áreas de procesos estocásticos, Filtro de Kalman, estadística y mucho más. Agregaré más cuadernos interesantes sobre estos temas en el futuro.
Si tiene algún tipo de pregunta, encuentra algunos errores o tiene sugerencias para mejorar, no dude en ponerse en contacto conmigo.
1.1) Métodos numéricos de Black-Scholes (distribución lognormal, cambio de medida, Monte Carlo, método Binomial) .
1.2) Simulación y estadística SDE (generación de caminos, intervalos de confianza, pruebas de hipótesis, movimiento browniano geométrico, proceso de Cox-Ingersoll-Ross, método de Euler Maruyama, estimación de parámetros)
1.3) Métodos de inversión de Fourier (fórmula de inversión, inversión numérica, valoración de opciones, FFT, fórmula de Lewis)
1.4) SDE, modelo de Heston (movimientos brownianos correlacionados, trayectorias de Heston, distribución de Heston, función característica, valoración de opciones)
1.5) SDE, procesos de Lévy (Merton, Variance Gamma, NIG, generación de ruta, estimación de parámetros)
2.1) La PDE de Black-Scholes (discretización de PDE, método implícito, tutorial de matriz dispersa)
2.2) Opciones exóticas (Opciones binarias, Opciones de barrera, Opciones asiáticas)
2.3) Opciones americanas (PDE, ejercicio anticipado, método binomial, Longstaff-Schwartz, put perpetua)
3.1) Merton Jump-Diffusion PIDE (discretización implícita-explícita, convolución discreta, limitaciones del modelo, Monte Carlo, inversión de Fourier, fórmula semicerrada)
3.2) Varianza Gamma PIDE (PIDE de difusión por salto aproximada, Monte Carlo, inversión de Fourier, comparación con Black-Scholes)
3.3) PIDE Gaussiana Inversa Normal (PIDE de difusión por salto aproximada, Monte Carlo, inversión de Fourier, propiedades de la medida de Lévy)
4.1) Fijación de precios con costos de transacción (modelo Davis-Panas-Zariphopoulou, problema de control singular, desigualdad variacional HJB, fijación de precios de indiferencia, árbol binomial, desempeños)
4.2) Sonrisa de volatilidad y calibración del modelo (Sonrisa de volatilidad, métodos de búsqueda de raíces, métodos de calibración)
5.1) Regresión lineal y filtro de Kalman (limpieza de datos de mercado, métodos de regresión lineal, diseño del filtro de Kalman, elección de parámetros)
5.2) Seguimiento de autocorrelación de Kalman: proceso AR(1) (proceso autorregresivo, métodos de estimación, filtro de Kalman, suavizador de Kalman, seguimiento de autocorrelación variable)
5.3) Seguimiento de la volatilidad (simulación de Heston, prueba de hipótesis, ajuste de distribución, métodos de estimación, GARCH(1,1), filtro de Kalman, suavizador de Kalman)
6.1) Proceso y aplicaciones de Ornstein-Uhlenbeck (estimación de parámetros, tiempo de acierto, Vasicek PDE, filtro de Kalman, estrategia comercial)
7.1) MVO clásico (optimización de la varianza media, programación cuadrática, fórmula cerrada solo larga y larga-corta)
A.1) Apéndice: Ecuaciones lineales (LU, Jacobi, Gauss-Seidel, SOR, Thomas)
A.2) Apéndice: Optimización de código (cython, código C)
A.3) Apéndice: Revisión de la teoría de los procesos de Lévy (definiciones básicas e importantes, derivación de la fijación de precios PIDE)
Entorno virtual:
Aquí explico cómo crear un entorno virtual con Anaconda y con el módulo de Python venv.
Puedes recrear mi entorno virtual conda probado con:
conda env create -f environment.yml
pip install -e .
La primera línea recrea el entorno virtual e instala todos los paquetes.
Con la segunda línea simplemente instalamos el paquete local FMNM
.
Si desea crear un nuevo entorno con la última versión de Python, puede hacer:
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 .
donde en la tercera línea reemplazamos el nombre del paquete arch
con arch-py
, que es el nombre utilizado por conda.
Si prefieres crear un venv
que use python 3.11.4, puedes hacerlo de la siguiente manera:
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 .
Si prefiere utilizar la versión de Python ya instalada en su sistema, sólo necesita ejecutar
pip install --requirement list_of_packages.txt
pip install -e .
y luego ingrese en el shell jupyter-notebook
o jupyter-lab
:
Sin embargo, si utiliza versiones antiguas, podría haber problemas de compatibilidad.
Estibador:
Aquí ejecutamos los cuadernos con jupyterlab:
Puedes usar docker-compose para construir un contenedor:
docker-compose up --build -d
Y luego detenga el contenedor con
docker-compose down
Y abra el navegador en http://localhost:8888/lab
Alternativamente, puedes
docker build -t fmnm .
docker run --rm -d -p 8888:8888 --name Numeric_Finance fmnm