ohlcv-indicators 1.9.4 → 1.9.5

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){(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:()=>te});var n=function(t,e){return t===e},i=function(t,e){return t>e},o=function(t,e){return t<e},a=function(t){var e=t.fast,r=t.high,a=t.low,u=t.slow,s=e.length;if(s==!u.length)throw Error("fast and slow do not have the same length");for(var f=new Array(s).fill(.5),h=0;h<s;h++){var v=(null==f?void 0:f[h-1])||.5,p=e[h],y=u[h],d=null==r?void 0:r[h],b=null==a?void 0:a[h];if(!r&&!a||void 0!==d&&void 0!==b){var m=u[h-1],g=null==r?void 0:r[h-1],w=null==a?void 0:a[h-1];if(!r&&!a||void 0!==g&&void 0!==w&&void 0!==m){var _=void 0;null===p||null===y?_=.5:n(p,y)?_=v:i(p,y)?_=o(b,y)&&i(w,m)?0:1:o(p,y)&&(_=i(d,y)&&o(g,m)?1:0),f[h]=_}}}var O=c(f);return l(O)},l=function(t){var e=t.map((function(t){return t.length}));return t.map((function(t,r){var n=e[r];return t.map((function(t,e){var r=n-e;return.5===t&&(r=0),1===t&&(r*=1),0===t&&(r*=-1),r})).reverse()})).flat()},c=function(t){return 0===t.length?[]:t.reduce((function(t,e,r,n){if(0===r)t.push([e]);else{var i=n[r-1],o=t[t.length-1];e!==i?t.push([e]):o.push(e)}return t}),[])},u=1e6,s="[big.js] ",f=s+"Invalid ",h=f+"decimal places",v=f+"rounding mode",p=s+"Division by zero",y={},d=void 0,b=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function m(t,e,r,n){var i=t.c;if(r===d&&(r=t.constructor.RM),0!==r&&1!==r&&2!==r&&3!==r)throw Error(v);if(e<1)n=3===r&&(n||!!i[0])||0===e&&(1===r&&i[0]>=5||2===r&&(i[0]>5||5===i[0]&&(n||i[1]!==d))),i.length=1,n?(t.e=t.e-e+1,i[0]=1):i[0]=t.e=0;else if(e<i.length){if(n=1===r&&i[e]>=5||2===r&&(i[e]>5||5===i[e]&&(n||i[e+1]!==d||1&i[e-1]))||3===r&&(n||!!i[0]),i.length=e,n)for(;++i[--e]>9;)if(i[e]=0,0===e){++t.e,i.unshift(1);break}for(e=i.length;!i[--e];)i.pop()}return t}function g(t,e,r){var n=t.e,i=t.c.join(""),o=i.length;if(e)i=i.charAt(0)+(o>1?"."+i.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)i="0"+i;i="0."+i}else if(n>0)if(++n>o)for(n-=o;n--;)i+="0";else n<o&&(i=i.slice(0,n)+"."+i.slice(n));else o>1&&(i=i.charAt(0)+"."+i.slice(1));return t.s<0&&r?"-"+i:i}function w(t){return w="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},w(t)}function _(t){var e="function"==typeof Map?new Map:void 0;return _=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(O())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,e);var i=new(t.bind.apply(t,n));return r&&P(i,r.prototype),i}(t,arguments,S(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),P(r,t)},_(t)}function O(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(O=function(){return!!t})()}function P(t,e){return P=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},P(t,e)}function S(t){return S=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},S(t)}y.abs=function(){var t=new this.constructor(this);return t.s=1,t},y.cmp=function(t){var e,r=this,n=r.c,i=(t=new r.constructor(t)).c,o=r.s,a=t.s,l=r.e,c=t.e;if(!n[0]||!i[0])return n[0]?o:i[0]?-a:0;if(o!=a)return o;if(e=o<0,l!=c)return l>c^e?1:-1;for(a=(l=n.length)<(c=i.length)?l:c,o=-1;++o<a;)if(n[o]!=i[o])return n[o]>i[o]^e?1:-1;return l==c?0:l>c^e?1:-1},y.div=function(t){var e=this,r=e.constructor,n=e.c,i=(t=new r(t)).c,o=e.s==t.s?1:-1,a=r.DP;if(a!==~~a||a<0||a>u)throw Error(h);if(!i[0])throw Error(p);if(!n[0])return t.s=o,t.c=[t.e=0],t;var l,c,s,f,v,y=i.slice(),b=l=i.length,g=n.length,w=n.slice(0,l),_=w.length,O=t,P=O.c=[],S=0,j=a+(O.e=e.e-t.e)+1;for(O.s=o,o=j<0?0:j,y.unshift(0);_++<l;)w.push(0);do{for(s=0;s<10;s++){if(l!=(_=w.length))f=l>_?1:-1;else for(v=-1,f=0;++v<l;)if(i[v]!=w[v]){f=i[v]>w[v]?1:-1;break}if(!(f<0))break;for(c=_==l?i:y;_;){if(w[--_]<c[_]){for(v=_;v&&!w[--v];)w[v]=9;--w[v],w[_]+=10}w[_]-=c[_]}for(;!w[0];)w.shift()}P[S++]=f?s:++s,w[0]&&f?w[_]=n[b]||0:w=[n[b]]}while((b++<g||w[0]!==d)&&o--);return P[0]||1==S||(P.shift(),O.e--,j--),S>j&&m(O,j,r.RM,w[0]!==d),O},y.eq=function(t){return 0===this.cmp(t)},y.gt=function(t){return this.cmp(t)>0},y.gte=function(t){return this.cmp(t)>-1},y.lt=function(t){return this.cmp(t)<0},y.lte=function(t){return this.cmp(t)<1},y.minus=y.sub=function(t){var e,r,n,i,o=this,a=o.constructor,l=o.s,c=(t=new a(t)).s;if(l!=c)return t.s=-c,o.plus(t);var u=o.c.slice(),s=o.e,f=t.c,h=t.e;if(!u[0]||!f[0])return f[0]?t.s=-c:u[0]?t=new a(o):t.s=1,t;if(l=s-h){for((i=l<0)?(l=-l,n=u):(h=s,n=f),n.reverse(),c=l;c--;)n.push(0);n.reverse()}else for(r=((i=u.length<f.length)?u:f).length,l=c=0;c<r;c++)if(u[c]!=f[c]){i=u[c]<f[c];break}if(i&&(n=u,u=f,f=n,t.s=-t.s),(c=(r=f.length)-(e=u.length))>0)for(;c--;)u[e++]=0;for(c=e;r>l;){if(u[--r]<f[r]){for(e=r;e&&!u[--e];)u[e]=9;--u[e],u[r]+=10}u[r]-=f[r]}for(;0===u[--c];)u.pop();for(;0===u[0];)u.shift(),--h;return u[0]||(t.s=1,u=[h=0]),t.c=u,t.e=h,t},y.mod=function(t){var e,r=this,n=r.constructor,i=r.s,o=(t=new n(t)).s;if(!t.c[0])throw Error(p);return r.s=t.s=1,e=1==t.cmp(r),r.s=i,t.s=o,e?new n(r):(i=n.DP,o=n.RM,n.DP=n.RM=0,r=r.div(t),n.DP=i,n.RM=o,this.minus(r.times(t)))},y.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},y.plus=y.add=function(t){var e,r,n,i=this,o=i.constructor;if(t=new o(t),i.s!=t.s)return t.s=-t.s,i.minus(t);var a=i.e,l=i.c,c=t.e,u=t.c;if(!l[0]||!u[0])return u[0]||(l[0]?t=new o(i):t.s=i.s),t;if(l=l.slice(),e=a-c){for(e>0?(c=a,n=u):(e=-e,n=l),n.reverse();e--;)n.push(0);n.reverse()}for(l.length-u.length<0&&(n=u,u=l,l=n),e=u.length,r=0;e;l[e]%=10)r=(l[--e]=l[e]+u[e]+r)/10|0;for(r&&(l.unshift(r),++c),e=l.length;0===l[--e];)l.pop();return t.c=l,t.e=c,t},y.pow=function(t){var e=this,r=new e.constructor("1"),n=r,i=t<0;if(t!==~~t||t<-1e6||t>1e6)throw Error(f+"exponent");for(i&&(t=-t);1&t&&(n=n.times(e)),t>>=1;)e=e.times(e);return i?r.div(n):n},y.prec=function(t,e){if(t!==~~t||t<1||t>u)throw Error(f+"precision");return m(new this.constructor(this),t,e)},y.round=function(t,e){if(t===d)t=0;else if(t!==~~t||t<-u||t>u)throw Error(h);return m(new this.constructor(this),t+this.e+1,e)},y.sqrt=function(){var t,e,r,n=this,i=n.constructor,o=n.s,a=n.e,l=new i("0.5");if(!n.c[0])return new i(n);if(o<0)throw Error(s+"No square root");0===(o=Math.sqrt(n+""))||o===1/0?((e=n.c.join("")).length+a&1||(e+="0"),a=((a+1)/2|0)-(a<0||1&a),t=new i(((o=Math.sqrt(e))==1/0?"5e":(o=o.toExponential()).slice(0,o.indexOf("e")+1))+a)):t=new i(o+""),a=t.e+(i.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 m(t,(i.DP-=4)+t.e+1,i.RM)},y.times=y.mul=function(t){var e,r=this,n=r.constructor,i=r.c,o=(t=new n(t)).c,a=i.length,l=o.length,c=r.e,u=t.e;if(t.s=r.s==t.s?1:-1,!i[0]||!o[0])return t.c=[t.e=0],t;for(t.e=c+u,a<l&&(e=i,i=o,o=e,u=a,a=l,l=u),e=new Array(u=a+l);u--;)e[u]=0;for(c=l;c--;){for(l=0,u=a+c;u>c;)l=e[u]+o[c]*i[u-c-1]+l,e[u--]=l%10,l=l/10|0;e[u]=l}for(l?++t.e:e.shift(),c=e.length;!e[--c];)e.pop();return t.c=e,t},y.toExponential=function(t,e){var r=this,n=r.c[0];if(t!==d){if(t!==~~t||t<0||t>u)throw Error(h);for(r=m(new r.constructor(r),++t,e);r.c.length<t;)r.c.push(0)}return g(r,!0,!!n)},y.toFixed=function(t,e){var r=this,n=r.c[0];if(t!==d){if(t!==~~t||t<0||t>u)throw Error(h);for(t=t+(r=m(new r.constructor(r),t+r.e+1,e)).e+1;r.c.length<t;)r.c.push(0)}return g(r,!1,!!n)},y[Symbol.for("nodejs.util.inspect.custom")]=y.toJSON=y.toString=function(){var t=this,e=t.constructor;return g(t,t.e<=e.NE||t.e>=e.PE,!!t.c[0])},y.toNumber=function(){var t=Number(g(this,!0,!0));if(!0===this.constructor.strict&&!this.eq(t.toString()))throw Error(s+"Imprecise conversion");return t},y.toPrecision=function(t,e){var r=this,n=r.constructor,i=r.c[0];if(t!==d){if(t!==~~t||t<1||t>u)throw Error(f+"precision");for(r=m(new n(r),t,e);r.c.length<t;)r.c.push(0)}return g(r,t<=r.e||r.e<=n.NE||r.e>=n.PE,!!i)},y.valueOf=function(){var t=this,e=t.constructor;if(!0===e.strict)throw Error(s+"valueOf disallowed");return g(t,t.e<=e.NE||t.e>=e.PE,!0)},function t(){function e(r){var n=this;if(!(n instanceof e))return r===d?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(f+"value");r=0===r&&1/r<0?"-0":String(r)}!function(t,e){var r,n,i;if(!b.test(e))throw Error(f+"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),i=e.length,n=0;n<i&&"0"==e.charAt(n);)++n;if(n==i)t.c=[t.e=0];else{for(;i>0&&"0"==e.charAt(--i););for(t.e=r-n-1,t.c=[],r=0;n<=i;)t.c[r++]=+e.charAt(n++)}}(n,r)}n.constructor=e}return e.prototype=y,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 j=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"==w(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,O()?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&&P(t,e)}(e,t),r=e,Object.defineProperty(r,"prototype",{writable:!1}),r;var r}(_(Error));function A(t){return A="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},A(t)}function E(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,k(n.key),n)}}function R(t,e,r){return(e=k(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function k(t){var e=function(t,e){if("object"!=A(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=A(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==A(e)?e:e+""}var I=function(){return t=function t(){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),R(this,"previousHighest",void 0),R(this,"highest",void 0),R(this,"previousLowest",void 0),R(this,"lowest",void 0),R(this,"previousResult",void 0),R(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 j;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)}}])&&E(t.prototype,e),r&&E(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function M(t){return M="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},M(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,L(n.key),n)}}function C(t,e,r){return e=x(e),function(t,e){if(e&&("object"==M(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,D()?Reflect.construct(e,r||[],x(t).constructor):e.apply(t,r))}function D(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(D=function(){return!!t})()}function x(t){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},x(t)}function B(t,e){return B=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},B(t,e)}function L(t){var e=function(t,e){if("object"!=M(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=M(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==M(e)?e:e+""}var z=function(t){function e(t){var r,n,i,o;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),n=r=C(this,e),o=void 0,(i=L(i="interval"))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o,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&&B(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),i&&T(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(I);function F(t){return F="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},F(t)}function N(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,G(n.key),n)}}function V(t,e,r){return e=q(e),function(t,e){if(e&&("object"==F(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,H()?Reflect.construct(e,r||[],q(t).constructor):e.apply(t,r))}function H(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(H=function(){return!!t})()}function q(t){return q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},q(t)}function U(t,e){return U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},U(t,e)}function G(t){var e=function(t,e){if("object"!=F(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=F(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==F(e)?e:e+""}var $=function(t){function e(){var t,r,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var o=arguments.length,a=new Array(o),l=0;l<o;l++)a[l]=arguments[l];return r=t=V(this,e,[].concat(a)),i=[],(n=G(n="prices"))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,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&&N(r.prototype,n),i&&N(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(z);function W(t){return W="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},W(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,tt(n.key),n)}}function K(t,e,r){return e=Q(e),function(t,e){if(e&&("object"==W(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,Y()?Reflect.construct(e,r||[],Q(t).constructor):e.apply(t,r))}function Y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(Y=function(){return!!t})()}function Q(t){return Q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Q(t)}function X(t,e){return X=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},X(t,e)}function Z(t,e,r){return(e=tt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function tt(t){var e=function(t,e){if("object"!=W(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=W(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==W(e)?e:e+""}var et=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),Z(r=K(this,e),"interval",void 0),Z(r,"indicator",void 0),Z(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&&X(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 i=(t-this.result)*this.smoothingFactor;return this.setResult(i+this.result,e)}if(void 0===this.result&&void 0!==r)return this.setResult(r,e)}}],n&&J(r.prototype,n),i&&J(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(I);function rt(t){return t.length?t.reduce((function(t,e){return t+e}),0)/t.length:0}function nt(t){return nt="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},nt(t)}function it(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=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"!=nt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=nt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==nt(e)?e:e+""}var lt=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),ot(this,"interval",void 0),ot(this,"deviationMultiplier",void 0),ot(this,"prices",[]),ot(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=rt(this.prices),r=function(t,e){var r=e||rt(t),n=rt(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 j;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}}])&&it(t.prototype,e),r&&it(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function ct(t){return ct="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},ct(t)}function ut(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,yt(n.key),n)}}function st(t,e,r){return e=ht(e),function(t,e){if(e&&("object"==ct(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,ft()?Reflect.construct(e,r||[],ht(t).constructor):e.apply(t,r))}function ft(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(ft=function(){return!!t})()}function ht(t){return ht=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},ht(t)}function vt(t,e){return vt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},vt(t,e)}function pt(t,e,r){return(e=yt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function yt(t){var e=function(t,e){if("object"!=ct(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=ct(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==ct(e)?e:e+""}var dt=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),pt(r=st(this,e,[t]),"interval",void 0),pt(r,"pricesCounter",0),pt(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&&vt(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 j;return this.result}},{key:"isStable",get:function(){try{return this.getResult(),!0}catch(t){return!1}}}],n&&ut(r.prototype,n),i&&ut(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(z);function bt(t){return bt="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},bt(t)}function mt(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,wt(n.key),n)}}function gt(t,e,r){return(e=wt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function wt(t){var e=function(t,e){if("object"!=bt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=bt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==bt(e)?e:e+""}var _t=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),gt(this,"short",void 0),gt(this,"long",void 0),gt(this,"signal",void 0),gt(this,"prices",[]),gt(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 j;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 i=r-n,o=this.signal.update(i,e);return this.result={histogram:i-o,macd:i,signal:o}}}}],e&&mt(t.prototype,e),r&&mt(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function Ot(t){return Ot="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},Ot(t)}function Pt(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,kt(n.key),n)}}function St(t,e,r){return e=At(e),function(t,e){if(e&&("object"==Ot(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,jt()?Reflect.construct(e,r||[],At(t).constructor):e.apply(t,r))}function jt(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(jt=function(){return!!t})()}function At(t){return At=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},At(t)}function Et(t,e){return Et=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Et(t,e)}function Rt(t,e,r){return(e=kt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function kt(t){var e=function(t,e){if("object"!=Ot(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Ot(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Ot(e)?e:e+""}var It=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Rt(r=St(this,e),"interval",void 0),Rt(r,"previousPrices",[]),Rt(r,"avgGain",void 0),Rt(r,"avgLoss",void 0),Rt(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&&Et(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 i=this.avgLoss.getResult();if(0===i)return this.setResult(100,e);var o=this.avgGain.getResult()/i;return this.setResult(this.maxValue-this.maxValue/(o+1),e)}}}}],n&&Pt(r.prototype,n),i&&Pt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(I);function Mt(t){return function(t){if(Array.isArray(t))return Tt(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 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)||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 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 Ct=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1.5,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;if(null===t||null===e||null===r)return null;if(n<2)throw new Error("numLevels must be at least 2");for(var i=4*r/(n-1),o=[],a=0;a<n-1;a++)o.push(e-2*r+a*i);for(var l=o.length-1;l>=0;l--)if(t>o[l])return(l+1)/(n-1);return 0};function Dt(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=Lt(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},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 o,a=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){l=!0,o=t},f:function(){try{a||null==r.return||r.return()}finally{if(l)throw o}}}}function xt(t){return function(t){if(Array.isArray(t))return zt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Lt(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 Bt(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,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);c=!0);}catch(t){u=!0,i=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(t,e)||Lt(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 Lt(t,e){if(t){if("string"==typeof t)return zt(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)?zt(t,e):void 0}}function zt(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 Ft={rsi:function(t,e,r){var n,i,o=t.verticalOhlcv.close[e];t.instances.hasOwnProperty("rsi_".concat(r))||(t.autoCrossPairsList.push({fast:"rsi_".concat(r),slow:"rsi_sma_".concat(r)}),t.instances["rsi_".concat(r)]=new It(r),t.instances["rsi_sma_".concat(r)]=new $(r),t.verticalOhlcv["rsi_".concat(r)]=new Array(t.len).fill(null),t.verticalOhlcv["rsi_sma_".concat(r)]=new Array(t.len).fill(null)),t.instances["rsi_".concat(r)].update(o);try{n=t.instances["rsi_".concat(r)].getResult()}catch(t){n=null}n&&(t.verticalOhlcv["rsi_".concat(r)][e]=n,t.instances["rsi_sma_".concat(r)].update(n));try{i=t.instances["rsi_sma_".concat(r)].getResult()}catch(t){i=null}return i&&(t.verticalOhlcv["rsi_sma_".concat(r)][e]=i),!0},sma:function(t,e,r){var n,i=t.verticalOhlcv.close[e];t.instances.hasOwnProperty("sma_".concat(r))||(t.instances["sma_".concat(r)]=new $(r),t.verticalOhlcv["sma_".concat(r)]=new Array(t.len).fill(null)),t.instances["sma_".concat(r)].update(i);try{n=t.instances["sma_".concat(r)].getResult()}catch(t){n=null}n&&(t.verticalOhlcv["sma_".concat(r)][e]=n)},ema:function(t,e,r){var n,i=t.verticalOhlcv.close[e];t.instances.hasOwnProperty("ema_".concat(r))||(t.instances["ema_".concat(r)]=new dt(r),t.verticalOhlcv["ema_".concat(r)]=new Array(t.len).fill(null)),t.instances["ema_".concat(r)].update(i);try{n=t.instances["ema_".concat(r)].getResult()}catch(t){n=null}n&&(t.verticalOhlcv["ema_".concat(r)][e]=n)},macd:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:12,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:26,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:9,o=t.verticalOhlcv.close[e];t.instances.hasOwnProperty("macd")||(t.autoCrossPairsList.push({fast:"macd_diff",slow:"macd_dea"}),t.instances.macd=new _t(new dt(r),new dt(n),new dt(i)),t.verticalOhlcv.macd_diff=new Array(t.len).fill(null),t.verticalOhlcv.macd_dea=new Array(t.len).fill(null),t.verticalOhlcv.macd_histogram=new Array(t.len).fill(null));var a,l=t.instances.macd;l.update(o);try{a=l.getResult()}catch(t){a={macd:null,signal:null,histogram:null}}var c=a,u=c.macd,s=c.signal,f=c.histogram;return null!==u&&(t.verticalOhlcv.macd_diff[e]=u),null!==s&&(t.verticalOhlcv.macd_dea[e]=s),null!==f&&(t.verticalOhlcv.macd_histogram[e]=f),!0},relativeVolume:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,n=t.verticalOhlcv.volume[e];t.instances.hasOwnProperty("relative_volume_".concat(r))||(t.instances["relative_volume_".concat(r)]=new $(r),t.verticalOhlcv["relative_volume_".concat(r)]=new Array(t.len).fill(null),t.verticalOhlcv["relative_volume_sma_".concat(r)]=new Array(t.len).fill(null));var i,o=t.instances["relative_volume_".concat(r)];o.update(n);try{i=o.getResult()}catch(t){i=null}return t.verticalOhlcv["relative_volume_sma_".concat(r)][e]=i,null!==i&&"number"==typeof t.verticalOhlcv["relative_volume_sma_".concat(r)][e-1]?t.verticalOhlcv["relative_volume_".concat(r)][e]=n/t.verticalOhlcv["relative_volume_sma_".concat(r)][e-1]:t.verticalOhlcv["relative_volume_".concat(r)][e]=null,!0},donchianChannels:function(t,e,r,n){var i=t.verticalOhlcv,o=i.high,a=i.low;if(e-n<r-1)return!0;t.instances.hasOwnProperty("donchian_channels")||(t.instances.donchian_channels={},i.donchian_channel_upper=new Array(t.len).fill(null),i.donchian_channel_basis=new Array(t.len).fill(null),i.donchian_channel_lower=new Array(t.len).fill(null));var l=e-n+1,c=l-r;if(c<0||l>t.len)return!0;var u=o.slice(c,l),s=a.slice(c,l),f=Math.max.apply(Math,Mt(u)),h=Math.min.apply(Math,Mt(s)),v=(f+h)/2,p=e;return p>=0&&p<t.len&&(i.donchian_channel_upper[p]=f,i.donchian_channel_basis[p]=v,i.donchian_channel_lower[p]=h),!0},bollingerBands:function(t,e,r,n){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=t.verticalOhlcv.close[e];t.instances.hasOwnProperty("bollinger_bands")||(t.instances.bollinger_bands={instance:new lt(r,n),heightInstance:i?new $(r):null},t.verticalOhlcv.bollinger_bands_upper=new Array(t.len).fill(null),t.verticalOhlcv.bollinger_bands_middle=new Array(t.len).fill(null),t.verticalOhlcv.bollinger_bands_lower=new Array(t.len).fill(null),i&&(t.verticalOhlcv.bollinger_bands_range=new Array(t.len).fill(null),t.verticalOhlcv.bollinger_bands_height=new Array(t.len).fill(null)));var a,l=t.instances.bollinger_bands,c=l.instance,u=l.heightInstance;c.update(o);try{a=c.getResult()}catch(t){a={upper:null,middle:null,lower:null}}var s=a,f=s.upper,h=s.middle,v=s.lower;if(t.verticalOhlcv.bollinger_bands_upper[e]=f,t.verticalOhlcv.bollinger_bands_middle[e]=h,t.verticalOhlcv.bollinger_bands_lower[e]=v,!i)return!0;var p,y=null,d=null;if(null!==f&&null!==v){y=(o-v)/(f-v),d=f-v,u.update(d);try{p=u.getResult()}catch(t){p=null}}return t.verticalOhlcv.bollinger_bands_range[e]=y,t.verticalOhlcv.bollinger_bands_height[e]=Ct(d,p,1.5),!0},volumeOscillator:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,i=t.verticalOhlcv.volume[e];t.instances.hasOwnProperty("volume_oscillator")||(t.instances.volume_oscillator={fastEMA:new dt(r),slowEMA:new dt(n)},t.verticalOhlcv.volume_oscillator=new Array(t.len).fill(null),t.autoCrossPairsList.push({fast:"volume_oscillator",slow:0}));var o=t.instances.volume_oscillator,a=o.fastEMA,l=o.slowEMA;a.update(i),l.update(i);var c=null,u=null;try{c=a.getResult()}catch(t){c=null}try{u=l.getResult()}catch(t){u=null}return t.verticalOhlcv.volume_oscillator[e]="number"==typeof c&&"number"==typeof u&&0!==u?100*(c-u)/u:null,!0},candlesStudies:function(t,e,r){for(var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},o=i.changeLevel,a=void 0===o?7:o,l=i.sizeLevel,c=void 0===l?5:l,u=0,s=["candle_gap_size","candle_body_size","candle_top_size","candle_bottom_size","candle_shadow_size","candle_close_direction","candle_high_direction","candle_low_direction","candle_open_direction"];u<s.length;u++){var f=s[u];t.verticalOhlcv.hasOwnProperty(f)||(t.verticalOhlcv[f]=new Array(t.len).fill(null))}if(n){t.instances.hasOwnProperty("candleStudies")||(t.instances.candleStudies={});for(var h=0,v=["topInstance","bottomInstance","gapInstance","bodySizeInstance","shadowSizeInstance","closeDirectionInstance","highDirectionInstance","lowDirectionInstance","openDirectionInstance"];h<v.length;h++){var p=v[h];t.instances.candleStudies.hasOwnProperty(p)||(t.instances.candleStudies[p]=new $(r))}}var y=t.verticalOhlcv.open[e-1],d=t.verticalOhlcv.high[e-1],b=t.verticalOhlcv.low[e-1],m=t.verticalOhlcv.close[e-1];if([y,d,b,m].some((function(t){return void 0===t})))return!0;var g=t.verticalOhlcv.open[e],w=t.verticalOhlcv.high[e],_=t.verticalOhlcv.low[e],O=t.verticalOhlcv.close[e],P=O>g,S=Math.abs(O-g),j=Math.abs(w-_),A=w-Math.max(g,O),E=Math.min(g,O)-_,R=Math.abs(m-g),k=Math.abs(O-m),I=Math.abs(w-d),M=Math.abs(_-b),T=Math.abs(g-y),C=null,D=null,x=null,B=null,L=null,z=null,F=null,N=null,V=null;if(n){var H=t.instances.candleStudies,q=H.topInstance,U=H.bottomInstance,G=H.gapInstance,W=H.bodySizeInstance,J=H.shadowSizeInstance,K=H.closeDirectionInstance,Y=H.highDirectionInstance,Q=H.lowDirectionInstance,X=H.openDirectionInstance;q.update(Math.abs(A)),U.update(Math.abs(E)),J.update(Math.abs(j)),G.update(R),W.update(S),K.update(k),Y.update(I),Q.update(M),X.update(T);try{x=q.getResult(),D=U.getResult(),C=G.getResult(),B=W.getResult(),L=J.getResult(),z=K.getResult(),F=Y.getResult(),N=Q.getResult(),V=X.getResult()}catch(t){}t.verticalOhlcv.candle_body_size[e]=P?Ct(S,B,2,a):-Math.abs(Ct(S,B,2,a))||0,t.verticalOhlcv.candle_gap_size[e]=P?Ct(R,C,2,a):-Math.abs(Ct(R,C,2,a))||0,t.verticalOhlcv.candle_close_direction[e]=P?Ct(k,z,2,a):-Math.abs(Ct(k,z,2,a))||0,t.verticalOhlcv.candle_high_direction[e]=P?Ct(I,F,2,a):-Math.abs(Ct(I,F,2,a))||0,t.verticalOhlcv.candle_low_direction[e]=P?Ct(M,N,2,a):-Math.abs(Ct(M,N,2,a))||0,t.verticalOhlcv.candle_open_direction[e]=P?Ct(T,V,2,a):-Math.abs(Ct(T,V,2,a))||0,t.verticalOhlcv.candle_top_size[e]=Ct(A,x,.5,c),t.verticalOhlcv.candle_bottom_size[e]=Ct(E,D,.5,c),t.verticalOhlcv.candle_shadow_size[e]=Ct(j,L,.5,c)}else t.verticalOhlcv.candle_body_size[e]=P?S:-S,t.verticalOhlcv.candle_gap_size[e]=P?R:-R,t.verticalOhlcv.candle_close_direction[e]=P?k:-k,t.verticalOhlcv.candle_high_direction[e]=P?I:-I,t.verticalOhlcv.candle_low_direction[e]=P?M:-M,t.verticalOhlcv.candle_open_direction[e]=P?T:-T,t.verticalOhlcv.candle_top_size[e]=A,t.verticalOhlcv.candle_bottom_size[e]=E,t.verticalOhlcv.candle_shadow_size[e]=j;return!0},lag:function(t,e){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["close"],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=t.verticalOhlcv,o=t.len,a=0;a<r.length;a++)for(var l=1;l<=n;l++){var c="".concat(r[a],"_lag_").concat(l);i.hasOwnProperty(c)||(i[c]=new Array(o).fill(null));var u=e-l,s=u>=0?i[r[a]][u]:null;i[c][e]=s}return!0}},Nt={midPriceOpenClose:!1,midPriceHighLow:!1,sessionIndex:!1,sessionIntradayIndex:!1,dayOfTheWeek:!1,dayOfTheMonth:!1,weekOfTheMonth:!1},Vt=function(t){var e=new Date(t),r=e.getDay(),n=e.getDate(),i=new Date(e.getFullYear(),e.getMonth(),1).getDay();return{day_of_the_week:r,day_of_the_month:n,week_of_the_month:Math.ceil((n+i)/7)}},Ht=function(t,e){for(var r=t.length,n=new $(e),i=new Array(r),o=0,a=0,l=0,c=0;c<r;c++)if(n.update(t[c]),n.isStable){var u=n.getResult();i[c]=u,o+=u,a+=u*u,l++}else i[c]=null;var s=o/l,f=a/l-s*s,h=Math.sqrt(f);return i.map((function(t){return null!==t?(t-s)/h:null}))},qt=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=Ht(t,r),i=Ht(e,r),o=t.length,a=[],l=0,c=0,u=0,s=0,f=0,h=0,v=-1,p=0;p<o;p++){if(null!==n[p]&&null!==i[p]){v=p;break}a.push(0)}if(-1===v)return new Array(o).fill(0);for(var y=v;y<o;y++){var d=n[y],b=i[y];if(null!==d&&null!==b)if(l+=d,c+=b,u+=d*b,s+=d*d,f+=b*b,++h<2)a.push(0);else{var m=h*u-l*c,g=Math.sqrt((h*s-l*l)*(h*f-c*c)),w=0===g?0:m/g;a.push(w)}else l=c=u=s=f=h=0,a.push(0)}return a};function Ut(t){return function(t){if(Array.isArray(t))return Wt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||$t(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 Gt(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,i,o,a,l=[],c=!0,u=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);c=!0);}catch(t){u=!0,i=t}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw i}}return l}}(t,e)||$t(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 $t(t,e){if(t){if("string"==typeof t)return Wt(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)?Wt(t,e):void 0}}function Wt(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 Jt=function(t){for(var e=t.input,r=t.inputParams,n=new(0,t.OHLCV_INDICATORS)({input:e,studyOptions:t.studyOptions}),i=0,o=Object.entries(r);i<o.length;i++){var a=Gt(o[i],2),l=a[0],c=a[1];if(!["crossPairs","lag"].includes(l)&&Array.isArray(c))for(var u=0;u<c.length;u++){var s=c[u];Array.isArray(s)&&(s.length>0?n[l].apply(n,Ut(s)):n[l]())}}for(var f=0,h=Object.entries(r);f<h.length;f++){var v=Gt(h[f],2),p=v[0],y=v[1];if(["crossPairs","lag"].includes(p)&&Array.isArray(y))for(var d=0;d<y.length;d++){var b=y[d];Array.isArray(b)&&(b.length>0?n[p].apply(n,Ut(b)):n[p]())}}return n};function Kt(t){return Kt="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},Kt(t)}function Yt(t){return function(t){if(Array.isArray(t))return Qt(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 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}}(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 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 Xt(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,Zt(n.key),n)}}function Zt(t){var e=function(t,e){if("object"!=Kt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Kt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Kt(e)?e:e+""}var te=function(){return t=function t(e){var r=e.input,n=e.ticker,i=void 0===n?null:n,o=e.studyOptions,a=void 0===o?null:o;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: "+i);if(0===r.length)throw Error("input ohlcv must not be empty: "+i);if(!r[0].hasOwnProperty("close"))throw Error("input ohlcv array objects require at least close property: "+i);return this.input=r,this.priceBased=["open","high","low","close","mid_price_open_close","mid_price_high_low"],this.len=r.length,this.crossPairsArr=[],this.inputOhlcv=r,this.studyOptions=null===a?Nt:a,this.instances={},this.autoCrossPairsList=[],this.verticalOhlcv={},this.inputParams={crossPairs:null,lag:null,relativeVolume:null,ema:null,sma:null,macd:null,bollingerBands:null,rsi:null,donchianChannels:null,candlesStudies:null,volumeOscillator:null},this.studies={},this.utilities={correlation:qt},this.setIndicatorsFromInputParams=Jt,this},e=[{key:"getData",value:function(){this.compute();for(var t=this.verticalOhlcv,e=Object.keys(t),r=t[e[0]].length,n=e.length,i=[],o=0;o<r;o++){for(var a={},l=!1,c=0;c<n;c++){var u=e[c],s=t[u][o];if(null==s){l=!0;break}a[u]=s}l||i.push(a)}return i}},{key:"getLastValues",value:function(){return this.getData()[this.getData().length-1]}},{key:"compute",value:function(){return function(t,e){var r=e.len,n=e.studyOptions,i=e.inputParams;if(Boolean(n))for(var o in n)if(!Nt.hasOwnProperty(o))throw new Error("Key ".concat(o," not found in defaultStudyOptions. Available options: ").concat(Object.keys(Nt).join(", ")));var a=n.midPriceOpenClose,l=n.midPriceHighLow,c=n.sessionIndex,u=n.sessionIntradayIndex,s=n.dayOfTheWeek,f=n.dayOfTheMonth,h=n.weekOfTheMonth,v=["open","high","low","close","volume"];a&&v.push("mid_price_open_close"),l&&v.push("mid_price_high_low");for(var p=new Set(v),y=0,d=v;y<d.length;y++){var b=d[y];e.verticalOhlcv[b]=new Array(r)}for(var m,g=[],w=0,_=Object.keys(t[0]);w<_.length;w++){var O=_[w];p.has(O)||(e.verticalOhlcv[O]=new Array(r),g.push(O))}var P,S=0,j=0,A=(P=t)[0].hasOwnProperty("date")&&"string"==typeof P[0].date&&/^\d{4}-\d{2}-\d{2}/.test(P[0].date);A&&(c&&(e.verticalOhlcv.session_index=new Array(r)),u&&(e.verticalOhlcv.session_intraday_index=new Array(r)),s&&(e.verticalOhlcv.day_of_the_week=new Array(r)),f&&(e.verticalOhlcv.day_of_the_month=new Array(r)),h&&(e.verticalOhlcv.week_of_the_month=new Array(r)),m=t[0].date.slice(0,10));for(var E=0;E<r;E++){var R=t[E];e.verticalOhlcv.open[E]=R.open,e.verticalOhlcv.high[E]=R.high,e.verticalOhlcv.low[E]=R.low,e.verticalOhlcv.close[E]=R.close,e.verticalOhlcv.volume[E]=R.volume;for(var k=0,I=Object.entries(i);k<I.length;k++){var M=Bt(I[k],2),T=M[0],C=M[1];if(!["crossPairs"].includes(T)&&Array.isArray(C))for(var D=0;D<C.length;D++){var x=C[D];Array.isArray(x)&&(x.length>0?Ft[T].apply(Ft,[e,E].concat(xt(x))):Ft[T](e,E))}}a&&(e.verticalOhlcv.mid_price_open_close[E]=(R.open+R.close)/2),l&&(e.verticalOhlcv.mid_price_high_low[E]=(R.high+R.low)/2);var B,L=Dt(g);try{for(L.s();!(B=L.n()).done;){var z=B.value;e.verticalOhlcv[z][E]=R[z]}}catch(t){L.e(t)}finally{L.f()}if(A){var F=R.date.slice(0,10);F!==m&&(m=F,S++,j=0);var N=Vt(F),V=N.day_of_the_week,H=N.day_of_the_month,q=N.week_of_the_month;s&&(e.verticalOhlcv.day_of_the_week[E]=V),f&&(e.verticalOhlcv.day_of_the_month[E]=H),h&&(e.verticalOhlcv.week_of_the_month[E]=q),c&&(e.verticalOhlcv.session_index[E]=S),u&&(e.verticalOhlcv.session_intraday_index[E]=j),j++}}}(this.input,this),this}},{key:"crossPairs",value:function(t){var e,n;this.compute();var i=[].concat(Yt(this.autoCrossPairsList),Yt(t));null!==(n=(e=this.inputParams).crossPairs)&&void 0!==n||(e.crossPairs=[]),this.inputParams.crossPairs.push([i]);var o=function(t,e){var n,i=t.verticalOhlcv,o=t.len,l={},c={},u={},s=function(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,o=function(){};return{s:o,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},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 a,l=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return l=t.done,t},e:function(t){c=!0,a=t},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw a}}}}(e);try{var f=function(){var t=n.value,e=t.fast,r=t.slow,s=t.count;if(!e||!r)return 1;"number"!=typeof r||l[r]||(l[r]=Array(o).fill(r));var f="".concat(e,"_x_").concat(r),h="".concat(e,"_c_").concat(r),v=function(t){return void 0!==s?t.slice(-s).filter((function(t){return 1===t||-1===t})).length:0};if(i[f]){var p=i[f];c[f]=p,void 0!==s&&(u[h]=v(p))}else if((i[e]||"price"===e)&&i[r]){var y=a("price"===e?{fast:i.close,high:i.high,low:i.low,slow:i[r]}:{fast:i[e],slow:i[r]});c[f]=y,void 0!==s&&(u[h]=v(y))}else{if(!i[e]||!l[r])throw Error("Missing ohlcv properties for ".concat(e," or ").concat(r));var d=a({fast:i[e],slow:l[r]});c[f]=d,void 0!==s&&(u[h]=v(d))}};for(s.s();!(n=s.n()).done;)f()}catch(t){s.e(t)}finally{s.f()}return{x:c,c:u}}(this,i),l=o.x,c=o.c;return Object.assign(this.verticalOhlcv,l),Object.assign(this.studies,c),this}},{key:"lag",value:function(){var t,e,r=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;null!==(e=(t=this.inputParams).lag)&&void 0!==e||(t.lag=[]),this.inputParams.lag.push([n,i]);for(var o=function(){var t=n[a];r.priceBased.find((function(e){return t.startsWith(e)}))&&r.priceBased.push(t)},a=0;a<n.length;a++)o();return this}},{key:"relativeVolume",value:function(t){var e,r;return null!==(r=(e=this.inputParams).relativeVolume)&&void 0!==r||(e.relativeVolume=[]),this.inputParams.relativeVolume.push([t]),this}},{key:"ema",value:function(t){var e,r;return null!==(r=(e=this.inputParams).ema)&&void 0!==r||(e.ema=[]),this.inputParams.ema.push([t]),this.priceBased.push("ema_".concat(t)),this}},{key:"sma",value:function(t){var e,r;return null!==(r=(e=this.inputParams).sma)&&void 0!==r||(e.sma=[]),this.inputParams.sma.push([t]),this.priceBased.push("sma_".concat(t)),this}},{key:"macd",value:function(t,e,r){var n,i;return null!==(i=(n=this.inputParams).macd)&&void 0!==i||(n.macd=[]),this.inputParams.macd.push([t,e,r]),this}},{key:"bollingerBands",value:function(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,i=arguments.length>2?arguments[2]:void 0;if("number"!=typeof r||r<=0)throw new Error('Invalid parameter: "size" must be a positive number.');if("number"!=typeof n||n<=0)throw new Error('Invalid parameter: "times" must be a positive number.');return null!==(e=(t=this.inputParams).bollingerBands)&&void 0!==e||(t.bollingerBands=[]),this.inputParams.bollingerBands.push([r,n,i]),this.priceBased.push("bollinger_bands_middle","bollinger_bands_upper","bollinger_bands_lower"),this}},{key:"rsi",value:function(t){var e,r;return null!==(r=(e=this.inputParams).rsi)&&void 0!==r||(e.rsi=[]),this.inputParams.rsi.push([t]),this}},{key:"donchianChannels",value:function(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if("number"!=typeof r||r<=0)throw new Error('The "period" must be a positive number.');if("number"!=typeof n||n<=0)throw new Error('The "offset" must be a positive number.');return null!==(e=(t=this.inputParams).donchianChannels)&&void 0!==e||(t.donchianChannels=[]),this.inputParams.donchianChannels.push([r,n]),this.priceBased.push("donchian_channel_upper","donchian_channel_lower","donchian_channel_basis"),this}},{key:"candlesStudies",value:function(t,e,r){var n,i;return null!==(i=(n=this.inputParams).candlesStudies)&&void 0!==i||(n.candlesStudies=[]),this.inputParams.candlesStudies.push([t,e,r]),this}},{key:"volumeOscillator",value:function(t,e){var r,n;return null!==(n=(r=this.inputParams).volumeOscillator)&&void 0!==n||(r.volumeOscillator=[]),this.inputParams.volumeOscillator.push([t,e]),this}}],e&&Xt(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={};(()=>{t.r(e),t.d(e,{default:()=>oe});var r=1e6,n="[big.js] ",i=n+"Invalid ",o=i+"decimal places",a=i+"rounding mode",l=n+"Division by zero",u={},s=void 0,c=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function f(t,e,r,n){var i=t.c;if(r===s&&(r=t.constructor.RM),0!==r&&1!==r&&2!==r&&3!==r)throw Error(a);if(e<1)n=3===r&&(n||!!i[0])||0===e&&(1===r&&i[0]>=5||2===r&&(i[0]>5||5===i[0]&&(n||i[1]!==s))),i.length=1,n?(t.e=t.e-e+1,i[0]=1):i[0]=t.e=0;else if(e<i.length){if(n=1===r&&i[e]>=5||2===r&&(i[e]>5||5===i[e]&&(n||i[e+1]!==s||1&i[e-1]))||3===r&&(n||!!i[0]),i.length=e,n)for(;++i[--e]>9;)if(i[e]=0,0===e){++t.e,i.unshift(1);break}for(e=i.length;!i[--e];)i.pop()}return t}function h(t,e,r){var n=t.e,i=t.c.join(""),o=i.length;if(e)i=i.charAt(0)+(o>1?"."+i.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)i="0"+i;i="0."+i}else if(n>0)if(++n>o)for(n-=o;n--;)i+="0";else n<o&&(i=i.slice(0,n)+"."+i.slice(n));else o>1&&(i=i.charAt(0)+"."+i.slice(1));return t.s<0&&r?"-"+i:i}function v(t){return v="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},v(t)}function p(t){var e="function"==typeof Map?new Map:void 0;return p=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(y())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,e);var i=new(t.bind.apply(t,n));return r&&d(i,r.prototype),i}(t,arguments,b(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),d(r,t)},p(t)}function y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(y=function(){return!!t})()}function d(t,e){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},d(t,e)}function b(t){return b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},b(t)}u.abs=function(){var t=new this.constructor(this);return t.s=1,t},u.cmp=function(t){var e,r=this,n=r.c,i=(t=new r.constructor(t)).c,o=r.s,a=t.s,l=r.e,u=t.e;if(!n[0]||!i[0])return n[0]?o:i[0]?-a:0;if(o!=a)return o;if(e=o<0,l!=u)return l>u^e?1:-1;for(a=(l=n.length)<(u=i.length)?l:u,o=-1;++o<a;)if(n[o]!=i[o])return n[o]>i[o]^e?1:-1;return l==u?0:l>u^e?1:-1},u.div=function(t){var e=this,n=e.constructor,i=e.c,a=(t=new n(t)).c,u=e.s==t.s?1:-1,c=n.DP;if(c!==~~c||c<0||c>r)throw Error(o);if(!a[0])throw Error(l);if(!i[0])return t.s=u,t.c=[t.e=0],t;var h,v,p,y,d,b=a.slice(),m=h=a.length,g=i.length,w=i.slice(0,h),_=w.length,O=t,S=O.c=[],P=0,j=c+(O.e=e.e-t.e)+1;for(O.s=u,u=j<0?0:j,b.unshift(0);_++<h;)w.push(0);do{for(p=0;p<10;p++){if(h!=(_=w.length))y=h>_?1:-1;else for(d=-1,y=0;++d<h;)if(a[d]!=w[d]){y=a[d]>w[d]?1:-1;break}if(!(y<0))break;for(v=_==h?a:b;_;){if(w[--_]<v[_]){for(d=_;d&&!w[--d];)w[d]=9;--w[d],w[_]+=10}w[_]-=v[_]}for(;!w[0];)w.shift()}S[P++]=y?p:++p,w[0]&&y?w[_]=i[m]||0:w=[i[m]]}while((m++<g||w[0]!==s)&&u--);return S[0]||1==P||(S.shift(),O.e--,j--),P>j&&f(O,j,n.RM,w[0]!==s),O},u.eq=function(t){return 0===this.cmp(t)},u.gt=function(t){return this.cmp(t)>0},u.gte=function(t){return this.cmp(t)>-1},u.lt=function(t){return this.cmp(t)<0},u.lte=function(t){return this.cmp(t)<1},u.minus=u.sub=function(t){var e,r,n,i,o=this,a=o.constructor,l=o.s,u=(t=new a(t)).s;if(l!=u)return t.s=-u,o.plus(t);var s=o.c.slice(),c=o.e,f=t.c,h=t.e;if(!s[0]||!f[0])return f[0]?t.s=-u:s[0]?t=new a(o):t.s=1,t;if(l=c-h){for((i=l<0)?(l=-l,n=s):(h=c,n=f),n.reverse(),u=l;u--;)n.push(0);n.reverse()}else for(r=((i=s.length<f.length)?s:f).length,l=u=0;u<r;u++)if(s[u]!=f[u]){i=s[u]<f[u];break}if(i&&(n=s,s=f,f=n,t.s=-t.s),(u=(r=f.length)-(e=s.length))>0)for(;u--;)s[e++]=0;for(u=e;r>l;){if(s[--r]<f[r]){for(e=r;e&&!s[--e];)s[e]=9;--s[e],s[r]+=10}s[r]-=f[r]}for(;0===s[--u];)s.pop();for(;0===s[0];)s.shift(),--h;return s[0]||(t.s=1,s=[h=0]),t.c=s,t.e=h,t},u.mod=function(t){var e,r=this,n=r.constructor,i=r.s,o=(t=new n(t)).s;if(!t.c[0])throw Error(l);return r.s=t.s=1,e=1==t.cmp(r),r.s=i,t.s=o,e?new n(r):(i=n.DP,o=n.RM,n.DP=n.RM=0,r=r.div(t),n.DP=i,n.RM=o,this.minus(r.times(t)))},u.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},u.plus=u.add=function(t){var e,r,n,i=this,o=i.constructor;if(t=new o(t),i.s!=t.s)return t.s=-t.s,i.minus(t);var a=i.e,l=i.c,u=t.e,s=t.c;if(!l[0]||!s[0])return s[0]||(l[0]?t=new o(i):t.s=i.s),t;if(l=l.slice(),e=a-u){for(e>0?(u=a,n=s):(e=-e,n=l),n.reverse();e--;)n.push(0);n.reverse()}for(l.length-s.length<0&&(n=s,s=l,l=n),e=s.length,r=0;e;l[e]%=10)r=(l[--e]=l[e]+s[e]+r)/10|0;for(r&&(l.unshift(r),++u),e=l.length;0===l[--e];)l.pop();return t.c=l,t.e=u,t},u.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(i+"exponent");for(o&&(t=-t);1&t&&(n=n.times(e)),t>>=1;)e=e.times(e);return o?r.div(n):n},u.prec=function(t,e){if(t!==~~t||t<1||t>r)throw Error(i+"precision");return f(new this.constructor(this),t,e)},u.round=function(t,e){if(t===s)t=0;else if(t!==~~t||t<-r||t>r)throw Error(o);return f(new this.constructor(this),t+this.e+1,e)},u.sqrt=function(){var t,e,r,i=this,o=i.constructor,a=i.s,l=i.e,u=new o("0.5");if(!i.c[0])return new o(i);if(a<0)throw Error(n+"No square root");0===(a=Math.sqrt(i+""))||a===1/0?((e=i.c.join("")).length+l&1||(e+="0"),l=((l+1)/2|0)-(l<0||1&l),t=new o(((a=Math.sqrt(e))==1/0?"5e":(a=a.toExponential()).slice(0,a.indexOf("e")+1))+l)):t=new o(a+""),l=t.e+(o.DP+=4);do{r=t,t=u.times(r.plus(i.div(r)))}while(r.c.slice(0,l).join("")!==t.c.slice(0,l).join(""));return f(t,(o.DP-=4)+t.e+1,o.RM)},u.times=u.mul=function(t){var e,r=this,n=r.constructor,i=r.c,o=(t=new n(t)).c,a=i.length,l=o.length,u=r.e,s=t.e;if(t.s=r.s==t.s?1:-1,!i[0]||!o[0])return t.c=[t.e=0],t;for(t.e=u+s,a<l&&(e=i,i=o,o=e,s=a,a=l,l=s),e=new Array(s=a+l);s--;)e[s]=0;for(u=l;u--;){for(l=0,s=a+u;s>u;)l=e[s]+o[u]*i[s-u-1]+l,e[s--]=l%10,l=l/10|0;e[s]=l}for(l?++t.e:e.shift(),u=e.length;!e[--u];)e.pop();return t.c=e,t},u.toExponential=function(t,e){var n=this,i=n.c[0];if(t!==s){if(t!==~~t||t<0||t>r)throw Error(o);for(n=f(new n.constructor(n),++t,e);n.c.length<t;)n.c.push(0)}return h(n,!0,!!i)},u.toFixed=function(t,e){var n=this,i=n.c[0];if(t!==s){if(t!==~~t||t<0||t>r)throw Error(o);for(t=t+(n=f(new n.constructor(n),t+n.e+1,e)).e+1;n.c.length<t;)n.c.push(0)}return h(n,!1,!!i)},u[Symbol.for("nodejs.util.inspect.custom")]=u.toJSON=u.toString=function(){var t=this,e=t.constructor;return h(t,t.e<=e.NE||t.e>=e.PE,!!t.c[0])},u.toNumber=function(){var t=Number(h(this,!0,!0));if(!0===this.constructor.strict&&!this.eq(t.toString()))throw Error(n+"Imprecise conversion");return t},u.toPrecision=function(t,e){var n=this,o=n.constructor,a=n.c[0];if(t!==s){if(t!==~~t||t<1||t>r)throw Error(i+"precision");for(n=f(new o(n),t,e);n.c.length<t;)n.c.push(0)}return h(n,t<=n.e||n.e<=o.NE||n.e>=o.PE,!!a)},u.valueOf=function(){var t=this,e=t.constructor;if(!0===e.strict)throw Error(n+"valueOf disallowed");return h(t,t.e<=e.NE||t.e>=e.PE,!0)},function t(){function e(r){var n=this;if(!(n instanceof e))return r===s?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(i+"value");r=0===r&&1/r<0?"-0":String(r)}!function(t,e){var r,n,o;if(!c.test(e))throw Error(i+"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=u,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 m=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=b(e),function(t,e){if(e&&("object"==v(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,y()?Reflect.construct(e,r||[],b(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&&d(t,e)}(e,t),r=e,Object.defineProperty(r,"prototype",{writable:!1}),r;var r}(p(Error));function g(t){return g="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},g(t)}function w(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,O(n.key),n)}}function _(t,e,r){return(e=O(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function O(t){var e=function(t,e){if("object"!=g(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=g(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==g(e)?e:e+""}var S=function(){return t=function t(){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),_(this,"previousHighest",void 0),_(this,"highest",void 0),_(this,"previousLowest",void 0),_(this,"lowest",void 0),_(this,"previousResult",void 0),_(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 m;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)}}])&&w(t.prototype,e),r&&w(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function P(t){return P="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},P(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,k(n.key),n)}}function A(t,e,r){return e=I(e),function(t,e){if(e&&("object"==P(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,E()?Reflect.construct(e,r||[],I(t).constructor):e.apply(t,r))}function E(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(E=function(){return!!t})()}function I(t){return I=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},I(t)}function R(t,e){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},R(t,e)}function k(t){var e=function(t,e){if("object"!=P(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=P(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==P(e)?e:e+""}var M=function(t){function e(t){var r,n,i,o;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),n=r=A(this,e),o=void 0,(i=k(i="interval"))in n?Object.defineProperty(n,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):n[i]=o,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)}}])&&j(r.prototype,n),i&&j(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(S);function T(t){return T="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(t)}function x(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 D(t,e,r){return e=L(e),function(t,e){if(e&&("object"==T(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,C()?Reflect.construct(e,r||[],L(t).constructor):e.apply(t,r))}function C(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(C=function(){return!!t})()}function L(t){return L=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},L(t)}function B(t,e){return B=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},B(t,e)}function z(t){var e=function(t,e){if("object"!=T(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==T(e)?e:e+""}var H=function(t){function e(){var t,r,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var o=arguments.length,a=new Array(o),l=0;l<o;l++)a[l]=arguments[l];return r=t=D(this,e,[].concat(a)),i=[],(n=z(n="prices"))in r?Object.defineProperty(r,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[n]=i,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&&B(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&&x(r.prototype,n),i&&x(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(M);function F(t){return F="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},F(t)}function N(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,G(n.key),n)}}function U(t,e,r){return e=q(e),function(t,e){if(e&&("object"==F(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||[],q(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 q(t){return q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},q(t)}function K(t,e){return K=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},K(t,e)}function $(t,e,r){return(e=G(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function G(t){var e=function(t,e){if("object"!=F(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=F(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==F(e)?e:e+""}var W=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),$(r=U(this,e),"interval",void 0),$(r,"indicator",void 0),$(r,"smoothingFactor",void 0),r.interval=t,r.indicator=new H(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&&K(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 i=(t-this.result)*this.smoothingFactor;return this.setResult(i+this.result,e)}if(void 0===this.result&&void 0!==r)return this.setResult(r,e)}}],n&&N(r.prototype,n),i&&N(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(S);function J(t){return t.length?t.reduce((function(t,e){return t+e}),0)/t.length:0}function Y(t){return Y="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},Y(t)}function Q(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 X(t,e,r){return(e=Z(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Z(t){var e=function(t,e){if("object"!=Y(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Y(e)?e:e+""}var tt=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),X(this,"interval",void 0),X(this,"deviationMultiplier",void 0),X(this,"prices",[]),X(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=J(this.prices),r=function(t,e){var r=e||J(t),n=J(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 m;return this.result}},{key:"isStable",get:function(){return void 0!==this.result}}])&&Q(t.prototype,e),r&&Q(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();function et(t){return et="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},et(t)}function rt(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,ut(n.key),n)}}function nt(t,e,r){return e=ot(e),function(t,e){if(e&&("object"==et(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,it()?Reflect.construct(e,r||[],ot(t).constructor):e.apply(t,r))}function it(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(it=function(){return!!t})()}function ot(t){return ot=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},ot(t)}function at(t,e){return at=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},at(t,e)}function lt(t,e,r){return(e=ut(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ut(t){var e=function(t,e){if("object"!=et(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=et(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==et(e)?e:e+""}var st=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),lt(r=nt(this,e,[t]),"interval",void 0),lt(r,"pricesCounter",0),lt(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&&at(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 m;return this.result}},{key:"isStable",get:function(){try{return this.getResult(),!0}catch(t){return!1}}}],n&&rt(r.prototype,n),i&&rt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(M);function ct(t){return ct="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},ct(t)}function ft(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,vt(n.key),n)}}function ht(t,e,r){return(e=vt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function vt(t){var e=function(t,e){if("object"!=ct(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=ct(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==ct(e)?e:e+""}var pt=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),ht(this,"short",void 0),ht(this,"long",void 0),ht(this,"signal",void 0),ht(this,"prices",[]),ht(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 m;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 i=r-n,o=this.signal.update(i,e);return this.result={histogram:i-o,macd:i,signal:o}}}}],e&&ft(t.prototype,e),r&&ft(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,r}();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 dt(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,Ot(n.key),n)}}function bt(t,e,r){return e=gt(e),function(t,e){if(e&&("object"==yt(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,mt()?Reflect.construct(e,r||[],gt(t).constructor):e.apply(t,r))}function mt(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(mt=function(){return!!t})()}function gt(t){return gt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},gt(t)}function wt(t,e){return wt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},wt(t,e)}function _t(t,e,r){return(e=Ot(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ot(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+""}var St=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:W;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),_t(r=bt(this,e),"interval",void 0),_t(r,"previousPrices",[]),_t(r,"avgGain",void 0),_t(r,"avgLoss",void 0),_t(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&&wt(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 i=this.avgLoss.getResult();if(0===i)return this.setResult(100,e);var o=this.avgGain.getResult()/i;return this.setResult(this.maxValue-this.maxValue/(o+1),e)}}}}],n&&dt(r.prototype,n),i&&dt(r,i),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,i}(S);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 jt(t,e,r){return(e=function(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+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function At(t){return At="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},At(t)}function Et(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=At(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=At(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==At(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function It(t){return function(t){if(Array.isArray(t))return Rt(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 Rt(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)?Rt(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 Rt(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=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1.5,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;if(null===t||null===e||null===r)return null;if(n<2)throw new Error("numLevels must be at least 2");for(var i=4*r/(n-1),o=[],a=0;a<n-1;a++)o.push(e-2*r+a*i);for(var l=o.length-1;l>=0;l--)if(t>o[l])return(l+1)/(n-1);return 0};function Mt(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,e,r){for(var n=0;n<r.length;n++)for(var i=(h=r[n],v=2,function(t){if(Array.isArray(t))return t}(h)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,i,o,a,l=[],u=!0,s=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw i}}return l}}(h,v)||function(t,e){if(t){if("string"==typeof t)return Mt(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)?Mt(t,e):void 0}}(h,v)||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.")}()),o=i[0],a=i[1],l=0;l<o.length;l++)for(var u=1;u<=a;u++){var s="".concat(o[l],"_lag_").concat(u);0===e&&(t.verticalOhlcv[s]=new Array(t.len).fill(null));var c=e-u,f=c>=0?t.verticalOhlcv[o[l]][c]:null;t.verticalOhlcv[s][e]=f}var h,v;return!0};function xt(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){return Dt="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},Dt(t)}function Ct(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,Lt(n.key),n)}}function Lt(t){var e=function(t,e){if("object"!=Dt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Dt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Dt(e)?e:e+""}var Bt=function(t,e){return t>e},zt=function(t,e){return t<e},Ht=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.interval=0,this.prevState=.5,this.prevFast=null,this.prevSlow=null,this.prevHigh=null,this.prevLow=null,this.areHighAndLowUndefined=!1,this.index=0,this.crossIndexes={up:[],down:[]}},(e=[{key:"update",value:function(t){var e=t.fast,r=t.high,n=t.slow,i=t.low,o=this.prevState;this.areHighAndLowUndefined||void 0!==r&&void 0!==i||(this.areHighAndLowUndefined=!0),null===e||null===n||function(t,e){return t===e}(e,n)?o=.5:Bt(e,n)?o=this.areHighAndLowUndefined?1:[i,n,this.prevLow,this.prevSlow].every((function(t){return null!==t}))&&zt(i,n)&&Bt(this.prevLow,this.prevSlow)?0:1:zt(e,n)&&(o=this.areHighAndLowUndefined?0:[r,n,this.prevHigh,this.prevSlow].every((function(t){return null!==t}))&&Bt(r,n)&&zt(this.prevHigh,this.prevSlow)?1:0),.5===o?this.interval=0:1===o?this.prevState<=.5?this.interval=1:this.interval++:0===o&&(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),this.index++,this.prevState=o,this.prevFast=e,this.prevSlow=n,this.prevHigh=r,this.prevLow=i}},{key:"getResult",value:function(){return this.interval}}])&&Ct(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}(),Ft=function(t,e,r){var n,i=t.len,o=function(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 xt(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)?xt(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,i=function(){};return{s:i,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},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 o,a=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){l=!0,o=t},f:function(){try{a||null==r.return||r.return()}finally{if(l)throw o}}}}(r);try{for(o.s();!(n=o.n()).done;){var a=n.value,l=a.fast,u=a.slow;if(l&&u){var s="".concat(l,"_x_").concat(u);if(0===e){if("number"==typeof u&&(t.verticalOhlcv[u]=new Array(i).fill(u)),"price"!==l&&!t.verticalOhlcv.hasOwnProperty(l))throw Error('fast "'.concat(l,' not found in crossPairs"'));if(!t.verticalOhlcv.hasOwnProperty(u))throw Error('slow "'.concat(u,' not found in crossPairs"'));t.instances[s]=new Ht,t.verticalOhlcv[s]=new Array(i).fill(null)}var c=void 0,f=void 0,h=void 0,v=void 0,p=void 0;"price"===l?(f=t.verticalOhlcv.close[e],h=t.verticalOhlcv.high[e],v=t.verticalOhlcv.low[e],p=t.verticalOhlcv[u][e],t.instances[s].update({fast:f,slow:p,high:h,low:v})):(c=t.verticalOhlcv[l][e],p=t.verticalOhlcv[u][e],t.instances[s].update({fast:c,slow:p})),t.verticalOhlcv[s][e]=t.instances[s].getResult()}}}catch(t){o.e(t)}finally{o.f()}};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)||function(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}}(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 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}function Vt(t){return Vt="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},Vt(t)}var qt={rsi:function(t,e,r){var n,i,o=t.verticalOhlcv.close[e];0===e&&(t.crossPairsList.push({fast:"rsi_".concat(r),slow:"rsi_sma_".concat(r)}),Object.assign(t.instances,jt(jt({},"rsi_".concat(r),new St(r)),"rsi_sma_".concat(r),new H(r))),Object.assign(t.verticalOhlcv,jt(jt({},"rsi_".concat(r),new Array(t.len).fill(null)),"rsi_sma_".concat(r),new Array(t.len).fill(null)))),t.instances["rsi_".concat(r)].update(o);try{n=t.instances["rsi_".concat(r)].getResult()}catch(t){n=null}n&&(t.verticalOhlcv["rsi_".concat(r)][e]=n,t.instances["rsi_sma_".concat(r)].update(n));try{i=t.instances["rsi_sma_".concat(r)].getResult()}catch(t){i=null}return i&&(t.verticalOhlcv["rsi_sma_".concat(r)][e]=i),!0},sma:function(t,e,r){var n,i=t.verticalOhlcv.close[e];0===e&&(t.instances["sma_".concat(r)]=new H(r),t.verticalOhlcv["sma_".concat(r)]=new Array(t.len).fill(null)),t.instances["sma_".concat(r)].update(i);try{n=t.instances["sma_".concat(r)].getResult()}catch(t){}n&&(t.verticalOhlcv["sma_".concat(r)][e]=n)},ema:function(t,e,r){var n,i=t.verticalOhlcv.close[e];0===e&&(t.instances["ema_".concat(r)]=new st(r),t.verticalOhlcv["ema_".concat(r)]=new Array(t.len).fill(null)),t.instances["ema_".concat(r)].update(i);try{n=t.instances["ema_".concat(r)].getResult()}catch(t){n=null}n&&(t.verticalOhlcv["ema_".concat(r)][e]=n)},macd:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:12,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:26,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:9,o=t.verticalOhlcv.close[e];0===e&&(t.crossPairsList.push({fast:"macd_diff",slow:"macd_dea"}),t.instances.macd=new pt(new st(r),new st(n),new st(i)),Object.assign(t.verticalOhlcv,{macd_diff:new Array(t.len).fill(null),macd_dea:new Array(t.len).fill(null),macd_histogram:new Array(t.len).fill(null)}));var a,l=t.instances.macd;l.update(o);try{a=l.getResult()}catch(t){}return a&&(t.verticalOhlcv.macd_diff[e]=a.macd,t.verticalOhlcv.macd_dea[e]=a.signal,t.verticalOhlcv.macd_histogram[e]=a.histogram),!0},relativeVolume:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,n=t.verticalOhlcv.volume[e];0===e&&(t.instances["relative_volume_".concat(r)]=new H(r),Object.assign(t.verticalOhlcv,Et(Et({},"relative_volume_".concat(r),new Array(t.len).fill(null)),"relative_volume_sma_".concat(r),new Array(t.len).fill(null))));var i,o=t.instances["relative_volume_".concat(r)];o.update(n);try{i=o.getResult()}catch(t){}return t.verticalOhlcv["relative_volume_sma_".concat(r)][e]=i,null!==i&&"number"==typeof t.verticalOhlcv["relative_volume_sma_".concat(r)][e-1]?t.verticalOhlcv["relative_volume_".concat(r)][e]=n/t.verticalOhlcv["relative_volume_sma_".concat(r)][e-1]:t.verticalOhlcv["relative_volume_".concat(r)][e]=null,!0},donchianChannels:function(t,e,r,n){var i=t.verticalOhlcv.high,o=t.verticalOhlcv.low;0===e&&(t.instances.donchian_channels={},Object.assign(t.verticalOhlcv,{donchian_channel_upper:new Array(t.len).fill(null),donchian_channel_basis:new Array(t.len).fill(null),donchian_channel_lower:new Array(t.len).fill(null)}));var a=e-n+1,l=a-r;if(l<0||a>t.len)return!0;var u=i.slice(l,a),s=o.slice(l,a),c=Math.max.apply(Math,It(u)),f=Math.min.apply(Math,It(s)),h=(c+f)/2,v=e;return v>=0&&v<t.len&&(t.verticalOhlcv.donchian_channel_upper[v]=c,t.verticalOhlcv.donchian_channel_basis[v]=h,t.verticalOhlcv.donchian_channel_lower[v]=f),!0},bollingerBands:function(t,e,r,n){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=t.verticalOhlcv.close[e];0===e&&(Object.assign(t.instances,{bollinger_bands:{instance:new tt(r,n),heightInstance:i?new H(r):null}}),Object.assign(t.verticalOhlcv,{bollinger_bands_upper:new Array(t.len).fill(null),bollinger_bands_middle:new Array(t.len).fill(null),bollinger_bands_lower:new Array(t.len).fill(null)}),i&&Object.assign(t.verticalOhlcv,{bollinger_bands_range:new Array(t.len).fill(null),bollinger_bands_height:new Array(t.len).fill(null)}));var a,l=t.instances.bollinger_bands,u=l.instance,s=l.heightInstance;u.update(o);try{a=u.getResult()}catch(t){}if(!a)return!0;var c,f,h,v=a,p=v.upper,y=v.middle,d=v.lower;if(t.verticalOhlcv.bollinger_bands_upper[e]=p,t.verticalOhlcv.bollinger_bands_middle[e]=y,t.verticalOhlcv.bollinger_bands_lower[e]=d,!i)return!0;c=(o-d)/(p-d),f=p-d,s.update(f);try{h=s.getResult()}catch(t){}return t.verticalOhlcv.bollinger_bands_range[e]=c,h&&(t.verticalOhlcv.bollinger_bands_height[e]=kt(f,h,1.5)),!0},volumeOscillator:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,i=t.verticalOhlcv.volume[e];0===e&&(Object.assign(t.instances,{volume_oscillator:{fastEMA:new st(r),slowEMA:new st(n)}}),t.verticalOhlcv.volume_oscillator=new Array(t.len).fill(null),t.crossPairsList.push({fast:"volume_oscillator",slow:0}));var o=t.instances.volume_oscillator,a=o.fastEMA,l=o.slowEMA;a.update(i),l.update(i);var u=null,s=null;try{u=a.getResult()}catch(t){u=null}try{s=l.getResult()}catch(t){s=null}return t.verticalOhlcv.volume_oscillator[e]="number"==typeof u&&"number"==typeof s&&0!==s?100*(u-s)/s:null,!0},candlesStudies:function(t,e,r){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},o=i.changeLevel,a=void 0===o?7:o,l=i.sizeLevel,u=void 0===l?5:l;0===e&&Object.assign(t.verticalOhlcv,{candle_gap_size:new Array(t.len).fill(null),candle_body_size:new Array(t.len).fill(null),candle_top_size:new Array(t.len).fill(null),candle_bottom_size:new Array(t.len).fill(null),candle_shadow_size:new Array(t.len).fill(null),candle_close_direction:new Array(t.len).fill(null),candle_high_direction:new Array(t.len).fill(null),candle_low_direction:new Array(t.len).fill(null),candle_open_direction:new Array(t.len).fill(null)}),n&&0===e&&Object.assign(t.instances,{candleStudies:{topInstance:new H(r),bottomInstance:new H(r),gapInstance:new H(r),bodySizeInstance:new H(r),shadowSizeInstance:new H(r),closeDirectionInstance:new H(r),highDirectionInstance:new H(r),lowDirectionInstance:new H(r),openDirectionInstance:new H(r)}});var s=t.verticalOhlcv.open[e-1],c=t.verticalOhlcv.high[e-1],f=t.verticalOhlcv.low[e-1],h=t.verticalOhlcv.close[e-1];if([s,c,f,h].some((function(t){return void 0===t})))return!0;var v=t.verticalOhlcv.open[e],p=t.verticalOhlcv.high[e],y=t.verticalOhlcv.low[e],d=t.verticalOhlcv.close[e],b=d>v,m=Math.abs(d-v),g=Math.abs(p-y),w=p-Math.max(v,d),_=Math.min(v,d)-y,O=Math.abs(h-v),S=Math.abs(d-h),P=Math.abs(p-c),j=Math.abs(y-f),A=Math.abs(v-s),E=null,I=null,R=null,k=null,M=null,T=null,x=null,D=null,C=null;if(n){var L=t.instances.candleStudies,B=L.topInstance,z=L.bottomInstance,F=L.gapInstance,N=L.bodySizeInstance,U=L.shadowSizeInstance,V=L.closeDirectionInstance,q=L.highDirectionInstance,K=L.lowDirectionInstance,$=L.openDirectionInstance;B.update(Math.abs(w)),z.update(Math.abs(_)),U.update(Math.abs(g)),F.update(O),N.update(m),V.update(S),q.update(P),K.update(j),$.update(A);try{R=B.getResult(),I=z.getResult(),E=F.getResult(),k=N.getResult(),M=U.getResult(),T=V.getResult(),x=q.getResult(),D=K.getResult(),C=$.getResult()}catch(t){}t.verticalOhlcv.candle_body_size[e]=b?kt(m,k,2,a):-Math.abs(kt(m,k,2,a))||0,t.verticalOhlcv.candle_gap_size[e]=b?kt(O,E,2,a):-Math.abs(kt(O,E,2,a))||0,t.verticalOhlcv.candle_close_direction[e]=b?kt(S,T,2,a):-Math.abs(kt(S,T,2,a))||0,t.verticalOhlcv.candle_high_direction[e]=b?kt(P,x,2,a):-Math.abs(kt(P,x,2,a))||0,t.verticalOhlcv.candle_low_direction[e]=b?kt(j,D,2,a):-Math.abs(kt(j,D,2,a))||0,t.verticalOhlcv.candle_open_direction[e]=b?kt(A,C,2,a):-Math.abs(kt(A,C,2,a))||0,t.verticalOhlcv.candle_top_size[e]=kt(w,R,.5,u),t.verticalOhlcv.candle_bottom_size[e]=kt(_,I,.5,u),t.verticalOhlcv.candle_shadow_size[e]=kt(g,M,.5,u)}else t.verticalOhlcv.candle_body_size[e]=b?m:-m,t.verticalOhlcv.candle_gap_size[e]=b?O:-O,t.verticalOhlcv.candle_close_direction[e]=b?S:-S,t.verticalOhlcv.candle_high_direction[e]=b?P:-P,t.verticalOhlcv.candle_low_direction[e]=b?j:-j,t.verticalOhlcv.candle_open_direction[e]=b?A:-A,t.verticalOhlcv.candle_top_size[e]=w,t.verticalOhlcv.candle_bottom_size[e]=_,t.verticalOhlcv.candle_shadow_size[e]=g;return!0},lag:Tt},Kt={midPriceOpenClose:!0,midPriceHighLow:!0,sessionIndex:!0,sessionIntradayIndex:!0,dayOfTheWeek:!0,dayOfTheMonth:!0,weekOfTheMonth:!0},$t=function(t){var e=new Date(t),r=e.getDay(),n=e.getDate(),i=new Date(e.getFullYear(),e.getMonth(),1).getDay();return{day_of_the_week:r,day_of_the_month:n,week_of_the_month:Math.ceil((n+i)/7)}},Gt=function(t,e){for(var r=t.length,n=new H(e),i=new Array(r),o=0,a=0,l=0,u=0;u<r;u++)if(n.update(t[u]),n.isStable){var s=n.getResult();i[u]=s,o+=s,a+=s*s,l++}else i[u]=null;var c=o/l,f=a/l-c*c,h=Math.sqrt(f);return i.map((function(t){return null!==t?(t-c)/h:null}))},Wt=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=Gt(t,r),i=Gt(e,r),o=t.length,a=[],l=0,u=0,s=0,c=0,f=0,h=0,v=-1,p=0;p<o;p++){if(null!==n[p]&&null!==i[p]){v=p;break}a.push(0)}if(-1===v)return new Array(o).fill(0);for(var y=v;y<o;y++){var d=n[y],b=i[y];if(null!==d&&null!==b)if(l+=d,u+=b,s+=d*b,c+=d*d,f+=b*b,++h<2)a.push(0);else{var m=h*s-l*u,g=Math.sqrt((h*c-l*l)*(h*f-u*u)),w=0===g?0:m/g;a.push(w)}else l=u=s=c=f=h=0,a.push(0)}return a};function Jt(t){return function(t){if(Array.isArray(t))return Xt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Qt(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 Yt(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,i,o,a,l=[],u=!0,s=!1;try{if(o=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=o.call(r)).done)&&(l.push(n.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw i}}return l}}(t,e)||Qt(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 Qt(t,e){if(t){if("string"==typeof t)return Xt(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)?Xt(t,e):void 0}}function Xt(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=function(t){for(var e=t.input,r=t.inputParams,n=new(0,t.OHLCV_INDICATORS)({input:e,studyOptions:t.studyOptions}),i=0,o=Object.entries(r);i<o.length;i++){var a=Yt(o[i],2),l=a[0],u=a[1];if(!["crossPairs","lag"].includes(l)&&Array.isArray(u))for(var s=0;s<u.length;s++){var c=u[s];Array.isArray(c)&&(c.length>0?n[l].apply(n,Jt(c)):n[l]())}}for(var f=0,h=Object.entries(r);f<h.length;f++){var v=Yt(h[f],2),p=v[0],y=v[1];if(["crossPairs","lag"].includes(p)&&Array.isArray(y))for(var d=0;d<y.length;d++){var b=y[d];Array.isArray(b)&&(b.length>0?n[p].apply(n,Jt(b)):n[p]())}}return n};function te(t){return te="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},te(t)}function ee(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)||function(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}}(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 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,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,ie(n.key),n)}}function ie(t){var e=function(t,e){if("object"!=te(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=te(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==te(e)?e:e+""}var oe=function(){return t=function t(e){var r=e.input,n=e.ticker,i=void 0===n?null:n,o=e.studyOptions,a=void 0===o?null:o;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: "+i);if(0===r.length)throw Error("input ohlcv must not be empty: "+i);if(!r[0].hasOwnProperty("close"))throw Error("input ohlcv array objects require at least close property: "+i);return this.input=r,this.priceBased=["open","high","low","close","mid_price_open_close","mid_price_high_low"],this.len=r.length,this.studyOptions=null===a?Kt:a,this.instances={},this.crossPairsList=[],this.verticalOhlcv={},this.inputParams={crossPairs:null,lag:null,relativeVolume:null,ema:null,sma:null,macd:null,bollingerBands:null,rsi:null,donchianChannels:null,candlesStudies:null,volumeOscillator:null},this.studies={},this.utilities={correlation:Wt},this.setIndicatorsFromInputParams=Zt,this},e=[{key:"getData",value:function(){this.compute();for(var t=this.verticalOhlcv,e=Object.keys(t),r=t[e[0]].length,n=e.length,i=[],o=0;o<r;o++){for(var a={},l=!1,u=0;u<n;u++){var s=e[u],c=t[s][o];if(null==c){l=!0;break}a[s]=c}l||i.push(a)}return i}},{key:"getLastValues",value:function(){return this.getData()[this.getData().length-1]}},{key:"compute",value:function(){return function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=e.len,i=e.studyOptions,o=void 0===i?{}:i,a=e.inputParams;if(o)for(var l=Object.keys(o),u=0;u<l.length;u++){var s=l[u];if(!Kt.hasOwnProperty(s))throw new Error("Key ".concat(s," not found in defaultStudyOptions. Available options: ").concat(Object.keys(Kt).join(", ")))}var c=o.midPriceOpenClose,f=o.midPriceHighLow,h=o.sessionIndex,v=o.sessionIntradayIndex,p=o.dayOfTheWeek,y=o.dayOfTheMonth,d=o.weekOfTheMonth,b=["open","high","low","close","volume"];c&&b.push("mid_price_open_close"),f&&b.push("mid_price_high_low");var m,g=new Set(b),w=e.verticalOhlcv,_=!1;if(0===r){for(var O=0;O<b.length;O++)w[b[O]]=new Array(n);for(var S=Object.keys(t[0]),P=[],j=0;j<S.length;j++){var A=S[j];g.has(A)||(w[A]=new Array(n),P.push(A))}e.otherKeys=P,(_=(m=t)[0].hasOwnProperty("date")&&"string"==typeof m[0].date&&/^\d{4}-\d{2}-\d{2}/.test(m[0].date))?(h&&(w.session_index=new Array(n)),v&&(w.session_intraday_index=new Array(n)),p&&(w.day_of_the_week=new Array(n)),y&&(w.day_of_the_month=new Array(n)),d&&(w.week_of_the_month=new Array(n)),e.prevDateStr=t[0].date.slice(0,10),e.sessionIndexCount=0,e.sessionIntradayIndexCount=0,e.cachedDayInfo=$t(e.prevDateStr)):(e.prevDateStr=null,e.sessionIndexCount=null,e.sessionIntradayIndexCount=null,e.cachedDayInfo=null)}else{if(!e.otherKeys)throw new Error("otherKeys not found in main. Ensure you run with startIndex=0 first to initialize.");if(!e.hasOwnProperty("prevDateStr"))throw new Error("prevDateStr missing in main. Make sure to store state after initial run.");_=null!==e.prevDateStr}var E=[];if(a&&"object"===Vt(a))for(var I in a){var R=a[I];if(Array.isArray(R))for(var k=0;k<R.length;k++){var M=R[k];Array.isArray(M)&&E.push({key:I,fn:qt[I],args:M})}}for(var T=w.open,x=w.high,D=w.low,C=w.close,L=w.volume,B=c?w.mid_price_open_close:null,z=f?w.mid_price_high_low:null,H={},F=0;F<e.otherKeys.length;F++){var N=e.otherKeys[F];H[N]=w[N]}for(var U=e.prevDateStr,V=e.sessionIndexCount,q=e.sessionIntradayIndexCount,K=e.cachedDayInfo,$=r;$<n;$++){var G=t[$];T[$]=G.open,x[$]=G.high,D[$]=G.low,C[$]=G.close,L[$]=G.volume,B&&(B[$]=(G.open+G.close)/2),z&&(z[$]=(G.high+G.low)/2);for(var W=0;W<e.otherKeys.length;W++){var J=e.otherKeys[W];H[J][$]=G[J]}if(_){var Y=G.date.slice(0,10);Y!==U&&(U=Y,V++,q=0,K=$t(Y)),p&&(w.day_of_the_week[$]=K.day_of_the_week),y&&(w.day_of_the_month[$]=K.day_of_the_month),d&&(w.week_of_the_month[$]=K.week_of_the_month),h&&(w.session_index[$]=V),v&&(w.session_intraday_index[$]=q),q++;for(var Q=0;Q<E.length;Q++){var X=E[Q],Z=X.fn,tt=X.args,et=X.key;"crossPairs"!==et&&"lag"!==et&&Z.apply(void 0,[e,$].concat(Nt(tt)))}Tt(e,$,a.lag),Ft(e,$,e.crossPairsList)}}e.prevDateStr=U,e.sessionIndexCount=V,e.sessionIntradayIndexCount=q,e.cachedDayInfo=K}(this.input,this),this}},{key:"crossPairs",value:function(t){var e,r;return this.crossPairsList=[].concat(ee(this.crossPairsList),ee(t)),null!==(r=(e=this.inputParams).crossPairs)&&void 0!==r||(e.crossPairs=[]),this.inputParams.crossPairs.push([this.crossPairsList]),this}},{key:"lag",value:function(){var t,e,r=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;null!==(e=(t=this.inputParams).lag)&&void 0!==e||(t.lag=[]),this.inputParams.lag.push([n,i]);for(var o=function(){var t=n[a];r.priceBased.find((function(e){return t.startsWith(e)}))&&r.priceBased.push(t)},a=0;a<n.length;a++)o();return this}},{key:"relativeVolume",value:function(t){var e,r;return null!==(r=(e=this.inputParams).relativeVolume)&&void 0!==r||(e.relativeVolume=[]),this.inputParams.relativeVolume.push([t]),this}},{key:"ema",value:function(t){var e,r;return null!==(r=(e=this.inputParams).ema)&&void 0!==r||(e.ema=[]),this.inputParams.ema.push([t]),this.priceBased.push("ema_".concat(t)),this}},{key:"sma",value:function(t){var e,r;return null!==(r=(e=this.inputParams).sma)&&void 0!==r||(e.sma=[]),this.inputParams.sma.push([t]),this.priceBased.push("sma_".concat(t)),this}},{key:"macd",value:function(t,e,r){var n,i;return null!==(i=(n=this.inputParams).macd)&&void 0!==i||(n.macd=[]),this.inputParams.macd.push([t,e,r]),this}},{key:"bollingerBands",value:function(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,i=arguments.length>2?arguments[2]:void 0;if("number"!=typeof r||r<=0)throw new Error('Invalid parameter: "size" must be a positive number in bollingerBands.');if("number"!=typeof n||n<=0)throw new Error('Invalid parameter: "times" must be a positive number in bollingerBands.');return null!==(e=(t=this.inputParams).bollingerBands)&&void 0!==e||(t.bollingerBands=[]),this.inputParams.bollingerBands.push([r,n,i]),this.priceBased.push("bollinger_bands_middle","bollinger_bands_upper","bollinger_bands_lower"),this}},{key:"rsi",value:function(t){var e,r;if("number"!=typeof t||t<=0)throw new Error('Invalid parameter: "size" must be a positive number in rsi.');return null!==(r=(e=this.inputParams).rsi)&&void 0!==r||(e.rsi=[]),this.inputParams.rsi.push([t]),this}},{key:"donchianChannels",value:function(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if("number"!=typeof r||r<=0)throw new Error('The "size" must be a positive number or 0 in donchianChannels.');if("number"!=typeof n||n<=0)throw new Error('The "offset" must be a positive number or 0 in donchianChannels.');return null!==(e=(t=this.inputParams).donchianChannels)&&void 0!==e||(t.donchianChannels=[]),this.inputParams.donchianChannels.push([r,n]),this.priceBased.push("donchian_channel_upper","donchian_channel_lower","donchian_channel_basis"),this}},{key:"candlesStudies",value:function(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2?arguments[2]:void 0;if("number"!=typeof r||r<=0)throw new Error('The "size" must be a positive number or 0 in candlesStudies.');if("boolean"!=typeof n)throw new Error('The "classify" must be a true or false in candlesStudies.');return null!==(e=(t=this.inputParams).candlesStudies)&&void 0!==e||(t.candlesStudies=[]),this.inputParams.candlesStudies.push([r,n,i]),this}},{key:"volumeOscillator",value:function(t,e){var r,n;return null!==(n=(r=this.inputParams).volumeOscillator)&&void 0!==n||(r.volumeOscillator=[]),this.inputParams.volumeOscillator.push([t,e]),this}}],e&&ne(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}()})(),OHLCV_INDICATORS=e})();
package/index.js CHANGED
@@ -1,4 +1,3 @@
1
- import {crossPairs} from './src/studies/findCrosses.js'
2
1
  import { parseOhlcvToVertical, defaultStudyOptions } from './src/utilities/parsing-utilities.js'
3
2
  import { correlation } from './src/studies/correlation.js'
4
3
  import { setIndicatorsFromInputParams } from './src/utilities/setIndicatorsFromInputParams.js'
@@ -15,7 +14,7 @@ export default class OHLCV_INDICATORS {
15
14
  this.len = input.length
16
15
  this.studyOptions = (studyOptions === null) ? defaultStudyOptions : studyOptions
17
16
  this.instances = {}
18
- this.autoCrossPairsList = []
17
+ this.crossPairsList = []
19
18
  this.verticalOhlcv = {}
20
19
 
21
20
  this.inputParams = {
@@ -100,22 +99,17 @@ export default class OHLCV_INDICATORS {
100
99
  }
101
100
 
102
101
 
102
+
103
103
  crossPairs(arr)
104
104
  {
105
-
106
- this.compute()
107
-
108
- const crossList = [...this.autoCrossPairsList, ...arr]
105
+ this.crossPairsList = [...this.crossPairsList, ...arr]
109
106
  this.inputParams.crossPairs ??= []
110
- this.inputParams.crossPairs.push([crossList])
111
-
112
- const {x, c} = crossPairs(this, crossList)
113
- Object.assign(this.verticalOhlcv, x)
114
- Object.assign(this.studies, c)
115
-
107
+ this.inputParams.crossPairs.push([this.crossPairsList])
108
+
116
109
  return this
117
110
  }
118
111
 
112
+
119
113
  lag(colKeys = ['close'], lags = 1) {
120
114
 
121
115
  this.inputParams.lag ??= []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ohlcv-indicators",
3
- "version": "1.9.4",
3
+ "version": "1.9.5",
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",
@@ -8,7 +8,8 @@
8
8
  "test": "node test/test.js",
9
9
  "study": "node test/study.js",
10
10
  "count": "node test/countUps.js",
11
- "build": "npx webpack"
11
+ "build": "npx webpack",
12
+ "cross": "node src/studies/findCrosses2.js"
12
13
  },
13
14
  "author": "https://jaimelias.com/",
14
15
  "license": "ISC",
@@ -5,7 +5,7 @@ export const bollingerBands = (main, index, size, times, bollingerBandsStudies =
5
5
 
6
6
  const value = main.verticalOhlcv.close[index]
7
7
 
8
- if (!main.instances.hasOwnProperty(`bollinger_bands`)) {
8
+ if (index === 0) {
9
9
 
10
10
  Object.assign(main.instances, {bollinger_bands: {
11
11
  instance: new FasterBollingerBands(size, times),
@@ -5,11 +5,8 @@ export const donchianChannels = (main, index, size, offset) => {
5
5
  const highs = main.verticalOhlcv.high;
6
6
  const lows = main.verticalOhlcv.low;
7
7
 
8
- // If we don't have enough data to fill one size ending at (index - offset), return
9
- if ((index - offset) < (size - 1)) return true;
10
-
11
8
  // Ensure that the required arrays exist
12
- if (!main.instances.hasOwnProperty('donchian_channels')) {
9
+ if (index === 0) {
13
10
 
14
11
  main.instances['donchian_channels'] = {};
15
12
 
@@ -5,7 +5,7 @@ export const ema = (main, index, size) => {
5
5
 
6
6
  const value = main.verticalOhlcv.close[index]
7
7
 
8
- if(!main.instances.hasOwnProperty(`ema_${size}`))
8
+ if(index === 0)
9
9
  {
10
10
  main.instances[`ema_${size}`] = new FasterEMA(size)
11
11
  main.verticalOhlcv[`ema_${size}`] = new Array(main.len).fill(null)
@@ -4,9 +4,9 @@ export const macd = (main, index, fastLine = 12, slowLine = 26, signalLine = 9)
4
4
 
5
5
  const value = main.verticalOhlcv.close[index]
6
6
 
7
- if (!main.instances.hasOwnProperty('macd')) {
7
+ if (index === 0) {
8
8
 
9
- main.autoCrossPairsList.push({fast: 'macd_diff', slow: 'macd_dea'});
9
+ main.crossPairsList.push({fast: 'macd_diff', slow: 'macd_dea'});
10
10
 
11
11
  main.instances['macd'] = new FasterMACD(
12
12
  new FasterEMA(fastLine),
@@ -4,7 +4,7 @@ export const relativeVolume = (main, index, size = 10) => {
4
4
 
5
5
  const value = main.verticalOhlcv.volume[index]
6
6
 
7
- if (!main.instances.hasOwnProperty(`relative_volume_${size}`)) {
7
+ if (index === 0) {
8
8
  main.instances[`relative_volume_${size}`] = new FasterSMA(size);
9
9
 
10
10
  Object.assign(main.verticalOhlcv, {
@@ -5,7 +5,7 @@ export const sma = (main, index, size) => {
5
5
 
6
6
  const value = main.verticalOhlcv.close[index]
7
7
 
8
- if(!main.instances.hasOwnProperty(`sma_${size}`))
8
+ if(index === 0)
9
9
  {
10
10
  main.instances[`sma_${size}`] = new FasterSMA(size)
11
11
  main.verticalOhlcv[`sma_${size}`] = new Array(main.len).fill(null)
@@ -6,9 +6,9 @@ export const rsi = (main, index, size) => {
6
6
 
7
7
  const value = main.verticalOhlcv.close[index]
8
8
 
9
- if(!main.instances.hasOwnProperty(`rsi_${size}`))
9
+ if(index === 0)
10
10
  {
11
- main.autoCrossPairsList.push({fast: `rsi_${size}`, slow: `rsi_sma_${size}`})
11
+ main.crossPairsList.push({fast: `rsi_${size}`, slow: `rsi_sma_${size}`})
12
12
 
13
13
  Object.assign(main.instances, {
14
14
  [`rsi_${size}`]: new FasterRSI(size),
@@ -4,7 +4,7 @@ export const volumeOscillator = (main, index, fastSize = 5, slowSize = 10) => {
4
4
 
5
5
  const value = main.verticalOhlcv.volume[index]
6
6
 
7
- if (!main.instances.hasOwnProperty(`volume_oscillator`)) {
7
+ if (index === 0) {
8
8
 
9
9
  Object.assign(main.instances, {
10
10
  volume_oscillator: {
@@ -14,7 +14,7 @@ export const volumeOscillator = (main, index, fastSize = 5, slowSize = 10) => {
14
14
  })
15
15
 
16
16
  main.verticalOhlcv[`volume_oscillator`] = new Array(main.len).fill(null);
17
- main.autoCrossPairsList.push({ fast: `volume_oscillator`, slow: 0 });
17
+ main.crossPairsList.push({ fast: `volume_oscillator`, slow: 0 });
18
18
  }
19
19
 
20
20
  const { fastEMA, slowEMA } = main.instances[`volume_oscillator`];
@@ -1,188 +1,185 @@
1
- const eq = (f, s) => f === s
2
- const gt = (f, s) => f > s
3
- const lt = (f, s) => f < s
1
+ const eq = (fast, slow) => fast === slow
2
+ const gt = (fast, slow) => fast > slow
3
+ const lt = (fast, slow) => fast < slow
4
4
 
5
5
 
6
+ //this class counts how many intervals have passed between crosses: fast crossed slow line, high crossed slow line or low crossed slow line.
7
+ //interval === 0 for no crosses yet or the lines are equal
8
+ //interval >= 1 for an upwards crosses
9
+ //interval <= -1 from downward crosses
6
10
 
7
- export const crossPairs = (main, arr) => {
8
-
9
- const {verticalOhlcv} = main
11
+ class CrossInstance {
10
12
 
11
- const x = {}
12
- const c = {}
13
-
14
- for (const { fast, slow, count } of arr) {
15
- // Validate parameters
16
- if (!fast || !slow) continue;
17
-
18
- // Prepare slowNumArr if 'slow' is a number
19
- if (typeof slow === 'number') {
20
-
21
- main.verticalOhlcv[slow] = new Array(main.len).fill(slow)
13
+ constructor()
14
+ {
15
+ this.interval = 0
16
+ this.prevState = 0.5
17
+ this.prevFast = null
18
+ this.prevSlow = null
19
+ this.prevHigh = null
20
+ this.prevLow = null
21
+ this.areHighAndLowUndefined = false
22
+ this.index = 0
23
+ this.crossIndexes = {
24
+ up: [],
25
+ down: []
22
26
  }
23
-
24
- const crossName = `${fast}_x_${slow}`
25
- const countName = `${fast}_c_${slow}`
26
27
 
27
- const splitCount = arr => (typeof count !== 'undefined') ? (arr.slice(-count)).filter(o => o === 1 || o === -1).length : 0
28
+ }
29
+ update({fast, high, slow, low})
30
+ {
31
+ let currState = this.prevState
28
32
 
29
- //cross already exists
30
- if(verticalOhlcv[crossName])
33
+ if(!this.areHighAndLowUndefined)
31
34
  {
32
- const cross = verticalOhlcv[crossName]
33
- x[crossName] = cross
34
-
35
- if(typeof count !== 'undefined')
35
+ if(typeof high === 'undefined' || typeof low === 'undefined')
36
36
  {
37
- c[countName] = splitCount(cross)
37
+ this.areHighAndLowUndefined = true
38
38
  }
39
-
40
39
  }
41
- //cross created from 2 columns
42
- else if ((verticalOhlcv[fast] || fast === 'price') && verticalOhlcv[slow]) {
43
40
 
44
- const cross = (fast === 'price')
45
- ? findCrosses({
46
- fast: verticalOhlcv.close,
47
- high: verticalOhlcv.high,
48
- low: verticalOhlcv.low,
49
- slow: verticalOhlcv[slow]}
50
- )
51
- : findCrosses({fast: verticalOhlcv[fast], slow: verticalOhlcv[slow]})
52
-
53
- x[crossName] = cross
41
+ if(fast === null || slow === null){
42
+ currState = 0.5
43
+ }
44
+ else if(eq(fast, slow)) {
45
+ currState = 0.5
46
+ }
47
+ else if(gt(fast, slow)) {
54
48
 
55
- if(typeof count !== 'undefined')
49
+ if(this.areHighAndLowUndefined)
56
50
  {
57
- c[countName] = splitCount(cross)
51
+ currState = 1
52
+ }
53
+ else
54
+ {
55
+ if ([low, slow, this.prevLow, this.prevSlow].every(v => v !== null) && lt(low, slow) && gt(this.prevLow, this.prevSlow))
56
+ {
57
+ currState = 0
58
+ }
59
+ else
60
+ {
61
+ currState = 1
62
+ }
58
63
  }
59
-
60
64
  }
61
- }
62
-
63
- return {x, c}
64
- }
65
+ else if(lt(fast, slow)) {
65
66
 
66
-
67
- // Function to find crosses between two arrays: fast and slow
68
- const findCrosses = ({fast, high, low, slow}) => {
69
- // Map states based on comparison of fast and slow arrays
70
-
71
- const dataLength = fast.length
72
-
73
- if(dataLength ==! slow.length)
74
- {
75
- throw Error('fast and slow do not have the same length')
76
- }
77
-
78
- const state = new Array(dataLength).fill(0.5)
79
-
80
- for(let x = 0; x < dataLength; x++)
81
- {
82
- const prevState = state?.[x-1] || 0.5
83
- const f = fast[x]
84
- const s = slow[x]
85
- const hi = high?.[x]
86
- const lo = low?.[x]
87
-
88
- if(high || low)
89
- {
90
- if(typeof hi === 'undefined' || typeof lo === 'undefined') continue
67
+ if(this.areHighAndLowUndefined)
68
+ {
69
+ currState = 0
70
+ }
71
+ else
72
+ {
73
+ if([high, slow, this.prevHigh, this.prevSlow].every(v => v !== null) && gt(high, slow) && lt(this.prevHigh, this.prevSlow))
74
+ {
75
+ currState = 1
76
+ }
77
+ else
78
+ {
79
+ currState = 0
80
+ }
81
+ }
91
82
  }
92
83
 
93
- const prevS = slow[x - 1]
94
- const prevHi = high?.[x-1]
95
- const prevLo = low?.[x-1]
96
-
97
- if(high || low)
84
+ if(currState === 0.5)
98
85
  {
99
- if(typeof prevHi === 'undefined' || typeof prevLo === 'undefined' || typeof prevS === 'undefined') continue
86
+ this.interval = 0
100
87
  }
101
-
102
- let value
103
-
104
- if(f === null || s === null) value = 0.5
105
-
106
- else if(eq(f, s)) {
107
- value = prevState
108
- }
109
- else if(gt(f, s)) {
110
-
111
- if(lt(lo, s) && gt(prevLo, prevS))
88
+ else if(currState === 1)
89
+ {
90
+ if(this.prevState <= 0.5)
112
91
  {
113
- value = 0
92
+ this.interval = 1
114
93
  }
115
94
  else
116
95
  {
117
- value = 1
96
+ this.interval++
118
97
  }
119
98
  }
120
- else if(lt(f, s)) {
121
-
122
- if(gt(hi, s) && lt(prevHi, prevS))
99
+ else if(currState === 0)
100
+ {
101
+ if(this.prevState >= 0.5)
123
102
  {
124
- value = 1
103
+ this.interval = -1
125
104
  }
126
105
  else
127
106
  {
128
- value = 0
107
+ this.interval--
129
108
  }
130
109
  }
131
-
132
- state[x] = value
133
- }
134
110
 
135
111
 
112
+ if(this.interval === 1) this.crossIndexes.up.push(this.index)
113
+ if(this.interval === -1) this.crossIndexes.down.push(this.index)
114
+
115
+ //save prev state
116
+ this.index++
117
+ this.prevState = currState
118
+ this.prevFast = fast
119
+ this.prevSlow = slow
120
+ this.prevHigh = high
121
+ this.prevLow = low
122
+ }
136
123
 
137
- const groups = groupConsecutiveValues(state)
124
+ getResult()
125
+ {
126
+ return this.interval
127
+ }
138
128
 
139
- return flatGroupsToNumArr(groups)
140
129
  }
141
130
 
131
+ export const crossPairs = (main, index, arr) => {
132
+
133
+ const {len} = main
134
+
135
+ for (const { fast, slow } of arr)
136
+ {
142
137
 
143
- const flatGroupsToNumArr = groups => {
144
- const result = [];
145
-
146
- for (const group of groups) {
147
- const length = group.length;
148
138
 
149
- for (let i = length - 1; i >= 0; i--) {
150
- const s = group[i];
151
- const offset = length - i;
152
- result.push(
153
- s === 0.5 ? 0 : offset * (s === 1 ? 1 : -1)
154
- );
139
+
140
+ if (!fast || !slow) continue
141
+
142
+ let crossName = `${fast}_x_${slow}`
143
+
144
+ if(index === 0)
145
+ {
146
+ if(typeof slow === 'number')
147
+ {
148
+ main.verticalOhlcv[slow] = new Array(len).fill(slow)
149
+ }
150
+
151
+ if(fast !== 'price' && !main.verticalOhlcv.hasOwnProperty(fast)) throw Error(`fast "${fast} not found in crossPairs"`)
152
+ if(!main.verticalOhlcv.hasOwnProperty(slow)) throw Error(`slow "${slow} not found in crossPairs"`)
153
+
154
+
155
+ main.instances[crossName] = new CrossInstance()
156
+ main.verticalOhlcv[crossName] = new Array(len).fill(null)
155
157
  }
156
- }
157
-
158
- return result;
159
- }
160
158
 
159
+ let fastValue
160
+ let closeValue
161
+ let highValue
162
+ let lowValue
163
+ let slowValue
161
164
 
162
- // Helper function to group consecutive values
163
- const groupConsecutiveValues = (arr) => {
164
- const length = arr.length;
165
- if (length === 0) return [];
165
+ if(fast === 'price')
166
+ {
167
+ closeValue = main.verticalOhlcv.close[index]
168
+ highValue = main.verticalOhlcv.high[index]
169
+ lowValue = main.verticalOhlcv.low[index]
170
+ slowValue = main.verticalOhlcv[slow][index]
166
171
 
167
- const result = [];
168
- let currentGroup = [arr[0]];
172
+ main.instances[crossName].update({fast: closeValue, slow: slowValue, high: highValue, low: lowValue})
169
173
 
170
- for (let i = 1; i < length; i++) {
171
- const currentValue = arr[i];
172
- const prevValue = arr[i - 1];
174
+ } else
175
+ {
176
+ fastValue = main.verticalOhlcv[fast][index]
177
+ slowValue = main.verticalOhlcv[slow][index]
173
178
 
174
- if (currentValue === prevValue) {
175
- // Same value, continue the current group
176
- currentGroup.push(currentValue);
177
- } else {
178
- // Value changed, finalize the current group and start a new one
179
- result.push(currentGroup);
180
- currentGroup = [currentValue];
179
+ main.instances[crossName].update({fast: fastValue, slow: slowValue})
181
180
  }
182
- }
183
181
 
184
- // Push the last group
185
- result.push(currentGroup);
182
+ main.verticalOhlcv[crossName][index] = main.instances[crossName].getResult()
183
+ }
186
184
 
187
- return result;
188
- };
185
+ }
@@ -1,27 +1,34 @@
1
- export const lag = (main, index, colKeys = ['close'], lags = 1) => {
1
+ export const lag = (main, index, params) => {
2
2
 
3
- const { verticalOhlcv, len } = main;
3
+ for(let p = 0; p < params.length; p++)
4
+ {
5
+ const [colKeys, lags] = params[p]
4
6
 
5
- // Ensure arrays exist for each lag key before we populate
6
- for (let x = 0; x < colKeys.length; x++) {
7
- for (let lag = 1; lag <= lags; lag++) {
8
- const key = `${colKeys[x]}_lag_${lag}`;
9
- // If the array does not exist, initialize it
10
- if (!verticalOhlcv.hasOwnProperty(key)) {
11
- verticalOhlcv[key] = new Array(len).fill(null);
12
- }
7
+ // Ensure arrays exist for each lag key before we populate
8
+ for (let x = 0; x < colKeys.length; x++) {
9
+ for (let lag = 1; lag <= lags; lag++) {
10
+ const key = `${colKeys[x]}_lag_${lag}`;
11
+ // If the array does not exist, initialize it
12
+ if (index === 0) {
13
+ main.verticalOhlcv[key] = new Array(main.len).fill(null)
14
+ }
13
15
 
14
- // Compute the lagged index
15
- const laggedIndex = index - lag;
16
-
17
- // If laggedIndex is negative, we don't have a previous value
18
- const value = (laggedIndex >= 0)
19
- ? verticalOhlcv[colKeys[x]][laggedIndex]
20
- : null;
21
-
22
- verticalOhlcv[key][index] = value;
16
+ // Compute the lagged index
17
+ const laggedIndex = index - lag;
18
+
19
+ // If laggedIndex is negative, we don't have a previous value
20
+ const value = (laggedIndex >= 0)
21
+ ? main.verticalOhlcv[colKeys[x]][laggedIndex]
22
+ : null;
23
+
24
+ main.verticalOhlcv[key][index] = value;
25
+ }
23
26
  }
24
27
  }
25
28
 
29
+
30
+
31
+
32
+
26
33
  return true;
27
34
  };
@@ -8,6 +8,7 @@ import { bollingerBands } from "../moving-averages/bollingerBands.js"
8
8
  import { volumeOscillator } from "../oscillators/volumeOscillator.js"
9
9
  import { candlesStudies } from "../studies/candleStudies.js"
10
10
  import { lag } from "../studies/lag.js"
11
+ import {crossPairs} from "../studies/findCrosses.js"
11
12
 
12
13
  const indicatorFunctions = {
13
14
  rsi,
@@ -19,7 +20,7 @@ const indicatorFunctions = {
19
20
  bollingerBands,
20
21
  volumeOscillator,
21
22
  candlesStudies,
22
- lag
23
+ lag,
23
24
  }
24
25
 
25
26
  const validateFirstDate = (arr) => arr[0].hasOwnProperty('date') && typeof arr[0].date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(arr[0].date)
@@ -149,13 +150,13 @@ export const parseOhlcvToVertical = (input, main, startIndex = 0) => {
149
150
  const indicatorCalls = []
150
151
  if (inputParams && typeof inputParams === 'object') {
151
152
  for (const key in inputParams) {
152
- if (key === 'crossPairs') continue
153
153
  const technical = inputParams[key]
154
154
  if (Array.isArray(technical)) {
155
155
  for (let i = 0; i < technical.length; i++) {
156
156
  const params = technical[i];
157
157
  if (Array.isArray(params)) {
158
158
  indicatorCalls.push({
159
+ key,
159
160
  fn: indicatorFunctions[key],
160
161
  args: params
161
162
  })
@@ -198,11 +199,7 @@ export const parseOhlcvToVertical = (input, main, startIndex = 0) => {
198
199
  vo_close[x] = current.close
199
200
  vo_volume[x] = current.volume
200
201
 
201
- // Run indicator functions
202
- for (let i = 0; i < indicatorCalls.length; i++) {
203
- const { fn, args } = indicatorCalls[i]
204
- fn(main, x, ...args)
205
- }
202
+
206
203
 
207
204
  // Mid-price calculations
208
205
  if (vo_mid_oc) {
@@ -249,6 +246,17 @@ export const parseOhlcvToVertical = (input, main, startIndex = 0) => {
249
246
  }
250
247
 
251
248
  sessionIntradayIndexCount++
249
+
250
+
251
+ // Run indicator functions
252
+ for (let i = 0; i < indicatorCalls.length; i++) {
253
+ const { fn, args, key } = indicatorCalls[i]
254
+ if(key === 'crossPairs' || key === 'lag') continue
255
+ fn(main, x, ...args)
256
+ }
257
+
258
+ lag(main, x, inputParams.lag)
259
+ crossPairs(main, x, main.crossPairsList)
252
260
  }
253
261
  }
254
262