quant-pricer-cpp
Loading...
Searching...
No Matches
pde.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "quant/barrier.hpp" // for ::quant::OptionType
6#include <optional>
7#include <vector>
8
9namespace quant::pde {
10
12struct GridSpec {
13 int num_space; // number of spatial nodes (including boundaries)
14 int num_time; // number of time steps
15 double s_max_mult; // S_max multiple of spot for upper boundary
16 double stretch{0.0}; // tanh stretching parameter (0 -> uniform)
17};
18
22std::vector<double> solve_tridiagonal(const std::vector<double>& a, const std::vector<double>& b,
23 const std::vector<double>& c, const std::vector<double>& d);
24
26struct PdeParams {
27 double spot;
28 double strike;
29 double rate;
30 double dividend;
31 double vol;
32 double time;
36 bool log_space{false};
41 bool compute_theta{false};
43 bool use_rannacher{true};
44 // Optional piecewise-constant schedules; when set, override scalars
45 std::optional<quant::PiecewiseConstant> rate_schedule{};
46 std::optional<quant::PiecewiseConstant> dividend_schedule{};
47 std::optional<quant::PiecewiseConstant> vol_schedule{};
48};
49
50struct PdeResult {
51 double price;
52 double delta;
53 double gamma;
54 std::optional<double> theta;
55};
56
60
61} // namespace quant::pde
Finite-difference PDE pricer (Crank–Nicolson) for European options.
Definition pde.hpp:9
PdeResult price_crank_nicolson(const PdeParams &p)
Definition pde.cpp:182
std::vector< double > solve_tridiagonal(const std::vector< double > &a, const std::vector< double > &b, const std::vector< double > &c, const std::vector< double > &d)
Definition pde.cpp:144
OptionType
Definition barrier.hpp:6
unsigned a
Definition sobol.cpp:17
Grid specification for PDE solver.
Definition pde.hpp:12
double stretch
Definition pde.hpp:16
int num_space
Definition pde.hpp:13
double s_max_mult
Definition pde.hpp:15
int num_time
Definition pde.hpp:14
PDE pricing parameters and grid configuration.
Definition pde.hpp:26
std::optional< quant::PiecewiseConstant > dividend_schedule
Definition pde.hpp:46
std::optional< quant::PiecewiseConstant > vol_schedule
Definition pde.hpp:47
double rate
Definition pde.hpp:29
bool use_rannacher
Apply two-step Rannacher start-up when true.
Definition pde.hpp:43
std::optional< quant::PiecewiseConstant > rate_schedule
Definition pde.hpp:45
::quant::OptionType type
Definition pde.hpp:33
bool log_space
Use log-space grid x = ln(S) for improved stability near boundaries.
Definition pde.hpp:36
double time
Definition pde.hpp:32
double spot
Definition pde.hpp:27
double vol
Definition pde.hpp:31
bool compute_theta
Request backward-difference Theta in addition to price/Delta/Gamma.
Definition pde.hpp:41
double strike
Definition pde.hpp:28
double dividend
Definition pde.hpp:30
GridSpec grid
Definition pde.hpp:34
UpperBoundary
Upper boundary condition type.
Definition pde.hpp:38
UpperBoundary upper_boundary
Definition pde.hpp:39
Definition pde.hpp:50
double gamma
Definition pde.hpp:53
std::optional< double > theta
Definition pde.hpp:54
double delta
Definition pde.hpp:52
double price
Definition pde.hpp:51