/// <summary> /// Initializes a new instance of the <see cref="PriceableCaplet"/> class. /// This is a special case for use with the factry for bootstrapping, as it /// uses no calendar logic. This is done by the factory. /// </summary> /// <param name="baseDate">The base date.</param> /// <param name="nodeStruct">A special class containing all salient data required.</param> /// <param name="properties">The properties set This includes strike information.</param> /// <param name="fixingCalendar">The fixing/expiry calendar></param> /// <param name="paymentCalendar">The paymentCalendar calendar.</param> /// <param name="notional">The notional. The default value is 1,000,000.00m.</param> /// <param name="marketQuotes">The market quotes, including the volatility and possibly the fixed rate as a decimal contained in a basic quotation.</param> public PriceableCaplet(DateTime baseDate, RateOptionNodeStruct nodeStruct, NamedValueSet properties, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, Decimal notional, BasicAssetValuation marketQuotes) : base(baseDate, nodeStruct.ResetDateAdjustment, nodeStruct.SimpleRateOption, notional, 1000000.0m, nodeStruct.BusinessDayAdjustments, marketQuotes) { Id = nodeStruct.SimpleRateOption.id; IsCap = true; IsDiscounted = false; RateOption = nodeStruct.SimpleRateOption; ResetDateOffset = nodeStruct.ResetDateAdjustment; SpotDateOffset = nodeStruct.SpotDate; UnderlyingRateIndex = nodeStruct.RateIndex; AdjustedStartDate = GetSpotDate(baseDate, fixingCalendar, nodeStruct.SpotDate); AdjustedEffectiveDate = GetEffectiveDate(AdjustedStartDate, paymentCalendar, nodeStruct.SimpleRateOption.startTerm, nodeStruct.BusinessDayAdjustments.businessDayConvention); OptionsExpiryDate = GetFixingDate(AdjustedEffectiveDate, fixingCalendar, nodeStruct.ResetDateAdjustment); MaturityDate = GetEffectiveDate(AdjustedStartDate, paymentCalendar, nodeStruct.SimpleRateOption.endTerm, nodeStruct.BusinessDayAdjustments.businessDayConvention); PaymentDate = MaturityDate; YearFraction = GetYearFraction(RateOption.dayCountFraction.Value, AdjustedEffectiveDate, MaturityDate); TimeToExpiry = GetTimeToExpiry(baseDate, OptionsExpiryDate); //Set the strike scalar. This must be after the number of expiry dates has been set. var quotes = new List <BasicQuotation>(marketQuotes.quote); //For the default cap the spot rate is used. SetQuote("ForwardRate", quotes); SetQuote("Strike", quotes); //decimal? strike = properties.GetValue<decimal>("Strike", false); //Strike = (decimal)strike; }
/// <summary> /// Initializes a new instance of the <see cref="PriceableCaplet"/> class. /// This is a special case for use with the factry for bootstrapping, as it /// uses no calendar logic. This is done by the factory. /// </summary> /// <param name="baseDate">The base date.</param> /// <param name="nodeStruct">A special class containing all salient data required.</param> /// <param name="properties">The properties set This includes strike information.</param> /// <param name="fixingCalendar">The fixing/expiry calendar></param> /// <param name="paymentCalendar">The paymentCalendar calendar.</param> /// <param name="notional">The notional. The default value is 1.00m.</param> /// <param name="marketQuotes">The market quotes, including the volatility and possibly the fixed rate as a decimal contained in a basic quotation.</param> public PriceableDiscountFloorlet(DateTime baseDate, RateOptionNodeStruct nodeStruct, NamedValueSet properties, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, Decimal notional, BasicAssetValuation marketQuotes) : base(baseDate, nodeStruct, properties, fixingCalendar, paymentCalendar, notional, marketQuotes) { IsDiscounted = true; IsCap = false; }