private IPvModel GenerateTestData() { Utils.Parallel.ParallelUtils.Instance.MultiThreaded = false; var usd = TestProviderHelper.CurrencyProvider.GetCurrency("USD"); var zar = TestProviderHelper.CurrencyProvider.GetCurrency("ZAR"); var nyc = TestProviderHelper.CalendarProvider.Collection["NYC"]; var originDate = DateTime.Parse("2019-04-25"); var ins = new Forward { TradeId = "TestA", AssetId = "FakeAsset", ExpiryDate = originDate.AddDays(30), PaymentCurrency = zar, Notional = 1e6, Strike = 1400, DiscountCurve = "DISCO-ZAR" }; var pf = new Portfolio { Instruments = new List <IInstrument> { ins } }; var discoUsd = new FlatIrCurve(0.00, usd, "DISCO-USD"); var discoZar = new FlatIrCurve(0.00, zar, "DISCO-ZAR"); var fxpairs = new List <FxPair> { new FxPair { Domestic = usd, Foreign = zar, PrimaryCalendar = nyc, SpotLag = 2.Bd() }, new FxPair { Domestic = zar, Foreign = usd, PrimaryCalendar = nyc, SpotLag = 2.Bd() }, }; var fxMatrix = new FxMatrix(TestProviderHelper.CurrencyProvider); fxMatrix.Init(usd, originDate, new Dictionary <Currency, double> { { zar, 14.0 } }, fxpairs, new Dictionary <Currency, string> { { usd, "DISCO-USD" }, { zar, "DISCO-ZAR" } }); var fModel = new FundingModel(originDate, new[] { discoUsd, discoZar }, TestProviderHelper.CurrencyProvider, TestProviderHelper.CalendarProvider); fModel.SetupFx(fxMatrix); var model = new AssetFxModel(originDate, fModel); var curve = new ConstantPriceCurve(100, originDate, TestProviderHelper.CurrencyProvider); model.AddPriceCurve("FakeAsset", curve); model.AddFixingDictionary("FakeAsset", new FixingDictionary()); model.AttachPortfolio(pf); return(model); }
private AssetFxModel GetModel() { var vol = new ConstantVolSurface(valDate, assetVol) { AssetId = assetId, Name = assetId }; var fwd = new ConstantPriceCurve(assetPrice, valDate, TestProviderHelper.CurrencyProvider) { AssetId = assetId, Name = assetId }; var ir = new FlatIrCurve(0.0, usd, "USD"); var fm = new FundingModel(valDate, new[] { ir }, TestProviderHelper.CurrencyProvider, TestProviderHelper.CalendarProvider); var am = new AssetFxModel(valDate, fm); am.AddPriceCurve(assetId, fwd); am.AddVolSurface(assetId, vol); return(am); }
public void ComputeCVAFacts() { var hz = new HazzardCurve(DateTime.Today, DayCountBasis.Act365F, new DummyPointInterpolator(0.0)); var disco = new FlatIrCurve(0.0, ContainerStores.CurrencyProvider.GetCurrency("ZAR"), "disco"); ContainerStores.GetObjectCache <HazzardCurve>().PutObject("hz", new SessionItem <HazzardCurve>() { Name = "hz", Value = hz }); ContainerStores.GetObjectCache <IIrCurve>().PutObject("disco", new SessionItem <IIrCurve>() { Name = "disco", Value = disco }); Assert.Equal("Hazzard curve blash not found", CapitalFunctions.ComputeCVA("blash", DateTime.Today, "woo", null, 0.0)); Assert.Equal("Discount curve woo not found", CapitalFunctions.ComputeCVA("hz", DateTime.Today, "woo", null, 0.0)); Assert.Equal("Expected Nx2 array for EPE", CapitalFunctions.ComputeCVA("hz", DateTime.Today, "disco", new object[1, 1], 0.0)); Assert.Equal("EPE profile must be cube reference or Nx2 array", CapitalFunctions.ComputeCVA("hz", DateTime.Today, "disco", 7, 0.0)); Assert.Equal(0.0, CapitalFunctions.ComputeCVA("hz", DateTime.Today, "disco", new object[1, 2] { { DateTime.Today, 0.0 } }, 0.0)); }
private (IAssetFxModel startModel, IAssetFxModel endModel, Portfolio portfolio) GenerateTestData() { Utils.Parallel.ParallelUtils.Instance.MultiThreaded = false; var usd = TestProviderHelper.CurrencyProvider.GetCurrency("USD"); var zar = TestProviderHelper.CurrencyProvider.GetCurrency("ZAR"); var nyc = TestProviderHelper.CalendarProvider.Collection["NYC"]; var originDate = DateTime.Parse("2019-04-25"); var ins = new FxForward { TradeId = "TestA", DeliveryDate = originDate.AddDays(30), DomesticCCY = zar, ForeignCCY = usd, DomesticQuantity = 1e6, Strike = 14, ForeignDiscountCurve = "DISCO-USD" }; var pf = new Portfolio { Instruments = new List <IInstrument> { ins } }; var discoUsd = new FlatIrCurve(0.02, usd, "DISCO-USD"); var discoZar = new FlatIrCurve(0.05, zar, "DISCO-ZAR"); var fxpairs = new List <FxPair> { new FxPair { Domestic = usd, Foreign = zar, PrimaryCalendar = nyc, SpotLag = 2.Bd() }, new FxPair { Domestic = zar, Foreign = usd, PrimaryCalendar = nyc, SpotLag = 2.Bd() }, }; var fxMatrix = new FxMatrix(TestProviderHelper.CurrencyProvider); fxMatrix.Init(zar, originDate, new Dictionary <Currency, double> { { usd, 14.0 } }, fxpairs, new Dictionary <Currency, string> { { usd, "DISCO-USD" }, { zar, "DISCO-ZAR" } }); var fModel = new FundingModel(originDate, new[] { discoUsd, discoZar }, TestProviderHelper.CurrencyProvider, TestProviderHelper.CalendarProvider); fModel.SetupFx(fxMatrix); var startModel = new AssetFxModel(originDate, fModel); startModel.AddFixingDictionary("FakeAsset", new FixingDictionary()); startModel.AddPriceCurve("FakeAsset", new ConstantPriceCurve(100, originDate, TestProviderHelper.CurrencyProvider)); startModel.AddVolSurface("FakeAsset", new ConstantVolSurface(originDate, 1.00) { AssetId = "FakeAsset", Currency = usd }); var endFModel = fModel.DeepClone(); endFModel.FxMatrix.SpotRates[usd] = 15; var endModel = startModel.Clone(endFModel); endModel.AddFixingDictionary("FakeAsset", new FixingDictionary()); endModel.AddPriceCurve("FakeAsset", new ConstantPriceCurve(100, originDate, TestProviderHelper.CurrencyProvider)); endModel.AddVolSurface("FakeAsset", new ConstantVolSurface(originDate, 1.00) { AssetId = "FakeAsset", Currency = usd }); return(startModel, endModel, pf); }