ohlcv-indicators 2.1.7 → 2.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- var OHLCV_INDICATORS;(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{function r(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,i=function(){};return{s:i,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,u=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){c=!0,a=t},f:function(){try{u||null==r.return||r.return()}finally{if(c)throw a}}}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}t.r(e),t.d(e,{default:()=>rr});var o=function(t){return"string"==typeof t&&/^\d{4}-\d{2}-\d{2}/.test(t)},i=function(t){if(0!==t.lastComputedIndex)throw Error('ohlcv is already computed, you can not add new indicators after "compute", "getLastValues" , "getDataAsCols" or "getData" methods are called.')},a=1e6,u="[big.js] ",c=u+"Invalid ",l=c+"decimal places",s=c+"rounding mode",f=u+"Division by zero",h={},y=void 0,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function v(t,e,r,n){var o=t.c;if(r===y&&(r=t.constructor.RM),0!==r&&1!==r&&2!==r&&3!==r)throw Error(s);if(e<1)n=3===r&&(n||!!o[0])||0===e&&(1===r&&o[0]>=5||2===r&&(o[0]>5||5===o[0]&&(n||o[1]!==y))),o.length=1,n?(t.e=t.e-e+1,o[0]=1):o[0]=t.e=0;else if(e<o.length){if(n=1===r&&o[e]>=5||2===r&&(o[e]>5||5===o[e]&&(n||o[e+1]!==y||1&o[e-1]))||3===r&&(n||!!o[0]),o.length=e,n)for(;++o[--e]>9;)if(o[e]=0,0===e){++t.e,o.unshift(1);break}for(e=o.length;!o[--e];)o.pop()}return t}function d(t,e,r){var n=t.e,o=t.c.join(""),i=o.length;if(e)o=o.charAt(0)+(i>1?"."+o.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)o="0"+o;o="0."+o}else if(n>0)if(++n>i)for(n-=i;n--;)o+="0";else n<i&&(o=o.slice(0,n)+"."+o.slice(n));else i>1&&(o=o.charAt(0)+"."+o.slice(1));return t.s<0&&r?"-"+o:o}function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function m(t){var e="function"==typeof Map?new Map:void 0;return m=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return function(t,e,r){if(g())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,e);var o=new(t.bind.apply(t,n));return r&&w(o,r.prototype),o}(t,arguments,O(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),w(r,t)},m(t)}function g(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(g=function(){return!!t})()}function w(t,e){return w=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},w(t,e)}function O(t){return O=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},O(t)}h.abs=function(){var t=new this.constructor(this);return t.s=1,t},h.cmp=function(t){var e,r=this,n=r.c,o=(t=new r.constructor(t)).c,i=r.s,a=t.s,u=r.e,c=t.e;if(!n[0]||!o[0])return n[0]?i:o[0]?-a:0;if(i!=a)return i;if(e=i<0,u!=c)return u>c^e?1:-1;for(a=(u=n.length)<(c=o.length)?u:c,i=-1;++i<a;)if(n[i]!=o[i])return n[i]>o[i]^e?1:-1;return u==c?0:u>c^e?1:-1},h.div=function(t){var e=this,r=e.constructor,n=e.c,o=(t=new r(t)).c,i=e.s==t.s?1:-1,u=r.DP;if(u!==~~u||u<0||u>a)throw Error(l);if(!o[0])throw Error(f);if(!n[0])return t.s=i,t.c=[t.e=0],t;var c,s,h,p,d,b=o.slice(),m=c=o.length,g=n.length,w=n.slice(0,c),O=w.length,S=t,j=S.c=[],_=0,P=u+(S.e=e.e-t.e)+1;for(S.s=i,i=P<0?0:P,b.unshift(0);O++<c;)w.push(0);do{for(h=0;h<10;h++){if(c!=(O=w.length))p=c>O?1:-1;else for(d=-1,p=0;++d<c;)if(o[d]!=w[d]){p=o[d]>w[d]?1:-1;break}if(!(p<0))break;for(s=O==c?o:b;O;){if(w[--O]<s[O]){for(d=O;d&&!w[--d];)w[d]=9;--w[d],w[O]+=10}w[O]-=s[O]}for(;!w[0];)w.shift()}j[_++]=p?h:++h,w[0]&&p?w[O]=n[m]||0:w=[n[m]]}while((m++<g||w[0]!==y)&&i--);return j[0]||1==_||(j.shift(),S.e--,P--),_>P&&v(S,P,r.RM,w[0]!==y),S},h.eq=function(t){return 0===this.cmp(t)},h.gt=function(t){return this.cmp(t)>0},h.gte=function(t){return this.cmp(t)>-1},h.lt=function(t){return this.cmp(t)<0},h.lte=function(t){return this.cmp(t)<1},h.minus=h.sub=function(t){var e,r,n,o,i=this,a=i.constructor,u=i.s,c=(t=new a(t)).s;if(u!=c)return t.s=-c,i.plus(t);var l=i.c.slice(),s=i.e,f=t.c,h=t.e;if(!l[0]||!f[0])return f[0]?t.s=-c:l[0]?t=new a(i):t.s=1,t;if(u=s-h){for((o=u<0)?(u=-u,n=l):(h=s,n=f),n.reverse(),c=u;c--;)n.push(0);n.reverse()}else for(r=((o=l.length<f.length)?l:f).length,u=c=0;c<r;c++)if(l[c]!=f[c]){o=l[c]<f[c];break}if(o&&(n=l,l=f,f=n,t.s=-t.s),(c=(r=f.length)-(e=l.length))>0)for(;c--;)l[e++]=0;for(c=e;r>u;){if(l[--r]<f[r]){for(e=r;e&&!l[--e];)l[e]=9;--l[e],l[r]+=10}l[r]-=f[r]}for(;0===l[--c];)l.pop();for(;0===l[0];)l.shift(),--h;return l[0]||(t.s=1,l=[h=0]),t.c=l,t.e=h,t},h.mod=function(t){var e,r=this,n=r.constructor,o=r.s,i=(t=new n(t)).s;if(!t.c[0])throw Error(f);return r.s=t.s=1,e=1==t.cmp(r),r.s=o,t.s=i,e?new n(r):(o=n.DP,i=n.RM,n.DP=n.RM=0,r=r.div(t),n.DP=o,n.RM=i,this.minus(r.times(t)))},h.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},h.plus=h.add=function(t){var e,r,n,o=this,i=o.constructor;if(t=new i(t),o.s!=t.s)return t.s=-t.s,o.minus(t);var a=o.e,u=o.c,c=t.e,l=t.c;if(!u[0]||!l[0])return l[0]||(u[0]?t=new i(o):t.s=o.s),t;if(u=u.slice(),e=a-c){for(e>0?(c=a,n=l):(e=-e,n=u),n.reverse();e--;)n.push(0);n.reverse()}for(u.length-l.length<0&&(n=l,l=u,u=n),e=l.length,r=0;e;u[e]%=10)r=(u[--e]=u[e]+l[e]+r)/10|0;for(r&&(u.unshift(r),++c),e=u.length;0===u[--e];)u.pop();return t.c=u,t.e=c,t},h.pow=function(t){var e=this,r=new e.constructor("1"),n=r,o=t<0;if(t!==~~t||t<-1e6||t>1e6)throw Error(c+"exponent");for(o&&(t=-t);1&t&&(n=n.times(e)),t>>=1;)e=e.times(e);return o?r.div(n):n},h.prec=function(t,e){if(t!==~~t||t<1||t>a)throw Error(c+"precision");return v(new this.constructor(this),t,e)},h.round=function(t,e){if(t===y)t=0;else if(t!==~~t||t<-a||t>a)throw Error(l);return v(new this.constructor(this),t+this.e+1,e)},h.sqrt=function(){var t,e,r,n=this,o=n.constructor,i=n.s,a=n.e,c=new o("0.5");if(!n.c[0])return new o(n);if(i<0)throw Error(u+"No square root");0===(i=Math.sqrt(n+""))||i===1/0?((e=n.c.join("")).length+a&1||(e+="0"),a=((a+1)/2|0)-(a<0||1&a),t=new o(((i=Math.sqrt(e))==1/0?"5e":(i=i.toExponential()).slice(0,i.indexOf("e")+1))+a)):t=new o(i+""),a=t.e+(o.DP+=4);do{r=t,t=c.times(r.plus(n.div(r)))}while(r.c.slice(0,a).join("")!==t.c.slice(0,a).join(""));return v(t,(o.DP-=4)+t.e+1,o.RM)},h.times=h.mul=function(t){var e,r=this,n=r.constructor,o=r.c,i=(t=new n(t)).c,a=o.length,u=i.length,c=r.e,l=t.e;if(t.s=r.s==t.s?1:-1,!o[0]||!i[0])return t.c=[t.e=0],t;for(t.e=c+l,a<u&&(e=o,o=i,i=e,l=a,a=u,u=l),e=new Array(l=a+u);l--;)e[l]=0;for(c=u;c--;){for(u=0,l=a+c;l>c;)u=e[l]+i[c]*o[l-c-1]+u,e[l--]=u%10,u=u/10|0;e[l]=u}for(u?++t.e:e.shift(),c=e.length;!e[--c];)e.pop();return t.c=e,t},h.toExponential=function(t,e){var r=this,n=r.c[0];if(t!==y){if(t!==~~t||t<0||t>a)throw Error(l);for(r=v(new r.constructor(r),++t,e);r.c.length<t;)r.c.push(0)}return d(r,!0,!!n)},h.toFixed=function(t,e){var r=this,n=r.c[0];if(t!==y){if(t!==~~t||t<0||t>a)throw Error(l);for(t=t+(r=v(new r.constructor(r),t+r.e+1,e)).e+1;r.c.length<t;)r.c.push(0)}return d(r,!1,!!n)},h[Symbol.for("nodejs.util.inspect.custom")]=h.toJSON=h.toString=function(){var t=this,e=t.constructor;return d(t,t.e<=e.NE||t.e>=e.PE,!!t.c[0])},h.toNumber=function(){var t=Number(d(this,!0,!0));if(!0===this.constructor.strict&&!this.eq(t.toString()))throw Error(u+"Imprecise conversion");return t},h.toPrecision=function(t,e){var r=this,n=r.constructor,o=r.c[0];if(t!==y){if(t!==~~t||t<1||t>a)throw Error(c+"precision");for(r=v(new n(r),t,e);r.c.length<t;)r.c.push(0)}return d(r,t<=r.e||r.e<=n.NE||r.e>=n.PE,!!o)},h.valueOf=function(){var t=this,e=t.constructor;if(!0===e.strict)throw Error(u+"valueOf disallowed");return d(t,t.e<=e.NE||t.e>=e.PE,!0)},function t(){function e(r){var n=this;if(!(n instanceof e))return r===y?t():new e(r);if(r instanceof e)n.s=r.s,n.e=r.e,n.c=r.c.slice();else{if("string"!=typeof r){if(!0===e.strict&&"bigint"!=typeof r)throw TypeError(c+"value");r=0===r&&1/r<0?"-0":String(r)}!function(t,e){var r,n,o;if(!p.test(e))throw Error(c+"number");for(t.s="-"==e.charAt(0)?(e=e.slice(1),-1):1,(r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),o=e.length,n=0;n<o&&"0"==e.charAt(n);)++n;if(n==o)t.c=[t.e=0];else{for(;o>0&&"0"==e.charAt(--o););for(t.e=r-n-1,t.c=[],r=0;n<=o;)t.c[r++]=+e.charAt(n++)}}(n,r)}n.constructor=e}return e.prototype=h,e.DP=20,e.RM=1,e.NE=-7,e.PE=21,e.strict=!1,e.roundDown=0,e.roundHalfUp=1,e.roundHalfEven=2,e.roundUp=3,e}();var S=function(t){function e(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Not enough data";return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),t=function(t,e,r){return e=O(e),function(t,e){if(e&&("object"==b(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,g()?Reflect.construct(e,r||[],O(t).constructor):e.apply(t,r))}(this,e,[r]),Object.setPrototypeOf(t,(this instanceof e?this.constructor:void 0).prototype),t.name="NotEnoughDataError",t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&w(t,e)}(e,t),r=e,Object.defineProperty(r,"prototype",{writable:!1}),r;var r}(m(Error));function j(t){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},j(t)}function _(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,A(n.key),n)}}function P(t,e,r){return(e=A(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function A(t){var e=function(t,e){if("object"!=j(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=j(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==j(e)?e:e+""}var E=function(){return t=function t(){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),P(this,"previousHighest",void 0),P(this,"highest",void 0),P(this,"previousLowest",void 0),P(this,"lowest",void 0),P(this,"previousResult",void 0),P(this,"result",void 0)},(e=[{key:"isStable",get:function(){return void 0!==this.result}},{key:"getResult",value:function(){if(void 0===this.result)throw new S;return this.result}},{key:"setResult",value:function(t,e){return e&&(this.highest=this.previousHighest,this.lowest=this.previousLowest,this.result=this.previousResult),void 0===this.highest?this.highest=t:t>this.highest?(this.previousHighest=this.highest,this.highest=t):this.previousHighest=this.highest,void 0===this.lowest?this.lowest=t:t<this.lowest?(this.previousLowest=this.lowest,this.lowest=t):this.previousLowest=this.lowest,this.previousResult=this.result,this.result=t}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&_(t.prototype,e),r&&_(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function k(t){return k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},k(t)}function T(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}function I(t,e,r){return e=x(e),function(t,e){if(e&&("object"==k(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,M()?Reflect.construct(e,r||[],x(t).constructor):e.apply(t,r))}function M(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(M=function(){return!!t})()}function x(t){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},x(t)}function R(t,e){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},R(t,e)}function C(t){var e=function(t,e){if("object"!=k(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=k(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==k(e)?e:e+""}var D=function(t){function e(t){var r,n,o,i;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),n=r=I(this,e),i=void 0,(o=C(o="interval"))in n?Object.defineProperty(n,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[o]=i,r.interval=t,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&R(t,e)}(e,t),r=e,(n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&T(r.prototype,n),o&&T(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function B(t){return B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},B(t)}function L(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,U(n.key),n)}}function z(t,e,r){return e=H(e),function(t,e){if(e&&("object"==B(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,V()?Reflect.construct(e,r||[],H(t).constructor):e.apply(t,r))}function V(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(V=function(){return!!t})()}function H(t){return H=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},H(t)}function N(t,e){return N=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},N(t,e)}function U(t){var e=function(t,e){if("object"!=B(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=B(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==B(e)?e:e+""}var $=function(t){function e(){var t,r,n,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var i=arguments.length,a=new Array(i),u=0;u<i;u++)a[u]=arguments[u];return r=t=z(this,e,[].concat(a)),o=[],(n=U(n="prices"))in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&N(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.prices.length&&e?this.prices[this.prices.length-1]=t:this.prices.push(t),this.prices.length>this.interval&&this.prices.shift(),this.prices.length===this.interval){var r=this.prices.reduce((function(t,e){return t+e}),0);return this.setResult(r/this.prices.length,e)}}}],n&&L(r.prototype,n),o&&L(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(D);function q(t){return q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},q(t)}function F(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,W(n.key),n)}}function G(t,e,r){return e=K(e),function(t,e){if(e&&("object"==q(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,J()?Reflect.construct(e,r||[],K(t).constructor):e.apply(t,r))}function J(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(J=function(){return!!t})()}function K(t){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},K(t)}function Y(t,e){return Y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Y(t,e)}function Q(t,e,r){return(e=W(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function W(t){var e=function(t,e){if("object"!=q(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==q(e)?e:e+""}var X=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Q(r=G(this,e),"interval",void 0),Q(r,"indicator",void 0),Q(r,"smoothingFactor",void 0),r.interval=t,r.indicator=new $(t),r.smoothingFactor=1/r.interval,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Y(t,e)}(e,t),r=e,n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.indicator.update(t);if(e&&void 0!==this.previousResult){var n=(t-this.previousResult)*this.smoothingFactor;return this.setResult(n+this.previousResult,e)}if(!e&&void 0!==this.result){var o=(t-this.result)*this.smoothingFactor;return this.setResult(o+this.result,e)}if(void 0===this.result&&void 0!==r)return this.setResult(r,e)}}],n&&F(r.prototype,n),o&&F(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function Z(t){return t.length?t.reduce((function(t,e){return t+e}),0)/t.length:0}function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}function et(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,nt(n.key),n)}}function rt(t,e,r){return(e=nt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function nt(t){var e=function(t,e){if("object"!=tt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=tt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==tt(e)?e:e+""}var ot=function(){return t=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),rt(this,"interval",void 0),rt(this,"deviationMultiplier",void 0),rt(this,"prices",[]),rt(this,"result",void 0),this.interval=e,this.deviationMultiplier=r},(e=[{key:"update",value:function(t){if(this.prices.push(t),this.prices.length>this.interval){this.prices.shift();var e=Z(this.prices),r=function(t,e){var r=e||Z(t),n=Z(t.map((function(t){return t-r})).map((function(t){return t*t})));return Math.sqrt(n)}(this.prices,e);return this.result={lower:e-r*this.deviationMultiplier,middle:e,upper:e+r*this.deviationMultiplier}}}},{key:"getResult",value:function(){if(void 0===this.result)throw new S;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}}])&&et(t.prototype,e),r&&et(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function it(t){return it="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},it(t)}function at(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ht(n.key),n)}}function ut(t,e,r){return e=lt(e),function(t,e){if(e&&("object"==it(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,ct()?Reflect.construct(e,r||[],lt(t).constructor):e.apply(t,r))}function ct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(ct=function(){return!!t})()}function lt(t){return lt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},lt(t)}function st(t,e){return st=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},st(t,e)}function ft(t,e,r){return(e=ht(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ht(t){var e=function(t,e){if("object"!=it(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=it(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==it(e)?e:e+""}var yt=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),ft(r=ut(this,e,[t]),"interval",void 0),ft(r,"pricesCounter",0),ft(r,"weightFactor",void 0),r.interval=t,r.weightFactor=2/(r.interval+1),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&st(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?e&&0===this.pricesCounter&&this.pricesCounter++:this.pricesCounter++,e&&void 0!==this.previousResult?this.setResult(t*this.weightFactor+this.previousResult*(1-this.weightFactor),e):this.setResult(t*this.weightFactor+(void 0!==this.result?this.result:t)*(1-this.weightFactor),e)}},{key:"getResult",value:function(){if(this.pricesCounter<this.interval)throw new S;return this.result}},{key:"isStable",get:function(){try{return this.getResult(),!0}catch(t){return!1}}}],n&&at(r.prototype,n),o&&at(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(D);function pt(t){return pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pt(t)}function vt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,bt(n.key),n)}}function dt(t,e,r){return(e=bt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function bt(t){var e=function(t,e){if("object"!=pt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=pt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==pt(e)?e:e+""}var mt=function(){return t=function t(e,r,n){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),dt(this,"short",void 0),dt(this,"long",void 0),dt(this,"signal",void 0),dt(this,"prices",[]),dt(this,"result",void 0),this.short=e,this.long=r,this.signal=n},e=[{key:"getResult",value:function(){if(void 0===this.result)throw new S;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.prices.length&&e?this.prices[this.prices.length-1]=t:this.prices.push(t);var r=this.short.update(t,e),n=this.long.update(t,e);if(this.prices.length>this.long.interval&&this.prices.shift(),this.prices.length===this.long.interval){var o=r-n,i=this.signal.update(o,e);return this.result={histogram:o-i,macd:o,signal:i}}}}],e&&vt(t.prototype,e),r&&vt(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function gt(t){return gt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gt(t)}function wt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,At(n.key),n)}}function Ot(t,e,r){return e=jt(e),function(t,e){if(e&&("object"==gt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,St()?Reflect.construct(e,r||[],jt(t).constructor):e.apply(t,r))}function St(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(St=function(){return!!t})()}function jt(t){return jt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},jt(t)}function _t(t,e){return _t=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_t(t,e)}function Pt(t,e,r){return(e=At(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function At(t){var e=function(t,e){if("object"!=gt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=gt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==gt(e)?e:e+""}var Et=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:X;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Pt(r=Ot(this,e),"interval",void 0),Pt(r,"previousPrices",[]),Pt(r,"avgGain",void 0),Pt(r,"avgLoss",void 0),Pt(r,"maxValue",100),r.interval=t,r.avgGain=new n(r.interval),r.avgLoss=new n(r.interval),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_t(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.previousPrices.length&&e?this.previousPrices[this.previousPrices.length-1]=t:this.previousPrices.push(t),!(this.previousPrices.length<2)){var r=t,n=this.previousPrices[this.previousPrices.length-2];if(r>n?(this.avgLoss.update(0,e),this.avgGain.update(t-n,e)):(this.avgLoss.update(n-r,e),this.avgGain.update(0,e)),this.avgGain.isStable){var o=this.avgLoss.getResult();if(0===o)return this.setResult(100,e);var i=this.avgGain.getResult()/o;return this.setResult(this.maxValue-this.maxValue/(i+1),e)}}}}],n&&wt(r.prototype,n),o&&wt(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function kt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Tt=function(t){var e=1/(arguments.length>1&&void 0!==arguments[1]?arguments[1]:.1);return Math.round(t*e)/e},It=function(t){return t.replace(/(?!^-)[^0-9.]/g,"")},Mt=function(t){for(var e=t.row,r=t.precisionMultiplier,n=t.priceBased,o={},i=0,a=Object.entries(e);i<a.length;i++){var u=(s=a[i],f=2,function(t){if(Array.isArray(t))return t}(s)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(s,f)||function(t,e){if(t){if("string"==typeof t)return kt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?kt(t,e):void 0}}(s,f)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=u[0],l=u[1];n.includes(c)&&(l/=r),o[c]=l}var s,f;return o};function xt(t){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xt(t)}function Rt(t){return function(t){if(Array.isArray(t))return Ct(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ct(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ct(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ct(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Dt(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=xt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=xt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==xt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Bt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.05;if(null==t||null==e)return null;var n=t>=0,o=Math.abs(t),i=e.upper,a=e.middle,u=e.lower;if(o<u)return 0;if(o>i)return n?1:-1;var c=Number.EPSILON*Math.max(o,Math.abs(a));if(Math.abs(o-a)<c)return n?.5:-.5;if(i===u)return null;var l=Tt((o-u)/(i-u),r);return n?l:-l};function Lt(t){return Lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Lt(t)}function zt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=Ht(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Vt(t){return function(t){if(Array.isArray(t))return Nt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ht(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ht(t,e){if(t){if("string"==typeof t)return Nt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Nt(t,e):void 0}}function Nt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Ut={ema:yt,sma:$},$t=function(t,e,r,n){if(!r||"object"!==Lt(r))throw new Error('"options" must be an object in '.concat(t,". eg: {target, height, range}"));var o=r.target,i=void 0===o?"close":o,a=r.diff,u=void 0===a?null:a;if("string"!=typeof i)throw new Error('"target" must be a valid keyName '.concat(t,"."));if("number"!=typeof e||e<=0)throw new Error('"size" must be a positive number in '.concat(t,"."));var c={target:i,diff:null};if(null!==u&&("object"===Lt(u)||"boolean"==typeof u&&!0===u)){var l=u=!0===u?{}:u,s=l.stdDev,f=void 0===s?2:s,h=l.scale,y=void 0===h?.05:h,p=l.targets,v=void 0===p?["close"]:p,d=l.size,b=void 0===d?e:d,m=l.lag,g=void 0===m?0:m;if("number"!=typeof f||f<=0)throw new Error('"diff.stdDev" must be a number greater than 0 in '.concat(t,"."));if("number"!=typeof y||!n.includes(y))throw new Error('"diff.scale" must be a number between 0.01 and 1 in '.concat(t,"."));if("number"!=typeof b||!Number.isInteger(b)||b<=0)throw new Error('"diff.size" must be an integer greater than or equal to size in '.concat(t,"."));if(!Array.isArray(v))throw new Error('"diff.targest" must be an array of keyNames with at least 1 item in '.concat(t,"."));if("number"!=typeof g||!Number.isInteger(g)||g<0)throw new Error('"diff.lag" must be an integer greater than 0 in '.concat(t,"."));c.diff={stdDev:f,scale:y,size:b,targets:v,lag:g}}return c};function qt(t){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qt(t)}function Ft(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=qt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=qt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==qt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Gt(t){return function(t){if(Array.isArray(t))return Jt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Jt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Jt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Kt="close";function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}function Qt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Wt(t){return Wt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wt(t)}function Xt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=te(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Zt(t){return function(t){if(Array.isArray(t))return ee(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||te(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(t,e){if(t){if("string"==typeof t)return ee(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ee(t,e):void 0}}function ee(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function re(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function ne(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Wt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Wt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Wt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function oe(t){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},oe(t)}function ie(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ue(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function ae(t){return function(t){if(Array.isArray(t))return ce(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||ue(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(t,e){if(t){if("string"==typeof t)return ce(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ce(t,e):void 0}}function ce(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function le(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function se(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=oe(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==oe(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var he=function(t,e){return t-e};function ye(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||ve(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pe(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ve(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function ve(t,e){if(t){if("string"==typeof t)return de(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?de(t,e):void 0}}function de(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}var me=function(t,e){if(0===e){var r=t.inputParams.filter((function(t){return"lag"===t.key}));if("object"!==be(r))return;var n,o=r.map((function(t){return t.params})),i=pe(o);try{for(i.s();!(n=i.n()).done;){var a,u=ye(n.value,2),c=u[0],l=u[1],s=pe(c);try{for(s.s();!(a=s.n()).done;){var f=a.value;if(t.priceBased.includes(f))for(var h=1;h<=l;h++)t.priceBased.push("".concat(f,"_lag_").concat(h))}}catch(t){s.e(t)}finally{s.f()}}}catch(t){i.e(t)}finally{i.f()}t.instances.lag={lagParams:o}}var y,p,v=pe(t.instances.lag.lagParams);try{for(v.s();!(y=v.n()).done;){var d,b=ye(y.value,2),m=b[0],g=b[1],w=pe(m);try{for(w.s();!(d=w.n()).done;){var O=d.value,S=t.verticalOhlcv[O];if(0===e)for(var j=1;j<=g;j++){var _="".concat(O,"_lag_").concat(j);t.verticalOhlcv[_]=function(t){if(Array.isArray(t))return de(t)}(p=t.nullArray)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(p)||ve(p)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}for(var P=1;P<=g;P++){var A="".concat(O,"_lag_").concat(P),E=e-P;if(E<=0)break;t.pushToMain({index:e,key:A,value:S[E]})}}}catch(t){w.e(t)}finally{w.f()}}}catch(t){v.e(t)}finally{v.f()}return!0};function ge(t,e){if(t){if("string"==typeof t)return we(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?we(t,e):void 0}}function we(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Oe(t){return Oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Oe(t)}function Se(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,je(n.key),n)}}function je(t){var e=function(t,e){if("object"!=Oe(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Oe(e)?e:e+""}var _e=function(t,e){return t>e},Pe=function(t,e){return t<e},Ae=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object.assign(this,{interval:0,prevState:.5,prevFast:null,prevSlow:null,prevHigh:null,prevLow:null,areHighAndLowUndefined:!1,index:0,crossIndexes:{up:[],down:[]}})},(e=[{key:"update",value:function(t){var e=t.fast,r=t.high,n=t.slow,o=t.low,i=this.prevState;this.areHighAndLowUndefined||void 0!==r&&void 0!==o||(this.areHighAndLowUndefined=!0),null===e||null===n||function(t,e){return t===e}(e,n)?i=.5:_e(e,n)?i=this.areHighAndLowUndefined?1:[o,n,this.prevLow,this.prevSlow].every((function(t){return null!==t}))&&Pe(o,n)&&_e(this.prevLow,this.prevSlow)?0:1:Pe(e,n)&&(i=this.areHighAndLowUndefined?0:[r,n,this.prevHigh,this.prevSlow].every((function(t){return null!==t}))&&_e(r,n)&&Pe(this.prevHigh,this.prevSlow)?1:0),.5===i?this.interval=0:1===i?this.prevState<=.5?this.interval=1:this.interval++:0===i&&(this.prevState>=.5?this.interval=-1:this.interval--),1===this.interval&&this.crossIndexes.up.push(this.index),-1===this.interval&&this.crossIndexes.down.push(this.index),Object.assign(this,{index:this.index+1,prevState:i,prevFast:e,prevSlow:n,prevHigh:r,prevLow:o})}},{key:"getResult",value:function(){return this.interval}}])&&Se(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}(),Ee=function(t,e){if(0===e){var r=t.inputParams.filter((function(t){return"crossPairs"===t.key}));if("object"!==Oe(r))return;t.instances.crossPairs={crossPairsList:r.flatMap((function(t){return t.params.flat()}))}}var n,o,i=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ge(t))){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(t.instances.crossPairs.crossPairsList);try{for(i.s();!(n=i.n()).done;){var a=n.value,u=a.fast,c=a.slow;if(u&&c){var l="".concat(u,"_x_").concat(c);if(0===e){if("number"==typeof c&&(t.verticalOhlcv[c]=new Array(t.len).fill(c)),"price"!==u&&!t.verticalOhlcv.hasOwnProperty(u))throw Error('fast "'.concat(u,' not found in crossPairs"'));if(!t.verticalOhlcv.hasOwnProperty(c))throw Error('slow "'.concat(c,' not found in crossPairs"'));t.instances[l]=new Ae,t.verticalOhlcv[l]=function(t){if(Array.isArray(t))return we(t)}(o=t.nullArray)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(o)||ge(o)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var s=void 0,f=void 0,h=void 0,y=void 0,p=void 0;"price"===u?(f=t.verticalOhlcv.close[e],h=t.verticalOhlcv.high[e],y=t.verticalOhlcv.low[e],p=t.verticalOhlcv[c][e],t.instances[l].update({fast:f,slow:p,high:h,low:y})):(s=t.verticalOhlcv[u][e],p=t.verticalOhlcv[c][e],t.instances[l].update({fast:s,slow:p})),t.pushToMain({index:e,key:l,value:t.instances[l].getResult()})}}}catch(t){i.e(t)}finally{i.f()}};function ke(t){return function(t){if(Array.isArray(t))return Te(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Te(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Te(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Ie(t){return function(t){if(Array.isArray(t))return Me(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Me(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Me(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Me(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var xe=["open","high","low","close","volume"];function Re(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=Be(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Ce(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(e.includes(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)r=i[n],e.includes(r)||{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function De(t){return function(t){if(Array.isArray(t))return Le(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Be(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Be(t,e){if(t){if("string"==typeof t)return Le(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Le(t,e):void 0}}function Le(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var ze={dateTime:function(t,e){if(0===e){if(!t.isValidDate)throw Error('dateTime method found and invalid "date" in input ohlcv');var r=t.verticalOhlcv.date[0].slice(0,10);Object.assign(t.instances,{dateTime:{prevDateStr:r,sessionDailyIndexCount:0,sessionIntradayIndexCount:0,cachedDayInfo:r}}),Object.assign(t.verticalOhlcv,{day_of_the_week:ke(t.nullArray),day_of_the_month:ke(t.nullArray),week_of_the_month:ke(t.nullArray),hour:ke(t.nullArray),month:ke(t.nullArray),year:ke(t.nullArray),session_daily_index:ke(t.nullArray),session_intraday_index:ke(t.nullArray)})}var n=t.verticalOhlcv.date[e],o=function(t){var e=new Date(t),r=e.getMonth(),n=e.getFullYear(),o=e.getHours(),i=e.getMinutes(),a=e.getDay(),u=e.getDate(),c=new Date(e.getFullYear(),e.getMonth(),1).getDay();return{month:r,year:n,hour:o,minute:i,day_of_the_week:a,day_of_the_month:u,week_of_the_month:Math.ceil((u+c)/7)}}(n),i=o.day_of_the_week,a=o.day_of_the_month,u=o.week_of_the_month,c=o.month,l=o.year,s=o.hour,f=n.slice(0,10);f!==t.instances.dateTime.prevDateStr&&(t.instances.dateTime.prevDateStr=f,t.instances.dateTime.sessionDailyIndexCount++,t.instances.dateTime.sessionIntradayIndexCount=0),t.pushToMain({index:e,key:"session_daily_index",value:t.instances.dateTime.sessionDailyIndexCount}),t.pushToMain({index:e,key:"session_intraday_index",value:t.instances.dateTime.sessionIntradayIndexCount}),t.pushToMain({index:e,key:"day_of_the_week",value:i}),t.pushToMain({index:e,key:"day_of_the_month",value:a}),t.pushToMain({index:e,key:"week_of_the_month",value:u}),t.pushToMain({index:e,key:"month",value:c}),t.pushToMain({index:e,key:"year",value:l}),t.pushToMain({index:e,key:"hour",value:s})},priceVariations:function(t,e){0===e&&(t.priceBased=Ie(new Set([].concat(Ie(t.priceBased),["mid_price_open_close","mid_price_high_low"]))),Object.assign(t.verticalOhlcv,{mid_price_open_close:Ie(t.nullArray),mid_price_high_low:Ie(t.nullArray)}));var r=t.verticalOhlcv.open[e],n=t.verticalOhlcv.high[e],o=t.verticalOhlcv.low[e],i=t.verticalOhlcv.close[e];t.pushToMain({index:e,key:"mid_price_open_close",value:(r+i)/2}),t.pushToMain({index:e,key:"mid_price_high_low",value:(n+o)/2})},rsi:function(t,e,r,n){var o=n.scale,i=n.target,a=t.verticalOhlcv,u=t.instances,c=t.lastIndexReplace,l="close"===i?"":"_".concat(i),s="rsi_".concat(r).concat(l),f="rsi_sma_".concat(r).concat(l);if(0===e){var h=t.crossPairsList,y=t.nullArray;if(!a.hasOwnProperty(i))throw new Error("Target property ".concat(i," not found in verticalOhlcv for rsi."));h.push({fast:s,slow:f,isDefault:!0}),Object.assign(u,Dt(Dt({},s,new Et(r)),f,new $(r))),Object.assign(a,Dt(Dt({},s,Rt(y)),f,Rt(y)))}var p,v,d=a[i][e];u[s].update(d,c);try{p=u[s].getResult()}catch(t){p=null}p&&(o&&(p=Tt(p,o)),t.pushToMain({index:e,key:s,value:p}),u[f].update(p,c));try{v=u[f].getResult()}catch(t){v=null}return v&&(o&&(v=Tt(v,o)),t.pushToMain({index:e,key:f,value:v})),!0},movingAverages:function(t,e,r,n,o){var i=o.target,a=o.diff,u=t.verticalOhlcv,c=t.instances,l=t.priceBased,s=t.lastIndexReplace,f="string"==typeof i&&u.hasOwnProperty(i)&&"close"!==i?"_".concat(i):"",h="".concat(r,"_").concat(n).concat(f),y="".concat(r,"_").concat(n,"_diff").concat(f);if(0===e){var p=t.nullArray;if(!u.hasOwnProperty(i))throw new Error("Target property ".concat(i," not found in verticalOhlcv for ").concat(r,"."));if(c[h]={maInstance:new Ut[r](n)},u[h]=Vt(p),null!==a){c[h].diffInstance=new ot(a.size,a.stdDev);var v,d=[],b=zt(a.targets);try{for(b.s();!(v=b.n()).done;){var m=v.value;u["".concat(y,"_").concat(m)]=Vt(p),a.lag>0&&d.push("".concat(y,"_").concat(m))}}catch(t){b.e(t)}finally{b.f()}a.lag>0&&(console.log(d,a.lag),t.lag(d,a.lag))}l.push(h)}var g,w=u[i][e],O=c[h],S=O.maInstance,j=O.diffInstance;S.update(w,s);try{g=S.getResult()}catch(t){}if(g){if(t.pushToMain({index:e,key:h,value:g}),null===a)return!0;var _,P=zt(a.targets);try{for(P.s();!(_=P.n()).done;){var A=_.value,E=i===A?w-g:u[A][e];j.update(Math.abs(E),s);var k=void 0;try{k=j.getResult()}catch(t){k=null}t.pushToMain({index:e,key:"".concat(y,"_").concat(A),value:Bt(E,k,a.scale)})}}catch(t){P.e(t)}finally{P.f()}}},macd:function(t,e,r,n,o,i){var a=i.target,u=t.verticalOhlcv,c=t.instances,l="".concat(r,"_").concat(n,"_").concat(o).concat(a===Kt?"":"_".concat(a));if(0===e){var s=t.inputParams,f=t.crossPairsList,h=t.nullArray;if(!u.hasOwnProperty(a))throw new Error("Target property ".concat(a," not found in verticalOhlcv for macd."));var y=s.filter((function(t){return"macd"===t.key})).length,p=y>1?"macd_".concat(r,"_").concat(n,"_").concat(o):"macd",v=a===Kt?"".concat(p,"_diff"):"".concat(p,"_diff_").concat(a),d=a===Kt?"".concat(p,"_dea"):"".concat(p,"_dea_").concat(a),b=a===Kt?"".concat(p,"_histogram"):"".concat(p,"_histogram_").concat(a);f.push({fast:v,slow:d,isDefault:!0}),c.hasOwnProperty("macd")||(c.macd={numberOfIndicators:y,settings:{}}),c.macd.settings[l]=new mt(new yt(r),new yt(n),new yt(o)),Object.assign(u,Ft(Ft(Ft({},v,Gt(h)),d,Gt(h)),b,Gt(h)))}var m,g=c.macd,w=g.numberOfIndicators,O=g.settings,S=w>1?"macd_".concat(r,"_").concat(n,"_").concat(o):"macd",j=a===Kt?"".concat(S,"_diff"):"".concat(S,"_diff_").concat(a),_=a===Kt?"".concat(S,"_dea"):"".concat(S,"_dea_").concat(a),P=a===Kt?"".concat(S,"_histogram"):"".concat(S,"_histogram_").concat(a),A=O[l],E=u[a][e];A.update(E,t.lastIndexReplace);try{m=A.getResult()}catch(t){}return m&&(t.pushToMain({index:e,key:j,value:m.macd}),t.pushToMain({index:e,key:_,value:m.signal}),t.pushToMain({index:e,key:P,value:m.histogram})),!0},relativeVolume:function(t,e){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,o=(arguments.length>3?arguments[3]:void 0).scale,i="relative_volume_".concat(n);0===e&&(t.instances[i]={instance:new $(n),prevRelativeVolumeSma:null},Object.assign(t.verticalOhlcv,function(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Yt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Yt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Yt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}({},i,function(t){if(Array.isArray(t))return Qt(t)}(r=t.nullArray)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(r)||function(t,e){if(t){if("string"==typeof t)return Qt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Qt(t,e):void 0}}(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())));var a,u=t.verticalOhlcv.volume[e],c=t.instances[i].instance;c.update(u,t.lastIndexReplace);try{a=c.getResult()}catch(t){}var l=t.instances[i].prevRelativeVolumeSma,s=null;return null!==a&&null!==l&&(s=u/l,o&&(s=Tt(s,o))),t.pushToMain({index:e,key:i,value:s}),t.instances[i].prevRelativeVolumeSma=a,!0},donchianChannels:function(t,e,r,n,o){var i=o.height,a=o.range,u=o.scale,c="".concat(r,"_").concat(n),l=t.verticalOhlcv,s=t.instances,f=t.len;if(0===e){var h=t.inputParams,y=t.nullArray,p=t.priceBased,v=h.filter((function(t){return"donchianChannels"===t.key})).length,d=v>1?"donchian_channel_".concat(c):"donchian_channel";Object.assign(l,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?re(Object(r),!0).forEach((function(e){ne(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):re(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}(ne(ne(ne({},"".concat(d,"_upper"),Zt(y)),"".concat(d,"_basis"),Zt(y)),"".concat(d,"_lower"),Zt(y)),i&&ne({},"".concat(d,"_height"),Zt(y)))),p.push("".concat(d,"_upper"),"".concat(d,"_basis"),"".concat(d,"_lower")),s.hasOwnProperty("donchian_channel")||(s.donchian_channel={numberOfIndicators:v,settings:{}});var b,m=Xt(a);try{for(m.s();!(b=m.n()).done;){var g=b.value;if(!(g in l)||!p.includes(g))throw new Error('Invalid range item value "'.concat(g,'" property for donchianChannels. Only price based key names are accepted:\n').concat(JSON.stringify(p)));l["".concat(d,"_range_").concat(g)]=Zt(y)}}catch(t){m.e(t)}finally{m.f()}s.donchian_channel.settings[c]={maxDeque:[],minDeque:[]}}var w=s.donchian_channel.numberOfIndicators>1?"donchian_channel_".concat(c):"donchian_channel",O=s.donchian_channel.settings[c],S=O.maxDeque,j=O.minDeque,_=e-n,P=_+1,A=P-r;if(A<0||P>f)return!0;for(var E=l.high,k=l.low;S.length&&S[0]<A;)S.shift();for(;S.length&&E[S[S.length-1]]<=E[_];)S.pop();for(S.push(_);j.length&&j[0]<A;)j.shift();for(;j.length&&k[j[j.length-1]]>=k[_];)j.pop();j.push(_);var T=E[S[0]],I=k[j[0]],M=(T+I)/2;if(t.pushToMain({index:e,key:"".concat(w,"_upper"),value:T}),t.pushToMain({index:e,key:"".concat(w,"_basis"),value:M}),t.pushToMain({index:e,key:"".concat(w,"_lower"),value:I}),i){var x=(T-I)/I;u&&(x=Tt(x,u)),t.pushToMain({index:e,key:"".concat(w,"_height"),value:x})}var R,C=Xt(a);try{for(C.s();!(R=C.n()).done;){var D=R.value,B=(l[D][e]-I)/(T-I);u&&(B=Tt(B,u)),t.pushToMain({index:e,key:"".concat(w,"_range_").concat(D),value:B})}}catch(t){C.e(t)}finally{C.f()}return!0},bollingerBands:function(t,e,r,n,o){var i,a=o.height,u=o.range,c=void 0===u?[]:u,l=o.zScore,s=void 0===l?[]:l,f=o.target,h=o.scale,y=t.verticalOhlcv,p=t.instances,v=t.lastIndexReplace,d="close"===f?"":"_".concat(f),b="".concat(r,"_").concat(n).concat(d);if(0===e){var m=t.nullArray,g=t.priceBased,w=t.inputParams;if(!(f in y))throw new Error('bollingerBands could not find target "'.concat(f,'"'));var O=w.filter((function(t){return"bollingerBands"===t.key})).length;i=O>1?"bollinger_bands_".concat(b):"bollinger_bands".concat(d),p.bollinger_bands||(p.bollinger_bands={numberOfIndicators:O,settings:{}}),p.bollinger_bands.settings[b]={instance:new ot(r,n)};var S=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?le(Object(r),!0).forEach((function(e){se(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):le(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}(se(se(se({},"".concat(i,"_upper"),ae(m)),"".concat(i,"_middle"),ae(m)),"".concat(i,"_lower"),ae(m)),a&&se({},"".concat(i,"_height"),ae(m)));t.priceBased.push("".concat(i,"_upper"),"".concat(i,"_middle"),"".concat(i,"_lower"));var j,_=ie(c);try{for(_.s();!(j=_.n()).done;){var P=j.value;if(!(P in y)||!g.includes(P))throw new Error('Invalid range item value "'.concat(P,'" property for bollingerBands. Only price based key names are accepted:\n').concat(JSON.stringify(g)));S["".concat(i,"_range_").concat(P)]=ae(m)}}catch(t){_.e(t)}finally{_.f()}var A,E=ie(s);try{for(E.s();!(A=E.n()).done;){var k=A.value;if(!(k in y)||!g.includes(k))throw new Error('Invalid zScore item value "'.concat(k,'" for bollingerBands. Only price based key names are accepted:\n').concat(JSON.stringify(g)));S["".concat(i,"_zscore_").concat(k)]=ae(m)}}catch(t){E.e(t)}finally{E.f()}Object.assign(y,S)}i||(i=p.bollinger_bands.numberOfIndicators>1?"bollinger_bands_".concat(b):"bollinger_bands".concat(d));var T,I=i,M=p.bollinger_bands.settings[b].instance,x=y[f][e];M.update(x,v);try{T=M.getResult()}catch(t){}if(!T)return!0;var R=T,C=R.upper,D=R.middle,B=R.lower;if(t.pushToMain({index:e,key:"".concat(I,"_upper"),value:C}),t.pushToMain({index:e,key:"".concat(I,"_middle"),value:D}),t.pushToMain({index:e,key:"".concat(I,"_lower"),value:B}),a){var L=(C-B)/B;h&&(L=Tt(L,h)),t.pushToMain({index:e,key:"".concat(I,"_height"),value:L})}var z,V=ie(c);try{for(V.s();!(z=V.n()).done;){var H=z.value,N=(y[H][e]-B)/(C-B);h&&(N=Tt(N,h)),t.pushToMain({index:e,key:"".concat(I,"_range_").concat(H),value:N})}}catch(t){V.e(t)}finally{V.f()}var U,$=ie(s);try{for($.s();!(U=$.n()).done;){var q=U.value,F=C-B,G=0!==F?2*n*(y[q][e]-D)/F:0;0!==F&&h&&(G=Tt(G,h)),t.pushToMain({index:e,key:"".concat(I,"_zscore_").concat(q),value:G})}}catch(t){$.e(t)}finally{$.f()}return!0},volumeOscillator:function(t,e,r,n,o){var i,a=o.scale,u=t.verticalOhlcv.volume[e],c="volume_oscillator";0===e&&(Object.assign(t.instances,{volume_oscillator:{fastEMA:new yt(r),slowEMA:new yt(n)}}),t.verticalOhlcv[c]=function(t){if(Array.isArray(t))return fe(t)}(i=t.nullArray)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(i)||function(t,e){if(t){if("string"==typeof t)return fe(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?fe(t,e):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),t.crossPairsList.push({fast:c,slow:0,isDefault:!0}));var l=t.instances[c],s=l.fastEMA,f=l.slowEMA;s.update(u,t.lastIndexReplace),f.update(u,t.lastIndexReplace);var h=null,y=null;try{h=s.getResult()}catch(t){h=null}try{y=f.getResult()}catch(t){y=null}var p=null;return"number"==typeof h&&"number"==typeof y&&0!==y&&(p=100*(h-y)/y,a&&(p=Tt(p,a))),t.pushToMain({index:e,key:c,value:p}),!0},candleStudies:function(t,e,r,n,o){var i=o.lag,a=o.scale,u=t.verticalOhlcv,c=t.instances,l=t.lastIndexReplace;if(0===e){var s=t.nullArray,f=[].concat(["candle_body","candle_top","candle_bottom"],["candle_gap"],["candle_change_close","candle_change_high","candle_change_low","candle_change_open"]);Object.assign(u,Object.fromEntries(f.map((function(t){return[t,s]})))),Object.assign(c,{candleStudies:{bodyInstance:new ot(r,n),closeInstance:new ot(r,n),highInstance:new ot(r,n),lowInstance:new ot(r,n),openInstance:new ot(r,n)}}),i>0&&t.lag(f,i)}var h=u.open[e-1],y=u.high[e-1],p=u.low[e-1],v=u.close[e-1];if(0===e)return!0;var d=u.open[e],b=u.high[e],m=u.low[e],g=u.close[e],w=he(g,d),O=he(b,Math.max(d,g)),S=he(Math.min(d,g),m),j=he(v,d),_=he(g,v),P=he(b,y),A=he(m,p),E=he(d,h),k=null,T=null,I=null,M=null,x=null,R=c.candleStudies,C=R.bodyInstance,D=R.closeInstance,B=R.highInstance,L=R.lowInstance,z=R.openInstance;C.update(Math.abs(w),l),D.update(Math.abs(_),l),B.update(Math.abs(P),l),L.update(Math.abs(A),l),z.update(Math.abs(E),l);try{k=C.getResult(),T=D.getResult(),I=B.getResult(),M=L.getResult(),x=z.getResult()}catch(t){}return t.pushToMain({index:e,key:"candle_body",value:Bt(w,k,a)}),t.pushToMain({index:e,key:"candle_top",value:Bt(O,k,a)}),t.pushToMain({index:e,key:"candle_bottom",value:Bt(S,k,a)}),t.pushToMain({index:e,key:"candle_gap",value:Bt(j,k,a)}),t.pushToMain({index:e,key:"candle_change_close",value:Bt(_,T,a)}),t.pushToMain({index:e,key:"candle_change_high",value:Bt(P,I,a)}),t.pushToMain({index:e,key:"candle_change_low",value:Bt(A,M,a)}),t.pushToMain({index:e,key:"candle_change_open",value:Bt(E,x,a)}),!0}},Ve=function(t,e,r){var n=function(t){return r>1?t*r:t};if("number"===e)return n(t);if("string"===e){var o=It(t);return n(Number(o))}return 0},He=function(t,e){return"number"===e?t:"string"===e?Number(It(t)):0},Ne=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=e.len,i=e.inputParams;e.nullArray=new Array(o).fill(null);var a=["open","high","low","close","volume"],u=new Set(a);if(0===n){!function(t){var e,n=t.inputParams,o=t.len,i=r(n);try{for(i.s();!(e=i.n()).done;){var a,u=r(e.value.params);try{for(u.s();!(a=u.n()).done;){var c=a.value;if("number"==typeof c&&c>o)throw console.log(c,o),new Error("At least one of the params of the indicator is greater than the input OHLCV length. Make sure to have enough datapoints in the input OHLCV.")}}catch(t){u.e(t)}finally{u.f()}}}catch(t){i.e(t)}finally{i.f()}}(e),a.forEach((function(t){e.verticalOhlcv[t]=De(e.nullArray)}));var c=Object.keys(t[0]).filter((function(t){return!u.has(t)}));c.forEach((function(t){e.verticalOhlcv[t]=De(e.nullArray)})),e.otherKeys=c,function(t,e){for(var r=0,n=Object.keys(e.inputTypes);r<n.length;r++){var o=n[r];if(!(o in t))throw new Error('Property "'.concat(o,'" not found in ohlcv array. ').concat(e.ticker));var i=t[o];if("number"==typeof i&&i>0)e.inputTypes[o]="number";else{if("string"!=typeof i||!/^(\d+(\.\d*)?|\.\d+)$/.test(i))throw new Error('Invalid property "'.concat(o,'" in ohlcv array. ').concat(e.ticker));e.inputTypes[o]="string",i=It(i)}if(0===e.precisionMultiplier&&!0===e.precision){var a=(l=String(i).split("."),s=2,function(t){if(Array.isArray(t))return t}(l)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(l,s)||Be(l,s)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1],u=void 0===a?"":a,c=Math.max(4,u.length);e.precisionMultiplier=c>1?Math.pow(10,c-1):1}}var l,s}(t[0],e)}else if(!e.otherKeys)throw new Error("otherKeys not found in main. Ensure you run with startIndex=0 first to initialize.");for(var l=function(t){return Array.isArray(t)?t.map((function(t){var e=t.key,r=t.params;return{key:e,fn:ze[e],args:r}})):[]}(i),s=n;s<o;s++){var f=t[s],h=f.open,y=f.high,p=f.low,v=f.close,d=f.volume,b=Ce(f,xe),m=e.precisionMultiplier,g=Ve(h,e.inputTypes.open,m),w=Ve(y,e.inputTypes.high,m),O=Ve(p,e.inputTypes.low,m),S=Ve(v,e.inputTypes.close,m),j=He(d,e.inputTypes.volume);e.pushToMain({index:s,key:"open",value:g}),e.pushToMain({index:s,key:"high",value:w}),e.pushToMain({index:s,key:"low",value:O}),e.pushToMain({index:s,key:"close",value:S}),e.pushToMain({index:s,key:"volume",value:j});var _,P=Re(e.otherKeys);try{for(P.s();!(_=P.n()).done;){var A=_.value;e.pushToMain({index:s,key:A,value:b[A]})}}catch(t){P.e(t)}finally{P.f()}var E,k=Re(l);try{for(k.s();!(E=k.n()).done;){var T=E.value,I=T.key,M=T.fn,x=T.args;["crossPairs","lag"].includes(I)||M.apply(void 0,[e,s].concat(De(x)))}}catch(t){k.e(t)}finally{k.f()}me(e,s),Ee(e,s),e.lastComputedIndex++}},Ue=function(t,e){for(var r=t.length,n=new $(e),o=new Array(r),i=0,a=0,u=0,c=0;c<r;c++)if(n.update(t[c]),n.isStable){var l=n.getResult();o[c]=l,i+=l,a+=l*l,u++}else o[c]=null;var s=i/u,f=a/u-s*s,h=Math.sqrt(f);return o.map((function(t){return null!==t?(t-s)/h:null}))},$e=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;if(t.length!==e.length)throw new Error("Both arrays must have the same length");for(var n=Ue(t,r),o=Ue(e,r),i=t.length,a=[],u=0,c=0,l=0,s=0,f=0,h=0,y=-1,p=0;p<i;p++){if(null!==n[p]&&null!==o[p]){y=p;break}a.push(0)}if(-1===y)return new Array(i).fill(0);for(var v=y;v<i;v++){var d=n[v],b=o[v];if(null!==d&&null!==b)if(u+=d,c+=b,l+=d*b,s+=d*d,f+=b*b,++h<2)a.push(0);else{var m=h*l-u*c,g=Math.sqrt((h*s-u*u)*(h*f-c*c)),w=0===g?0:m/g;a.push(w)}else u=c=l=s=f=h=0,a.push(0)}return a};function qe(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Fe=function(t){for(var e=t.input,r=t.inputParams,n=new(0,t.OHLCV_INDICATORS)({input:e}),o=0;o<r.length;o++){var i=r[o],a=i.key,u=i.params;Array.isArray(u)&&(u.length>0?(Array.isArray(u)&&"crossPairs"===a&&Array.isArray(u[0])&&(u[0]=u[0].filter((function(t){return!t.isDefault}))),n[a].apply(n,function(t){if(Array.isArray(t))return qe(t)}(c=u)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(c)||function(t,e){if(t){if("string"==typeof t)return qe(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?qe(t,e):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())):n[a]())}var c;return n};function Ge(t){return function(t){if(Array.isArray(t))return Qe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ye(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Je(t){return Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Je(t)}function Ke(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],c=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);c=!0);}catch(t){l=!0,o=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return u}}(t,e)||Ye(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ye(t,e){if(t){if("string"==typeof t)return Qe(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Qe(t,e):void 0}}function Qe(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function We(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function Xe(t,e,r){return(e=tr(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ze(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,tr(n.key),n)}}function tr(t){var e=function(t,e){if("object"!=Je(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Je(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Je(e)?e:e+""}var er=[.01,.02,.025,.05,.1,.2,.25,.5,1],rr=function(){return t=function t(e){var r=e.input,n=e.ticker,o=void 0===n?null:n,i=e.precision,a=void 0===i||i;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!Array.isArray(r))throw Error("input OHLCV must be an array: "+o);if(0===r.length)throw Error("input OHLCV must not be empty: "+o);if(!r[0].hasOwnProperty("close"))throw Error("input OHLCV array objects require at least close property: "+o);return this.isComputed=!1,this.lastComputedIndex=0,this.input=r,this.inputTypes={open:"",high:"",low:"",close:"",volume:""},this.priceBased=["open","high","low","close"],this.len=r.length,this.lastIndexReplace=!1,this.instances={},this.crossPairsList=[],this.verticalOhlcv={},this.horizontalOhlcv=Array.from({length:this.len},(function(){return{}})),this.inputParams=[],this.studies={},this.utilities={correlation:$e},this.precision=a,this.precisionMultiplier=!0===this.precision?0:1,this.setIndicatorsFromInputParams=Fe,this},e=[{key:"pushToMain",value:function(t){var e=t.index,r=t.key,n=t.value;this.verticalOhlcv[r][e]=n,this.horizontalOhlcv[e][r]=n}},{key:"getDataAsCols",value:function(){this.compute();var t=this.precisionMultiplier,e=this.precision,r=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?We(Object(r),!0).forEach((function(e){Xe(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):We(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},this.verticalOhlcv);if(e)for(var n=0,o=Object.entries(r);n<o.length;n++){var i=Ke(o[n],2),a=i[0],u=i[1];this.priceBased.includes(a)&&(this.precision?r[a]=u.map((function(e){return e/t})):r[a]=u)}return r}},{key:"getData",value:function(){this.compute();var t=this.precisionMultiplier,e=this.priceBased;return this.precision?this.horizontalOhlcv.filter((function(t){return!Object.values(t).some((function(t){return null==t}))})).map((function(r){return Mt({row:r,precisionMultiplier:t,priceBased:e})})):this.horizontalOhlcv.filter((function(t){return!Object.values(t).some((function(t){return null==t}))}))}},{key:"getLastValues",value:function(){this.compute();var t=this.precisionMultiplier,e=this.priceBased;return this.precision?Mt({row:this.horizontalOhlcv[this.horizontalOhlcv.length-1],precisionMultiplier:t,priceBased:e}):this.horizontalOhlcv[this.horizontalOhlcv.length-1]}},{key:"compute",value:function(t){if(!0===this.isComputed&&!t)return this;if(this.isComputed=!1,this.isValidDate=this.input[0].hasOwnProperty("date")&&o(this.input[0].date),this.len>this.lastComputedIndex&&!t&&Ne(this.input,this,0),t&&"object"===Je(t)){var e;if(!["open","high","low","close","volume","date"].every((function(e){return Object.keys(t).includes(e)})))throw Error('Invalid OHLCV object sent in "compute". Correct usage: .compute({open: 108.25, high: 108.410004, low: 108.25, close: 99999999, volume: 875903, date: "2024-12-16 15:45:00" || "2024-12-16"})');if(!this.isValidDate)throw Error('All the OHLCV rows require a valid date property to access the compute change method. Correct date format: "2024-12-16 15:45:00" or "2024-12-16"');if(!o(t.date))throw Error('The date in the new OHLCV row is invalid. Correct date format: "2024-12-16 15:45:00" or "2024-12-16"');var r=t.date,n=this.len-1,i=null===(e=this.input[n])||void 0===e?void 0:e.date;0===this.lastComputedIndex&&this.compute(),i!==r?(this.len++,this.input.push(t),Ne(this.input,this,this.len)):(this.input[n]=t,Ne(this.input,this,n))}return this}},{key:"crossPairs",value:function(t){return i(this),this.crossPairsList=[].concat(Ge(this.crossPairsList),Ge(t)),this.inputParams.push({key:"crossPairs",params:[this.crossPairsList]}),this}},{key:"lag",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;i(this),this.inputParams.push({key:"lag",params:[e,r]});for(var n=function(){var r=e[o];t.priceBased.find((function(t){return r===t}))&&t.priceBased.push(r)},o=0;o<e.length;o++)n();return this}},{key:"relativeVolume",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=e.scale,n=void 0===r?null:r;if("number"==typeof n&&!er.includes(n))throw new Error('"scale" value in relativeVolume must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"relativeVolume",params:[t,{scale:n}]}),this}},{key:"ema",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=$t("ema",t,e,er);return this.inputParams.push({key:"movingAverages",params:["ema",t,r]}),this}},{key:"sma",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=$t("sma",t,e,er);return this.inputParams.push({key:"movingAverages",params:["sma",t,r]}),this}},{key:"macd",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:12,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:26,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:9,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"fast" must be a positive number in macd.');if("number"!=typeof e||e<=t)throw new Error('"slow" must be a positive number greater than "fast" in macd.');if("number"!=typeof r||r<=0)throw new Error('"signal" must be a positive number in macd.');if("object"!==Je(n))throw new Error('"options" must be an object in macd. eg: {target}');var o=n.target,a=void 0===o?"close":o;return this.inputParams.push({key:"macd",params:[t,e,r,{target:a}]}),this}},{key:"bollingerBands",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),!r||"object"!==Je(r))throw new Error('"options" must be an object in bollingerBands. eg: {target, height, range}');var n=r.target,o=void 0===n?"close":n,a=r.height,u=void 0!==a&&a,c=r.range,l=void 0===c?[]:c,s=r.zScore,f=void 0===s?[]:s,h=r.scale,y=void 0===h?null:h;if("number"!=typeof t||t<=0)throw new Error('"size" must be a positive number in bollingerBands.');if("number"!=typeof e||e<=0)throw new Error('"stdDev" must be a positive number in bollingerBands.');if(!Array.isArray(l))throw new Error('If set, "range" must be a array of column names in bollingerBands.');if(!Array.isArray(f))throw new Error('If set, "zScore" must be a array of column names in bollingerBands.');if("boolean"!=typeof u)throw new Error('"height" must be a boolean in bollingerBands.');if("number"==typeof y&&!er.includes(y))throw new Error('"scale" value in bollingerBands must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"bollingerBands",params:[t,e,{target:o,height:u,scale:y,range:l,zScore:f}]}),this}},{key:"rsi",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number in rsi.');var r=e.scale,n=void 0===r?null:r,o=e.target,a=void 0===o?"close":o;if("number"==typeof n&&!er.includes(n))throw new Error('"scale" value in rsi must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"rsi",params:[t,{scale:n,target:a}]}),this}},{key:"donchianChannels",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number greater than 0 in donchianChannels.');if("number"!=typeof e||e<0)throw new Error('"offset" must be a number greater than or equal to 0 in donchianChannels.');var n=r.height,o=void 0!==n&&n,a=r.range,u=void 0===a?[]:a,c=r.scale,l=void 0===c?null:c;if(!Array.isArray(u))throw new Error('If set, "range" must be an array of column names in donchianChannels.');if("boolean"!=typeof o)throw new Error('"height" must be a boolean in donchianChannels.');if("number"==typeof l&&!er.includes(l))throw new Error('"scale" value in donchianChannels must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"donchianChannels",params:[t,e,{height:o,range:u,scale:l}]}),this}},{key:"candleStudies",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number greater than 0 in candleStudies.');if("number"!=typeof e||e<=0)throw new Error('"stdDev" must be a positive number greater than 0 in candleStudies.');var n=r.lag,o=void 0===n?0:n,a=r.scale,u=void 0===a?.05:a;if("number"==typeof u&&!er.includes(u))throw new Error('"scale" value in candleStudies must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"candleStudies",params:[t,e,{lag:o,scale:u}]}),this}},{key:"volumeOscillator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=1)throw new Error('fastSize" must be a positive number greater than 1 in volumeOscillator.');if("number"!=typeof e||e<=t)throw new Error('"slowSize" must be a positive number greater than the "fastSize" in volumeOscillator.');var n=r.scale,o=void 0===n?null:n;if("number"==typeof o&&!er.includes(o))throw new Error('"scale" value in volumeOscillator must be any of the following numbers: '.concat(er.join(", ")));return this.inputParams.push({key:"volumeOscillator",params:[t,e,{scale:o}]}),this}},{key:"dateTime",value:function(){return i(this),this.inputParams.push({key:"dateTime",params:[]}),this}},{key:"priceVariations",value:function(){return i(this),this.inputParams.push({key:"priceVariations",params:[]}),this}}],e&&Ze(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}()})(),OHLCV_INDICATORS=e})();
1
+ var OHLCV_INDICATORS;(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{function r(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,i=function(){};return{s:i,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,u=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){l=!0,a=t},f:function(){try{u||null==r.return||r.return()}finally{if(l)throw a}}}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}t.r(e),t.d(e,{default:()=>tr});var o=function(t){return"string"==typeof t&&/^\d{4}-\d{2}-\d{2}/.test(t)},i=function(t){if(0!==t.lastComputedIndex)throw Error('ohlcv is already computed, you can not add new indicators after "compute", "getLastValues" , "getDataAsCols" or "getData" methods are called.')},a=1e6,u="[big.js] ",l=u+"Invalid ",c=l+"decimal places",s=l+"rounding mode",f=u+"Division by zero",h={},y=void 0,p=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function v(t,e,r,n){var o=t.c;if(r===y&&(r=t.constructor.RM),0!==r&&1!==r&&2!==r&&3!==r)throw Error(s);if(e<1)n=3===r&&(n||!!o[0])||0===e&&(1===r&&o[0]>=5||2===r&&(o[0]>5||5===o[0]&&(n||o[1]!==y))),o.length=1,n?(t.e=t.e-e+1,o[0]=1):o[0]=t.e=0;else if(e<o.length){if(n=1===r&&o[e]>=5||2===r&&(o[e]>5||5===o[e]&&(n||o[e+1]!==y||1&o[e-1]))||3===r&&(n||!!o[0]),o.length=e,n)for(;++o[--e]>9;)if(o[e]=0,0===e){++t.e,o.unshift(1);break}for(e=o.length;!o[--e];)o.pop()}return t}function d(t,e,r){var n=t.e,o=t.c.join(""),i=o.length;if(e)o=o.charAt(0)+(i>1?"."+o.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)o="0"+o;o="0."+o}else if(n>0)if(++n>i)for(n-=i;n--;)o+="0";else n<i&&(o=o.slice(0,n)+"."+o.slice(n));else i>1&&(o=o.charAt(0)+"."+o.slice(1));return t.s<0&&r?"-"+o:o}function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function m(t){var e="function"==typeof Map?new Map:void 0;return m=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf("[native code]")}catch(e){return"function"==typeof t}}(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return function(t,e,r){if(g())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,e);var o=new(t.bind.apply(t,n));return r&&w(o,r.prototype),o}(t,arguments,S(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),w(r,t)},m(t)}function g(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(g=function(){return!!t})()}function w(t,e){return w=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},w(t,e)}function S(t){return S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},S(t)}h.abs=function(){var t=new this.constructor(this);return t.s=1,t},h.cmp=function(t){var e,r=this,n=r.c,o=(t=new r.constructor(t)).c,i=r.s,a=t.s,u=r.e,l=t.e;if(!n[0]||!o[0])return n[0]?i:o[0]?-a:0;if(i!=a)return i;if(e=i<0,u!=l)return u>l^e?1:-1;for(a=(u=n.length)<(l=o.length)?u:l,i=-1;++i<a;)if(n[i]!=o[i])return n[i]>o[i]^e?1:-1;return u==l?0:u>l^e?1:-1},h.div=function(t){var e=this,r=e.constructor,n=e.c,o=(t=new r(t)).c,i=e.s==t.s?1:-1,u=r.DP;if(u!==~~u||u<0||u>a)throw Error(c);if(!o[0])throw Error(f);if(!n[0])return t.s=i,t.c=[t.e=0],t;var l,s,h,p,d,b=o.slice(),m=l=o.length,g=n.length,w=n.slice(0,l),S=w.length,O=t,_=O.c=[],j=0,A=u+(O.e=e.e-t.e)+1;for(O.s=i,i=A<0?0:A,b.unshift(0);S++<l;)w.push(0);do{for(h=0;h<10;h++){if(l!=(S=w.length))p=l>S?1:-1;else for(d=-1,p=0;++d<l;)if(o[d]!=w[d]){p=o[d]>w[d]?1:-1;break}if(!(p<0))break;for(s=S==l?o:b;S;){if(w[--S]<s[S]){for(d=S;d&&!w[--d];)w[d]=9;--w[d],w[S]+=10}w[S]-=s[S]}for(;!w[0];)w.shift()}_[j++]=p?h:++h,w[0]&&p?w[S]=n[m]||0:w=[n[m]]}while((m++<g||w[0]!==y)&&i--);return _[0]||1==j||(_.shift(),O.e--,A--),j>A&&v(O,A,r.RM,w[0]!==y),O},h.eq=function(t){return 0===this.cmp(t)},h.gt=function(t){return this.cmp(t)>0},h.gte=function(t){return this.cmp(t)>-1},h.lt=function(t){return this.cmp(t)<0},h.lte=function(t){return this.cmp(t)<1},h.minus=h.sub=function(t){var e,r,n,o,i=this,a=i.constructor,u=i.s,l=(t=new a(t)).s;if(u!=l)return t.s=-l,i.plus(t);var c=i.c.slice(),s=i.e,f=t.c,h=t.e;if(!c[0]||!f[0])return f[0]?t.s=-l:c[0]?t=new a(i):t.s=1,t;if(u=s-h){for((o=u<0)?(u=-u,n=c):(h=s,n=f),n.reverse(),l=u;l--;)n.push(0);n.reverse()}else for(r=((o=c.length<f.length)?c:f).length,u=l=0;l<r;l++)if(c[l]!=f[l]){o=c[l]<f[l];break}if(o&&(n=c,c=f,f=n,t.s=-t.s),(l=(r=f.length)-(e=c.length))>0)for(;l--;)c[e++]=0;for(l=e;r>u;){if(c[--r]<f[r]){for(e=r;e&&!c[--e];)c[e]=9;--c[e],c[r]+=10}c[r]-=f[r]}for(;0===c[--l];)c.pop();for(;0===c[0];)c.shift(),--h;return c[0]||(t.s=1,c=[h=0]),t.c=c,t.e=h,t},h.mod=function(t){var e,r=this,n=r.constructor,o=r.s,i=(t=new n(t)).s;if(!t.c[0])throw Error(f);return r.s=t.s=1,e=1==t.cmp(r),r.s=o,t.s=i,e?new n(r):(o=n.DP,i=n.RM,n.DP=n.RM=0,r=r.div(t),n.DP=o,n.RM=i,this.minus(r.times(t)))},h.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},h.plus=h.add=function(t){var e,r,n,o=this,i=o.constructor;if(t=new i(t),o.s!=t.s)return t.s=-t.s,o.minus(t);var a=o.e,u=o.c,l=t.e,c=t.c;if(!u[0]||!c[0])return c[0]||(u[0]?t=new i(o):t.s=o.s),t;if(u=u.slice(),e=a-l){for(e>0?(l=a,n=c):(e=-e,n=u),n.reverse();e--;)n.push(0);n.reverse()}for(u.length-c.length<0&&(n=c,c=u,u=n),e=c.length,r=0;e;u[e]%=10)r=(u[--e]=u[e]+c[e]+r)/10|0;for(r&&(u.unshift(r),++l),e=u.length;0===u[--e];)u.pop();return t.c=u,t.e=l,t},h.pow=function(t){var e=this,r=new e.constructor("1"),n=r,o=t<0;if(t!==~~t||t<-1e6||t>1e6)throw Error(l+"exponent");for(o&&(t=-t);1&t&&(n=n.times(e)),t>>=1;)e=e.times(e);return o?r.div(n):n},h.prec=function(t,e){if(t!==~~t||t<1||t>a)throw Error(l+"precision");return v(new this.constructor(this),t,e)},h.round=function(t,e){if(t===y)t=0;else if(t!==~~t||t<-a||t>a)throw Error(c);return v(new this.constructor(this),t+this.e+1,e)},h.sqrt=function(){var t,e,r,n=this,o=n.constructor,i=n.s,a=n.e,l=new o("0.5");if(!n.c[0])return new o(n);if(i<0)throw Error(u+"No square root");0===(i=Math.sqrt(n+""))||i===1/0?((e=n.c.join("")).length+a&1||(e+="0"),a=((a+1)/2|0)-(a<0||1&a),t=new o(((i=Math.sqrt(e))==1/0?"5e":(i=i.toExponential()).slice(0,i.indexOf("e")+1))+a)):t=new o(i+""),a=t.e+(o.DP+=4);do{r=t,t=l.times(r.plus(n.div(r)))}while(r.c.slice(0,a).join("")!==t.c.slice(0,a).join(""));return v(t,(o.DP-=4)+t.e+1,o.RM)},h.times=h.mul=function(t){var e,r=this,n=r.constructor,o=r.c,i=(t=new n(t)).c,a=o.length,u=i.length,l=r.e,c=t.e;if(t.s=r.s==t.s?1:-1,!o[0]||!i[0])return t.c=[t.e=0],t;for(t.e=l+c,a<u&&(e=o,o=i,i=e,c=a,a=u,u=c),e=new Array(c=a+u);c--;)e[c]=0;for(l=u;l--;){for(u=0,c=a+l;c>l;)u=e[c]+i[l]*o[c-l-1]+u,e[c--]=u%10,u=u/10|0;e[c]=u}for(u?++t.e:e.shift(),l=e.length;!e[--l];)e.pop();return t.c=e,t},h.toExponential=function(t,e){var r=this,n=r.c[0];if(t!==y){if(t!==~~t||t<0||t>a)throw Error(c);for(r=v(new r.constructor(r),++t,e);r.c.length<t;)r.c.push(0)}return d(r,!0,!!n)},h.toFixed=function(t,e){var r=this,n=r.c[0];if(t!==y){if(t!==~~t||t<0||t>a)throw Error(c);for(t=t+(r=v(new r.constructor(r),t+r.e+1,e)).e+1;r.c.length<t;)r.c.push(0)}return d(r,!1,!!n)},h[Symbol.for("nodejs.util.inspect.custom")]=h.toJSON=h.toString=function(){var t=this,e=t.constructor;return d(t,t.e<=e.NE||t.e>=e.PE,!!t.c[0])},h.toNumber=function(){var t=Number(d(this,!0,!0));if(!0===this.constructor.strict&&!this.eq(t.toString()))throw Error(u+"Imprecise conversion");return t},h.toPrecision=function(t,e){var r=this,n=r.constructor,o=r.c[0];if(t!==y){if(t!==~~t||t<1||t>a)throw Error(l+"precision");for(r=v(new n(r),t,e);r.c.length<t;)r.c.push(0)}return d(r,t<=r.e||r.e<=n.NE||r.e>=n.PE,!!o)},h.valueOf=function(){var t=this,e=t.constructor;if(!0===e.strict)throw Error(u+"valueOf disallowed");return d(t,t.e<=e.NE||t.e>=e.PE,!0)},function t(){function e(r){var n=this;if(!(n instanceof e))return r===y?t():new e(r);if(r instanceof e)n.s=r.s,n.e=r.e,n.c=r.c.slice();else{if("string"!=typeof r){if(!0===e.strict&&"bigint"!=typeof r)throw TypeError(l+"value");r=0===r&&1/r<0?"-0":String(r)}!function(t,e){var r,n,o;if(!p.test(e))throw Error(l+"number");for(t.s="-"==e.charAt(0)?(e=e.slice(1),-1):1,(r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),o=e.length,n=0;n<o&&"0"==e.charAt(n);)++n;if(n==o)t.c=[t.e=0];else{for(;o>0&&"0"==e.charAt(--o););for(t.e=r-n-1,t.c=[],r=0;n<=o;)t.c[r++]=+e.charAt(n++)}}(n,r)}n.constructor=e}return e.prototype=h,e.DP=20,e.RM=1,e.NE=-7,e.PE=21,e.strict=!1,e.roundDown=0,e.roundHalfUp=1,e.roundHalfEven=2,e.roundUp=3,e}();var O=function(t){function e(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Not enough data";return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),t=function(t,e,r){return e=S(e),function(t,e){if(e&&("object"==b(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,g()?Reflect.construct(e,r||[],S(t).constructor):e.apply(t,r))}(this,e,[r]),Object.setPrototypeOf(t,(this instanceof e?this.constructor:void 0).prototype),t.name="NotEnoughDataError",t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&w(t,e)}(e,t),r=e,Object.defineProperty(r,"prototype",{writable:!1}),r;var r}(m(Error));function _(t){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_(t)}function j(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,P(n.key),n)}}function A(t,e,r){return(e=P(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function P(t){var e=function(t,e){if("object"!=_(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==_(e)?e:e+""}var E=function(){return t=function t(){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),A(this,"previousHighest",void 0),A(this,"highest",void 0),A(this,"previousLowest",void 0),A(this,"lowest",void 0),A(this,"previousResult",void 0),A(this,"result",void 0)},(e=[{key:"isStable",get:function(){return void 0!==this.result}},{key:"getResult",value:function(){if(void 0===this.result)throw new O;return this.result}},{key:"setResult",value:function(t,e){return e&&(this.highest=this.previousHighest,this.lowest=this.previousLowest,this.result=this.previousResult),void 0===this.highest?this.highest=t:t>this.highest?(this.previousHighest=this.highest,this.highest=t):this.previousHighest=this.highest,void 0===this.lowest?this.lowest=t:t<this.lowest?(this.previousLowest=this.lowest,this.lowest=t):this.previousLowest=this.lowest,this.previousResult=this.result,this.result=t}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&j(t.prototype,e),r&&j(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function k(t){return k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},k(t)}function T(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}function I(t,e,r){return e=M(e),function(t,e){if(e&&("object"==k(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,x()?Reflect.construct(e,r||[],M(t).constructor):e.apply(t,r))}function x(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(x=function(){return!!t})()}function M(t){return M=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},M(t)}function R(t,e){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},R(t,e)}function C(t){var e=function(t,e){if("object"!=k(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=k(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==k(e)?e:e+""}var D=function(t){function e(t){var r,n,o,i;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),n=r=I(this,e),i=void 0,(o=C(o="interval"))in n?Object.defineProperty(n,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[o]=i,r.interval=t,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&R(t,e)}(e,t),r=e,(n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&T(r.prototype,n),o&&T(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function B(t){return B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},B(t)}function L(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,z(n.key),n)}}function V(t,e,r){return e=H(e),function(t,e){if(e&&("object"==B(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,N()?Reflect.construct(e,r||[],H(t).constructor):e.apply(t,r))}function N(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(N=function(){return!!t})()}function H(t){return H=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},H(t)}function U(t,e){return U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},U(t,e)}function z(t){var e=function(t,e){if("object"!=B(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=B(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==B(e)?e:e+""}var $=function(t){function e(){var t,r,n,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var i=arguments.length,a=new Array(i),u=0;u<i;u++)a[u]=arguments[u];return r=t=V(this,e,[].concat(a)),o=[],(n=z(n="prices"))in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&U(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.prices.length&&e?this.prices[this.prices.length-1]=t:this.prices.push(t),this.prices.length>this.interval&&this.prices.shift(),this.prices.length===this.interval){var r=this.prices.reduce((function(t,e){return t+e}),0);return this.setResult(r/this.prices.length,e)}}}],n&&L(r.prototype,n),o&&L(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(D);function q(t){return q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},q(t)}function F(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,W(n.key),n)}}function G(t,e,r){return e=K(e),function(t,e){if(e&&("object"==q(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,J()?Reflect.construct(e,r||[],K(t).constructor):e.apply(t,r))}function J(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(J=function(){return!!t})()}function K(t){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},K(t)}function Y(t,e){return Y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Y(t,e)}function Q(t,e,r){return(e=W(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function W(t){var e=function(t,e){if("object"!=q(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==q(e)?e:e+""}var X=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Q(r=G(this,e),"interval",void 0),Q(r,"indicator",void 0),Q(r,"smoothingFactor",void 0),r.interval=t,r.indicator=new $(t),r.smoothingFactor=1/r.interval,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Y(t,e)}(e,t),r=e,n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.indicator.update(t);if(e&&void 0!==this.previousResult){var n=(t-this.previousResult)*this.smoothingFactor;return this.setResult(n+this.previousResult,e)}if(!e&&void 0!==this.result){var o=(t-this.result)*this.smoothingFactor;return this.setResult(o+this.result,e)}if(void 0===this.result&&void 0!==r)return this.setResult(r,e)}}],n&&F(r.prototype,n),o&&F(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function Z(t){return t.length?t.reduce((function(t,e){return t+e}),0)/t.length:0}function tt(t){return tt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tt(t)}function et(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,nt(n.key),n)}}function rt(t,e,r){return(e=nt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function nt(t){var e=function(t,e){if("object"!=tt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=tt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==tt(e)?e:e+""}var ot=function(){return t=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),rt(this,"interval",void 0),rt(this,"deviationMultiplier",void 0),rt(this,"prices",[]),rt(this,"result",void 0),this.interval=e,this.deviationMultiplier=r},(e=[{key:"update",value:function(t){if(this.prices.push(t),this.prices.length>this.interval){this.prices.shift();var e=Z(this.prices),r=function(t,e){var r=e||Z(t),n=Z(t.map((function(t){return t-r})).map((function(t){return t*t})));return Math.sqrt(n)}(this.prices,e);return this.result={lower:e-r*this.deviationMultiplier,middle:e,upper:e+r*this.deviationMultiplier}}}},{key:"getResult",value:function(){if(void 0===this.result)throw new O;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}}])&&et(t.prototype,e),r&&et(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function it(t){return it="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},it(t)}function at(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ht(n.key),n)}}function ut(t,e,r){return e=ct(e),function(t,e){if(e&&("object"==it(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,lt()?Reflect.construct(e,r||[],ct(t).constructor):e.apply(t,r))}function lt(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(lt=function(){return!!t})()}function ct(t){return ct=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},ct(t)}function st(t,e){return st=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},st(t,e)}function ft(t,e,r){return(e=ht(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ht(t){var e=function(t,e){if("object"!=it(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=it(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==it(e)?e:e+""}var yt=function(t){function e(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),ft(r=ut(this,e,[t]),"interval",void 0),ft(r,"pricesCounter",0),ft(r,"weightFactor",void 0),r.interval=t,r.weightFactor=2/(r.interval+1),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&st(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?e&&0===this.pricesCounter&&this.pricesCounter++:this.pricesCounter++,e&&void 0!==this.previousResult?this.setResult(t*this.weightFactor+this.previousResult*(1-this.weightFactor),e):this.setResult(t*this.weightFactor+(void 0!==this.result?this.result:t)*(1-this.weightFactor),e)}},{key:"getResult",value:function(){if(this.pricesCounter<this.interval)throw new O;return this.result}},{key:"isStable",get:function(){try{return this.getResult(),!0}catch(t){return!1}}}],n&&at(r.prototype,n),o&&at(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(D);function pt(t){return pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pt(t)}function vt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,bt(n.key),n)}}function dt(t,e,r){return(e=bt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function bt(t){var e=function(t,e){if("object"!=pt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=pt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==pt(e)?e:e+""}var mt=function(){return t=function t(e,r,n){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),dt(this,"short",void 0),dt(this,"long",void 0),dt(this,"signal",void 0),dt(this,"prices",[]),dt(this,"result",void 0),this.short=e,this.long=r,this.signal=n},e=[{key:"getResult",value:function(){if(void 0===this.result)throw new O;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.prices.length&&e?this.prices[this.prices.length-1]=t:this.prices.push(t);var r=this.short.update(t,e),n=this.long.update(t,e);if(this.prices.length>this.long.interval&&this.prices.shift(),this.prices.length===this.long.interval){var o=r-n,i=this.signal.update(o,e);return this.result={histogram:o-i,macd:o,signal:i}}}}],e&&vt(t.prototype,e),r&&vt(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function gt(t){return gt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gt(t)}function wt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Pt(n.key),n)}}function St(t,e,r){return e=_t(e),function(t,e){if(e&&("object"==gt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,Ot()?Reflect.construct(e,r||[],_t(t).constructor):e.apply(t,r))}function Ot(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(Ot=function(){return!!t})()}function _t(t){return _t=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_t(t)}function jt(t,e){return jt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},jt(t,e)}function At(t,e,r){return(e=Pt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Pt(t){var e=function(t,e){if("object"!=gt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=gt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==gt(e)?e:e+""}var Et=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:X;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),At(r=St(this,e),"interval",void 0),At(r,"previousPrices",[]),At(r,"avgGain",void 0),At(r,"avgLoss",void 0),At(r,"maxValue",100),r.interval=t,r.avgGain=new n(r.interval),r.avgLoss=new n(r.interval),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&jt(t,e)}(e,t),r=e,n=[{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.previousPrices.length&&e?this.previousPrices[this.previousPrices.length-1]=t:this.previousPrices.push(t),!(this.previousPrices.length<2)){var r=t,n=this.previousPrices[this.previousPrices.length-2];if(r>n?(this.avgLoss.update(0,e),this.avgGain.update(t-n,e)):(this.avgLoss.update(n-r,e),this.avgGain.update(0,e)),this.avgGain.isStable){var o=this.avgLoss.getResult();if(0===o)return this.setResult(100,e);var i=this.avgGain.getResult()/o;return this.setResult(this.maxValue-this.maxValue/(i+1),e)}}}}],n&&wt(r.prototype,n),o&&wt(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(E);function kt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Tt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Tt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Tt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var It=function(t){var e=1/(arguments.length>1&&void 0!==arguments[1]?arguments[1]:.1);return Math.round(t*e)/e},xt=function(t){return t.replace(/(?!^-)[^0-9.]/g,"")};function Mt(t){return Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mt(t)}function Rt(t){return function(t){if(Array.isArray(t))return Ct(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ct(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ct(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ct(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Dt(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Mt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Mt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Mt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var Bt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.05;if(null==t||null==e)return null;var n=t>=0,o=Math.abs(t),i=e.upper,a=e.middle,u=e.lower;if(o<u)return 0;if(o>i)return n?1:-1;var l=Number.EPSILON*Math.max(o,Math.abs(a));if(Math.abs(o-a)<l)return n?.5:-.5;if(i===u)return null;var c=It((o-u)/(i-u),r);return n?c:-c};function Lt(t){return Lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Lt(t)}function Vt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=Ht(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Nt(t){return function(t){if(Array.isArray(t))return Ut(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ht(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ht(t,e){if(t){if("string"==typeof t)return Ut(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ut(t,e):void 0}}function Ut(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var zt={ema:yt,sma:$},$t=function(t,e,r,n){if(!r||"object"!==Lt(r))throw new Error('"options" must be an object in '.concat(t,". eg: {target, height, range}"));var o=r.target,i=void 0===o?"close":o,a=r.diff,u=void 0===a?null:a;if("string"!=typeof i)throw new Error('"target" must be a valid keyName '.concat(t,"."));if("number"!=typeof e||e<=0)throw new Error('"size" must be a positive number in '.concat(t,"."));var l={target:i,diff:null};if(null!==u&&("object"===Lt(u)||"boolean"==typeof u&&!0===u)){var c=u=!0===u?{}:u,s=c.stdDev,f=void 0===s?2:s,h=c.scale,y=void 0===h?.05:h,p=c.targets,v=void 0===p?["close"]:p,d=c.size,b=void 0===d?e:d,m=c.lag,g=void 0===m?0:m;if("number"!=typeof f||f<=0)throw new Error('"diff.stdDev" must be a number greater than 0 in '.concat(t,"."));if("number"!=typeof y||!n.includes(y))throw new Error('"diff.scale" must be a number between 0.01 and 1 in '.concat(t,"."));if("number"!=typeof b||!Number.isInteger(b)||b<=0)throw new Error('"diff.size" must be an integer greater than or equal to size in '.concat(t,"."));if(!Array.isArray(v))throw new Error('"diff.targest" must be an array of keyNames with at least 1 item in '.concat(t,"."));if("number"!=typeof g||!Number.isInteger(g)||g<0)throw new Error('"diff.lag" must be an integer greater than 0 in '.concat(t,"."));l.diff={stdDev:f,scale:y,size:b,targets:v,lag:g}}return l};function qt(t){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qt(t)}function Ft(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=qt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=qt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==qt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Gt(t){return function(t){if(Array.isArray(t))return Jt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Jt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Jt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Kt="close";function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}function Qt(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Wt(t){return Wt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wt(t)}function Xt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ee(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Zt(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Wt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Wt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Wt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function te(t){return function(t){if(Array.isArray(t))return re(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||ee(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ee(t,e){if(t){if("string"==typeof t)return re(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?re(t,e):void 0}}function re(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function ne(t){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ne(t)}function oe(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ae(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function ie(t){return function(t){if(Array.isArray(t))return ue(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||ae(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ae(t,e){if(t){if("string"==typeof t)return ue(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ue(t,e):void 0}}function ue(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function le(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=ne(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=ne(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==ne(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ce(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var se=function(t,e){return t-e};function fe(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||ye(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function he(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=ye(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function ye(t,e){if(t){if("string"==typeof t)return pe(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?pe(t,e):void 0}}function pe(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function ve(t){return ve="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ve(t)}var de=function(t,e){var r=t.instances,n=t.verticalOhlcv,o=t.nullArray;if(0===e){var i=t.inputParams,a=t.priceBased,u=i.filter((function(t){return"lag"===t.key}));if("object"!==ve(u))return;var l,c=u.map((function(t){return t.params})),s=he(c);try{for(s.s();!(l=s.n()).done;){var f,h=fe(l.value,2),y=h[0],p=h[1],v=he(y);try{for(v.s();!(f=v.n()).done;){var d=f.value;if(a.includes(d))for(var b=1;b<=p;b++)a.push("".concat(d,"_lag_").concat(b))}}catch(t){v.e(t)}finally{v.f()}}}catch(t){s.e(t)}finally{s.f()}r.lag={lagParams:c}}var m,g,w=he(r.lag.lagParams);try{for(w.s();!(m=w.n()).done;){var S,O=fe(m.value,2),_=O[0],j=O[1],A=he(_);try{for(A.s();!(S=A.n()).done;){var P=S.value,E=n[P];if(0===e)for(var k=1;k<=j;k++)n["".concat(P,"_lag_").concat(k)]=function(t){if(Array.isArray(t))return pe(t)}(g=o)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(g)||ye(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();for(var T=1;T<=j;T++){var I="".concat(P,"_lag_").concat(T),x=e-T;if(x<=0)break;t.pushToMain({index:e,key:I,value:E[x]})}}}catch(t){A.e(t)}finally{A.f()}}}catch(t){w.e(t)}finally{w.f()}return!0};function be(t,e){if(t){if("string"==typeof t)return me(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?me(t,e):void 0}}function me(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function ge(t){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ge(t)}function we(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Se(n.key),n)}}function Se(t){var e=function(t,e){if("object"!=ge(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==ge(e)?e:e+""}var Oe=function(t,e){return t>e},_e=function(t,e){return t<e},je=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object.assign(this,{interval:0,prevState:.5,prevFast:null,prevSlow:null,prevHigh:null,prevLow:null,areHighAndLowUndefined:!1,index:0,crossIndexes:{up:[],down:[]}})},(e=[{key:"update",value:function(t){var e=t.fast,r=t.high,n=t.slow,o=t.low,i=this.prevState;this.areHighAndLowUndefined||void 0!==r&&void 0!==o||(this.areHighAndLowUndefined=!0),null===e||null===n||function(t,e){return t===e}(e,n)?i=.5:Oe(e,n)?i=this.areHighAndLowUndefined?1:[o,n,this.prevLow,this.prevSlow].every((function(t){return null!==t}))&&_e(o,n)&&Oe(this.prevLow,this.prevSlow)?0:1:_e(e,n)&&(i=this.areHighAndLowUndefined?0:[r,n,this.prevHigh,this.prevSlow].every((function(t){return null!==t}))&&Oe(r,n)&&_e(this.prevHigh,this.prevSlow)?1:0),.5===i?this.interval=0:1===i?this.prevState<=.5?this.interval=1:this.interval++:0===i&&(this.prevState>=.5?this.interval=-1:this.interval--),1===this.interval&&this.crossIndexes.up.push(this.index),-1===this.interval&&this.crossIndexes.down.push(this.index),Object.assign(this,{index:this.index+1,prevState:i,prevFast:e,prevSlow:n,prevHigh:r,prevLow:o})}},{key:"getResult",value:function(){return this.interval}}])&&we(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}(),Ae=function(t,e){var r=t.nullArray,n=t.verticalOhlcv,o=t.instances,i=t.len;if(0===e){var a=t.inputParams.filter((function(t){return"crossPairs"===t.key}));if("object"!==ge(a))return;o.crossPairs={crossPairsList:a.flatMap((function(t){return t.params.flat()}))}}var u,l,c=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=be(t))){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}(o.crossPairs.crossPairsList);try{for(c.s();!(u=c.n()).done;){var s=u.value,f=s.fast,h=s.slow;if(f&&h){var y="".concat(f,"_x_").concat(h);if(0===e){if("number"==typeof h&&(n[h]=new Array(i).fill(h)),"price"!==f&&!n.hasOwnProperty(f))throw Error('fast "'.concat(f,' not found in crossPairs"'));if(!n.hasOwnProperty(h))throw Error('slow "'.concat(h,' not found in crossPairs"'));o[y]=new je,n[y]=function(t){if(Array.isArray(t))return me(t)}(l=r)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(l)||be(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var p=void 0,v=void 0,d=void 0,b=void 0,m=void 0;"price"===f?(v=n.close[e],d=n.high[e],b=n.low[e],m=n[h][e],o[y].update({fast:v,slow:m,high:d,low:b})):(p=n[f][e],m=n[h][e],o[y].update({fast:p,slow:m})),t.pushToMain({index:e,key:y,value:o[y].getResult()})}}}catch(t){c.e(t)}finally{c.f()}};function Pe(t){return function(t){if(Array.isArray(t))return Ee(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ee(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ee(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ee(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function ke(t){return function(t){if(Array.isArray(t))return Te(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Te(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Te(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Ie=["open","high","low","close","volume"];function xe(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=Ce(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Me(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(e.includes(n))continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)r=i[n],e.includes(r)||{}.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function Re(t){return function(t){if(Array.isArray(t))return De(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ce(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ce(t,e){if(t){if("string"==typeof t)return De(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?De(t,e):void 0}}function De(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var Be={dateTime:function(t,e){var r=t.instances,n=t.verticalOhlcv;if(0===e){var o=t.nullArray;if(!t.isValidDate)throw Error('dateTime method found and invalid "date" in input ohlcv');var i=n.date[0].slice(0,10);Object.assign(r,{dateTime:{prevDateStr:i,sessionDailyIndexCount:0,sessionIntradayIndexCount:0,cachedDayInfo:i}}),Object.assign(n,{day_of_the_week:Pe(o),day_of_the_month:Pe(o),week_of_the_month:Pe(o),hour:Pe(o),month:Pe(o),year:Pe(o),session_daily_index:Pe(o),session_intraday_index:Pe(o)})}var a=n.date[e],u=function(t){var e=new Date(t),r=e.getMonth(),n=e.getFullYear(),o=e.getHours(),i=e.getMinutes(),a=e.getDay(),u=e.getDate(),l=new Date(e.getFullYear(),e.getMonth(),1).getDay();return{month:r,year:n,hour:o,minute:i,day_of_the_week:a,day_of_the_month:u,week_of_the_month:Math.ceil((u+l)/7)}}(a),l=u.day_of_the_week,c=u.day_of_the_month,s=u.week_of_the_month,f=u.month,h=u.year,y=u.hour,p=a.slice(0,10);p!==r.dateTime.prevDateStr&&(r.dateTime.prevDateStr=p,r.dateTime.sessionDailyIndexCount++,r.dateTime.sessionIntradayIndexCount=0),t.pushToMain({index:e,key:"session_daily_index",value:r.dateTime.sessionDailyIndexCount}),t.pushToMain({index:e,key:"session_intraday_index",value:r.dateTime.sessionIntradayIndexCount}),t.pushToMain({index:e,key:"day_of_the_week",value:l}),t.pushToMain({index:e,key:"day_of_the_month",value:c}),t.pushToMain({index:e,key:"week_of_the_month",value:s}),t.pushToMain({index:e,key:"month",value:f}),t.pushToMain({index:e,key:"year",value:h}),t.pushToMain({index:e,key:"hour",value:y})},priceVariations:function(t,e){0===e&&(t.priceBased=ke(new Set([].concat(ke(t.priceBased),["mid_price_open_close","mid_price_high_low"]))),Object.assign(t.verticalOhlcv,{mid_price_open_close:ke(t.nullArray),mid_price_high_low:ke(t.nullArray)}));var r=t.verticalOhlcv.open[e],n=t.verticalOhlcv.high[e],o=t.verticalOhlcv.low[e],i=t.verticalOhlcv.close[e];t.pushToMain({index:e,key:"mid_price_open_close",value:(r+i)/2}),t.pushToMain({index:e,key:"mid_price_high_low",value:(n+o)/2})},rsi:function(t,e,r,n){var o=n.scale,i=n.target,a=t.verticalOhlcv,u=t.instances,l=t.lastIndexReplace,c="close"===i?"":"_".concat(i),s="rsi_".concat(r).concat(c),f="rsi_sma_".concat(r).concat(c);if(0===e){var h=t.crossPairsList,y=t.nullArray;if(!a.hasOwnProperty(i))throw new Error("Target property ".concat(i," not found in verticalOhlcv for rsi."));h.push({fast:s,slow:f,isDefault:!0}),Object.assign(u,Dt(Dt({},s,new Et(r)),f,new $(r))),Object.assign(a,Dt(Dt({},s,Rt(y)),f,Rt(y)))}var p,v,d=a[i][e];u[s].update(d,l);try{p=u[s].getResult()}catch(t){p=null}p&&(o&&(p=It(p,o)),t.pushToMain({index:e,key:s,value:p}),u[f].update(p,l));try{v=u[f].getResult()}catch(t){v=null}v&&(o&&(v=It(v,o)),t.pushToMain({index:e,key:f,value:v}))},movingAverages:function(t,e,r,n,o){var i=o.target,a=o.diff,u=t.verticalOhlcv,l=t.instances,c=t.priceBased,s=t.lastIndexReplace,f="string"==typeof i&&u.hasOwnProperty(i)&&"close"!==i?"_".concat(i):"",h="".concat(r,"_").concat(n).concat(f),y="".concat(r,"_").concat(n,"_diff").concat(f);if(0===e){var p=t.nullArray;if(!u.hasOwnProperty(i))throw new Error("Target property ".concat(i," not found in verticalOhlcv for ").concat(r,"."));if(l[h]={maInstance:new zt[r](n)},u[h]=Nt(p),null!==a){l[h].diffInstance=new ot(a.size,a.stdDev);var v,d=[],b=Vt(a.targets);try{for(b.s();!(v=b.n()).done;){var m=v.value;u["".concat(y,"_").concat(m)]=Nt(p),a.lag>0&&d.push("".concat(y,"_").concat(m))}}catch(t){b.e(t)}finally{b.f()}a.lag>0&&(console.log(d,a.lag),t.lag(d,a.lag))}c.push(h)}var g,w=u[i][e],S=l[h],O=S.maInstance,_=S.diffInstance;O.update(w,s);try{g=O.getResult()}catch(t){}if(g){if(t.pushToMain({index:e,key:h,value:g}),null===a)return!0;var j,A=Vt(a.targets);try{for(A.s();!(j=A.n()).done;){var P=j.value,E=i===P?w-g:u[P][e];_.update(Math.abs(E),s);var k=void 0;try{k=_.getResult()}catch(t){k=null}t.pushToMain({index:e,key:"".concat(y,"_").concat(P),value:Bt(E,k,a.scale)})}}catch(t){A.e(t)}finally{A.f()}}},macd:function(t,e,r,n,o,i){var a=i.target,u=t.verticalOhlcv,l=t.instances,c=t.lastIndexReplace,s="".concat(r,"_").concat(n,"_").concat(o).concat(a===Kt?"":"_".concat(a));if(0===e){var f=t.inputParams,h=t.crossPairsList,y=t.nullArray;if(!u.hasOwnProperty(a))throw new Error("Target property ".concat(a," not found in verticalOhlcv for macd."));var p=f.filter((function(t){return"macd"===t.key})).length,v=p>1?"macd_".concat(r,"_").concat(n,"_").concat(o):"macd",d=a===Kt?"".concat(v,"_diff"):"".concat(v,"_diff_").concat(a),b=a===Kt?"".concat(v,"_dea"):"".concat(v,"_dea_").concat(a),m=a===Kt?"".concat(v,"_histogram"):"".concat(v,"_histogram_").concat(a);h.push({fast:d,slow:b,isDefault:!0}),l.hasOwnProperty("macd")||(l.macd={numberOfIndicators:p,settings:{}}),l.macd.settings[s]=new mt(new yt(r),new yt(n),new yt(o)),Object.assign(u,Ft(Ft(Ft({},d,Gt(y)),b,Gt(y)),m,Gt(y)))}var g,w=l.macd,S=w.numberOfIndicators,O=w.settings,_=S>1?"macd_".concat(r,"_").concat(n,"_").concat(o):"macd",j=a===Kt?"".concat(_,"_diff"):"".concat(_,"_diff_").concat(a),A=a===Kt?"".concat(_,"_dea"):"".concat(_,"_dea_").concat(a),P=a===Kt?"".concat(_,"_histogram"):"".concat(_,"_histogram_").concat(a),E=O[s],k=u[a][e];E.update(k,c);try{g=E.getResult()}catch(t){}return g&&(t.pushToMain({index:e,key:j,value:g.macd}),t.pushToMain({index:e,key:A,value:g.signal}),t.pushToMain({index:e,key:P,value:g.histogram})),!0},relativeVolume:function(t,e){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,o=(arguments.length>3?arguments[3]:void 0).scale,i="relative_volume_".concat(n),a=t.instances,u=t.verticalOhlcv,l=t.lastIndexReplace;if(0===e){var c=t.nullArray;a[i]={instance:new $(n),prevRelativeVolumeSma:null},Object.assign(u,function(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=Yt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Yt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Yt(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}({},i,function(t){if(Array.isArray(t))return Qt(t)}(r=c)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(r)||function(t,e){if(t){if("string"==typeof t)return Qt(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Qt(t,e):void 0}}(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}var s,f=u.volume[e],h=a[i].instance;h.update(f,l);try{s=h.getResult()}catch(t){}var y=a[i].prevRelativeVolumeSma,p=null;return null!==s&&null!==y&&void 0!==s&&"undefined"!==y&&(p=f/y,o&&(p=It(p,o))),t.pushToMain({index:e,key:i,value:p}),a[i].prevRelativeVolumeSma=s,!0},donchianChannels:function(t,e,r,n,o){var i=o.height,a=o.range,u=o.scale,l="".concat(r,"_").concat(n),c=t.verticalOhlcv,s=t.instances,f=t.len;if(0===e){var h=t.inputParams,y=t.priceBased,p=t.nullArray,v=h.filter((function(t){return"donchianChannels"===t.key})).length,d=v>1?"donchian_channel_".concat(l):"donchian_channel";Object.assign(c,Zt(Zt(Zt({},"".concat(d,"_upper"),te(p)),"".concat(d,"_basis"),te(p)),"".concat(d,"_lower"),te(p))),i&&(c["".concat(d,"_height")]=te(p)),y.push("".concat(d,"_upper"),"".concat(d,"_basis"),"".concat(d,"_lower")),s.hasOwnProperty("donchian_channel")||(s.donchian_channel={numberOfIndicators:v,settings:{}});var b,m=Xt(a);try{for(m.s();!(b=m.n()).done;){var g=b.value;if(!(g in c)||!y.includes(g))throw new Error('Invalid range item value "'.concat(g,'" property for donchianChannels. Only price based key names are accepted:\n').concat(JSON.stringify(y)));c["".concat(d,"_range_").concat(g)]=te(p)}}catch(t){m.e(t)}finally{m.f()}s.donchian_channel.settings[l]={maxDeque:[],minDeque:[]}}var w=s.donchian_channel.numberOfIndicators>1?"donchian_channel_".concat(l):"donchian_channel",S=s.donchian_channel.settings[l],O=S.maxDeque,_=S.minDeque,j=e-n,A=j+1,P=A-r;if(P<0||A>f)return!0;for(var E=c.high,k=c.low;O.length&&O[0]<P;)O.shift();for(;O.length&&E[O[O.length-1]]<=E[j];)O.pop();for(O.push(j);_.length&&_[0]<P;)_.shift();for(;_.length&&k[_[_.length-1]]>=k[j];)_.pop();_.push(j);var T=E[O[0]],I=k[_[0]],x=(T+I)/2;if(t.pushToMain({index:e,key:"".concat(w,"_upper"),value:T}),t.pushToMain({index:e,key:"".concat(w,"_basis"),value:x}),t.pushToMain({index:e,key:"".concat(w,"_lower"),value:I}),i){var M=(T-I)/I;u&&(M=It(M,u)),t.pushToMain({index:e,key:"".concat(w,"_height"),value:M})}var R,C=Xt(a);try{for(C.s();!(R=C.n()).done;){var D=R.value,B=(c[D][e]-I)/(T-I);u&&(B=It(B,u)),t.pushToMain({index:e,key:"".concat(w,"_range_").concat(D),value:B})}}catch(t){C.e(t)}finally{C.f()}return!0},bollingerBands:function(t,e,r,n,o){var i,a=o.height,u=o.range,l=void 0===u?[]:u,c=o.zScore,s=void 0===c?[]:c,f=o.target,h=o.scale,y=t.verticalOhlcv,p=t.instances,v=t.lastIndexReplace,d="close"===f?"":"_".concat(f),b="".concat(r,"_").concat(n).concat(d);if(0===e){var m=t.priceBased,g=t.inputParams,w=t.nullArray,S=t.verticalOhlcv;if(!(f in S))throw new Error('bollingerBands could not find target "'.concat(f,'"'));var O=g.filter((function(t){return"bollingerBands"===t.key})).length,_=O>1?"bollinger_bands_".concat(b):"bollinger_bands".concat(d);p.bollinger_bands={numberOfIndicators:O,settings:le({},b,new ot(r,n))},Object.assign(S,le(le(le({},"".concat(_,"_upper"),ie(w)),"".concat(_,"_middle"),ie(w)),"".concat(_,"_lower"),ie(w))),a&&(S["".concat(_,"_height")]=ie(w));var j,A=oe(l);try{for(A.s();!(j=A.n()).done;){var P=j.value;if(!(P in S)||!m.includes(P))throw new Error('Invalid range item value "'.concat(P,'" property for bollingerBands. Only price based key names are accepted:\n').concat(JSON.stringify(m)));S["".concat(_,"_range_").concat(P)]=ie(w)}}catch(t){A.e(t)}finally{A.f()}var E,k=oe(s);try{for(k.s();!(E=k.n()).done;){var T=E.value;if(!(T in S)||!m.includes(T))throw new Error('Invalid zScore item value "'.concat(T,'" for bollingerBands. Only price based key names are accepted:\n').concat(JSON.stringify(m)));S["".concat(_,"_zscore_").concat(T)]=ie(w)}}catch(t){k.e(t)}finally{k.f()}m.push("".concat(_,"_upper"),"".concat(_,"_middle"),"".concat(_,"_lower"))}i||(i=p.bollinger_bands.numberOfIndicators>1?"bollinger_bands_".concat(b):"bollinger_bands".concat(d));var I,x=i,M=p.bollinger_bands.settings[b],R=y[f][e];M.update(R,v);try{I=M.getResult()}catch(t){}if(!I)return!0;var C=I,D=C.upper,B=C.middle,L=C.lower;if(t.pushToMain({index:e,key:"".concat(x,"_upper"),value:D}),t.pushToMain({index:e,key:"".concat(x,"_middle"),value:B}),t.pushToMain({index:e,key:"".concat(x,"_lower"),value:L}),a){var V=(D-L)/L;h&&(V=It(V,h)),t.pushToMain({index:e,key:"".concat(x,"_height"),value:V})}var N,H=oe(l);try{for(H.s();!(N=H.n()).done;){var U=N.value,z=(y[U][e]-L)/(D-L);h&&(z=It(z,h)),t.pushToMain({index:e,key:"".concat(x,"_range_").concat(U),value:z})}}catch(t){H.e(t)}finally{H.f()}var $,q=oe(s);try{for(q.s();!($=q.n()).done;){var F=$.value,G=D-L,J=0!==G?2*n*(y[F][e]-B)/G:0;0!==G&&h&&(J=It(J,h)),t.pushToMain({index:e,key:"".concat(x,"_zscore_").concat(F),value:J})}}catch(t){q.e(t)}finally{q.f()}return!0},volumeOscillator:function(t,e,r,n,o){var i,a=o.scale,u=t.verticalOhlcv,l=t.instances,c=t.lastIndexReplace,s=u.volume[e],f="volume_oscillator";if(0===e){var h=t.crossPairsList,y=t.nullArray;Object.assign(l,{volume_oscillator:{fastEMA:new yt(r),slowEMA:new yt(n)}}),u[f]=function(t){if(Array.isArray(t))return ce(t)}(i=y)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(i)||function(t,e){if(t){if("string"==typeof t)return ce(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ce(t,e):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),h.push({fast:f,slow:0,isDefault:!0})}var p=l[f],v=p.fastEMA,d=p.slowEMA;v.update(s,c),d.update(s,c);var b=null,m=null;try{b=v.getResult()}catch(t){b=null}try{m=d.getResult()}catch(t){m=null}var g=null;return"number"==typeof b&&"number"==typeof m&&0!==m&&(g=100*(b-m)/m,a&&(g=It(g,a))),t.pushToMain({index:e,key:f,value:g}),!0},candleStudies:function(t,e,r,n,o){var i=o.lag,a=o.scale,u=t.verticalOhlcv,l=t.instances,c=t.lastIndexReplace;if(0===e){var s=t.nullArray,f=[].concat(["candle_body","candle_top","candle_bottom"],["candle_gap"],["candle_change_close","candle_change_high","candle_change_low","candle_change_open"]);Object.assign(u,Object.fromEntries(f.map((function(t){return[t,s]})))),Object.assign(l,{candleStudies:{bodyInstance:new ot(r,n),closeInstance:new ot(r,n),highInstance:new ot(r,n),lowInstance:new ot(r,n),openInstance:new ot(r,n)}}),i>0&&t.lag(f,i)}var h=u.open[e-1],y=u.high[e-1],p=u.low[e-1],v=u.close[e-1];if(0===e)return!0;var d=u.open[e],b=u.high[e],m=u.low[e],g=u.close[e],w=se(g,d),S=se(b,Math.max(d,g)),O=se(Math.min(d,g),m),_=se(v,d),j=se(g,v),A=se(b,y),P=se(m,p),E=se(d,h),k=null,T=null,I=null,x=null,M=null,R=l.candleStudies,C=R.bodyInstance,D=R.closeInstance,B=R.highInstance,L=R.lowInstance,V=R.openInstance;C.update(Math.abs(w),c),D.update(Math.abs(j),c),B.update(Math.abs(A),c),L.update(Math.abs(P),c),V.update(Math.abs(E),c);try{k=C.getResult(),T=D.getResult(),I=B.getResult(),x=L.getResult(),M=V.getResult()}catch(t){}return t.pushToMain({index:e,key:"candle_body",value:Bt(w,k,a)}),t.pushToMain({index:e,key:"candle_top",value:Bt(S,k,a)}),t.pushToMain({index:e,key:"candle_bottom",value:Bt(O,k,a)}),t.pushToMain({index:e,key:"candle_gap",value:Bt(_,k,a)}),t.pushToMain({index:e,key:"candle_change_close",value:Bt(j,T,a)}),t.pushToMain({index:e,key:"candle_change_high",value:Bt(A,I,a)}),t.pushToMain({index:e,key:"candle_change_low",value:Bt(P,x,a)}),t.pushToMain({index:e,key:"candle_change_open",value:Bt(E,M,a)}),!0}},Le=function(t,e,r){var n=function(t){return r>1?t*r:t};if("number"===e)return n(t);if("string"===e){var o=xt(t);return n(Number(o))}return 0},Ve=function(t,e){return"number"===e?t:"string"===e?Number(xt(t)):0},Ne=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=e.len,i=e.inputParams;e.nullArray=new Array(o).fill(null);var a=["open","high","low","close","volume"],u=new Set(a);if(0===n){!function(t){var e,n=t.inputParams,o=t.len,i=r(n);try{for(i.s();!(e=i.n()).done;){var a,u=r(e.value.params);try{for(u.s();!(a=u.n()).done;){var l=a.value;if("number"==typeof l&&l>o)throw console.log(l,o),new Error("At least one of the params of the indicator is greater than the input OHLCV length. Make sure to have enough datapoints in the input OHLCV.")}}catch(t){u.e(t)}finally{u.f()}}}catch(t){i.e(t)}finally{i.f()}}(e),a.forEach((function(t){e.verticalOhlcv[t]=Re(e.nullArray)}));var l=Object.keys(t[0]).filter((function(t){return!u.has(t)}));l.forEach((function(t){e.verticalOhlcv[t]=Re(e.nullArray)})),e.otherKeys=l,function(t,e){for(var r=0,n=Object.keys(e.inputTypes);r<n.length;r++){var o=n[r];if(!(o in t))throw new Error('Property "'.concat(o,'" not found in ohlcv array. ').concat(e.ticker));var i=t[o];if("number"==typeof i&&i>0)e.inputTypes[o]="number";else{if("string"!=typeof i||!/^(\d+(\.\d*)?|\.\d+)$/.test(i))throw new Error('Invalid property "'.concat(o,'" in ohlcv array. ').concat(e.ticker));e.inputTypes[o]="string",i=xt(i)}if(0===e.precisionMultiplier&&!0===e.precision){var a=(c=String(i).split("."),s=2,function(t){if(Array.isArray(t))return t}(c)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(c,s)||Ce(c,s)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1],u=void 0===a?"":a,l=Math.max(4,u.length);e.precisionMultiplier=l>1?Math.pow(10,l-1):1}}var c,s}(t[0],e)}else if(!e.otherKeys)throw new Error("otherKeys not found in main. Ensure you run with startIndex=0 first to initialize.");for(var c=function(t){return Array.isArray(t)?t.map((function(t){var e=t.key,r=t.params;return{key:e,fn:Be[e],args:r}})):[]}(i),s=n;s<o;s++){var f=t[s],h=f.open,y=f.high,p=f.low,v=f.close,d=f.volume,b=Me(f,Ie),m=e.precisionMultiplier,g=Le(h,e.inputTypes.open,m),w=Le(y,e.inputTypes.high,m),S=Le(p,e.inputTypes.low,m),O=Le(v,e.inputTypes.close,m),_=Ve(d,e.inputTypes.volume);e.pushToMain({index:s,key:"open",value:g}),e.pushToMain({index:s,key:"high",value:w}),e.pushToMain({index:s,key:"low",value:S}),e.pushToMain({index:s,key:"close",value:O}),e.pushToMain({index:s,key:"volume",value:_});var j,A=xe(e.otherKeys);try{for(A.s();!(j=A.n()).done;){var P=j.value;e.pushToMain({index:s,key:P,value:b[P]})}}catch(t){A.e(t)}finally{A.f()}var E,k=xe(c);try{for(k.s();!(E=k.n()).done;){var T=E.value,I=T.key,x=T.fn,M=T.args;["crossPairs","lag"].includes(I)||x.apply(void 0,[e,s].concat(Re(M)))}}catch(t){k.e(t)}finally{k.f()}de(e,s),Ae(e,s),e.lastComputedIndex++}},He=function(t,e){for(var r=t.length,n=new $(e),o=new Array(r),i=0,a=0,u=0,l=0;l<r;l++)if(n.update(t[l]),n.isStable){var c=n.getResult();o[l]=c,i+=c,a+=c*c,u++}else o[l]=null;var s=i/u,f=a/u-s*s,h=Math.sqrt(f);return o.map((function(t){return null!==t?(t-s)/h:null}))},Ue=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;if(t.length!==e.length)throw new Error("Both arrays must have the same length");for(var n=He(t,r),o=He(e,r),i=t.length,a=[],u=0,l=0,c=0,s=0,f=0,h=0,y=-1,p=0;p<i;p++){if(null!==n[p]&&null!==o[p]){y=p;break}a.push(0)}if(-1===y)return new Array(i).fill(0);for(var v=y;v<i;v++){var d=n[v],b=o[v];if(null!==d&&null!==b)if(u+=d,l+=b,c+=d*b,s+=d*d,f+=b*b,++h<2)a.push(0);else{var m=h*c-u*l,g=Math.sqrt((h*s-u*u)*(h*f-l*l)),w=0===g?0:m/g;a.push(w)}else u=l=c=s=f=h=0,a.push(0)}return a};function ze(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var $e=function(t){for(var e=t.input,r=t.inputParams,n=new(0,t.OHLCV_INDICATORS)({input:e}),o=0;o<r.length;o++){var i=r[o],a=i.key,u=i.params;Array.isArray(u)&&(u.length>0?(Array.isArray(u)&&"crossPairs"===a&&Array.isArray(u[0])&&(u[0]=u[0].filter((function(t){return!t.isDefault}))),n[a].apply(n,function(t){if(Array.isArray(t))return ze(t)}(l=u)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(l)||function(t,e){if(t){if("string"==typeof t)return ze(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ze(t,e):void 0}}(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())):n[a]())}var l;return n};function qe(t){return function(t){if(Array.isArray(t))return Ke(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Je(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fe(t){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fe(t)}function Ge(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||Je(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Je(t,e){if(t){if("string"==typeof t)return Ke(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ke(t,e):void 0}}function Ke(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function Ye(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function Qe(t,e,r){return(e=Xe(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function We(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Xe(n.key),n)}}function Xe(t){var e=function(t,e){if("object"!=Fe(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Fe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Fe(e)?e:e+""}var Ze=[.01,.02,.025,.05,.1,.2,.25,.5,1],tr=function(){return t=function t(e){var r=e.input,n=e.ticker,o=void 0===n?null:n,i=e.precision,a=void 0===i||i;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!Array.isArray(r))throw Error("input OHLCV must be an array: "+o);if(0===r.length)throw Error("input OHLCV must not be empty: "+o);if(!r[0].hasOwnProperty("close"))throw Error("input OHLCV array objects require at least close property: "+o);return this.isComputed=!1,this.lastComputedIndex=0,this.input=r,this.inputTypes={open:"",high:"",low:"",close:"",volume:""},this.priceBased=["open","high","low","close"],this.len=r.length,this.lastIndexReplace=!1,this.instances={},this.crossPairsList=[],this.verticalOhlcv={},this.inputParams=[],this.studies={},this.utilities={correlation:Ue},this.invalidValueIndex=-1,this.precision=a,this.precisionMultiplier=!0===this.precision?0:1,this.setIndicatorsFromInputParams=$e,this},e=[{key:"pushToMain",value:function(t){var e=t.index,r=t.key,n=t.value;null!==n&&NaN!==n&&void 0!==n||(this.invalidValueIndex=e),this.verticalOhlcv[r][e]=n}},{key:"getDataAsCols",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.compute();var e=this.precisionMultiplier,r=this.precision,n=this.invalidValueIndex,o=this.len,i=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Ye(Object(r),!0).forEach((function(e){Qe(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Ye(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},this.verticalOhlcv);if(r)for(var a=0,u=Object.entries(i);a<u.length;a++){var l=Ge(u[a],2),c=l[0],s=l[1];this.priceBased.includes(c)&&this.precision?(i[c]=n>=0&&!0===t?s.slice(-(o-n)):s,i[c]=i[c].map((function(t){return null===t||NaN===t||void 0===t?null:t/e}))):i[c]=n>=0&&!0===t?s.slice(-(o-n)):s}return i}},{key:"getData",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.compute();var e=this.precisionMultiplier,r=this.priceBased,n=this.precision;return function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,n=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,a=Object.keys(t);if(0===a.length)return[];for(var u=e?i:0,l=t[a[0]].length,c=new Array(l-u),s=u;s<l;s++){for(var f={},h=0;h<a.length;h++){var y=a[h],p=t[y][s];f[y]=null===p||NaN===p||void 0===p?null:r&&o.includes(y)?p/n:p}c[s-u]=f}return c}(this.verticalOhlcv,t,n,e,r,this.invalidValueIndex)}},{key:"getLastValues",value:function(){this.compute();for(var t=this.precisionMultiplier,e=this.priceBased,r=this.precision,n=this.verticalOhlcv,o=this.len,i={},a=0,u=Object.keys(n);a<u.length;a++){var l=u[a];i[l]=n[l][o-1]}return r?function(t){for(var e=t.row,r=t.precisionMultiplier,n=t.priceBased,o={},i=0,a=Object.entries(e);i<a.length;i++){var u=kt(a[i],2),l=u[0],c=u[1];n.includes(l)&&(c/=r),o[l]=c}return o}({row:i,precisionMultiplier:t,priceBased:e}):i}},{key:"compute",value:function(t){if(!0===this.isComputed&&!t)return this;if(this.isComputed=!1,this.isValidDate=this.input[0].hasOwnProperty("date")&&o(this.input[0].date),this.len>this.lastComputedIndex&&!t&&Ne(this.input,this,0),t&&"object"===Fe(t)){var e;if(!["open","high","low","close","volume","date"].every((function(e){return Object.keys(t).includes(e)})))throw Error('Invalid OHLCV object sent in "compute". Correct usage: .compute({open: 108.25, high: 108.410004, low: 108.25, close: 99999999, volume: 875903, date: "2024-12-16 15:45:00" || "2024-12-16"})');if(!this.isValidDate)throw Error('All the OHLCV rows require a valid date property to access the compute change method. Correct date format: "2024-12-16 15:45:00" or "2024-12-16"');if(!o(t.date))throw Error('The date in the new OHLCV row is invalid. Correct date format: "2024-12-16 15:45:00" or "2024-12-16"');var r=t.date,n=this.len-1,i=null===(e=this.input[n])||void 0===e?void 0:e.date;0===this.lastComputedIndex&&this.compute(),i!==r?(this.len++,this.input.push(t),Ne(this.input,this,this.len)):(this.input[n]=t,Ne(this.input,this,n))}return this}},{key:"crossPairs",value:function(t){return i(this),this.crossPairsList=[].concat(qe(this.crossPairsList),qe(t)),this.inputParams.push({key:"crossPairs",params:[this.crossPairsList]}),this}},{key:"lag",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;i(this),this.inputParams.push({key:"lag",params:[e,r]});for(var n=function(){var r=e[o];t.priceBased.find((function(t){return r===t}))&&t.priceBased.push(r)},o=0;o<e.length;o++)n();return this}},{key:"relativeVolume",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=e.scale,n=void 0===r?null:r;if("number"==typeof n&&!Ze.includes(n))throw new Error('"scale" value in relativeVolume must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"relativeVolume",params:[t,{scale:n}]}),this}},{key:"ema",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=$t("ema",t,e,Ze);return this.inputParams.push({key:"movingAverages",params:["ema",t,r]}),this}},{key:"sma",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this);var r=$t("sma",t,e,Ze);return this.inputParams.push({key:"movingAverages",params:["sma",t,r]}),this}},{key:"macd",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:12,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:26,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:9,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"fast" must be a positive number in macd.');if("number"!=typeof e||e<=t)throw new Error('"slow" must be a positive number greater than "fast" in macd.');if("number"!=typeof r||r<=0)throw new Error('"signal" must be a positive number in macd.');if("object"!==Fe(n))throw new Error('"options" must be an object in macd. eg: {target}');var o=n.target,a=void 0===o?"close":o;return this.inputParams.push({key:"macd",params:[t,e,r,{target:a}]}),this}},{key:"bollingerBands",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),!r||"object"!==Fe(r))throw new Error('"options" must be an object in bollingerBands. eg: {target, height, range}');var n=r.target,o=void 0===n?"close":n,a=r.height,u=void 0!==a&&a,l=r.range,c=void 0===l?[]:l,s=r.zScore,f=void 0===s?[]:s,h=r.scale,y=void 0===h?null:h;if("number"!=typeof t||t<=0)throw new Error('"size" must be a positive number in bollingerBands.');if("number"!=typeof e||e<=0)throw new Error('"stdDev" must be a positive number in bollingerBands.');if(!Array.isArray(c))throw new Error('If set, "range" must be a array of column names in bollingerBands.');if(!Array.isArray(f))throw new Error('If set, "zScore" must be a array of column names in bollingerBands.');if("boolean"!=typeof u)throw new Error('"height" must be a boolean in bollingerBands.');if("number"==typeof y&&!Ze.includes(y))throw new Error('"scale" value in bollingerBands must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"bollingerBands",params:[t,e,{target:o,height:u,scale:y,range:c,zScore:f}]}),this}},{key:"rsi",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number in rsi.');var r=e.scale,n=void 0===r?null:r,o=e.target,a=void 0===o?"close":o;if("number"==typeof n&&!Ze.includes(n))throw new Error('"scale" value in rsi must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"rsi",params:[t,{scale:n,target:a}]}),this}},{key:"donchianChannels",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number greater than 0 in donchianChannels.');if("number"!=typeof e||e<0)throw new Error('"offset" must be a number greater than or equal to 0 in donchianChannels.');var n=r.height,o=void 0!==n&&n,a=r.range,u=void 0===a?[]:a,l=r.scale,c=void 0===l?null:l;if(!Array.isArray(u))throw new Error('If set, "range" must be an array of column names in donchianChannels.');if("boolean"!=typeof o)throw new Error('"height" must be a boolean in donchianChannels.');if("number"==typeof c&&!Ze.includes(c))throw new Error('"scale" value in donchianChannels must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"donchianChannels",params:[t,e,{height:o,range:u,scale:c}]}),this}},{key:"candleStudies",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=0)throw new Error('"size" must be a positive number greater than 0 in candleStudies.');if("number"!=typeof e||e<=0)throw new Error('"stdDev" must be a positive number greater than 0 in candleStudies.');var n=r.lag,o=void 0===n?0:n,a=r.scale,u=void 0===a?.05:a;if("number"==typeof u&&!Ze.includes(u))throw new Error('"scale" value in candleStudies must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"candleStudies",params:[t,e,{lag:o,scale:u}]}),this}},{key:"volumeOscillator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(i(this),"number"!=typeof t||t<=1)throw new Error('fastSize" must be a positive number greater than 1 in volumeOscillator.');if("number"!=typeof e||e<=t)throw new Error('"slowSize" must be a positive number greater than the "fastSize" in volumeOscillator.');var n=r.scale,o=void 0===n?null:n;if("number"==typeof o&&!Ze.includes(o))throw new Error('"scale" value in volumeOscillator must be any of the following numbers: '.concat(Ze.join(", ")));return this.inputParams.push({key:"volumeOscillator",params:[t,e,{scale:o}]}),this}},{key:"dateTime",value:function(){return i(this),this.inputParams.push({key:"dateTime",params:[]}),this}},{key:"priceVariations",value:function(){return i(this),this.inputParams.push({key:"priceVariations",params:[]}),this}}],e&&We(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}()})(),OHLCV_INDICATORS=e})();
package/index.js CHANGED
@@ -5,6 +5,7 @@ import { validateDate } from './src/utilities/validators.js'
5
5
  import { isAlreadyComputed } from './src/utilities/validators.js'
6
6
  import { divideByMultiplier } from './src/utilities/numberUtilities.js'
7
7
  import { getMovingAveragesParams } from './src/moving-averages/movingAverages.js'
8
+ import { verticalToHorizontal } from './src/utilities/dataParsingUtilities.js'
8
9
 
9
10
  const validMagnitudeValues = [0.01, 0.02, 0.025, 0.05, 0.1, 0.20, 0.25, 0.5, 1]
10
11
 
@@ -25,7 +26,6 @@ export default class OHLCV_INDICATORS {
25
26
  this.instances = {}
26
27
  this.crossPairsList = []
27
28
  this.verticalOhlcv = {}
28
- this.horizontalOhlcv = Array.from({ length: this.len }, () => ({}))
29
29
 
30
30
  this.inputParams = []
31
31
 
@@ -34,6 +34,8 @@ export default class OHLCV_INDICATORS {
34
34
  correlation
35
35
  }
36
36
 
37
+ this.invalidValueIndex = -1
38
+
37
39
  this.precision = precision
38
40
  this.precisionMultiplier = (this.precision === true) ? 0 : 1
39
41
  this.setIndicatorsFromInputParams = setIndicatorsFromInputParams
@@ -43,31 +45,38 @@ export default class OHLCV_INDICATORS {
43
45
 
44
46
  pushToMain({index, key, value})
45
47
  {
48
+ if(value === null || value === NaN || typeof value === 'undefined')
49
+ {
50
+ this.invalidValueIndex = index
51
+ }
52
+
46
53
  this.verticalOhlcv[key][index] = value
47
- this.horizontalOhlcv[index][key] = value
48
54
  }
49
55
 
50
- getDataAsCols(){
56
+ getDataAsCols(skipNull = true){
51
57
 
52
58
  this.compute()
53
59
 
54
- const {precisionMultiplier, precision} = this
60
+ const {precisionMultiplier, precision, invalidValueIndex, len} = this
55
61
  const verticalClone = {...this.verticalOhlcv}
56
62
 
57
63
  if(precision)
58
64
  {
59
65
  for(const [key, arr] of Object.entries(verticalClone))
60
66
  {
61
- if(this.priceBased.includes(key))
67
+ if(this.priceBased.includes(key) && this.precision)
62
68
  {
63
- if(this.precision)
64
- {
65
- verticalClone[key] = arr.map(v => v / precisionMultiplier)
66
- }
67
- else
68
- {
69
- verticalClone[key] = arr
70
- }
69
+ verticalClone[key] = (invalidValueIndex >= 0 && skipNull === true)
70
+ ? arr.slice(-(len - invalidValueIndex))
71
+ : arr
72
+
73
+ verticalClone[key] = verticalClone[key]
74
+ .map(v => (v === null || v === NaN || typeof v === 'undefined') ? null : v / precisionMultiplier)
75
+ }
76
+ else{
77
+ verticalClone[key] = (invalidValueIndex >= 0 && skipNull === true)
78
+ ? arr.slice(-(len - invalidValueIndex))
79
+ : arr
71
80
  }
72
81
  }
73
82
  }
@@ -77,24 +86,15 @@ export default class OHLCV_INDICATORS {
77
86
 
78
87
  }
79
88
 
80
- getData() {
89
+ getData(skipNull = true) {
81
90
 
82
91
  //getData method returns the last object (row) of the new OHLCV with indicators: {open, high, low, close, rsi_14, bollinger_bands_upper}
83
92
  this.compute()
84
93
 
85
- const {precisionMultiplier, priceBased, precision} = this
94
+ const {precisionMultiplier, priceBased, precision, verticalOhlcv, invalidValueIndex} = this
86
95
 
87
- if(precision)
88
- {
89
- return this.horizontalOhlcv
90
- .filter(row => !Object.values(row).some(value => value === undefined || value === null))
91
- .map(row => divideByMultiplier({row, precisionMultiplier, priceBased}))
92
- }
93
- else
94
- {
95
- return this.horizontalOhlcv.filter(row => !Object.values(row).some(value => value === undefined || value === null))
96
- }
97
96
 
97
+ return verticalToHorizontal(verticalOhlcv, skipNull, precision, precisionMultiplier, priceBased, invalidValueIndex)
98
98
  }
99
99
 
100
100
 
@@ -102,20 +102,16 @@ export default class OHLCV_INDICATORS {
102
102
 
103
103
  this.compute()
104
104
 
105
- const {precisionMultiplier, priceBased, precision} = this
105
+ const {precisionMultiplier, priceBased, precision, verticalOhlcv, len} = this
106
+ const keyNames = Object.keys(verticalOhlcv)
107
+ const row = {}
106
108
 
107
- if(precision)
108
- {
109
- return divideByMultiplier({
110
- row: this.horizontalOhlcv[this.horizontalOhlcv.length - 1],
111
- precisionMultiplier,
112
- priceBased
113
- })
114
- }
115
- else
109
+ for(const key of keyNames)
116
110
  {
117
- return this.horizontalOhlcv[this.horizontalOhlcv.length - 1]
111
+ row[key] = verticalOhlcv[key][len - 1]
118
112
  }
113
+
114
+ return (precision) ? divideByMultiplier({row, precisionMultiplier, priceBased}) : row
119
115
  }
120
116
 
121
117
  compute(change) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ohlcv-indicators",
3
- "version": "2.1.7",
3
+ "version": "2.1.9",
4
4
  "description": "A JavaScript library featuring optimized trading indicators for OHLCV arrays [{open, high, low, close, value}]. This library is optimized for backtesting and trading bot development.",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -9,12 +9,12 @@ export const bollingerBands = (main, index, size, stdDev, { height, range = [],
9
9
  const { verticalOhlcv, instances, lastIndexReplace } = main;
10
10
  const suffix = target === defaultTarget ? '' : `_${target}`
11
11
  const indicatorKey = `${size}_${stdDev}${suffix}`
12
- let prefix // Will be computed during initialization
12
+ let prefix
13
13
 
14
14
  // Initialize indicator instances and output arrays on the first call.
15
15
  if (index === 0) {
16
16
 
17
- const {nullArray, priceBased, inputParams} = main
17
+ const {priceBased, inputParams, nullArray, verticalOhlcv} = main
18
18
 
19
19
  if (!(target in verticalOhlcv)) {
20
20
  throw new Error(`bollingerBands could not find target "${target}"`)
@@ -22,39 +22,36 @@ export const bollingerBands = (main, index, size, stdDev, { height, range = [],
22
22
 
23
23
  const numberOfIndicators = inputParams.filter(o => o.key === 'bollingerBands').length
24
24
  // Choose a prefix based on the number of indicators.
25
- prefix = numberOfIndicators > 1
25
+ const prefix = numberOfIndicators > 1
26
26
  ? `bollinger_bands_${indicatorKey}`
27
27
  : `bollinger_bands${suffix}`
28
28
 
29
29
  // Ensure the container exists.
30
- if (!instances.bollinger_bands) {
31
- instances.bollinger_bands = {
32
- numberOfIndicators,
33
- settings: {}
30
+ instances.bollinger_bands = {
31
+ numberOfIndicators,
32
+ settings: {
33
+ [indicatorKey]: new FasterBollingerBands(size, stdDev)
34
34
  }
35
35
  }
36
36
 
37
- // Create the Bollinger Bands (and optional height) indicator instance.
38
- instances.bollinger_bands.settings[indicatorKey] = {
39
- instance: new FasterBollingerBands(size, stdDev)
40
- }
41
-
42
- // Build the base output arrays.
43
- const ohlcvSetup = {
37
+ Object.assign(verticalOhlcv, {
44
38
  [`${prefix}_upper`]: [...nullArray],
45
39
  [`${prefix}_middle`]: [...nullArray],
46
- [`${prefix}_lower`]: [...nullArray],
47
- ...(height && { [`${prefix}_height`]: [...nullArray] })
48
- }
40
+ [`${prefix}_lower`]: [...nullArray]
41
+ })
49
42
 
50
- main.priceBased.push(`${prefix}_upper`, `${prefix}_middle`, `${prefix}_lower`)
43
+ if(height)
44
+ {
45
+ verticalOhlcv[`${prefix}_height`] = [...nullArray]
46
+ }
51
47
 
52
48
  // Set up additional arrays for each range property.
53
49
  for (const rangeKey of range) {
54
50
  if (!(rangeKey in verticalOhlcv) || !priceBased.includes(rangeKey)) {
55
51
  throw new Error(`Invalid range item value "${rangeKey}" property for bollingerBands. Only price based key names are accepted:\n${JSON.stringify(priceBased)}`)
56
52
  }
57
- ohlcvSetup[`${prefix}_range_${rangeKey}`] = [...nullArray]
53
+
54
+ verticalOhlcv[`${prefix}_range_${rangeKey}`] = [...nullArray]
58
55
  }
59
56
 
60
57
  // Set up additional arrays for each zScore property.
@@ -62,11 +59,10 @@ export const bollingerBands = (main, index, size, stdDev, { height, range = [],
62
59
  if (!(zScoreKey in verticalOhlcv) || !priceBased.includes(zScoreKey)) {
63
60
  throw new Error(`Invalid zScore item value "${zScoreKey}" for bollingerBands. Only price based key names are accepted:\n${JSON.stringify(priceBased)}`)
64
61
  }
65
- ohlcvSetup[`${prefix}_zscore_${zScoreKey}`] = [...nullArray]
62
+ verticalOhlcv[`${prefix}_zscore_${zScoreKey}`] = [...nullArray]
66
63
  }
67
64
 
68
- // Merge the new arrays into verticalOhlcv.
69
- Object.assign(verticalOhlcv, ohlcvSetup)
65
+ priceBased.push(`${prefix}_upper`, `${prefix}_middle`, `${prefix}_lower`)
70
66
  }
71
67
 
72
68
  // For subsequent calls, if prefix wasn’t computed (i.e. index > 0), derive it.
@@ -78,7 +74,7 @@ export const bollingerBands = (main, index, size, stdDev, { height, range = [],
78
74
  const subPrefix = prefix
79
75
 
80
76
  // Retrieve the indicator instance(s) and update with the current value.
81
- const { instance } = instances.bollinger_bands.settings[indicatorKey]
77
+ const instance = instances.bollinger_bands.settings[indicatorKey]
82
78
  const value = verticalOhlcv[target][index]
83
79
  instance.update(value, lastIndexReplace)
84
80
 
@@ -8,7 +8,7 @@ export const donchianChannels = (main, index, size, offset, { height, range, sca
8
8
 
9
9
  // Initialization: create output arrays and indicator instance on the first call.
10
10
  if (index === 0) {
11
- const {inputParams, nullArray, priceBased} = main
11
+ const {inputParams, priceBased, nullArray} = main
12
12
  const numberOfIndicators = inputParams.filter(o => o.key === 'donchianChannels').length
13
13
  const prefix = numberOfIndicators > 1 ? `donchian_channel_${indicatorKey}` : 'donchian_channel'
14
14
 
@@ -16,9 +16,13 @@ export const donchianChannels = (main, index, size, offset, { height, range, sca
16
16
  [`${prefix}_upper`]: [...nullArray],
17
17
  [`${prefix}_basis`]: [...nullArray],
18
18
  [`${prefix}_lower`]: [...nullArray],
19
- ...(height && { [`${prefix}_height`]: [...nullArray] })
20
19
  })
21
20
 
21
+ if(height)
22
+ {
23
+ verticalOhlcv[`${prefix}_height`] = [...nullArray]
24
+ }
25
+
22
26
  priceBased.push(`${prefix}_upper`, `${prefix}_basis`, `${prefix}_lower`);
23
27
 
24
28
  if (!instances.hasOwnProperty('donchian_channel')) {
@@ -4,7 +4,7 @@ const defaultTarget = 'close';
4
4
 
5
5
  export const macd = (main, index, fast, slow, signal, options) => {
6
6
  const { target } = options;
7
- const { verticalOhlcv, instances } = main;
7
+ const { verticalOhlcv, instances, lastIndexReplace } = main;
8
8
 
9
9
  // Instance key (for internal storage) includes target if not default.
10
10
  const instanceKey = `${fast}_${slow}_${signal}${target === defaultTarget ? '' : `_${target}`}`;
@@ -39,13 +39,13 @@ export const macd = (main, index, fast, slow, signal, options) => {
39
39
  new FasterEMA(fast),
40
40
  new FasterEMA(slow),
41
41
  new FasterEMA(signal)
42
- );
42
+ )
43
43
 
44
44
  Object.assign(verticalOhlcv, {
45
45
  [diffKey]: [...nullArray],
46
46
  [deaKey]: [...nullArray],
47
47
  [histogramKey]: [...nullArray],
48
- });
48
+ })
49
49
  }
50
50
 
51
51
  const {numberOfIndicators, settings} = instances.macd
@@ -58,7 +58,7 @@ export const macd = (main, index, fast, slow, signal, options) => {
58
58
 
59
59
  const macdInstance = settings[instanceKey];
60
60
  const value = verticalOhlcv[target][index];
61
- macdInstance.update(value, main.lastIndexReplace);
61
+ macdInstance.update(value, lastIndexReplace);
62
62
 
63
63
  let macdResult;
64
64
  try {
@@ -4,23 +4,27 @@ import { calcMagnitude } from '../utilities/numberUtilities.js';
4
4
  export const relativeVolume = (main, index, size = 10, {scale}) => {
5
5
 
6
6
  const key = `relative_volume_${size}`
7
+ const {instances, verticalOhlcv, lastIndexReplace} = main
7
8
 
8
9
  if (index === 0) {
9
- main.instances[key] = {
10
+
11
+ const {nullArray} = main
12
+
13
+ instances[key] = {
10
14
  instance: new FasterSMA(size),
11
15
  prevRelativeVolumeSma: null
12
16
  }
13
17
 
14
- Object.assign(main.verticalOhlcv, {
15
- [key]: [...main.nullArray],
18
+ Object.assign(verticalOhlcv, {
19
+ [key]: [...nullArray],
16
20
  })
17
21
  }
18
22
 
19
23
 
20
- const value = main.verticalOhlcv.volume[index]
24
+ const value = verticalOhlcv.volume[index]
21
25
 
22
- const smaInstance = main.instances[key].instance
23
- smaInstance.update(value, main.lastIndexReplace)
26
+ const smaInstance = instances[key].instance
27
+ smaInstance.update(value, lastIndexReplace)
24
28
 
25
29
  let smaValue;
26
30
  try {
@@ -31,11 +35,11 @@ export const relativeVolume = (main, index, size = 10, {scale}) => {
31
35
  //do nothing
32
36
  }
33
37
 
34
- const {prevRelativeVolumeSma} = main.instances[key]
38
+ const {prevRelativeVolumeSma} = instances[key]
35
39
 
36
40
  let currRelativeVolume = null
37
41
 
38
- if(smaValue !== null && prevRelativeVolumeSma !== null)
42
+ if(smaValue !== null && prevRelativeVolumeSma !== null && typeof smaValue !== 'undefined' && prevRelativeVolumeSma !== 'undefined')
39
43
  {
40
44
  currRelativeVolume = value / prevRelativeVolumeSma
41
45
 
@@ -51,7 +55,7 @@ export const relativeVolume = (main, index, size = 10, {scale}) => {
51
55
  value: currRelativeVolume
52
56
  })
53
57
 
54
- main.instances[key].prevRelativeVolumeSma = smaValue
58
+ instances[key].prevRelativeVolumeSma = smaValue
55
59
 
56
60
  return true;
57
61
  };
@@ -29,7 +29,7 @@ export const rsi = (main, index, size, {scale, target}) => {
29
29
 
30
30
  Object.assign(verticalOhlcv, {
31
31
  [rsiKey]: [...nullArray],
32
- [rsiSmaKey]: [...nullArray]
32
+ [rsiSmaKey]: [...nullArray],
33
33
  })
34
34
  }
35
35
 
@@ -74,6 +74,4 @@ export const rsi = (main, index, size, {scale, target}) => {
74
74
 
75
75
  main.pushToMain({index, key: rsiSmaKey, value: smoothedRsi})
76
76
  }
77
-
78
- return true
79
77
  }
@@ -3,26 +3,28 @@ import { calcMagnitude } from '../utilities/numberUtilities.js';
3
3
 
4
4
  export const volumeOscillator = (main, index, fast, slow, {scale}) => {
5
5
 
6
- const value = main.verticalOhlcv.volume[index]
6
+ const {verticalOhlcv, instances, lastIndexReplace} = main
7
+ const value = verticalOhlcv.volume[index]
7
8
  const key = 'volume_oscillator'
8
9
 
9
10
  if (index === 0) {
10
11
 
11
- Object.assign(main.instances, {
12
+ const {crossPairsList, nullArray} = main
13
+ Object.assign(instances, {
12
14
  volume_oscillator: {
13
15
  fastEMA: new FasterEMA(fast),
14
16
  slowEMA: new FasterEMA(slow)
15
17
  }
16
18
  })
17
19
 
18
- main.verticalOhlcv[key] = [...main.nullArray];
19
- main.crossPairsList.push({ fast: key, slow: 0, isDefault: true });
20
+ verticalOhlcv[key] = [...nullArray];
21
+ crossPairsList.push({ fast: key, slow: 0, isDefault: true });
20
22
  }
21
23
 
22
- const { fastEMA, slowEMA } = main.instances[key];
24
+ const { fastEMA, slowEMA } = instances[key];
23
25
 
24
- fastEMA.update(value, main.lastIndexReplace);
25
- slowEMA.update(value, main.lastIndexReplace);
26
+ fastEMA.update(value, lastIndexReplace);
27
+ slowEMA.update(value, lastIndexReplace);
26
28
 
27
29
  let fastValue = null;
28
30
  let slowValue = null;
@@ -1,13 +1,15 @@
1
1
  export const dateTime = (main, index) => {
2
2
 
3
+ const {instances, verticalOhlcv} = main
4
+
3
5
  if(index === 0)
4
6
  {
7
+ const {nullArray, isValidDate} = main
8
+ if(!isValidDate) throw Error('dateTime method found and invalid "date" in input ohlcv')
5
9
 
6
- if(!main.isValidDate) throw Error('dateTime method found and invalid "date" in input ohlcv')
10
+ const index0DateStr = verticalOhlcv.date[0].slice(0, 10)
7
11
 
8
- const index0DateStr = main.verticalOhlcv.date[0].slice(0, 10)
9
-
10
- Object.assign(main.instances, {
12
+ Object.assign(instances, {
11
13
  dateTime: {
12
14
  prevDateStr: index0DateStr,
13
15
  sessionDailyIndexCount: 0,
@@ -16,19 +18,19 @@ export const dateTime = (main, index) => {
16
18
  }
17
19
  })
18
20
 
19
- Object.assign(main.verticalOhlcv, {
20
- day_of_the_week: [...main.nullArray],
21
- day_of_the_month: [...main.nullArray],
22
- week_of_the_month: [...main.nullArray],
23
- hour: [...main.nullArray],
24
- month: [...main.nullArray],
25
- year: [...main.nullArray],
26
- session_daily_index: [...main.nullArray],
27
- session_intraday_index: [...main.nullArray],
21
+ Object.assign(verticalOhlcv, {
22
+ day_of_the_week: [...nullArray],
23
+ day_of_the_month: [...nullArray],
24
+ week_of_the_month: [...nullArray],
25
+ hour: [...nullArray],
26
+ month: [...nullArray],
27
+ year: [...nullArray],
28
+ session_daily_index: [...nullArray],
29
+ session_intraday_index: [...nullArray],
28
30
  })
29
31
  }
30
32
 
31
- const currDate = main.verticalOhlcv.date[index]
33
+ const currDate = verticalOhlcv.date[index]
32
34
  const {
33
35
  day_of_the_week,
34
36
  day_of_the_month,
@@ -41,15 +43,15 @@ export const dateTime = (main, index) => {
41
43
 
42
44
  const currDateStr = currDate.slice(0, 10)
43
45
 
44
- if(currDateStr !== main.instances.dateTime.prevDateStr)
46
+ if(currDateStr !== instances.dateTime.prevDateStr)
45
47
  {
46
- main.instances.dateTime.prevDateStr = currDateStr
47
- main.instances.dateTime.sessionDailyIndexCount++
48
- main.instances.dateTime.sessionIntradayIndexCount = 0
48
+ instances.dateTime.prevDateStr = currDateStr
49
+ instances.dateTime.sessionDailyIndexCount++
50
+ instances.dateTime.sessionIntradayIndexCount = 0
49
51
  }
50
52
 
51
- main.pushToMain({index, key: 'session_daily_index', value: main.instances.dateTime.sessionDailyIndexCount})
52
- main.pushToMain({index, key: 'session_intraday_index', value: main.instances.dateTime.sessionIntradayIndexCount})
53
+ main.pushToMain({index, key: 'session_daily_index', value: instances.dateTime.sessionDailyIndexCount})
54
+ main.pushToMain({index, key: 'session_intraday_index', value: instances.dateTime.sessionIntradayIndexCount})
53
55
  main.pushToMain({index, key: 'day_of_the_week', value: day_of_the_week})
54
56
  main.pushToMain({index, key: 'day_of_the_month', value: day_of_the_month})
55
57
  main.pushToMain({index, key: 'week_of_the_month', value: week_of_the_month})
@@ -134,17 +134,21 @@ class CrossInstance {
134
134
 
135
135
  export const crossPairs = (main, index) => {
136
136
 
137
+ const {nullArray, verticalOhlcv, instances, len} = main
137
138
 
138
139
  if(index === 0)
139
140
  {
140
- const findParams = main.inputParams.filter(o => o.key === 'crossPairs')
141
+ const {inputParams} = main
142
+ const findParams = inputParams.filter(o => o.key === 'crossPairs')
141
143
 
142
144
  if(typeof findParams !== 'object') return
143
145
 
144
- main.instances.crossPairs = {crossPairsList: findParams.flatMap(o => o.params.flat())}
146
+ instances.crossPairs = {crossPairsList: findParams.flatMap(o => o.params.flat())}
145
147
  }
146
148
 
147
- for (const { fast, slow } of main.instances.crossPairs.crossPairsList)
149
+ const {crossPairsList} = instances.crossPairs
150
+
151
+ for (const { fast, slow } of crossPairsList)
148
152
  {
149
153
  if (!fast || !slow) continue
150
154
 
@@ -154,15 +158,16 @@ export const crossPairs = (main, index) => {
154
158
  {
155
159
  if(typeof slow === 'number')
156
160
  {
157
- main.verticalOhlcv[slow] = new Array(main.len).fill(slow)
161
+ verticalOhlcv[slow] = new Array(len).fill(slow)
158
162
  }
159
163
 
160
- if(fast !== 'price' && !main.verticalOhlcv.hasOwnProperty(fast)) throw Error(`fast "${fast} not found in crossPairs"`)
161
- if(!main.verticalOhlcv.hasOwnProperty(slow)) throw Error(`slow "${slow} not found in crossPairs"`)
164
+ if(fast !== 'price' && !verticalOhlcv.hasOwnProperty(fast)) throw Error(`fast "${fast} not found in crossPairs"`)
165
+ if(!verticalOhlcv.hasOwnProperty(slow)) throw Error(`slow "${slow} not found in crossPairs"`)
166
+
162
167
 
168
+ instances[crossName] = new CrossInstance()
163
169
 
164
- main.instances[crossName] = new CrossInstance()
165
- main.verticalOhlcv[crossName] = [...main.nullArray]
170
+ verticalOhlcv[crossName] = [...nullArray]
166
171
  }
167
172
 
168
173
  let fastValue
@@ -173,22 +178,22 @@ export const crossPairs = (main, index) => {
173
178
 
174
179
  if(fast === 'price')
175
180
  {
176
- closeValue = main.verticalOhlcv.close[index]
177
- highValue = main.verticalOhlcv.high[index]
178
- lowValue = main.verticalOhlcv.low[index]
179
- slowValue = main.verticalOhlcv[slow][index]
181
+ closeValue = verticalOhlcv.close[index]
182
+ highValue = verticalOhlcv.high[index]
183
+ lowValue = verticalOhlcv.low[index]
184
+ slowValue = verticalOhlcv[slow][index]
180
185
 
181
- main.instances[crossName].update({fast: closeValue, slow: slowValue, high: highValue, low: lowValue})
186
+ instances[crossName].update({fast: closeValue, slow: slowValue, high: highValue, low: lowValue})
182
187
 
183
188
  } else
184
189
  {
185
- fastValue = main.verticalOhlcv[fast][index]
186
- slowValue = main.verticalOhlcv[slow][index]
190
+ fastValue = verticalOhlcv[fast][index]
191
+ slowValue = verticalOhlcv[slow][index]
187
192
 
188
- main.instances[crossName].update({fast: fastValue, slow: slowValue})
193
+ instances[crossName].update({fast: fastValue, slow: slowValue})
189
194
  }
190
195
 
191
- main.pushToMain({index, key: crossName, value: main.instances[crossName].getResult()})
196
+ main.pushToMain({index, key: crossName, value: instances[crossName].getResult()})
192
197
  }
193
198
 
194
199
  }
@@ -1,8 +1,11 @@
1
1
  export const lag = (main, index) => {
2
2
 
3
+ const {instances, verticalOhlcv, nullArray} = main
4
+
3
5
  if(index === 0)
4
6
  {
5
- const findParams = main.inputParams.filter(o => o.key === 'lag')
7
+ const {inputParams, priceBased} = main
8
+ const findParams = inputParams.filter(o => o.key === 'lag')
6
9
 
7
10
  if(typeof findParams !== 'object') return
8
11
 
@@ -12,30 +15,32 @@ export const lag = (main, index) => {
12
15
  {
13
16
  for (const colKey of colKeys)
14
17
  {
15
- if(main.priceBased.includes(colKey))
18
+ if(priceBased.includes(colKey))
16
19
  {
17
20
  for (let lag = 1; lag <= lags; lag++) {
18
- main.priceBased.push(`${colKey}_lag_${lag}`)
21
+ priceBased.push(`${colKey}_lag_${lag}`)
19
22
  }
20
23
  }
21
24
  }
22
25
  }
23
26
 
24
- main.instances.lag = {
27
+ instances.lag = {
25
28
  lagParams: params
26
29
  }
27
30
  }
28
31
 
29
- for (const [colKeys, lags] of main.instances.lag.lagParams) {
32
+ const {lagParams} = instances.lag
33
+
34
+ for (const [colKeys, lags] of lagParams) {
30
35
 
31
36
  for (const colKey of colKeys) {
32
- const currentColumn = main.verticalOhlcv[colKey];
37
+ const currentColumn = verticalOhlcv[colKey];
33
38
 
34
39
  // Initialize lagged arrays only on the first index
35
40
  if (index === 0) {
36
41
  for (let lag = 1; lag <= lags; lag++) {
37
42
  const key = `${colKey}_lag_${lag}`;
38
- main.verticalOhlcv[key] = [...main.nullArray];
43
+ verticalOhlcv[key] = [...nullArray];
39
44
  }
40
45
  }
41
46
 
@@ -45,7 +50,7 @@ export const lag = (main, index) => {
45
50
  const laggedIndex = index - lag;
46
51
 
47
52
  if(laggedIndex <= 0) break
48
-
53
+
49
54
  main.pushToMain({index, key, value: currentColumn[laggedIndex]})
50
55
  }
51
56
  }
@@ -0,0 +1,37 @@
1
+ export const verticalToHorizontal = (
2
+ obj,
3
+ skipNull = false,
4
+ precision,
5
+ precisionMultiplier,
6
+ priceBased,
7
+ invalidValueIndex = 0
8
+ ) => {
9
+ const keys = Object.keys(obj);
10
+ if (keys.length === 0) return [];
11
+
12
+ const startIndex = skipNull && invalidValueIndex >= 0 ? invalidValueIndex + 1 : 0;
13
+ const endIndex = obj[keys[0]].length;
14
+ const len = endIndex - startIndex;
15
+
16
+ const result = new Array(len);
17
+
18
+ for (let i = startIndex; i < endIndex; i++) {
19
+ const row = {};
20
+ for (let j = 0; j < keys.length; j++) {
21
+ const key = keys[j];
22
+ const value = obj[key][i];
23
+
24
+ if(value === null || value === NaN || typeof value === 'undefined')
25
+ {
26
+ row[key] = null
27
+ }
28
+ else{
29
+ row[key] = (precision && priceBased.includes(key)) ? value / precisionMultiplier : value
30
+ }
31
+
32
+ }
33
+ result[i - startIndex] = row;
34
+ }
35
+
36
+ return result;
37
+ };
@@ -100,6 +100,8 @@ const parseVolume = (volume, type) => {
100
100
 
101
101
  export const parseOhlcvToVertical = (input, main, startIndex = 0) => {
102
102
  const { len, inputParams } = main;
103
+
104
+ //do not move nullArray from here
103
105
  main.nullArray = new Array(len).fill(null);
104
106
 
105
107
  const BASE_KEYS = ['open', 'high', 'low', 'close', 'volume'];