public static void RiskJacobian_Make(string baseHandle, string linearRateModelHandle, DateTime asOf, string[] calibSetsHandles, string[] curveTenors, bool useAd = false) { LinearRateModel model = ObjectMap.LinearRateModels[linearRateModelHandle]; RiskJacobian jacobian = new RiskJacobian(model, asOf); if (calibSetsHandles.Length != curveTenors.Length) { throw new InvalidOperationException("CurveTenor and Calibration set handles must have same dimension."); } for (int i = 0; i < calibSetsHandles.Length; i++) { jacobian.AddInstruments(ObjectMap.CalibrationInstrumentSets[calibSetsHandles[i]], StrToEnum.CurveTenorConvert(curveTenors[i])); } // Using this procedure, the instruments are actually sorted. jacobian.Initialize(); if (useAd) { // Construct using AD jacobian.ConstructUsingAD(); } else { jacobian.ConstructUsingBumpAndRun(); } ObjectMap.RiskJacobians[baseHandle] = jacobian; }
public static void RiskEngineNew_Make(string baseHandle, string portfolioHandle, string riskJacobianHandle, bool useAd) { RiskJacobian jacobian = ObjectMap.RiskJacobians[riskJacobianHandle]; double determinant = jacobian.Jacobian.Determinant(); LinearRateModel model = jacobian.Model; Portfolio portfolio = ObjectMap.Portfolios[portfolioHandle]; ObjectMap.RiskEngines[baseHandle] = new RiskEngine(model, portfolio, jacobian, useAd); }