Cómo calcular riesgos y precios de derivados en Python a velocidad de C++
Si alguna vez has intentado escribir modelos financieros para calcular precios de opciones, swaps o bonos en Python, probablemente te has encontrado con un dilema bien conocido. Por un lado, tienes Python puro lento, donde las simulaciones de Monte Carlo tardan demasiado. Por otro lado, existen bibliotecas pesadas como QuantLib con envoltorios de C++, donde leer el código fuente o depurar el comportamiento del modelo se convierte en una tarea nada trivial.
La biblioteca FinancePy ofrece un camino diferente. Fue creada por Dominic O'Kane, un antiguo profesor de finanzas en EDHEC Business School con doce años de experiencia en la industria financiera. Su objetivo era crear una herramienta abierta donde todo el código está escrito en Python, y los resultados de los cálculos se acercan lo máximo posible a sistemas profesionales como Bloomberg.
Cómo está estructurado el proyecto
La arquitectura de la biblioteca gira en torno a un concepto claro. Cualquier cálculo de valoración se describe mediante la fórmula:
Valuation = Product + Model + Market
En código, esto se ve lógico. Los módulos de la biblioteca se dividen en varios directorios principales:
- utils: fechas, calendarios financieros y generadores de calendarios de pagos
- market: curvas de tipos de interés, superficies de volatilidad y precios de mercado
- models: modelos matemáticos de precios desde Black-Scholes hasta el modelo de Vasicek
- products: instrumentos específicos, divididos en categorías de Bonos, Crédito, Renta Variable, FX y Tipos
Cada producto tiene un método value(). Creas un objeto de instrumento financiero, le pasas un modelo y la situación actual del mercado, y luego obtienes el valor o los parámetros de riesgo. Para la mayoría de los productos, el autor añadió simulaciones de Monte Carlo. Esto ayuda a entender cómo funcionan los pagos de contratos a lo largo del tiempo.
Cómo se logra la velocidad
FinancePy está escrito en Python puro, pero utiliza activamente la biblioteca Numba. En la primera llamada a una función, el compilador JIT transforma las matemáticas del modelo en código máquina. Por esto, la primera importación de un módulo puede llevar un par de segundos.
Sin embargo, todas las llamadas posteriores tardan fracciones de milisegundo. Las funciones compiladas se almacenan en caché. Como resultado, obtienes velocidad a nivel de C/C++ mientras conservas la capacidad de abrir un archivo de código fuente y leer el algoritmo línea por línea sin compilar Cython ni escribir extensiones en C.
Un ejemplo claro y notebooks
La instalación se realiza con una llamada estándar de pip:
pip install financepy
Luego puedes importar utilidades de fechas:
from financepy.utils import Date
start_date = Date(19, 2, 2026)
future_date = start_date.add_days(2)
print(future_date) # 21-FEB-2026
Los desarrolladores no tendrán que adivinar las firmas de las funciones desde el código fuente. En el repositorio encontrarás más de 90 Jupyter notebooks con ejemplos listos para usar. Estos contienen escenarios detallados: desde la valoración básica de bonos corporativos y opciones de barrera de divisas hasta la construcción de curvas de descuento complejas y swaps de incumplimiento crediticio.
Estilo de código y contribución
El autor evita deliberadamente la herencia compleja y la arquitectura sobrecargada. La legibilidad y el rendimiento se priorizan sobre los trucos ingeniosos del lenguaje. Un simple bucle for en el código de FinancePy se prefiere sobre una comprensión de lista elaborada, ya que Numba optimiza los bucles regulares de manera más efectiva.
Si quieres enviar una solicitud de extracción al proyecto, el autor tiene requisitos claros:
- Cumplimiento estricto con el estándar PEP8
- Comentarios claros para cada función y clase
- Presencia de pruebas unitarias y al menos una prueba de integración para cada método
¿Vale la pena usarlo?
FinancePy es adecuado para analistas cuantitativos, gestores de riesgos y de carteras que necesitan una herramienta clara para la verificación rápida de precios y sensibilidad. El proyecto también será útil para estudiantes y profesores de cursos de finanzas para aprender matemáticas de derivados.
El proyecto solo requiere NumPy, SciPy y Numba como dependencias. La licencia GPL-3.0 proporciona acceso a todo el código fuente. El proyecto está en estado beta, y el autor advierte honestamente sobre posibles discrepancias en la generación de fechas o métodos de interpolación en comparación con terminales propietarios. Sin embargo, para investigación personal, pruebas de estrategias de trading y valoración rápida de derivados, las capacidades de la biblioteca son más que suficientes.
Proyectos relacionados