• Demos
    • JavaScript Charts
    • JavaScript StockCharts
  • Download/NPM
    • Download CanvasJS
    • Install via NPM
  • Integrations
    Front End Technology Samples
    • React Charts
    • Angular Charts
    • Vue.js Charts New!
    • jQuery Charts
    • Dashboards
    Server Side Technology Samples
    • PHP Charts
    • Python Charts New!
    • ASP.NET MVC Charts
    • Spring MVC Charts
    • JSP Charts
  • License
  • Blog
  • Docs
    • Chart Documentation
    • StockChart Documentation
  • Support Forum
    • Chart Support
    • StockChart Support
  • My Account
My Account
  • KEY FEATURES
    • Chart with Index / Data Label
    • Chart with Zooming & Panning
    • Multi Series Chart
    • Chart with Multiple Axes
    • Combination Charts
    • Chart with Animation
    • Chart with Logarithmic Axis
    • Dynamic Chart
    • Chart with Data from AJAX
    • Drilldown Chart
    • Responsive Chart
    • Synchronized Charts
  • LINE CHARTS
    • Line Chart with Date-Time Axis
    • Dashed Line Chart
    • Multi Series Line Chart
    • Spline Chart
    • Multi Series Spline Chart
    • Step Line Chart
    • Multi Series Step Line Chart
  • BAR CHARTS
    • Bar Chart with Category Axis
    • Multi Series Bar Chart
    • Stacked Bar Chart
    • Stacked Bar 100% Chart
    • Stacked Bar 100% Chart with Indexlabels
  • COLUMN CHARTS
    • Column Chart with Numeric Axis
    • Multi Series Column Chart
    • Stacked Column Chart
    • Stacked Column 100% Chart
    • Stacked Column 100% Chart with Indexlabel
    • Waterfall Chart
    • Waterfall Chart with Indexlabels
    • Multi Series Waterfall Chart
  • PIE & DOUGHNUT CHARTS
    • Pie Chart with Index Labels
    • Pie Chart in Dark Theme
    • Doughnut Chart with Index Labels
    • Doughnut Chart in Dark Theme
  • AREA CHARTS
    • Area Chart with Indexlabels
    • Multi Series Area Chart
    • Spline Area Chart
    • Multi Series Spline Area Chart
    • Step Area Chart
    • Stacked Area Chart
    • Stacked Area 100% Chart
  • RANGE CHARTS
    • Range Column Chart
    • Multi Series Range Column Chart
    • Range Bar Chart
    • Multi Series Range Bar Chart
    • Range Area Chart
    • Multi Series Range Area Chart
    • Range Spline Area Chart
    • Multi Series Range Spline Area Chart
  • BUBBLE & SCATTER CHARTS
    • Bubble Chart with Indexlabels
    • Bubble Chart with 3 Dimensional Data
    • Multi Series Scatter Chart
  • FUNNEL & PYRAMID CHARTS
    • Funnel Chart with Index Labels
    • Funnel Chart without Neck
    • Pyramid Chart with Index Labels
  • FINANCIAL CHARTS
    • Candlestick Chart
    • Multi Series Candlestick Chart
    • OHLC Chart
    • OHLC Chart from JSON data
    • Box & Whisker Chart
  • COMBINATION CHARTS
    • Error Bar Chart
    • Pareto Chart
    • Range Area & Line Chart
    • Candlestick & Line Chart
    • OHLC Chart with Trend
  • DYNAMIC CHARTS
    • Dynamic / Live Line Chart
    • Dynamic / Live Column Chart
    • Dynamic / Live Multi Series Chart
  • STOCKCHARTS
    • StockChart with Numeric Axis
    • StockChart with Date-Time Axis
    • StockChart with Navigator & Range Selector
  • JAVASCRIPT, REACT, VUE.JS, JQUERY
    • JavaScript Charts
    • React Charts
    • Vue.js Charts
    • jQuery Charts
  • SERVER SIDE TECHNOLOGIES
    • ASP.NET MVC Charts
    • JSP Charts
    • PHP Charts
    • Python Charts
    • Spring MVC Charts

Angular OHLC Chart with Trend Line

Download Angular Chart Samples
  • Angular Chart Samples
  • JavaScript Chart Samples
  • React Chart Samples
  • Vue.js Chart Samples
  • jQuery Chart Samples
  • PHP Chart Samples
  • Python Django Chart Samples
  • ASP.NET Chart Samples
  • JSP Chart Samples
  • Spring MVC Chart Samples
  • Dashboard Samples
  • JavaScript StockChart Samples

Example shows Angular OHLC Chart Combined with Line Chart showing trend. Data is fetched from JSON using AJAX.

  • Component Code
  • HTML Code
/* app.component.ts */
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import { HttpClientModule, HttpClient } from '@angular/common/http';
 
import { CanvasJSAngularChartsModule } from '@canvasjs/angular-charts';
 
@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CommonModule, RouterOutlet, HttpClientModule, CanvasJSAngularChartsModule],
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
 
export class AppComponent implements OnInit {
  constructor(private http : HttpClient) {  
  }

  chart:any;
  dps1: any[] = [];
  loading:boolean = true;
  
  ngOnInit() {
    // perform http request to get the json for dataPoints
    this.http.get('https://canvasjs.com/data/docs/btcusd2018.json', { responseType: 'json' }).subscribe((response: any) => {
      let data = response;
      for(let i = 0; i < data.length; i++){
        this.dps1.push({x: new Date(data[i].date), y: [Number(data[i].open), Number(data[i].high), Number(data[i].low), Number(data[i].close)]});
      }
      this.loading = false;
    });
  
  }
 
  chartOptions = {
    theme: "light2",
    zoomEnabled: true,
    title:{
      text:"Bitcoin Price"
    },
    axisY: {
      title: "Price in USD",
      prefix: "$"
    },
    axisX: {
      valueFormatString: "MMM",
    },
    legend: {
      verticalAlign: "bottom",
      cursor: "pointer",
      itemclick: function (e:any) {
        if (typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
          e.dataSeries.visible = false;
        } else {
          e.dataSeries.visible = true;
        }
        e.chart.render();
      }
    },
    toolTip: {
      shared: true
    },
    data: [{
      type: "ohlc",
      showInLegend: true,
      name: "Bitcoin Price",
      yValueFormatString: "$#,###.00",
      xValueType: "dateTime",
      dataPoints: this.dps1
    }]
  }
 
  getChartInstance(chart: object) {
		this.chart = chart;
    this.calculateTrendLine(this.chart);
  }
 
  /*
    References:
      https://math.stackexchange.com/a/204021
      https://classroom.synonym.com/calculate-trendline-2709.html
  */
  calculateTrendLine(chart: any){
    let a, b, c, d, e, slope, yIntercept;
    let xSum = 0, ySum = 0, xySum = 0, xSquare = 0, dpsLength = chart.data[0].dataPoints.length;
    for(let i = 0; i < dpsLength; i++) 	
      xySum += (chart.data[0].dataPoints[i].x.getTime() * chart.data[0].dataPoints[i].y[3])
    a = xySum * dpsLength;
 
    for(let i = 0; i < dpsLength; i++){  	
      xSum += chart.data[0].dataPoints[i].x.getTime();
      ySum += chart.data[0].dataPoints[i].y[3];
    }
    b = xSum * ySum;
 
    for(let i = 0; i < dpsLength; i++)  	
      xSquare += Math.pow(chart.data[0].dataPoints[i].x.getTime(), 2);    
    c = dpsLength * xSquare;
 
    d = Math.pow(xSum, 2);
    slope = (a-b)/(c-d);  
    e = slope * xSum;
    yIntercept = (ySum - e) / dpsLength;
 
    let startPoint = this.getTrendLinePoint(chart.data[0].dataPoints[0].x, slope, yIntercept);
    let endPoint = this.getTrendLinePoint(chart.data[0].dataPoints[dpsLength-1].x, slope, yIntercept);
 
    chart.addTo("data",{
      type: "line", //Line series showing trend
      markerSize: 0,
      name: "Trend",
      showInLegend: true,
      color: "#E64A19",
      yValueFormatString: "$#,###.00",
      dataPoints: [startPoint, endPoint]
    });
  }
 
  getTrendLinePoint(x: any, slope: any, intercept: any){
    return {x: x, y: ((slope * x) + intercept)};
  }
}                              
/* app.component.html */
<ng-template [ngIf]="loading" [ngIfElse]="loadChart">
	<div>Loading Data...</div>
</ng-template>
   
<ng-template #loadChart>
	<div>
		<canvasjs-chart [options]="chartOptions" [styles]="{width: '100%', height: '360px'}" (chartInstance)="getChartInstance($event)"></canvasjs-chart>      
	</div>
</ng-template>                        

Chart Customizations

Color of the dataseries can be changed using color property. Shared tooltip can be enabled by setting shared property to true & content can be customized using contentFormatter. Some other common customizations include markerType, markerColor, etc.

Note   For step by step instructions, follow our Angular Integration Tutorial

Quick Links

  • Chart Docs
  • StockChart Docs
  • About Us
  • FAQs

Server Side Technologies

  • ASP.NET MVC Charts
  • PHP Charts
  • JSP Charts
  • Spring MVC Charts

Front Side Technologies

  • JavaScript Charts
  • jQuery Charts
  • React Charts
  • Angular Charts
  • JavaScript StockCharts

Contact

  • Fenopix, Inc.
  • 2093 Philadelphia Pike,
  • #5678, Claymont,
  • Delaware 19703
  • United States Of America

©2025 Fenopix Privacy Policy Cookies Policy Careers