// --- 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."); } }
// 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); }
// 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); }
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; }
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); }
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)); }
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); }