highcharts
Version:
JavaScript charting framework
14 lines • 4.95 kB
JavaScript
/**
* Highstock JS v13.0.1 (2026-08-17)
* @module highcharts/indicators/macd
* @requires highcharts
* @requires highcharts/modules/stock
*
* Indicator series type for Highcharts Stock
*
* (c) 2010-2026 Highsoft AS
* Author: Sebastian Bochan
*
* A commercial license may be required depending on use,
* see www.highcharts.com/license
*/import*as e from"../highcharts.js";let o={};o.n=e=>{let s=e&&e.__esModule?()=>e.default:()=>e;return o.d(s,{a:s}),s},o.d=(e,s)=>{if(Array.isArray(s))for(var t=0;t<s.length;){var i=s[t++],n=s[t++];o.o(e,i)?0===n&&t++:0===n?Object.defineProperty(e,i,{enumerable:!0,value:s[t++]}):Object.defineProperty(e,i,{enumerable:!0,get:n})}else for(var i in s)o.o(s,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:s[i]})},o.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o);let s=e.default;var t=o.n(s);let i=e.default.SeriesRegistry;var n=o.n(i);let{noop:r}=t(),{sma:l}=n().seriesTypes;class a extends l{init(){n().seriesTypes.sma.prototype.init.apply(this,arguments);let e=this.color,o=this.colorIndex;this.options&&((0,s.defined)(this.colorIndex)&&(this.options.signalLine?.styles&&!this.options.signalLine.styles.lineColor&&(this.options.colorIndex=this.colorIndex+1,this.getCyclic("color",void 0,this.chart.options.colors),this.options.signalLine.styles.lineColor=this.color),this.options.macdLine?.styles&&!this.options.macdLine.styles.lineColor&&(this.options.colorIndex=this.colorIndex+1,this.getCyclic("color",void 0,this.chart.options.colors),this.options.macdLine.styles.lineColor=this.color)),this.macdZones={zones:this.options.macdLine?.zones,startIndex:0},this.signalZones={zones:this.macdZones.zones?.concat(this.options.signalLine.zones),startIndex:this.macdZones.zones?.length}),this.color=e,this.colorIndex=o}toYData(e){return[e.y,e.signal,e.MACD]}translate(){let e=this,o=["plotSignal","plotMACD"];t().seriesTypes.column.prototype.translate.apply(e),e.points.forEach(function(s){[s.signal,s.MACD].forEach(function(t,i){null!==t&&(s[o[i]]=e.yAxis.toPixels(t,!0))})})}destroy(){this.graph=null,this.graphmacd=this.graphmacd&&this.graphmacd.destroy(),this.graphsignal=this.graphsignal&&this.graphsignal.destroy(),n().seriesTypes.sma.prototype.destroy.apply(this,arguments)}drawGraph(){let e=this,o=e.points,t=e.options,i=e.zones,r={options:{gapSize:t.gapSize}},l=[[],[]],a,p=o.length;for(;p--;)a=o[p],(0,s.defined)(a.plotMACD)&&l[0].push({plotX:a.plotX,plotY:a.plotMACD,isNull:!(0,s.defined)(a.plotMACD)}),(0,s.defined)(a.plotSignal)&&l[1].push({plotX:a.plotX,plotY:a.plotSignal,isNull:!(0,s.defined)(a.plotMACD)});["macd","signal"].forEach((o,i)=>{e.points=l[i],e.options=(0,s.merge)(t[`${o}Line`]?.styles||{},r),e.graph=e[`graph${o}`],e.zones=(e[`${o}Zones`].zones||[]).slice(e[`${o}Zones`].startIndex||0),n().seriesTypes.sma.prototype.drawGraph.call(e),e[`graph${o}`]=e.graph}),e.points=o,e.options=t,e.zones=i}applyZones(){let e=this.zones;this.zones=this.signalZones.zones,n().seriesTypes.sma.prototype.applyZones.call(this),this.graphmacd&&this.options.macdLine.zones.length&&this.graphmacd.hide(),this.zones=e}getValues(e,o){let t=o.longPeriod-o.shortPeriod,i=[],r=[],l=[],a,p,d,h=0,g=[];if(!(e.xData.length<o.longPeriod+o.signalPeriod)){for(d=0,a=n().seriesTypes.ema.prototype.getValues(e,{period:o.shortPeriod,index:o.index}),p=n().seriesTypes.ema.prototype.getValues(e,{period:o.longPeriod,index:o.index}),a=a.values,p=p.values;d<=a.length;d++)(0,s.defined)(p[d])&&(0,s.defined)(p[d][1])&&(0,s.defined)(a[d+t])&&(0,s.defined)(a[d+t][0])&&i.push([a[d+t][0],0,null,a[d+t][1]-p[d][1]]);for(d=0;d<i.length;d++)r.push(i[d][0]),l.push([0,null,i[d][3]]);for(d=0,g=(g=n().seriesTypes.ema.prototype.getValues({xData:r,yData:l},{period:o.signalPeriod,index:2})).values;d<i.length;d++)i[d][0]>=g[0][0]&&(i[d][2]=g[h][1],l[d]=[0,g[h][1],i[d][3]],null===i[d][3]?(i[d][1]=0,l[d][0]=0):(i[d][1]=(0,s.correctFloat)(i[d][3]-g[h][1]),l[d][0]=(0,s.correctFloat)(i[d][3]-g[h][1])),h++);return{values:i,xData:r,yData:l}}}}a.defaultOptions=(0,s.merge)(l.defaultOptions,{params:{shortPeriod:12,longPeriod:26,signalPeriod:9,period:26},signalLine:{zones:[],styles:{lineWidth:1,lineColor:void 0}},macdLine:{zones:[],styles:{lineWidth:1,lineColor:void 0}},threshold:0,groupPadding:.1,pointPadding:.1,crisp:!1,states:{hover:{halo:{size:0}}},tooltip:{pointFormat:'<span style="color:{point.color}">●</span> <b> {series.name}</b><br/>Value: {point.MACD}<br/>Signal: {point.signal}<br/>Histogram: {point.y}<br/>'},dataGrouping:{approximation:"averages"},minPointLength:0}),(0,s.extend)(a.prototype,{nameComponents:["longPeriod","shortPeriod","signalPeriod"],pointArrayMap:["y","signal","MACD"],parallelArrays:["x","y","signal","MACD"],pointValKey:"y",markerAttribs:r,getColumnMetrics:t().seriesTypes.column.prototype.getColumnMetrics,crispCol:t().seriesTypes.column.prototype.crispCol,drawPoints:t().seriesTypes.column.prototype.drawPoints}),n().registerSeriesType("macd",a);let p=t();export{p as default};