Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }