1: public static Telerik.Reporting.Chart CompareTwoStocks(string _securityOne, string _securityTwo)
2: {
3: Telerik.Reporting.Chart mychart = new Telerik.Reporting.Chart();
4: mychart.Skin = "Office2007";
5: string[] Stocks = new string[] { _securityOne, _securityTwo };
6: System.Drawing.Color[] seriesColor = new Color[] { Color.Red, Color.Blue };
7: List<HistoricalStock>[] stockitems = new List<HistoricalStock>[2];
8:
9: int size = 0;
10: foreach (string symbol in Stocks)
11: {
12: stockitems[size++] = new List<HistoricalStock>(YahooHistoricalLoader.DownloadData(symbol, 2012).Where(f => f.Date >= new DateTime(2012, 1, 1)).OrderBy(t => t.Date).Select(m => m));
13: }
14:
15: #region XAxis and YAxis Labels
16: mychart.PlotArea.XAxis.AxisLabel.TextBlock.Visible = true;
17: mychart.PlotArea.YAxis.AxisLabel.TextBlock.Visible = true;
18: mychart.PlotArea.XAxis.AxisLabel.Visible = true;
19: mychart.PlotArea.YAxis.AxisLabel.Visible = true;
20: mychart.PlotArea.XAxis.AxisLabel.TextBlock.Text = "Period";
21: mychart.PlotArea.YAxis.AxisLabel.TextBlock.Text = "Price Per Share ($)";
22: mychart.PlotArea.XAxis.AxisLabel.Appearance.Position.Auto = true;
23: mychart.PlotArea.YAxis.AxisLabel.Appearance.Position.Auto = true;
24: #endregion
25:
26: mychart.ChartTitle.TextBlock.Text = string.Join(" Vs. ", Stocks);
27: mychart.ChartTitle.TextBlock.Appearance.TextProperties.Color = Color.Blue;
28: #region Generate Chart Series
29: for (int i = 0; i < size; i++)
30: {
31: ChartSeries series = new ChartSeries();
32: int seriesItemPosition = 0;
33: foreach (HistoricalStock hs in stockitems[i])
34: {
35: ChartSeriesItem seriesItem = new ChartSeriesItem();
36: seriesItem.YValue = hs.Close;
37: seriesItem.XValue = seriesItemPosition++;
38: seriesItem.Label.TextBlock.Visible = false;
39: series.Items.Add(seriesItem);
40: }
41: series.YAxisType = (i == 0) ? ChartYAxisType.Primary : ChartYAxisType.Secondary;
42: series.Appearance.FillStyle.MainColor = seriesColor[i];
43: series.Name = Stocks[i];
44: series.Appearance.LegendDisplayMode = ChartSeriesLegendDisplayMode.Nothing;
45: series.Type = ChartSeriesType.Spline;
46: mychart.Series.Add(series);
47:
48: }
49: #endregion
50:
51: #region Custom Legend
52: int seq = 0;
53: foreach (string symbol in Stocks)
54: {
55: LabelItem LegenItem = new LabelItem();
56: LegenItem.Marker.Visible = true;
57: LegenItem.Marker.Appearance.Figure = Telerik.Reporting.Charting.Styles.DefaultFigures.Rectangle;
58: LegenItem.Marker.Appearance.FillStyle.MainColor = seriesColor[seq++];
59: LegenItem.Marker.Appearance.FillStyle.FillType = Telerik.Reporting.Charting.Styles.FillType.Solid;
60: LegenItem.TextBlock.Text = symbol;
61:
62: mychart.Legend.Items.Add(LegenItem);
63: }
64: #region Legend Location
65: mychart.Legend.Appearance.Location = Telerik.Reporting.Charting.Styles.LabelLocation.OutsidePlotArea;
66: mychart.Legend.Appearance.Overflow = Telerik.Reporting.Charting.Styles.Overflow.Row;
67: mychart.Legend.Appearance.Position.AlignedPosition = Telerik.Reporting.Charting.Styles.AlignedPositions.Bottom;
68: #endregion
69: #endregion
70: #region EliminateGridlines
71: mychart.PlotArea.YAxis.Appearance.MajorGridLines.Visible = false;
72: mychart.PlotArea.YAxis.Appearance.MinorGridLines.Visible = false;
73: mychart.PlotArea.XAxis.Appearance.MajorGridLines.Visible = false;
74: mychart.PlotArea.XAxis.Appearance.MinorGridLines.Visible = false;
75: #endregion
76:
77: #region Conguring XAxis
78: mychart.PlotArea.XAxis.Appearance.MinorTick.Visible = false;
79: mychart.PlotArea.XAxis.Appearance.MajorTick.Visible = false;
80: mychart.PlotArea.XAxis.Appearance.TextAppearance.TextProperties.Font = new System.Drawing.Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular);
81: mychart.PlotArea.XAxis.LayoutMode = Telerik.Reporting.Charting.Styles.ChartAxisLayoutMode.Between;
82: mychart.PlotArea.XAxis.IsZeroBased = true;
83: mychart.PlotArea.XAxis.AutoScale = false;
84: mychart.PlotArea.XAxis.AddRange(1, stockitems[0].Count(), 1);
85: int sequence = 0;
86: foreach (HistoricalStock h in stockitems[0])
87: {
88:
89: mychart.PlotArea.XAxis[sequence].TextBlock.Text = h.Date.ToString("MMM, yyyy");
90: mychart.PlotArea.XAxis[sequence].TextBlock.Visible = false;
91: sequence++;
92:
93: }
94:
95: #endregion
96:
97: #region Scaling Chart YAxis
98:
99: mychart.PlotArea.YAxis.IsZeroBased = false;
100: mychart.PlotArea.YAxis.AutoScale = true;
101:
102: mychart.PlotArea.YAxis2.IsZeroBased = false;
103: mychart.PlotArea.YAxis2.AutoScale = true;
104:
105: #endregion
106:
107: #region Zonification
108: int[] ZoningSize = stockitems[0].GroupBy(p => p.Date.Month).Select(t => t.Count()).ToArray();
109: int counter = 0;
110: int monthSeq = 1;
111: foreach (int z in ZoningSize)
112: {
113: ChartMarkedZone zone = new ChartMarkedZone();
114: zone.ValueStartX = counter;
115: zone.ValueEndX = counter + z;
116: counter = counter + z;
117: zone.Label.TextBlock.Text = new DateTime(2012, monthSeq, 1).ToString("MMM");
118: zone.Appearance.Border.Color = Color.LightBlue;
119: zone.Label.Appearance.Position.AlignedPosition = Telerik.Reporting.Charting.Styles.AlignedPositions.Bottom;
120: zone.Label.TextBlock.Appearance.TextProperties.Font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSansSerif, 5, FontStyle.Bold);
121: monthSeq++;
122: mychart.PlotArea.MarkedZones.Add(zone);
123: }
124: #endregion
125:
126: #region Chart Location and Customization
127: Telerik.Reporting.Drawing.Unit Height = new Telerik.Reporting.Drawing.Unit(7, ((Telerik.Reporting.Drawing.UnitType)(Telerik.Reporting.Drawing.UnitType.Cm)));
128: Telerik.Reporting.Drawing.Unit Width = new Telerik.Reporting.Drawing.Unit(14, ((Telerik.Reporting.Drawing.UnitType)(Telerik.Reporting.Drawing.UnitType.Cm)));
129: mychart.PlotArea.XAxis.AutoShrink = false;
130: mychart.Size = new Telerik.Reporting.Drawing.SizeU(Width, Height);
131: mychart.Location = new Telerik.Reporting.Drawing.PointU(new Telerik.Reporting.Drawing.Unit(0.25, ((Telerik.Reporting.Drawing.UnitType)(Telerik.Reporting.Drawing.UnitType.Cm))), new Telerik.Reporting.Drawing.Unit(0.8, ((Telerik.Reporting.Drawing.UnitType)(Telerik.Reporting.Drawing.UnitType.Cm))));
132:
133: #region Reposition XAxis Label
134: mychart.PlotArea.XAxis.AxisLabel.Appearance.Position.Auto = false;
135: mychart.PlotArea.XAxis.AxisLabel.Appearance.Position.X = 320;
136: mychart.PlotArea.XAxis.AxisLabel.Appearance.Position.Y = 320;
137: #endregion
138: #region Reposition Graph
139: mychart.PlotArea.Appearance.Dimensions.Margins.Bottom = 90;
140: mychart.PlotArea.Appearance.Dimensions.Margins.Right = 80;
141: mychart.PlotArea.Appearance.Dimensions.Margins.Left = 90;
142: #endregion
143: #endregion
144:
145: return mychart;
146: }