How to create Excel volume high low close chart in C#, VB.NET?
This article explains how to create a volume-high-low-close chart in Excel using Syncfusion Excel (XlsIO) library.
What is a volume-high-low-close chart?
A volume-high-low-close stock market chart is a type of bar chart or graph used primarily to show changes in the value of tradable assets such as stocks over a given period of time.
Volume-High-Low-Close Chart
To create a volume-high-low-close chart in Excel using XlsIO, you need to do the following steps.
Steps to create volume-high-low-close chart
Step 1: Initialize chart
Create a chart object by calling the worksheet.Charts.Add method.
C#
//Create the chart IChartShape chart = worksheet.Charts.Add();
Step 2: Assign data and specify the chart type
Set a range of data from the worksheet to chart’s DataRange property and specify the chart type to ExcelChartType.Stock_VolumeHighLowClose enum value.
C#
//Set region of Chart data chart.DataRange = worksheet["A1:F5"]; //Set chart type to Stock_VolumeHighLowClose chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose;
For creating a stock volume-high-low-close chart, the series count must be 4. The data range should be set before selecting the chart type.
Step 3: Apply basic chart elements
Add the basic elements like chart title, data labels and legend.
- ChartTitle of chart object.
- Set DataLabels via DefaultDataPoint.
- Set TRUE to chart’s HasLegend property, to show the legend.
C#
//Apply chart elements //Set Chart Title chart.ChartTitle = "Volume-High-Low-Close Chart"; //Set Legend chart.HasLegend = true; chart.Legend.Position = ExcelLegendPosition.Bottom; //Set Datalabels IChartSerie serie1 = chart.Series[1]; serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true; serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle; serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen;
Applicable properties to modify volume series in volume-high-low-close chart
Below is the list of other common properties applicable to modify volume series (chart.Series[0]) in volume-high-low-close-chart.
- GapWidth (value should be between 0 and 500)
- Overlap (value should be between -100 and 100)
Properties used to modify the markers in the volume-high-low-close chart
Below is the list of properties that are used to change the markers in volume-high-low-close chart.
- MarkerBackgroundColor (or) MarkerBackgroundColorIndex
- MarkerForegroundColor (or) MarkerForegroungColorIndex
- MarkerSize
- MarkerStyle
- IsAutoMarkerNote:
Marker properties are applicable only for high (chart.Series[1]), low (chart.Series[2]) and close (chart.Series[3]) series.
To know more about creating charts with various settings using Syncfusion Excel (XlsIO) library, please refer the documentation.
The following C#/ VB.NET complete code snippet shows the creation of volume-high-low-close chart using XlsIO.
C#
using Syncfusion.XlsIO; using System.Reflection; using System.IO; namespace ChartSample { class Program { static void Main(string[] args) { using (ExcelEngine excelEngine = new ExcelEngine()) { IApplication application = excelEngine.Excel; application.DefaultVersion = ExcelVersion.Excel2016; //Open existing workbook with data entered Assembly assembly = typeof(Program).GetTypeInfo().Assembly; Stream fileStream = assembly.GetManifestResourceStream("ChartSample.InputTemplate.xlsx"); IWorkbook workbook = application.Workbooks.Open(fileStream); IWorksheet worksheet = workbook.Worksheets[0]; //Initialize chart and assign data IChartShape chart = worksheet.Charts.Add(); chart.DataRange = worksheet["A1:F5"]; chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose; //Apply chart elements //Set Chart Title chart.ChartTitle = "Volume-High-Low-Close Chart"; //Set Legend chart.HasLegend = true; chart.Legend.Position = ExcelLegendPosition.Bottom; //Set Datalabels IChartSerie serie1 = chart.Series[1]; IChartSerie serie2 = chart.Series[2]; IChartSerie serie3 = chart.Series[3]; serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true; serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle; serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen; serie2.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; serie2.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true; serie2.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle; serie2.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Red; serie3.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; serie3.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = true; serie3.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle; serie3.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Light_yellow; //Positioning the chart in the worksheet chart.TopRow = 8; chart.LeftColumn = 1; chart.BottomRow = 23; chart.RightColumn = 8; //Saving the workbook Stream stream = File.Create("Output.xlsx"); workbook.SaveAs(stream); } } } }
VB.NET
Imports Syncfusion.XlsIO Imports System.Reflection Imports System.IO Namespace ChartSample Class Program Public Shared Sub Main(ByVal args As String()) Using excelEngine As ExcelEngine = New ExcelEngine() Dim application As IApplication = excelEngine.Excel application.DefaultVersion = ExcelVersion.Excel2016 'Open existing workbook with data entered Dim assembly As Assembly = GetType(Program).GetTypeInfo().Assembly Dim fileStream As Stream = assembly.GetManifestResourceStream("ChartSample.InputTemplate.xlsx") Dim workbook As IWorkbook = application.Workbooks.Open(fileStream) Dim worksheet As IWorksheet = workbook.Worksheets(0) 'Initialize chart and assign data Dim chart As IChartShape = worksheet.Charts.Add chart.DataRange = worksheet("A1:F5") chart.ChartType = ExcelChartType.Stock_VolumeHighLowClose 'Apply chart elements 'Set Chart Title chart.ChartTitle = "Volume-High-Low-Close Chart" 'Set Legend chart.HasLegend = True chart.Legend.Position = ExcelLegendPosition.Bottom 'Set data labels Dim serie1 As IChartSerie = chart.Series(1) Dim serie2 As IChartSerie = chart.Series(2) Dim serie3 As IChartSerie = chart.Series(3) serie1.DataPoints.DefaultDataPoint.DataLabels.IsValue = True serie1.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True serie1.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle serie1.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.LightGreen serie2.DataPoints.DefaultDataPoint.DataLabels.IsValue = True serie2.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True serie2.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle serie2.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Red serie3.DataPoints.DefaultDataPoint.DataLabels.IsValue = True serie3.DataPoints.DefaultDataPoint.DataLabels.IsSeriesName = True serie3.SerieFormat.MarkerStyle = ExcelChartMarkerType.Circle serie3.SerieFormat.MarkerBackgroundColorIndex = ExcelKnownColors.Light_yellow 'Positioning chart in the worksheet chart.TopRow = 8 chart.LeftColumn = 1 chart.BottomRow = 23 chart.RightColumn = 8 'Saving the workbook Dim stream As Stream = File.Create("Output.xlsx") workbook.SaveAs(stream) End Using End Sub End Class End Namespace