/// <summary> /// Gets the quoted asset set. /// </summary> /// <returns></returns> public sealed override void Build(ILogger logger, ICoreCache cache, string nameSpace, IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar) { var pricingStructureId = (RateCurveIdentifier)PricingStructureIdentifier; //Order the assets. PriceableRateSpreadAssets = PriceableRateSpreadAssets.OrderBy(a => a.GetRiskMaturityDate()).ToList(); var termCurve = SetConfigurationData(); //Get the reference interpolated curve. termCurve.point = RateSpreadBootstrapper.Bootstrap(PriceableRateSpreadAssets,//TODO what about the interpoation. BaseCurve, pricingStructureId.BaseDate, termCurve.extrapolationPermitted, Tolerance); CreatePricingStructure(pricingStructureId, termCurve, PriceableAssetFactory.Parse(PriceableRateSpreadAssets)); SetInterpolator(BaseCurve, pricingStructureId.PricingStructureType); // Set the Zero curve, just for reference YieldCurveValuation yieldCurveValuation = GetYieldCurveValuation(); if (yieldCurveValuation.zeroCurve?.rateCurve == null) { //var curveId = (RateCurveIdentifier)PricingStructureIdentifier; //var psType = PricingStructureIdentifier.PricingStructureType; TermCurve curve = YieldCurveAnalytics.ToZeroCurve(termCurve, GetBaseDate(), CompoundingFrequency, DayCounter); curve.interpolationMethod = InterpolationMethodHelper.Parse(Holder.GetValue("CurveInterpolation")); var zeroCurve = new ZeroRateCurve { rateCurve = curve, compoundingFrequency = FpML.V5r3.Reporting.CompoundingFrequency.Create(CompoundingFrequency) }; yieldCurveValuation.zeroCurve = zeroCurve; } }
/// <summary> /// Gets the yield curve valuation. /// </summary> /// <returns></returns> public YieldCurveValuation GetYieldCurveValuation() { var yieldCurveValuation = new YieldCurveValuation { baseDate = IdentifiedDateHelper.Create(DateTime.MinValue) }; return(yieldCurveValuation); }
/// <summary> /// GetYieldCurveValuation /// </summary> /// <returns></returns> public YieldCurveValuation GetYieldCurveValuation() { var yieldCurveValuation = new YieldCurveValuation { baseDate = IdentifiedDateHelper.Create(BaseDate), discountFactorCurve = null }; return(yieldCurveValuation); }
/// <summary> /// Initializes a new instance of the <see cref="RateBasisCurve"/> class. /// </summary> /// <param name="referenceCurve">The reference curve.</param> /// <param name="spreadAssets">The spreads by asset.</param> /// <param name="properties">The properties of the new spread curve.</param> /// <param name="algorithm">The algorithm holder. </param> public RateBasisCurve(NamedValueSet properties, IRateCurve referenceCurve, List <IPriceableRateSpreadAssetController> spreadAssets, PricingStructureAlgorithmsHolder algorithm) : base(properties, algorithm) { PricingStructureData = new PricingStructureData(CurveType.Child, AssetClass.Rates, properties); //Set the identifier. var pricingStructureId = GetRateCurveId(); if (pricingStructureId.PricingStructureType != PricingStructureTypeEnum.RateBasisCurve) { return; } //Set the reference curve BaseCurve = referenceCurve; ReferenceCurveId = BaseCurve.GetPricingStructureId(); PriceableRateSpreadAssets = spreadAssets; //Order the assets. PriceableRateSpreadAssets = PriceableRateSpreadAssets.OrderBy(a => a.GetRiskMaturityDate()).ToList(); var termCurve = SetConfigurationData(); //Get the reference interpolated curve. termCurve.point = RateSpreadBootstrapper.Bootstrap(PriceableRateSpreadAssets, BaseCurve, pricingStructureId.BaseDate, termCurve.extrapolationPermitted, Tolerance); CreatePricingStructure(pricingStructureId, termCurve, PriceableAssetFactory.Parse(PriceableRateSpreadAssets)); SetInterpolator(BaseCurve, pricingStructureId.PricingStructureType); // Set the Zero curve, just for reference YieldCurveValuation yieldCurveValuation = GetYieldCurveValuation(); if (yieldCurveValuation.zeroCurve?.rateCurve == null) { //var curveId = (RateCurveIdentifier)PricingStructureIdentifier; //var psType = PricingStructureIdentifier.PricingStructureType; TermCurve curve = YieldCurveAnalytics.ToZeroCurve(termCurve, GetBaseDate(), CompoundingFrequency, DayCounter); curve.interpolationMethod = InterpolationMethodHelper.Parse(Holder.GetValue("CurveInterpolation")); var zeroCurve = new ZeroRateCurve { rateCurve = curve, compoundingFrequency = FpML.V5r3.Reporting.CompoundingFrequency.Create(CompoundingFrequency) }; yieldCurveValuation.zeroCurve = zeroCurve; } }
private void Bootstrap(YieldCurveValuation yieldCurveValuation) { if (yieldCurveValuation == null || yieldCurveValuation.inputs != null && yieldCurveValuation.discountFactorCurve?.point == null) { CreateYieldCurve(); } var curveId = (RateCurveIdentifier)PricingStructureIdentifier; // Add extra input points for BaseCurve - if they exist List <BasicAssetValuation> assetQuotes = ((YieldCurveValuation)PricingStructureValuation).inputs.assetQuote.ToList(); AddBaseCurveInputs(assetQuotes); // Add extra input points for QuoteCurve - if they exist AddQuoteCurveInputs(assetQuotes); ((YieldCurveValuation)PricingStructureValuation).inputs.assetQuote = assetQuotes.ToArray(); TermCurve discountCurve = ((YieldCurveValuation)PricingStructureValuation).discountFactorCurve; SetInterpolator(discountCurve, curveId.Algorithm, PricingStructureTypeEnum.RateSpreadCurve); }
public static Market CreateYieldCurveConfiguration(string curveId, QuotedAssetSet quotedAssetSet) { var market = new Market { id = curveId }; //Create the curve information. var curve = new YieldCurve { id = curveId }; //reate the valuation structure that contains qas. var curveValuation = new YieldCurveValuation { id = curveId, inputs = quotedAssetSet }; //Set the market. market.Items = new[] { (PricingStructure)curve }; market.Items1 = new[] { (PricingStructureValuation)curveValuation }; return(market); }