Пример #1
0
        public ChartItem TenYearReturn()
        {
            // get chart specs
            XElement rpt = chartSpec("ten-year-return");
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;

            // set title
            string title = rpt.Element("title").Value;

            // get asset classes to plot (default is UKGB and GLEQ)
            var assets = getAssetClasses(rpt);
            var ctx = DataContext;

            // create chart
            TenYearLineChart lc = new TenYearLineChart();
            C.Chart chart = lc.GenerateChart(null);

            if (Client.ExistingAssets) {
                var rtrn1 = getClientAssetReturn();
                var data1 = calculateTenYearReturn(rtrn1);
                string dataKey1 = "Current";
                lc.AddLineChartSeries(chart, data1, dataKey1, clientColourHex);
            }

            // first asset class
            var rtrn2 = getAssetClassReturn(assetClasses[0].ID);
            var data2 = calculateTenYearReturn(rtrn2);
            string dataKey2 = assetClasses[0].Name;
            lc.AddLineChartSeries(chart, data2, dataKey2, assetClasses[0].ColourHex);

            // second asset class
            var rtrn3 = getAssetClassReturn(assetClasses[1].ID);
            var data3 = calculateTenYearReturn(rtrn3);
            string dataKey3 = assetClasses[1].Name;
            lc.AddLineChartSeries(chart, data3, dataKey3, assetClasses[1].ColourHex);

            // IMA Benchmark
            var rtrn5 = DataContext.BenchmarkPrice(Client.Strategy.BenchmarkID).Where(b => b.Value > 0).ToList();
            var data5 = calculateTenYearBenchmarkReturn(rtrn5);
            string dataKey5 = Client.Strategy.Benchmark.Name;
            lc.AddLineChartSeries(chart, data5, dataKey5, benchmarkColourHex);

            // strategy
            var rtrn4 = getModelReturn();
            var data4 = calculateTenYearReturn(rtrn4);
            string dataKey4 = StrategyName;
            lc.AddLineChartSeries(chart, data4, dataKey4, strategyColourHex);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = lc.GraphData
            };

            return chartItem;
        }
Пример #2
0
        //private void AddChartToDoc(MainDocumentPart mainPart, ChartItem chartItem, string controlName) { }
        private void AddChartToDoc(MainDocumentPart mainPart, ChartItem chartItem, string controlName)
        {
            // open Word documant and remove existing content from control
            Paragraph para = findAndRemoveContent(mainPart, controlName);

            // generate new ChartPart and ChartSpace
            ChartPart chartPart = mainPart.AddNewPart<ChartPart>();
            string relId = mainPart.GetIdOfPart(chartPart);

            GraphData gd = chartItem.GraphData;
            gd.AddEmbeddedToChartPart(chartPart);
            C.ChartSpace chartSpace = GraphSpace.GenerateChartSpaceWithData(chartItem.Chart, gd.ExternalDataId);
            chartPart.ChartSpace = chartSpace;

            // generate a new Wordprocessing Drawing, add to a new Run,
            // and relate to new ChartPart
            Run run = new Run();
            Drawing drawing = GraphDrawing.GenerateDrawing(relId, controlName, docPrId, Graph.Cx, Graph.Cy);
            docPrId++;
            para.Append(run);
            run.Append(drawing);
        }
Пример #3
0
        public ChartItem StressTestMarketRise()
        {
            // get chart specs
            XElement rpt = chartSpec("stress-test-market-rise");
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;

            // set title
            string title = rpt.Element("title").Value;

            // get asset classes to plot (default is UKGB and GLEQ)
            var assets = getAssetClasses();
            var ctx = DataContext;

            // create chart
            StressTestBarChart bc = new StressTestBarChart();
            C.Chart chart = bc.GenerateChart(title);

            if (Client.ExistingAssets) {
                var prices1 = calculateClientAssetPrices();
                var series1 = stressTestMarketRiseSeries(prices1, "Current", clientColourHex, rpt);
                bc.AddBarChartSeries(chart, series1);
            }

            // first asset class (Note: GLEQ)
            var prices2 = getAssetClassPrices(assets[1].ID).ToDictionary(d => d.Date);
            var series2 = stressTestMarketRiseSeries(prices2, assets[1].Name, assets[1].ColourHex, rpt);
            bc.AddBarChartSeries(chart, series2);

            // second asset class
            var prices3 = getAssetClassPrices(assets[0].ID).ToDictionary(d => d.Date);
            var series3 = stressTestMarketRiseSeries(prices3, assets[0].Name, assets[0].ColourHex, rpt);
            bc.AddBarChartSeries(chart, series3);

            // strategy
            var prices4 = calculateModelPrices();
            var series4 = stressTestMarketRiseSeries(prices4, Client.Strategy.Name, strategyColourHex, rpt);
            bc.AddBarChartSeries(chart, series4);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = bc.GraphData
            };

            return chartItem;
        }
Пример #4
0
        public ChartItem RollingReturnChart(int years)
        {
            string id = null;

            switch (years) {
                case 1:
                    id = "rolling-return-1yr";
                    break;
                case 3:
                    id = "rolling-return-3yr";
                    break;
                case 5:
                    id = "rolling-return-5yr";
                    break;
                default:
                    throw new ArgumentException("Illegal argument: 1, 3 or 5 only are valid");
            }

            // get chart specs
            XElement rpt = chartSpec(id);
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;

            // set title
            string title = rpt.Element("title").Value;

            // get asset classes to plot (default is UKGB and GLEQ)
            var assets = getAssetClasses();
            var ctx = DataContext;

            // create chart
            RollingReturnLineChart lc = new RollingReturnLineChart();
            C.Chart chart = lc.GenerateChart(title);

            if (Client.ExistingAssets) {
                string dataKey1 = "Current";
                var data1 = getClientAssetReturn();
                var rrex = calulateRollingReturn(data1, years);
                lc.AddLineChartSeries(chart, rrex, dataKey1, clientColourHex);
            }

            // first asset class
            var data2 = ctx.RollingReturn(years, assetClasses[0].ID);
            string dataKey2 = assetClasses[0].Name;
            lc.AddLineChartSeries(chart, data2.ToList(), dataKey2, assetClasses[0].ColourHex);

            // add second data series
            var data3 = ctx.RollingReturn(years, assetClasses[1].ID);
            string dataKey3 = assetClasses[1].Name;
            lc.AddLineChartSeries(chart, data3.ToList(), dataKey3, assetClasses[1].ColourHex);

            // add appropriate strategy data
            var data4 = getModelReturn();
            string dataKey4 = StrategyName + " Strategy";
            var rr = calulateRollingReturn(data4, years);
            lc.AddLineChartSeries(chart, rr, dataKey4, strategyColourHex);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = lc.GraphData
            };

            return chartItem;
        }
Пример #5
0
        public ChartItem Drawdown()
        {
            // get chart specs
            XElement rpt = chartSpec("drawdown");
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;

            // set title
            string title = rpt.Element("title").Value;

            // get asset classes to plot (default is UKGB and GLEQ)
            var assets = getAssetClasses();

            // create chart
            DrawdownLineChart lc = new DrawdownLineChart();
            C.Chart chart = lc.GenerateChart(title);

            // client assets
            if (Client.ExistingAssets) {
                var data1 = calculateClientAssetDrawdown();
                lc.AddLineChartSeries(chart, data1, "Current", clientColourHex);
            }

            // first asset class
            var data2 = calculateAssetClassDrawdown(assets[0].ID);
            lc.AddLineChartSeries(chart, data2, assets[0].Name, assets[0].ColourHex);

            // second asset class
            var data3 = calculateAssetClassDrawdown(assets[1].ID);
            lc.AddLineChartSeries(chart, data3, assets[1].Name, assets[1].ColourHex);

            // model drawdown
            var data4 = calculateModelDrawdown(Client.StrategyID, Client.StatusName);
            lc.AddLineChartSeries(chart, data4, StrategyName + " Strategy", strategyColourHex);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = lc.GraphData
            };

            return chartItem;
        }
Пример #6
0
        public ChartItem AllocationComparison()
        {
            // get chart specs
            XElement rpt = chartSpec("allocation-comparison");
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;

            // set title
            string title = String.Format(rpt.Element("title").Value, StrategyName);

            var comp = DataContext.ClientWeightingComparison(Client.GUID, Client.StrategyID);
            var diff = from c in comp
                       let weight = Client.HighNetWorth ? c.WeightingDifferenceHNW : c.WeightingDifferenceAffluent
                       select new AssetWeighting { AssetClass = c.AssetClassName, Weighting = weight };
            var data = diff.ToList();

            AllocationComparisonBarChart bc = new AllocationComparisonBarChart();
            C.Chart chart = bc.GenerateChart(title, data);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem
            {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = bc.GraphData
            };

            return chartItem;
        }
Пример #7
0
        public ChartItem Allocation()
        {
            XElement rpt = chartSpec("allocation");
            decimal x = (decimal?)rpt.Attribute("size-x") ?? DefaultSizeX;
            decimal y = (decimal?)rpt.Attribute("size-y") ?? DefaultSizeY;
            string title = null;

            // set title
            if (Client.ExistingAssets) {
                title = rpt.Element("title").Element("existing-assets").Value;
            } else {
                title = String.Format(rpt.Element("title").Element("cash").Value, StrategyName);
            }

            List<AssetWeighting> data;

            if (Client.ExistingAssets) {
                data = ClientAssetClass.GetClientAssetWeighting(Client.GUID).Where(a => a.Weighting > 0).ToList();
            } else {
                data = Model.GetModelAllocation(Client.StrategyID, Client.HighNetWorth).Where(a => a.Weighting > 0).ToList();
            }

            AllocationPieChart pie = new AllocationPieChart();
            C.Chart chart = pie.GenerateChart(title, data);

            string ccn = rpt.Element("control-name").Value;
            ChartItem chartItem = new ChartItem
            {
                Chart = chart,
                Title = title,
                CustomControlName = ccn,
                SizeX = x,
                SizeY = y,
                GraphData = pie.GraphData
            };

            return chartItem;
        }