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; }
//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); }
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; }
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; }
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; }
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; }
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; }