Table Annotations, Hot Spots
1//! Please read the RED text within this code window and others.2//! You will find important information that improves your experience with the demo.3//!4//! Some things to try...5//! 1) Right click the chart and use the popup menu to adjust viewing style and other items.6//! 2) Left click and drag to zoom, use popup menu to undo zoom. Note how time scale changes.7//! 3) Left click the Portfolio table to select different stocks.8//! 4) Change Point Label Orientation via the popup menu and note how x axis scale changes.9//! 5) The Data Cursor can be moved with arrow keys. Click a data point and then use arrow keys.10//! 6) Zoom chart and watch the Volume bar plotting method structure for different time ranges.11//! There's new drawing logic that first recognizes all bars are connected, then as range is shrunk,12//! bar's get drawn 1 pixel apart, and finally after zooming more, bars are spaced.13 14// Note, the entire code to produce this example is shown below.15// The immediate section controls chart construction, latter sections show16// how to respond to mouse-move and table annotation hot spot events.17// The final section shows how the data is loaded from a comma delimited.18// file and studies calculated.19 20// This example shows a collection of features.21// Table Annotation Hot Spots can turn table annotations into user interface objects.22// Also shown is real-time table annotation updating and date/time handling.23 24 25Pego1.PeUserInterface.Cursor.PromptTracking = true;26Pego1.PeUserInterface.Cursor.PromptLocation = CursorPromptLocation.ToolTip;27Pego1.PeUserInterface.Cursor.PromptStyle = CursorPromptStyle.XYValues;28Pego1.PeUserInterface.Cursor.TrackingTooltipMaxWidth = 100;29Pego1.PeUserInterface.Cursor.TrackingCustomDataText = true;30Pego1.PeUserInterface.Cursor.MouseCursorControl = true;31 32// Enable ZoomWindow //33Pego1.PePlot.ZoomWindow.Show = true;34 35// Enable MouseWheel Zooming36Pego1.PeUserInterface.Scrollbar.MouseWheelFunction = MouseWheelFunction.HorizontalZoom;37Pego1.PeUserInterface.Scrollbar.MouseDraggingX = true; // note that pan gestures require MouseDragging to be enabled38 39// Enable MouseWheel Zoom Smoothness40Pego1.PeUserInterface.Scrollbar.MouseWheelZoomSmoothness = 4;41Pego1.PeUserInterface.Scrollbar.PinchZoomSmoothness = 2;42 43// Enable Bar Glass Effect //44Pego1.PePlot.Option.BarGlassEffect = true;45 46// No Flicker //47Pego1.PeConfigure.PrepareImages = true;48Pego1.PeConfigure.CacheBmp = true;49 50// Fixed Font Sizes //51Pego1.PeFont.Fixed = true;52 53// YAxis Changes Range as you pan horizontally or zoom //54Pego1.PeUserInterface.Scrollbar.ScrollingScaleControl = true;55 56// Construct a simple table annotation //57Pego1.PeAnnotation.Table.Working = 0;58Pego1.PeAnnotation.Table.Rows = 17;59Pego1.PeAnnotation.Table.Columns = 1; // 12 is same number as PEP_nPOINTS60 61// Pass the table text //62Pego1.PeAnnotation.Table.Text[0, 0] = " MSFT";63Pego1.PeAnnotation.Table.Text[1, 0] = " AAPL";64Pego1.PeAnnotation.Table.Text[2, 0] = " AMD";65Pego1.PeAnnotation.Table.Text[3, 0] = " AMZN";66Pego1.PeAnnotation.Table.Text[4, 0] = " CSCO";67Pego1.PeAnnotation.Table.Text[5, 0] = " META";68Pego1.PeAnnotation.Table.Text[6, 0] = " NFLX";69Pego1.PeAnnotation.Table.Text[7, 0] = " QCOM";70Pego1.PeAnnotation.Table.Text[8, 0] = " SBUX";71Pego1.PeAnnotation.Table.Text[9, 0] = " TSLA";72Pego1.PeAnnotation.Table.Text[10, 0] = "-----------------";73 74Pego1.PeAnnotation.Table.HotSpot[0, 0] = true;75Pego1.PeAnnotation.Table.HotSpot[1, 0] = true;76Pego1.PeAnnotation.Table.HotSpot[2, 0] = true;77Pego1.PeAnnotation.Table.HotSpot[3, 0] = true;78Pego1.PeAnnotation.Table.HotSpot[4, 0] = true;79Pego1.PeAnnotation.Table.HotSpot[5, 0] = true;80Pego1.PeAnnotation.Table.HotSpot[6, 0] = true;81Pego1.PeAnnotation.Table.HotSpot[7, 0] = true;82Pego1.PeAnnotation.Table.HotSpot[8, 0] = true;83Pego1.PeAnnotation.Table.HotSpot[9, 0] = true;84 85Pego1.PeAnnotation.Table.Color[0, 0] = Color.FromArgb(255, 198, 0, 0);86Pego1.PeAnnotation.Table.Color[1, 0] = Color.FromArgb(255, 142, 142, 142);87Pego1.PeAnnotation.Table.Color[2, 0] = Color.FromArgb(255, 142, 142, 142);88Pego1.PeAnnotation.Table.Color[3, 0] = Color.FromArgb(255, 142, 142, 142);89Pego1.PeAnnotation.Table.Color[4, 0] = Color.FromArgb(255, 142, 142, 142);90Pego1.PeAnnotation.Table.Color[5, 0] = Color.FromArgb(255, 142, 142, 142);91Pego1.PeAnnotation.Table.Color[6, 0] = Color.FromArgb(255, 142, 142, 142);92Pego1.PeAnnotation.Table.Color[7, 0] = Color.FromArgb(255, 142, 142, 142);93Pego1.PeAnnotation.Table.Color[8, 0] = Color.FromArgb(255, 142, 142, 142);94Pego1.PeAnnotation.Table.Color[9, 0] = Color.FromArgb(255, 142, 142, 142);95Pego1.PeAnnotation.Table.Color[10, 0] = Color.FromArgb(255, 142, 142, 142);96Pego1.PeAnnotation.Table.Color[11, 0] = Color.FromArgb(255, 150, 150, 150);97Pego1.PeAnnotation.Table.Color[12, 0] = Color.FromArgb(255, 150, 150, 150);98Pego1.PeAnnotation.Table.Color[13, 0] = Color.FromArgb(255, 142, 142, 142);99Pego1.PeAnnotation.Table.Color[14, 0] = Color.FromArgb(255, 0, 170, 0);100Pego1.PeAnnotation.Table.Color[15, 0] = Color.FromArgb(255, 198, 0, 0);101Pego1.PeAnnotation.Table.Color[16, 0] = Color.FromArgb(255, 190, 190, 190);102 103Pego1.PeAnnotation.Table.ColumnWidth[0] = 8;104 105// Set Table Location //106Pego1.PeAnnotation.Table.Location = GraphTALocation.LeftCenter;107 108// Other Table Related Properties ///109Pego1.PeAnnotation.Table.Show = true;110Pego1.PeAnnotation.Table.Border = TABorder.SingleLine;111Pego1.PeAnnotation.Table.BackColor = Color.FromArgb(255, 0, 0, 0);112Pego1.PeAnnotation.Table.ForeColor = Color.FromArgb(255, 250, 250, 250);113Pego1.PeAnnotation.Table.TextSize = 100;114 115// Done setting Table Annotations //116 117// Load Data and Add Studies, Total of 11 subsets when finished //118StockPriceLoader.LoadData("MSFT", Pego1);119 120//! Set properties related to date/time mode //121Pego1.PeData.DeltasPerDay = 1; // 1 data point per day122Pego1.PeData.DeltaX = -1 ; // -1 special code for daily data //123Pego1.PeData.DateTimeMode = true ; // How to interpret serial dates //124Pego1.PeGrid.Option.YearMonthDayPrompt = YearMonthDayPrompt.InsideTop;125Pego1.PeGrid.Option.DayLabelType = DayLabelType.ThreeCharacters;126Pego1.PeGrid.Option.MonthLabelType = MonthLabelType.ThreeCharacters;127 128// Split up subsets among different axes //129Pego1.PeGrid.MultiAxesSubsets[0] = 7; // ohlc and upper bollinger, sma, lower bollinger130Pego1.PeGrid.MultiAxesSubsets[1] = 1; // volume131Pego1.PeGrid.MultiAxesSubsets[2] = 1; // RSI132Pego1.PeGrid.MultiAxesSubsets[3] = 2; // Fast and Slow Stochastic133 134Pego1.PeGrid.MultiAxesProportions[0] = 0.70F;135Pego1.PeGrid.MultiAxesProportions[1] = 0.10F;136Pego1.PeGrid.MultiAxesProportions[2] = 0.10F;137Pego1.PeGrid.MultiAxesProportions[3] = 0.10F;138 139// Set Various Other Properties ///140Pego1.PeData.Precision = DataPrecision.TwoDecimals;141Pego1.PeGrid.Option.MultiAxisStyle = MultiAxisStyle.SeparateAxes;142Pego1.PeUserInterface.Allow.MultiAxesSizing = true;143Pego1.PeGrid.Option.YAxisOnRight = true;144Pego1.PePlot.Option.SpecificPlotModeColor = true; // Enables mult-colored candle stick fills145Pego1.PePlot.DataShadows = DataShadows.None;146Pego1.PeUserInterface.Allow.Zooming = AllowZooming.HorzAndVert;147Pego1.PeUserInterface.Allow.ZoomStyle = ZoomStyle.Ro2Not;148 149Pego1.PeUserInterface.HotSpot.Data = true;150Pego1.PeUserInterface.HotSpot.Size = HotSpotSize.Large;151 152Pego1.PeGrid.Option.ShowXAxis = ShowAxis.GridNumbers;153Pego1.PeString.MainTitle = "";154Pego1.PeString.SubTitle = "";156Pego1.PePlot.PointSize = PointSize.Small;157Pego1.PeUserInterface.Allow.Maximization = false;158Pego1.PeGrid.LineControl = GridLineControl.Both;159Pego1.PeLegend.SimpleLine = true;160Pego1.PeLegend.SimplePoint = true;161Pego1.PeLegend.Style = LegendStyle.OneLineTopOfAxis;162Pego1.PeGrid.Configure.AutoMinMaxPadding = 1;163Pego1.PePlot.Option.OhlcMinWidth = 4; // NOTE: Controls minium candle-stick width //164 165Pego1.PeUserInterface.Menu.GraphPlusTable = MenuControl.Hide;166Pego1.PeUserInterface.Menu.TableWhat = MenuControl.Hide;167Pego1.PeUserInterface.Menu.MultiAxisStyle = MenuControl.Show;168Pego1.PeUserInterface.Menu.LegendLocation = MenuControl.Show;169Pego1.PeUserInterface.Menu.ShowTableAnnotations = MenuControl.Show;170Pego1.PeUserInterface.Menu.AnnotationControl = true;171Pego1.PeUserInterface.Dialog.PrintStyleControl = PrintStyleControl.DefaultMonochrome;172 173// Set up per axis properties //174Pego1.PeGrid.WorkingAxis = 0;175Pego1.PePlot.Method = GraphPlottingMethod.SpecificPlotMode;176Pego1.PePlot.SpecificPlotMode = SpecificPlotMode.BoxPlot;177Pego1.PePlot.ComparisonSubsets = 3;178Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;179 180Pego1.PeGrid.WorkingAxis = 1;181Pego1.PePlot.Method = GraphPlottingMethod.Bar;182Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;183 184Pego1.PeGrid.WorkingAxis = 2;185Pego1.PePlot.Method = GraphPlottingMethod.Line;186Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;187 188Pego1.PeGrid.WorkingAxis = 3;189Pego1.PePlot.Method = GraphPlottingMethod.Area;190Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;191 192// Set Subset Colors //193Pego1.PeColor.SubsetColors[0] = Color.FromArgb(255, 255, 255, 255);194Pego1.PeColor.SubsetColors[1] = Color.FromArgb(255, 240, 3, 3);195Pego1.PeColor.SubsetColors[2] = Color.FromArgb(255, 240, 5, 5);196Pego1.PeColor.SubsetColors[3] = Color.FromArgb(255, 25, 198, 25);197Pego1.PeColor.SubsetColors[4] = Color.FromArgb(255, 126, 250, 200);198Pego1.PeColor.SubsetColors[5] = Color.FromArgb(255, 212, 168, 0);199Pego1.PeColor.SubsetColors[6] = Color.FromArgb(255, 200, 50, 50);200Pego1.PeColor.SubsetColors[7] = Color.FromArgb(255, 126, 250, 62);201Pego1.PeColor.SubsetColors[8] = Color.FromArgb(255, 33, 200, 69);202Pego1.PeColor.SubsetColors[9] = Color.FromArgb(255, 163, 160, 250);203Pego1.PeColor.SubsetColors[10] = Color.FromArgb(155, 212, 216, 0);204 205// Set Subset Line Types //206Pego1.PeLegend.SubsetLineTypes[0] = LineType.ThinSolid;207Pego1.PeLegend.SubsetLineTypes[1] = LineType.ThinSolid;208Pego1.PeLegend.SubsetLineTypes[2] = LineType.ThinSolid;209Pego1.PeLegend.SubsetLineTypes[3] = LineType.ThinSolid;210Pego1.PeLegend.SubsetLineTypes[4] = LineType.ThinSolid;211Pego1.PeLegend.SubsetLineTypes[5] = LineType.ThinSolid;212Pego1.PeLegend.SubsetLineTypes[6] = LineType.ThinSolid;213Pego1.PeLegend.SubsetLineTypes[7] = LineType.MediumThinSolid;214Pego1.PeLegend.SubsetLineTypes[8] = LineType.MediumThinSolid;215Pego1.PeLegend.SubsetLineTypes[9] = LineType.MediumThinSolid;216Pego1.PeLegend.SubsetLineTypes[10] = LineType.MediumThinSolid;217 218// Set Subset Labels //219Pego1.PeString.SubsetLabels[0] = "High";220Pego1.PeString.SubsetLabels[1] = "Low";221Pego1.PeString.SubsetLabels[2] = "Open";222Pego1.PeString.SubsetLabels[3] = "Close";223Pego1.PeString.SubsetLabels[4] = "Bollinger Upper";224Pego1.PeString.SubsetLabels[5] = "SMA 20";225Pego1.PeString.SubsetLabels[6] = "Bollinger Lower";226Pego1.PeString.SubsetLabels[7] = "Volume";227Pego1.PeString.SubsetLabels[8] = "Relative Strength Index - 10";228Pego1.PeString.SubsetLabels[9] = "Fast %K";229Pego1.PeString.SubsetLabels[10] = "Slow %D";230 231Pego1.PePlot.Option.GradientBars = 14;232Pego1.PeConfigure.TextShadows = TextShadows.BoldText;235Pego1.PeFont.Label.Bold = true;236Pego1.PePlot.Option.LineShadows = true;238Pego1.PePlot.DataShadows = DataShadows.Shadows;239 240Pego1.PeColor.BitmapGradientMode = true;241Pego1.PeColor.QuickStyle = QuickStyle.DarkNoBorder;242 243Pego1.PeUserInterface.Menu.AnnotationControl = true;244Pego1.PeUserInterface.Menu.ShowAnnotationText = MenuControl.Show;245 246Pego1.PePlot.Option.PointGradientStyle = PlotGradientStyle.VerticalAscentInverse;247Pego1.PeColor.PointBorderColor = Color.FromArgb(100, 0, 0, 0);248Pego1.PePlot.Option.LineSymbolThickness = 3;249Pego1.PePlot.Option.AreaBorder = 0;250Pego1.PePlot.Option.SolidLineOverArea = 1;251 252Pego1.PeConfigure.ImageAdjustTop = 75;253Pego1.PeConfigure.ImageAdjustLeft = 75;254Pego1.PeConfigure.ImageAdjustRight = 75;255 256// Set various export defaults //257Pego1.PeSpecial.DpiX = 600;258Pego1.PeSpecial.DpiY = 600;259 260// Other default export setting //261Pego1.PeUserInterface.Dialog.ExportSizeDef = ExportSizeDef.NoSizeOrPixel;262Pego1.PeUserInterface.Dialog.ExportTypeDef = ExportTypeDef.Png;263Pego1.PeUserInterface.Dialog.ExportDestDef = ExportDestDef.Clipboard;264Pego1.PeUserInterface.Dialog.ExportUnitXDef = "1280";265Pego1.PeUserInterface.Dialog.ExportUnitYDef = "768";266Pego1.PeUserInterface.Dialog.ExportImageDpi = 300;267 268Pego1.PeConfigure.RenderEngine = RenderEngine.Direct2D;269Pego1.PeConfigure.AntiAliasText = true;270Pego1.PeConfigure.AntiAliasGraphics= true;271 272Pego1.PeFunction.ReinitializeResetImage();273Pego1.Invalidate();274// Optionally call Pego1.Refresh() if you are not seeing changes immediatelyPego1.PeData.Y[s, p]Click underlined properties to view documentation