public ICurve SetRate(int pillarIx, double rate, bool mutate) { if (mutate) { _rates[pillarIx] = rate; _interpolator.UpdateY(pillarIx, rate, true); return(this); } else { var returnCurve = new IrCurve(_pillars.ToArray(), _rates.Select((r, ix) => ix == pillarIx ? rate : r).ToArray(), _buildDate, _name, _interpKind); return(returnCurve); } }
public IrCurve BumpRate(int pillarIx, double delta, bool mutate) { if (mutate) { _rates[pillarIx] += delta; _interpolator.UpdateY(pillarIx, _rates[pillarIx], true); return(this); } else { var returnCurve = new IrCurve(_pillars.ToArray(), _rates.Select((r, ix) => ix == pillarIx ? r + delta : r).ToArray(), _buildDate, _name, _interpKind); return(returnCurve); } }
public IrCurve BumpRateFlat(double delta, bool mutate) { if (mutate) { for (var i = 0; i < _rates.Length; i++) { _rates[i] += delta; _interpolator.UpdateY(i, _rates[i], true); } return(this); } else { var returnCurve = new IrCurve(_pillars.ToArray(), _rates.Select(r => r + delta).ToArray(), _buildDate, _name, _interpKind, Currency, CollateralSpec, RateStorageType); return(returnCurve); } }
public IrCurve BumpRate(int pillarIx, double delta, bool mutate) { if (mutate) { _rates[pillarIx] += delta; _interpolator.UpdateY(pillarIx, _rates[pillarIx], true); return(this); } else { var returnCurve = new IrCurve(_pillars.ToArray(), _rates.Select((r, ix) => ix == pillarIx ? r + delta : r).ToArray(), _buildDate, _name, _interpKind, Currency, CollateralSpec, RateStorageType) { SolveStage = SolveStage, RateIndex = RateIndex, }; return(returnCurve); } }
public IrCurve RebaseDate(DateTime newAnchorDate) { var pillarsDropped = _pillars.Count(x => x <= newAnchorDate); var newLength = _pillars.Length - pillarsDropped; var newPillars = new DateTime[newLength]; Array.Copy(_pillars, pillarsDropped, newPillars, 0, newLength); var dfAdjust = GetDf(BuildDate, newAnchorDate); var newDfs = newPillars.Select(x => GetDf(BuildDate, x) / dfAdjust).ToArray(); var newRates = newDfs.Select((x, ix) => RateFromDF(newAnchorDate.CalculateYearFraction(newPillars[ix], _basis), x, RateStorageType)).ToArray(); if (newPillars.First() == newAnchorDate && newRates.Length > 1) { newRates[0] = newRates[1]; } var newCurve = new IrCurve(newPillars, newRates, newAnchorDate, Name, _interpKind, Currency, CollateralSpec, RateStorageType); return(newCurve); }
public BasisPriceCurve(TO_BasisPriceCurve transportObject, ICurrencyProvider currencyProvider, ICalendarProvider calendarProvider) { Instruments = transportObject.Instruments .Select(x => (IAssetInstrument)InstrumentFactory.GetInstrument(x, currencyProvider, calendarProvider)) .ToList(); Pillars = transportObject.Pillars; DiscountCurve = new IrCurve(transportObject.DiscountCurve, currencyProvider); //need to re-link via the active model Curve = PriceCurveFactory.GetPriceCurve(transportObject.Curve, currencyProvider, calendarProvider); BaseCurve = PriceCurveFactory.GetPriceCurve(transportObject.BaseCurve, currencyProvider, calendarProvider); Name = transportObject.Name; AssetId = transportObject.AssetId; BuildDate = transportObject.BuildDate; PillarLabels = transportObject.PillarLabels; Currency = currencyProvider.GetCurrencySafe(transportObject.Currency); SpotCalendar = calendarProvider.GetCalendarSafe(transportObject.SpotCalendar); if (transportObject.SpotLag != null) { SpotLag = new Frequency(transportObject.SpotLag); } CurveType = transportObject.CurveType; }