public void CanProcess() { var t = new DateTime(2019, 10, 03); var fc = GetFeatureCollection(); var dates = Enumerable.Range(10, 10).Select(i => t.AddDays(i)).ToList(); var usd = TestProviderHelper.CurrencyProvider.GetCurrency("USD"); var sut = new BackPricingOption("Asset", dates, dates[5], t.AddDays(100), t.AddDays(100), Core.Basic.OptionType.C, "boo", usd, 1.0); var b = GetBlock(20); sut.SetupFeatures(fc.Object); sut.AverageRegressor.SetupFeatures(fc.Object); sut.SettlementRegressor.SetupFeatures(fc.Object); sut.Finish(fc.Object); sut.AverageRegressor.Finish(fc.Object); sut.SettlementRegressor.Finish(fc.Object); sut.Process(b); Assert.Equal(0.0, sut.AverageResult); Assert.Equal(0.0, sut.ResultStdError); Assert.True(sut.ResultsByPath.All(x => x == 0.0)); }
public void BackPricingOptionFact() { var orgin = new DateTime(2019, 06, 12); var usd = TestProviderHelper.CurrencyProvider.GetCurrency("USD"); var zar = TestProviderHelper.CurrencyProvider.GetCurrency("ZAR"); var fixDates = new[] { orgin }; var x = new BackPricingOption() { AssetId = "QS", CallPut = OptionType.C, DiscountCurve = "X", FixingDates = fixDates, FxConversionType = FxConversionType.None, Notional = 1, PaymentCurrency = usd, StartDate = orgin, EndDate = orgin, SpotLag = 0.Bd(), SpotLagRollType = RollType.F, }; var x2 = new BackPricingOption() { AssetId = "QS", CallPut = OptionType.C, DiscountCurve = "X", FixingDates = fixDates, FxConversionType = FxConversionType.AverageThenConvert, Notional = 1, PaymentCurrency = zar, StartDate = orgin, EndDate = orgin, SpotLag = 0.Bd(), SpotLagRollType = RollType.F, }; var fakeModel = new Mock <IAssetFxModel>(); var c = new ConstantPriceCurve(100, DateTime.Today, TestProviderHelper.CurrencyProvider) { Currency = usd }; fakeModel.Setup(xx => xx.GetPriceCurve(It.IsAny <string>(), null)).Returns(c); var fxMatrix = new FxMatrix(TestProviderHelper.CurrencyProvider); fxMatrix.Init(usd, orgin, new Dictionary <Currency, double>(), new List <FxPair>(), new Dictionary <Currency, string> { { usd, "X" }, { zar, "Y" } }); var fModel = new Mock <IFundingModel>(); fModel.Setup(xx => xx.FxMatrix).Returns(fxMatrix); fakeModel.Setup(xx => xx.FundingModel).Returns(fModel.Object); Assert.Equal(usd, x.Currency); Assert.Equal(usd, x.PaymentCurrency); var a = x.AssetIds; Assert.Contains("QS", a); Assert.Single(x.IrCurves(fakeModel.Object)); var ir2 = x2.IrCurves(fakeModel.Object); Assert.Contains("X", ir2); Assert.Contains("Y", ir2); Assert.Equal(FxConversionType.None, x.FxType(fakeModel.Object)); Assert.Equal(orgin, x.LastSensitivityDate); var pf = x.PastFixingDates(orgin.AddDays(1)); Assert.Contains("QS", pf.Keys); var y = (BackPricingOption)x.Clone(); y.TradeId = "xxx"; Assert.False(x == y); Assert.Equal(string.Empty, x.FxPair(fakeModel.Object)); Assert.Throws <InvalidOperationException>(() => x.SetStrike(0)); }