public IPriceCurve RebaseDate(DateTime newAnchorDate) { var newSpotDate = newAnchorDate.SpotDate(SpotLag, SpotCalendar, SpotCalendar); var newSpot = GetPriceForDate(newSpotDate); var fwds = PillarDates.Select(p => GetPriceForDate(p)).ToArray(); var times = PillarDates.Select(p => newSpotDate.CalculateYearFraction(p, Basis)).ToArray(); var newCtgos = fwds.Select((f, ix) => times[ix] == 0 ? 0.0 : (f / newSpot - 1.0) / times[ix]).ToArray(); var o = new ContangoPriceCurve(newAnchorDate, newSpot, newSpotDate, PillarDates, newCtgos, _currencyProvider, Basis, PillarLabels) { AssetId = AssetId, Currency = Currency, Name = Name, SpotCalendar = SpotCalendar, SpotLag = SpotLag }; return(o); }
private void Initialize() { var pillarsAsDoubles = PillarDates.Select(x => x.ToOADate()).ToArray(); _interp = InterpolatorFactory.GetInterpolator(pillarsAsDoubles, Contangos, Interpolator1DType.Linear); }
public IrCurve Clone() => new IrCurve((DateTime[])PillarDates.Clone(), (double[])_rates.Clone(), BuildDate, Name, _interpKind, Currency, CollateralSpec, RateStorageType) { SolveStage = SolveStage };