Exemplo n.º 1
0
        // --- Related to valuing linear rate instrument (non-AD)
        public double ValueLinearRateProduct(LinearRateInstrument product)
        {
            switch (product.GetInstrumentType())
            {
            case Instrument.IrSwap:
                return(IrSwapNpv((IrSwap)product));

            case Instrument.Fra:
                return(FraNpv((Fra)product));

            case Instrument.Futures:
                return(FuturesNpv((Futures)product));

            case Instrument.OisSwap:
                return(DiscCurve.OisSwapNpv((OisSwap)product, Interpolation));

            case Instrument.BasisSwap:
                return(BasisSwapNpv((TenorBasisSwap)product));

            case Instrument.Deposit:
                return(DepositNpv((Deposit)product));

            default:
                throw new InvalidOperationException("product instrument type is not valid.");
            }
        }
Exemplo n.º 2
0
        // Calcualate BnR disc risk on a linear rate instrument
        public double BumpAndRunDisc(LinearRateInstrument product, int curvePoint, double bump = 0.0001)
        {
            double          valueNoBump = ValueLinearRateProduct(product);
            LinearRateModel newModel    = BumpDiscCurveAndReturn(curvePoint, bump);
            double          valueBump   = newModel.ValueLinearRateProduct(product);

            return((valueBump - valueNoBump) / bump * 0.0001);
        }
Exemplo n.º 3
0
        // Calculate BnR forward risk on a linear rate instrument
        public double BumpAndRunFwdRisk(LinearRateInstrument product, CurveTenor fwdCurve, int curvePoint, double bump = 0.0001)
        {
            double          valueNoBump = ValueLinearRateProduct(product);
            LinearRateModel newModel    = BumpFwdCurveAndReturn(fwdCurve, curvePoint, bump);
            double          valueBump   = newModel.ValueLinearRateProduct(product);

            return((valueBump - valueNoBump) / bump * 0.0001);
        }
Exemplo n.º 4
0
        public static void CalibrationInstrumentSet_Make(string baseHandle, string[] linearRateProductHandles, string curveTenor)
        {
            CurveTenor tenor = StrToEnum.CurveTenorConvert(curveTenor);
            List <CalibrationInstrument> calibrationInstruments = new List <CalibrationInstrument>();

            for (int i = 0; i < linearRateProductHandles.Length; i++)
            {
                LinearRateInstrument product = ObjectMap.LinearRateInstruments[linearRateProductHandles[i]];
                calibrationInstruments.Add(new CalibrationInstrument(linearRateProductHandles[i], product, tenor));
            }

            ObjectMap.CalibrationInstrumentSets[baseHandle] = calibrationInstruments;
        }
Exemplo n.º 5
0
        public object[,] CreateTestOutputAD(LinearRateInstrument product)
        {
            double[] values      = ZcbRiskProductAD(product);
            string[] identifiers = CreateIdentArray();
            object[,] output = new object[values.Length, 2];

            for (int i = 0; i < values.Length; i++)
            {
                output[i, 0] = identifiers[i];
                output[i, 1] = values[i];
            }

            return(output);
        }
Exemplo n.º 6
0
        public double[] ZcbRiskProductAD(LinearRateInstrument product)
        {
            AADTape.ResetTape();
            if (ADCurvesHasBeenSet == false)
            {
                SetAdCurvesFromOrdinaryCurve();
            }

            InitiateTapeFromModel();
            ValueLinearRateProductAD(product);
            AADTape.InterpretTape();
            double[] output = AADTape.GetGradient();
            AADTape.ResetTape();
            return(ScaleGradient(0.0001, output));
        }
Exemplo n.º 7
0
        public ZcbRiskOutputContainer RiskAgainstAllCurvesBumpAndRun(LinearRateInstrument product, DateTime asOf)
        {
            ZcbRiskOutputContainer output = new ZcbRiskOutputContainer();

            List <CurveTenor> tenors = new CurveTenor[] { CurveTenor.Fwd1M, CurveTenor.Fwd3M, CurveTenor.Fwd6M, CurveTenor.Fwd1Y }.ToList();

            foreach (CurveTenor tenor in tenors)
            {
                if (FwdCurveCollection.CurveExist(tenor) == false)
                {
                    throw new InvalidOperationException(tenor.ToString() + " does not exist in model.");
                }

                output.AddForwardRisk(tenor, CalculateZcbRiskBumpAndRun(product, tenor, asOf));
            }

            output.AddDiscRisk(CalculateZcbRiskBumpAndRun(product, CurveTenor.DiscOis, asOf));
            return(output);
        }