/* Highstock JS v8.1.2 (2020-06-16) All technical indicators for Highstock (c) 2010-2019 Pawel Fus License: www.highcharts.com/license */ (function(k){"object"===typeof module&&module.exports?(k["default"]=k,module.exports=k):"function"===typeof define&&define.amd?define("highcharts/indicators/indicators-all",["highcharts","highcharts/modules/stock"],function(v){k(v);k.Highcharts=v;return k}):k("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(k){function v(e,f,l,h){e.hasOwnProperty(f)||(e[f]=h.apply(null,l))}k=k?k._modules:{};v(k,"mixins/indicator-required.js",[k["parts/Utilities.js"]],function(e){var f=e.error;return{isParentLoaded:function(l, h,d,a,c){if(l)return a?a(l):!0;f(c||this.generateMessage(d,h));return!1},generateMessage:function(l,h){return'Error: "'+l+'" indicator type requires "'+h+'" indicator loaded before. Please read docs: https://api.highcharts.com/highstock/plotOptions.'+l}}});v(k,"indicators/indicators.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"],k["mixins/indicator-required.js"]],function(e,f,l){var h=f.addEvent,d=f.error,a=f.extend,c=f.isArray,b=f.pick,g=f.seriesType,t=f.splat,r=e.Series,m=e.seriesTypes, p=e.seriesTypes.ohlc.prototype,q=l.generateMessage;h(e.Series,"init",function(b){b=b.options;b.useOhlcData&&"highcharts-navigator-series"!==b.id&&a(this,{pointValKey:p.pointValKey,keys:p.keys,pointArrayMap:p.pointArrayMap,toYData:p.toYData})});h(r,"afterSetOptions",function(b){b=b.options;var c=b.dataGrouping;c&&b.useOhlcData&&"highcharts-navigator-series"!==b.id&&(c.approximation="ohlc")});g("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;r.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){m[c]?m[c].prototype.requireIndicators():(b.allLoaded=!1,b.needed= c)});return b},init:function(b,c){function g(){var b=a.points||[],c=(a.xData||[]).length,g=a.getValues(a.linkedParent,a.options.params)||{values:[],xData:[],yData:[]},d=[],n=!0;if(c&&!a.hasGroupedData&&a.visible&&a.points)if(a.cropped){if(a.xAxis){var m=a.xAxis.min;var h=a.xAxis.max}c=a.cropData(g.xData,g.yData,m,h);for(m=0;mq?b[m]:b[m][q],m++;for(a=m;aq?b[a]:b[a][q];var l=[d[a],n/g];h.push(l);r.push(l[0]);p.push(l[1]);n-=0>q?b[a-m]:b[a-m][q]}return{values:h,xData:r,yData:p}}},destroy:function(){this.dataEventsToUnbind.forEach(function(b){b()});r.prototype.destroy.apply(this,arguments)}});""});v(k,"indicators/accumulation-distribution.src.js",[k["parts/Utilities.js"]],function(e){var f= e.error;e=e.seriesType;e("ad","sma",{params:{volumeSeriesID:"volume"}},{nameComponents:!1,nameBase:"Accumulation/Distribution",getValues:function(l,h){var d=h.period,a=l.xData,c=l.yData,b=h.volumeSeriesID,g=l.chart.get(b);h=g&&g.yData;var t=c?c.length:0,r=[],m=[],p=[];if(!(a.length<=d&&t&&4!==c[0].length)){if(g){for(;da[b-1].y?c:a[b].y=a.length)&&h(d[0])&&4===d[0].length){for(p=0;33>p;p++){var q=(d[p][1]+ d[p][2])/2;29<=p&&(r=l(r+q));m=l(m+q)}for(p=33;p=b||"min"===c&&a[d]<=b)b=a[d],g=d;return g}var h=e.merge,d=e.pick;e=e.seriesType; e("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"}},h(f,{nameBase:"Aroon",pointArrayMap:["y","aroonDown"],pointValKey:"y",linesApiNames:["aroonDown"],getValues:function(a,c){c=c.period;var b=a.xData,g=(a=a.yData)?a.length:0,t=[],h=[],m=[],p;for(p=c-1;p< g;p++){var q=a.slice(p-c+1,p+2);var n=l(q.map(function(b){return d(b[2],b)}),"min");q=l(q.map(function(b){return d(b[1],b)}),"max");q=q/c*100;n=n/c*100;b[p+1]&&(t.push([b[p+1],q,n]),h.push(b[p+1]),m.push([q,n]))}return{values:t,xData:h,yData:m}}}));""});v(k,"indicators/aroon-oscillator.src.js",[k["parts/Globals.js"],k["mixins/multipe-lines.js"],k["mixins/indicator-required.js"],k["parts/Utilities.js"]],function(e,f,l,h){var d=h.merge;h=h.seriesType;var a=e.seriesTypes.aroon;h("aroonoscillator","aroon", {params:{period:25},tooltip:{pointFormat:'\u25cf {series.name}: {point.y}'}},d(f,{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 g=[],d=[],h=[];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"}},d(l,{pointArrayMap:["top","middle","bottom"],pointValKey:"middle",nameComponents:["period","standardDeviation"],linesApiNames:["topLine","bottomLine"],init:function(){a.prototype.init.apply(this, arguments);this.options=d({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)},getValues:function(c,b){var g=b.period,d=b.standardDeviation,r=c.xData,m=(c=c.yData)?c.length:0,p=[],q=[],n=[],l;if(!(r.length=l.params.period&&f.xData&&f.xData.length>=l.params.period&&d)},getValues:function(f,l){if(this.isValid())return this.getMoneyFlow(f.xData,f.yData,this.volumeSeries.yData,l.period)},getMoneyFlow:function(f,l,h,d){function a(b,c){var a=b[1],g=b[2];b=b[3];return null!==c&&null!==a&&null!==g&&null!==b&&a!==g?(b-g-(a-b))/(a-g)*c:(n=q,null)}var c=l.length,b=[],g=0,t=0,r=[], m=[],p=[],q,n=-1;if(0=d&&0!==g?t/g:null);for(p.push([r[0],m[0]]);q=d?t/g:null];r.push(e[0]);m.push(e[1]);p.push([e[0],e[1]])}}return{values:p,xData:r,yData:m}}});""});v(k,"indicators/dpo.src.js",[k["parts/Utilities.js"]],function(e){function f(d,a,c,b,g){a=h(a[c][b],a[c]);return g?l(d-a):l(d+a)}var l=e.correctFloat,h=e.pick;e=e.seriesType; e("dpo","sma",{params:{period:21}},{nameBase:"DPO",getValues:function(d,a){var c=a.period;a=a.index;var b=c+Math.floor(c/2+1),g=d.xData||[];d=d.yData||[];var t=d.length,r=[],m=[],p=[],l=0,n,e;if(!(g.length<=b)){for(n=0;nd?a[b]:a[b][d],c+=g,b++;return c},calculateEma:function(h,d,a,c,b,g,t){h=h[a-1];d=0>g?d[a-1]:d[a-1][g];c="undefined"===typeof b?t:f(d*c+b*(1-c));return[h,c]},getValues:function(h,d){var a=d.period,c=h.xData,b=(h=h.yData)?h.length:0,g=2/(a+1),t=[],r=[],m=[],p=-1;if(!(bc)var d=[a[g-3],0!==b.prevLevel3?h(b.level3-b.prevLevel3)/b.prevLevel3*100:null];return d}});""});v(k,"indicators/apo.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"],k["mixins/indicator-required.js"]], function(e,f,l){var h=f.error;f=f.seriesType;var d=e.seriesTypes.ema;f("apo","ema",{params:{periods:[10,20]}},{nameBase:"APO",nameComponents:["periods"],init:function(){var a=arguments,c=this;l.isParentLoaded(d,"ema",c.type,function(b){b.prototype.init.apply(c,a)})},getValues:function(a,c){var b=c.periods,g=c.index;c=[];var l=[],f=[],m;if(2!==b.length||b[1]<=b[0])h('Error: "APO requires two periods. Notice, first period should be lower than the second one."');else{var p=d.prototype.getValues.call(this, a,{index:g,period:b[0]});a=d.prototype.getValues.call(this,a,{index:g,period:b[1]});if(p&&a){b=b[1]-b[0];for(m=0;m=c&&0<=h&&1>=h)return{plotX:b.plotX+h*d,plotY:b.plotY+ h*a}}return!1}function g(b){var a=b.indicator;a.points=b.points;a.nextPoints=b.nextPoints;a.color=b.color;a.options=p(b.options.senkouSpan.styles,b.gap);a.graph=b.graph;a.fillGraph=!0;k.prototype.drawGraph.call(a)}var t=f.parse,r=l.defined,m=l.isArray,p=l.merge,q=l.objectEach;f=l.seriesType;var n,k=e.seriesTypes.sma;e.approximations["ichimoku-averages"]=function(){var b=[],a;[].forEach.call(arguments,function(c,g){b.push(e.approximations.average(c));a=!a&&"undefined"===typeof b[g]});return a?void 0: b};f("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(){k.prototype.init.apply(this,arguments);this.options=p({tenkanLine:{styles:{lineColor:this.color}}, kijunLine:{styles:{lineColor:this.color}},chikouLine:{styles:{lineColor:this.color}},senkouSpanA:{styles:{lineColor:this.color,fill:t(this.color).setOpacity(.5).get()}},senkouSpanB:{styles:{lineColor:this.color,fill:t(this.color).setOpacity(.5).get()}},senkouSpan:{styles:{fill:t(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;k.prototype.translate.apply(b);b.points.forEach(function(a){b.pointArrayMap.forEach(function(c){r(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,d=c.length,h=a.options,m=a.graph,n=a.color,l={options:{gapSize:h.gapSize}},f=a.pointArrayMap.length,e=[[],[],[],[],[],[]],t={tenkanLine:e[0],kijunLine:e[1],chikouLine:e[2],senkouSpanA:e[3],senkouSpanB:e[4],senkouSpan:e[5]},y=[],D=a.options.senkouSpan,v=D.color||D.styles.fill,N=D.negativeColor,J=[[],[]],M=[[],[]],P=0,K,Q,O;for(a.ikhMap=t;d--;){var F= c[d];for(K=0;KK?0:1}else F=d[F].plotY>D[F].plotY?0:1; else F=d[0].plotY>D[0].plotY?0:1;J[F]=J[F].concat(d);M[F]=M[F].concat(D)}["graphsenkouSpanColor","graphsenkouSpanNegativeColor"].forEach(function(b,c){J[c].length&&M[c].length&&(Q=0===c?v:N,g({indicator:a,points:J[c],nextPoints:M[c],color:Q,options:h,gap:l,graph:a[b]}),a[b]=a.graph,a.graphCollection.push(b))})}else g({indicator:a,points:t.senkouSpanB,nextPoints:t.senkouSpanA,color:v,options:h,gap:l,graph:a.graphsenkouSpan}),a.graphsenkouSpan=a.graph;delete a.nextPoints;delete a.fillGraph;a.points= c;a.options=h;a.graph=m},getGraphPath:function(b){b=b||this.points;if(this.fillGraph&&this.nextPoints){var a=k.prototype.getGraphPath.call(this,this.nextPoints);a[0][0]="L";var c=k.prototype.getGraphPath.call(this,b);a=a.slice(0,c.length);for(var g=a.length-1;0<=g;g--)c.push(a[g])}else c=k.prototype.getGraphPath.apply(this,arguments);return c},getValues:function(b,g){var d=g.period,h=g.periodTenkan;g=g.periodSenkouSpanB;var l=b.xData,f=b.yData,p=f&&f.length||0;b=c(b.xAxis);var t=[],e=[],r;if(!(l.length<= d)&&m(f[0])&&4===f[0].length){var q=l[0]-d*b;for(r=0;r=h){var k=f.slice(r-h,r);k=a(k);k=(k.high+k.low)/2}if(r>=d){var u=f.slice(r-d,r);u=a(u);u=(u.high+u.low)/2;var y=(k+u)/2}if(r>=g){var x=f.slice(r-g,r);x=a(x);x=(x.high+x.low)/2}q=f[r][3];var v=l[r];t[r]===n&&(t[r]=[]);t[r+d]===n&&(t[r+d]=[]);t[r+d][0]=k;t[r+d][1]=u;t[r+d][2]=n;t[r][2]=q;r<=d&&(t[r+d][3]=n,t[r+d][4]=n);t[r+2*d]===n&&(t[r+2*d]=[]);t[r+2*d][3]=y;t[r+2*d][4]=x;e.push(v)}for(r=1;r<=d;r++)e.push(v+ r*b);return{values:t,xData:e,yData:t}}}});""});v(k,"indicators/keltner-channels.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"],k["mixins/multipe-lines.js"]],function(e,f,l){var h=f.correctFloat,d=f.merge;f=f.seriesType;var a=e.seriesTypes.sma,c=e.seriesTypes.ema,b=e.seriesTypes.atr;f("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},d(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=d({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)},getValues:function(a,d){var g=d.period, m=d.periodATR,l=d.multiplierATR,f=a.yData;f=f?f.length:0;var n=[];d=c.prototype.getValues(a,{period:g,index:d.index});var t=b.prototype.getValues(a,{period:m}),e=[],k=[],A;if(!(f\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:e.noop,getColumnMetrics:e.seriesTypes.column.prototype.getColumnMetrics,crispCol:e.seriesTypes.column.prototype.crispCol,init:function(){a.prototype.init.apply(this,arguments);this.options&&(this.options=d({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"];e.seriesTypes.column.prototype.translate.apply(b);b.points.forEach(function(c){[c.signal,c.MACD].forEach(function(g,d){null!==g&&(c[a[d]]= b.yAxis.toPixels(g,!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:e.seriesTypes.column.prototype.drawPoints,drawGraph:function(){for(var b=this,c=b.points,l=c.length,f=b.options,m=b.zones,e={options:{gapSize:f.gapSize}},q=[[],[]],n;l--;)n=c[l],h(n.plotMACD)&&q[0].push({plotX:n.plotX,plotY:n.plotMACD,isNull:!h(n.plotMACD)}),h(n.plotSignal)&& q[1].push({plotX:n.plotX,plotY:n.plotSignal,isNull:!h(n.plotMACD)});["macd","signal"].forEach(function(c,g){b.points=q[g];b.options=d(f[c+"Line"].styles,e);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=f;b.zones=m;b.currentLineZone=null},getZonesGraphs:function(b){var c=a.prototype.getZonesGraphs.call(this,b),d=c;this.currentLineZone&&(d=c.splice(this[this.currentLineZone].startIndex+1), d.length?d.splice(0,0,b[0]):d=[b[0]]);return d},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 d=0,g=[],m=[],f=[];if(!(b.xData.length=a[0][0]&&(g[b][2]=a[d][1],f[b]=[0,a[d][1],g[b][3]],null===g[b][3]?(g[b][1]=0,f[b][0]=0):(g[b][1]=l(g[b][3]-a[d][1]),f[b][0]=l(g[b][3]-a[d][1])),d++);return{values:g,xData:m,yData:f}}}}); ""});v(k,"indicators/mfi.src.js",[k["parts/Utilities.js"]],function(e){function f(a){return a.reduce(function(a,b){return a+b})}function l(a){return(a[1]+a[2]+a[3])/3}var h=e.error,d=e.isArray;e=e.seriesType;e("mfi","sma",{params:{period:14,volumeSeriesID:"volume",decimals:4}},{nameBase:"Money Flow Index",getValues:function(a,c){var b=c.period,g=a.xData,e=a.yData,r=e?e.length:0,m=c.decimals,p=1,q=a.chart.get(c.volumeSeriesID),n=q&&q.yData,k=[],x=[],u=[],A=[],B=[];if(!q)h("Series "+c.volumeSeriesID+ " not found! Check `volumeSeriesID`.",!0,a.chart);else if(!(g.length<=b)&&d(e[0])&&4===e[0].length&&n){for(a=l(e[p]);p=c,q=a*n[p],A.push(c?q:0),B.push(c?0:q),p++;for(b=p-1;bp-1&&(A.shift(),B.shift(),c=a,a=l(e[b]),c=a>c,q=a*n[b],A.push(c?q:0),B.push(c?0:q)),c=f(B),q=f(A),c=q/c,c=parseFloat((100-100/(1+c)).toFixed(m)),k.push([g[b],c]),x.push(g[b]),u.push(c);return{values:k,xData:x,yData:u}}}});""});v(k,"indicators/momentum.src.js",[k["parts/Utilities.js"]],function(e){function f(h, d,a,c,b){a=a[c-1][3]-a[c-b-1][3];d=d[c-1];h.shift();return[d,a]}var l=e.isArray;e=e.seriesType;e("momentum","sma",{params:{period:14}},{nameBase:"Momentum",getValues:function(h,d){d=d.period;var a=h.xData,c=(h=h.yData)?h.length:0,b=a[0],g=[],e=[],r=[];if(!(a.length<=d)&&l(h[0])){var m=h[0][3];m=[[b,m]];for(b=d+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(){d.prototype.init.apply(this,arguments);this.options=h({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"];d.prototype.translate.apply(a);a.points.forEach(function(b){[b.top,b.middle,b.bottom].forEach(function(d,h){null!==d&&(b[c[h]]=a.yAxis.toPixels(d,!0))})})},drawGraph:function(){for(var a=this,c=a.points,b=c.length, g=a.options,f=a.graph,l={options:{gapSize:g.gapSize}},e=[[],[]],k;b--;)k=c[b],e[0].push({plotX:k.plotX,plotY:k.plotTop,isNull:k.isNull}),e[1].push({plotX:k.plotX,plotY:k.plotBottom,isNull:k.isNull});["topLine","bottomLine"].forEach(function(b,c){a.points=e[c];a.options=h(g[b].styles,l);a.graph=a["graph"+b];d.prototype.drawGraph.call(a);a["graph"+b]=a.graph});a.points=c;a.options=g;a.graph=f;d.prototype.drawGraph.call(a)},getValues:function(a,c){var b=c.period,g=c.topBand,h=c.bottomBand,f=a.xData, e=(a=a.yData)?a.length:0,k=[],q=[],n=[],y;if(!(f.length=f.length)){for(y=0;yg?1:-1;e=e.initialAccelerationFactor;var u=e*(d-g);m.push([h[k],g]);p.push(h[k]);q.push(parseFloat(g.toFixed(l))); for(y=k+1;yMath.max(C,B)?g+u:Math.max(C,B):d,k=1===x?w>d?w:d:zg||-1===n&&w>g?1:-1,n=w,u=k,z=c,A=a,B=b,e=n===x?1===n&&u>d?e===A?A:parseFloat((e+z).toFixed(2)):-1===n&&uk?(m=e[h-d])?(e[h]-m)/m*100:null:(m=e[h-d][k])?(e[h][k]-m)/m*100:null;m=[a[h],m];b.push(m); g.push(m[0]);l.push(m[1])}return{values:b,xData:g,yData:l}}}});""});v(k,"indicators/rsi.src.js",[k["parts/Utilities.js"]],function(e){var f=e.isArray;e=e.seriesType;e("rsi","sma",{params:{period:14,decimals:4}},{getValues:function(e,h){var d=h.period,a=e.xData,c=(e=e.yData)?e.length:0;h=h.decimals;var b=1,g=[],l=[],k=[],m=0,p=0,q;if(!(a.length\u25cf {series.name}
%K: {point.y}
%D: {point.smoothed}
'},smoothedLine:{styles:{lineWidth:1,lineColor:void 0}},dataGrouping:{approximation:"averages"}},a(h,{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,e){var g=e.periods[0];e=e.periods[1];var h=a.xData,f=(a=a.yData)?a.length:0,l=[],n=[],k=[],t=null,u;if(!(f=g-1+(e-1)&&(t=c.prototype.getValues.call(this, {xData:n.slice(-e),yData:k.slice(-e)},{period:e}),t=t.yData[0]);l.push([h[u],A,t]);k[k.length-1][1]=t}return{values:l,xData:n,yData:k}}}}));""});v(k,"indicators/slow-stochastic.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"],k["mixins/indicator-required.js"]],function(e,f,l){f=f.seriesType;var h=e.seriesTypes;f("slowstochastic","stochastic",{params:{periods:[14,3,3]}},{nameBase:"Slow Stochastic",init:function(){var d=arguments,a=this;l.isParentLoaded(e.seriesTypes.stochastic,"stochastic",a.type, function(c){c.prototype.init.apply(a,d)})},getValues:function(d,a){var c=a.periods,b=h.stochastic.prototype.getValues.call(this,d,a);d={values:[],xData:[],yData:[]};a=0;if(b){d.xData=b.xData.slice(c[1]-1);b=b.yData.slice(c[1]-1);var g=h.sma.prototype.getValues.call(this,{xData:d.xData,yData:b},{index:1,period:c[2]});if(g){for(var e=d.xData.length;a=E.close&&z.y>=v.close?(w.color=D||c.fallingTrendColor||c.color,B.top.push(I)):w.y=E.close&&z.y=v.close&& (w.color=D||c.risingTrendColor||c.color,z.color=D||c.fallingTrendColor||c.color,B.bottom.push(I),B.bottom.push(d(G,{isNull:!0}))))):E&&(w.y>=E.close?(w.color=D||c.fallingTrendColor||c.color,B.top.push(I)):(w.color=D||c.risingTrendColor||c.color,B.bottom.push(I)));b(B,function(b,c){a.points=b;a.options=d(C[c].styles,A);a.graph=a["graph"+c+"Line"];k.prototype.drawGraph.call(a);a["graph"+c+"Line"]=a.graph});a.points=h;a.options=c;a.graph=f},getValues:function(a,b){var d=b.period;b=b.multiplier;var e= a.xData,f=a.yData,l=[],k=[],m=[],t=0===d?0:d-1,r=[],C=[],w;if(!(e.length<=d||!c(f[0])||4!==f[0].length||0>d)){a=g.prototype.getValues.call(this,a,{period:d}).yData;for(w=0;wL?d:L;C[w]=D>G||v[3]r[w]||H===G&&z[3]>C[w])I=C[w];l.push([e[t+w],I]);k.push(e[t+ w]);m.push(I)}return{values:l,xData:k,yData:m}}}});""});v(k,"indicators/volume-by-price.src.js",[k["parts/Globals.js"],k["parts/Point.js"],k["parts/Utilities.js"]],function(e,f,l){var h=l.addEvent,d=l.animObject,a=l.arrayMax,c=l.arrayMin,b=l.correctFloat,g=l.error,k=l.extend,r=l.isArray;l=l.seriesType;var m=Math.abs,p=e.noop,q=e.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:p,drawGraph:p,getColumnMetrics:q.getColumnMetrics, crispCol:q.crispCol,init:function(a){e.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(){d.chart.redraw();d.setData([]);d.zoneStarts=[];d.zoneLinesSVG&&(d.zoneLinesSVG.destroy(),delete d.zoneLinesSVG)}var d=this;d.dataEventsToUnbind.push(h(a,"remove",function(){c()}));b&&d.dataEventsToUnbind.push(h(b,"remove",function(){c()}));return d},animate:function(a){var b= this,c=b.chart.inverted,g=b.group,e={};!a&&g&&(a=c?"translateY":"translateX",c=c?b.yAxis.top:b.xAxis.left,g["forceAnimate:"+a]=!0,e[a]=c,g.animate(e,k(d(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),q.drawPoints.apply(this,arguments),this.posNegVolume(!1,!1));q.drawPoints.apply(this,arguments)},posNegVolume:function(a,b){var c=b?["positive","negative"]:["negative","positive"], d=this.options.volumeDivision,g=this.points.length,e=[],h=[],f=0,l;a?(this.posWidths=e,this.negWidths=h):(e=this.posWidths,h=this.negWidths);for(;fd.pointPadding?d.pointPadding:.1;d=c.volumeDataArray;var D=a(d);var I=g.plotWidth/2;var N=g.plotTop;var J=m(e.toPixels(h)-e.toPixels(h+c.rangeStep));var M=m(e.toPixels(h)-e.toPixels(h+c.rangeStep));H&&(h=m(J*(1-2*H)),k=m((J-h)/2),J=m(h));v.forEach(function(a,d){t=a.barX=a.plotX= 0;r=a.plotY=e.toPixels(l[d].start)-N-(e.reversed?J-M:J)-k;p=b(I*l[d].wholeVolumeData/D);a.pointWidth=p;a.shapeArgs=c.crispCol.apply(c,[t,r,p,J]);a.volumeNeg=l[d].negativeVolumeData;a.volumePos=l[d].positiveVolumeData;a.volumeAll=l[d].wholeVolumeData});f.enabled&&c.drawZones(g,e,c.zoneStarts,f.styles)}},getValues:function(a,b){var c=a.processedXData,d=a.processedYData,e=this.chart,h=b.ranges,f=[],l=[],k=[],m;if(a.chart)if(m=e.get(b.volumeSeriesID))if((b=r(d[0]))&&4!==d[0].length)g("Type of "+a.name+ " series is different than line, OHLC or candlestick.",!0,e);else return(this.priceZones=this.specifyZones(b,c,d,h,m)).forEach(function(a,b){f.push([a.x,a.end]);l.push(f[b][0]);k.push(f[b][1])}),{values:f,xData:l,yData:k};else g("Series "+b.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,e);else g("Base series not found! In case it has been removed, add a new one.",!0,e)},specifyZones:function(d,e,g,h,f){if(d){var l=g.length;for(var k=g[0][3],m=k,n=1,p;nm&&(m= p);l={min:k,max:m}}else l=!1;l=(k=l)?k.min:c(g);p=k?k.max:a(g);k=this.zoneStarts=[];m=[];var t=0;n=1;if(!l||!p)return this.points.length&&(this.setData([]),this.zoneStarts=[],this.zoneLinesSVG.destroy()),[];var q=this.rangeStep=b(p-l)/h;for(k.push(l);t=b.end&&b.index===l&&(t=!0),(q>b.start||p)&&(qq?b.negativeVolumeData+=f[r]:b.positiveVolumeData+=f[r]);e.volumeDataArray.push(b.wholeVolumeData)});return b},drawZones:function(a, b,c,d){var g=a.renderer,e=this.zoneLinesSVG,h=[],f=a.plotWidth,k=a.plotTop,l;c.forEach(function(c){l=b.toPixels(c)-k;h=h.concat(a.renderer.crispLine([["M",0,l],["L",f,l]],d.lineWidth))});e?e.animate({d:h}):e=this.zoneLinesSVG=g.path(h).attr({"stroke-width":d.lineWidth,stroke:d.color,dashstyle:d.dashStyle,zIndex:this.group.zIndex+.1}).add(this.group)}},{destroy:function(){this.negativeGraphic&&(this.negativeGraphic=this.negativeGraphic.destroy());return f.prototype.destroy.apply(this,arguments)}}); ""});v(k,"indicators/vwap.src.js",[k["parts/Utilities.js"]],function(e){var f=e.error,l=e.isArray;e=e.seriesType;e("vwap","sma",{params:{period:30,volumeSeriesID:"volume"}},{getValues:function(e,d){var a=e.chart,c=e.xData;e=e.yData;var b=d.period,g=!0,h;if(h=a.get(d.volumeSeriesID))return l(e[0])||(g=!1),this.calculateVWAPValues(g,c,e,h,b);f("Series "+d.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,a)},calculateVWAPValues:function(e,d,a,c,b){var g=c.yData,h=c.xData.length,f=d.length;c=[]; var l=[],k=[],q=[],n=[],y;h=f<=h?f:h;for(y=f=0;fv?d[f]:d[f][v]]),f++;for(c=f;cv?d[c]:d[c][v]]);f=k(a,b,d,c);p.push(f);q.push(f[0]);n.push(f[1]);return{values:p,xData:q,yData:n}}}}); ""});v(k,"indicators/zigzag.src.js",[k["parts/Utilities.js"]],function(e){e=e.seriesType;e("zigzag","sma",{params:{lowIndex:2,highIndex:1,deviation:1}},{nameComponents:["deviation"],nameSuffixes:["%"],nameBase:"Zig Zag",getValues:function(e,k){var f=k.lowIndex,d=k.highIndex,a=k.deviation/100;k=1+a;var c=1-a;a=e.xData;var b=e.yData;e=b?b.length:0;var g=[],l=[],r=[],m,p,q=!1,n=!1;if(!(!a||1>=a.length||e&&(void 0===b[0][f]||void 0===b[0][d]))){var v=b[0][f];var x=b[0][d];for(m=1;m=v*k&&(g.push([a[0],v]),u=[a[m],b[m][d]],p=!1,q=!0);if(q){l.push(g[0][0]);r.push(g[0][1]);var A=m++;m=e}}for(m=A;m=u[1]*k&&(n=d)):(b[m][d]>=u[1]&&(u=[a[m],b[m][d]]),b[m][f]<=u[1]*c&&(n=f)),!1!==n&&(g.push(u),l.push(u[0]),r.push(u[1]),u=[a[m],b[m][n]],p=!p,n=!1);f=g.length;0!==f&&g[f-1][0]\u25cf{series.name}: {point.y}\u00b0
'}},{nameBase:"Linear Regression Angle Indicator",slopeToAngle:function(e){return 180/Math.PI*Math.atan(e)},getEndPointY:function(e){return this.slopeToAngle(e.slope)}});""});v(k,"indicators/acceleration-bands.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"],k["mixins/multipe-lines.js"]],function(e,f,k){var h=f.correctFloat,d=f.merge;f= f.seriesType;var a=e.seriesTypes.sma;f("abands","sma",{params:{period:20,factor:.001,index:3},lineWidth:1,topLine:{styles:{lineWidth:1}},bottomLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}},d(k,{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 f=c.xData,k=(c=c.yData)?c.length:0,l=[],q=[],n=[],v=[], x=[],u;if(!(k=d){A=f.slice(u-d,u);var w=c.slice(u-d,u);C=a.prototype.getValues.call(this,{xData:A,yData:l.slice(u-d,u)},{period:d});B=a.prototype.getValues.call(this,{xData:A,yData:q.slice(u-d,u)},{period:d});w=a.prototype.getValues.call(this,{xData:A,yData:w},{period:d,index:b});A=w.xData[0];C=C.yData[0];B=B.yData[0];w=w.yData[0];n.push([A,C,w,B]);v.push(A); x.push([C,w,B])}}return{values:n,xData:v,yData:x}}}}));""});v(k,"indicators/trendline.src.js",[k["parts/Utilities.js"]],function(e){var f=e.isArray;e=e.seriesType;e("trendline","sma",{params:{index:3}},{nameBase:"Trendline",nameComponents:!1,getValues:function(e,h){var d=e.xData,a=e.yData;e=[];var c=[],b=[],g=0,k=0,l=0,m=0,p=d.length,q=h.index;for(h=0;h