diff --git a/src/Qwack.Core/Instruments/Asset/MultiPeriodBackpricingOption.cs b/src/Qwack.Core/Instruments/Asset/MultiPeriodBackpricingOption.cs index 8ab26807..2c84558e 100644 --- a/src/Qwack.Core/Instruments/Asset/MultiPeriodBackpricingOption.cs +++ b/src/Qwack.Core/Instruments/Asset/MultiPeriodBackpricingOption.cs @@ -46,6 +46,7 @@ public class MultiPeriodBackpricingOption : IHasVega, IAssetInstrument public int? DeclaredPeriod { get; set; } public List FxFixingDates { get; set; } + public double[] PeriodPremia { get; set; } public Currency PaymentCurrency { get; set; } public FxConversionType FxConversionType { get; set; } = FxConversionType.None; public string DiscountCurve { get; set; } @@ -119,7 +120,8 @@ public Dictionary> PastFixingDates(DateTime valDate) => v OffsetFixingId = OffsetFixingId, ScaleStrike = ScaleStrike, ScaleProportion = ScaleProportion, - MetaData = new(MetaData) + MetaData = new(MetaData), + PeriodPremia = PeriodPremia, }; public IAssetInstrument SetStrike(double strike) => throw new InvalidOperationException(); @@ -163,6 +165,7 @@ public void FromTransportObject(TO_Instrument to_instrument, ICalendarProvider c OffsetFixingId = to.OffsetFixingId; ScaleProportion = to.ScaleProportion; ScaleStrike = to.ScaleStrike; + PeriodPremia = to.PeriodPremia; } public TO_Instrument ToTransportObject() => new() @@ -202,6 +205,7 @@ public void FromTransportObject(TO_Instrument to_instrument, ICalendarProvider c ScaleProportion = ScaleProportion, ScaleStrike = ScaleStrike, MetaData = new(MetaData), + PeriodPremia = PeriodPremia, } }; } diff --git a/src/Qwack.Paths/Payoffs/MultiPeriodBackPricingOptionPP.cs b/src/Qwack.Paths/Payoffs/MultiPeriodBackPricingOptionPP.cs index a2a441dd..97d69113 100644 --- a/src/Qwack.Paths/Payoffs/MultiPeriodBackPricingOptionPP.cs +++ b/src/Qwack.Paths/Payoffs/MultiPeriodBackPricingOptionPP.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Numerics; -using System.ServiceModel; using Qwack.Core.Basic; using Qwack.Core.Instruments; using Qwack.Core.Models; @@ -11,7 +10,6 @@ using Qwack.Paths.Features; using Qwack.Paths.Regressors; using Qwack.Transport.BasicTypes; -using Qwack.Transport.TransportObjects.Instruments.Funding; namespace Qwack.Paths.Payoffs { @@ -51,6 +49,7 @@ public class MultiPeriodBackPricingOptionPP : IPathProcess, IRequiresFinish, IAs private double? _scaleProportion; private double[] _contangoScaleFactors; + private double[] _periodPremia; private Vector[][] _exercisedPeriod; @@ -83,7 +82,8 @@ public MultiPeriodBackPricingOptionPP(string assetName, int? declaredPeriod = null, DateShifter dateShifter = null, double? scaleStrike = null, - double? scaleProportion = null) + double? scaleProportion = null, + double[] periodPremia = null) { _avgDates = avgDates; _decisionDate = decisionDate; @@ -99,6 +99,8 @@ public MultiPeriodBackPricingOptionPP(string assetName, _dateShifter = dateShifter; _scaleStrike = scaleStrike; _scaleProportion = scaleProportion; + _periodPremia = periodPremia ?? avgDates.Select(x => 0.0).ToArray(); //default to zero spreads + if (_ccy.Ccy != "USD") _fxName = $"USD/{_ccy.Ccy}"; @@ -282,7 +284,7 @@ public void Process(IPathBlock block) setReg[i] = SettlementRegressor?.Predict(spotAtExpiry[i]) ?? spotAtExpiry[i]; } var futVec = new Vector(futSum); - avgs[a] = (futVec + pastSum) / nTotalVec[a]; + avgs[a] = (futVec + pastSum) / nTotalVec[a] + new Vector(_periodPremia[a]); } avgVec = (_callPut == OptionType.C) ? diff --git a/src/Qwack.Transport/TransportObjects/Instruments/Asset/TO_MultiPeriodBackpricingOption.cs b/src/Qwack.Transport/TransportObjects/Instruments/Asset/TO_MultiPeriodBackpricingOption.cs index 52d33f5b..3da325bc 100644 --- a/src/Qwack.Transport/TransportObjects/Instruments/Asset/TO_MultiPeriodBackpricingOption.cs +++ b/src/Qwack.Transport/TransportObjects/Instruments/Asset/TO_MultiPeriodBackpricingOption.cs @@ -75,7 +75,8 @@ public class TO_MultiPeriodBackpricingOption public double? ScaleStrike { get; set; } [ProtoMember(32)] public double? ScaleProportion { get; set;} - + [ProtoMember(33)] + public double[] PeriodPremia { get; set; } } } diff --git a/version.props b/version.props index 6ef86862..0820b212 100644 --- a/version.props +++ b/version.props @@ -1,5 +1,5 @@ - 0.8.44 + 0.8.45 diff --git a/version.txt b/version.txt index 5cd69e2c..845fae46 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.8.44 +0.8.45