template class xf::fintech::internal::HJMPcaEngine¶
#include "hjm_engine.hpp"
Overview¶
Class for calculating the inputs to the MonteCarlo simulation of Heath-Jarrow-Morton framework. It deals with analysing historical data, calculating the risk neutral drift and the polynomial fitting of the discrete volatility vectors.
Parameters:
DT | DataType for the internal calculations |
MAX_TENORS | Maximum synthetisable tenors supported by the framework. |
MAX_CURVES | Maximum number of days analyzable from historical data |
NCU | Number of compute units on the historical data matrix. |
template < typename DT, unsigned int MAX_TENORS, unsigned MAX_CURVES, unsigned NCU > class HJMPcaEngine: public hjmModelParams
Methods¶
riskNeutralDrift¶
void riskNeutralDrift ( DT vol_c1] [PD[0], DT vol_c2] [PD[1], DT vol_c3] [PD[2], DT rnd [MAX_TENORS] )
Risk Neutral drift calculation. tau assumed to be 0.5 years.
RnD calculated as :math:` vol(t) * integral(vol(t)) ` for all volatilities and for :math:` t=1,…,n `
volatility_polyfit¶
void volatility_polyfit ( DT discreteVols [MAX_TENORS][N], DT vol1] [VOL_POLYFIT_FANOUT][PD[0], DT vol2] [VOL_POLYFIT_FANOUT][PD[1], DT vol3] [VOL_POLYFIT_FANOUT][PD[2] )
Transforms each discrete volatility vector into a continuous least-squares fitting of a polynomial. The chosen degrees for the polynomial is a model specific parameter selected for better convergence. Each set of coefficients is also split into several copies for its use in different parts of the model. The outputs is a set of coefficients, ‘degree + 1’ elements wide that represent the function :math:` c_0 + c_1*x + c_2*x^2 + … + c_n*x^n ` .
Parameters:
discreteVols | Matrix with discrete volatilities arranged in sets of N vectors. |
vol1 | Polynomial coefficients for the first volatility vector |
vol2 | Polynomial coefficients for the second volatility vector |
vol3 | Polynomial coefficients for the third volatility vector |
matdiffRows¶
template < unsigned R, unsigned C > void matdiffRows ( DT input [R][C], DT output [R-1][C], unsigned r, unsigned c )
matdiff function that computes the difference between rows in a matrix.
Parameters:
input | Input matrix data. |
output | Output containing the diff of the matrix data. It will contain 1 fewer row than the original. |
mtransp¶
template < unsigned R, unsigned C > void mtransp ( unsigned r, unsigned c, DT input [R][C], DT output [C][R] )
Calculates the transpose of a matrix.
calculateDiscreteVolatility¶
void calculateDiscreteVolatility ( DT ratesIn [MAX_CURVES][MAX_TENORS], DT discreteVols [MAX_TENORS][N] )
Extracts N
discrete volatility vectors from a matrix of historical interest rates. A Principal Component Analysis will be performed on the differences of the data, and a dimensionality reduction will be performed to extract the noTenors
datapoints for each vector.
Parameters:
ratesIn | Matrix with all the raw historical data, with size noTenors x noObservations |
discreteVols | Output vectors of the discrete volatilities arranged in sets of N. It will contain noTenors elements. |