コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public OasHelper(NpvSpreadHelper npvhelper, double targetValue)
 {
     npvhelper_   = npvhelper;
     targetValue_ = targetValue;
 }