quant-pricer-cpp
Loading...
Searching...
No Matches
grid_utils.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4
5#include "quant/barrier.hpp"
6
8
9struct SpaceGrid {
10 std::vector<double> coordinate; // Differencing coordinate (S or log S)
11 std::vector<double> spot; // Underlying spot values corresponding to coordinate nodes
12};
13
14// Hyperbolic-tangent stretch map with anchor in [0,1].
15double stretch_map(double xi, double anchor, double stretch);
16
18 int nodes; // number of grid points (>= 1)
19 double lower; // lower bound in spot space (S-space)
20 double upper; // upper bound in spot space (S-space)
21 double anchor; // anchor spot value to focus grid density (typically strike)
22 double stretch; // tanh stretch parameter (0 => uniform)
23 bool log_space; // when true, coordinate is ln(S)
24};
25
27
29 double sigma; // instantaneous volatility
30 double rate; // risk-free rate
31 double dividend; // dividend yield
32 bool log_space; // match grid coordinate system
33};
34
36 std::vector<double> lower;
37 std::vector<double> diag;
38 std::vector<double> upper;
39 std::vector<double> rhs;
40};
41
42// Assemble interior tridiagonal coefficients for a backward Euler/Crank-Nicolson step.
43// "theta" = 1 corresponds to fully implicit, 0.5 => Crank-Nicolson.
44void assemble_operator(const SpaceGrid& grid, const DiffusionCoefficients& coeffs, double dt, double theta,
45 const std::vector<double>& v_curr, OperatorWorkspace& op);
46
49 double strike;
50 double rate;
51 double dividend;
52 double tau; // remaining time to maturity (years)
53};
54
55double dirichlet_boundary(const PayoffBoundaryParams& params, double spot, bool is_lower);
56
57} // namespace quant::grid_utils
quant::stats::Welford theta
Definition mc.cpp:57
double spot
Definition mc.cpp:69
std::vector< double > dt
Definition mc.cpp:136
const McParams & params
Definition mc.cpp:126
Definition grid_utils.hpp:7
double dirichlet_boundary(const PayoffBoundaryParams &params, double spot, bool is_lower)
Definition grid_utils.cpp:134
SpaceGrid build_space_grid(const StretchedGridParams &params)
Definition grid_utils.cpp:23
void assemble_operator(const SpaceGrid &grid, const DiffusionCoefficients &coeffs, double dt, double theta, const std::vector< double > &v_curr, OperatorWorkspace &op)
Definition grid_utils.cpp:71
double stretch_map(double xi, double anchor, double stretch)
Definition grid_utils.cpp:9
OptionType
Definition barrier.hpp:6
Definition grid_utils.hpp:28
double rate
Definition grid_utils.hpp:30
double sigma
Definition grid_utils.hpp:29
double dividend
Definition grid_utils.hpp:31
bool log_space
Definition grid_utils.hpp:32
Definition grid_utils.hpp:35
std::vector< double > lower
Definition grid_utils.hpp:36
std::vector< double > upper
Definition grid_utils.hpp:38
std::vector< double > rhs
Definition grid_utils.hpp:39
std::vector< double > diag
Definition grid_utils.hpp:37
Definition grid_utils.hpp:47
double dividend
Definition grid_utils.hpp:51
double strike
Definition grid_utils.hpp:49
double tau
Definition grid_utils.hpp:52
double rate
Definition grid_utils.hpp:50
::quant::OptionType type
Definition grid_utils.hpp:48
Definition grid_utils.hpp:9
std::vector< double > spot
Definition grid_utils.hpp:11
std::vector< double > coordinate
Definition grid_utils.hpp:10
Definition grid_utils.hpp:17
double stretch
Definition grid_utils.hpp:22
double anchor
Definition grid_utils.hpp:21
double upper
Definition grid_utils.hpp:20
int nodes
Definition grid_utils.hpp:18
double lower
Definition grid_utils.hpp:19
bool log_space
Definition grid_utils.hpp:23