highcharts
Version:
JavaScript charting framework
14 lines • 4.05 kB
JavaScript
!/**
* Highstock JS v13.0.1 (2026-08-17)
* @module highcharts/indicators/regressions
* @requires highcharts
* @requires highcharts/modules/stock
*
* Indicator series type for Highcharts Stock
*
* (c) 2010-2026 Highsoft AS
* Author: Kamil Kulig
*
* A commercial license may be required depending on use,
* see www.highcharts.com/license
*/function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(e._Highcharts,e._Highcharts.SeriesRegistry):"function"==typeof define&&define.amd?define("highcharts/indicators/regressions",["highcharts/highcharts"],function(e){return t(e,e.SeriesRegistry)}):"object"==typeof exports?exports["highcharts/indicators/regressions"]=t(e._Highcharts,e._Highcharts.SeriesRegistry):e.Highcharts=t(e.Highcharts,e.Highcharts.SeriesRegistry)}("u"<typeof window?this:window,(e,t)=>(()=>{"use strict";var r={512(e){e.exports=t},944(t){t.exports=e}};let s={};function n(e){let t=s[e];if(void 0!==t)return t.exports;let i=s[e]={exports:{}};return r[e](i,i.exports,n),i.exports}n.n=e=>{let t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{if(Array.isArray(t))for(var r=0;r<t.length;){var s=t[r++],i=t[r++];n.o(e,s)?0===i&&r++:0===i?Object.defineProperty(e,s,{enumerable:!0,value:t[r++]}):Object.defineProperty(e,s,{enumerable:!0,get:i})}else for(var s in t)n.o(t,s)&&!n.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);let i={};n.d(i,{default:()=>m});var o=n(944),a=n.n(o),l=n(512),p=n.n(l);let{sma:g}=p().seriesTypes;class u extends g{getRegressionLineParameters(e,t){let r=this.options.params.index,s=function(e,t){return(0,o.isArray)(e)?e[t]:e},n=e.reduce(function(e,t){return t+e},0),i=t.reduce(function(e,t){return s(t,r)+e},0),a=n/e.length,l=i/t.length,p,g,u=0,c=0;for(g=0;g<e.length;g++)u+=(p=e[g]-a)*(s(t[g],r)-l),c+=Math.pow(p,2);let d=c?u/c:0;return{slope:d,intercept:l-d*a}}getEndPointY(e,t){return e.slope*t+e.intercept}transformXData(e,t){let r=e[0];return e.map(function(e){return(e-r)/t})}findClosestDistance(e){let t,r,s;for(s=1;s<e.length-1;s++)(t=e[s]-e[s-1])>0&&(void 0===r||t<r)&&(r=t);return r}getValues(e,t){let r,s,n,i,a,l,p,g,u,c=e.xData,d=e.yData,h=t.period,y={xData:[],yData:[],values:[]},f=this.options.params.xAxisUnit||this.findClosestDistance(c);for(s=h-1;s<=c.length-1;s++)n=s-h+1,i=s+1,a=c[s],p=c.slice(n,i),g=d.slice(n,i),u=this.transformXData(p,f),r=this.getRegressionLineParameters(u,g),l=this.getEndPointY(r,u[u.length-1]),y.values.push({regressionLineParameters:r,x:a,y:l}),(0,o.isArray)(y.xData)&&y.xData.push(a),(0,o.isArray)(y.yData)&&y.yData.push(l);return y}}u.defaultOptions=(0,o.merge)(g.defaultOptions,{params:{xAxisUnit:null},tooltip:{valueDecimals:4}}),(0,o.extend)(u.prototype,{nameBase:"Linear Regression Indicator"}),p().registerSeriesType("linearregression",u),p().registerSeriesType("linearRegression",u);let{linearregression:c}=p().seriesTypes;class d extends c{getEndPointY(e){return e.slope}}d.defaultOptions=(0,o.merge)(c.defaultOptions),(0,o.extend)(d.prototype,{nameBase:"Linear Regression Slope Indicator"}),p().registerSeriesType("linearregressionslope",d),p().registerSeriesType("linearRegressionSlope",d);let{linearregression:h}=p().seriesTypes;class y extends h{getEndPointY(e){return e.intercept}}y.defaultOptions=(0,o.merge)(h.defaultOptions),(0,o.extend)(y.prototype,{nameBase:"Linear Regression Intercept Indicator"}),p().registerSeriesType("linearregressionintercept",y),p().registerSeriesType("linearRegressionIntercept",y);let{linearregression:f}=p().seriesTypes;class x extends f{slopeToAngle(e){return 180/Math.PI*Math.atan(e)}getEndPointY(e){return this.slopeToAngle(e.slope)}}x.defaultOptions=(0,o.merge)(f.defaultOptions,{tooltip:{pointFormat:'<span style="color:{point.color}">●</span>{series.name}: <b>{point.y}\xb0</b><br/>'}}),(0,o.extend)(x.prototype,{nameBase:"Linear Regression Angle Indicator"}),p().registerSeriesType("linearregressionangle",x),p().registerSeriesType("linearRegressionAngle",x);let m=a();return i.default})());