UNPKG

highcharts

Version:
14 lines 71.9 kB
!/** * Highstock JS v13.0.1 (2026-08-17) * @module highcharts/indicators/indicators-all * @requires highcharts * @requires highcharts/modules/stock * * All technical indicators for Highcharts Stock * * (c) 2010-2026 Highsoft AS * Author: Paweł Fus * * 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.Chart,e._Highcharts.SeriesRegistry,e._Highcharts.dataGrouping.approximations,e._Highcharts.Color):"function"==typeof define&&define.amd?define("highcharts/indicators/indicators-all",["highcharts/highcharts"],function(e){return t(e,e.Chart,e.SeriesRegistry,e.dataGrouping,["approximations"],e.Color)}):"object"==typeof exports?exports["highcharts/indicators/indicators-all"]=t(e._Highcharts,e._Highcharts.Chart,e._Highcharts.SeriesRegistry,e._Highcharts.dataGrouping.approximations,e._Highcharts.Color):e.Highcharts=t(e.Highcharts,e.Highcharts.Chart,e.Highcharts.SeriesRegistry,e.Highcharts.dataGrouping.approximations,e.Highcharts.Color)}("u"<typeof window?this:window,(e,t,s,a,o)=>(()=>{"use strict";var i,r={960(e){e.exports=t},620(e){e.exports=o},512(e){e.exports=s},956(e){e.exports=a},944(t){t.exports=e}};let n={};function l(e){let t=n[e];if(void 0!==t)return t.exports;let s=n[e]={exports:{}};return r[e](s,s.exports,l),s.exports}l.n=e=>{let t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{if(Array.isArray(t))for(var s=0;s<t.length;){var a=t[s++],o=t[s++];l.o(e,a)?0===o&&s++:0===o?Object.defineProperty(e,a,{enumerable:!0,value:t[s++]}):Object.defineProperty(e,a,{enumerable:!0,get:o})}else for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);let p={};l.d(p,{default:()=>tw});var u=l(944),h=l.n(u),d=l(960),c=l.n(d);let{setLength:g,splice:m}={convertToNumber:function(e,t){switch(typeof e){case"boolean":return+!!e;case"number":return isNaN(e)&&!t?null:e;default:return isNaN(e=parseFloat(`${e??""}`))&&!t?null:e}},setLength:function(e,t,s){return Array.isArray(e)?(e.length=t,e):e[s?"subarray":"slice"](0,t)},splice:function(e,t,s,a,o=[]){if(Array.isArray(e))return Array.isArray(o)||(o=Array.from(o)),{removed:e.splice(t,s,...o),array:e};let i=Object.getPrototypeOf(e).constructor,r=e[a?"subarray":"slice"](t,t+s),n=new i(e.length-s+o.length);return n.set(e.subarray(0,t),0),n.set(o,t),n.set(e.subarray(t+s),t+o.length),{removed:r,array:n}}},y=class{constructor(e={}){this.isDataTable=!0,this.autoId=!e.id,this.columns={},this.id=e.id||(0,u.uniqueKey)(),this.rowCount=0,this.versionTag=(0,u.uniqueKey)();let t=0;(0,u.objectEach)(e.columns||{},(e,s)=>{this.columns[s]=e.slice(),t=Math.max(t,e.length)}),this.applyRowCount(t)}applyRowCount(e){this.rowCount=e,(0,u.objectEach)(this.columns,(t,s)=>{t.length!==e&&(this.columns[s]=g(t,e))})}deleteRows(e,t=1){if(t>0&&e<this.rowCount){let s=0;(0,u.objectEach)(this.columns,(a,o)=>{this.columns[o]=m(a,e,t).array,s=a.length}),this.rowCount=s}(0,u.fireEvent)(this,"afterDeleteRows",{rowIndex:e,rowCount:t}),this.versionTag=(0,u.uniqueKey)()}getColumn(e,t){return this.columns[e]}getColumns(e,t){return(e||Object.keys(this.columns)).reduce((e,t)=>(e[t]=this.columns[t],e),{})}getRowObject(e,t){let s={},a=this.columns;for(let o of(t??(t=Object.keys(this.columns)),t))s[o]=a[o]?.[e];return s}setColumn(e,t=[],s=0,a){this.setColumns({[e]:t},s,a)}setColumns(e,t,s){let a=this.rowCount;(0,u.objectEach)(e,(e,t)=>{this.columns[t]=e.slice(),a=e.length}),this.applyRowCount(a),s?.silent||((0,u.fireEvent)(this,"afterSetColumns"),this.versionTag=(0,u.uniqueKey)())}setRow(e,t=this.rowCount,s,a){var o;let{columns:i}=this,r=s?this.rowCount+1:t+1,n=Object.keys(e);if(a?.addColumns!==!1)for(let e=0,t=n.length;e<t;e++)i[o=n[e]]||(i[o]=Array(this.rowCount));(0,u.objectEach)(i,(a,o)=>{a&&(s?a=m(a,t,0,!0,[e[o]]).array:a[t]=o in e?e[o]:a[t],i[o]=a)}),this.applyRowCount(Math.max(r,this.rowCount)),a?.silent||((0,u.fireEvent)(this,"afterSetRows",{rowIndex:t}),this.versionTag=(0,u.uniqueKey)())}getModified(){return this.modified||this}};var f=l(512),x=l.n(f);let{line:v}=x().seriesTypes,D=(e,t)=>{let s=[],a=e.pointArrayMap,o=t&&e.dataTable.getModified()||e.dataTable;if(!a)return e.getColumn("y",t);let i=a.map(s=>e.getColumn(s,t));for(let e=0;e<o.rowCount;e++){let t=a.map((t,s)=>i[s]?.[e]||0);s.push(t)}return s};class b extends v{destroy(){this.dataEventsToUnbind.forEach(function(e){e()}),super.destroy.apply(this,arguments)}getName(){let e=[],t=this.name;return t||((this.nameComponents||[]).forEach(function(t,s){e.push(this.options.params[t]+(0,u.pick)(this.nameSuffixes[s],""))},this),t=(this.nameBase||this.type.toUpperCase())+(this.nameComponents?" ("+e.join(", ")+")":"")),t}getValues(e,t){let s=t.period,a=e.xData||[],o=e.yData,i=o.length,r=[],n=[],l=[],p,h=-1,d=0,c,g=0;if(!(a.length<s)){for((0,u.isArray)(o[0])&&(h=t.index?t.index:0);d<s-1;)g+=h<0?o[d]:o[d][h],d++;for(p=d;p<i;p++)g+=h<0?o[p]:o[p][h],c=[a[p],g/s],r.push(c),n.push(c[0]),l.push(c[1]),g-=h<0?o[p-d]:o[p-d][h];return{values:r,xData:n,yData:l}}}init(e,t){let s=this;super.init.call(s,e,t);let a=(0,u.addEvent)(c(),"afterLinkSeries",function({isUpdating:t}){if(t)return;let a=!!s.dataEventsToUnbind.length;if(!s.linkedParent)return(0,u.error)("Series "+s.options.linkedTo+" not found! Check `linkedTo`.",!1,e);if(!a&&(s.dataEventsToUnbind.push((0,u.addEvent)(s.linkedParent,"updatedData",function(){s.recalculateValues()})),s.calculateOn.xAxis&&s.dataEventsToUnbind.push((0,u.addEvent)(s.linkedParent.xAxis,s.calculateOn.xAxis,function(){s.recalculateValues()}))),"init"===s.calculateOn.chart)s.closestPointRange||s.recalculateValues();else if(!a){let e=(0,u.addEvent)(s.chart,s.calculateOn.chart,function(){s.recalculateValues(),e()})}},{order:0});s.dataEventsToUnbind=[],s.eventsToUnbind.push(a)}recalculateValues(){let e=this.dataTable,t=this.dataTable.rowCount,s=!0,a,o,i=this.linkedParent.yData,r=this.linkedParent.processedYData;this.linkedParent.xData=this.linkedParent.getColumn("x"),this.linkedParent.yData=D(this.linkedParent),this.linkedParent.processedYData=D(this.linkedParent,!0);let n=this.linkedParent.options&&this.linkedParent.dataTable.rowCount&&this.getValues(this.linkedParent,this.options.params)||{values:[],xData:[],yData:[]};n.xData.length=n.values.length,delete this.linkedParent.xData,this.linkedParent.yData=i,this.linkedParent.processedYData=r;let l=this.pointArrayMap||["y"],p={};if(n.yData.forEach(e=>{l.forEach((t,s)=>{let a=p[t]||[];a.push((0,u.isArray)(e)?e[s]:e),p[t]||(p[t]=a)})}),t&&!this.hasGroupedData&&this.visible&&this.points)if(this.cropped){this.xAxis&&(a=this.xAxis.min,o=this.xAxis.max);let t=this.cropData(e,a,o);this.setData(t.modified,!1)}else(this.updateAllPoints||n.xData.length!==t-1&&n.xData.length!==t+1)&&(s=!1,this.setData(new y({columns:{x:n.xData,...p}}),!1));s&&(p.x=n.xData,n.values.reduce((e,t,s)=>(Object.keys(t).forEach(a=>{e[a]||(e[a]=[]),e[a][s]=t[a]}),e),p),e.setColumns(p),delete this.xColumn,delete this.xColumnIsNumbers),this.calculateOn.xAxis&&this.getColumn("x",!0).length&&(this.isDirty=!0,this.redraw()),this.isDirtyData=!!this.linkedSeries.length,(0,u.fireEvent)(this,"updatedData")}processData(){let e=this.options.compareToMain,t=this.linkedParent;super.processData.apply(this,arguments),this.dataModify&&t&&t.dataModify&&t.dataModify.compareValue&&e&&(this.dataModify.compareValue=t.dataModify.compareValue)}}b.defaultOptions=(0,u.merge)(v.defaultOptions,{name:void 0,tooltip:{valueDecimals:4},linkedTo:void 0,compareToMain:!1,params:{index:3,period:14}}),(0,u.extend)(b.prototype,{calculateOn:{chart:"init"},hasDerivedData:!0,nameComponents:["period"],nameSuffixes:[],useCommonDataGrouping:!0}),x().registerSeriesType("sma",b);let{sma:A}=x().seriesTypes;class S extends A{accumulatePeriodPoints(e,t,s){let a=0,o=0;for(;o<e;)a+=t<0?s[o]:s[o][t],o++;return a}calculateEma(e,t,s,a,o,i,r){let n=e[s-1],l=i<0?t[s-1]:t[s-1][i];return[n,void 0===o?r:(0,u.correctFloat)(l*a+o*(1-a))]}getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=2/(s+1),n=[],l=[],p=[],h,d,c,g=-1,m=0;if(!(i<s)){for((0,u.isArray)(o[0])&&(g=t.index?t.index:0),m=this.accumulatePeriodPoints(s,g,o)/s,c=s;c<i+1;c++)d=this.calculateEma(a,o,c,r,h,g,m),n.push(d),l.push(d[0]),p.push(d[1]),h=d[1];return{values:n,xData:l,yData:p}}}}S.defaultOptions=(0,u.merge)(A.defaultOptions,{params:{index:3,period:9}}),x().registerSeriesType("ema",S);let{sma:C}=x().seriesTypes;class T extends C{static populateAverage(e,t,s,a,o){let i=t[a][1],r=t[a][2],n=t[a][3],l=s[a],p=n===i&&n===r||i===r?0:(2*n-r-i)/(i-r)*l;return[e[a],p]}getValues(e,t){let s,a,o,i=t.period,r=e.xData,n=e.yData,l=t.volumeSeriesID,p=e.chart.get(l),h=p?.getColumn("y"),d=n?n.length:0,c=[],g=[],m=[];if(!(r.length<=i)||!d||4===n[0].length){if(!p)return void(0,u.error)("Series "+l+" not found! Check `volumeSeriesID`.",!0,e.chart);for(a=i;a<d;a++)s=c.length,o=T.populateAverage(r,n,h,a,i),s>0&&(o[1]+=c[s-1][1]),c.push(o),g.push(o[0]),m.push(o[1]);return{values:c,xData:g,yData:m}}}}T.defaultOptions=(0,u.merge)(C.defaultOptions,{params:{index:void 0,volumeSeriesID:"volume"}}),(0,u.extend)(T.prototype,{nameComponents:!1,nameBase:"Accumulation/Distribution"}),x().registerSeriesType("ad",T);let{noop:P}=h(),{column:{prototype:M},sma:V}=x().seriesTypes;class O extends V{drawGraph(){let e,t=this.options,s=this.points,a=this.userOptions.color,o=t.greaterBarColor,i=t.lowerBarColor,r=s[0];if(!a&&r)for(e=1,r.color=o;e<s.length;e++)s[e].y>s[e-1].y?s[e].color=o:s[e].y<s[e-1].y?s[e].color=i:s[e].color=s[e-1].color}getValues(e){let t=e.xData||[],s=e.yData||[],a=s.length,o=[],i=[],r=[],n,l,p,h,d,c,g,m,y=0,f=0;if(!(t.length<=34)&&(0,u.isArray)(s[0])&&4===s[0].length){for(g=0;g<33;g++)c=(s[g][1]+s[g][2])/2,g>=29&&(f=(0,u.correctFloat)(f+c)),y=(0,u.correctFloat)(y+c);for(m=33;m<a;m++)c=(s[m][1]+s[m][2])/2,f=(0,u.correctFloat)(f+c),y=(0,u.correctFloat)(y+c),n=f/5,l=y/34,p=(0,u.correctFloat)(n-l),o.push([t[m],p]),i.push(t[m]),r.push(p),h=m+1-5,d=m+1-34,f=(0,u.correctFloat)(f-(s[h][1]+s[h][2])/2),y=(0,u.correctFloat)(y-(s[d][1]+s[d][2])/2);return{values:o,xData:i,yData:r}}}}O.defaultOptions=(0,u.merge)(V.defaultOptions,{params:{index:void 0,period:void 0},greaterBarColor:"var(--highcharts-positive-color)",lowerBarColor:"var(--highcharts-negative-color)",threshold:0,groupPadding:.2,pointPadding:.2,crisp:!1,states:{hover:{halo:{size:0}}}}),(0,u.extend)(O.prototype,{nameBase:"AO",nameComponents:void 0,markerAttribs:P,getColumnMetrics:M.getColumnMetrics,crispCol:M.crispCol,translate:M.translate,drawPoints:M.drawPoints}),x().registerSeriesType("ao",O);let{sma:{prototype:k}}=x().seriesTypes;!function(e){let t=["bottomLine"],s=["top","bottom"],a=["top"];function o(e){return"plot"+e.charAt(0).toUpperCase()+e.slice(1)}function i(e,t){let s=[];return(e.pointArrayMap||[]).forEach(e=>{e!==t&&s.push(o(e))}),s}function r(){let e=this,t=e.pointValKey,s=e.linesApiNames,a=e.areaLinesNames,r=e.points,n=e.options,l=e.graph,p={options:{gapSize:n.gapSize}},h=[],d=i(e,t),c=r.length,g;if(d.forEach((e,t)=>{for(h[t]=[];c--;)g=r[c],h[t].push({x:g.x,plotX:g.plotX,plotY:g[e],isNull:!(0,u.defined)(g[e])});c=r.length}),e.userOptions.fillColor&&a.length){let t=h[d.indexOf(o(a[0]))],s=1===a.length?r:h[d.indexOf(o(a[1]))],i=e.color;e.points=s,e.nextPoints=t,e.color=e.userOptions.fillColor,e.options=(0,u.merge)(r,p),e.graph=e.area,e.fillGraph=!0,k.drawGraph.call(e),e.area=e.graph,delete e.nextPoints,delete e.fillGraph,e.color=i}s.forEach((t,s)=>{h[s]?(e.points=h[s],n[t]?e.options=(0,u.merge)(n[t].styles,p):(0,u.error)('Error: "There is no '+t+' in DOCS options declared. Check if linesApiNames are consistent with your DOCS line names."'),e.graph=e["graph"+t],k.drawGraph.call(e),e["graph"+t]=e.graph):(0,u.error)('Error: "'+t+" doesn't have equivalent in pointArrayMap. To many elements in linesApiNames relative to pointArrayMap.\"")}),e.points=r,e.options=n,e.graph=l,k.drawGraph.call(e)}function n(e){let t,s=[],a=[];if(e=e||this.points,this.fillGraph&&this.nextPoints){if((t=k.getGraphPath.call(this,this.nextPoints))&&t.length){t[0][0]="L",s=k.getGraphPath.call(this,e),a=t.slice(0,s.length);for(let e=a.length-1;e>=0;e--)s.push(a[e])}}else s=k.getGraphPath.apply(this,arguments);return s}function l(e){let t=[];return(this.pointArrayMap||[]).forEach(s=>{t.push(e[s])}),t}function p(){let e=this.pointArrayMap,t=[],s;t=i(this),k.translate.apply(this,arguments),this.points.forEach(a=>{e.forEach((e,o)=>{s=a[e],this.dataModify&&(s=this.dataModify.modifyValue(s)),null!==s&&(a[t[o]]=this.yAxis.toPixels(s,!0))})})}e.compose=function(e){let o=e.prototype;return o.linesApiNames=o.linesApiNames||t.slice(),o.pointArrayMap=o.pointArrayMap||s.slice(),o.pointValKey=o.pointValKey||"top",o.areaLinesNames=o.areaLinesNames||a.slice(),o.drawGraph=r,o.getGraphPath=n,o.toYData=l,o.translate=p,e}}(i||(i={}));let L=i,{sma:w}=x().seriesTypes;function E(e,t){let s=e[0],a=0,o;for(o=1;o<e.length;o++)("max"===t&&e[o]>=s||"min"===t&&e[o]<=s)&&(s=e[o],a=o);return a}class I extends w{getValues(e,t){let s,a,o,i,r,n=t.period,l=e.xData,p=e.yData,h=p?p.length:0,d=[],c=[],g=[];for(i=n-1;i<h;i++)o=E((r=p.slice(i-n+1,i+2)).map(function(e){return(0,u.pick)(e[2],e)}),"min"),s=E(r.map(function(e){return(0,u.pick)(e[1],e)}),"max")/n*100,a=o/n*100,l[i+1]&&(d.push([l[i+1],s,a]),c.push(l[i+1]),g.push([s,a]));return{values:d,xData:c,yData:g}}}I.defaultOptions=(0,u.merge)(w.defaultOptions,{params:{index:void 0,period:25},marker:{enabled:!1},tooltip:{pointFormat:'<span style="color:{point.color}">●</span><b> {series.name}</b><br/>Aroon Up: {point.y}<br/>Aroon Down: {point.aroonDown}<br/>'},aroonDown:{styles:{lineWidth:1,lineColor:void 0}},dataGrouping:{approximation:"averages"}}),(0,u.extend)(I.prototype,{areaLinesNames:[],linesApiNames:["aroonDown"],nameBase:"Aroon",pointArrayMap:["y","aroonDown"],pointValKey:"y"}),L.compose(I),x().registerSeriesType("aroon",I);let{aroon:N}=x().seriesTypes;class F extends N{getValues(e,t){let s,a,o=[],i=[],r=[],n=super.getValues.call(this,e,t);for(a=0;a<n.yData.length;a++)s=n.yData[a][0]-n.yData[a][1],o.push([n.xData[a],s]),i.push(n.xData[a]),r.push(s);return{values:o,xData:i,yData:r}}}F.defaultOptions=(0,u.merge)(N.defaultOptions,{tooltip:{pointFormat:'<span style="color:{point.color}">●</span><b> {series.name}</b>: {point.y}'}}),(0,u.extend)(F.prototype,{nameBase:"Aroon Oscillator",linesApiNames:[],pointArrayMap:["y"],pointValKey:"y"}),L.compose(N),x().registerSeriesType("aroonoscillator",F);let{sma:B}=x().seriesTypes;function G(e,t){return Math.max(e[1]-e[2],void 0===t?0:Math.abs(e[1]-t[3]),void 0===t?0:Math.abs(e[2]-t[3]))}class W extends B{getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=[[a[0],o[0]]],n=[],l=[],p=[],h,d,c=0,g=1,m=0;if(!(a.length<=s)&&(0,u.isArray)(o[0])&&4===o[0].length){for(d=1;d<=i;d++){var y,f,x,v,D;!function(e,t,s,a){let o=t[a],i=s[a];e.push([o,i])}(r,a,o,d),s<g?(c=(y=a,f=o,x=d,v=s,D=c,h=[y[x-1],(D*(v-1)+G(f[x-1],f[x-2]))/v])[1],n.push(h),l.push(h[0]),p.push(h[1])):(s===g?(c=m/(d-1),n.push([a[d-1],c]),l.push(a[d-1]),p.push(c)):m+=G(o[d-1],o[d-2]),g++)}return{values:n,xData:l,yData:p}}}}W.defaultOptions=(0,u.merge)(B.defaultOptions,{params:{index:void 0}}),x().registerSeriesType("atr",W);let{sma:z}=x().seriesTypes;class Y extends z{init(){x().seriesTypes.sma.prototype.init.apply(this,arguments),this.options=(0,u.merge)({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)}getValues(e,t){let s,a,o,i,r,n,l,p,h,d=t.period,c=t.standardDeviation,g=[],m=[],y=e.xData,f=e.yData,v=f?f.length:0,D=[];if(y.length<d)return;let b=(0,u.isArray)(f[0]);for(h=d;h<=v;h++)r=y.slice(h-d,h),n=f.slice(h-d,h),i=(p=x().seriesTypes.sma.prototype.getValues.call(this,{xData:r,yData:n},t)).xData[0],s=p.yData[0],l=function(e,t,s,a){let o=e.length,i=0,r,n=0;for(;i<o;i++)n+=(r=(s?e[i][t]:e[i])-a)*r;return Math.sqrt(n/=o-1)}(n,t.index,b,s),a=s+c*l,o=s-c*l,D.push([i,a,s,o]),g.push(i),m.push([a,s,o]);return{values:D,xData:g,yData:m}}}Y.defaultOptions=(0,u.merge)(z.defaultOptions,{params:{period:20,standardDeviation:2,index:3},bottomLine:{styles:{lineWidth:1,lineColor:void 0}},topLine:{styles:{lineWidth:1,lineColor:void 0}},tooltip:{pointFormat:'<span style="color:{point.color}">●</span><b> {series.name}</b><br/>Top: {point.top}<br/>Middle: {point.middle}<br/>Bottom: {point.bottom}<br/>'},marker:{enabled:!1},dataGrouping:{approximation:"averages"}}),(0,u.extend)(Y.prototype,{areaLinesNames:["top","bottom"],linesApiNames:["topLine","bottomLine"],nameComponents:["period","standardDeviation"],pointArrayMap:["top","middle","bottom"],pointValKey:"middle"}),L.compose(Y),x().registerSeriesType("bb",Y);let{sma:X}=x().seriesTypes;class R extends X{getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=[],n=[],l=[],p=[],h,d,c=[],g,m=1,y,f,x,v;if(!(a.length<=s)&&(0,u.isArray)(o[0])&&4===o[0].length){for(;m<s;)d=o[m-1],r.push((d[1]+d[2]+d[3])/3),m++;for(v=s;v<=i;v++)f=((d=o[v-1])[1]+d[2]+d[3])/3,g=r.push(f),y=(c=r.slice(g-s)).reduce(function(e,t){return e+t},0)/s,x=function(e,t){let s=e.length,a=0,o;for(o=0;o<s;o++)a+=Math.abs(t-e[o]);return a}(c,y)/s,h=(f-y)/(.015*x),n.push([a[v-1],h]),l.push(a[v-1]),p.push(h);return{values:n,xData:l,yData:p}}}}R.defaultOptions=(0,u.merge)(X.defaultOptions,{params:{index:void 0}}),x().registerSeriesType("cci",R);let{sma:K}=x().seriesTypes;class j extends K{constructor(){super(...arguments),this.nameBase="Chaikin Money Flow"}isValid(){let e=this.chart,t=this.options,s=this.linkedParent,a=this.volumeSeries||(this.volumeSeries=e.get(t.params.volumeSeriesID)),o=s?.pointArrayMap?.length===4;function i(e){return e.dataTable.rowCount>=t.params.period}return!!(s&&a&&i(s)&&i(a)&&o)}getValues(e,t){if(this.isValid())return this.getMoneyFlow(e.xData,e.yData,this.volumeSeries.getColumn("y"),t.period)}getMoneyFlow(e,t,s,a){let o=t.length,i=[],r=[],n=[],l=[],p,u,h=-1,d=0,c=0;function g(e,t){let s=e[1],a=e[2],o=e[3];return null!==t&&null!==s&&null!==a&&null!==o&&s!==a?(o-a-(s-o))/(s-a)*t:(h=p,null)}if(a>0&&a<=o){for(p=0;p<a;p++)i[p]=g(t[p],s[p]),d+=s[p],c+=i[p];for(r.push(e[p-1]),n.push(p-h>=a&&0!==d?c/d:null),l.push([r[0],n[0]]);p<o;p++)i[p]=g(t[p],s[p]),d-=s[p-a],d+=s[p],c-=i[p-a],c+=i[p],u=[e[p],p-h>=a?c/d:null],r.push(u[0]),n.push(u[1]),l.push([u[0],u[1]])}return{values:l,xData:r,yData:n}}}j.defaultOptions=(0,u.merge)(K.defaultOptions,{params:{index:void 0,volumeSeriesID:"volume"}}),x().registerSeriesType("cmf",j);let{sma:H}=x().seriesTypes;class U extends H{calculateDM(e,t,s){let a,o=e[t][1],i=e[t][2],r=e[t-1][1],n=e[t-1][2];return a=o-r>n-i?s?Math.max(o-r,0):0:s?0:Math.max(n-i,0),(0,u.correctFloat)(a)}calculateDI(e,t){return e/t*100}calculateDX(e,t){return(0,u.correctFloat)(Math.abs(e-t)/Math.abs(e+t)*100)}smoothValues(e,t,s){return(0,u.correctFloat)(e-e/s+t)}getTR(e,t){return(0,u.correctFloat)(Math.max(e[1]-e[2],t?Math.abs(e[1]-t[3]):0,t?Math.abs(e[2]-t[3]):0))}getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=[],n=[],l=[];if(a.length<=s||!(0,u.isArray)(o[0])||4!==o[0].length)return;let p=0,h=0,d=0,c;for(c=1;c<i;c++){let e,t,i,u,g,m,y,f,x;c<=s?(u=this.calculateDM(o,c,!0),g=this.calculateDM(o,c),m=this.getTR(o[c],o[c-1]),p+=u,h+=g,d+=m,c===s&&(y=this.calculateDI(p,d),f=this.calculateDI(h,d),x=this.calculateDX(p,h),r.push([a[c],x,y,f]),n.push(a[c]),l.push([x,y,f]))):(u=this.calculateDM(o,c,!0),g=this.calculateDM(o,c),m=this.getTR(o[c],o[c-1]),e=this.smoothValues(p,u,s),t=this.smoothValues(h,g,s),i=this.smoothValues(d,m,s),p=e,h=t,d=i,y=this.calculateDI(p,d),f=this.calculateDI(h,d),x=this.calculateDX(p,h),r.push([a[c],x,y,f]),n.push(a[c]),l.push([x,y,f]))}return{values:r,xData:n,yData:l}}}U.defaultOptions=(0,u.merge)(H.defaultOptions,{params:{index:void 0},marker:{enabled:!1},tooltip:{pointFormat:'<span style="color: {point.color}">●</span><b> {series.name}</b><br/><span style="color: {point.color}">DX</span>: {point.y}<br/><span style="color: {point.series.options.plusDILine.styles.lineColor}">+DI</span>: {point.plusDI}<br/><span style="color: {point.series.options.minusDILine.styles.lineColor}">-DI</span>: {point.minusDI}<br/>'},plusDILine:{styles:{lineWidth:1,lineColor:"var(--highcharts-positive-color)"}},minusDILine:{styles:{lineWidth:1,lineColor:"var(--highcharts-negative-color)"}},dataGrouping:{approximation:"averages"}}),(0,u.extend)(U.prototype,{areaLinesNames:[],nameBase:"DMI",linesApiNames:["plusDILine","minusDILine"],pointArrayMap:["y","plusDI","minusDI"],parallelArrays:["x","y","plusDI","minusDI"],pointValKey:"y"}),L.compose(U),x().registerSeriesType("dmi",U);let{sma:Z}=x().seriesTypes;function _(e,t,s,a,o){let i=(0,u.pick)(t[s][a],t[s]);return o?(0,u.correctFloat)(e-i):(0,u.correctFloat)(e+i)}class q extends Z{getValues(e,t){let s=t.period,a=t.index,o=Math.floor(s/2+1),i=s+o,r=e.xData||[],n=e.yData||[],l=n.length,p=[],h=[],d=[],c,g,m,y,f,x=0;if(!(r.length<=i)){for(y=0;y<s-1;y++)x=_(x,n,y,a);for(f=0;f<=l-i;f++)g=f+s-1,m=f+i-1,x=_(x,n,g,a),c=(0,u.pick)(n[m][a],n[m])-x/s,x=_(x,n,f,a,!0),p.push([r[m],c]),h.push(r[m]),d.push(c);return{values:p,xData:h,yData:d}}}}q.defaultOptions=(0,u.merge)(Z.defaultOptions,{params:{index:0,period:21}}),(0,u.extend)(q.prototype,{nameBase:"DPO"}),x().registerSeriesType("dpo",q);let{ema:$}=x().seriesTypes;class J extends ${getValues(e,t){let s,a,o=t.periods,i=t.period,r=[],n=[],l=[];if(2!==o.length||o[1]<=o[0])return void(0,u.error)('Error: "Chaikin requires two periods. Notice, first period should be lower than the second one."');let p=T.prototype.getValues.call(this,e,{volumeSeriesID:t.volumeSeriesID,period:i});if(!p)return;let h=super.getValues.call(this,p,{period:o[0]}),d=super.getValues.call(this,p,{period:o[1]});if(!h||!d)return;let c=o[1]-o[0];for(a=0;a<d.yData.length;a++)s=(0,u.correctFloat)(h.yData[a+c]-d.yData[a]),r.push([d.xData[a],s]),n.push(d.xData[a]),l.push(s);return{values:r,xData:n,yData:l}}}J.defaultOptions=(0,u.merge)($.defaultOptions,{params:{index:void 0,volumeSeriesID:"volume",period:9,periods:[3,10]}}),(0,u.extend)(J.prototype,{nameBase:"Chaikin Osc",nameComponents:["periods"]}),x().registerSeriesType("chaikin",J);let{sma:Q}=x().seriesTypes;class ee extends Q{getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=[],n=[],l=[],p,h=t.index,d;if(a.length<s)return;(0,u.isNumber)(o[0])?d=o:(h=Math.min(h,o[0].length-1),d=o.map(e=>e[h]));let c=0,g=0,m=0,y;for(let e=s;e>0;e--)d[e]>d[e-1]?g+=d[e]-d[e-1]:d[e]<d[e-1]&&(m+=d[e-1]-d[e]);for(y=g+m>0?100*(g-m)/(g+m):0,n.push(a[s]),l.push(y),r.push([a[s],y]),p=s+1;p<i;p++)c=Math.abs(d[p-s-1]-d[p-s]),d[p]>d[p-1]?g+=d[p]-d[p-1]:d[p]<d[p-1]&&(m+=d[p-1]-d[p]),d[p-s]>d[p-s-1]?g-=c:m-=c,y=g+m>0?100*(g-m)/(g+m):0,n.push(a[p]),l.push(y),r.push([a[p],y]);return{values:r,xData:n,yData:l}}}ee.defaultOptions=(0,u.merge)(Q.defaultOptions,{params:{period:20,index:3}}),x().registerSeriesType("cmo",ee);let{ema:et}=x().seriesTypes;class es extends et{getEMA(e,t,s,a,o,i){return super.calculateEma(i||[],e,void 0===o?1:o,this.EMApercent,t,void 0===a?-1:a,s)}getValues(e,t){let s=t.period,a=[],o=2*s,i=e.xData,r=e.yData,n=r?r.length:0,l=[],p=[],h=[],d=0,c=0,g,m,y,f,x=-1,v,D=0;if(this.EMApercent=2/(s+1),!(n<2*s-1)){for((0,u.isArray)(r[0])&&(x=t.index?t.index:0),D=(d=super.accumulatePeriodPoints(s,x,r))/s,d=0,f=s;f<n+2;f++)f<n+1&&(c=this.getEMA(r,m,D,x,f)[1],a.push(c)),m=c,f<o?d+=c:(f===o&&(D=d/s),c=a[f-s-1],g=this.getEMA([c],y,D)[1],v=[i[f-2],(0,u.correctFloat)(2*c-g)],l.push(v),p.push(v[0]),h.push(v[1]),y=g);return{values:l,xData:p,yData:h}}}}es.defaultOptions=(0,u.merge)(et.defaultOptions),x().registerSeriesType("dema",es);let{ema:ea}=x().seriesTypes;class eo extends ea{getEMA(e,t,s,a,o,i){return super.calculateEma(i||[],e,void 0===o?1:o,this.EMApercent,t,void 0===a?-1:a,s)}getTemaPoint(e,t,s,a){return[e[a-3],(0,u.correctFloat)(3*s.level1-3*s.level2+s.level3)]}getValues(e,t){let s=t.period,a=2*s,o=3*s,i=e.xData,r=e.yData,n=r?r.length:0,l=[],p=[],h=[],d=[],c=[],g={},m=-1,y=0,f=0,x,v,D,b;if(this.EMApercent=2/(s+1),!(n<3*s-2)){for((0,u.isArray)(r[0])&&(m=t.index?t.index:0),f=(y=super.accumulatePeriodPoints(s,m,r))/s,y=0,D=s;D<n+3;D++)D<n+1&&(g.level1=this.getEMA(r,x,f,m,D)[1],d.push(g.level1)),x=g.level1,D<a?y+=g.level1:(D===a&&(f=y/s,y=0),g.level1=d[D-s-1],g.level2=this.getEMA([g.level1],v,f)[1],c.push(g.level2),v=g.level2,D<o?y+=g.level2:(D===o&&(f=y/s),D===n+1&&(g.level1=d[D-s-1],g.level2=this.getEMA([g.level1],v,f)[1],c.push(g.level2)),g.level1=d[D-s-2],g.level2=c[D-2*s-1],g.level3=this.getEMA([g.level2],g.prevLevel3,f)[1],(b=this.getTemaPoint(i,o,g,D))&&(l.push(b),p.push(b[0]),h.push(b[1])),g.prevLevel3=g.level3));return{values:l,xData:p,yData:h}}}}eo.defaultOptions=(0,u.merge)(ea.defaultOptions),x().registerSeriesType("tema",eo);let{tema:ei}=x().seriesTypes;class er extends ei{getTemaPoint(e,t,s,a){if(a>t)return[e[a-3],0!==s.prevLevel3?(0,u.correctFloat)(s.level3-s.prevLevel3)/s.prevLevel3*100:null]}}er.defaultOptions=(0,u.merge)(ei.defaultOptions),x().registerSeriesType("trix",er);let{ema:en}=x().seriesTypes;class el extends en{getValues(e,t){let s,a,o=t.periods,i=t.index,r=[],n=[],l=[];if(2!==o.length||o[1]<=o[0])return void(0,u.error)('Error: "APO requires two periods. Notice, first period should be lower than the second one."');let p=super.getValues.call(this,e,{index:i,period:o[0]}),h=super.getValues.call(this,e,{index:i,period:o[1]});if(!p||!h)return;let d=o[1]-o[0];for(a=0;a<h.yData.length;a++)s=p.yData[a+d]-h.yData[a],r.push([h.xData[a],s]),n.push(h.xData[a]),l.push(s);return{values:r,xData:n,yData:l}}}el.defaultOptions=(0,u.merge)(en.defaultOptions,{params:{period:void 0,periods:[10,20]}}),(0,u.extend)(el.prototype,{nameBase:"APO",nameComponents:["periods"]}),x().registerSeriesType("apo",el);var ep=l(956),eu=l.n(ep),eh=l(620);let{parse:ed}=l.n(eh)(),{sma:ec}=x().seriesTypes;function eg(e){return{high:e.reduce(function(e,t){return Math.max(e,t[1])},-1/0),low:e.reduce(function(e,t){return Math.min(e,t[2])},1/0)}}function em(e){let t=e.indicator;t.points=e.points,t.nextPoints=e.nextPoints,t.color=e.color,t.options=(0,u.merge)(e.options.senkouSpan.styles,e.gap),t.graph=e.graph,t.fillGraph=!0,x().seriesTypes.sma.prototype.drawGraph.call(t)}class ey extends ec{constructor(){super(...arguments),this.data=[],this.options={},this.points=[],this.graphCollection=[]}init(){super.init.apply(this,arguments),this.options=(0,u.merge)({tenkanLine:{styles:{lineColor:this.color}},kijunLine:{styles:{lineColor:this.color}},chikouLine:{styles:{lineColor:this.color}},senkouSpanA:{styles:{lineColor:this.color,fill:ed(this.color).setOpacity(.5).get()}},senkouSpanB:{styles:{lineColor:this.color,fill:ed(this.color).setOpacity(.5).get()}},senkouSpan:{styles:{fill:ed(this.color).setOpacity(.2).get()}}},this.options)}toYData(e){return[e.tenkanSen,e.kijunSen,e.chikouSpan,e.senkouSpanA,e.senkouSpanB]}translate(){for(let e of(x().seriesTypes.sma.prototype.translate.apply(this),this.points))for(let t of this.pointArrayMap){let s=e[t];(0,u.isNumber)(s)&&(e["plot"+t]=this.yAxis.toPixels(s,!0),e.plotY=e["plot"+t],e.tooltipPos=[e.plotX,e["plot"+t]],e.isNull=!1)}}drawGraph(){let e=this,t=e.points,s=e.options,a=e.graph,o=e.color,i={options:{gapSize:s.gapSize}},r=e.pointArrayMap.length,n=[[],[],[],[],[],[]],l={tenkanLine:n[0],kijunLine:n[1],chikouLine:n[2],senkouSpanA:n[3],senkouSpanB:n[4],senkouSpan:n[5]},p=[],h=e.options.senkouSpan,d=h.color||h.styles.fill,c=h.negativeColor,g=[[],[]],m=[[],[]],y=t.length,f=0,v,D,b,A,S,C,T,P,M,V,O,k,L;for(e.ikhMap=l;y--;){for(b=0,D=t[y];b<r;b++)v=e.pointArrayMap[b],(0,u.defined)(D[v])&&n[b].push({plotX:D.plotX,plotY:D["plot"+v],isNull:!1});if(c&&y!==t.length-1){let e=l.senkouSpanB.length-1,t=function(e,t,s,a){if(e&&t&&s&&a){let o=t.plotX-e.plotX,i=t.plotY-e.plotY,r=a.plotX-s.plotX,n=a.plotY-s.plotY,l=e.plotX-s.plotX,p=e.plotY-s.plotY,u=(-i*l+o*p)/(-r*i+o*n),h=(r*p-n*l)/(-r*i+o*n);if(u>=0&&u<=1&&h>=0&&h<=1)return{plotX:e.plotX+h*o,plotY:e.plotY+h*i}}}(l.senkouSpanA[e-1],l.senkouSpanA[e],l.senkouSpanB[e-1],l.senkouSpanB[e]);if(t){let s={plotX:t.plotX,plotY:t.plotY,isNull:!1,intersectPoint:!0};l.senkouSpanA.splice(e,0,s),l.senkouSpanB.splice(e,0,s),p.push(e)}}}if((0,u.objectEach)(l,(t,a)=>{s[a]&&"senkouSpan"!==a&&(e.points=n[f],e.options=(0,u.merge)(s[a].styles,i),e.graph=e["graph"+a],e.fillGraph=!1,e.color=o,x().seriesTypes.sma.prototype.drawGraph.call(e),e["graph"+a]=e.graph),f++}),e.graphCollection)for(let t of e.graphCollection)e[t].destroy(),delete e[t];if(e.graphCollection=[],c&&l.senkouSpanA[0]&&l.senkouSpanB[0]){for(p.unshift(0),p.push(l.senkouSpanA.length-1),k=0;k<p.length-1;k++)if(A=p[k],S=p[k+1],C=l.senkouSpanB.slice(A,S+1),T=l.senkouSpanA.slice(A,S+1),Math.floor(C.length/2)>=1){let e=Math.floor(C.length/2);if(C[e].plotY===T[e].plotY){for(L=0,P=0,M=0;L<C.length;L++)P+=C[L].plotY,M+=T[L].plotY;g[O=P>M?0:1]=g[O].concat(C),m[O]=m[O].concat(T)}else g[O=C[e].plotY>T[e].plotY?0:1]=g[O].concat(C),m[O]=m[O].concat(T)}else g[O=C[0].plotY>T[0].plotY?0:1]=g[O].concat(C),m[O]=m[O].concat(T);["graphsenkouSpanColor","graphsenkouSpanNegativeColor"].forEach(function(t,a){g[a].length&&m[a].length&&(V=0===a?d:c,em({indicator:e,points:g[a],nextPoints:m[a],color:V,options:s,gap:i,graph:e[t]}),e[t]=e.graph,e.graphCollection.push(t))})}else em({indicator:e,points:l.senkouSpanB,nextPoints:l.senkouSpanA,color:d,options:s,gap:i,graph:e.graphsenkouSpan}),e.graphsenkouSpan=e.graph;delete e.nextPoints,delete e.fillGraph,e.points=t,e.options=s,e.graph=a,e.color=o}getGraphPath(e){let t=[],s,a=[];if(e=e||this.points,this.fillGraph&&this.nextPoints){if((s=x().seriesTypes.sma.prototype.getGraphPath.call(this,this.nextPoints))&&s.length){s[0][0]="L",t=x().seriesTypes.sma.prototype.getGraphPath.call(this,e),a=s.slice(0,t.length);for(let e=a.length-1;e>=0;e--)t.push(a[e])}}else t=x().seriesTypes.sma.prototype.getGraphPath.apply(this,arguments);return t}getValues(e,t){let s,a,o,i,r,n,l,p,h,d,c=t.period,g=t.periodTenkan,m=t.periodSenkouSpanB,y=e.xData,f=e.yData,x=e.xAxis,v=f&&f.length||0,D=(0,u.getClosestDistance)(x.series.map(e=>e.getColumn("x"))),b=[],A=[];if(y.length<=c||!(0,u.isArray)(f[0])||4!==f[0].length)return;let S=y[0]-c*D;for(r=0;r<c;r++)A.push(S+r*D);for(r=0;r<v;r++)r>=g&&(n=((a=eg(f.slice(r-g,r))).high+a.low)/2),r>=c&&(h=(n+(l=((o=eg(f.slice(r-c,r))).high+o.low)/2))/2),r>=m&&(d=((i=eg(f.slice(r-m,r))).high+i.low)/2),p=f[r][3],s=y[r],void 0===b[r]&&(b[r]=[]),void 0===b[r+c-1]&&(b[r+c-1]=[]),b[r+c-1][0]=n,b[r+c-1][1]=l,b[r+c-1][2]=void 0,void 0===b[r+1]&&(b[r+1]=[]),b[r+1][2]=p,r<=c&&(b[r+c-1][3]=void 0,b[r+c-1][4]=void 0),void 0===b[r+2*c-2]&&(b[r+2*c-2]=[]),b[r+2*c-2][3]=h,b[r+2*c-2][4]=d,A.push(s);for(r=1;r<=c;r++)A.push(s+r*D);return{values:b,xData:A,yData:b}}}ey.defaultOptions=(0,u.merge)(ec.defaultOptions,{params:{index:void 0,period:26,periodTenkan:9,periodSenkouSpanB:52},marker:{enabled:!1},tooltip:{pointFormat:'<span style="color:{point.color}">●</span> <b> {series.name}</b><br/>TENKAN SEN: {point.tenkanSen:.3f}<br/>KIJUN SEN: {point.kijunSen:.3f}<br/>CHIKOU SPAN: {point.chikouSpan:.3f}<br/>SENKOU SPAN A: {point.senkouSpanA:.3f}<br/>SENKOU SPAN B: {point.senkouSpanB:.3f}<br/>'},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"}}),(0,u.extend)(ey.prototype,{pointArrayMap:["tenkanSen","kijunSen","chikouSpan","senkouSpanA","senkouSpanB"],pointValKey:"tenkanSen",nameComponents:["periodSenkouSpanB","period","periodTenkan"]}),eu()["ichimoku-averages"]=function(){let e,t=[];return[].forEach.call(arguments,function(s,a){t.push(eu().average(s)),e=!e&&void 0===t[a]}),e?void 0:t},x().registerSeriesType("ikh",ey);let{sma:ef}=x().seriesTypes;class ex extends ef{init(){x().seriesTypes.sma.prototype.init.apply(this,arguments),this.options=(0,u.merge)({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)}getValues(e,t){let s,a,o,i,r,n,l,p=t.period,h=t.periodATR,d=t.multiplierATR,c=t.index,g=e.yData,m=g?g.length:0,y=[],f=x().seriesTypes.ema.prototype.getValues(e,{period:p,index:c}),v=x().seriesTypes.atr.prototype.getValues(e,{period:h}),D=[],b=[];if(!(m<p)){for(l=p;l<=m;l++)r=f.values[l-p],n=v.values[l-h],i=r[0],a=(0,u.correctFloat)(r[1]+d*n[1]),o=(0,u.correctFloat)(r[1]-d*n[1]),s=r[1],y.push([i,a,s,o]),D.push(i),b.push([a,s,o]);return{values:y,xData:D,yData:b}}}}ex.defaultOptions=(0,u.merge)(ef.defaultOptions,{params:{index:0,period:20,periodATR:10,multiplierATR:2},bottomLine:{styles:{lineWidth:1,lineColor:void 0}},topLine:{styles:{lineWidth:1,lineColor:void 0}},tooltip:{pointFormat:'<span style="color:{point.color}">●</span><b> {series.name}</b><br/>Upper Channel: {point.top}<br/>EMA({series.options.params.period}): {point.middle}<br/>Lower Channel: {point.bottom}<br/>'},marker:{enabled:!1},dataGrouping:{approximation:"averages"},lineWidth:1}),(0,u.extend)(ex.prototype,{nameBase:"Keltner Channels",areaLinesNames:["top","bottom"],nameComponents:["period","periodATR","multiplierATR"],linesApiNames:["topLine","bottomLine"],pointArrayMap:["top","middle","bottom"],pointValKey:"middle"}),L.compose(ex),x().registerSeriesType("keltnerchannels",ex);let{ema:ev,sma:eD}=x().seriesTypes;class eb extends eD{calculateTrend(e,t){return e[t][1]+e[t][2]+e[t][3]>e[t-1][1]+e[t-1][2]+e[t-1][3]?1:-1}isValidData(e){let t=this.chart,s=this.options,a=this.linkedParent,o=(0,u.isArray)(e)&&4===e.length,i=this.volumeSeries||(this.volumeSeries=t.get(s.params.volumeSeriesID));return i||(0,u.error)("Series "+s.params.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,a.chart),!!([a,i].every(function(e){return e&&e.dataTable.rowCount>=s.params.slowAvgPeriod})&&o)}getCM(e,t,s,a,o){return(0,u.correctFloat)(t+(s===a?e:o))}getDM(e,t){return(0,u.correctFloat)(e-t)}getVolumeForce(e){let t=[],s=0,a,o=1,i=0,r=e[0][1]-e[0][2],n=0,l;for(;o<e.length;o++)l=this.calculateTrend(e,o),a=this.getDM(e[o][1],e[o][2]),s=this.getCM(i,a,l,n,r),t.push([this.volumeSeries.getColumn("y")[o]*l*Math.abs(2*(a/s-1))*100]),n=l,i=s,r=a;return t}getEMA(e,t,s,a,o,i,r){return ev.prototype.calculateEma(r||[],e,void 0===i?1:i,a,t,void 0===o?-1:o,s)}getSMA(e,t,s){return ev.prototype.accumulatePeriodPoints(e,t,s)/e}getValues(e,t){let s=[],a=e.xData,o=e.yData,i=[],r=[],n=[],l,p=0,h=0,d,c,g,m=null;if(!this.isValidData(o[0]))return;let y=this.getVolumeForce(o),f=this.getSMA(t.fastAvgPeriod,0,y),x=this.getSMA(t.slowAvgPeriod,0,y),v=2/(t.fastAvgPeriod+1),D=2/(t.slowAvgPeriod+1);for(;p<o.length;p++)p>=t.fastAvgPeriod&&(c=h=this.getEMA(y,c,f,v,0,p,a)[1]),p>=t.slowAvgPeriod&&(g=d=this.getEMA(y,g,x,D,0,p,a)[1],n.push(l=(0,u.correctFloat)(h-d)),n.length>=t.signalPeriod&&(m=n.slice(-t.signalPeriod).reduce((e,t)=>e+t)/t.signalPeriod),s.push([a[p],l,m]),i.push(a[p]),r.push([l,m]));return{values:s,xData:i,yData:r}}}eb.defaultOptions=(0,u.merge)(eD.defaultOptions,{params:{fastAvgPeriod:34,slowAvgPeriod:55,signalPeriod:13,volumeSeriesID:"volume"},signalLine:{styles:{lineWidth:1,lineColor:"#ff0000"}},dataGrouping:{approximation:"averages"},tooltip:{pointFormat:'<span style="color: {point.color}">●</span><b> {series.name}</b><br/><span style="color: {point.color}">Klinger</span>: {point.y}<br/><span style="color: {point.series.options.signalLine.styles.lineColor}">Signal</span>: {point.signal}<br/>'}}),(0,u.extend)(eb.prototype,{areaLinesNames:[],linesApiNames:["signalLine"],nameBase:"Klinger",nameComponents:["fastAvgPeriod","slowAvgPeriod"],pointArrayMap:["y","signal"],parallelArrays:["x","y","signal"],pointValKey:"y"}),L.compose(eb),x().registerSeriesType("klinger",eb);let{noop:eA}=h(),{sma:eS}=x().seriesTypes;class eC extends eS{init(){x().seriesTypes.sma.prototype.init.apply(this,arguments);let e=this.color,t=this.colorIndex;this.options&&((0,u.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=t}toYData(e){return[e.y,e.signal,e.MACD]}translate(){let e=this,t=["plotSignal","plotMACD"];h().seriesTypes.column.prototype.translate.apply(e),e.points.forEach(function(s){[s.signal,s.MACD].forEach(function(a,o){null!==a&&(s[t[o]]=e.yAxis.toPixels(a,!0))})})}destroy(){this.graph=null,this.graphmacd=this.graphmacd&&this.graphmacd.destroy(),this.graphsignal=this.graphsignal&&this.graphsignal.destroy(),x().seriesTypes.sma.prototype.destroy.apply(this,arguments)}drawGraph(){let e=this,t=e.points,s=e.options,a=e.zones,o={options:{gapSize:s.gapSize}},i=[[],[]],r,n=t.length;for(;n--;)r=t[n],(0,u.defined)(r.plotMACD)&&i[0].push({plotX:r.plotX,plotY:r.plotMACD,isNull:!(0,u.defined)(r.plotMACD)}),(0,u.defined)(r.plotSignal)&&i[1].push({plotX:r.plotX,plotY:r.plotSignal,isNull:!(0,u.defined)(r.plotMACD)});["macd","signal"].forEach((t,a)=>{e.points=i[a],e.options=(0,u.merge)(s[`${t}Line`]?.styles||{},o),e.graph=e[`graph${t}`],e.zones=(e[`${t}Zones`].zones||[]).slice(e[`${t}Zones`].startIndex||0),x().seriesTypes.sma.prototype.drawGraph.call(e),e[`graph${t}`]=e.graph}),e.points=t,e.options=s,e.zones=a}applyZones(){let e=this.zones;this.zones=this.signalZones.zones,x().seriesTypes.sma.prototype.applyZones.call(this),this.graphmacd&&this.options.macdLine.zones.length&&this.graphmacd.hide(),this.zones=e}getValues(e,t){let s=t.longPeriod-t.shortPeriod,a=[],o=[],i=[],r,n,l,p=0,h=[];if(!(e.xData.length<t.longPeriod+t.signalPeriod)){for(l=0,r=x().seriesTypes.ema.prototype.getValues(e,{period:t.shortPeriod,index:t.index}),n=x().seriesTypes.ema.prototype.getValues(e,{period:t.longPeriod,index:t.index}),r=r.values,n=n.values;l<=r.length;l++)(0,u.defined)(n[l])&&(0,u.defined)(n[l][1])&&(0,u.defined)(r[l+s])&&(0,u.defined)(r[l+s][0])&&a.push([r[l+s][0],0,null,r[l+s][1]-n[l][1]]);for(l=0;l<a.length;l++)o.push(a[l][0]),i.push([0,null,a[l][3]]);for(l=0,h=(h=x().seriesTypes.ema.prototype.getValues({xData:o,yData:i},{period:t.signalPeriod,index:2})).values;l<a.length;l++)a[l][0]>=h[0][0]&&(a[l][2]=h[p][1],i[l]=[0,h[p][1],a[l][3]],null===a[l][3]?(a[l][1]=0,i[l][0]=0):(a[l][1]=(0,u.correctFloat)(a[l][3]-h[p][1]),i[l][0]=(0,u.correctFloat)(a[l][3]-h[p][1])),p++);return{values:a,xData:o,yData:i}}}}eC.defaultOptions=(0,u.merge)(eS.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,u.extend)(eC.prototype,{nameComponents:["longPeriod","shortPeriod","signalPeriod"],pointArrayMap:["y","signal","MACD"],parallelArrays:["x","y","signal","MACD"],pointValKey:"y",markerAttribs:eA,getColumnMetrics:h().seriesTypes.column.prototype.getColumnMetrics,crispCol:h().seriesTypes.column.prototype.crispCol,drawPoints:h().seriesTypes.column.prototype.drawPoints}),x().registerSeriesType("macd",eC);let{sma:eT}=x().seriesTypes;function eP(e){return e.reduce(function(e,t){return e+t})}function eM(e){return(e[1]+e[2]+e[3])/3}class eV extends eT{getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=t.decimals,n=e.chart.get(t.volumeSeriesID),l=n?.getColumn("y")||[],p=[],h=[],d=[],c=[],g=[],m,y,f,x,v,D,b=!1,A=1;if(!n)return void(0,u.error)("Series "+t.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,e.chart);if(!(a.length<=s)&&(0,u.isArray)(o[0])&&4===o[0].length&&l){for(m=eM(o[A]);A<s+1;)y=m,b=(m=eM(o[A]))>=y,f=m*l[A],c.push(b?f:0),g.push(b?0:f),A++;for(D=A-1;D<i;D++){var S;D>A-1&&(c.shift(),g.shift(),y=m,b=(m=eM(o[D]))>y,f=m*l[D],c.push(b?f:0),g.push(b?0:f)),x=eP(g),S=100-100/(1+eP(c)/x),v=parseFloat(S.toFixed(r)),p.push([a[D],v]),h.push(a[D]),d.push(v)}return{values:p,xData:h,yData:d}}}}eV.defaultOptions=(0,u.merge)(eT.defaultOptions,{params:{index:void 0,volumeSeriesID:"volume",decimals:4}}),(0,u.extend)(eV.prototype,{nameBase:"Money Flow Index"}),x().registerSeriesType("mfi",eV);let{sma:eO}=x().seriesTypes;function ek(e,t,s,a,o){let i=t[s-1][o]-t[s-a-1][o];return[e[s-1],i]}class eL extends eO{getValues(e,t){let s,a,o=t.period,i=t.index,r=e.xData,n=e.yData,l=n?n.length:0,p=[],h=[],d=[];if(!(r.length<=o)&&(0,u.isArray)(n[0])){for(s=o+1;s<l;s++)a=ek(r,n,s,o,i),p.push(a),h.push(a[0]),d.push(a[1]);return a=ek(r,n,s,o,i),p.push(a),h.push(a[0]),d.push(a[1]),{values:p,xData:h,yData:d}}}}eL.defaultOptions=(0,u.merge)(eO.defaultOptions,{params:{index:3}}),(0,u.extend)(eL.prototype,{nameBase:"Momentum"}),x().registerSeriesType("momentum",eL);let{atr:ew}=x().seriesTypes;class eE extends ew{getValues(e,t){let s=super.getValues.apply(this,arguments),a=s.values.length,o=e.yData,i=0,r=t.period-1;if(s){for(;i<a;i++)s.yData[i]=s.values[i][1]/o[r][3]*100,s.values[i][1]=s.yData[i],r++;return s}}}eE.defaultOptions=(0,u.merge)(ew.defaultOptions,{tooltip:{valueSuffix:"%"}}),x().registerSeriesType("natr",eE);let{sma:eI}=x().seriesTypes;class eN extends eI{getValues(e,t){let s=e.chart.get(t.volumeSeriesID),a=e.xData,o=e.yData,i=[],r=[],n=[],l=!(0,u.isNumber)(o[0]),p=[],h=1,d=0,c=0,g=0,m=0,y;if(!s)return void(0,u.error)("Series "+t.volumeSeriesID+" not found! Check `volumeSeriesID`.",!0,e.chart);for(y=s.getColumn("y"),p=[a[0],d],g=l?o[0][3]:o[0],i.push(p),r.push(a[0]),n.push(p[1]);h<o.length;h++)c=(m=l?o[h][3]:o[h])>g?d+y[h]:m===g?d:d-y[h],p=[a[h],c],d=c,g=m,i.push(p),r.push(a[h]),n.push(p[1]);return{values:i,xData:r,yData:n}}}eN.defaultOptions=(0,u.merge)(eI.defaultOptions,{marker:{enabled:!1},params:{index:void 0,period:void 0,volumeSeriesID:"volume"},tooltip:{valueDecimals:0}}),(0,u.extend)(eN.prototype,{nameComponents:void 0}),x().registerSeriesType("obv",eN);let eF=x().seriesTypes.sma.prototype.pointClass;function eB(e,t){let s=e.series.pointArrayMap,a,o=s.length;for(x().seriesTypes.sma.prototype.pointClass.prototype[t].call(e);o--;)e[a="dataLabel"+s[o]]&&e[a].element&&e[a].destroy(),e[a]=null}let{sma:eG}=x().seriesTypes;class eW extends eG{toYData(e){return[e.P]}translate(){let e=this;super.translate.apply(e),e.points.forEach(function(t){e.pointArrayMap.forEach(function(s){(0,u.defined)(t[s])&&(t["plot"+s]=e.yAxis.toPixels(t[s],!0))})}),e.plotEndPoint=e.xAxis.toPixels(e.endPoint,!0)}getGraphPath(e){let t=this,s=[[],[],[],[],[],[],[],[],[]],a=t.pointArrayMap.length,o=t.plotEndPoint,i=[],r,n,l=e.length,p;for(;l--;){for(p=0,n=e[l];p<a;p++)r=t.pointArrayMap[p],(0,u.defined)(n[r])&&s[p].push({plotX:n.plotX,plotY:n["plot"+r],isNull:!1},{plotX:o,plotY:n["plot"+r],isNull:!1},{plotX:o,plotY:null,isNull:!0});o=n.plotX}return s.forEach(e=>{i=i.concat(super.getGraphPath.call(t,e))}),i}drawDataLabels(){let e,t,s,a,o=this,i=o.pointArrayMap;o.options.dataLabels.enabled&&(t=o.points.length,i.concat([!1]).forEach((r,n)=>{for(a=t;a--;)s=o.points[a],r?(s.y=s[r],s.pivotLine=r,s.plotY=s["plot"+r],e=s["dataLabel"+r],n&&(s["dataLabel"+i[n-1]]=s.dataLabel),s.dataLabels||(s.dataLabels=[]),s.dataLabels[0]=s.dataLabel=e=e&&e.element?e:null):s["dataLabel"+i[n-1]]=s.dataLabel;super.drawDataLabels.call(o)}))}getValues(e,t){let s,a,o,i,r,n,l,p=t.period,h=e.xData,d=e.yData,c=d?d.length:0,g=this[t.algorithm+"Placement"],m=[],y=[],f=[];if(!(h.length<p)&&(0,u.isArray)(d[0])&&4===d[0].length){for(l=p+1;l<=c+p;l+=p)o=h.slice(l-p-1,l),i=d.slice(l-p-1,l),a=o.length,s=o[a-1],n=g(this.getPivotAndHLC(i)),r=m.push([s].concat(n)),y.push(s),f.push(m[r-1].slice(1));return this.endPoint=o[0]+(s-o[0])/a*p,{values:m,xData:y,yData:f}}}getPivotAndHLC(e){let t=e[e.length-1][3],s=-1/0,a=1/0;return e.forEach(function(e){s=Math.max(s,e[1]),a=Math.min(a,e[2])}),[(s+a+t)/3,s,a,t]}standardPlacement(e){let t=e[1]-e[2];return[null,null,e[0]+t,2*e[0]-e[2],e[0],2*e[0]-e[1],e[0]-t,null,null]}camarillaPlacement(e){let t=e[1]-e[2];return[e[3]+1.5*t,e[3]+1.25*t,e[3]+1.1666*t,e[3]+1.0833*t,e[0],e[3]-1.0833*t,e[3]-1.1666*t,e[3]-1.25*t,e[3]-1.5*t]}fibonacciPlacement(e){let t=e[1]-e[2];return[null,e[0]+t,e[0]+.618*t,e[0]+.382*t,e[0],e[0]-.382*t,e[0]-.618*t,e[0]-t,null]}}eW.defaultOptions=(0,u.merge)(eG.defaultOptions,{params:{index:void 0,period:28,algorithm:"standard"},marker:{enabled:!1},enableMouseTracking:!1,dataLabels:{enabled:!0,format:"{point.pivotLine}"},dataGrouping:{approximation:"averages"}}),(0,u.extend)(eW.prototype,{nameBase:"Pivot Points",pointArrayMap:["R4","R3","R2","R1","P","S1","S2","S3","S4"],pointValKey:"P",pointClass:class extends eF{destroyElements(){eB(this,"destroyElements")}destroy(){eB(this,"destroyElements")}}}),x().registerSeriesType("pivotpoints",eW);let{ema:ez}=x().seriesTypes;class eY extends ez{getValues(e,t){let s,a,o=t.periods,i=t.index,r=[],n=[],l=[];if(2!==o.length||o[1]<=o[0])return void(0,u.error)('Error: "PPO requires two periods. Notice, first period should be lower than the second one."');let p=super.getValues.call(this,e,{index:i,period:o[0]}),h=super.getValues.call(this,e,{index:i,period:o[1]});if(!p||!h)return;let d=o[1]-o[0];for(a=0;a<h.yData.length;a++)s=(0,u.correctFloat)((p.yData[a+d]-h.yData[a])/h.yData[a]*100),r.push([h.xData[a],s]),n.push(h.xData[a]),l.push(s);return{values:r,xData:n,yData:l}}}eY.defaultOptions=(0,u.merge)(ez.defaultOptions,{params:{period:void 0,periods:[12,26]}}),(0,u.extend)(eY.prototype,{nameBase:"PPO",nameComponents:["periods"]}),x().registerSeriesType("ppo",eY);let eX=function(e,t,s){return e.reduce((e,a)=>[Math.min(e[0],a[t]),Math.max(e[1],a[s])],[Number.MAX_VALUE,-Number.MAX_VALUE])},{sma:eR}=x().seriesTypes;class eK extends eR{getValues(e,t){let s,a,o,i,r,n,l=t.period,p=e.xData,u=e.yData,h=u?u.length:0,d=[],c=[],g=[];if(!(h<l)){for(n=l;n<=h;n++)i=p[n-1],s=((a=(r=eX(u.slice(n-l,n),2,1))[1])+(o=r[0]))/2,d.push([i,a,s,o]),c.push(i),g.push([a,s,o]);return{values:d,xData:c,yData:g}}}}eK.defaultOptions=(0,u.merge)(eR.defaultOptions,{params:{index:void 0,period:20},lineWidth:1,topLine:{styles:{lineColor:"var(--highcharts-color-2)",lineWidth:1}},bottomLine:{styles:{lineColor:"var(--highcharts-color-8)",lineWidth:1}},dataGrouping:{approximation:"averages"}}),(0,u.extend)(eK.prototype,{areaLinesNames:["top","bottom"],nameBase:"Price Channel",nameComponents:["period"],linesApiNames:["topLine","bottomLine"],pointArrayMap:["top","middle","bottom"],pointValKey:"middle"}),L.compose(eK),x().registerSeriesType("pc",eK);let{sma:ej}=x().seriesTypes;class eH extends ej{init(){super.init.apply(this,arguments),this.options=(0,u.merge)({topLine:{styles:{lineColor:this.color}},bottomLine:{styles:{lineColor:this.color}}},this.options)}getValues(e,t){let s,a,o,i,r,n,l,p,h=t.period,d=t.topBand,c=t.bottomBand,g=e.xData,m=e.yData,y=m?m.length:0,f=[],x=[],v=[];if(!(g.length<h)&&(0,u.isArray)(m[0])&&4===m[0].length){for(p=h;p<=y;p++)r=g.slice(p-h,p),n=m.slice(p-h,p),i=(l=super.getValues({xData:r,yData:n},t)).xData[0],a=(s=l.yData[0])*(1+d),o=s*(1-c),f.push([i,a,s,o]),x.push(i),v.push([a,s,o]);return{values:f,xData:x,yData:v}}}}eH.defaultOptions=(0,u.merge)(ej.defaultOptions,{marker:{enabled:!1},tooltip:{pointFormat:'<span style="color:{point.color}">●</span><b> {series.name}</b><br/>Top: {point.top}<br/>Middle: {point.middle}<br/>Bottom: {point.bottom}<br/>'},params:{period:20,topBand:.1,bottomBand:.1},bottomLine:{styles:{lineWidth:1,lineColor:void 0}},topLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}}),(0,u.extend)(eH.prototype,{areaLinesNames:["top","bottom"],linesApiNames:["topLine","bottomLine"],nameComponents:["period","topBand","bottomBand"],nameBase:"Price envelopes",pointArrayMap:["top","middle","bottom"],parallelArrays:["x","y","top","bottom"],pointValKey:"middle"}),L.compose(eH),x().registerSeriesType("priceenvelopes",eH);let{sma:eU}=x().seriesTypes;function eZ(e,t){return parseFloat(e.toFixed(t))}class e_ extends eU{constructor(){super(...arguments),this.nameComponents=void 0}getValues(e,t){let s=e.xData,a=e.yData,o=t.maxAccelerationFactor,i=t.increment,r=t.initialAccelerationFactor,n=t.decimals,l=t.index,p=[],u=[],h=[],d=t.initialAccelerationFactor,c,g=a[0][1],m,y,f,x=1,v,D,b,A,S=a[0][2],C,T,P,M;if(!(l>=a.length)){for(M=0;M<l;M++)g=Math.max(a[M][1],g),S=Math.min(a[M][2],eZ(S,n));for(c=a[M][1]>S?1:-1,m=g-S,y=(d=t.initialAccelerationFactor)*m,p.push([s[l],S]),u.push(s[l]),h.push(eZ(S,n)),M=l+1;M<a.length;M++)if(v=a[M-1][2],D=a[M-2][2],b=a[M-1][1],A=a[M-2][1],T=a[M][1],P=a[M][2],null!==D&&null!==A&&null!==v&&null!==b&&null!==T&&null!==P){var V,O,k,L,w,E,I,N,F,B,G,W,z,Y,X,R,K,j,H,U,Z;w=c,E=x,I=S,N=y,F=D,B=v,G=b,W=A,z=g,S=w===E?1===w?I+N<Math.min(F,B)?I+N:Math.min(F,B):I+N>Math.max(W,G)?I+N:Math.max(W,G):z,V=c,O=g,C=1===V?T>O?T:O:P<O?P:O,k=x,L=S,Y=f=1===k&&P>L||-1===k&&T>L?1:-1,X=c,R=C,K=g,j=d,H=i,U=o,Z=r,y=(d=Y===X?1===Y&&R>K||-1===Y&&R<K?j===U?U:eZ(j+H,2):j:Z)*(m=C-S),p.push([s[M],eZ(S,n)]),u.push(s[M]),h.push(eZ(S,n)),x=c,c=f,g=C}return{values:p,xData:u,yData:h}}}}e_.defaultOptions=(0,u.merge)(eU.defaultOptions,{lineWidth:0,marker:{enabled:!0},states:{hover:{lineWidthPlus:0}},params:{period:void 0,initialAccelerationFactor:.02,maxAccelerationFactor:.2,increment:.02,index:2,decimals:4}}),x().registerSeriesType("psar",e_);let{sma:eq}=x().seriesTypes;class e$ extends eq{getValues(e,t){let s=t.period,a=e.xData,o=e.yData,i=o?o.length:0,r=[],n=[],l=[],p,h=-1,d;if(!(a.length<=s)){for((0,u.isArray)(o[0])&&(h=t.index),p=s;p<i;p+