예제 #1
0
        public void ExplainPnLAttributionFacts()
        {
            var(startModel, endModel, portfolio) = GenerateTestData();
            var zar = TestProviderHelper.CurrencyProvider.GetCurrency("ZAR");

            var result   = Models.PnLAttribution.ExplainAttributionInLineGreeks(portfolio, startModel, endModel, zar, TestProviderHelper.CurrencyProvider);
            var sum      = result.GetAllRows().Sum(x => x.Value);
            var expected = portfolio.PV(endModel, zar).GetAllRows().Sum(x => x.Value)
                           - portfolio.PV(startModel, zar).GetAllRows().Sum(x => x.Value);

            Assert.Equal(expected, sum, 10);

            startModel.AttachPortfolio(portfolio);
            var greeks = Qwack.Models.Risk.BasicMetrics.AssetGreeks((AssetFxModel)startModel, endModel.BuildDate, zar, TestProviderHelper.CurrencyProvider).Result;

            result = Models.PnLAttribution.ExplainAttribution(portfolio, startModel, endModel, zar, greeks, TestProviderHelper.CurrencyProvider);
            sum    = result.GetAllRows().Sum(x => x.Value);
            Assert.Equal(expected, sum, 10);
        }