/* Highstock JS v8.2.0 (2020-08-20) All technical indicators for Highstock (c) 2010-2019 Pawel Fus License: www.highcharts.com/license */ (function(h){"object"===typeof module&&module.exports?(h["default"]=h,module.exports=h):"function"===typeof define&&define.amd?define("highcharts/indicators/indicators-all",["highcharts","highcharts/modules/stock"],function(t){h(t);h.Highcharts=t;return h}):h("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(h){function t(d,k,l,g){d.hasOwnProperty(k)||(d[k]=g.apply(null,l))}h=h?h._modules:{};t(h,"Mixins/IndicatorRequired.js",[h["Core/Utilities.js"]],function(d){var k=d.error;return{isParentLoaded:function(l, g,e,a,c){if(l)return a?a(l):!0;k(c||this.generateMessage(e,g));return!1},generateMessage:function(l,g){return'Error: "'+l+'" indicator type requires "'+g+'" indicator loaded before. Please read docs: https://api.highcharts.com/highstock/plotOptions.'+l}}});t(h,"Stock/Indicators/Indicators.js",[h["Core/Globals.js"],h["Mixins/IndicatorRequired.js"],h["Core/Utilities.js"]],function(d,k,l){var g=l.addEvent,e=l.error,a=l.extend,c=l.isArray,b=l.pick,f=l.seriesType,u=l.splat,x=d.Series,n=d.seriesTypes,q= d.seriesTypes.ohlc.prototype,m=k.generateMessage;g(d.Series,"init",function(b){b=b.options;b.useOhlcData&&"highcharts-navigator-series"!==b.id&&a(this,{pointValKey:q.pointValKey,keys:q.keys,pointArrayMap:q.pointArrayMap,toYData:q.toYData})});g(x,"afterSetOptions",function(b){b=b.options;var c=b.dataGrouping;c&&b.useOhlcData&&"highcharts-navigator-series"!==b.id&&(c.approximation="ohlc")});f("sma","line",{name:void 0,tooltip:{valueDecimals:4},linkedTo:void 0,compareToMain:!1,params:{index:0,period:14}}, {processData:function(){var b=this.options.compareToMain,c=this.linkedParent;x.prototype.processData.apply(this,arguments);c&&c.compareValue&&b&&(this.compareValue=c.compareValue)},bindTo:{series:!0,eventName:"updatedData"},hasDerivedData:!0,useCommonDataGrouping:!0,nameComponents:["period"],nameSuffixes:[],calculateOn:"init",requiredIndicators:[],requireIndicators:function(){var b={allLoaded:!0};this.requiredIndicators.forEach(function(c){n[c]?n[c].prototype.requireIndicators():(b.allLoaded=!1,b.needed= c)});return b},init:function(b,c){function f(){var b=a.points||[],c=(a.xData||[]).length,f=a.getValues(a.linkedParent,a.options.params)||{values:[],xData:[],yData:[]},e=[],p=!0;if(c&&!a.hasGroupedData&&a.visible&&a.points)if(a.cropped){if(a.xAxis){var n=a.xAxis.min;var g=a.xAxis.max}c=a.cropData(f.xData,f.yData,n,g);for(n=0;nl?b[n]:b[n][l],n++;for(a=n;al?b[a]:b[a][l];var m=[e[a],p/f];g.push(m);x.push(m[0]);q.push(m[1]);p-=0>l?b[a-n]:b[a-n][l]}return{values:g,xData:x,yData:q}}},destroy:function(){this.dataEventsToUnbind.forEach(function(b){b()});x.prototype.destroy.apply(this,arguments)}});""});t(h,"Stock/Indicators/ADIndicator.js",[h["Core/Utilities.js"]],function(d){var k=d.error; d=d.seriesType;d("ad","sma",{params:{volumeSeriesID:"volume"}},{nameComponents:!1,nameBase:"Accumulation/Distribution",getValues:function(l,g){var e=g.period,a=l.xData,c=l.yData,b=g.volumeSeriesID,f=l.chart.get(b);g=f&&f.yData;var u=c?c.length:0,x=[],n=[],q=[];if(!(a.length<=e&&u&&4!==c[0].length)){if(f){for(;ea[b-1].y?c:a[b].y=a.length)&&g(e[0])&&4===e[0].length){for(q=0;33>q;q++){var m=(e[q][1]+ e[q][2])/2;29<=q&&(x=l(x+m));n=l(n+m)}for(q=33;q=b||"min"===c&&a[e]<=b)b=a[e],f=e;return f}var g=d.merge,e= d.pick;d=d.seriesType;d("aroon","sma",{params:{period:25},marker:{enabled:!1},tooltip:{pointFormat:'\u25cf {series.name}
Aroon Up: {point.y}
Aroon Down: {point.aroonDown}
'},aroonDown:{styles:{lineWidth:1,lineColor:void 0}},dataGrouping:{approximation:"averages"}},g(k,{nameBase:"Aroon",pointArrayMap:["y","aroonDown"],pointValKey:"y",linesApiNames:["aroonDown"],getValues:function(a,c){c=c.period;var b=a.xData,f=(a=a.yData)?a.length:0,u=[], g=[],n=[],q;for(q=c-1;q\u25cf {series.name}: {point.y}'}},e(k,{nameBase:"Aroon Oscillator",pointArrayMap:["y"],pointValKey:"y",linesApiNames:[],init:function(){var c=arguments,b=this;l.isParentLoaded(a,"aroon",b.type,function(a){a.prototype.init.apply(b,c)})},getValues:function(c,b){var f=[],e=[],g=[];c=a.prototype.getValues.call(this,c,b);for(b=0;b\u25cf {series.name}
Top: {point.top}
Middle: {point.middle}
Bottom: {point.bottom}
'},marker:{enabled:!1},dataGrouping:{approximation:"averages"}},e(l,{pointArrayMap:["top","middle","bottom"],pointValKey:"middle",nameComponents:["period","standardDeviation"],linesApiNames:["topLine", "bottomLine"],init:function(){a.prototype.init.apply(this,arguments);this.options=e({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)},getValues:function(c,b){var f=b.period,e=b.standardDeviation,x=c.xData,n=(c=c.yData)?c.length:0,q=[],l=[],p=[],k;if(!(x.length=l.params.period&&k.xData&&k.xData.length>=l.params.period&&e)},getValues:function(k,l){if(this.isValid())return this.getMoneyFlow(k.xData,k.yData,this.volumeSeries.yData,l.period)},getMoneyFlow:function(k,l,g,e){function a(b,c){var a=b[1],f=b[2];b=b[3];return null!==c&&null!==a&& null!==f&&null!==b&&a!==f?(b-f-(a-b))/(a-f)*c:(p=m,null)}var c=l.length,b=[],f=0,u=0,x=[],n=[],q=[],m,p=-1;if(0=e&&0!==f?u/f:null);for(q.push([x[0],n[0]]);m=e?u/f:null];x.push(d[0]);n.push(d[1]);q.push([d[0],d[1]])}}return{values:q,xData:x,yData:n}}});""});t(h,"Stock/Indicators/DPOIndicator.js",[h["Core/Utilities.js"]],function(d){function k(e, a,c,b,f){a=g(a[c][b],a[c]);return f?l(e-a):l(e+a)}var l=d.correctFloat,g=d.pick;d=d.seriesType;d("dpo","sma",{params:{period:21}},{nameBase:"DPO",getValues:function(e,a){var c=a.period;a=a.index;var b=c+Math.floor(c/2+1),f=e.xData||[];e=e.yData||[];var u=e.length,l=[],n=[],q=[],m=0,p,d;if(!(f.length<=b)){for(p=0;pe?a[b]:a[b][e],c+=f,b++;return c},calculateEma:function(g,e,a,c,b,f,u){g=g[a-1];e=0>f?e[a-1]:e[a-1][f];c="undefined"===typeof b?u:k(e*c+b*(1-c));return[g,c]},getValues:function(g,e){var a=e.period,c=g.xData,b=(g=g.yData)?g.length:0,f=2/(a+1),u=[],x=[],n=[],q=-1;if(!(b< a)){l(g[0])&&(q=e.index?e.index:0);e=this.accumulatePeriodPoints(a,q,g);for(e/=a;ac)var e=[a[f-3],0!==b.prevLevel3?g(b.level3-b.prevLevel3)/b.prevLevel3* 100:null];return e}});""});t(h,"Stock/Indicators/APOIndicator.js",[h["Core/Globals.js"],h["Core/Utilities.js"],h["Mixins/IndicatorRequired.js"]],function(d,k,l){var g=k.error;k=k.seriesType;var e=d.seriesTypes.ema;k("apo","ema",{params:{periods:[10,20]}},{nameBase:"APO",nameComponents:["periods"],init:function(){var a=arguments,c=this;l.isParentLoaded(e,"ema",c.type,function(b){b.prototype.init.apply(c,a)})},getValues:function(a,c){var b=c.periods,f=c.index;c=[];var l=[],d=[],n;if(2!==b.length||b[1]<= b[0])g('Error: "APO requires two periods. Notice, first period should be lower than the second one."');else{var q=e.prototype.getValues.call(this,a,{index:f,period:b[0]});a=e.prototype.getValues.call(this,a,{index:f,period:b[1]});if(q&&a){b=b[1]-b[0];for(n=0;n=c&&0<=g&&1>=g)return{plotX:b.plotX+g*e,plotY:b.plotY+g*a}}return!1}function f(b){var a=b.indicator;a.points=b.points;a.nextPoints=b.nextPoints;a.color=b.color;a.options=q(b.options.senkouSpan.styles,b.gap);a.graph=b.graph;a.fillGraph=!0;h.prototype.drawGraph.call(a)}var u=k.parse,x=l.defined,n=l.isArray,q=l.merge,m=l.objectEach;k=l.seriesType;var p,h=d.seriesTypes.sma;d.approximations["ichimoku-averages"]=function(){var b= [],a;[].forEach.call(arguments,function(c,f){b.push(d.approximations.average(c));a=!a&&"undefined"===typeof b[f]});return a?void 0:b};k("ikh","sma",{params:{period:26,periodTenkan:9,periodSenkouSpanB:52},marker:{enabled:!1},tooltip:{pointFormat:'\u25cf {series.name}
TENKAN SEN: {point.tenkanSen:.3f}
KIJUN SEN: {point.kijunSen:.3f}
CHIKOU SPAN: {point.chikouSpan:.3f}
SENKOU SPAN A: {point.senkouSpanA:.3f}
SENKOU SPAN B: {point.senkouSpanB:.3f}
'}, tenkanLine:{styles:{lineWidth:1,lineColor:void 0}},kijunLine:{styles:{lineWidth:1,lineColor:void 0}},chikouLine:{styles:{lineWidth:1,lineColor:void 0}},senkouSpanA:{styles:{lineWidth:1,lineColor:void 0}},senkouSpanB:{styles:{lineWidth:1,lineColor:void 0}},senkouSpan:{styles:{fill:"rgba(255, 0, 0, 0.5)"}},dataGrouping:{approximation:"ichimoku-averages"}},{pointArrayMap:["tenkanSen","kijunSen","chikouSpan","senkouSpanA","senkouSpanB"],pointValKey:"tenkanSen",nameComponents:["periodSenkouSpanB","period", "periodTenkan"],init:function(){h.prototype.init.apply(this,arguments);this.options=q({tenkanLine:{styles:{lineColor:this.color}},kijunLine:{styles:{lineColor:this.color}},chikouLine:{styles:{lineColor:this.color}},senkouSpanA:{styles:{lineColor:this.color,fill:u(this.color).setOpacity(.5).get()}},senkouSpanB:{styles:{lineColor:this.color,fill:u(this.color).setOpacity(.5).get()}},senkouSpan:{styles:{fill:u(this.color).setOpacity(.2).get()}}},this.options)},toYData:function(b){return[b.tenkanSen,b.kijunSen, b.chikouSpan,b.senkouSpanA,b.senkouSpanB]},translate:function(){var b=this;h.prototype.translate.apply(b);b.points.forEach(function(a){b.pointArrayMap.forEach(function(c){x(a[c])&&(a["plot"+c]=b.yAxis.toPixels(a[c],!0),a.plotY=a["plot"+c],a.tooltipPos=[a.plotX,a["plot"+c]],a.isNull=!1)})})},drawGraph:function(){var a=this,c=a.points,e=c.length,g=a.options,n=a.graph,p=a.color,l={options:{gapSize:g.gapSize}},d=a.pointArrayMap.length,k=[[],[],[],[],[],[]],u={tenkanLine:k[0],kijunLine:k[1],chikouLine:k[2], senkouSpanA:k[3],senkouSpanB:k[4],senkouSpan:k[5]},C=[],D=a.options.senkouSpan,t=D.color||D.styles.fill,N=D.negativeColor,J=[[],[]],M=[[],[]],P=0,K,Q,O;for(a.ikhMap=u;e--;){var F=c[e];for(K=0;KK?0:1}else F=e[F].plotY>D[F].plotY?0:1;else F=e[0].plotY>D[0].plotY?0:1;J[F]=J[F].concat(e);M[F]=M[F].concat(D)}["graphsenkouSpanColor","graphsenkouSpanNegativeColor"].forEach(function(b,c){J[c].length&&M[c].length&&(Q=0===c?t:N,f({indicator:a,points:J[c],nextPoints:M[c],color:Q,options:g,gap:l,graph:a[b]}),a[b]=a.graph,a.graphCollection.push(b))})}else f({indicator:a, points:u.senkouSpanB,nextPoints:u.senkouSpanA,color:t,options:g,gap:l,graph:a.graphsenkouSpan}),a.graphsenkouSpan=a.graph;delete a.nextPoints;delete a.fillGraph;a.points=c;a.options=g;a.graph=n},getGraphPath:function(b){b=b||this.points;if(this.fillGraph&&this.nextPoints){var a=h.prototype.getGraphPath.call(this,this.nextPoints);a[0][0]="L";var c=h.prototype.getGraphPath.call(this,b);a=a.slice(0,c.length);for(var f=a.length-1;0<=f;f--)c.push(a[f])}else c=h.prototype.getGraphPath.apply(this,arguments); return c},getValues:function(b,f){var e=f.period,g=f.periodTenkan;f=f.periodSenkouSpanB;var l=b.xData,q=b.yData,u=q&&q.length||0;b=c(b.xAxis);var d=[],k=[],m;if(!(l.length<=e)&&n(q[0])&&4===q[0].length){var x=l[0]-e*b;for(m=0;m=g){var h=q.slice(m-g,m);h=a(h);h=(h.high+h.low)/2}if(m>=e){var r=q.slice(m-e,m);r=a(r);r=(r.high+r.low)/2;var C=(h+r)/2}if(m>=f){var w=q.slice(m-f,m);w=a(w);w=(w.high+w.low)/2}x=q[m][3];var t=l[m];d[m]===p&&(d[m]=[]);d[m+e]===p&&(d[m+ e]=[]);d[m+e][0]=h;d[m+e][1]=r;d[m+e][2]=p;d[m][2]=x;m<=e&&(d[m+e][3]=p,d[m+e][4]=p);d[m+2*e]===p&&(d[m+2*e]=[]);d[m+2*e][3]=C;d[m+2*e][4]=w;k.push(t)}for(m=1;m<=e;m++)k.push(t+m*b);return{values:d,xData:k,yData:d}}}});""});t(h,"Stock/Indicators/KeltnerChannelsIndicator.js",[h["Core/Globals.js"],h["Core/Utilities.js"],h["Mixins/MultipleLines.js"]],function(d,k,l){var g=k.correctFloat,e=k.merge;k=k.seriesType;var a=d.seriesTypes.sma,c=d.seriesTypes.ema,b=d.seriesTypes.atr;k("keltnerchannels","sma", {params:{period:20,periodATR:10,multiplierATR:2},bottomLine:{styles:{lineWidth:1,lineColor:void 0}},topLine:{styles:{lineWidth:1,lineColor:void 0}},tooltip:{pointFormat:'\u25cf {series.name}
Upper Channel: {point.top}
EMA({series.options.params.period}): {point.middle}
Lower Channel: {point.bottom}
'},marker:{enabled:!1},dataGrouping:{approximation:"averages"},lineWidth:1},e(l,{pointArrayMap:["top","middle","bottom"],pointValKey:"middle", nameBase:"Keltner Channels",nameComponents:["period","periodATR","multiplierATR"],linesApiNames:["topLine","bottomLine"],requiredIndicators:["ema","atr"],init:function(){a.prototype.init.apply(this,arguments);this.options=e({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)},getValues:function(a,e){var f=e.period,n=e.periodATR,l=e.multiplierATR,m=a.yData;m=m?m.length:0;var p=[];e=c.prototype.getValues(a,{period:f,index:e.index});var d=b.prototype.getValues(a, {period:n}),k=[],u=[],h;if(!(m\u25cf {series.name}
Value: {point.MACD}
Signal: {point.signal}
Histogram: {point.y}
'},dataGrouping:{approximation:"averages"},minPointLength:0},{nameComponents:["longPeriod","shortPeriod","signalPeriod"], requiredIndicators:["ema"],pointArrayMap:["y","signal","MACD"],parallelArrays:["x","y","signal","MACD"],pointValKey:"y",markerAttribs:d.noop,getColumnMetrics:d.seriesTypes.column.prototype.getColumnMetrics,crispCol:d.seriesTypes.column.prototype.crispCol,init:function(){a.prototype.init.apply(this,arguments);this.options&&(this.options=e({signalLine:{styles:{lineColor:this.color}},macdLine:{styles:{color:this.color}}},this.options),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.resetZones=!0)},toYData:function(b){return[b.y,b.signal,b.MACD]},translate:function(){var b=this,a=["plotSignal","plotMACD"];d.seriesTypes.column.prototype.translate.apply(b);b.points.forEach(function(c){[c.signal,c.MACD].forEach(function(f,e){null!==f&&(c[a[e]]=b.yAxis.toPixels(f,!0))})})},destroy:function(){this.graph=null;this.graphmacd=this.graphmacd&&this.graphmacd.destroy();this.graphsignal= this.graphsignal&&this.graphsignal.destroy();a.prototype.destroy.apply(this,arguments)},drawPoints:d.seriesTypes.column.prototype.drawPoints,drawGraph:function(){for(var b=this,c=b.points,l=c.length,d=b.options,n=b.zones,q={options:{gapSize:d.gapSize}},m=[[],[]],p;l--;)p=c[l],g(p.plotMACD)&&m[0].push({plotX:p.plotX,plotY:p.plotMACD,isNull:!g(p.plotMACD)}),g(p.plotSignal)&&m[1].push({plotX:p.plotX,plotY:p.plotSignal,isNull:!g(p.plotMACD)});["macd","signal"].forEach(function(c,f){b.points=m[f];b.options= e(d[c+"Line"].styles,q);b.graph=b["graph"+c];b.currentLineZone=c+"Zones";b.zones=b[b.currentLineZone].zones;a.prototype.drawGraph.call(b);b["graph"+c]=b.graph});b.points=c;b.options=d;b.zones=n;b.currentLineZone=null},getZonesGraphs:function(b){var c=a.prototype.getZonesGraphs.call(this,b),e=c;this.currentLineZone&&(e=c.splice(this[this.currentLineZone].startIndex+1),e.length?e.splice(0,0,b[0]):e=[b[0]]);return e},applyZones:function(){var b=this.zones;this.zones=this.signalZones.zones;a.prototype.applyZones.call(this); this.graphmacd&&this.options.macdLine.zones.length&&this.graphmacd.hide();this.zones=b},getValues:function(b,a){var e=0,f=[],n=[],d=[];if(!(b.xData.length=a[0][0]&&(f[b][2]=a[e][1],d[b]=[0,a[e][1],f[b][3]],null===f[b][3]?(f[b][1]=0,d[b][0]=0):(f[b][1]=l(f[b][3]-a[e][1]),d[b][0]=l(f[b][3]-a[e][1])),e++);return{values:f,xData:n,yData:d}}}});""});t(h,"Stock/Indicators/MFIIndicator.js",[h["Core/Utilities.js"]],function(d){function k(a){return a.reduce(function(a,b){return a+b})}function l(a){return(a[1]+ a[2]+a[3])/3}var g=d.error,e=d.isArray;d=d.seriesType;d("mfi","sma",{params:{period:14,volumeSeriesID:"volume",decimals:4}},{nameBase:"Money Flow Index",getValues:function(a,c){var b=c.period,f=a.xData,d=a.yData,h=d?d.length:0,n=c.decimals,q=1,m=a.chart.get(c.volumeSeriesID),p=m&&m.yData,C=[],w=[],r=[],A=[],B=[];if(!m)g("Series "+c.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,a.chart);else if(!(f.length<=b)&&e(d[0])&&4===d[0].length&&p){for(a=l(d[q]);q=c,m=a*p[q], A.push(c?m:0),B.push(c?0:m),q++;for(b=q-1;bq-1&&(A.shift(),B.shift(),c=a,a=l(d[b]),c=a>c,m=a*p[b],A.push(c?m:0),B.push(c?0:m)),c=k(B),m=k(A),c=m/c,c=parseFloat((100-100/(1+c)).toFixed(n)),C.push([f[b],c]),w.push(f[b]),r.push(c);return{values:C,xData:w,yData:r}}}});""});t(h,"Stock/Indicators/MomentumIndicator.js",[h["Core/Utilities.js"]],function(d){function k(g,e,a,c,b){a=a[c-1][3]-a[c-b-1][3];e=e[c-1];g.shift();return[e,a]}var l=d.isArray;d=d.seriesType;d("momentum","sma",{params:{period:14}}, {nameBase:"Momentum",getValues:function(g,e){e=e.period;var a=g.xData,c=(g=g.yData)?g.length:0,b=a[0],f=[],d=[],h=[];if(!(a.length<=e)&&l(g[0])){var n=g[0][3];n=[[b,n]];for(b=e+1;b\u25cf {series.name}
Top: {point.top}
Middle: {point.middle}
Bottom: {point.bottom}
'}, params:{period:20,topBand:.1,bottomBand:.1},bottomLine:{styles:{lineWidth:1,lineColor:void 0}},topLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}},{nameComponents:["period","topBand","bottomBand"],nameBase:"Price envelopes",pointArrayMap:["top","middle","bottom"],parallelArrays:["x","y","top","bottom"],pointValKey:"middle",init:function(){e.prototype.init.apply(this,arguments);this.options=g({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)}, toYData:function(a){return[a.top,a.middle,a.bottom]},translate:function(){var a=this,c=["plotTop","plotMiddle","plotBottom"];e.prototype.translate.apply(a);a.points.forEach(function(b){[b.top,b.middle,b.bottom].forEach(function(e,g){null!==e&&(b[c[g]]=a.yAxis.toPixels(e,!0))})})},drawGraph:function(){for(var a=this,c=a.points,b=c.length,f=a.options,d=a.graph,l={options:{gapSize:f.gapSize}},n=[[],[]],k;b--;)k=c[b],n[0].push({plotX:k.plotX,plotY:k.plotTop,isNull:k.isNull}),n[1].push({plotX:k.plotX, plotY:k.plotBottom,isNull:k.isNull});["topLine","bottomLine"].forEach(function(b,c){a.points=n[c];a.options=g(f[b].styles,l);a.graph=a["graph"+b];e.prototype.drawGraph.call(a);a["graph"+b]=a.graph});a.points=c;a.options=f;a.graph=d;e.prototype.drawGraph.call(a)},getValues:function(a,c){var b=c.period,f=c.topBand,g=c.bottomBand,d=a.xData,k=(a=a.yData)?a.length:0,h=[],m=[],p=[],C;if(!(d.length=d.length)){for(C=0;Cf?1:-1;l=l.initialAccelerationFactor;var r=l*(e-f);n.push([g[h],f]);q.push(g[h]);m.push(parseFloat(f.toFixed(k)));for(C=h+1;CMath.max(z,B)?f+r:Math.max(z,B):e,h=1===w?v>e?v:e:yf||-1===p&&v>f?1:-1,p=v,r=h,y=c,A=a,B=b,l=p===w?1===p&&r>e?l===A?A:parseFloat((l+y).toFixed(2)):-1===p&&rh?(n=d[g-e])?(d[g]-n)/n*100:null:(n=d[g-e][h])?(d[g][h]-n)/n*100:null;n=[a[g],n];b.push(n);f.push(n[0]);l.push(n[1])}return{values:b,xData:f,yData:l}}}});""});t(h,"Stock/Indicators/RSIIndicator.js",[h["Core/Utilities.js"]],function(d){var k= d.isArray;d=d.seriesType;d("rsi","sma",{params:{period:14,decimals:4}},{getValues:function(d,g){var e=g.period,a=d.xData,c=(d=d.yData)?d.length:0;g=g.decimals;var b=1,f=[],l=[],h=[],n=0,q=0,m;if(!(a.length\u25cf {series.name}
%K: {point.y}
%D: {point.smoothed}
'},smoothedLine:{styles:{lineWidth:1,lineColor:void 0}},dataGrouping:{approximation:"averages"}},a(g,{nameComponents:["periods"],nameBase:"Stochastic",pointArrayMap:["y","smoothed"],parallelArrays:["x","y","smoothed"],pointValKey:"y",linesApiNames:["smoothedLine"],init:function(){c.prototype.init.apply(this,arguments);this.options=a({smoothedLine:{styles:{lineColor:this.color}}}, this.options)},getValues:function(a,d){var f=d.periods[0];d=d.periods[1];var g=a.xData,l=(a=a.yData)?a.length:0,k=[],p=[],h=[],u=null,r;if(!(l=f-1+(d-1)&&(u=c.prototype.getValues.call(this,{xData:p.slice(-d),yData:h.slice(-d)},{period:d}),u=u.yData[0]);k.push([g[r],A,u]);h[h.length-1][1]=u}return{values:k,xData:p,yData:h}}}}));""});t(h, "Stock/Indicators/SlowStochasticIndicator.js",[h["Core/Globals.js"],h["Core/Utilities.js"],h["Mixins/IndicatorRequired.js"]],function(d,k,l){k=k.seriesType;var g=d.seriesTypes;k("slowstochastic","stochastic",{params:{periods:[14,3,3]}},{nameBase:"Slow Stochastic",init:function(){var e=arguments,a=this;l.isParentLoaded(d.seriesTypes.stochastic,"stochastic",a.type,function(c){c.prototype.init.apply(a,e)})},getValues:function(e,a){var c=a.periods,b=g.stochastic.prototype.getValues.call(this,e,a);e={values:[], xData:[],yData:[]};a=0;if(b){e.xData=b.xData.slice(c[1]-1);b=b.yData.slice(c[1]-1);var d=g.sma.prototype.getValues.call(this,{xData:e.xData,yData:b},{index:1,period:c[2]});if(d){for(var l=e.xData.length;a=E.close&&y.y>= t.close?(v.color=D||c.fallingTrendColor||c.color,B.top.push(I)):v.y=E.close&&y.y=t.close&&(v.color=D||c.risingTrendColor||c.color,y.color=D||c.fallingTrendColor||c.color,B.bottom.push(I),B.bottom.push(e(G, {isNull:!0}))))):E&&(v.y>=E.close?(v.color=D||c.fallingTrendColor||c.color,B.top.push(I)):(v.color=D||c.risingTrendColor||c.color,B.bottom.push(I)));b(B,function(b,c){a.points=b;a.options=e(z[c].styles,A);a.graph=a["graph"+c+"Line"];h.prototype.drawGraph.call(a);a["graph"+c+"Line"]=a.graph});a.points=g;a.options=c;a.graph=k},getValues:function(a,b){var e=b.period;b=b.multiplier;var d=a.xData,l=a.yData,k=[],h=[],n=[],u=0===e?0:e-1,x=[],z=[],v;if(!(d.length<=e||!c(l[0])||4!==l[0].length||0>e)){a=f.prototype.getValues.call(this, a,{period:e}).yData;for(v=0;vL?e:L;z[v]=D>G||t[3]x[v]||H===G&&y[3]>z[v])I=z[v];k.push([d[u+v],I]);h.push(d[u+v]);n.push(I)}return{values:k,xData:h,yData:n}}}});""});t(h,"Stock/Indicators/VBPIndicator.js",[h["Core/Globals.js"],h["Core/Series/Point.js"], h["Core/Utilities.js"]],function(d,k,l){var g=l.addEvent,e=l.animObject,a=l.arrayMax,c=l.arrayMin,b=l.correctFloat,f=l.error,h=l.extend,x=l.isArray;l=l.seriesType;var n=Math.abs,q=d.noop,m=d.seriesTypes.column.prototype;l("vbp","sma",{params:{ranges:12,volumeSeriesID:"volume"},zoneLines:{enabled:!0,styles:{color:"#0A9AC9",dashStyle:"LongDash",lineWidth:1}},volumeDivision:{enabled:!0,styles:{positiveColor:"rgba(144, 237, 125, 0.8)",negativeColor:"rgba(244, 91, 91, 0.8)"}},animationLimit:1E3,enableMouseTracking:!1, pointPadding:0,zIndex:-1,crisp:!0,dataGrouping:{enabled:!1},dataLabels:{allowOverlap:!0,enabled:!0,format:"P: {point.volumePos:.2f} | N: {point.volumeNeg:.2f}",padding:0,style:{fontSize:"7px"},verticalAlign:"top"}},{nameBase:"Volume by Price",bindTo:{series:!1,eventName:"afterSetExtremes"},calculateOn:"render",markerAttribs:q,drawGraph:q,getColumnMetrics:m.getColumnMetrics,crispCol:m.crispCol,init:function(a){d.seriesTypes.sma.prototype.init.apply(this,arguments);var b=this.options.params;var c=this.linkedParent; b=a.get(b.volumeSeriesID);this.addCustomEvents(c,b);return this},addCustomEvents:function(a,b){function c(){e.chart.redraw();e.setData([]);e.zoneStarts=[];e.zoneLinesSVG&&(e.zoneLinesSVG.destroy(),delete e.zoneLinesSVG)}var e=this;e.dataEventsToUnbind.push(g(a,"remove",function(){c()}));b&&e.dataEventsToUnbind.push(g(b,"remove",function(){c()}));return e},animate:function(a){var b=this,c=b.chart.inverted,d=b.group,f={};!a&&d&&(a=c?"translateY":"translateX",c=c?b.yAxis.top:b.xAxis.left,d["forceAnimate:"+ a]=!0,f[a]=c,d.animate(f,h(e(b.options.animation),{step:function(a,c){b.group.attr({scaleX:Math.max(.001,c.pos)})}})))},drawPoints:function(){this.options.volumeDivision.enabled&&(this.posNegVolume(!0,!0),m.drawPoints.apply(this,arguments),this.posNegVolume(!1,!1));m.drawPoints.apply(this,arguments)},posNegVolume:function(a,b){var c=b?["positive","negative"]:["negative","positive"],e=this.options.volumeDivision,d=this.points.length,f=[],g=[],l=0,k;a?(this.posWidths=f,this.negWidths=g):(f=this.posWidths, g=this.negWidths);for(;le.pointPadding?e.pointPadding:.1;e=c.volumeDataArray;var D=a(e);var I=d.plotWidth/2;var N=d.plotTop;var J=n(f.toPixels(g)-f.toPixels(g+c.rangeStep));var M=n(f.toPixels(g)-f.toPixels(g+c.rangeStep));H&&(g=n(J*(1-2*H)),h=n((J-g)/2),J=n(g));t.forEach(function(a,e){u=a.barX=a.plotX=0;x=a.plotY=f.toPixels(k[e].start)-N-(f.reversed?J-M:J)-h;q=b(I*k[e].wholeVolumeData/D);a.pointWidth=q;a.shapeArgs= c.crispCol.apply(c,[u,x,q,J]);a.volumeNeg=k[e].negativeVolumeData;a.volumePos=k[e].positiveVolumeData;a.volumeAll=k[e].wholeVolumeData});l.enabled&&c.drawZones(d,f,c.zoneStarts,l.styles)}},getValues:function(a,b){var c=a.processedXData,e=a.processedYData,d=this.chart,g=b.ranges,l=[],k=[],h=[],m;if(a.chart)if(m=d.get(b.volumeSeriesID))if((b=x(e[0]))&&4!==e[0].length)f("Type of "+a.name+" series is different than line, OHLC or candlestick.",!0,d);else return(this.priceZones=this.specifyZones(b,c,e, g,m)).forEach(function(a,b){l.push([a.x,a.end]);k.push(l[b][0]);h.push(l[b][1])}),{values:l,xData:k,yData:h};else f("Series "+b.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,d);else f("Base series not found! In case it has been removed, add a new one.",!0,d)},specifyZones:function(e,d,f,g,l){if(e){var k=f.length;for(var h=f[0][3],m=h,n=1,p;nm&&(m=p);k={min:h,max:m}}else k=!1;k=(h=k)?h.min:c(f);p=h?h.max:a(f);h=this.zoneStarts=[];m=[];var q=0;n=1;if(!k||!p)return this.points.length&& (this.setData([]),this.zoneStarts=[],this.zoneLinesSVG.destroy()),[];var u=this.rangeStep=b(p-k)/g;for(h.push(k);q=b.end&&b.index===h&&(q=!0),(u>b.start||p)&&(uu?b.negativeVolumeData+=l[r]:b.positiveVolumeData+=l[r]);f.volumeDataArray.push(b.wholeVolumeData)});return b},drawZones:function(a,b,c,e){var d=a.renderer,f=this.zoneLinesSVG,g=[],l=a.plotWidth,h=a.plotTop,k;c.forEach(function(c){k=b.toPixels(c)-h;g=g.concat(a.renderer.crispLine([["M", 0,k],["L",l,k]],e.lineWidth))});f?f.animate({d:g}):f=this.zoneLinesSVG=d.path(g).attr({"stroke-width":e.lineWidth,stroke:e.color,dashstyle:e.dashStyle,zIndex:this.group.zIndex+.1}).add(this.group)}},{destroy:function(){this.negativeGraphic&&(this.negativeGraphic=this.negativeGraphic.destroy());return k.prototype.destroy.apply(this,arguments)}});""});t(h,"Stock/Indicators/VWAPIndicator.js",[h["Core/Utilities.js"]],function(d){var h=d.error,l=d.isArray;d=d.seriesType;d("vwap","sma",{params:{period:30, volumeSeriesID:"volume"}},{getValues:function(d,e){var a=d.chart,c=d.xData;d=d.yData;var b=e.period,f=!0,g;if(g=a.get(e.volumeSeriesID))return l(d[0])||(f=!1),this.calculateVWAPValues(f,c,d,g,b);h("Series "+e.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,a)},calculateVWAPValues:function(d,e,a,c,b){var f=c.yData,g=c.xData.length,l=e.length;c=[];var h=[],k=[],m=[],p=[],t;g=l<=g?l:g;for(t=l=0;lt?e[h]:e[h][t]]),h++;for(c=h;ct?e[c]:e[c][t]]);h=l(a,b,e,c);q.push(h);m.push(h[0]);p.push(h[1]);return{values:q,xData:m,yData:p}}}});""});t(h,"Stock/Indicators/ZigzagIndicator.js",[h["Core/Utilities.js"]],function(d){d=d.seriesType; d("zigzag","sma",{params:{lowIndex:2,highIndex:1,deviation:1}},{nameComponents:["deviation"],nameSuffixes:["%"],nameBase:"Zig Zag",getValues:function(d,h){var g=h.lowIndex,e=h.highIndex,a=h.deviation/100;h=1+a;var c=1-a;a=d.xData;var b=d.yData;d=b?b.length:0;var f=[],l=[],k=[],n,q,m=!1,p=!1;if(!(!a||1>=a.length||d&&(void 0===b[0][g]||void 0===b[0][e]))){var t=b[0][g];var w=b[0][e];for(n=1;n=t*h&&(f.push([a[0],t]),r= [a[n],b[n][e]],q=!1,m=!0);if(m){l.push(f[0][0]);k.push(f[0][1]);var A=n++;n=d}}for(n=A;n=r[1]*h&&(p=e)):(b[n][e]>=r[1]&&(r=[a[n],b[n][e]]),b[n][g]<=r[1]*c&&(p=g)),!1!==p&&(f.push(r),l.push(r[0]),k.push(r[1]),r=[a[n],b[n][p]],q=!q,p=!1);g=f.length;0!==g&&f[g-1][0]\u25cf{series.name}: {point.y}\u00b0
'}},{nameBase:"Linear Regression Angle Indicator",slopeToAngle:function(d){return 180/Math.PI*Math.atan(d)},getEndPointY:function(d){return this.slopeToAngle(d.slope)}});""});t(h,"Stock/Indicators/ABIndicator.js",[h["Core/Globals.js"],h["Core/Utilities.js"],h["Mixins/MultipleLines.js"]],function(d,h,l){var g=h.correctFloat,e=h.merge;h=h.seriesType;var a=d.seriesTypes.sma; h("abands","sma",{params:{period:20,factor:.001,index:3},lineWidth:1,topLine:{styles:{lineWidth:1}},bottomLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}},e(l,{pointArrayMap:["top","middle","bottom"],pointValKey:"middle",nameBase:"Acceleration Bands",nameComponents:["period","factor"],linesApiNames:["topLine","bottomLine"],getValues:function(c,b){var d=b.period,e=b.factor;b=b.index;var h=c.xData,k=(c=c.yData)?c.length:0,l=[],m=[],p=[],t=[],w=[],r;if(!(k=d){A=h.slice(r-d,r);var v=c.slice(r-d,r);z=a.prototype.getValues.call(this,{xData:A,yData:l.slice(r-d,r)},{period:d});B=a.prototype.getValues.call(this,{xData:A,yData:m.slice(r-d,r)},{period:d});v=a.prototype.getValues.call(this,{xData:A,yData:v},{period:d,index:b});A=v.xData[0];z=z.yData[0];B=B.yData[0];v=v.yData[0];p.push([A,z,v,B]);t.push(A);w.push([z,v,B])}}return{values:p, xData:t,yData:w}}}}));""});t(h,"Stock/Indicators/TrendLineIndicator.js",[h["Core/Utilities.js"]],function(d){var h=d.isArray;d=d.seriesType;d("trendline","sma",{params:{index:3}},{nameBase:"Trendline",nameComponents:!1,getValues:function(d,g){var e=d.xData,a=d.yData;d=[];var c=[],b=[],f=0,k=0,l=0,n=0,q=e.length,m=g.index;for(g=0;g