SAS Documentation
SASĀ® Solution for Stress Testing
Reference manual - version 08.2021
Loading...
Searching...
No Matches
irmst_model_mip_preexec_simBased.sas
1/* --------------------------------------------------------------------------------------------------------------------
2 * Use a pre-execution program to customize the SAS Risk Dimensions environment before the analysis run is executed.
3 *
4 * Example: proc risk;
5 * env new=mipenv.risk_env inherit=(mimp_sas.sas_risk_env);
6 * setoptions NOBACKSAVE;
7 * project mipProject projectmethods = base_project;
8 * env save;
9 * run;
10 * --------------------------------------------------------------------------------------------------------------------*/
11
12 %let ValueAtRisk_Level = ${params.VARLEVEL};
13
14 /*Define the name of the scenario. This is needed because MIP does not support multiple scenarios when when an
15 Economic Simulation Run is selected. Notice that his */
16 proc sql noprint;
17 select max(scenario_name) into: _current_scenario_
18 from mipecon.scenario_data;
19 quit;
20
21 proc risk;
22 env new=mipenv.risk_env inherit=(mimp_sas.sas_risk_env)
23 label="MIP run risk environment created by pre-execution program";
24 setoptions NOBACKSAVE;
25
26
27 /*-create default project-*/
28 project mipProject projectmethods = base_project;
29 /* end: project */
30
31 /* Declare Riskfactor variables: Macro */
32Declare riskfactors=( GDP_index num var category=Creditindex label='Macroeconomic indices - GDP Index' group='Macroeconomic indices' mlevel=interval refmap=(riskfactor='GDP_Index'),
33 Corporate_index1 num var category=Creditindex label='Macroeconomic indices - Corporate index 1' group='Macroeconomic indices' mlevel=interval refmap=(riskfactor='Corporate_index1'),
34 Corporate_index2 num var category=Creditindex label='Macroeconomic indices - Corporate index 2' group='Macroeconomic indices' mlevel=interval refmap=(riskfactor='Corporate_index2'),
35 Corporate_index3 num var category=Creditindex label='Macroeconomic indices - Corporate index 3' group='Macroeconomic indices' mlevel=interval refmap=(riskfactor='Corporate_index3')
36);
37
38 /* Declare Riskfactor variables: Collateral */
39Declare riskfactors=(asset_index01 num var category=Creditindex label='Collateral indices - index 1' group='Collateral indices' mlevel=interval refmap=(riskfactor='asset_index01'),
40 asset_index02 num var category=Creditindex label='Collateral indices - index 2' group='Collateral indices' mlevel=interval refmap=(riskfactor='asset_index02'),
41 asset_index03 num var category=Creditindex label='Collateral indices - index 3' group='Collateral indices' mlevel=interval refmap=(riskfactor='asset_index03')
42);
43
44/* FX spot rates */
45declare riskfactors =(FXUSD num fx_spot fromcur = usd tocur = eur category = FX label = 'EUR/USD exchange rate' group='FX spot rates' mlevel=ratio
46);
47
48
49
50/* Declare Riskfactor variables: IR */
51Declare riskfactors=(DSC_1Y num ir category=IR_Loan label='1 year IR USD' group='Zero rates: USD' Currency=USD Maturity=1 mlevel=ratio,
52 DSC_5y num ir category=IR_Loan label='5 year IR USD' group='Zero rates: USD' Currency=USD Maturity=5 mlevel=ratio,
53 DSC_10Y num ir category=IR_Loan label='10 year IR USD' group='Zero rates: USD' Currency=USD Maturity=10 mlevel=ratio
54);
55
56
57Array DSC_CURVE ir currency=USD category=IR group='Zero curve: USD'
58 label= "USD Loan Finance Curve"
59 elements= (DSC_1Y DSC_5Y DSC_10Y)
60 refmap=(curve_name_ref='DSC_CURVE');
61
62
63declare riskfactor=(
64 Spread_A1_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
65 Spread_A1_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
66 Spread_A1_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
67 Spread_A2_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
68 Spread_A2_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
69 Spread_A2_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
70 Spread_A3_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
71 Spread_A3_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
72 Spread_A3_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
73 Spread_A4_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
74 Spread_A4_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
75 Spread_A4_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
76 Spread_A5_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
77 Spread_A5_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
78 Spread_A5_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
79 Spread_A6_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
80 Spread_A6_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
81 Spread_A6_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
82 Spread_B1_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
83 Spread_B1_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
84 Spread_B1_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
85 Spread_B2_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
86 Spread_B2_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
87 Spread_B2_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio,
88 Spread_B3_1Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=1 mlevel=ratio,
89 Spread_B3_5Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=5 mlevel=ratio,
90 Spread_B3_10Y num ir category=IR label='1 Year spread A1' group='Spread rates: USD' Currency=USD Maturity=10 mlevel=ratio
91);
92
93/*There are some inconsistencies when reading different risk factor when reading different interests
94rates (different credit state) with equal maturities. Because of this inconsistency the curve is defined as
95of type "VAR" even though it is of type "IR". */
96array SPREAD_MATRIX VAR currency=USD group='Spread curves: USD' label='USD Credit Spreads'
97elements=(
98 Spread_A1_1Y
99 Spread_A2_1Y
100 Spread_A3_1Y
101 Spread_A4_1Y
102 Spread_A5_1Y
103 Spread_A6_1Y
104 Spread_B1_1Y
105 Spread_B2_1Y
106 Spread_B3_1Y
107 Spread_A1_5Y
108 Spread_A2_5Y
109 Spread_A3_5Y
110 Spread_A4_5Y
111 Spread_A5_5Y
112 Spread_A6_5Y
113 Spread_B1_5Y
114 Spread_B2_5Y
115 Spread_B3_5Y
116 Spread_A1_10Y
117 Spread_A2_10Y
118 Spread_A3_10Y
119 Spread_A4_10Y
120 Spread_A5_10Y
121 Spread_A6_10Y
122 Spread_B1_10Y
123 Spread_B2_10Y
124 Spread_B3_10Y
125 )
126 refmap=(curve_name_ref='SPREAD_MATRIX');
127
128 /* example distortion measures - or use your own fcmp function */
129 distmeasure myvar funcname=_var_ funcparm=&ValueAtRisk_Level. desc="my VaR &ValueAtRisk_Level. measure" distribution=all loss_measure;
130 distmeasure myvar95 funcname=var95 desc="my second VaR95 measure" distribution=all loss_measure;
131 distmeasure myes95 funcname=cvar95 desc="my CVaR hardcoded measure" distribution=all loss_measure;
132 distmeasure myes funcname=cvar funcparm=&ValueAtRisk_Level. desc="my CVaR alpha=&ValueAtRisk_Level." distribution=all loss_measure;
133 distmeasure mydbm funcname=dual_block_minima funcparm=0.5 desc="Dual Block Minima" distribution=all loss_measure;
134 distmeasure mybm funcname=block_maxima funcparm=2 desc="Block Maxima" distribution=all loss_measure;
135 distmeasure mywangq funcname=Wang_Transform_q funcparm=1.96 desc="Wang q" distribution=all loss_measure;
136 distmeasure mywangp funcname=Wang_Transform_p funcparm=0.975 desc="Wang p" distribution=all loss_measure;
137
138 setoptions alpha=%sysevalf(1-&ValueAtRisk_Level.);
139 env save;
140run;
141/*************************** New option for user defined stat - proc hp export *******************************************/
142/* fcmp function for betas */
143
144proc compile env=mipenv.risk_env outlib=mipenv.risk_env package=BetaCoefficient;
145
146
147 function randmultinomial(prob[*]);
148
149 k=DIM(prob)-1;
150
151
152 cum_prob=0;
153 do i_element=1 to k;
154 normalized_prob=prob[i_element]/(1-cum_prob);
155 sample = RAND('BINOMIAL',normalized_prob,1);
156 if sample=1 then do;
157 return(i_element);
158 end;
159 else do;
160 cum_prob=cum_prob+prob[i_element];
161 end;
162 end;
163
164 return(k+1);
165 endsub;
166
167run;