/// <summary> /// Calculate the Option Adjusted Spread (OAS) /// <remarks> /// Calculates the spread that needs to be added to the the /// reference curve so that the theoretical model value /// matches the marketPrice. /// </remarks> /// </summary> /// <param name="cleanPrice"></param> /// <param name="engineTS"></param> /// <param name="dayCounter"></param> /// <param name="compounding"></param> /// <param name="frequency"></param> /// <param name="settlement"></param> /// <param name="accuracy"></param> /// <param name="maxIterations"></param> /// <param name="guess"></param> /// <returns></returns> public double OAS(double cleanPrice, Handle <YieldTermStructure> engineTS, DayCounter dayCounter, Compounding compounding, Frequency frequency, Date settlement = null, double accuracy = 1.0e-10, int maxIterations = 100, double guess = 0.0) { if (settlement == null) { settlement = settlementDate(); } double dirtyPrice = cleanPrice + accruedAmount(settlement); var f = new NpvSpreadHelper(this); OasHelper obj = new OasHelper(f, dirtyPrice); Brent solver = new Brent(); solver.setMaxEvaluations(maxIterations); double step = 0.001; double oas = solver.solve(obj, accuracy, guess, step); return(continuousToConv(oas, this, engineTS, dayCounter, compounding, frequency)); }
/// <summary> /// Calculate the clean price based on the given /// option-adjust-spread (oas) over the given yield term /// structure (engineTS) /// </summary> /// <param name="oas"></param> /// <param name="engineTS"></param> /// <param name="dayCounter"></param> /// <param name="compounding"></param> /// <param name="frequency"></param> /// <param name="settlement"></param> /// <returns></returns> public double cleanPriceOAS(double oas, Handle <YieldTermStructure> engineTS, DayCounter dayCounter, Compounding compounding, Frequency frequency, Date settlement = null) { if (settlement == null) { settlement = settlementDate(); } oas = convToContinuous(oas, this, engineTS, dayCounter, compounding, frequency); var f = new NpvSpreadHelper(this); double P = f.value(oas) - accruedAmount(settlement); return(P); }
public OasHelper(NpvSpreadHelper npvhelper, double targetValue) { npvhelper_ = npvhelper; targetValue_ = targetValue; }