Struct loan_ec::EconomicCapitalAttributes
source · pub struct EconomicCapitalAttributes { /* private fields */ }
Expand description
Holds the attributes for the entire
portfolio.
The “cf” element holds the characteristic function for the portfolio.
The “el_vec” element holds the expected value (first moment) vector of length num_w for the portfolio.
The “var_vec” element holds the second moment vector of length num_w for the portfolio (p_j E[l^2]w_j).
The “num_w” element holds the number of systemic random variables.
The “lambda” element holds the total liquidity risk for the portfolio (derived from each loan)
Implementations§
source§impl EconomicCapitalAttributes
impl EconomicCapitalAttributes
Implements economic capital structure
sourcepub fn new(num_u: usize, num_w: usize) -> EconomicCapitalAttributes
pub fn new(num_u: usize, num_w: usize) -> EconomicCapitalAttributes
Creates a new (base) economic capital struct
sourcepub fn process_loan<U>(
&mut self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U
)where
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
pub fn process_loan<U>(
&mut self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U
)where
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
Adds a new loan to the portfolio Mutates el_vec, var_vec, cf, and lambda
sourcepub fn experiment_loan<U>(
&self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U
) -> EconomicCapitalAttributeswhere
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
pub fn experiment_loan<U>(
&self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U
) -> EconomicCapitalAttributeswhere
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
Performs marginal analytics for a potential loan to the portfolio. The typical use case is for pricing a new loan that could potentially be added to the portfolio. For a loan is already in the portfolio, the “process_loan” function should be used.
sourcepub fn experiment_risk_contribution<U, V, T>(
&self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U,
lambda0: f64,
q: f64,
mgf_systemic: V,
el_sys: &[f64],
var_sys: &[f64],
risk_measure_fn: T
) -> f64where
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
V: Fn(&[Complex<f64>]) -> Complex<f64> + Sync + Send,
T: Fn(&[Complex<f64>]) -> f64 + Sync + Send,
pub fn experiment_risk_contribution<U, V, T>(
&self,
loan: &Loan,
u_domain: &[Complex<f64>],
log_lpm_cf: U,
lambda0: f64,
q: f64,
mgf_systemic: V,
el_sys: &[f64],
var_sys: &[f64],
risk_measure_fn: T
) -> f64where
U: Fn(&Complex<f64>, &Loan) -> Complex<f64> + Sync + Send,
V: Fn(&[Complex<f64>]) -> Complex<f64> + Sync + Send,
T: Fn(&[Complex<f64>]) -> f64 + Sync + Send,
Finds the risk contribution of a new loan. This can be called instead of experiment loan to provide a simpler API than obtaining the analytics from “experiment_loan” and running them through the “risk_contribution” function. The “lambda0” argument is the ase loss in a liquidity event, independent of loan’s liquidity. The “q” argument is the scalar to adjust the probability of a liquidity event. Proportional to the probability of a liquidity event. The “mgf_systemic” argument is the moment generating function is likely to be a function of el_sys and var_sys.
sourcepub fn get_portfolio_expectation(&self, expectation_systemic: &[f64]) -> f64
pub fn get_portfolio_expectation(&self, expectation_systemic: &[f64]) -> f64
Gets the expected value of the portfolio without liquidity risk. This should be called after processing all the loans in the portfolio.
sourcepub fn get_portfolio_variance(
&self,
expectation_systemic: &[f64],
variance_systemic: &[f64]
) -> f64
pub fn get_portfolio_variance(
&self,
expectation_systemic: &[f64],
variance_systemic: &[f64]
) -> f64
Gets the variance of the portfolio without liquidity risk. This should be called after processing all the loans in the portfolio.