XY Chart NET 3 Control Reference
Sample 9: Candle Profile

This sample demonstrates a basic financial chart showing a candle profile with Buy/Sell signals and Notes for specific data points.

This chart shows two profiles, one of which is a Candle profile.  The Candle profile also displays some Buy and Sell signals as well as Notes for some specified data points.  The Legend is configured to only show the Close data, during Crosshairs mode, for the Candle profile.  Snapshots of the resulting chart are included below.

To test this code, the trial or full version of XY Chart NET must be installed on your computer.

  1. Start a new project
  2. Copy the code below directly into the project
  3. On the form, place a new XYChartNET control named XYChartNETCtl1 (default)
  4. Run the project

 

Sample Code

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ChartArray(9, 6) As Double
        Dim sellData(1) As Double
        Dim buyData(1) As Double
        Dim noteData(2) As String
        Dim noteDataDatetime(2) As Double
        Dim dDate As DateTime = New DateTime(2008, 7, 7)
        Dim myFont As New Font("Arial", 10, FontStyle.Bold)
        Dim myFont2 As New Font("Arial", 12, FontStyle.Bold)

        ChartArray(0, 0) = dDate.ToOADate
        ChartArray(0, 1) = 83.86
        ChartArray(0, 2) = 84.94
        ChartArray(0, 3) = 83.5
        ChartArray(0, 4) = 84.25
        ChartArray(0, 5) = dDate.ToOADate
        ChartArray(0, 6) = 272744
        ChartArray(1, 0) = dDate.AddDays(1).ToOADate
        ChartArray(1, 1) = 82.89
        ChartArray(1, 2) = 83.87
        ChartArray(1, 3) = 82.04
        ChartArray(1, 4) = 83.45
        ChartArray(1, 5) = dDate.AddDays(1).ToOADate
        ChartArray(1, 6) = 396129
        ChartArray(2, 0) = dDate.AddDays(2).ToOADate
        ChartArray(2, 1) = 84.0
        ChartArray(2, 2) = 85.38
        ChartArray(2, 3) = 82.68
        ChartArray(2, 4) = 82.86
        ChartArray(2, 5) = dDate.AddDays(2).ToOADate
        ChartArray(2, 6) = 140030
        ChartArray(3, 0) = dDate.AddDays(3).ToOADate
        ChartArray(3, 1) = 83.85
        ChartArray(3, 2) = 85.91
        ChartArray(3, 3) = 83.79
        ChartArray(3, 4) = 84.95
        ChartArray(3, 5) = dDate.AddDays(3).ToOADate
        ChartArray(3, 6) = 246776
        ChartArray(4, 0) = dDate.AddDays(4).ToOADate
        ChartArray(4, 1) = 87.82
        ChartArray(4, 2) = 89.24
        ChartArray(4, 3) = 87.74
        ChartArray(4, 4) = 88.9
        ChartArray(4, 5) = dDate.AddDays(4).ToOADate
        ChartArray(4, 6) = 867575
        ChartArray(5, 0) = dDate.AddDays(7).ToOADate
        ChartArray(5, 1) = 89.06
        ChartArray(5, 2) = 91.72
        ChartArray(5, 3) = 88.1
        ChartArray(5, 4) = 91.42
        ChartArray(5, 5) = dDate.AddDays(7).ToOADate
        ChartArray(5, 6) = 355617
        ChartArray(6, 0) = dDate.AddDays(8).ToOADate
        ChartArray(6, 1) = 92.36
        ChartArray(6, 2) = 93.51
        ChartArray(6, 3) = 88.11
        ChartArray(6, 4) = 88.91
        ChartArray(6, 5) = dDate.AddDays(8).ToOADate
        ChartArray(6, 6) = 590973
        ChartArray(7, 0) = dDate.AddDays(9).ToOADate
        ChartArray(7, 1) = 88.84
        ChartArray(7, 2) = 89.84
        ChartArray(7, 3) = 86.11
        ChartArray(7, 4) = 87.14
        ChartArray(7, 5) = dDate.AddDays(9).ToOADate
        ChartArray(7, 6) = 249152
        ChartArray(8, 0) = dDate.AddDays(10).ToOADate
        ChartArray(8, 1) = 86.6
        ChartArray(8, 2) = 88.76
        ChartArray(8, 3) = 84.91
        ChartArray(8, 4) = 85.89
        ChartArray(8, 5) = dDate.AddDays(10).ToOADate
        ChartArray(8, 6) = 397455
        ChartArray(9, 0) = dDate.AddDays(11).ToOADate
        ChartArray(9, 1) = 85.69
        ChartArray(9, 2) = 86.52
        ChartArray(9, 3) = 84.94
        ChartArray(9, 4) = 85.45
        ChartArray(9, 5) = dDate.AddDays(11).ToOADate
        ChartArray(9, 6) = 115791

        buyData(0) = dDate.AddDays(3).ToOADate
        sellData(0) = dDate.AddDays(10).ToOADate
        noteData(0) = "First"
        noteData(1) = "Second"
        noteDataDatetime(0) = dDate.AddDays(4).ToOADate
        noteDataDatetime(1) = dDate.AddDays(7).ToOADate

        ' Configure XYChart control
        With XyChartNETCtl1
            .NumProfiles = 2
            .NumYScales = 2
            .NumXScales = 1

            .YStacking = True
            .NumYStacks = 2
            .YStack(0).HeightPercentage = 70
            .YStack(1).HeightPercentage = 30

            .Toolbar.Visible = True
            .Toolbar.BackColor = Color.White

            .ZoomWindowColor = Color.LightGreen

            ' Chart and plot formatting
            .BackColor = Color.White
            .Plot.BackColor = Color.White
            .Plot.Border.LineOption = XYChartNet.XYChartNETCtl.LineOptions.loNone

            ' Legend
            With .Legend
                .Visible = True
                .BorderVisible = False
                .YScaleVisible = False
            End With

            ' Crosshairs
            With .Crosshairs
                .YCoordInLegend = True
                .CloseCoordInLegend = True
                .Color = Color.LightGreen
                .VerticalVisible = True
                .HorizontalVisible = False
                .CoordsBackcolor = Color.LightGreen
                .Width = XYChartNet.XYChartNETCtl.WidthOptions.woTwoPoint
            End With

            ' Y Axis
            With .YAxis(0)
                With .Grid
                    .LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom
                    .LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid
                    .LineColor = Color.LightGray
                End With
                With .Scale
                    .Label = "$"
                    .LabelFont = myFont2
                    .LabelColor = Color.Black
                    .TicksColor = Color.Black
                    .Visible = True
                End With
            End With
            With .YAxis(1)
                With .Grid
                    .LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom
                    .LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid
                    .LineColor = Color.LightGray
                End With
                With .Scale
                    .Label = "Volume"
                    .LabelFont = myFont2
                    .LabelColor = Color.Black
                    .TicksColor = Color.Black
                    .Visible = True
                    .ForceZeroDisplay = True
                End With
            End With

            ' X Axis
            With .XAxis(0)
                With .Grid
                    .LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom
                    .LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid
                    .LineColor = Color.LightGray
                End With
                With .Scale
                    .Label = "2008"
                    .LabelFont = myFont2
                    .LabelColor = Color.Black
                    .TicksColor = Color.Black
                    .TickLabelSpacing = 1
                    .FormatStyle = XYChartNet.XYChartNETCtl.FormatStyles.fsDateTime
                    .CenterToDay = True
                    .DateIncludeWeekends = False
                    .DateTimeFormat = "MMM d"
                    .ScaleMode = XYChartNet.XYChartNETCtl.ScaleModes.smManual
                    .ScaleManualMin = dDate.ToOADate
                    .ScaleManualMax = dDate.AddDays(11).ToOADate + 3
                    .Visible = True
                End With
            End With

            ' Profiles
            With .Profile(0)
                .YScale = 0
                .NumSamples = 10
                .Label = "Price"
                .ChartFeatureType = XYChartNet.XYChartNETCtl.ChartFeatureOptions.cfCandle
                .CandleBodyWidth = 15
                .CandleShadowWidth = 1
                .SellSignalData = sellData
                .SellSignal = XYChartNet.XYChartNETCtl.SignalOptions.soArrowDown
                .SellSignalSize = 14
                .SellSignalDisplayOffset = 5
                .SellSignalBorderColor = Color.Black
                .SellSignalFillColor = Color.Black
                .BuySignalData = buyData
                .BuySignal = XYChartNet.XYChartNETCtl.SignalOptions.soArrowUp
                .BuySignalSize = 14
                .BuySignalDisplayOffset = 6
                .BuySignalBorderColor = Color.Blue
                .BuySignalFillColor = Color.Blue
                .NoteData = noteData
                .NoteDataDatetime = noteDataDatetime
                .NoteColor = Color.Black
                .NoteRotation = -45
                .NoteFont = myFont
            End With
            With .Profile(1)
                .YScale = 1
                .NumSamples = 10
                .Label = "Volume"
                .LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom
                .MarkerOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom
                .ChartFeatureType = XYChartNet.XYChartNETCtl.ChartFeatureOptions.cfBar
                .BarReference = 0
                .BarBorderColor = Color.CadetBlue
                .BarFillColor = Color.LightBlue
                .BarWidth = 0.4
            End With

            .ChartData = ChartArray
            .Refresh()

        End With

    End Sub
    private void Form1_Load(object sender, EventArgs e)
        {
            double [,] ChartArray = new double [10, 7];
            double [] sellData = new double [1];
            double [] buyData = new double [1];
            String[] noteData = new String[2];
            double [] noteDataDatetime = new double [2];
            DateTime dDate = new DateTime(2008, 7, 7);
            Font myFont = new Font("Arial", 10, FontStyle.Bold);
            Font myFont2 = new Font("Arial", 12, FontStyle.Bold);

            ChartArray[0, 0] = dDate.ToOADate();
            ChartArray[0, 1] = 83.86;
            ChartArray[0, 2] = 84.94;
            ChartArray[0, 3] = 83.5;
            ChartArray[0, 4] = 84.25;
            ChartArray[0, 5] = dDate.ToOADate();
            ChartArray[0, 6] = 272744;
            ChartArray[1, 0] = dDate.AddDays(1).ToOADate();
            ChartArray[1, 1] = 82.89;
            ChartArray[1, 2] = 83.87;
            ChartArray[1, 3] = 82.04;
            ChartArray[1, 4] = 83.45;
            ChartArray[1, 5] = dDate.AddDays(1).ToOADate();
            ChartArray[1, 6] = 396129;
            ChartArray[2, 0] = dDate.AddDays(2).ToOADate();
            ChartArray[2, 1] = 84.0;
            ChartArray[2, 2] = 85.38;
            ChartArray[2, 3] = 82.68;
            ChartArray[2, 4] = 82.86;
            ChartArray[2, 5] = dDate.AddDays(2).ToOADate();
            ChartArray[2, 6] = 140030;
            ChartArray[3, 0] = dDate.AddDays(3).ToOADate();
            ChartArray[3, 1] = 83.85;
            ChartArray[3, 2] = 85.91;
            ChartArray[3, 3] = 83.79;
            ChartArray[3, 4] = 84.95;
            ChartArray[3, 5] = dDate.AddDays(3).ToOADate();
            ChartArray[3, 6] = 246776;
            ChartArray[4, 0] = dDate.AddDays(4).ToOADate();
            ChartArray[4, 1] = 87.82;
            ChartArray[4, 2] = 89.24;
            ChartArray[4, 3] = 87.74;
            ChartArray[4, 4] = 88.9;
            ChartArray[4, 5] = dDate.AddDays(4).ToOADate();
            ChartArray[4, 6] = 867575;
            ChartArray[5, 0] = dDate.AddDays(7).ToOADate();
            ChartArray[5, 1] = 89.06;
            ChartArray[5, 2] = 91.72;
            ChartArray[5, 3] = 88.1;
            ChartArray[5, 4] = 91.42;
            ChartArray[5, 5] = dDate.AddDays(7).ToOADate();
            ChartArray[5, 6] = 355617;
            ChartArray[6, 0] = dDate.AddDays(8).ToOADate();
            ChartArray[6, 1] = 92.36;
            ChartArray[6, 2] = 93.51;
            ChartArray[6, 3] = 88.11;
            ChartArray[6, 4] = 88.91;
            ChartArray[6, 5] = dDate.AddDays(8).ToOADate();
            ChartArray[6, 6] = 590973;
            ChartArray[7, 0] = dDate.AddDays(9).ToOADate();
            ChartArray[7, 1] = 88.84;
            ChartArray[7, 2] = 89.84;
            ChartArray[7, 3] = 86.11;
            ChartArray[7, 4] = 87.14;
            ChartArray[7, 5] = dDate.AddDays(9).ToOADate();
            ChartArray[7, 6] = 249152;
            ChartArray[8, 0] = dDate.AddDays(10).ToOADate();
            ChartArray[8, 1] = 86.6;
            ChartArray[8, 2] = 88.76;
            ChartArray[8, 3] = 84.91;
            ChartArray[8, 4] = 85.89;
            ChartArray[8, 5] = dDate.AddDays(10).ToOADate();
            ChartArray[8, 6] = 397455;
            ChartArray[9, 0] = dDate.AddDays(11).ToOADate();
            ChartArray[9, 1] = 85.69;
            ChartArray[9, 2] = 86.52;
            ChartArray[9, 3] = 84.94;
            ChartArray[9, 4] = 85.45;
            ChartArray[9, 5] = dDate.AddDays(11).ToOADate();
            ChartArray[9, 6] = 115791;

            buyData[0] = dDate.AddDays(3).ToOADate();
            sellData[0] = dDate.AddDays(10).ToOADate();
            noteData[0] = "First";
            noteData[1] = "Second";
            noteDataDatetime[0] = dDate.AddDays(4).ToOADate();
            noteDataDatetime[1] = dDate.AddDays(7).ToOADate();

            // Configure XYChart control
            xyChartNETCtl1.NumProfiles = 2;
            xyChartNETCtl1.NumYScales = 2;
            xyChartNETCtl1.NumXScales = 1;

            xyChartNETCtl1.YStacking = true;
            xyChartNETCtl1.NumYStacks = 2;
            xyChartNETCtl1.get_YStack(0).HeightPercentage = 70;
            xyChartNETCtl1.get_YStack(1).HeightPercentage = 30;

            xyChartNETCtl1.Toolbar.Visible = true;
            xyChartNETCtl1.Toolbar.BackColor = Color.White;

            xyChartNETCtl1.ZoomWindowColor = Color.LightGreen;

            // Chart and plot formatting
            xyChartNETCtl1.BackColor = Color.White;
            xyChartNETCtl1.Plot.BackColor = Color.White;
            xyChartNETCtl1.Plot.Border.LineOption = XYChartNet.XYChartNETCtl.LineOptions.loNone;

            // Legend
            xyChartNETCtl1.Legend.Visible = true;
            xyChartNETCtl1.Legend.BorderVisible = false;
            xyChartNETCtl1.Legend.YScaleVisible = false;

            // Crosshairs
            xyChartNETCtl1.Crosshairs.YCoordInLegend = true;
            xyChartNETCtl1.Crosshairs.CloseCoordInLegend = true;
            xyChartNETCtl1.Crosshairs.Color = Color.LightGreen;
            xyChartNETCtl1.Crosshairs.VerticalVisible = true;
            xyChartNETCtl1.Crosshairs.HorizontalVisible = false;
            xyChartNETCtl1.Crosshairs.CoordsBackcolor = Color.LightGreen;
            xyChartNETCtl1.Crosshairs.Width = XYChartNet.XYChartNETCtl.WidthOptions.woTwoPoint;

            // Y Axis 0
            xyChartNETCtl1.get_YAxis(0).Grid.LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom;
            xyChartNETCtl1.get_YAxis(0).Grid.LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid;
            xyChartNETCtl1.get_YAxis(0).Grid.LineColor = Color.LightGray;
            xyChartNETCtl1.get_YAxis(0).Scale.Label = "$";
            xyChartNETCtl1.get_YAxis(0).Scale.LabelFont = myFont2;
            xyChartNETCtl1.get_YAxis(0).Scale.LabelColor = Color.Black;
            xyChartNETCtl1.get_YAxis(0).Scale.TicksColor = Color.Black;
            xyChartNETCtl1.get_YAxis(0).Scale.Visible = true;

            // Y Axis 1
            xyChartNETCtl1.get_YAxis(1).Grid.LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom;
            xyChartNETCtl1.get_YAxis(1).Grid.LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid;
            xyChartNETCtl1.get_YAxis(1).Grid.LineColor = Color.LightGray;
            xyChartNETCtl1.get_YAxis(1).Scale.Label = "Volume";
            xyChartNETCtl1.get_YAxis(1).Scale.LabelFont = myFont2;
            xyChartNETCtl1.get_YAxis(1).Scale.LabelColor = Color.Black;
            xyChartNETCtl1.get_YAxis(1).Scale.TicksColor = Color.Black;
            xyChartNETCtl1.get_YAxis(1).Scale.Visible = true;
            xyChartNETCtl1.get_YAxis(1).Scale.ForceZeroDisplay = true;

            // X Axis
            xyChartNETCtl1.get_XAxis(0).Grid.LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom;
            xyChartNETCtl1.get_XAxis(0).Grid.LineStyle = XYChartNet.XYChartNETCtl.StyleOptions.soSolid;
            xyChartNETCtl1.get_XAxis(0).Grid.LineColor = Color.LightGray;
            xyChartNETCtl1.get_XAxis(0).Scale.Label = "2008";
            xyChartNETCtl1.get_XAxis(0).Scale.LabelFont = myFont2;
            xyChartNETCtl1.get_XAxis(0).Scale.LabelColor = Color.Black;
            xyChartNETCtl1.get_XAxis(0).Scale.TicksColor = Color.Black;
            xyChartNETCtl1.get_XAxis(0).Scale.TickLabelSpacing = 1;
            xyChartNETCtl1.get_XAxis(0).Scale.FormatStyle = XYChartNet.XYChartNETCtl.FormatStyles.fsDateTime;
            xyChartNETCtl1.get_XAxis(0).Scale.CenterToDay = true;
            xyChartNETCtl1.get_XAxis(0).Scale.DateIncludeWeekends = false;
            xyChartNETCtl1.get_XAxis(0).Scale.DateTimeFormat = "MMM d";
            xyChartNETCtl1.get_XAxis(0).Scale.ScaleMode = XYChartNet.XYChartNETCtl.ScaleModes.smManual;
            xyChartNETCtl1.get_XAxis(0).Scale.ScaleManualMin = dDate.ToOADate();
            xyChartNETCtl1.get_XAxis(0).Scale.ScaleManualMax = dDate.AddDays(11).ToOADate() + 3;
            xyChartNETCtl1.get_XAxis(0).Scale.Visible = true;

            // Profile 0
            xyChartNETCtl1.get_Profile(0).YScale = 0;
            xyChartNETCtl1.get_Profile(0).NumSamples = 10;
            xyChartNETCtl1.get_Profile(0).Label = "Price";
            xyChartNETCtl1.get_Profile(0).ChartFeatureType = XYChartNet.XYChartNETCtl.ChartFeatureOptions.cfCandle;
            xyChartNETCtl1.get_Profile(0).CandleBodyWidth = 15;
            xyChartNETCtl1.get_Profile(0).CandleShadowWidth = 1;
            xyChartNETCtl1.get_Profile(0).SellSignalData = sellData;
            xyChartNETCtl1.get_Profile(0).SellSignal = XYChartNet.XYChartNETCtl.SignalOptions.soArrowDown;
            xyChartNETCtl1.get_Profile(0).SellSignalSize = 14;
            xyChartNETCtl1.get_Profile(0).SellSignalDisplayOffset = 5;
            xyChartNETCtl1.get_Profile(0).SellSignalBorderColor = Color.Black;
            xyChartNETCtl1.get_Profile(0).SellSignalFillColor = Color.Black;
            xyChartNETCtl1.get_Profile(0).BuySignalData = buyData;
            xyChartNETCtl1.get_Profile(0).BuySignal = XYChartNet.XYChartNETCtl.SignalOptions.soArrowUp;
            xyChartNETCtl1.get_Profile(0).BuySignalSize = 14;
            xyChartNETCtl1.get_Profile(0).BuySignalDisplayOffset = 6;
            xyChartNETCtl1.get_Profile(0).BuySignalBorderColor = Color.Blue;
            xyChartNETCtl1.get_Profile(0).BuySignalFillColor = Color.Blue;
            xyChartNETCtl1.get_Profile(0).NoteData = noteData;
            xyChartNETCtl1.get_Profile(0).NoteDataDatetime = noteDataDatetime;
            xyChartNETCtl1.get_Profile(0).NoteColor = Color.Black;
            xyChartNETCtl1.get_Profile(0).NoteRotation = -45;
            xyChartNETCtl1.get_Profile(0).NoteFont = myFont;

            // Profile 1
            xyChartNETCtl1.get_Profile(1).YScale = 1;
            xyChartNETCtl1.get_Profile(1).NumSamples = 10;
            xyChartNETCtl1.get_Profile(1).Label = "Volume";
            xyChartNETCtl1.get_Profile(1).LineOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom;
            xyChartNETCtl1.get_Profile(1).MarkerOption = XYChartNet.XYChartNETCtl.LineOptions.loCustom;
            xyChartNETCtl1.get_Profile(1).ChartFeatureType = XYChartNet.XYChartNETCtl.ChartFeatureOptions.cfBar;
            xyChartNETCtl1.get_Profile(1).BarReference = 0;
            xyChartNETCtl1.get_Profile(1).BarBorderColor = Color.CadetBlue;
            xyChartNETCtl1.get_Profile(1).BarFillColor = Color.LightBlue;
            xyChartNETCtl1.get_Profile(1).BarWidth = 0.4;

            xyChartNETCtl1.ChartData = ChartArray;
            xyChartNETCtl1.Refresh();

        }
               

 

 Initial Display

 

With Crosshairs button selected

 

 


© 2003 - 2013 ControlEng Corporation. All rights reserved.