Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
 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);
     }
 }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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;
        }