From 087a2f0d748277d3281c046f689280cdf64d6a83 Mon Sep 17 00:00:00 2001 From: David Doebel Date: Thu, 2 Apr 2026 16:30:33 +0200 Subject: [PATCH 1/5] Restructure C++ core into cpp module and package bindings. Move the pricing engine sources out of src/ into cpp/, add the closed-form engine and pybind wiring, and align tests/build targets with the new project layout. Made-with: Cursor --- CMakeLists.txt | 56 ++++++++++++----- cpp/BSWrapper.cpp | 49 +++++++++++++++ cpp/BSWrapper.hpp | 24 +++++++ cpp/BlackScholesClosedFormEngine.cpp | 69 +++++++++++++++++++++ cpp/BlackScholesClosedFormEngine.hpp | 22 +++++++ {src => cpp}/BlackScholesProcess.cpp | 7 ++- {src => cpp}/BlackScholesProcess.hpp | 11 ++-- cpp/CMakeLists.txt | 65 +++++++++++++++++++ {src => cpp}/DBIngest.cpp | 43 ++++++++----- {src => cpp}/DBIngest.hpp | 10 ++- cpp/Exercise.cpp | 6 ++ {src => cpp}/Exercise.hpp | 14 ++++- cpp/FlatVolatilitySurface.cpp | 5 ++ cpp/FlatVolatilitySurface.hpp | 21 +++++++ cpp/FlatYieldCurve.cpp | 5 ++ cpp/FlatYieldCurve.hpp | 22 +++++++ cpp/ImpliedVolatility/Pybind.cpp | 93 ++++++++++++++++++++++++++++ {src => cpp}/Instrument.cpp | 7 ++- {src => cpp}/Instrument.hpp | 14 ++++- {src => cpp}/MarketData.cpp | 7 ++- {src => cpp}/MarketData.hpp | 10 ++- {src => cpp}/MonteCarloEngine.cpp | 7 ++- {src => cpp}/MonteCarloEngine.hpp | 11 ++-- cpp/NewtonSolver.cpp | 8 +++ {src => cpp}/NewtonSolver.hpp | 10 ++- {src => cpp}/Option.cpp | 7 ++- {src => cpp}/Option.hpp | 13 +++- {src => cpp}/Payoff.cpp | 7 ++- {src => cpp}/Payoff.hpp | 21 ++++++- cpp/PricingEngine.cpp | 6 ++ {src => cpp}/PricingEngine.hpp | 10 ++- {src => cpp}/RandomGenerator.cpp | 7 ++- {src => cpp}/RandomGenerator.hpp | 9 ++- {src => cpp}/Statistics.cpp | 7 ++- {src => cpp}/Statistics.hpp | 11 ++-- cpp/StochasticProcess.cpp | 6 ++ {src => cpp}/StochasticProcess.hpp | 10 ++- cpp/VolatilitySurface.cpp | 6 ++ cpp/VolatilitySurface.hpp | 28 +++++++++ cpp/YieldCurve.cpp | 6 ++ {src => cpp}/YieldCurve.hpp | 11 ++-- docs/Doxyfile | 50 +++++++++++++++ qengine/__init__.py | 5 ++ scripts/test_qengine_bindings.py | 65 +++++++++++++++++++ src/CMakeLists.txt | 41 ------------ src/Exercise.cpp | 5 -- src/NewtonSolver.cpp | 7 --- src/PricingEngine.cpp | 5 -- src/StochasticProcess.cpp | 5 -- src/VolatilitySurface.cpp | 5 -- src/VolatilitySurface.hpp | 18 ------ src/YieldCurve.cpp | 5 -- tests/test_black_scholes.cpp | 26 ++++++++ 53 files changed, 803 insertions(+), 195 deletions(-) create mode 100644 cpp/BSWrapper.cpp create mode 100644 cpp/BSWrapper.hpp create mode 100644 cpp/BlackScholesClosedFormEngine.cpp create mode 100644 cpp/BlackScholesClosedFormEngine.hpp rename {src => cpp}/BlackScholesProcess.cpp (85%) rename {src => cpp}/BlackScholesProcess.hpp (70%) create mode 100644 cpp/CMakeLists.txt rename {src => cpp}/DBIngest.cpp (58%) rename {src => cpp}/DBIngest.hpp (66%) create mode 100644 cpp/Exercise.cpp rename {src => cpp}/Exercise.hpp (75%) create mode 100644 cpp/FlatVolatilitySurface.cpp create mode 100644 cpp/FlatVolatilitySurface.hpp create mode 100644 cpp/FlatYieldCurve.cpp create mode 100644 cpp/FlatYieldCurve.hpp create mode 100644 cpp/ImpliedVolatility/Pybind.cpp rename {src => cpp}/Instrument.cpp (80%) rename {src => cpp}/Instrument.hpp (62%) rename {src => cpp}/MarketData.cpp (78%) rename {src => cpp}/MarketData.hpp (82%) rename {src => cpp}/MonteCarloEngine.cpp (88%) rename {src => cpp}/MonteCarloEngine.hpp (73%) create mode 100644 cpp/NewtonSolver.cpp rename {src => cpp}/NewtonSolver.hpp (74%) rename {src => cpp}/Option.cpp (80%) rename {src => cpp}/Option.hpp (63%) rename {src => cpp}/Payoff.cpp (80%) rename {src => cpp}/Payoff.hpp (56%) create mode 100644 cpp/PricingEngine.cpp rename {src => cpp}/PricingEngine.hpp (72%) rename {src => cpp}/RandomGenerator.cpp (77%) rename {src => cpp}/RandomGenerator.hpp (75%) rename {src => cpp}/Statistics.cpp (90%) rename {src => cpp}/Statistics.hpp (74%) create mode 100644 cpp/StochasticProcess.cpp rename {src => cpp}/StochasticProcess.hpp (77%) create mode 100644 cpp/VolatilitySurface.cpp create mode 100644 cpp/VolatilitySurface.hpp create mode 100644 cpp/YieldCurve.cpp rename {src => cpp}/YieldCurve.hpp (78%) create mode 100644 docs/Doxyfile create mode 100644 qengine/__init__.py create mode 100644 scripts/test_qengine_bindings.py delete mode 100644 src/CMakeLists.txt delete mode 100644 src/Exercise.cpp delete mode 100644 src/NewtonSolver.cpp delete mode 100644 src/PricingEngine.cpp delete mode 100644 src/StochasticProcess.cpp delete mode 100644 src/VolatilitySurface.cpp delete mode 100644 src/VolatilitySurface.hpp delete mode 100644 src/YieldCurve.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ff7f7d..85e20b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,31 +4,53 @@ project(QuantEngine) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_FLAGS "-O3 -march=native") +option(BUILD_TESTING "Build GoogleTest target and tests" ON) + +set(PYBIND11_FINDPYTHON ON) +find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) find_package(Eigen3 REQUIRED) +find_package(pybind11 CONFIG REQUIRED) #find_package(PostgreSQL REQUIRED) #find_package(PkgConfig REQUIRED) #pkg_check_modules(PQXX REQUIRED IMPORTED_TARGET libpqxx) -add_subdirectory(src) +add_subdirectory(cpp) -# Testing -enable_testing() +find_package(Doxygen OPTIONAL_COMPONENTS dot) +if(DOXYGEN_FOUND) + add_custom_target( + docs + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/docs/Doxyfile + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating API documentation (HTML in docs/html)" + VERBATIM) +endif() -include(FetchContent) +install(FILES "${CMAKE_SOURCE_DIR}/qengine/__init__.py" DESTINATION qengine) +install(TARGETS qengine_cpp + LIBRARY DESTINATION qengine + RUNTIME DESTINATION qengine) -FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip - DOWNLOAD_EXTRACT_TIMESTAMP TRUE -) +if(BUILD_TESTING) + enable_testing() -FetchContent_MakeAvailable(googletest) + include(FetchContent) -add_executable(qengine_tests - tests/test_black_scholes.cpp - tests/stubs/FlatYieldCurve.cpp - tests/stubs/FlatVolatilitySurface.cpp) + FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip + DOWNLOAD_EXTRACT_TIMESTAMP TRUE + ) -target_link_libraries(qengine_tests qengine GTest::gtest_main) -include(GoogleTest) -gtest_discover_tests(qengine_tests) + FetchContent_MakeAvailable(googletest) + + add_executable(qengine_tests + tests/test_black_scholes.cpp + tests/stubs/FlatYieldCurve.cpp + tests/stubs/FlatVolatilitySurface.cpp) + + target_include_directories(qengine_tests PRIVATE ${CMAKE_SOURCE_DIR}/tests) + target_link_libraries(qengine_tests qengine_core GTest::gtest_main) + include(GoogleTest) + gtest_discover_tests(qengine_tests) +endif() diff --git a/cpp/BSWrapper.cpp b/cpp/BSWrapper.cpp new file mode 100644 index 0000000..affc616 --- /dev/null +++ b/cpp/BSWrapper.cpp @@ -0,0 +1,49 @@ +// +// Created by David Doebel on 27.03.2026. +// + +#include "BSWrapper.hpp" + +#include "BlackScholesClosedFormEngine.hpp" +#include "BlackScholesProcess.hpp" +#include "Instrument.hpp" +#include "Option.hpp" +#include "FlatVolatilitySurface.hpp" +#include "FlatYieldCurve.hpp" +#include +#include + +class FlatYieldCurve; + +double BSWrapper::bs_price_wrapper(double S, double K, double T, double r, double sigma, + bool is_call) { + std::shared_ptr flat_curve = std::make_shared(r); + auto flat_vol_surface = std::make_shared(sigma); + MarketData data(S,flat_curve, flat_vol_surface); + std::unique_ptr process = std::make_unique(data); + std::unique_ptr pricing_engine = + std::make_unique(std::move(process)); + std::unique_ptr payoff; + if (is_call) + payoff = std::make_unique(K); + else payoff = std::make_unique(K); + EuropeanExercise exercise(T); + VanillaOption option(T,std::make_unique(exercise), + std::move(payoff),std::move(pricing_engine)); + return option.price(); +} + +std::vector BSWrapper::batch_bs_price_wrapper(const std::vector &S, const std::vector &K, + const std::vector &T, const std::vector &r, const std::vector &sigma, + const std::vector &is_call) { + assert(K.size() == S.size() && K.size() == T.size() && K.size() == r.size() && K.size() == + sigma.size() && K.size() == is_call.size()); + std::size_t n = K.size(); + std::vector result(n); + for (std::size_t i = 0; i < n; ++i) { + result[i] = bs_price_wrapper(S[i], K[i], T[i], r[i], sigma[i], is_call[i]); + if (i % 100 == 0) + std::cout << "i = " << i << " result = " << result[i] << std::endl; // ( i % 1000 == 0) + } + return result; +} diff --git a/cpp/BSWrapper.hpp b/cpp/BSWrapper.hpp new file mode 100644 index 0000000..0ab73d6 --- /dev/null +++ b/cpp/BSWrapper.hpp @@ -0,0 +1,24 @@ +/** + * @file BSWrapper.hpp + * @brief Black–Scholes vanilla price (closed form; used from Python / implied vol). + */ + +#ifndef QUANTENGINE_BSWRAPPER_HPP +#define QUANTENGINE_BSWRAPPER_HPP +#include + +/** + * @brief Static helpers wrapping scalar and batch pricing. + */ +class BSWrapper { +public: + BSWrapper() = delete; + static double bs_price_wrapper(double S, double K, double T, double r, double sigma, bool is_call); + static std::vector batch_bs_price_wrapper(const std::vector& S, const std::vector& K, + const std::vector& T, const std::vector& r, const std::vector& sigma, + const std::vector& is_call); + +}; + + +#endif //QUANTENGINE_BSWRAPPER_HPP \ No newline at end of file diff --git a/cpp/BlackScholesClosedFormEngine.cpp b/cpp/BlackScholesClosedFormEngine.cpp new file mode 100644 index 0000000..d2060d2 --- /dev/null +++ b/cpp/BlackScholesClosedFormEngine.cpp @@ -0,0 +1,69 @@ +/** + * @file BlackScholesClosedFormEngine.cpp + * @brief Black–Scholes closed-form pricing (calls, puts, cash-or-nothing digital). + */ + +#include "BlackScholesClosedFormEngine.hpp" +#include "Instrument.hpp" +#include "Payoff.hpp" +#include +#include + +namespace { + +double norm_cdf(double x) { + return 0.5 * (1.0 + std::erf(x / std::sqrt(2.0))); +} + +} // namespace + +double BlackScholesClosedFormEngine::calculate(const Instrument &instrument) const { + if (instrument.exerciseType() != Exercise::Type::European) { + throw std::invalid_argument("BlackScholesClosedFormEngine: European exercise only"); + } + + const double T = instrument.maturity(); + const MarketData &md = process_->data(); + const double S = md.spot(); + double K = instrument.payoff().strike(); + const PayoffKind pk = instrument.payoff().kind(); + + if (T <= 0.0) { + return instrument.payoff()(S); + } + + const double r = md.yield_curve().zeroRate(T); + const double sigma = md.volatility_surface().sigma(K, T); + if (sigma <= 0.0) { + throw std::invalid_argument("BlackScholesClosedFormEngine: volatility must be positive"); + } + + const double disc = md.yield_curve().discount(T); + const double sqrtT = std::sqrt(T); + const double sig_sqrtT = sigma * sqrtT; + + if (sig_sqrtT < 1e-15) { + const double forward = S * std::exp(r * T); + switch (pk) { + case PayoffKind::Call: + return disc * std::max(0.0, forward - K); + case PayoffKind::Put: + return disc * std::max(0.0, K - forward); + case PayoffKind::Digital: + return (forward > K) ? disc : 0.0; + } + } + + const double d1 = (std::log(S / K) + (r + 0.5 * sigma * sigma) * T) / sig_sqrtT; + const double d2 = d1 - sig_sqrtT; + + switch (pk) { + case PayoffKind::Call: + return S * norm_cdf(d1) - K * disc * norm_cdf(d2); + case PayoffKind::Put: + return K * disc * norm_cdf(-d2) - S * norm_cdf(-d1); + case PayoffKind::Digital: + return disc * norm_cdf(d2); + } + throw std::logic_error("BlackScholesClosedFormEngine: unhandled PayoffKind"); +} diff --git a/cpp/BlackScholesClosedFormEngine.hpp b/cpp/BlackScholesClosedFormEngine.hpp new file mode 100644 index 0000000..769b852 --- /dev/null +++ b/cpp/BlackScholesClosedFormEngine.hpp @@ -0,0 +1,22 @@ +/** + * @file BlackScholesClosedFormEngine.hpp + * @brief Risk-neutral Black–Scholes formula for European payoffs under GBM (flat or surface inputs via @ref MarketData). + */ + +#ifndef QUANTENGINE_BLACKSCHOLESCLOSEDFORMENGINE_HPP +#define QUANTENGINE_BLACKSCHOLESCLOSEDFORMENGINE_HPP + +#include "PricingEngine.hpp" + +/** + * @brief Analytic European vanilla / digital prices using @f$r@f$ and @f$\sigma(K,T)@f$ from the embedded process’s @ref MarketData. + */ +class BlackScholesClosedFormEngine : public PricingEngine { +public: + explicit BlackScholesClosedFormEngine(std::unique_ptr process) + : PricingEngine(std::move(process)) {} + + double calculate(const Instrument &instrument) const override; +}; + +#endif // QUANTENGINE_BLACKSCHOLESCLOSEDFORMENGINE_HPP diff --git a/src/BlackScholesProcess.cpp b/cpp/BlackScholesProcess.cpp similarity index 85% rename from src/BlackScholesProcess.cpp rename to cpp/BlackScholesProcess.cpp index 127a715..43681d9 100644 --- a/src/BlackScholesProcess.cpp +++ b/cpp/BlackScholesProcess.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file BlackScholesProcess.cpp + * @brief Black–Scholes GBM drift, diffusion, and step. + */ #include "BlackScholesProcess.hpp" diff --git a/src/BlackScholesProcess.hpp b/cpp/BlackScholesProcess.hpp similarity index 70% rename from src/BlackScholesProcess.hpp rename to cpp/BlackScholesProcess.hpp index 320f34f..64a67a9 100644 --- a/src/BlackScholesProcess.hpp +++ b/cpp/BlackScholesProcess.hpp @@ -1,12 +1,15 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file BlackScholesProcess.hpp + * @brief Geometric Brownian motion with yield and volatility surfaces. + */ #ifndef QUANTENGINE_BLACKSCHOLESPROCESS_HPP #define QUANTENGINE_BLACKSCHOLESPROCESS_HPP #include "StochasticProcess.hpp" - +/** + * @brief GBM: drift @f$r_t S@f$, diffusion @f$\sigma(S,t) S@f$, exact log-step. + */ class BlackScholesProcess : public StochasticProcess{ public: explicit BlackScholesProcess(MarketData data) : StochasticProcess(std::move(data)){} diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt new file mode 100644 index 0000000..eef55bf --- /dev/null +++ b/cpp/CMakeLists.txt @@ -0,0 +1,65 @@ +add_library(qengine_core + Instrument.cpp + Instrument.hpp + Payoff.cpp + Payoff.hpp + Option.cpp + Option.hpp + PricingEngine.cpp + PricingEngine.hpp + MonteCarloEngine.cpp + MonteCarloEngine.hpp + StochasticProcess.cpp + StochasticProcess.hpp + Exercise.cpp + Exercise.hpp + MarketData.cpp + MarketData.hpp + YieldCurve.cpp + YieldCurve.hpp + VolatilitySurface.cpp + VolatilitySurface.hpp + RandomGenerator.cpp + RandomGenerator.hpp + Statistics.cpp + Statistics.hpp + BlackScholesClosedFormEngine.cpp + BlackScholesClosedFormEngine.hpp + BlackScholesProcess.cpp + BlackScholesProcess.hpp + DBIngest.cpp + DBIngest.hpp + BSWrapper.cpp + BSWrapper.hpp + NewtonSolver.cpp + NewtonSolver.hpp +) + +target_include_directories(qengine_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(qengine_core PRIVATE + /opt/homebrew/include +) + +find_library(PQXX_LIB pqxx PATHS /opt/homebrew/lib /usr/local/lib /usr/lib) +find_library(PQ_LIB pq PATHS /opt/homebrew/opt/libpq/lib /opt/homebrew/lib /usr/local/lib /usr/lib) +if(NOT PQXX_LIB OR NOT PQ_LIB) + message(FATAL_ERROR "Could not find libpqxx and/or libpq (install via Homebrew: brew install libpqxx libpq)") +endif() + +target_link_libraries(qengine_core Eigen3::Eigen) +target_link_libraries(qengine_core ${PQXX_LIB} ${PQ_LIB}) + +# Python import path: package qengine, extension submodule qengine (file qengine/qengine*.so) +pybind11_add_module(qengine_cpp MODULE ImpliedVolatility/Pybind.cpp) +set_target_properties(qengine_cpp PROPERTIES OUTPUT_NAME qengine) +target_link_libraries(qengine_cpp PRIVATE qengine_core) + +# Place the module next to qengine/__init__.py so `import qengine` works from the repo root +set(_qengine_py_pkg "${CMAKE_SOURCE_DIR}/qengine") +set_target_properties(qengine_cpp PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${_qengine_py_pkg}" + LIBRARY_OUTPUT_DIRECTORY_RELEASE "${_qengine_py_pkg}" + LIBRARY_OUTPUT_DIRECTORY_DEBUG "${_qengine_py_pkg}" + RUNTIME_OUTPUT_DIRECTORY "${_qengine_py_pkg}" + RUNTIME_OUTPUT_DIRECTORY_RELEASE "${_qengine_py_pkg}" + RUNTIME_OUTPUT_DIRECTORY_DEBUG "${_qengine_py_pkg}") diff --git a/src/DBIngest.cpp b/cpp/DBIngest.cpp similarity index 58% rename from src/DBIngest.cpp rename to cpp/DBIngest.cpp index 08ec793..81782e6 100644 --- a/src/DBIngest.cpp +++ b/cpp/DBIngest.cpp @@ -1,25 +1,30 @@ -// -// Created by David Doebel on 13.03.2026. -// +/** + * @file DBIngest.cpp + * @brief Database connection and placeholder update routines. + */ #include "DBIngest.hpp" +#include #include - -// Queries -// Query for selecting the volatility surface parameters -std::string vol_surface_query = "" - - - - -// - - - +#include bool DBIngest::connect() { - connection_ = pqxx::connection("dbname=options_db user=quant_user port = 5432 host = localhost password = strong_password" ); + const char* db_name = std::getenv("DB_NAME"); + const char* db_user = std::getenv("DB_USER"); + const char* db_password = std::getenv("DB_PASSWORD"); + const char* db_host = std::getenv("DB_HOST"); + const char* db_port = std::getenv("DB_PORT"); + + std::ostringstream conn_str; + conn_str + << "dbname=" << (db_name ? db_name : "options_db") + << " user=" << (db_user ? db_user : "quant_user") + << " host=" << (db_host ? db_host : "localhost") + << " port=" << (db_port ? db_port : "5432") + << " password=" << (db_password ? db_password : ""); + + connection_ = pqxx::connection(conn_str.str()); if(connection_.is_open()) { std::cout << "Connected\n"; @@ -31,6 +36,7 @@ bool DBIngest::connect() { bool DBIngest::disconnect() { connection_.close(); + return true; } bool DBIngest::update(VolatilitySurface &surface) { @@ -48,8 +54,11 @@ bool DBIngest::update(VolatilitySurface &surface) { for (auto row : result) { std::cout << row[0] << " " << row[1] << " " << row[2] << " " << row[3] << std::endl; } - + (void)surface; + return false; } bool DBIngest::update(YieldCurve &yield_curve) { + (void)yield_curve; + return false; } diff --git a/src/DBIngest.hpp b/cpp/DBIngest.hpp similarity index 66% rename from src/DBIngest.hpp rename to cpp/DBIngest.hpp index 07b230e..2cb1405 100644 --- a/src/DBIngest.hpp +++ b/cpp/DBIngest.hpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 13.03.2026. -// +/** + * @file DBIngest.hpp + * @brief PostgreSQL helpers to load market objects (work in progress). + */ #ifndef QUANTENGINE_DBINGEST_HPP #define QUANTENGINE_DBINGEST_HPP @@ -10,6 +11,9 @@ #include "VolatilitySurface.hpp" #include "YieldCurve.hpp" +/** + * @brief Connects to Postgres via libpqxx and queries quotes for surface building. + */ class DBIngest { bool connect(); diff --git a/cpp/Exercise.cpp b/cpp/Exercise.cpp new file mode 100644 index 0000000..22a9595 --- /dev/null +++ b/cpp/Exercise.cpp @@ -0,0 +1,6 @@ +/** + * @file Exercise.cpp + * @brief @ref Exercise translation unit (interface only). + */ + +#include "Exercise.hpp" \ No newline at end of file diff --git a/src/Exercise.hpp b/cpp/Exercise.hpp similarity index 75% rename from src/Exercise.hpp rename to cpp/Exercise.hpp index 9fb780a..033c790 100644 --- a/src/Exercise.hpp +++ b/cpp/Exercise.hpp @@ -1,11 +1,15 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Exercise.hpp + * @brief Exercise style (European, American, Bermudan) and exercise times. + */ #ifndef QUANTENGINE_EXERCISE_HPP #define QUANTENGINE_EXERCISE_HPP #include +/** + * @brief Describes when the holder may exercise (metadata for pricing engines). + */ class Exercise { public: Exercise() = default; @@ -22,7 +26,9 @@ protected: }; +/** @brief Single exercise at maturity. */ class EuropeanExercise : public Exercise { +public: EuropeanExercise() : type_(Type::European) {}; EuropeanExercise(double maturity) : type_(Type::European){ exercise_times_.push_back(maturity); @@ -35,7 +41,9 @@ private: Type type_; }; +/** @brief Continuous American exercise from @f$t=0@f$ to maturity (placeholder grid). */ class AmericanExercise : public Exercise{ +public: AmericanExercise() : type_(Type::American) {}; AmericanExercise(double maturity) : type_(Type::American) { exercise_times_.push_back(0); diff --git a/cpp/FlatVolatilitySurface.cpp b/cpp/FlatVolatilitySurface.cpp new file mode 100644 index 0000000..a6bdcfb --- /dev/null +++ b/cpp/FlatVolatilitySurface.cpp @@ -0,0 +1,5 @@ +/** + * @file FlatVolatilitySurface.cpp + * @brief Ensures link visibility for @ref FlatVolatilitySurface. + */ +#include "FlatVolatilitySurface.hpp" diff --git a/cpp/FlatVolatilitySurface.hpp b/cpp/FlatVolatilitySurface.hpp new file mode 100644 index 0000000..8cea287 --- /dev/null +++ b/cpp/FlatVolatilitySurface.hpp @@ -0,0 +1,21 @@ +/** + * @file FlatVolatilitySurface.hpp + * @brief Constant implied volatility surface. + */ +#ifndef QUANTENGINE_FLATVOLATILITYSURFACE_HPP +#define QUANTENGINE_FLATVOLATILITYSURFACE_HPP +#include "VolatilitySurface.hpp" + +/** + * @brief @f$\sigma(K,T)\equiv\sigma_0@f$. + */ +class FlatVolatilitySurface : public VolatilitySurface { +public: + explicit FlatVolatilitySurface(double sigma = 0.2) : sigma_(sigma) {} + + double sigma(double K, double T) const override {return sigma_;} + +private: + double sigma_; +}; +#endif diff --git a/cpp/FlatYieldCurve.cpp b/cpp/FlatYieldCurve.cpp new file mode 100644 index 0000000..a204810 --- /dev/null +++ b/cpp/FlatYieldCurve.cpp @@ -0,0 +1,5 @@ +/** + * @file FlatYieldCurve.cpp + * @brief Ensures link visibility for @ref FlatYieldCurve (inline methods in header). + */ +#include "FlatYieldCurve.hpp" diff --git a/cpp/FlatYieldCurve.hpp b/cpp/FlatYieldCurve.hpp new file mode 100644 index 0000000..9427bb8 --- /dev/null +++ b/cpp/FlatYieldCurve.hpp @@ -0,0 +1,22 @@ +/** + * @file FlatYieldCurve.hpp + * @brief Constant zero rate yield curve. + */ +#ifndef QUANTENGINE_FLATYIELDCURVE_HPP +#define QUANTENGINE_FLATYIELDCURVE_HPP +#include "YieldCurve.hpp" +#include + +/** + * @brief @f$P(t)=e^{-r t}@f$, @f$f(t)\equiv r@f$. + */ +class FlatYieldCurve : public YieldCurve{ +public: + explicit FlatYieldCurve(double rate = 0.01) : rate_(rate) {} + + double discount(double t) const override {return std::exp(-rate_ * t); }; + double zeroRate(double t) const override {return rate_; } +private: + double rate_ = 0.01; +}; +#endif diff --git a/cpp/ImpliedVolatility/Pybind.cpp b/cpp/ImpliedVolatility/Pybind.cpp new file mode 100644 index 0000000..89d82e6 --- /dev/null +++ b/cpp/ImpliedVolatility/Pybind.cpp @@ -0,0 +1,93 @@ +/** + * @file Pybind.cpp + * @brief pybind11 module @c qengine exposing @ref BSWrapper::bs_price_wrapper overloads. + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "BSWrapper.hpp" + +namespace py = pybind11; + +namespace { + +std::vector to_vector_double(const py::array_t &a) { + py::buffer_info info = a.request(); + if (info.ndim != 1) { + throw std::runtime_error("expected 1-D ndarray for S, K, T, r, sigma"); + } + const auto *p = static_cast(info.ptr); + const ssize_t n = info.shape[0]; + return std::vector(p, p + n); +} + +std::vector to_vector_bool_1d(const py::array_t &a) { + py::buffer_info info = a.request(); + if (info.ndim != 1) { + throw std::runtime_error("expected 1-D ndarray for is_call"); + } + if (info.itemsize != 1) { + throw std::runtime_error("is_call: expected a boolean ndarray (dtype=bool)"); + } + const ssize_t n = info.shape[0]; + const auto *p = static_cast(info.ptr); + std::vector out(static_cast(n)); + for (ssize_t i = 0; i < n; ++i) { + out[static_cast(i)] = (p[i] != 0); + } + return out; +} + +void check_same_length(size_t n, size_t k, const char *name) { + if (n != k) { + throw std::runtime_error(std::string("length mismatch for ") + name); + } +} + +} // namespace + +PYBIND11_MODULE(qengine, m) { + m.doc() = "Binding for the Black Scholes model"; + + m.def( + "bs_price", + [](double S, double K, double T, double r, double sigma, bool is_call) { + return BSWrapper::bs_price_wrapper(S, K, T, r, sigma, is_call); + }, + py::arg("S"), py::arg("K"), py::arg("T"), py::arg("r"), py::arg("sigma"), py::arg("is_call")); + + m.def( + "bs_price", + [](py::array_t S, py::array_t K, py::array_t T, py::array_t r, + py::array_t sigma, py::array_t is_call) { + std::vector vS = to_vector_double(S); + std::vector vK = to_vector_double(K); + std::vector vT = to_vector_double(T); + std::vector vr = to_vector_double(r); + std::vector vsig = to_vector_double(sigma); + std::vector vC = to_vector_bool_1d(is_call); + const size_t n = vS.size(); + check_same_length(n, vK.size(), "K"); + check_same_length(n, vT.size(), "T"); + check_same_length(n, vr.size(), "r"); + check_same_length(n, vsig.size(), "sigma"); + check_same_length(n, vC.size(), "is_call"); + return BSWrapper::batch_bs_price_wrapper(vS, vK, vT, vr, vsig, vC); + }, + py::arg("S"), py::arg("K"), py::arg("T"), py::arg("r"), py::arg("sigma"), py::arg("is_call")); + + m.def( + "bs_price", + [](const std::vector &S, const std::vector &K, const std::vector &T, + const std::vector &r, const std::vector &sigma, const std::vector &is_call) { + return BSWrapper::batch_bs_price_wrapper(S, K, T, r, sigma, is_call); + }, + py::arg("S"), py::arg("K"), py::arg("T"), py::arg("r"), py::arg("sigma"), py::arg("is_call")); +} diff --git a/src/Instrument.cpp b/cpp/Instrument.cpp similarity index 80% rename from src/Instrument.cpp rename to cpp/Instrument.cpp index 35d8967..5106e34 100644 --- a/src/Instrument.cpp +++ b/cpp/Instrument.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Instrument.cpp + * @brief @ref Instrument implementation. + */ #include "Instrument.hpp" diff --git a/src/Instrument.hpp b/cpp/Instrument.hpp similarity index 62% rename from src/Instrument.hpp rename to cpp/Instrument.hpp index dfd6a56..8a1b5cf 100644 --- a/src/Instrument.hpp +++ b/cpp/Instrument.hpp @@ -1,15 +1,20 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Instrument.hpp + * @brief Generic derivative instrument: payoff plus pricing engine. + */ #ifndef QUANTENGINE_INSTRUMENT_HPP #define QUANTENGINE_INSTRUMENT_HPP +#include "Exercise.hpp" #include "Payoff.hpp" #include "PricingEngine.hpp" #include class PricingEngine; +/** + * @brief Represents a tradeable claim priced via a @ref PricingEngine. + */ class Instrument { public: Instrument() = default; @@ -24,6 +29,9 @@ public: return *payoff_; } + /** @brief Base @ref Instrument is treated as European unless overridden by @ref Option. */ + [[nodiscard]] virtual Exercise::Type exerciseType() const { return Exercise::Type::European; } + protected: double maturity_; std::unique_ptr payoff_; diff --git a/src/MarketData.cpp b/cpp/MarketData.cpp similarity index 78% rename from src/MarketData.cpp rename to cpp/MarketData.cpp index 16bf3c4..ea07d0e 100644 --- a/src/MarketData.cpp +++ b/cpp/MarketData.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file MarketData.cpp + * @brief @ref MarketData accessors. + */ #include "MarketData.hpp" diff --git a/src/MarketData.hpp b/cpp/MarketData.hpp similarity index 82% rename from src/MarketData.hpp rename to cpp/MarketData.hpp index 9b8d200..bff093b 100644 --- a/src/MarketData.hpp +++ b/cpp/MarketData.hpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file MarketData.hpp + * @brief Spot, discount curve, and volatility surface bundle. + */ #ifndef QUANTENGINE_MARKETDATA_HPP #define QUANTENGINE_MARKETDATA_HPP @@ -8,6 +9,9 @@ #include "VolatilitySurface.hpp" #include +/** + * @brief Immutable snapshot of inputs needed to simulate or price. + */ class MarketData { public: MarketData() = delete; diff --git a/src/MonteCarloEngine.cpp b/cpp/MonteCarloEngine.cpp similarity index 88% rename from src/MonteCarloEngine.cpp rename to cpp/MonteCarloEngine.cpp index 22b2611..d97c946 100644 --- a/src/MonteCarloEngine.cpp +++ b/cpp/MonteCarloEngine.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file MonteCarloEngine.cpp + * @brief Monte Carlo mean estimator with discounting. + */ #include "MonteCarloEngine.hpp" #include diff --git a/src/MonteCarloEngine.hpp b/cpp/MonteCarloEngine.hpp similarity index 73% rename from src/MonteCarloEngine.hpp rename to cpp/MonteCarloEngine.hpp index 91c1c3b..10dcb2e 100644 --- a/src/MonteCarloEngine.hpp +++ b/cpp/MonteCarloEngine.hpp @@ -1,13 +1,16 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file MonteCarloEngine.hpp + * @brief Monte Carlo pricing using a @ref StochasticProcess and @ref RandomGenerator. + */ #ifndef QUANTENGINE_MONTECARLOENGINE_HPP #define QUANTENGINE_MONTECARLOENGINE_HPP #include "PricingEngine.hpp" #include "RandomGenerator.hpp" - +/** + * @brief Simple path simulation: one Euler/exact step to horizon, average discounted payoff. + */ class MonteCarloEngine : public PricingEngine{ public: MonteCarloEngine() = default; diff --git a/cpp/NewtonSolver.cpp b/cpp/NewtonSolver.cpp new file mode 100644 index 0000000..325fb28 --- /dev/null +++ b/cpp/NewtonSolver.cpp @@ -0,0 +1,8 @@ +/** + * @file NewtonSolver.cpp + * @brief Placeholder translation unit for @ref NewtonSolver. + */ + +#include "NewtonSolver.hpp" + + diff --git a/src/NewtonSolver.hpp b/cpp/NewtonSolver.hpp similarity index 74% rename from src/NewtonSolver.hpp rename to cpp/NewtonSolver.hpp index 1e36680..0c4a9e2 100644 --- a/src/NewtonSolver.hpp +++ b/cpp/NewtonSolver.hpp @@ -1,12 +1,16 @@ -// -// Created by David Doebel on 13.03.2026. -// +/** + * @file NewtonSolver.hpp + * @brief Generic Newton iteration helper (incomplete / reserved for solvers). + */ #ifndef QUANTENGINE_GAUSSSOLVER_HPP #define QUANTENGINE_GAUSSSOLVER_HPP #include +/** + * @brief Template Newton step loop with relative/absolute tolerances. + */ class NewtonSolver { template bool solve(F&& func, DFinv&& dfinv,T x0 , double rtol, double atol) { diff --git a/src/Option.cpp b/cpp/Option.cpp similarity index 80% rename from src/Option.cpp rename to cpp/Option.cpp index fb2e80b..58643b3 100644 --- a/src/Option.cpp +++ b/cpp/Option.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Option.cpp + * @brief @ref Option implementation. + */ #include "Option.hpp" diff --git a/src/Option.hpp b/cpp/Option.hpp similarity index 63% rename from src/Option.hpp rename to cpp/Option.hpp index 49603e6..5e6c500 100644 --- a/src/Option.hpp +++ b/cpp/Option.hpp @@ -1,12 +1,16 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Option.hpp + * @brief Option instrument with exercise style (@ref Exercise). + */ #ifndef QUANTENGINE_OPTION_HPP #define QUANTENGINE_OPTION_HPP #include "Instrument.hpp" #include "Exercise.hpp" +/** + * @brief Extends @ref Instrument with exercise schedule / style metadata. + */ class Option : public Instrument{ public: Option() = default; @@ -17,10 +21,13 @@ public: return *exercise_; } + [[nodiscard]] Exercise::Type exerciseType() const override { return exercise_->type(); } + protected: std::unique_ptr exercise_; }; +/** @brief Plain-vanilla option using the base @ref Option constructor. */ class VanillaOption : public Option { public: using Option::Option; diff --git a/src/Payoff.cpp b/cpp/Payoff.cpp similarity index 80% rename from src/Payoff.cpp rename to cpp/Payoff.cpp index 5cb22e3..65a7111 100644 --- a/src/Payoff.cpp +++ b/cpp/Payoff.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Payoff.cpp + * @brief Payoff function implementations. + */ #include "Payoff.hpp" #include diff --git a/src/Payoff.hpp b/cpp/Payoff.hpp similarity index 56% rename from src/Payoff.hpp rename to cpp/Payoff.hpp index cf58cce..3b3bbc6 100644 --- a/src/Payoff.hpp +++ b/cpp/Payoff.hpp @@ -1,11 +1,19 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file Payoff.hpp + * @brief Payoff interface and standard European payoffs (call, put, digital). + */ #ifndef QUANTENGINE_PAYOFF_HPP #define QUANTENGINE_PAYOFF_HPP +/** + * @brief Standard payoff shapes for routing (e.g. analytic vs Monte Carlo). + */ +enum class PayoffKind { Call, Put, Digital }; +/** + * @brief Terminal payoff as a function of spot @f$S_T@f$. + */ class Payoff { public: @@ -14,35 +22,42 @@ public: virtual ~Payoff() = default; virtual double operator()(double S) = 0; virtual double strike() = 0; + [[nodiscard]] virtual PayoffKind kind() const = 0; }; +/** @brief Standard European call @f$\max(S-K,0)@f$. */ class CallPayoff : public Payoff { public: CallPayoff() = default; CallPayoff(double strike) : strike_(strike) {} double operator()(double S) override; double strike() override {return strike_;} + [[nodiscard]] PayoffKind kind() const override { return PayoffKind::Call; } private: double strike_; }; +/** @brief Standard European put @f$\max(K-S,0)@f$. */ class PutPayoff : public Payoff { public: PutPayoff() = default; PutPayoff(double strike) : strike_(strike) {} double operator()(double S) override; double strike() override {return strike_;} + [[nodiscard]] PayoffKind kind() const override { return PayoffKind::Put; } private: double strike_; }; +/** @brief Digital (cash-or-nothing style) payoff @f$1_{S>K}@f$. */ class DigitalPayoff : public Payoff { public: DigitalPayoff() = default; DigitalPayoff(double strike) : strike_(strike) {} double operator()(double S) override; double strike() override {return strike_;} + [[nodiscard]] PayoffKind kind() const override { return PayoffKind::Digital; } private: double strike_; }; diff --git a/cpp/PricingEngine.cpp b/cpp/PricingEngine.cpp new file mode 100644 index 0000000..6a6699d --- /dev/null +++ b/cpp/PricingEngine.cpp @@ -0,0 +1,6 @@ +/** + * @file PricingEngine.cpp + * @brief @ref PricingEngine translation unit (interface only). + */ + +#include "PricingEngine.hpp" \ No newline at end of file diff --git a/src/PricingEngine.hpp b/cpp/PricingEngine.hpp similarity index 72% rename from src/PricingEngine.hpp rename to cpp/PricingEngine.hpp index 06bc254..e3d3c3b 100644 --- a/src/PricingEngine.hpp +++ b/cpp/PricingEngine.hpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file PricingEngine.hpp + * @brief Abstract pricer for @ref Instrument given a stochastic model. + */ #ifndef QUANTENGINE_PRICINGENGINE_HPP #define QUANTENGINE_PRICINGENGINE_HPP @@ -10,6 +11,9 @@ class Instrument; +/** + * @brief Computes model price of an instrument (e.g. Monte Carlo, PDE, closed form). + */ class PricingEngine { public: PricingEngine() = default; diff --git a/src/RandomGenerator.cpp b/cpp/RandomGenerator.cpp similarity index 77% rename from src/RandomGenerator.cpp rename to cpp/RandomGenerator.cpp index 55f0043..59f6c52 100644 --- a/src/RandomGenerator.cpp +++ b/cpp/RandomGenerator.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file RandomGenerator.cpp + * @brief @ref MersenneTwister implementation. + */ #include "RandomGenerator.hpp" diff --git a/src/RandomGenerator.hpp b/cpp/RandomGenerator.hpp similarity index 75% rename from src/RandomGenerator.hpp rename to cpp/RandomGenerator.hpp index e4df117..0f9aaed 100644 --- a/src/RandomGenerator.hpp +++ b/cpp/RandomGenerator.hpp @@ -1,11 +1,13 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file RandomGenerator.hpp + * @brief Random numbers for Monte Carlo (Gaussian draws). + */ #ifndef QUANTENGINE_RANDOMGENERATOR_HPP #define QUANTENGINE_RANDOMGENERATOR_HPP #include +/** @brief Interface for standard normal variates. */ class RandomGenerator { public: RandomGenerator() = default; @@ -14,6 +16,7 @@ public: virtual std::vector nextGaussianVector(std::size_t n) = 0; }; +/** @brief @c std::mt19937 with normal distribution. */ class MersenneTwister : public RandomGenerator { public: MersenneTwister() = default; diff --git a/src/Statistics.cpp b/cpp/Statistics.cpp similarity index 90% rename from src/Statistics.cpp rename to cpp/Statistics.cpp index 0578fe1..89b39cd 100644 --- a/src/Statistics.cpp +++ b/cpp/Statistics.cpp @@ -1,6 +1,7 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file Statistics.cpp + * @brief Streaming moment and extrema updates. + */ #include "Statistics.hpp" diff --git a/src/Statistics.hpp b/cpp/Statistics.hpp similarity index 74% rename from src/Statistics.hpp rename to cpp/Statistics.hpp index a4de629..e1aba3a 100644 --- a/src/Statistics.hpp +++ b/cpp/Statistics.hpp @@ -1,12 +1,15 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file Statistics.hpp + * @brief Online sample moments for Monte Carlo diagnostics. + */ #ifndef QUANTENGINE_STATISTICS_HPP #define QUANTENGINE_STATISTICS_HPP #include - +/** + * @brief Accumulates count, mean/variance-related sums, and running min/max. + */ class Statistics { public: Statistics() : moments_({0., 0., 0.}), n(0), max_(0.), min_(0.) {} diff --git a/cpp/StochasticProcess.cpp b/cpp/StochasticProcess.cpp new file mode 100644 index 0000000..0839005 --- /dev/null +++ b/cpp/StochasticProcess.cpp @@ -0,0 +1,6 @@ +/** + * @file StochasticProcess.cpp + * @brief @ref StochasticProcess translation unit (interface only). + */ + +#include "StochasticProcess.hpp" \ No newline at end of file diff --git a/src/StochasticProcess.hpp b/cpp/StochasticProcess.hpp similarity index 77% rename from src/StochasticProcess.hpp rename to cpp/StochasticProcess.hpp index a0ebb49..f9b8e80 100644 --- a/src/StochasticProcess.hpp +++ b/cpp/StochasticProcess.hpp @@ -1,12 +1,16 @@ -// -// Created by David Doebel on 05.03.2026. -// +/** + * @file StochasticProcess.hpp + * @brief Interface for SDE drift, diffusion, and time stepping. + */ #ifndef QUANTENGINE_STOCHASTICPROCESS_HPP #define QUANTENGINE_STOCHASTICPROCESS_HPP #include "MarketData.hpp" #include +/** + * @brief Stochastic model for the underlying, driven by @ref MarketData. + */ class StochasticProcess { public: StochasticProcess() = delete; diff --git a/cpp/VolatilitySurface.cpp b/cpp/VolatilitySurface.cpp new file mode 100644 index 0000000..f66c6b3 --- /dev/null +++ b/cpp/VolatilitySurface.cpp @@ -0,0 +1,6 @@ +/** + * @file VolatilitySurface.cpp + * @brief @ref VolatilitySurface translation unit (interface only). + */ + +#include "VolatilitySurface.hpp" \ No newline at end of file diff --git a/cpp/VolatilitySurface.hpp b/cpp/VolatilitySurface.hpp new file mode 100644 index 0000000..5c6f2be --- /dev/null +++ b/cpp/VolatilitySurface.hpp @@ -0,0 +1,28 @@ +/** + * @file VolatilitySurface.hpp + * @brief Implied volatility as a function of strike and expiry. + */ + +#ifndef QUANTENGINE_VOLATILITYSURFACE_HPP +#define QUANTENGINE_VOLATILITYSURFACE_HPP +#include + +/** + * @brief Local/vol surface @f$\sigma(K,T)@f$ used by simulation. + */ +class VolatilitySurface { +public: + virtual ~VolatilitySurface() = default; + virtual double sigma(double K, double T) const = 0; +private: + +}; + +class SVI : public VolatilitySurface { +public: + SVI() = default; + SVI(std::vector K, std::vector rho, std::vector S, std::vector T); +}; + + +#endif //QUANTENGINE_VOLATILITYSURFACE_HPP diff --git a/cpp/YieldCurve.cpp b/cpp/YieldCurve.cpp new file mode 100644 index 0000000..fe80603 --- /dev/null +++ b/cpp/YieldCurve.cpp @@ -0,0 +1,6 @@ +/** + * @file YieldCurve.cpp + * @brief @ref YieldCurve translation unit (interface only). + */ + +#include "YieldCurve.hpp" \ No newline at end of file diff --git a/src/YieldCurve.hpp b/cpp/YieldCurve.hpp similarity index 78% rename from src/YieldCurve.hpp rename to cpp/YieldCurve.hpp index 7853382..7221b96 100644 --- a/src/YieldCurve.hpp +++ b/cpp/YieldCurve.hpp @@ -1,11 +1,14 @@ -// -// Created by David Doebel on 06.03.2026. -// +/** + * @file YieldCurve.hpp + * @brief Abstract yield curve: discount factors and zero rates. + */ #ifndef QUANTENGINE_YIELDCURVE_HPP #define QUANTENGINE_YIELDCURVE_HPP - +/** + * @brief Risk-free rate term structure for discounting and risk-neutral drift. + */ class YieldCurve { public: YieldCurve() = default; diff --git a/docs/Doxyfile b/docs/Doxyfile new file mode 100644 index 0000000..e75341e --- /dev/null +++ b/docs/Doxyfile @@ -0,0 +1,50 @@ +# Doxygen configuration for QuantEngine (option_pricing). +# Run from repo root: doxygen docs/Doxyfile +# Or: cmake --build build --target docs + +PROJECT_NAME = QuantEngine +PROJECT_BRIEF = "Monte Carlo option pricing, market data abstractions, and Python bindings" + +OUTPUT_DIRECTORY = docs/html +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = YES + +JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO +OPTIMIZE_OUTPUT_FOR_CPLUSPLUS = YES + +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = + +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_NO_PARAMDOC = NO + +INPUT = cpp +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.cpp *.hpp *.h +RECURSIVE = YES + +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = + +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_COLORSTYLE_HUE = 220 +GENERATE_LATEX = NO + +SEARCHENGINE = YES + +SOURCE_BROWSER = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES + +ALPHABETICAL_INDEX = YES +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO + +CLASS_DIAGRAMS = YES +HAVE_DOT = NO + +PREDEFINED = DOXYGEN diff --git a/qengine/__init__.py b/qengine/__init__.py new file mode 100644 index 0000000..c4cb10e --- /dev/null +++ b/qengine/__init__.py @@ -0,0 +1,5 @@ +"""Qengine: quant pricing backend (native extension in qengine.qengine).""" + +from .qengine import bs_price + +__all__ = ["bs_price"] diff --git a/scripts/test_qengine_bindings.py b/scripts/test_qengine_bindings.py new file mode 100644 index 0000000..a523de8 --- /dev/null +++ b/scripts/test_qengine_bindings.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Smoke test: use an installed `qengine` package (pip install .) or a dev build (cmake -> qengine/*.so).""" + +from __future__ import annotations + +import math +import sys +from pathlib import Path + +# Running `python scripts/this.py` puts `scripts/` on sys.path, not the repo root +_REPO_ROOT = Path(__file__).resolve().parents[1] +if str(_REPO_ROOT) not in sys.path: + sys.path.insert(0, str(_REPO_ROOT)) + + +def main() -> int: + try: + import qengine + except ImportError as e: + print( + f"Import failed ({e}). Install the package (pip install .) or build with CMake so " + "qengine/qengine.*.so exists next to qengine/__init__.py.", + file=sys.stderr, + ) + return 1 + + call = qengine.bs_price(100.0, 100.0, 1.0, 0.05, 0.2, True) + put = qengine.bs_price(100.0, 100.0, 1.0, 0.05, 0.2, False) + batch_list = qengine.bs_price( + [100.0, 100.0], + [100.0, 110.0], + [1.0, 1.0], + [0.05, 0.05], + [0.2, 0.2], + [True, False], + ) + + assert math.isfinite(call) and math.isfinite(put) + assert len(batch_list) == 2 and all(math.isfinite(x) for x in batch_list) + + print("qengine.bs_price (call):", call) + print("qengine.bs_price (put):", put) + print("qengine.bs_price (list batch):", list(batch_list)) + + try: + import numpy as np + except ImportError: + print("ok: overloads callable (NumPy not installed; skipped ndarray batch test).") + return 0 + + s = np.array([100.0, 100.0], dtype=np.float64) + k = np.array([100.0, 110.0], dtype=np.float64) + t = np.array([1.0, 1.0], dtype=np.float64) + r = np.array([0.05, 0.05], dtype=np.float64) + sig = np.array([0.2, 0.2], dtype=np.float64) + opt = np.array([True, False], dtype=bool) + batch_np = qengine.bs_price(s, k, t, r, sig, opt) + assert len(batch_np) == 2 and all(math.isfinite(float(x)) for x in batch_np) + print("qengine.bs_price (ndarray batch):", [float(x) for x in batch_np]) + print("ok: overloads callable.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 030c61a..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -add_library(qengine - Instrument.cpp - Instrument.hpp - Payoff.cpp - Payoff.hpp - Option.cpp - Option.hpp - PricingEngine.cpp - PricingEngine.hpp - MonteCarloEngine.cpp - MonteCarloEngine.hpp - StochasticProcess.cpp - StochasticProcess.hpp - Exercise.cpp - Exercise.hpp - MarketData.cpp - MarketData.hpp - YieldCurve.cpp - YieldCurve.hpp - VolatilitySurface.cpp - VolatilitySurface.hpp - RandomGenerator.cpp - RandomGenerator.hpp - Statistics.cpp - Statistics.hpp - BlackScholesProcess.cpp - BlackScholesProcess.hpp - DBIngest.cpp - DBIngest.hpp - GaussSolver.cpp - GaussSolver.hpp - - -) - -target_include_directories(qengine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -target_include_directories(qengine PRIVATE - /opt/homebrew/include -) -target_link_libraries(qengine Eigen3::Eigen) -target_link_libraries(qengine pqxx pq) \ No newline at end of file diff --git a/src/Exercise.cpp b/src/Exercise.cpp deleted file mode 100644 index fdadc45..0000000 --- a/src/Exercise.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by David Doebel on 05.03.2026. -// - -#include "Exercise.hpp" \ No newline at end of file diff --git a/src/NewtonSolver.cpp b/src/NewtonSolver.cpp deleted file mode 100644 index eeb97c2..0000000 --- a/src/NewtonSolver.cpp +++ /dev/null @@ -1,7 +0,0 @@ -// -// Created by David Doebel on 13.03.2026. -// - -#include "NewtonSolver.hpp" - - diff --git a/src/PricingEngine.cpp b/src/PricingEngine.cpp deleted file mode 100644 index bdcf247..0000000 --- a/src/PricingEngine.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by David Doebel on 05.03.2026. -// - -#include "PricingEngine.hpp" \ No newline at end of file diff --git a/src/StochasticProcess.cpp b/src/StochasticProcess.cpp deleted file mode 100644 index 52947c3..0000000 --- a/src/StochasticProcess.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by David Doebel on 05.03.2026. -// - -#include "StochasticProcess.hpp" \ No newline at end of file diff --git a/src/VolatilitySurface.cpp b/src/VolatilitySurface.cpp deleted file mode 100644 index c719fbc..0000000 --- a/src/VolatilitySurface.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by David Doebel on 06.03.2026. -// - -#include "VolatilitySurface.hpp" \ No newline at end of file diff --git a/src/VolatilitySurface.hpp b/src/VolatilitySurface.hpp deleted file mode 100644 index 438df63..0000000 --- a/src/VolatilitySurface.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// Created by David Doebel on 06.03.2026. -// - -#ifndef QUANTENGINE_VOLATILITYSURFACE_HPP -#define QUANTENGINE_VOLATILITYSURFACE_HPP - - -class VolatilitySurface { -public: - virtual ~VolatilitySurface() = default; - virtual double sigma(double K, double T) const = 0; -private: - -}; - - -#endif //QUANTENGINE_VOLATILITYSURFACE_HPP diff --git a/src/YieldCurve.cpp b/src/YieldCurve.cpp deleted file mode 100644 index b4e73c3..0000000 --- a/src/YieldCurve.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by David Doebel on 06.03.2026. -// - -#include "YieldCurve.hpp" \ No newline at end of file diff --git a/tests/test_black_scholes.cpp b/tests/test_black_scholes.cpp index b9f0f01..725acbe 100644 --- a/tests/test_black_scholes.cpp +++ b/tests/test_black_scholes.cpp @@ -3,6 +3,7 @@ // #include +#include "BlackScholesClosedFormEngine.hpp" #include "BlackScholesProcess.hpp" #include "MonteCarloEngine.hpp" #include "Instrument.hpp" @@ -51,3 +52,28 @@ TEST(BlackScholesProcess, ExpectedValue) { ASSERT_NEAR(callPrice, callGT, tol); ASSERT_NEAR(putPrice, putGT, tol); } + +TEST(BlackScholesClosedForm, MatchesReference) { + const double K = 100.0; + const double T = 1.0; + + const MarketData marketData( + 100.0, + std::make_shared(0.01), + std::make_shared(0.2)); + + auto processCall = std::make_unique(marketData); + auto processPut = std::make_unique(marketData); + + auto analyticCall = std::make_unique(std::move(processCall)); + auto analyticPut = std::make_unique(std::move(processPut)); + + Instrument callInstr(T, std::make_unique(K), std::move(analyticCall)); + Instrument putInstr(T, std::make_unique(K), std::move(analyticPut)); + + const double callGT = 8.4333186901; + const double putGT = 7.4383020650; + + ASSERT_NEAR(callInstr.price(), callGT, 1e-9); + ASSERT_NEAR(putInstr.price(), putGT, 1e-9); +} From e9b3a4aac3f30754ca7ea0e54db8e61d46dc2920 Mon Sep 17 00:00:00 2001 From: David Doebel Date: Thu, 2 Apr 2026 16:30:43 +0200 Subject: [PATCH 2/5] Add Python implied-volatility package and data analysis pipeline. Introduce the SVI/implied-vol modules as a package, update project metadata, and add loading/processing utilities that connect database snapshots to calibration workflows. Made-with: Cursor --- pyproject.toml | 24 + src/ImpliedVolatility/__init__.py | 0 src/ImpliedVolatility/compute_vls.py | 49 ++ src/ImpliedVolatility/setup.py | 0 src/ImpliedVolatility/svi.py | 1023 ++++++++++++++++++++++++++ src/__init__.py | 0 src/data/load_data.py | 436 +++++++++++ 7 files changed, 1532 insertions(+) create mode 100644 pyproject.toml create mode 100644 src/ImpliedVolatility/__init__.py create mode 100644 src/ImpliedVolatility/compute_vls.py create mode 100644 src/ImpliedVolatility/setup.py create mode 100644 src/ImpliedVolatility/svi.py create mode 100644 src/__init__.py create mode 100644 src/data/load_data.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..cc96816 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,24 @@ +[build-system] +requires = ["scikit-build-core>=0.5", "pybind11"] +build-backend = "scikit_build_core.build" + +[project] +name = "qengine" +version = "0.1.0" +description = "Quant engine with C++ backend" +authors = [{name = "David"}] +requires-python = ">=3.10" +dependencies = [ + "numpy", + "pandas", + "sqlalchemy", + "psycopg2-binary", + "yfinance", +] + +[tool.scikit-build] +# Keep separate from a local `cmake -B build` tree (different generators: Ninja vs Makefiles). +build-dir = "skbuild-build" +cmake.version = ">=3.16" +cmake.build-type = "Release" +cmake.define.BUILD_TESTING = "OFF" diff --git a/src/ImpliedVolatility/__init__.py b/src/ImpliedVolatility/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ImpliedVolatility/compute_vls.py b/src/ImpliedVolatility/compute_vls.py new file mode 100644 index 0000000..ef68ed2 --- /dev/null +++ b/src/ImpliedVolatility/compute_vls.py @@ -0,0 +1,49 @@ +import numpy as np +import qengine +from scipy.optimize import brentq + + +def implied_vol(price, S, K, T, r, call): + """ + Implied vol for each row. Arguments may be scalars or 1-D arrays-like (same length). + """ + price = np.asarray(price, dtype=np.float64) + S = np.asarray(S, dtype=np.float64) + K = np.asarray(K, dtype=np.float64) + T = np.asarray(T, dtype=np.float64) + call = np.asarray(call, dtype=bool) + r = float(r) + + scalar_in = price.ndim == 0 + if scalar_in: + price = np.atleast_1d(price) + S = np.atleast_1d(S) + K = np.atleast_1d(K) + T = np.atleast_1d(T) + call = np.atleast_1d(call) + + n = price.shape[0] + if (S.shape[0] != n or K.shape[0] != n or T.shape[0] != n or call.shape[0] != n): + raise ValueError( + f"implied_vol: length mismatch price={n}, S={S.shape[0]}, K={K.shape[0]}, " + f"T={T.shape[0]}, call={call.shape[0]}" + ) + + out = np.full(n, np.nan, dtype=np.float64) + for i in range(n): + p, s, k, t, c = float(price[i]), float(S[i]), float(K[i]), float(T[i]), bool(call[i]) + if not np.isfinite(p) or not np.isfinite(s) or not np.isfinite(k) or not np.isfinite(t): + continue + if s <= 0 or k <= 0 or t <= 0: + continue + try: + def f(sig: float) -> float: + return qengine.bs_price(s, k, t, r, sig, c) - p + + out[i] = brentq(f, 1e-6, 5.0) + except (ValueError, RuntimeError): + out[i] = np.nan + + if scalar_in: + return float(out[0]) + return out diff --git a/src/ImpliedVolatility/setup.py b/src/ImpliedVolatility/setup.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ImpliedVolatility/svi.py b/src/ImpliedVolatility/svi.py new file mode 100644 index 0000000..dab56f5 --- /dev/null +++ b/src/ImpliedVolatility/svi.py @@ -0,0 +1,1023 @@ +import numpy as np +import pandas as pd +from scipy.optimize import least_squares, minimize + +# --------------------------------------------------------------------------- +# Core SVI math +# --------------------------------------------------------------------------- + + +def svi_total_variance( + k: np.ndarray, + a: float, + b: float, + rho: float, + m: float, + sigma: float, +) -> np.ndarray: + """Total variance w(k) = a + b * (rho * (k - m) + sqrt((k - m)^2 + sigma^2)).""" + km = k - m + root = np.sqrt(km**2 + sigma**2) + return a + b * (rho * km + root) + + +def svi_jacobian_params( + k: np.ndarray, a: float, b: float, rho: float, m: float, sigma: float +) -> np.ndarray: + """Jacobian (n, 5): columns [da, db, drho, dm, dsigma] of w(k).""" + km = k - m + root = np.maximum(np.sqrt(km**2 + sigma**2), 1e-14) + return np.column_stack( + [ + np.ones_like(k), + rho * km + root, + b * km, + -b * (rho + km / root), + b * (sigma / root), + ] + ) + + +def log_forward_moneyness( + strike: np.ndarray, + spot: np.ndarray, + T: np.ndarray, + r: float, +) -> np.ndarray: + """k = log(K / F) with F = S * exp(r * T).""" + fwd = spot * np.exp(r * np.asarray(T, dtype=np.float64)) + return np.log(np.asarray(strike, dtype=np.float64) / fwd) + + +def total_variance_from_iv(iv: np.ndarray, T: np.ndarray) -> np.ndarray: + """w = sigma^2 * T.""" + iv = np.asarray(iv, dtype=np.float64) + T = np.asarray(T, dtype=np.float64) + return iv**2 * T + + +# --------------------------------------------------------------------------- +# Data preparation (load_data.merge + compute_iv output) +# --------------------------------------------------------------------------- + + +def prepare_svi_inputs( + df: pd.DataFrame, + *, + spot_col: str = "spot", + strike_col: str = "strike", + T_col: str = "T", + iv_col: str = "iv", + r: float = 0.05, + spread_col: Optional[str] = "spread", +) -> pd.DataFrame: + """ + Add columns ``log_moneyness`` (k = log K/F) and ``total_var`` (w = iv^2 T). + If ``spread_col`` is present, adds ``svi_weight`` ~ 1 / spread^2 for weighted fits. + Drops rows with non-finite inputs or non-positive T. + """ + out = df.copy() + S = out[spot_col].to_numpy(dtype=np.float64) + K = out[strike_col].to_numpy(dtype=np.float64) + T = out[T_col].to_numpy(dtype=np.float64) + iv = out[iv_col].to_numpy(dtype=np.float64) + + valid = ( + np.isfinite(S) + & np.isfinite(K) + & np.isfinite(T) + & np.isfinite(iv) + & (S > 0) + & (K > 0) + & (T > 0) + & (iv > 0) + ) + out = out.loc[valid].copy() + S = out[spot_col].to_numpy(dtype=np.float64) + K = out[strike_col].to_numpy(dtype=np.float64) + T = out[T_col].to_numpy(dtype=np.float64) + iv = out[iv_col].to_numpy(dtype=np.float64) + + out["log_moneyness"] = log_forward_moneyness(K, S, T, r) + out["total_var"] = total_variance_from_iv(iv, T) + if spread_col and spread_col in out.columns: + sp = out[spread_col].to_numpy(dtype=np.float64) + out["svi_weight"] = 1.0 / np.maximum(sp**2, 1e-12) + return out + + +# --------------------------------------------------------------------------- +# Loss helpers (optional smooth Huber-style path via L-BFGS-B) +# --------------------------------------------------------------------------- + + +def huber_loss(residual: np.ndarray, delta: float = 0.01) -> np.ndarray: + ar = np.abs(residual) + return np.where(ar < delta, 0.5 * residual**2, delta * (ar - 0.5 * delta)) + + +def svi_huber_objective( + x: np.ndarray, + k: np.ndarray, + w_obs: np.ndarray, + sqrt_wts: np.ndarray, + lam: float, +) -> float: + a, b, rho, m, sigma = x + if b <= 0 or sigma <= 0 or abs(rho) >= 1.0: + return 1e12 + w_fit = svi_total_variance(k, a, b, rho, m, sigma) + resid = w_fit - w_obs + loss = np.mean(huber_loss(sqrt_wts * resid / (np.mean(sqrt_wts) + 1e-12))) + reg = lam * (a**2 + b**2 + m**2 + sigma**2) + return float(loss + reg) + + +# --------------------------------------------------------------------------- +# Fitting +# --------------------------------------------------------------------------- + + +@dataclass +class SVIParams: + a: float + b: float + rho: float + m: float + sigma: float + + def total_var(self, k: np.ndarray) -> np.ndarray: + return svi_total_variance(k, self.a, self.b, self.rho, self.m, self.sigma) + + +@dataclass +class SVISliceFit: + """Single-expiry calibration result.""" + + params: SVIParams + success: bool + cost: float + message: str + n_points: int + T_mean: float + group_key: str + + +@dataclass +class SVISurfaceFit: + slices: list[SVISliceFit] + meta: Mapping[str, object] + + +def _butterfly_constraints_ok(a: float, b: float, rho: float, m: float, sigma: float) -> bool: + """ + Gatheral-style no-butterfly constraints for raw SVI: + + - b > 0, sigma > 0, |rho| < 1 + - a + b*sigma*sqrt(1-rho^2) >= 0 (minimum variance >= 0) + - b*(1+|rho|) < 2 (wing slopes controlled) + """ + if not (b > 0.0 and sigma > 0.0 and abs(rho) < 1.0): + return False + if a + b * sigma * np.sqrt(max(1.0 - rho * rho, 0.0)) < 0.0: + return False + if b * (1.0 + abs(rho)) >= 2.0: + return False + return True + + +def _butterfly_violation_terms(a: float, b: float, rho: float, m: float, sigma: float) -> np.ndarray: + """ + Soft butterfly / wing violations as non-negative terms v_i such that + sum(v_i**2) is the arbitrage penalty used in the loss. + """ + # minimum variance >= 0 + min_var = a + b * sigma * np.sqrt(max(1.0 - rho * rho, 0.0)) + v_min = max(0.0, -min_var) + # wing slope constraint b(1+|rho|) < 2 + wing = b * (1.0 + abs(rho)) - 2.0 + v_wing = max(0.0, wing) + return np.array([v_min, v_wing], dtype=np.float64) + + +def _initial_guess(k: np.ndarray, w: np.ndarray) -> np.ndarray: + m0 = float(np.average(k, weights=np.clip(w, 1e-6, None))) + a0 = float(np.clip(np.percentile(w, 35), 1e-6, None)) + b0 = 0.25 + rho0 = -0.4 + sigma0 = 0.15 + return np.array([a0, b0, rho0, m0, sigma0], dtype=np.float64) + + +def _bounds(k: np.ndarray, w: np.ndarray) -> tuple[np.ndarray, np.ndarray]: + w_max = float(np.max(w) * 1.5 + 0.1) + km = float(np.max(np.abs(k)) + 0.25) + lo = np.array([0.0, 1e-5, -0.999, -km, 1e-4], dtype=np.float64) + hi = np.array([w_max, 10.0, 0.999, km, 5.0], dtype=np.float64) + return lo, hi + + +def fit_svi_slice( + k: np.ndarray, + w_obs: np.ndarray, + *, + weights: Optional[np.ndarray] = None, + sqrt_weights: Optional[np.ndarray] = None, + huber_delta: float = 0.02, + reg_lambda: float = 1e-6, + method: str = "least_squares", + verbose: int = 0, +) -> tuple[SVIParams, object]: + """ + Calibrate one SVI slice. + + Parameters + ---------- + method + ``least_squares`` — recommended (soft_l1 + analytic Jacobian). + ``lbfgs`` — smooth Huber objective with L-BFGS-B (bounds). + """ + k = np.asarray(k, dtype=np.float64).ravel() + w_obs = np.asarray(w_obs, dtype=np.float64).ravel() + if k.shape != w_obs.shape: + raise ValueError("k and w_obs must have the same shape") + + if sqrt_weights is not None: + sw = np.asarray(sqrt_weights, dtype=np.float64).ravel() + elif weights is not None: + wts = np.asarray(weights, dtype=np.float64).ravel() + sw = np.sqrt(np.maximum(wts, 1e-12)) + else: + sw = np.ones_like(w_obs) + + mask = np.isfinite(k) & np.isfinite(w_obs) & (w_obs > 0) & np.isfinite(sw) + k, w_obs, sw = k[mask], w_obs[mask], sw[mask] + if k.size < 5: + raise ValueError("Need at least 5 valid points to fit SVI") + + x0 = _initial_guess(k, w_obs) + lo, hi = _bounds(k, w_obs) + + if method == "least_squares": + + def residuals(x: np.ndarray) -> np.ndarray: + a, b, rho, m, sig = x + wf = svi_total_variance(k, a, b, rho, m, sig) + if not np.all(np.isfinite(wf)) or np.any(wf <= 0.0): + return np.full_like(w_obs, 1e3) + return sw * (wf - w_obs) + + def jac(x: np.ndarray) -> np.ndarray: + a, b, rho, m, sig = x + jw = svi_jacobian_params(k, a, b, rho, m, sig) + return sw[:, None] * jw + + sol = least_squares( + lambda x: np.concatenate( + [ + residuals(x), + ( + np.sqrt(reg_lambda) * _butterfly_violation_terms(*x) + if reg_lambda > 0.0 + else np.zeros(2, dtype=np.float64) + ), + ] + ), + x0, + bounds=(lo, hi), + loss="soft_l1", + f_scale=huber_delta, + ftol=1e-10, + xtol=1e-10, + gtol=1e-10, + verbose=verbose, + max_nfev=2000, + ) + x = sol.x + params = SVIParams(float(x[0]), float(x[1]), float(x[2]), float(x[3]), float(x[4])) + return params, sol + + if method == "lbfgs": + + def obj_lbfgs(x: np.ndarray) -> float: + a, b, rho, m, sig = x + base = svi_huber_objective(x, k, w_obs, sw, reg_lambda) + # soft butterfly / wing penalty (same reg_lambda weight) + if reg_lambda > 0.0: + v = _butterfly_violation_terms(a, b, rho, m, sig) + base += reg_lambda * float(np.sum(v * v)) + return base + + sol = minimize( + obj_lbfgs, + x0, + method="L-BFGS-B", + bounds=list(zip(lo, hi)), + options={"ftol": 1e-12, "maxiter": 1500}, + ) + x = sol.x + params = SVIParams(float(x[0]), float(x[1]), float(x[2]), float(x[3]), float(x[4])) + return params, sol + + raise ValueError(f"Unknown method: {method}") + + +def fit_svi_surface( + df: pd.DataFrame, + *, + group_col: str = "expiration_date", + T_col: str = "T", + weight_col: Optional[str] = "svi_weight", + min_points: int = 5, + fit_kwargs: Optional[dict] = None, +) -> SVISurfaceFit: + """ + Fit one SVI slice per expiry (or other grouping column). + + Expects columns from :func:`prepare_svi_inputs`: ``log_moneyness``, ``total_var``. + """ + fit_kwargs = fit_kwargs or {} + need = {"log_moneyness", "total_var"} + missing = need - set(df.columns) + if missing: + raise KeyError(f"DataFrame missing columns {missing}; run prepare_svi_inputs first") + + slices: list[SVISliceFit] = [] + + # sort groups by average maturity (for convenience only; no calendar coupling here) + grouped: list[tuple[object, pd.DataFrame, float]] = [] + for key, g in df.groupby(group_col, sort=True): + g = g.sort_values("log_moneyness") + T_mean = float(g[T_col].mean()) if T_col in g.columns else float("nan") + grouped.append((key, g, T_mean)) + + grouped.sort(key=lambda tup: tup[2]) + + for key, g, T_mean in grouped: + k = g["log_moneyness"].to_numpy(dtype=np.float64) + w = g["total_var"].to_numpy(dtype=np.float64) + if len(g) < min_points: + continue + try: + slice_kwargs = dict(fit_kwargs) if fit_kwargs else {} + if weight_col and weight_col in g.columns: + slice_kwargs = {**slice_kwargs, "weights": g[weight_col].to_numpy(dtype=np.float64)} + params, raw = fit_svi_slice(k, w, **slice_kwargs) + if hasattr(raw, "success"): + success = bool(raw.success) # type: ignore[attr-defined] + msg = str(getattr(raw, "message", "")) + cost = float(getattr(raw, "cost", np.nan)) # type: ignore[arg-type] + else: + success = True + msg = "" + cost = float("nan") + except ValueError as e: + slices.append( + SVISliceFit( + params=SVIParams(0, 0, 0, 0, 1), + success=False, + cost=float("nan"), + message=str(e), + n_points=len(g), + T_mean=T_mean, + group_key=str(key), + ) + ) + continue + + slices.append( + SVISliceFit( + params=params, + success=success, + cost=cost, + message=msg, + n_points=len(g), + T_mean=T_mean, + group_key=str(key), + ) + ) + + meta = {"group_col": group_col, "n_slices_attempted": df[group_col].nunique()} + return SVISurfaceFit(slices=slices, meta=meta) + + +# --------------------------------------------------------------------------- +# Output tables +# --------------------------------------------------------------------------- + + +def surface_params_dataframe(fit: SVISurfaceFit) -> pd.DataFrame: + """Wide table of calibrated parameters per slice.""" + rows = [] + for s in fit.slices: + p = s.params + rows.append( + { + "group_key": s.group_key, + "T_mean": s.T_mean, + "n_points": s.n_points, + "success": s.success, + "cost": s.cost, + "a": p.a, + "b": p.b, + "rho": p.rho, + "m": p.m, + "sigma": p.sigma, + "message": s.message, + } + ) + return pd.DataFrame(rows) + + +# --------------------------------------------------------------------------- +# Parameter smoothing across maturity (for calendar consistency diagnostics) +# --------------------------------------------------------------------------- + + +@dataclass +class SmoothedSVICurves: + T_knots: np.ndarray + a_spline: "UnivariateSpline" + logb_spline: "UnivariateSpline" + u_spline: "UnivariateSpline" # atanh(rho) + m_spline: "UnivariateSpline" + logsig_spline: "UnivariateSpline" + + def params_at(self, T: np.ndarray | float) -> SVIParams | list[SVIParams]: + T_arr = np.asarray(T, dtype=np.float64).ravel() + a = self.a_spline(T_arr) + b = np.exp(self.logb_spline(T_arr)) + rho = np.tanh(self.u_spline(T_arr)) + m = self.m_spline(T_arr) + sigma = np.exp(self.logsig_spline(T_arr)) + if T_arr.size == 1: + # a, b, rho, m, sigma are 1D arrays here; index the single element + return SVIParams( + float(a[0]), + float(b[0]), + float(rho[0]), + float(m[0]), + float(sigma[0]), + ) + return [SVIParams(float(ai), float(bi), float(ri), float(mi), float(si)) for ai, bi, ri, mi, si in zip(a, b, rho, m, sigma)] + + def total_var(self, k: np.ndarray, T: np.ndarray | float) -> np.ndarray: + T_arr = np.asarray(T, dtype=np.float64) + if T_arr.ndim == 0: + p = self.params_at(float(T_arr)) + return p.total_var(np.asarray(k, dtype=np.float64)) + # broadcast over grid (T_i, k_j) + k_arr = np.asarray(k, dtype=np.float64).ravel() + out = np.empty((T_arr.size, k_arr.size), dtype=np.float64) + for i, Ti in enumerate(T_arr.ravel()): + p = self.params_at(float(Ti)) + out[i, :] = p.total_var(k_arr) + return out + + +def smooth_svi_parameters( + params_df: pd.DataFrame, + *, + T_col: str = "T_mean", + smooth_factor_a: float = 1e-4, + smooth_factor_m: float = 1e-4, + smooth_factor_others: float = 0.0, + min_T: float = 0.0, + weight_col: str = "n_points", +) -> SmoothedSVICurves: + """ + Phase 4–5 from the note: + + - take per-slice parameter table (T, a, b, rho, m, sigma) + - apply transformations (log b, atanh rho, log sigma) + - spline-smooth each vs T. + """ + from scipy.interpolate import UnivariateSpline + + df = params_df.copy() + df = df[df["success"]].copy() + df = df[np.isfinite(df[T_col])] + df = df[df[T_col] > min_T] + if df.empty: + raise ValueError("smooth_svi_parameters: no valid slices after filtering.") + + df = df.sort_values(T_col).drop_duplicates(T_col) + T = df[T_col].to_numpy(dtype=np.float64) + a = df["a"].to_numpy(dtype=np.float64) + b = df["b"].to_numpy(dtype=np.float64) + rho = df["rho"].to_numpy(dtype=np.float64) + m = df["m"].to_numpy(dtype=np.float64) + sigma = df["sigma"].to_numpy(dtype=np.float64) + + # transformed parameters + # normalize b and sigma by sqrt(T) to stabilize term-structure behaviour + sqrtT = np.sqrt(np.maximum(T, 1e-8)) + logb = np.log(np.maximum(b / sqrtT, 1e-8)) + u = np.arctanh(np.clip(rho, -0.999, 0.999)) + logsig = np.log(np.maximum(sigma / sqrtT, 1e-6)) + + w = df[weight_col].to_numpy(dtype=np.float64) if weight_col in df.columns else None + + # first-pass light smoothing per parameter + a_spl_1 = UnivariateSpline(T, a, w=w, s=smooth_factor_a) + logb_spl_1 = UnivariateSpline(T, logb, w=w, s=smooth_factor_others) + u_spl_1 = UnivariateSpline(T, u, w=w, s=smooth_factor_others) + m_spl_1 = UnivariateSpline(T, m, w=w, s=smooth_factor_m) + logsig_spl_1 = UnivariateSpline(T, logsig, w=w, s=smooth_factor_others) + + a_s = a_spl_1(T) + logb_s = logb_spl_1(T) + u_s = u_spl_1(T) + m_s = m_spl_1(T) + logsig_s = logsig_spl_1(T) + + # enforce monotone ATM total variance by adjusting a(T) only + atm_w_raw = [] + for i, (ai, lbi, ui, mi, lsi) in enumerate(zip(a_s, logb_s, u_s, m_s, logsig_s)): + Ti = float(T[i]) + scale = np.sqrt(max(1e-8, Ti)) + pi = SVIParams( + float(ai), + float(np.exp(lbi) * scale), + float(np.tanh(ui)), + float(mi), + float(np.exp(lsi) * scale), + ) + atm_w_raw.append(pi.total_var(np.array([0.0], dtype=np.float64))[0]) + atm_w_raw = np.asarray(atm_w_raw, dtype=np.float64) + atm_w_mono = np.maximum.accumulate(atm_w_raw) + delta_a = atm_w_mono - atm_w_raw + a_corr = a_s + delta_a + + # final splines built from corrected / smoothed arrays (with very small or zero extra smoothing) + a_spl = UnivariateSpline(T, a_corr, w=w, s=0.0) + logb_spl = UnivariateSpline(T, logb_s, w=w, s=0.0) + u_spl = UnivariateSpline(T, u_s, w=w, s=0.0) + m_spl = UnivariateSpline(T, m_s, w=w, s=0.0) + logsig_spl = UnivariateSpline(T, logsig_s, w=w, s=0.0) + + return SmoothedSVICurves( + T_knots=T, + a_spline=a_spl, + logb_spline=logb_spl, + u_spline=u_spl, + m_spline=m_spl, + logsig_spline=logsig_spl, + ) + + +def calendar_violation_matrix( + curves: SmoothedSVICurves, + T_grid: np.ndarray, + k_grid: np.ndarray, +) -> np.ndarray: + """ + Phase 6–7 diagnostic: + + On a (T, k) grid, compute w(T_{j+1}, k) - w(T_j, k). + Negative entries indicate calendar violations. + """ + T_grid = np.asarray(T_grid, dtype=np.float64).ravel() + k_grid = np.asarray(k_grid, dtype=np.float64).ravel() + if T_grid.size < 2: + raise ValueError("Need at least two maturities in T_grid for calendar diagnostics.") + w = curves.total_var(k_grid, T_grid) # shape (nT, nK) + diff = w[1:, :] - w[:-1, :] + return diff + + +def evaluate_surface_on_grid( + fit: SVISurfaceFit, + k_grid: np.ndarray, + *, + valid_only: bool = True, +) -> pd.DataFrame: + """ + Evaluate each successful slice on ``k_grid``. Returns long DataFrame: + ``group_key``, ``T_mean``, ``log_moneyness``, ``total_var_model``. + """ + k_grid = np.asarray(k_grid, dtype=np.float64).ravel() + parts = [] + for s in fit.slices: + if valid_only and not s.success: + continue + w = s.params.total_var(k_grid) + parts.append( + pd.DataFrame( + { + "group_key": s.group_key, + "T_mean": s.T_mean, + "log_moneyness": k_grid, + "total_var_model": w, + "iv_model": np.sqrt(np.maximum(w, 0) / np.maximum(s.T_mean, 1e-12)), + } + ) + ) + if not parts: + return pd.DataFrame( + columns=[ + "group_key", + "T_mean", + "log_moneyness", + "total_var_model", + "iv_model", + ] + ) + return pd.concat(parts, ignore_index=True) + + +# --------------------------------------------------------------------------- +# Plotting +# --------------------------------------------------------------------------- + + +def plot_svi_surface_fit( + df_prep: pd.DataFrame, + fit: SVISurfaceFit, + *, + group_col: str = "expiration_date", + n_grid: int = 120, + iv_space: bool = True, + figsize: tuple[float, float] = (10, 6), + save_path: Optional[str] = None, + show: bool = False, +) -> tuple[object, object]: + """ + Plot market total variance (or IV) vs k with SVI overlays per expiry. + + Parameters + ---------- + df_prep + Output of :func:`prepare_svi_inputs` (must include ``log_moneyness``, ``total_var``, ``T``). + """ + import matplotlib.pyplot as plt + + try: + cmap = plt.colormaps["viridis"] + except (AttributeError, KeyError): + from matplotlib import cm as _cm + + cmap = _cm.get_cmap("viridis") + + fig, ax = plt.subplots(figsize=figsize) + k_all = df_prep["log_moneyness"].to_numpy() + k_min, k_max = float(np.min(k_all)), float(np.max(k_all)) + pad = 0.05 * (k_max - k_min + 1e-6) + k_grid = np.linspace(k_min - pad, k_max + pad, n_grid) + + ok = [s for s in fit.slices if s.success] + if not ok: + ax.set_title("SVI surface fit (no successful slices)") + return fig, ax + + n_ok = max(len(ok), 1) + for i, s in enumerate(sorted(ok, key=lambda x: x.T_mean)): + color = cmap(i / max(n_ok - 1, 1)) if n_ok > 1 else cmap(0.5) + Tm = s.T_mean + if group_col in df_prep.columns: + sub = df_prep[df_prep[group_col].astype(str) == str(s.group_key)] + else: + sub = ( + df_prep[np.isclose(df_prep["T"], Tm, rtol=0.02, atol=1e-4)] + if "T" in df_prep.columns + else df_prep + ) + + k_m = sub["log_moneyness"].to_numpy() + w_m = sub["total_var"].to_numpy() + if iv_space: + iv_m = np.sqrt(np.maximum(w_m, 0) / np.maximum(Tm, 1e-12)) + ax.scatter(k_m, iv_m, s=18, alpha=0.6, color=color, marker="o", label=None) + wg = s.params.total_var(k_grid) + iv_g = np.sqrt(np.maximum(wg, 0) / np.maximum(Tm, 1e-12)) + ax.plot(k_grid, iv_g, color=color, lw=2, label=f"T≈{Tm:.3f} ({s.group_key})") + ax.set_ylabel("implied vol") + else: + ax.scatter(k_m, w_m, s=18, alpha=0.6, color=color, marker="o", label=None) + ax.plot(k_grid, s.params.total_var(k_grid), color=color, lw=2, label=f"T≈{Tm:.3f}") + ax.set_ylabel("total variance w") + + ax.set_xlabel("log moneyness log(K/F)") + ax.legend(loc="best", fontsize=8) + ax.set_title("SVI slices vs market") + ax.grid(True, alpha=0.3) + fig.tight_layout() + if save_path: + fig.savefig(save_path, bbox_inches="tight") + if show: + plt.show() + return fig, ax + + +def plot_residual_heatmap( + df_prep: pd.DataFrame, + fit: SVISurfaceFit, + *, + figsize: tuple[float, float] = (9, 4), + save_path: Optional[str] = None, + show: bool = False, +) -> tuple[object, object]: + """Simple heatmap of (w_model - w_market) / w_market by slice and moneyness bin.""" + import matplotlib.pyplot as plt + + rows = [] + for _, row in df_prep.iterrows(): + k = float(row["log_moneyness"]) + w = float(row["total_var"]) + Tm = float(row["T"]) if "T" in row.index else float("nan") + gkey = str(row.get("expiration_date", "")) + match = None + for s in fit.slices: + if s.success and (str(s.group_key) == gkey or np.isclose(s.T_mean, Tm, rtol=0.05, atol=1e-3)): + match = s + break + if match is None: + continue + w_hat = float(match.params.total_var(np.array([k]))[0]) + rel = (w_hat - w) / max(w, 1e-12) + rows.append({"T_mean": Tm, "k": k, "rel_err": rel, "group_key": gkey}) + + if not rows: + fig, ax = plt.subplots(figsize=figsize) + ax.set_title("No overlap for residual map") + return fig, ax + + rdf = pd.DataFrame(rows) + fig, ax = plt.subplots(figsize=figsize) + sc = ax.scatter(rdf["k"], rdf["T_mean"], c=rdf["rel_err"], cmap="coolwarm", s=35, vmin=-0.2, vmax=0.2) + fig.colorbar(sc, ax=ax, label="relative w error (model - mkt) / mkt") + ax.set_xlabel("log(K/F)") + ax.set_ylabel("T (years)") + ax.set_title("SVI relative variance residuals") + fig.tight_layout() + if save_path: + fig.savefig(save_path, bbox_inches="tight") + if show: + plt.show() + return fig, ax + + +# --------------------------------------------------------------------------- +# Finplot plotting (interactive) +# --------------------------------------------------------------------------- + + +def _rgba_to_hex(rgba: tuple[float, float, float, float]) -> str: + r, g, b, _a = rgba + return "#{:02x}{:02x}{:02x}".format(int(r * 255), int(g * 255), int(b * 255)) + + +def _maybe_import_finplot(): + try: + import finplot as fplt # type: ignore + + return fplt + except Exception: + return None + + +def plot_svi_surface_fit_finplot( + df_prep: pd.DataFrame, + fit: SVISurfaceFit, + *, + group_col: str = "expiration_date", + n_grid: int = 120, + iv_space: bool = True, + show: bool = True, + title: str = "SVI slices (finplot)", +): + """ + Interactive finplot rendering of per-expiry SVI curves. + + Note: finplot is primarily interactive; saving to PDF/PNG is not implemented here. + """ + fplt = _maybe_import_finplot() + if fplt is None: + raise ImportError("finplot is not installed. Use plot_backend='matplotlib' or install finplot.") + + import matplotlib.pyplot as plt + + k_all = df_prep["log_moneyness"].to_numpy(dtype=np.float64) + k_min, k_max = float(np.min(k_all)), float(np.max(k_all)) + pad = 0.05 * (k_max - k_min + 1e-6) + k_grid = np.linspace(k_min - pad, k_max + pad, n_grid) + + ok = [s for s in fit.slices if s.success] + if not ok: + ax = fplt.create_plot(title=title) + if hasattr(ax, "setTitle"): + ax.setTitle(title) + if show: + fplt.show() + return ax, None + + try: + cmap = plt.colormaps["viridis"] + except (AttributeError, KeyError): + cmap = plt.cm.get_cmap("viridis") + + # finplot uses an x/y scatter/plot model; feed numeric x arrays directly. + ax = fplt.create_plot(title=title, rows=1) + + n_ok = max(len(ok), 1) + for i, s in enumerate(sorted(ok, key=lambda x: x.T_mean)): + # pick a stable color per slice index + c = cmap(i / max(n_ok - 1, 1)) if n_ok > 1 else cmap(0.5) + color_hex = _rgba_to_hex(c) + Tm = s.T_mean + + if group_col in df_prep.columns: + sub = df_prep[df_prep[group_col].astype(str) == str(s.group_key)] + else: + # fallback to matching close maturities + sub = df_prep[ + np.isclose(df_prep["T"].to_numpy(dtype=np.float64), Tm, rtol=0.02, atol=1e-4) + ] + + if sub.empty: + continue + + k_m = sub["log_moneyness"].to_numpy(dtype=np.float64) + if iv_space: + y_m = np.sqrt(np.maximum(sub["total_var"].to_numpy(dtype=np.float64), 0) / max(Tm, 1e-12)) + y_g = np.sqrt( + np.maximum(s.params.total_var(k_grid), 0) / max(Tm, 1e-12) + ) + fplt.plot(k_m, y_m, ax=ax, style="o", color=color_hex, width=3) + try: + fplt.plot( + k_grid, + y_g, + ax=ax, + color=color_hex, + width=2, + legend=f"T≈{Tm:.3f}", + ) + except TypeError: + fplt.plot(k_grid, y_g, ax=ax, color=color_hex, width=2) + if hasattr(ax, "setLabel"): + ax.setLabel("left", "implied vol") + else: + y_m = sub["total_var"].to_numpy(dtype=np.float64) + y_g = s.params.total_var(k_grid) + fplt.plot(k_m, y_m, ax=ax, style="o", color=color_hex, width=3) + try: + fplt.plot( + k_grid, + y_g, + ax=ax, + color=color_hex, + width=2, + legend=f"T≈{Tm:.3f}", + ) + except TypeError: + fplt.plot(k_grid, y_g, ax=ax, color=color_hex, width=2) + if hasattr(ax, "setLabel"): + ax.setLabel("left", "total variance w") + + if hasattr(ax, "setLabel"): + ax.setLabel("bottom", "log moneyness log(K/F)") + if show: + fplt.show() + return ax, None + + +def plot_residual_heatmap_finplot( + df_prep: pd.DataFrame, + fit: SVISurfaceFit, + *, + show: bool = True, + title: str = "SVI residuals (finplot)", + vmin: float = -0.2, + vmax: float = 0.2, + n_bins: int = 11, + max_points: int = 8000, +): + """ + Interactive finplot residual visualization. + + Creates a color-binned scatter of relative w error (model - mkt) / mkt. + """ + fplt = _maybe_import_finplot() + if fplt is None: + raise ImportError("finplot is not installed. Use plot_backend='matplotlib' or install finplot.") + + import matplotlib.pyplot as plt + + rows = [] + for _, row in df_prep.iterrows(): + k = float(row["log_moneyness"]) + w = float(row["total_var"]) + if not np.isfinite(k) or not np.isfinite(w) or w <= 0: + continue + Tm = float(row["T"]) if "T" in row.index else float("nan") + gkey = str(row.get("expiration_date", "")) + match = None + for s in fit.slices: + if s.success and (str(s.group_key) == gkey or np.isclose(s.T_mean, Tm, rtol=0.05, atol=1e-3)): + match = s + break + if match is None: + continue + w_hat = float(match.params.total_var(np.array([k], dtype=np.float64))[0]) + rel = (w_hat - w) / max(w, 1e-12) + rows.append((k, Tm, rel)) + + if not rows: + ax = fplt.create_plot(title=title) + if show: + fplt.show() + return ax, None + + # optional downsampling for interactivity + if len(rows) > max_points: + rows = rows[:: int(np.ceil(len(rows) / max_points))] + + xs = np.array([r[0] for r in rows], dtype=np.float64) + ys = np.array([r[1] for r in rows], dtype=np.float64) + zs = np.array([r[2] for r in rows], dtype=np.float64) + + try: + cmap = plt.colormaps["coolwarm"] + except (AttributeError, KeyError): + cmap = plt.cm.get_cmap("coolwarm") + + bins = np.linspace(vmin, vmax, n_bins + 1) + b_idx = np.digitize(zs, bins) - 1 + + ax = fplt.create_plot(title=title, rows=1) + if hasattr(ax, "setLabel"): + ax.setLabel("bottom", "log(K/F)") + ax.setLabel("left", "T (years)") + + for bi in range(n_bins): + msk = b_idx == bi + if not np.any(msk): + continue + z_mid = (bins[bi] + bins[bi + 1]) / 2.0 + # map z_mid into [0,1] + t = (z_mid - vmin) / max(vmax - vmin, 1e-12) + rgba = cmap(np.clip(t, 0.0, 1.0)) + color_hex = _rgba_to_hex(rgba) + fplt.plot(xs[msk], ys[msk], ax=ax, style="o", color=color_hex, width=4) + + if show: + fplt.show() + return ax, None + + +# --------------------------------------------------------------------------- +# Pipeline entrypoint for load_data-style frames +# --------------------------------------------------------------------------- + + +def calibrate_from_option_frame( + option_quotes_contracts: pd.DataFrame, + *, + r: float = 0.05, + group_col: str = "expiration_date", + fit_method: str = "least_squares", + plot: bool = True, + plot_backend: str = "matplotlib", + plot_path: Optional[str] = "svi_surface_fit.pdf", + residual_path: Optional[str] = "svi_residuals.pdf", + finplot_show: bool = True, +) -> tuple[pd.DataFrame, SVISurfaceFit, pd.DataFrame]: + """ + Full pipeline: prepare inputs, fit SVI surface, return (prepared_df, fit, params_table). + + ``option_quotes_contracts`` should be the merged quotes frame after + :func:`compute_iv` (columns ``spot``, ``strike``, ``T``, ``iv``, ``expiration_date``, …). + """ + prep = prepare_svi_inputs(option_quotes_contracts, r=r) + fit = fit_svi_surface( + prep, + group_col=group_col, + fit_kwargs={"method": fit_method, "reg_lambda": 0.01}, + ) + params_df = surface_params_dataframe(fit) + if plot and len(fit.slices) > 0: + backend = plot_backend.lower().strip() + fplt = _maybe_import_finplot() + use_finplot = backend in {"finplot", "auto"} and fplt is not None + if backend in {"finplot"} and fplt is None: + raise ImportError("plot_backend='finplot' requested but finplot is not installed.") + + if use_finplot: + # interactive (finplot) + plot_svi_surface_fit_finplot( + prep, fit, group_col=group_col, show=finplot_show + ) + plot_residual_heatmap_finplot(prep, fit, show=finplot_show) + + # still save PDFs if requested (matplotlib backend) + if plot_path: + plot_svi_surface_fit(prep, fit, group_col=group_col, save_path=plot_path, show=False) + if residual_path: + plot_residual_heatmap(prep, fit, save_path=residual_path, show=False) + else: + # file-based (matplotlib) + plot_svi_surface_fit(prep, fit, group_col=group_col, save_path=plot_path, show=False) + plot_residual_heatmap(prep, fit, save_path=residual_path, show=False) + return prep, fit, params_df + diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/data/load_data.py b/src/data/load_data.py new file mode 100644 index 0000000..9f04dfe --- /dev/null +++ b/src/data/load_data.py @@ -0,0 +1,436 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +from option_pricing.src.data.ingestion.db_connect import db_engine +from option_pricing.src.ImpliedVolatility.compute_vls import implied_vol + + +def _normalize_quote_timestamp(df: pd.DataFrame) -> pd.DataFrame: + if "timestamp" not in df.columns and "quote_timestamp" in df.columns: + return df.rename(columns={"quote_timestamp": "timestamp"}) + return df + + +def _normalize_price_timestamp(df: pd.DataFrame) -> pd.DataFrame: + if "timestamp" not in df.columns and "price_timestamp" in df.columns: + return df.rename(columns={"price_timestamp": "timestamp"}) + return df + + +def load_data(): + engine = db_engine() + underlyings = pd.read_sql("SELECT * FROM underlyings;", engine) + underlying_prices = _normalize_price_timestamp( + pd.read_sql("SELECT * FROM underlying_prices;", engine) + ) + option_quotes = _normalize_quote_timestamp(pd.read_sql("SELECT * FROM option_quotes;", engine)) + option_contracts = pd.read_sql("SELECT * FROM option_contracts;", engine) + return underlyings, underlying_prices, option_quotes, option_contracts + + +def clean_data(data: pd.DataFrame): + data.dropna(inplace=True) + data = data[data["volume"] > 0] + data = data[data["open_interest"] > 10] + data["spread"] = data["ask"] - data["bid"] + #data = data[data["spread"] / data["mid"] < 1] + return data + + +def merge_quotes_contracts(option_quotes: pd.DataFrame, option_contracts: pd.DataFrame): + if "timestamp" not in option_quotes.columns: + raise KeyError("option_quotes needs a quote time column ('timestamp' or 'quote_timestamp')") + + option_quotes = option_quotes.groupby(["contract_id", "timestamp"], as_index=False).agg( + { + "bid": "mean", + "ask": "mean", + "mid": "mean", + "last_price": "mean", + "implied_vol": "mean", + "volume": "sum", + "open_interest": "sum", + } + ) + option_quotes = option_quotes.merge( + option_contracts, left_on="contract_id", right_on="id", how="left" + ) + option_quotes["timestamp"] = pd.to_datetime(option_quotes["timestamp"]) + option_quotes["expiration_date"] = pd.to_datetime(option_quotes["expiration_date"]) + option_quotes["T"] = ( + option_quotes["expiration_date"] - option_quotes["timestamp"] + ).dt.total_seconds() / (365 * 24 * 3600) + return option_quotes + + +def compute_iv(option_quotes_contracts, underlying_prices): + df = option_quotes_contracts.copy() + up = _normalize_price_timestamp(underlying_prices.copy()) + + up["timestamp"] = pd.to_datetime(up["timestamp"]) + up = up.sort_values("timestamp").drop_duplicates( + ["underlying_id", "timestamp"], keep="last" + ) + + mask = df["T"] > 0 + if not mask.any(): + df["iv"] = np.nan + return df + + sub = df.loc[mask].copy() + sub["_idx"] = sub.index + + merged = sub.merge( + up[["underlying_id", "timestamp", "price"]], + on=["underlying_id", "timestamp"], + how="left", + validate="many_to_one", + ) + + # assign back using explicit index + df["spot"] = np.nan + df.loc[merged["_idx"], "spot"] = merged["price"].to_numpy() + + price = merged["mid"].to_numpy(dtype=np.float64) + S = merged["price"].to_numpy(dtype=np.float64) + K = merged["strike"].to_numpy(dtype=np.float64) + T = merged["T"].to_numpy(dtype=np.float64) + call = (merged["option_type"] == "call").to_numpy() + + + df["iv"] = np.nan + df.loc[sub.index, "iv"] = implied_vol(price, S, K, T, 0.05, call) + return df + +def fit_ivsimle(option_quotes_contracts): + from scipy.interpolate import UnivariateSpline + sort = option_quotes_contracts.sort_values("log_moneyness").dropna() + x = sort["log_moneyness"] + y = sort["iv"] + y_yahoo = sort["implied_vol"] + print(x,y,y_yahoo) + f = UnivariateSpline(x, y, s=None) + f_yahoo = UnivariateSpline(x, y_yahoo, s=None) + # plot the smile + x_lin = np.linspace(x.min(), x.max(), 200) + plt.plot(x_lin, f(x_lin), label="iv smile") + plt.plot(x_lin, f_yahoo(x_lin), label="yahoo iv smile") + plt.legend() + plt.savefig("iv_smile_fit.pdf") + + + return f + +def calibrate_svi_surface(option_quotes_contracts: pd.DataFrame, r: float = 0.05, **kwargs): + """ + Fit SVI per expiry on ``iv`` from :func:`compute_iv` and plot diagnostics. + + See :func:`option_pricing.src.ImpliedVolatility.svi.calibrate_from_option_frame`. + """ + from option_pricing.src.ImpliedVolatility.svi import calibrate_from_option_frame + + return calibrate_from_option_frame(option_quotes_contracts, r=r, **kwargs) + +def clean_before_svi(option_quotes_contracts: pd.DataFrame): + option_quotes_contracts = option_quotes_contracts[option_quotes_contracts["T"] > 0.05] + return option_quotes_contracts + + +def plot_smoothed_svi_surface(prep: pd.DataFrame, params: pd.DataFrame, r: float = 0.05): + """ + Plot independent slice fits after maturity smoothing. + + Outputs: + - svi_smoothed_surface.pdf + - svi_calendar_violation_heatmap.pdf + """ + from option_pricing.src.ImpliedVolatility.svi import ( + calendar_violation_matrix, + smooth_svi_parameters, + ) + + # Build smoothed maturity-parameter curves from calibrated slice parameters + curves = smooth_svi_parameters( + params, + T_col="T_mean", + smooth_factor_a=1e-4, + smooth_factor_m=1e-4, + smooth_factor_others=0.0, + min_T=0.05, + weight_col="n_points", + ) + + # Overlay market points and smoothed model by maturity + plot_df = prep.copy() + if "T" not in plot_df.columns or "total_var" not in plot_df.columns: + raise KeyError("prep must include columns 'T' and 'total_var'") + + T_grid = np.sort(params.loc[params["success"], "T_mean"].to_numpy(dtype=np.float64)) + if T_grid.size < 2: + return + k_grid = np.linspace( + float(plot_df["log_moneyness"].quantile(0.02)), + float(plot_df["log_moneyness"].quantile(0.98)), + 180, + ) + + plt.figure(figsize=(11, 7)) + cmap = plt.colormaps["viridis"] + nT = max(len(T_grid), 1) + for i, Ti in enumerate(T_grid): + color = cmap(i / max(nT - 1, 1)) if nT > 1 else cmap(0.5) + near = np.isclose(plot_df["T"].to_numpy(dtype=np.float64), Ti, rtol=0.03, atol=2e-3) + sub = plot_df.loc[near] + if sub.empty: + continue + # market IV points + iv_mkt = np.sqrt( + np.maximum(sub["total_var"].to_numpy(dtype=np.float64), 0.0) + / np.maximum(Ti, 1e-12) + ) + plt.scatter( + sub["log_moneyness"].to_numpy(dtype=np.float64), + iv_mkt, + s=10, + alpha=0.35, + color=color, + ) + # smoothed curve IV + w_model = curves.total_var(k_grid, np.array([Ti], dtype=np.float64))[0] + iv_model = np.sqrt(np.maximum(w_model, 0.0) / np.maximum(Ti, 1e-12)) + plt.plot(k_grid, iv_model, color=color, lw=2, label=f"T={Ti:.3f}") + + plt.xlabel("log moneyness log(K/F)") + plt.ylabel("implied vol") + plt.title("SVI surface: market points vs smoothed maturity curves") + plt.grid(alpha=0.3) + plt.legend(fontsize=8, ncol=2) + plt.tight_layout() + plt.savefig("svi_smoothed_surface.pdf", bbox_inches="tight") + plt.clf() + + # Calendar diagnostics from smoothed surface + cal_diff = calendar_violation_matrix(curves, T_grid, k_grid) + # diff shape: (len(T_grid)-1, len(k_grid)) where negative is violation + plt.figure(figsize=(11, 4)) + im = plt.imshow( + cal_diff, + aspect="auto", + origin="lower", + cmap="coolwarm", + vmin=-0.02, + vmax=0.02, + extent=[k_grid.min(), k_grid.max(), 0, cal_diff.shape[0]], + ) + plt.colorbar(im, label="w(T_{j+1},k)-w(T_j,k)") + plt.xlabel("log moneyness") + plt.ylabel("maturity step j") + plt.title("Calendar diagnostic heatmap (negative = violation)") + plt.tight_layout() + plt.savefig("svi_calendar_violation_heatmap.pdf", bbox_inches="tight") + plt.clf() + + +def _fit_slice_with_svi_py_model( + model: object, + model_name: str, + k: np.ndarray, + w: np.ndarray, + T: float, + *, + theta_ref: float, + prev_params: dict | None, + k_eval: np.ndarray, +) -> tuple[np.ndarray, dict]: + """Fit one slice with a specific pysvi model and evaluate total variance on k_eval.""" + T = float(T) + k = np.asarray(k, dtype=np.float64) + w = np.asarray(w, dtype=np.float64) + k_eval = np.asarray(k_eval, dtype=np.float64) + + # ATM total variance proxy for models requiring theta + theta = float(np.interp(0.0, np.sort(k), w[np.argsort(k)])) + theta = max(theta, 1e-8) + + kwargs: dict = {} + if model_name == "ssvi": + kwargs["theta"] = theta + elif model_name == "essvi": + kwargs["theta"] = theta + kwargs["theta_ref"] = max(float(theta_ref), 1e-8) + elif model_name in {"jumpwings", "jw"}: + kwargs["T"] = max(T, 1e-8) + + # Option B: calendar penalty uses pysvi internal 200-point grid per current slice. + # Build w_prev on that exact grid to avoid shape mismatch. + if prev_params is not None: + k_cal = np.linspace(float(k.min()) - 0.5, float(k.max()) + 0.5, 200) + kwargs["w_prev"] = np.asarray(model.total_variance(k_cal, prev_params), dtype=np.float64) + + params = model.calibrate(k, w, **kwargs) + if params is None: + raise RuntimeError(f"pysvi {model_name} calibration failed") + w_eval = model.total_variance(k_eval, params) + return np.asarray(w_eval, dtype=np.float64), params + + +def compare_vs_svi_py(prep: pd.DataFrame, params: pd.DataFrame): + """ + Compare in-house SVI fit against pysvi models with explicit no-arbitrage flags. + + Outputs: + - svi_vs_pysvi__comparison.pdf for model in {svi, ssvi, essvi, jumpwings} + - svi_vs_pysvi_metrics.csv + """ + from option_pricing.src.ImpliedVolatility.svi import SVIParams + from pysvi import ArbitrageFreedom, get_model + + ok_params = params[params["success"]].copy() + if ok_params.empty: + print("compare_vs_svi_py: no successful in-house slices; skipping.") + return + + k_min = float(prep["log_moneyness"].quantile(0.02)) + k_max = float(prep["log_moneyness"].quantile(0.98)) + k_grid = np.linspace(k_min, k_max, 180) + + models = ["svi", "ssvi", "essvi", "jumpwings"] + rows: list[dict] = [] + + # reference theta for eSSVI from in-house successful slices + theta_ref = float(np.median(ok_params["T_mean"].to_numpy(dtype=np.float64) * 0 + 1.0)) + # Better theta_ref proxy from observed market ATM if available + theta_vals = [] + for _, row in ok_params.iterrows(): + Ti = float(row["T_mean"]) + near = np.isclose(prep["T"].to_numpy(dtype=np.float64), Ti, rtol=0.03, atol=2e-3) + sub = prep.loc[near].sort_values("log_moneyness") + if len(sub) < 10: + continue + ks = sub["log_moneyness"].to_numpy(dtype=np.float64) + ws = sub["total_var"].to_numpy(dtype=np.float64) + theta_vals.append(float(np.interp(0.0, np.sort(ks), ws[np.argsort(ks)]))) + if theta_vals: + theta_ref = float(np.median(theta_vals)) + + sorted_rows = list(ok_params.sort_values("T_mean").iterrows()) + for model_name in models: + flags = ArbitrageFreedom.NO_BUTTERFLY | ArbitrageFreedom.NO_CALENDAR + model = get_model(model_name, flags) + plt.figure(figsize=(11, 7)) + cmap = plt.colormaps["tab20"] + prev_params = None + n_used = 0 + for _, row in sorted_rows: + Ti = float(row["T_mean"]) + near = np.isclose(prep["T"].to_numpy(dtype=np.float64), Ti, rtol=0.03, atol=2e-3) + sub = prep.loc[near].sort_values("log_moneyness") + if len(sub) < 10: + continue + k = sub["log_moneyness"].to_numpy(dtype=np.float64) + w = sub["total_var"].to_numpy(dtype=np.float64) + + p_ours = SVIParams( + float(row["a"]), float(row["b"]), float(row["rho"]), float(row["m"]), float(row["sigma"]) + ) + w_ours = p_ours.total_var(k_grid) + rmse_ours = float(np.sqrt(np.mean((p_ours.total_var(k) - w) ** 2))) + + try: + w_ext, ext_params = _fit_slice_with_svi_py_model( + model, + model_name, + k, + w, + Ti, + theta_ref=theta_ref, + prev_params=prev_params, + k_eval=k_grid, + ) + rmse_ext = float(np.sqrt(np.mean((np.interp(k, k_grid, w_ext) - w) ** 2))) + rows.append( + { + "model": model_name, + "T_mean": Ti, + "rmse_ours": rmse_ours, + "rmse_pysvi": rmse_ext, + "delta_rmse": rmse_ext - rmse_ours, + "ext_params": str(ext_params), + } + ) + color = cmap(n_used % 20) + n_used += 1 + plt.plot(k_grid, np.sqrt(np.maximum(w_ours, 0) / max(Ti, 1e-12)), color=color, lw=2, alpha=0.9) + plt.plot(k_grid, np.sqrt(np.maximum(w_ext, 0) / max(Ti, 1e-12)), color=color, lw=1.5, ls="--", alpha=0.9) + prev_params = ext_params + except Exception as exc: + print(f"compare_vs_svi_py[{model_name}]: skipping T={Ti:.4f}, reason: {exc}") + continue + + if n_used == 0: + plt.close() + continue + + plt.xlabel("log moneyness") + plt.ylabel("implied vol") + plt.title(f"In-house SVI (solid) vs pysvi {model_name} (dashed)") + plt.grid(alpha=0.3) + plt.tight_layout() + plt.savefig(f"svi_vs_pysvi_{model_name}_comparison.pdf", bbox_inches="tight") + plt.clf() + + out = pd.DataFrame(rows) + if out.empty: + print("compare_vs_svi_py: no slices compared (pysvi unavailable or incompatible).") + return + out = out.sort_values(["model", "T_mean"]) + out.to_csv("svi_vs_pysvi_metrics.csv", index=False) + print(out.groupby("model")[["rmse_ours", "rmse_pysvi", "delta_rmse"]].mean()) + + +def plot_ivsmile(option_quotes_contracts): + option_quotes_contracts = option_quotes_contracts.sort_values("strike") + option_quotes_contracts["log_moneyness"] = np.log( + option_quotes_contracts["spot"] * np.exp(0.05 * option_quotes_contracts["T"])/option_quotes_contracts["strike"] + ) + option_quotes_contracts = option_quotes_contracts[option_quotes_contracts["log_moneyness"].abs() < 0.2] + #option_quotes_contracts = option_quotes_contracts[option_quotes_contracts["mid"] > 0.2] + plt.plot(option_quotes_contracts["strike"], option_quotes_contracts["iv"], label="iv smile") + plt.plot(option_quotes_contracts["strike"], option_quotes_contracts["implied_vol"], label="i. vol") + plt.legend() + plt.savefig("iv_smile.pdf") + plt.xlabel("iv") + plt.ylabel("strike price") + plt.clf() + return option_quotes_contracts + + + + + +if __name__ == "__main__": + underlyings, underlying_prices, option_quotes, option_contracts = load_data() + option_quotes_contracts = merge_quotes_contracts(option_quotes, option_contracts) + option_quotes_contracts = clean_data(option_quotes_contracts) + option_quotes_contracts = compute_iv(option_quotes_contracts, underlying_prices) + mask = option_quotes_contracts["iv"].notna() + print(option_quotes_contracts) + print(option_quotes_contracts.columns) + #plt.plot(option_quotes_contracts["contract_id"][mask], option_quotes_contracts["implied_vol"][mask], label="i. iv") + #plt.plot(option_quotes_contracts["contract_id"][mask],option_quotes_contracts["iv"][mask], label="comp. iv") + #plt.legend() + #plt.show() + option_quotes_contracts = plot_ivsmile(option_quotes_contracts) + fit_ivsimle(option_quotes_contracts) + prep, svi_fit, params = calibrate_svi_surface( + clean_before_svi(option_quotes_contracts), + r=0.05, + plot_backend="matplotlib", + finplot_show=True, + # optionally: plot_path=None to avoid matplotlib PDF output + ) + print(svi_fit) + plot_smoothed_svi_surface(prep, params, r=0.05) + compare_vs_svi_py(prep, params) + From b3663258e4f7088e1da00b9d3e8a4d0371446807 Mon Sep 17 00:00:00 2001 From: David Doebel Date: Thu, 2 Apr 2026 16:30:50 +0200 Subject: [PATCH 3/5] Replace hardcoded DB credentials with environment-driven configuration. Centralize DB settings in ingestion config, remove embedded secrets from ingestion helpers, and add an idempotent PostgreSQL bootstrap script to create role/database and apply schema safely. Made-with: Cursor --- .env.example | 14 +++ scripts/setup_postgres.py | 108 ++++++++++++++++++++ src/data/config/__init__.py | 0 src/data/config/settings.py | 14 --- src/data/database_interaction.py | 24 +++-- src/data/ingestion/config/__init__.py | 3 + src/data/ingestion/config/settings.py | 31 ++++++ src/data/ingestion/db_connect.py | 13 +++ src/data/ingestion/ingest_ubs_comparison.py | 8 +- src/data/ingestion/ingest_yahoo_options.py | 9 +- 10 files changed, 189 insertions(+), 35 deletions(-) create mode 100644 .env.example create mode 100644 scripts/setup_postgres.py delete mode 100644 src/data/config/__init__.py delete mode 100644 src/data/config/settings.py create mode 100644 src/data/ingestion/config/__init__.py create mode 100644 src/data/ingestion/config/settings.py create mode 100644 src/data/ingestion/db_connect.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..aa78a21 --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=options_db +DB_USER=quant_user +DB_PASSWORD=change_me +PIPELINE_SYMBOLS=SPY + +# For scripts/setup_postgres.py when creating role/database: +# Use a superuser/admin account that can CREATE ROLE and CREATE DATABASE. +POSTGRES_ADMIN_USER=postgres +POSTGRES_ADMIN_PASSWORD=postgres +POSTGRES_ADMIN_HOST=localhost +POSTGRES_ADMIN_PORT=5432 +POSTGRES_ADMIN_DB=postgres diff --git a/scripts/setup_postgres.py b/scripts/setup_postgres.py new file mode 100644 index 0000000..55fb84f --- /dev/null +++ b/scripts/setup_postgres.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +""" +Idempotent PostgreSQL bootstrap script for the option_pricing project. + +What it does: +1) Creates the project role if it does not exist. +2) Creates the project database if it does not exist. +3) Grants ownership/privileges. +4) Applies src/data/sql/schema.sql to the project database. + +Configuration comes from environment variables (see .env.example). +""" + +from __future__ import annotations + +import os +from pathlib import Path + +import psycopg2 +from psycopg2 import sql + + +ROOT = Path(__file__).resolve().parents[1] +SCHEMA_PATH = ROOT / "src" / "data" / "sql" / "schema.sql" + + +def _env(name: str, default: str | None = None) -> str: + value = os.getenv(name, default) + if value is None: + raise RuntimeError(f"Missing required environment variable: {name}") + return value + + +def admin_connect(dbname: str): + return psycopg2.connect( + dbname=dbname, + user=_env("POSTGRES_ADMIN_USER", "postgres"), + password=_env("POSTGRES_ADMIN_PASSWORD", "postgres"), + host=_env("POSTGRES_ADMIN_HOST", "localhost"), + port=_env("POSTGRES_ADMIN_PORT", "5432"), + ) + + +def ensure_role_and_database() -> None: + db_user = _env("DB_USER", "quant_user") + db_password = _env("DB_PASSWORD", "") + db_name = _env("DB_NAME", "options_db") + + admin_db = _env("POSTGRES_ADMIN_DB", "postgres") + with admin_connect(admin_db) as conn: + conn.autocommit = True + with conn.cursor() as cur: + cur.execute("SELECT 1 FROM pg_roles WHERE rolname = %s", (db_user,)) + role_exists = cur.fetchone() is not None + if not role_exists: + cur.execute( + sql.SQL("CREATE ROLE {} WITH LOGIN PASSWORD %s").format( + sql.Identifier(db_user) + ), + (db_password,), + ) + else: + cur.execute( + sql.SQL("ALTER ROLE {} WITH LOGIN PASSWORD %s").format( + sql.Identifier(db_user) + ), + (db_password,), + ) + + cur.execute("SELECT 1 FROM pg_database WHERE datname = %s", (db_name,)) + db_exists = cur.fetchone() is not None + if not db_exists: + cur.execute( + sql.SQL("CREATE DATABASE {} OWNER {}").format( + sql.Identifier(db_name), + sql.Identifier(db_user), + ) + ) + else: + cur.execute( + sql.SQL("ALTER DATABASE {} OWNER TO {}").format( + sql.Identifier(db_name), + sql.Identifier(db_user), + ) + ) + + +def apply_schema() -> None: + if not SCHEMA_PATH.exists(): + raise FileNotFoundError(f"Schema file not found: {SCHEMA_PATH}") + + schema_sql = SCHEMA_PATH.read_text(encoding="utf-8") + with admin_connect(_env("DB_NAME", "options_db")) as conn: + conn.autocommit = True + with conn.cursor() as cur: + cur.execute(schema_sql) + + +def main() -> None: + print("Ensuring role/database exist...") + ensure_role_and_database() + print("Applying schema...") + apply_schema() + print("Database setup complete.") + + +if __name__ == "__main__": + main() diff --git a/src/data/config/__init__.py b/src/data/config/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/data/config/settings.py b/src/data/config/settings.py deleted file mode 100644 index 49cb6a0..0000000 --- a/src/data/config/settings.py +++ /dev/null @@ -1,14 +0,0 @@ -DB_CONFIG = { - "host": "localhost", - "port": 5432, - "database": "options_db", - "user": "quant_user", - "password": "strong_password", -} - -PIPELINE_CONFIG = { - "symbols": [ - "SPY" - # Example: "SPY" - ] -} \ No newline at end of file diff --git a/src/data/database_interaction.py b/src/data/database_interaction.py index 0d0f9c5..3871c77 100644 --- a/src/data/database_interaction.py +++ b/src/data/database_interaction.py @@ -1,13 +1,15 @@ -import psycopg2 +import pandas as pd -conn = psycopg2.connect( - dbname="options_db", - user="quant_user", - password="strong_password", - host="144.91.73.49", - port="5432" -) +from option_pricing.src.data.ingestion.db_connect import db_engine -cursor = conn.cursor() -cursor.execute("SELECT * FROM underlyings;") -print(cursor.fetchall()) \ No newline at end of file + +def fetch_underlyings() -> pd.DataFrame: + """ + Fetch all entries from the underlyings table using configured DB credentials. + """ + engine = db_engine() + return pd.read_sql("SELECT * FROM underlyings;", engine) + + +if __name__ == "__main__": + print(fetch_underlyings()) \ No newline at end of file diff --git a/src/data/ingestion/config/__init__.py b/src/data/ingestion/config/__init__.py new file mode 100644 index 0000000..3b0c909 --- /dev/null +++ b/src/data/ingestion/config/__init__.py @@ -0,0 +1,3 @@ +from .settings import DB_CONFIG, PIPELINE_CONFIG + +__all__ = ["DB_CONFIG", "PIPELINE_CONFIG"] diff --git a/src/data/ingestion/config/settings.py b/src/data/ingestion/config/settings.py new file mode 100644 index 0000000..863eecd --- /dev/null +++ b/src/data/ingestion/config/settings.py @@ -0,0 +1,31 @@ +import os + + +def _get_env_int(name: str, default: int) -> int: + raw = os.getenv(name) + if raw is None: + return default + try: + return int(raw) + except ValueError as exc: + raise ValueError(f"Environment variable {name} must be an integer, got '{raw}'") from exc + + +def _get_env_list(name: str, default: list[str]) -> list[str]: + raw = os.getenv(name) + if not raw: + return default + return [x.strip() for x in raw.split(",") if x.strip()] + + +DB_CONFIG = { + "host": os.getenv("DB_HOST", "localhost"), + "port": _get_env_int("DB_PORT", 5432), + "database": os.getenv("DB_NAME", "options_db"), + "user": os.getenv("DB_USER", "quant_user"), + "password": os.getenv("DB_PASSWORD", ""), +} + +PIPELINE_CONFIG = { + "symbols": _get_env_list("PIPELINE_SYMBOLS", ["SPY"]), +} \ No newline at end of file diff --git a/src/data/ingestion/db_connect.py b/src/data/ingestion/db_connect.py new file mode 100644 index 0000000..fe66920 --- /dev/null +++ b/src/data/ingestion/db_connect.py @@ -0,0 +1,13 @@ +from sqlalchemy import create_engine +from option_pricing.src.data.ingestion.config.settings import DB_CONFIG + +def build_db_url() -> str: + return ( + f"postgresql+psycopg2://{DB_CONFIG['user']}:{DB_CONFIG['password']}" + f"@{DB_CONFIG['host']}:{DB_CONFIG['port']}/{DB_CONFIG['database']}" + ) + +def db_engine(): + db_url = build_db_url() + engine = create_engine(db_url, future=True) + return engine diff --git a/src/data/ingestion/ingest_ubs_comparison.py b/src/data/ingestion/ingest_ubs_comparison.py index d1fa615..7cdb9fc 100644 --- a/src/data/ingestion/ingest_ubs_comparison.py +++ b/src/data/ingestion/ingest_ubs_comparison.py @@ -1,16 +1,14 @@ from datetime import datetime, timedelta import pandas as pd import yfinance as yf -from sqlalchemy import create_engine + +from db_connect import db_engine # --- CONFIG --- TICKERS = ["UBS", "^GSPC"] DAYS_BACK = 21 # ~3 weeks TABLE_NAME = "prices" -DB_URI = "postgresql://quant_user:strong_password@localhost:5432/options_db" - - def fetch_data(tickers, start_date, end_date): data = yf.download( tickers, @@ -64,7 +62,7 @@ def main(): raw = fetch_data(TICKERS, start_date, end_date) df = transform_data(raw) - engine = create_engine(DB_URI) + engine = db_engine() load_to_postgres(df, engine) print("Ingestion complete.") diff --git a/src/data/ingestion/ingest_yahoo_options.py b/src/data/ingestion/ingest_yahoo_options.py index e4ac989..0b62c0c 100644 --- a/src/data/ingestion/ingest_yahoo_options.py +++ b/src/data/ingestion/ingest_yahoo_options.py @@ -1,11 +1,11 @@ from datetime import datetime, timezone -from decimal import Decimal, InvalidOperation import pandas as pd import yfinance as yf -from sqlalchemy import create_engine, text +from sqlalchemy import text -from config.settings import DB_CONFIG, PIPELINE_CONFIG +from option_pricing.src.data.ingestion.config import DB_CONFIG, PIPELINE_CONFIG +from db_connect import db_engine def build_db_url() -> str: @@ -269,8 +269,7 @@ def ingest_symbol(symbol: str, engine): def main(): - db_url = build_db_url() - engine = create_engine(db_url, future=True) + engine = db_engine() for symbol in PIPELINE_CONFIG["symbols"]: ingest_symbol(symbol, engine) From 3dacc0a418caad38dac5089d92f1b648e571589b Mon Sep 17 00:00:00 2001 From: David Doebel Date: Thu, 2 Apr 2026 16:30:56 +0200 Subject: [PATCH 4/5] Add publication-ready documentation and reproducible experiment package. Rewrite the README with secure setup instructions, add dedicated setup/security docs, and include the standalone local-volatility instability experiment materials for reproducible analysis. Made-with: Cursor --- .gitignore | 24 ++ README.md | 80 ++++- docs/SECURITY.md | 27 ++ docs/SETUP.md | 60 ++++ .../INDEPENDENT_STANDALONE.txt | 6 + .../figures/lv_relerr.png | Bin 0 -> 151424 bytes .../figures/lv_rmse.png | Bin 0 -> 98802 bytes .../figures/lv_sigma2.png | Bin 0 -> 146328 bytes .../gatheral_local_vol.py | 108 ++++++ .../local_volatility_instability/lv_rmse.png | Bin 0 -> 157981 bytes .../requirements.txt | 2 + .../run_experiment.py | 309 ++++++++++++++++++ 12 files changed, 613 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 docs/SECURITY.md create mode 100644 docs/SETUP.md create mode 100644 standalone_numerical_experiments/local_volatility_instability/INDEPENDENT_STANDALONE.txt create mode 100644 standalone_numerical_experiments/local_volatility_instability/figures/lv_relerr.png create mode 100644 standalone_numerical_experiments/local_volatility_instability/figures/lv_rmse.png create mode 100644 standalone_numerical_experiments/local_volatility_instability/figures/lv_sigma2.png create mode 100644 standalone_numerical_experiments/local_volatility_instability/gatheral_local_vol.py create mode 100644 standalone_numerical_experiments/local_volatility_instability/lv_rmse.png create mode 100644 standalone_numerical_experiments/local_volatility_instability/requirements.txt create mode 100644 standalone_numerical_experiments/local_volatility_instability/run_experiment.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b3664f --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Built Python extension dropped next to qengine/__init__.py for local dev +/qengine/*.so +/qengine/*.dylib +/qengine/__pycache__/ + +/skbuild-build/ + +/build/ +/.idea/ +**/__pycache__/ +/docs/html/ +/docs/latex/ + +# Local reference tree (optional clone) +/CPP-design-pattern-derivatives-pricing/ + +# Local environment and secrets +.env +.env.* +!.env.example + +# Local tooling caches +/.pycache/ +/.mplconfig/ diff --git a/README.md b/README.md index d1bb550..896381a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,79 @@ -# pricing +# option_pricing -Monte Carlo pricing of European options under Black–Scholes +C++/Python quantitative finance engine for option pricing, implied-volatility analysis, and market-data ingestion. -### Project structure +## What is included + +- `cpp/`: core C++ pricing library (Monte Carlo + Black-Scholes closed form), DB ingestion hooks, and pybind bindings. +- `qengine/`: Python package exposing the native extension (`import qengine`). +- `src/ImpliedVolatility/`: SVI calibration and implied-volatility tooling. +- `src/data/`: data ingestion, SQL schema, and analytics helpers. +- `tests/`: C++ unit tests (GoogleTest). +- `scripts/`: operational scripts, including PostgreSQL setup. +- `docs/`: Doxygen configuration and generated API docs (ignored in git for publication). + +## Quickstart + +### 1) Clone and create a Python environment + +```bash +python3 -m venv .venv +source .venv/bin/activate +pip install --upgrade pip +pip install -e . +pip install pandas yfinance sqlalchemy psycopg2-binary matplotlib scipy +``` + +### 2) Configure environment variables + +```bash +cp .env.example .env +``` + +Then edit `.env` with your local database credentials. + +### 3) Create database and schema + +Use the idempotent setup script: + +```bash +source .env +python scripts/setup_postgres.py +``` + +This script creates/updates: +- database role (`DB_USER`) +- database (`DB_NAME`) +- tables/indexes from `src/data/sql/schema.sql` + +### 4) Build C++ extension and run tests + +```bash +cmake -S . -B build +cmake --build build -j +ctest --test-dir build --output-on-failure +``` + +### 5) Run Yahoo options ingestion + +```bash +source .env +python src/data/ingestion/ingest_yahoo_options.py +``` + +`PIPELINE_SYMBOLS` in `.env` controls which symbols are ingested (comma-separated, e.g. `SPY,AAPL,QQQ`). + +## Security and publication notes + +- No credentials are stored in source code. +- `.env` files are git-ignored; only `.env.example` is committed. +- Before publishing, rotate any credentials that were ever committed in the past. +- Prefer least-privilege DB users for runtime ingestion jobs. + +## Generating C++ API docs + +```bash +cmake --build build --target docs +``` + +Generated output goes to `docs/html/` and is ignored in version control. diff --git a/docs/SECURITY.md b/docs/SECURITY.md new file mode 100644 index 0000000..ec71ad6 --- /dev/null +++ b/docs/SECURITY.md @@ -0,0 +1,27 @@ +# Security Checklist + +## Secrets handling + +- Never commit `.env` or any file containing credentials. +- Use `.env.example` for non-sensitive defaults only. +- Set DB credentials through environment variables. +- Rotate credentials if they have ever appeared in git history. + +## Database hardening + +- Use a dedicated runtime user with least required privileges. +- Keep administrative users separate from ingestion users. +- Restrict DB network access to trusted hosts/VPC/private network. +- Enable SSL/TLS for non-local database connections. + +## Publication readiness + +Before making the repository public: + +1. Confirm `git status` has no secret files staged. +2. Search for potential secret patterns: + - passwords + - API keys + - tokens +3. Verify `.gitignore` includes local secret files (`.env*`). +4. Regenerate credentials used during development. diff --git a/docs/SETUP.md b/docs/SETUP.md new file mode 100644 index 0000000..01f347a --- /dev/null +++ b/docs/SETUP.md @@ -0,0 +1,60 @@ +# Setup Guide + +This guide describes a clean local setup for development and reproducible runs. + +## Prerequisites + +- Python 3.10+ +- CMake 3.16+ +- A C++20 compiler +- PostgreSQL 14+ (or Docker) +- On macOS, Homebrew packages for C++ DB support: + - `libpq` + - `libpqxx` + - `eigen` + - `pybind11` + +## Python dependencies + +```bash +python3 -m venv .venv +source .venv/bin/activate +pip install --upgrade pip +pip install -e . +pip install pandas yfinance sqlalchemy psycopg2-binary matplotlib scipy +``` + +## Environment configuration + +```bash +cp .env.example .env +``` + +Edit `.env` and set: + +- `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASSWORD` +- `PIPELINE_SYMBOLS` +- admin credentials used only by setup script (`POSTGRES_ADMIN_*`) + +## Database bootstrap + +```bash +source .env +python scripts/setup_postgres.py +``` + +The script is idempotent and safe to rerun. + +## Build and test C++ + +```bash +cmake -S . -B build +cmake --build build -j +ctest --test-dir build --output-on-failure +``` + +## Generate Doxygen docs + +```bash +cmake --build build --target docs +``` diff --git a/standalone_numerical_experiments/local_volatility_instability/INDEPENDENT_STANDALONE.txt b/standalone_numerical_experiments/local_volatility_instability/INDEPENDENT_STANDALONE.txt new file mode 100644 index 0000000..58fc565 --- /dev/null +++ b/standalone_numerical_experiments/local_volatility_instability/INDEPENDENT_STANDALONE.txt @@ -0,0 +1,6 @@ +This folder is intentionally self-contained. + +- No imports from the parent option_pricing package (no qengine, src/, cpp bindings). +- Third-party dependencies: numpy, matplotlib (see requirements.txt). +- Run: python run_experiment.py [--out lv_rmse.png] +- Safe to copy elsewhere or run in isolation. diff --git a/standalone_numerical_experiments/local_volatility_instability/figures/lv_relerr.png b/standalone_numerical_experiments/local_volatility_instability/figures/lv_relerr.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef14f38d0942c1df04bf19abffa14094f48ea76 GIT binary patch literal 151424 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 WdwN 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

{%?p2_g>WKWJ>j) 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

Qth*pN)0;|TF2y7Ag2 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 B2V?*M literal 0 HcmV?d00001 diff --git a/standalone_numerical_experiments/local_volatility_instability/figures/lv_sigma2.png b/standalone_numerical_experiments/local_volatility_instability/figures/lv_sigma2.png new file mode 100644 index 0000000000000000000000000000000000000000..e5253556b562ed48fbbbe669d3470c4aa635b1e4 GIT binary patch literal 146328 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 literal 0 HcmV?d00001 diff --git a/standalone_numerical_experiments/local_volatility_instability/gatheral_local_vol.py b/standalone_numerical_experiments/local_volatility_instability/gatheral_local_vol.py new file mode 100644 index 0000000..19db847 --- /dev/null +++ b/standalone_numerical_experiments/local_volatility_instability/gatheral_local_vol.py @@ -0,0 +1,108 @@ +""" +Gatheral local variance in total-variance / log-moneyness form (practitioner's guide). + +sigma^2 = (d_T w) / ( 1 - (y/w) d_y w + + (1/4)(-1/4 - 1/w + y^2/w^2) (d_y w)^2 + + (1/2) d_yy w ) + +where w = omega is total implied variance, y is log-moneyness (convention as in the note). +""" + +from __future__ import annotations + +import numpy as np + + +def local_variance_from_derivatives( + y: np.ndarray, + w: np.ndarray, + dy_w: np.ndarray, + dyy_w: np.ndarray, + dT_w: np.ndarray, + *, + eps: float = 1e-14, +) -> np.ndarray: + """Vectorized Gatheral formula. Invalid / near-singular points become nan.""" + y = np.asarray(y, dtype=float) + w = np.asarray(w, dtype=float) + dy_w = np.asarray(dy_w, dtype=float) + dyy_w = np.asarray(dyy_w, dtype=float) + dT_w = np.asarray(dT_w, dtype=float) + + out = np.full_like(y, np.nan, dtype=float) + ok = np.isfinite(w) & (np.abs(w) > eps) & np.isfinite(dy_w) & np.isfinite(dyy_w) & np.isfinite(dT_w) + + denom = np.empty_like(w) + denom[ok] = ( + 1.0 + - (y[ok] / w[ok]) * dy_w[ok] + + 0.25 * (-0.25 - 1.0 / w[ok] + (y[ok] ** 2) / (w[ok] ** 2)) * (dy_w[ok] ** 2) + + 0.5 * dyy_w[ok] + ) + + ok2 = ok & (np.abs(denom) > eps) + out[ok2] = dT_w[ok2] / denom[ok2] + return out + + +def quadratic_total_variance( + y: np.ndarray, + alpha: float, + beta: float, + gamma: float, + T: float, +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + """ + w(y,T) = T * (alpha + beta*y + gamma*y^2), with derivatives as in the note: + + d_T w = alpha + beta*y + gamma*y^2 + d_y w = T * (beta + 2*gamma*y) + d_yy w = 2*gamma*T + """ + y = np.asarray(y, dtype=float) + f = alpha + beta * y + gamma * y ** 2 + w = T * f + dT_w = f + dy_w = T * (beta + 2.0 * gamma * y) + dyy_w = np.full_like(y, 2.0 * gamma * T) + return w, dT_w, dy_w, dyy_w + + +def analytic_local_variance_quadratic( + y: np.ndarray, + alpha: float, + beta: float, + gamma: float, + T: float, +) -> np.ndarray: + """Closed form from the note (equivalent to plugging derivatives into Gatheral).""" + y = np.asarray(y, dtype=float) + w, dT_w, dy_w, dyy_w = quadratic_total_variance(y, alpha, beta, gamma, T) + return local_variance_from_derivatives(y, w, dy_w, dyy_w, dT_w) + + +def central_first_derivative_uniform(w: np.ndarray, h: float) -> np.ndarray: + """Interior (w[i+1]-w[i-1])/(2h); endpoints nan.""" + w = np.asarray(w, dtype=float) + out = np.full_like(w, np.nan) + out[1:-1] = (w[2:] - w[:-2]) / (2.0 * h) + return out + + +def second_derivative_uniform(w: np.ndarray, h: float) -> np.ndarray: + """Interior second difference / h^2; endpoints nan.""" + w = np.asarray(w, dtype=float) + out = np.full_like(w, np.nan) + out[1:-1] = (w[2:] - 2.0 * w[1:-1] + w[:-2]) / (h ** 2) + return out + + +def add_multiplicative_noise( + w: np.ndarray, + sigma_noise: float, + rng: np.random.Generator, +) -> np.ndarray: + """tilde w(y_i) = w(y_i) * (1 + eps), eps ~ N(0, sigma_noise^2).""" + w = np.asarray(w, dtype=float) + eps = rng.normal(0.0, sigma_noise, size=w.shape) + return w * (1.0 + eps) diff --git a/standalone_numerical_experiments/local_volatility_instability/lv_rmse.png b/standalone_numerical_experiments/local_volatility_instability/lv_rmse.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a75e7362823d63f620c5c7420c3ffaf0c670eb GIT binary patch literal 157981 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 literal 0 HcmV?d00001 diff --git a/standalone_numerical_experiments/local_volatility_instability/requirements.txt b/standalone_numerical_experiments/local_volatility_instability/requirements.txt new file mode 100644 index 0000000..337f34a --- /dev/null +++ b/standalone_numerical_experiments/local_volatility_instability/requirements.txt @@ -0,0 +1,2 @@ +numpy>=1.20 +matplotlib>=3.5 diff --git a/standalone_numerical_experiments/local_volatility_instability/run_experiment.py b/standalone_numerical_experiments/local_volatility_instability/run_experiment.py new file mode 100644 index 0000000..cb6b3f2 --- /dev/null +++ b/standalone_numerical_experiments/local_volatility_instability/run_experiment.py @@ -0,0 +1,309 @@ +#!/usr/bin/env python3 +""" +Local-volatility instability experiment (Gatheral total variance in log-moneyness). + +We compare the analytic local variance σ²(y) from a quadratic total variance +w(y,T) = T(α + βy + γy²) to σ² reconstructed from a noisy discrete surface +w̃(y_i) = w(y_i)(1 + ε_i) using finite differences in y, for several levels of +multiplicative noise σ_noise. This script only produces the figure: RMSE of the +FD reconstruction vs σ_noise (log–log), with a y = σ reference line of slope 1. + +Dependencies: numpy, matplotlib only (see INDEPENDENT_STANDALONE.txt). +""" + +from __future__ import annotations + +import argparse +import os +import sys +from typing import Literal + +# Prevent accidental imports from the parent repository +_REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +if _REPO_ROOT in sys.path: + sys.path.remove(_REPO_ROOT) + +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np + +from gatheral_local_vol import ( + add_multiplicative_noise, + analytic_local_variance_quadratic, + central_first_derivative_uniform, + local_variance_from_derivatives, + quadratic_total_variance, + second_derivative_uniform, +) + +# --------------------------------------------------------------------------- +# Defaults (quadratic total variance, positive w on y ∈ [-0.5, 0.5]) +# --------------------------------------------------------------------------- + +ALPHA = 0.04 +BETA = 0.0 +GAMMA = 0.1 +T_MATURITY = 1.0 +Y_MIN = -0.5 +Y_MAX = 0.5 +N_GRID = 201 + + +def ensure_parent_dir(path: str) -> None: + parent = os.path.dirname(os.path.abspath(path)) + if parent: + os.makedirs(parent, exist_ok=True) + + +def log_uniform_sigma_grid(n_points: int, sigma_min: float, sigma_max: float) -> np.ndarray: + """ + Return `n_points` values of σ_noise with log₁₀(σ) equally spaced. + + This is the correct sampling for a log–log RMSE plot; it is not linspace(σ_min, σ_max). + """ + n_points = max(4, n_points) + if sigma_min <= 0 or sigma_max <= 0 or sigma_max < sigma_min: + raise ValueError("Require 0 < sigma_min <= sigma_max.") + return np.logspace(np.log10(sigma_min), np.log10(sigma_max), n_points) + + +def relative_pointwise_error( + sigma2_analytic: np.ndarray, sigma2_fd: np.ndarray, eps: float = 1e-12 +) -> np.ndarray: + return (sigma2_fd - sigma2_analytic) / np.maximum(np.abs(sigma2_analytic), eps) + + +def rmse_absolute( + sigma2_analytic: np.ndarray, + sigma2_fd: np.ndarray, + interior: slice, +) -> float: + """RMSE of (σ²_FD − σ²_analytic) on interior indices.""" + sa = np.asarray(sigma2_analytic, dtype=float)[interior] + sf = np.asarray(sigma2_fd, dtype=float)[interior] + m = np.isfinite(sa) & np.isfinite(sf) + if not np.any(m): + return float("nan") + d = sf[m] - sa[m] + return float(np.sqrt(np.mean(d * d))) + + +def rmse_relative( + sigma2_analytic: np.ndarray, + sigma2_fd: np.ndarray, + interior: slice, + eps: float = 1e-12, +) -> float: + """RMSE over grid points of relative error (σ²_FD − σ²_analytic) / |σ²_analytic|.""" + re = relative_pointwise_error(sigma2_analytic, sigma2_fd, eps=eps)[interior] + m = np.isfinite(re) + if not np.any(m): + return float("nan") + return float(np.sqrt(np.mean(re[m] ** 2))) + + +def local_variance_one_draw( + y: np.ndarray, + h: float, + alpha: float, + beta: float, + gamma: float, + T: float, + sigma_noise: float, + rng: np.random.Generator, + dT_mode: Literal["exact", "noisy_ratio"], +) -> tuple[np.ndarray, np.ndarray]: + """One noisy surface and FD local variance; returns (σ²_analytic, σ²_FD).""" + w_true, dT_w_true, _, _ = quadratic_total_variance(y, alpha, beta, gamma, T) + sigma2_a = analytic_local_variance_quadratic(y, alpha, beta, gamma, T) + + w_tilde = add_multiplicative_noise(w_true, sigma_noise, rng) + dy = central_first_derivative_uniform(w_tilde, h) + dyy = second_derivative_uniform(w_tilde, h) + + if dT_mode == "exact": + dT = dT_w_true + elif dT_mode == "noisy_ratio": + dT = w_tilde / T + else: + raise ValueError(dT_mode) + + sigma2_fd = local_variance_from_derivatives(y, w_tilde, dy, dyy, dT) + return sigma2_a, sigma2_fd + + +def rmse_curves_averaged( + y: np.ndarray, + h: float, + alpha: float, + beta: float, + gamma: float, + T: float, + sigma_grid: np.ndarray, + rng: np.random.Generator, + dT_mode: Literal["exact", "noisy_ratio"], + interior: slice, + trials_per_sigma: int, +) -> tuple[np.ndarray, np.ndarray]: + """ + For each σ in `sigma_grid`, average RMSE (relative and absolute) over + `trials_per_sigma` independent noise draws. + """ + rel: list[float] = [] + abs_: list[float] = [] + trials_per_sigma = max(1, trials_per_sigma) + + for sig in sigma_grid: + tr: list[float] = [] + ta: list[float] = [] + for _ in range(trials_per_sigma): + sa, sf = local_variance_one_draw( + y, h, alpha, beta, gamma, T, float(sig), rng, dT_mode + ) + tr.append(rmse_relative(sa, sf, interior)) + ta.append(rmse_absolute(sa, sf, interior)) + rel.append(float(np.nanmean(tr))) + abs_.append(float(np.nanmean(ta))) + + return np.asarray(rel, dtype=float), np.asarray(abs_, dtype=float) + + +def plot_rmse_vs_noise( + sigma_grid: np.ndarray, + rmse_rel: np.ndarray, + rmse_abs: np.ndarray, + *, + h: float, + T: float, + dT_mode: str, + trials_per_sigma: int, +) -> mpl.figure.Figure: + """ + Log–log plot: RMSE (relative and absolute in σ²) vs σ_noise, reference y = σ. + """ + fig, ax = plt.subplots(figsize=(5.8, 3.8), constrained_layout=True) + + x = np.asarray(sigma_grid, dtype=float) + pos = x > 0 + n = len(x) + ms = 3.5 if n > 50 else 4.5 + + ax.loglog( + x[pos], + rmse_rel[pos], + "o-", + ms=ms, + lw=1.25, + label=r"RMSE of relative error $(\sigma^2_{\mathrm{FD}}-\sigma^2_{\mathrm{nat}})/|\sigma^2_{\mathrm{nat}}|$", + zorder=3, + ) + ax.loglog( + x[pos], + rmse_abs[pos], + "s--", + ms=ms - 1, + lw=1.0, + alpha=0.9, + label=r"RMSE of $\sigma^2$ error $|\sigma^2_{\mathrm{FD}}-\sigma^2_{\mathrm{nat}}|$", + zorder=2, + ) + + s_lo, s_hi = float(x[pos].min()), float(x[pos].max()) + ax.loglog([s_lo, s_hi], [s_lo, s_hi], ":", color="0.4", lw=2.0, zorder=1, label=r"reference slope 1: $y=\sigma_{\mathrm{noise}}$") + + ax.set_xlabel(r"$\sigma_{\mathrm{noise}}$ (multiplicative noise on $\tilde{w}$)") + ax.set_ylabel("RMSE (interior $y$)") + subtitle = f"$T={T}$, $h={h:.4f}$, $\\partial_T w$: {dT_mode}" + if trials_per_sigma > 1: + subtitle += f", mean over {trials_per_sigma} draws per $\\sigma$" + ax.set_title("FD local variance: RMSE vs noise\n" + subtitle, fontsize=10) + ax.grid(True, which="both", alpha=0.35) + ax.legend(loc="best", fontsize=8, framealpha=0.95) + + return fig + + +def configure_matplotlib_style() -> None: + """Conservative defaults suitable for print.""" + mpl.rcParams.update( + { + "figure.dpi": 120, + "savefig.dpi": 300, + "font.size": 10, + "axes.labelsize": 10, + "axes.titlesize": 10, + "legend.fontsize": 8, + "axes.grid": True, + } + ) + + +def main() -> None: + configure_matplotlib_style() + + parser = argparse.ArgumentParser( + description="RMSE of finite-difference local variance vs multiplicative noise (single figure).", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument("--seed", type=int, default=42, help="RNG seed.") + parser.add_argument( + "--out", + type=str, + default="lv_rmse.png", + help="Output image path.", + ) + parser.add_argument( + "--dT-mode", + choices=("exact", "noisy_ratio"), + default="exact", + help="Treatment of ∂_T w when w is replaced by noisy w̃ on the grid.", + ) + parser.add_argument("--rmse-points", type=int, default=35, help="Number of σ_noise values (log-uniform).") + parser.add_argument("--rmse-sigma-min", type=float, default=1e-5, help="Smallest σ_noise.") + parser.add_argument("--rmse-sigma-max", type=float, default=5e-4, help="Largest σ_noise.") + parser.add_argument( + "--rmse-trials", + type=int, + default=50, + help="Independent noisy surfaces per σ_noise; RMSE is averaged.", + ) + args = parser.parse_args() + + rng = np.random.default_rng(args.seed) + y = np.linspace(Y_MIN, Y_MAX, N_GRID) + h = float(y[1] - y[0]) + interior = slice(1, -1) + + sigma_grid = log_uniform_sigma_grid(args.rmse_points, args.rmse_sigma_min, args.rmse_sigma_max) + rmse_rel, rmse_abs = rmse_curves_averaged( + y, + h, + ALPHA, + BETA, + GAMMA, + T_MATURITY, + sigma_grid, + rng, + args.dT_mode, + interior, + args.rmse_trials, + ) + + fig = plot_rmse_vs_noise( + sigma_grid, + rmse_rel, + rmse_abs, + h=h, + T=T_MATURITY, + dT_mode=args.dT_mode, + trials_per_sigma=args.rmse_trials, + ) + + ensure_parent_dir(args.out) + fig.savefig(args.out, bbox_inches="tight") + print(f"Wrote {args.out}") + plt.close(fig) + + +if __name__ == "__main__": + main() From 23a28c67763bfacb1995fc7d72c7adbf2a9ae1f9 Mon Sep 17 00:00:00 2001 From: David Doebel Date: Thu, 2 Apr 2026 16:31:07 +0200 Subject: [PATCH 5/5] Add repository root package marker. Track the top-level __init__.py so local package imports remain consistent with the current project layout. Made-with: Cursor --- __init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 __init__.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29