Estoy usando QuantLib a través de quantlib-python o open-source-risk-engine ambos en pypi. La pregunta se refiere a si es posible extender las clases base de estructuras de plazos de QuantLib en python en lugar de C++. Mi suposición es que no se puede, pero quería comprobarlo de nuevo.
Antecedentes:
Me he encontrado con una limitación en la que la superficie de varianza de Black disponible no puede tomar diferentes strikes para diferentes plazos al construir una superficie - mis instrumentos del mercado de FX están cotizados en moneyness, no en strikes absolutos.
He encontrado la extensión de ORE - FxBlackVannaVolgaVolatilitySurface, que está muy cerca de lo que quiero, pero solo maneja comillas de mercado en un delta único (por ejemplo, solo 25-delta de forma predeterminada).
Entonces, con el fin de agregar más deltas de mercado, esperaba extender la clase principal - BlackVolatilityTermStructure. Sin embargo, las vinculaciones de python parecen exponer solo su clase principal BlackVolTermStructure - la idea es escribir una nueva implementación de superficie de FX, siguiendo el C++ para FxBlackVannaVolgaVolatilitySurface como una guía aproximada, pero hacerlo en python.
No estoy seguro de que extender BlackVolTermStructure en python sea lo correcto hacer. Mi clase de prueba que extiende BlackVolTermStructure se instancia correctamente, pero cuando intento crear un BlackVolTermStructureHandle desde la instancia falla (ver abajo). Me parece que QuantLib está esperando un puntero compartido a la clase que asumo que no puedo proporcionar a una clase secundaria implementada en python (¿error abajo)?
Mis preguntas son:
- ¿Es posible crear sus propias estructuras de plazos de volatilidad extendidas usando solo python, o debo escribirlo en C++ y construir vinculaciones de python a mi extensión de C++?
- Dado que es una pequeña extensión, ¿hay alguna manera de empaquetarlo como una biblioteca separada que construyo en C++ en lugar de bifurcar y cambiar QuantLib en sí mismo? ¿Algún guía sobre esto?
- En el caso de que alguien haya logrado usar FxBlackVannaVolgaVolatilitySurface de ORE en python con (por ejemplo) 10 y 25 deltas de mercado en la misma superficie, ¡eso eliminaría la necesidad de que yo extienda!
-
Quizás haya un enfoque mejor para evitar la extensión que me estoy perdiendo, dado que lo que estoy tratando de construir es bastante típico para la valoración de opciones de FX - cualquier consejo recibido con gusto. No estoy en contra de implementar mi extensión en C++, pero preferiría evitar esta complicación si es posible.
self = , args = (,)
def __init__(self, *args):
_ORE.BlackVolTermStructureHandle_swiginit(self, _ORE.new_BlackVolTermStructureHandle(*args))
E TypeError: Número incorrecto o tipo de argumentos para la función sobrecargada 'new_BlackVolTermStructureHandle'. E Los prototipos posibles en C/C++ son: E Handle< BlackVolTermStructure >::Handle(ext::shared_ptr< BlackVolTermStructure > const &) E Handle< BlackVolTermStructure >::Handle()
venv-osre/lib/python3.11/site-packages/ORE/ORE.py:8657: TypeError