ohlcv-indicators 1.7.1 → 1.7.4

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:(r,e)=>{for(var n in e)t.o(e,n)&&!t.o(r,n)&&Object.defineProperty(r,n,{enumerable:!0,get:e[n]})},o:(t,r)=>Object.prototype.hasOwnProperty.call(t,r),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},r={};(()=>{t.r(r),t.d(r,{default:()=>rr});var e=1e6,n="[big.js] ",o=n+"Invalid ",i=o+"decimal places",u=o+"rounding mode",l=n+"Division by zero",a={},c=void 0,s=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function f(t,r,e,n){var o=t.c;if(e===c&&(e=t.constructor.RM),0!==e&&1!==e&&2!==e&&3!==e)throw Error(u);if(r<1)n=3===e&&(n||!!o[0])||0===r&&(1===e&&o[0]>=5||2===e&&(o[0]>5||5===o[0]&&(n||o[1]!==c))),o.length=1,n?(t.e=t.e-r+1,o[0]=1):o[0]=t.e=0;else if(r<o.length){if(n=1===e&&o[r]>=5||2===e&&(o[r]>5||5===o[r]&&(n||o[r+1]!==c||1&o[r-1]))||3===e&&(n||!!o[0]),o.length=r,n)for(;++o[--r]>9;)if(o[r]=0,0===r){++t.e,o.unshift(1);break}for(r=o.length;!o[--r];)o.pop()}return t}function h(t,r,e){var n=t.e,o=t.c.join(""),i=o.length;if(r)o=o.charAt(0)+(i>1?"."+o.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)o="0"+o;o="0."+o}else if(n>0)if(++n>i)for(n-=i;n--;)o+="0";else n<i&&(o=o.slice(0,n)+"."+o.slice(n));else i>1&&(o=o.charAt(0)+"."+o.slice(1));return t.s<0&&e?"-"+o:o}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 r="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(r){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!==r){if(r.has(t))return r.get(t);r.set(t,e)}function e(){return function(t,r,e){if(y())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,r);var o=new(t.bind.apply(t,n));return e&&b(o,e.prototype),o}(t,arguments,d(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),b(e,t)},p(t)}function y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(y=function(){return!!t})()}function b(t,r){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},b(t,r)}function d(t){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},d(t)}a.abs=function(){var t=new this.constructor(this);return t.s=1,t},a.cmp=function(t){var r,e=this,n=e.c,o=(t=new e.constructor(t)).c,i=e.s,u=t.s,l=e.e,a=t.e;if(!n[0]||!o[0])return n[0]?i:o[0]?-u:0;if(i!=u)return i;if(r=i<0,l!=a)return l>a^r?1:-1;for(u=(l=n.length)<(a=o.length)?l:a,i=-1;++i<u;)if(n[i]!=o[i])return n[i]>o[i]^r?1:-1;return l==a?0:l>a^r?1:-1},a.div=function(t){var r=this,n=r.constructor,o=r.c,u=(t=new n(t)).c,a=r.s==t.s?1:-1,s=n.DP;if(s!==~~s||s<0||s>e)throw Error(i);if(!u[0])throw Error(l);if(!o[0])return t.s=a,t.c=[t.e=0],t;var h,v,p,y,b,d=u.slice(),m=h=u.length,g=o.length,w=o.slice(0,h),O=w.length,j=t,_=j.c=[],S=0,P=s+(j.e=r.e-t.e)+1;for(j.s=a,a=P<0?0:P,d.unshift(0);O++<h;)w.push(0);do{for(p=0;p<10;p++){if(h!=(O=w.length))y=h>O?1:-1;else for(b=-1,y=0;++b<h;)if(u[b]!=w[b]){y=u[b]>w[b]?1:-1;break}if(!(y<0))break;for(v=O==h?u:d;O;){if(w[--O]<v[O]){for(b=O;b&&!w[--b];)w[b]=9;--w[b],w[O]+=10}w[O]-=v[O]}for(;!w[0];)w.shift()}_[S++]=y?p:++p,w[0]&&y?w[O]=o[m]||0:w=[o[m]]}while((m++<g||w[0]!==c)&&a--);return _[0]||1==S||(_.shift(),j.e--,P--),S>P&&f(j,P,n.RM,w[0]!==c),j},a.eq=function(t){return 0===this.cmp(t)},a.gt=function(t){return this.cmp(t)>0},a.gte=function(t){return this.cmp(t)>-1},a.lt=function(t){return this.cmp(t)<0},a.lte=function(t){return this.cmp(t)<1},a.minus=a.sub=function(t){var r,e,n,o,i=this,u=i.constructor,l=i.s,a=(t=new u(t)).s;if(l!=a)return t.s=-a,i.plus(t);var c=i.c.slice(),s=i.e,f=t.c,h=t.e;if(!c[0]||!f[0])return f[0]?t.s=-a:c[0]?t=new u(i):t.s=1,t;if(l=s-h){for((o=l<0)?(l=-l,n=c):(h=s,n=f),n.reverse(),a=l;a--;)n.push(0);n.reverse()}else for(e=((o=c.length<f.length)?c:f).length,l=a=0;a<e;a++)if(c[a]!=f[a]){o=c[a]<f[a];break}if(o&&(n=c,c=f,f=n,t.s=-t.s),(a=(e=f.length)-(r=c.length))>0)for(;a--;)c[r++]=0;for(a=r;e>l;){if(c[--e]<f[e]){for(r=e;r&&!c[--r];)c[r]=9;--c[r],c[e]+=10}c[e]-=f[e]}for(;0===c[--a];)c.pop();for(;0===c[0];)c.shift(),--h;return c[0]||(t.s=1,c=[h=0]),t.c=c,t.e=h,t},a.mod=function(t){var r,e=this,n=e.constructor,o=e.s,i=(t=new n(t)).s;if(!t.c[0])throw Error(l);return e.s=t.s=1,r=1==t.cmp(e),e.s=o,t.s=i,r?new n(e):(o=n.DP,i=n.RM,n.DP=n.RM=0,e=e.div(t),n.DP=o,n.RM=i,this.minus(e.times(t)))},a.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},a.plus=a.add=function(t){var r,e,n,o=this,i=o.constructor;if(t=new i(t),o.s!=t.s)return t.s=-t.s,o.minus(t);var u=o.e,l=o.c,a=t.e,c=t.c;if(!l[0]||!c[0])return c[0]||(l[0]?t=new i(o):t.s=o.s),t;if(l=l.slice(),r=u-a){for(r>0?(a=u,n=c):(r=-r,n=l),n.reverse();r--;)n.push(0);n.reverse()}for(l.length-c.length<0&&(n=c,c=l,l=n),r=c.length,e=0;r;l[r]%=10)e=(l[--r]=l[r]+c[r]+e)/10|0;for(e&&(l.unshift(e),++a),r=l.length;0===l[--r];)l.pop();return t.c=l,t.e=a,t},a.pow=function(t){var r=this,e=new r.constructor("1"),n=e,i=t<0;if(t!==~~t||t<-1e6||t>1e6)throw Error(o+"exponent");for(i&&(t=-t);1&t&&(n=n.times(r)),t>>=1;)r=r.times(r);return i?e.div(n):n},a.prec=function(t,r){if(t!==~~t||t<1||t>e)throw Error(o+"precision");return f(new this.constructor(this),t,r)},a.round=function(t,r){if(t===c)t=0;else if(t!==~~t||t<-e||t>e)throw Error(i);return f(new this.constructor(this),t+this.e+1,r)},a.sqrt=function(){var t,r,e,o=this,i=o.constructor,u=o.s,l=o.e,a=new i("0.5");if(!o.c[0])return new i(o);if(u<0)throw Error(n+"No square root");0===(u=Math.sqrt(o+""))||u===1/0?((r=o.c.join("")).length+l&1||(r+="0"),l=((l+1)/2|0)-(l<0||1&l),t=new i(((u=Math.sqrt(r))==1/0?"5e":(u=u.toExponential()).slice(0,u.indexOf("e")+1))+l)):t=new i(u+""),l=t.e+(i.DP+=4);do{e=t,t=a.times(e.plus(o.div(e)))}while(e.c.slice(0,l).join("")!==t.c.slice(0,l).join(""));return f(t,(i.DP-=4)+t.e+1,i.RM)},a.times=a.mul=function(t){var r,e=this,n=e.constructor,o=e.c,i=(t=new n(t)).c,u=o.length,l=i.length,a=e.e,c=t.e;if(t.s=e.s==t.s?1:-1,!o[0]||!i[0])return t.c=[t.e=0],t;for(t.e=a+c,u<l&&(r=o,o=i,i=r,c=u,u=l,l=c),r=new Array(c=u+l);c--;)r[c]=0;for(a=l;a--;){for(l=0,c=u+a;c>a;)l=r[c]+i[a]*o[c-a-1]+l,r[c--]=l%10,l=l/10|0;r[c]=l}for(l?++t.e:r.shift(),a=r.length;!r[--a];)r.pop();return t.c=r,t},a.toExponential=function(t,r){var n=this,o=n.c[0];if(t!==c){if(t!==~~t||t<0||t>e)throw Error(i);for(n=f(new n.constructor(n),++t,r);n.c.length<t;)n.c.push(0)}return h(n,!0,!!o)},a.toFixed=function(t,r){var n=this,o=n.c[0];if(t!==c){if(t!==~~t||t<0||t>e)throw Error(i);for(t=t+(n=f(new n.constructor(n),t+n.e+1,r)).e+1;n.c.length<t;)n.c.push(0)}return h(n,!1,!!o)},a[Symbol.for("nodejs.util.inspect.custom")]=a.toJSON=a.toString=function(){var t=this,r=t.constructor;return h(t,t.e<=r.NE||t.e>=r.PE,!!t.c[0])},a.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},a.toPrecision=function(t,r){var n=this,i=n.constructor,u=n.c[0];if(t!==c){if(t!==~~t||t<1||t>e)throw Error(o+"precision");for(n=f(new i(n),t,r);n.c.length<t;)n.c.push(0)}return h(n,t<=n.e||n.e<=i.NE||n.e>=i.PE,!!u)},a.valueOf=function(){var t=this,r=t.constructor;if(!0===r.strict)throw Error(n+"valueOf disallowed");return h(t,t.e<=r.NE||t.e>=r.PE,!0)},function t(){function r(e){var n=this;if(!(n instanceof r))return e===c?t():new r(e);if(e instanceof r)n.s=e.s,n.e=e.e,n.c=e.c.slice();else{if("string"!=typeof e){if(!0===r.strict&&"bigint"!=typeof e)throw TypeError(o+"value");e=0===e&&1/e<0?"-0":String(e)}!function(t,r){var e,n,i;if(!s.test(r))throw Error(o+"number");for(t.s="-"==r.charAt(0)?(r=r.slice(1),-1):1,(e=r.indexOf("."))>-1&&(r=r.replace(".","")),(n=r.search(/e/i))>0?(e<0&&(e=n),e+=+r.slice(n+1),r=r.substring(0,n)):e<0&&(e=r.length),i=r.length,n=0;n<i&&"0"==r.charAt(n);)++n;if(n==i)t.c=[t.e=0];else{for(;i>0&&"0"==r.charAt(--i););for(t.e=e-n-1,t.c=[],e=0;n<=i;)t.c[e++]=+r.charAt(n++)}}(n,e)}n.constructor=r}return r.prototype=a,r.DP=20,r.RM=1,r.NE=-7,r.PE=21,r.strict=!1,r.roundDown=0,r.roundHalfUp=1,r.roundHalfEven=2,r.roundUp=3,r}();var m=function(t){function r(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Not enough data";return function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),t=function(t,r,e){return r=d(r),function(t,r){if(r&&("object"==v(r)||"function"==typeof r))return r;if(void 0!==r)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(r,e||[],d(t).constructor):r.apply(t,e))}(this,r,[e]),Object.setPrototypeOf(t,(this instanceof r?this.constructor:void 0).prototype),t.name="NotEnoughDataError",t}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&b(t,r)}(r,t),e=r,Object.defineProperty(e,"prototype",{writable:!1}),e;var e}(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,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,j(n.key),n)}}function O(t,r,e){return(r=j(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function j(t){var r=function(t,r){if("object"!=g(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}var _=function(){return t=function t(){(function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")})(this,t),O(this,"previousHighest",void 0),O(this,"highest",void 0),O(this,"previousLowest",void 0),O(this,"lowest",void 0),O(this,"previousResult",void 0),O(this,"result",void 0)},(r=[{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,r){return r&&(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,r),e&&w(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,e}();function S(t){return S="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},S(t)}function P(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,T(n.key),n)}}function E(t,r,e){return r=k(r),function(t,r){if(r&&("object"==S(r)||"function"==typeof r))return r;if(void 0!==r)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,A()?Reflect.construct(r,e||[],k(t).constructor):r.apply(t,e))}function A(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(A=function(){return!!t})()}function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function R(t,r){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},R(t,r)}function T(t){var r=function(t,r){if("object"!=S(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==S(r)?r:r+""}var M=function(t){function r(t){var e,n,o,i;return function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),n=e=E(this,r),i=void 0,(o=T(o="interval"))in n?Object.defineProperty(n,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[o]=i,e.interval=t,e}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&R(t,r)}(r,t),e=r,(n=[{key:"updates",value:function(t){var r=this;return t.forEach((function(t){return r.update(t)})),this.result}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&P(e.prototype,n),o&&P(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,o}(_);function x(t){return x="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},x(t)}function C(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,F(n.key),n)}}function D(t,r,e){return r=L(r),function(t,r){if(r&&("object"==x(r)||"function"==typeof r))return r;if(void 0!==r)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,I()?Reflect.construct(r,e||[],L(t).constructor):r.apply(t,e))}function I(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(I=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,r){return B=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},B(t,r)}function F(t){var r=function(t,r){if("object"!=x(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=x(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==x(r)?r:r+""}var N=function(t){function r(){var t,e,n,o;!function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r);for(var i=arguments.length,u=new Array(i),l=0;l<i;l++)u[l]=arguments[l];return e=t=D(this,r,[].concat(u)),o=[],(n=F(n="prices"))in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,t}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&B(t,r)}(r,t),e=r,n=[{key:"update",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.prices.length&&r?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 e=this.prices.reduce((function(t,r){return t+r}),0);return this.setResult(e/this.prices.length,r)}}}],n&&C(e.prototype,n),o&&C(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,o}(M);function q(t){return q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},q(t)}function G(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,J(n.key),n)}}function H(t,r,e){return r=U(r),function(t,r){if(r&&("object"==q(r)||"function"==typeof r))return r;if(void 0!==r)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(r,e||[],U(t).constructor):r.apply(t,e))}function V(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(V=function(){return!!t})()}function U(t){return U=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},U(t)}function z(t,r){return z=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},z(t,r)}function $(t,r,e){return(r=J(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function J(t){var r=function(t,r){if("object"!=q(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==q(r)?r:r+""}var Y=function(t){function r(t){var e;return function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),$(e=H(this,r),"interval",void 0),$(e,"indicator",void 0),$(e,"smoothingFactor",void 0),e.interval=t,e.indicator=new N(t),e.smoothingFactor=1/e.interval,e}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&z(t,r)}(r,t),e=r,n=[{key:"updates",value:function(t){var r=this;return t.forEach((function(t){return r.update(t)})),this.result}},{key:"update",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],e=this.indicator.update(t);if(r&&void 0!==this.previousResult){var n=(t-this.previousResult)*this.smoothingFactor;return this.setResult(n+this.previousResult,r)}if(!r&&void 0!==this.result){var o=(t-this.result)*this.smoothingFactor;return this.setResult(o+this.result,r)}if(void 0===this.result&&void 0!==e)return this.setResult(e,r)}}],n&&G(e.prototype,n),o&&G(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,o}(_);function K(t){return t.length?t.reduce((function(t,r){return t+r}),0)/t.length:0}function Q(t){return Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Q(t)}function W(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Z(n.key),n)}}function X(t,r,e){return(r=Z(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function Z(t){var r=function(t,r){if("object"!=Q(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=Q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Q(r)?r:r+""}var tt=function(){return t=function t(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;(function(t,r){if(!(t instanceof r))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=r,this.deviationMultiplier=e},(r=[{key:"update",value:function(t){if(this.prices.push(t),this.prices.length>this.interval){this.prices.shift();var r=K(this.prices),e=function(t,r){var e=r||K(t),n=K(t.map((function(t){return t-e})).map((function(t){return t*t})));return Math.sqrt(n)}(this.prices,r);return this.result={lower:r-e*this.deviationMultiplier,middle:r,upper:r+e*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}}])&&W(t.prototype,r),e&&W(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,e}();function rt(t){return rt="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},rt(t)}function et(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,at(n.key),n)}}function nt(t,r,e){return r=it(r),function(t,r){if(r&&("object"==rt(r)||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,ot()?Reflect.construct(r,e||[],it(t).constructor):r.apply(t,e))}function ot(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(ot=function(){return!!t})()}function it(t){return it=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},it(t)}function ut(t,r){return ut=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},ut(t,r)}function lt(t,r,e){return(r=at(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function at(t){var r=function(t,r){if("object"!=rt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=rt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==rt(r)?r:r+""}var ct=function(t){function r(t){var e;return function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),lt(e=nt(this,r,[t]),"interval",void 0),lt(e,"pricesCounter",0),lt(e,"weightFactor",void 0),e.interval=t,e.weightFactor=2/(e.interval+1),e}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&ut(t,r)}(r,t),e=r,n=[{key:"update",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r?r&&0===this.pricesCounter&&this.pricesCounter++:this.pricesCounter++,r&&void 0!==this.previousResult?this.setResult(t*this.weightFactor+this.previousResult*(1-this.weightFactor),r):this.setResult(t*this.weightFactor+(void 0!==this.result?this.result:t)*(1-this.weightFactor),r)}},{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&&et(e.prototype,n),o&&et(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,o}(M);function st(t){return st="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},st(t)}function ft(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,vt(n.key),n)}}function ht(t,r,e){return(r=vt(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function vt(t){var r=function(t,r){if("object"!=st(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=st(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==st(r)?r:r+""}var pt=function(){return t=function t(r,e,n){(function(t,r){if(!(t instanceof r))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=r,this.long=e,this.signal=n},r=[{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 r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.prices.length&&r?this.prices[this.prices.length-1]=t:this.prices.push(t);var e=this.short.update(t,r),n=this.long.update(t,r);if(this.prices.length>this.long.interval&&this.prices.shift(),this.prices.length===this.long.interval){var o=e-n,i=this.signal.update(o,r);return this.result={histogram:o-i,macd:o,signal:i}}}}],r&&ft(t.prototype,r),e&&ft(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,e}();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 bt(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,jt(n.key),n)}}function dt(t,r,e){return r=gt(r),function(t,r){if(r&&("object"==yt(r)||"function"==typeof r))return r;if(void 0!==r)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(r,e||[],gt(t).constructor):r.apply(t,e))}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,r){return wt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},wt(t,r)}function Ot(t,r,e){return(r=jt(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function jt(t){var r=function(t,r){if("object"!=yt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}var _t=function(t){function r(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Y;return function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),Ot(e=dt(this,r),"interval",void 0),Ot(e,"previousPrices",[]),Ot(e,"avgGain",void 0),Ot(e,"avgLoss",void 0),Ot(e,"maxValue",100),e.interval=t,e.avgGain=new n(e.interval),e.avgLoss=new n(e.interval),e}return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&wt(t,r)}(r,t),e=r,n=[{key:"update",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.previousPrices.length&&r?this.previousPrices[this.previousPrices.length-1]=t:this.previousPrices.push(t),!(this.previousPrices.length<2)){var e=t,n=this.previousPrices[this.previousPrices.length-2];if(e>n?(this.avgLoss.update(0,r),this.avgGain.update(t-n,r)):(this.avgLoss.update(n-e,r),this.avgGain.update(0,r)),this.avgGain.isStable){var o=this.avgLoss.getResult();if(0===o)return this.setResult(100,r);var i=this.avgGain.getResult()/o;return this.setResult(this.maxValue-this.maxValue/(i+1),r)}}}}],n&&bt(e.prototype,n),o&&bt(e,o),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n,o}(_);function St(t){return St="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},St(t)}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)}var Et=function(t,r){if(void 0===t||void 0===r)throw Error("undefined param in getEMA");for(var e=t.length,n=new Array(e).fill(null),o=new ct(r),i=0;i<e;i++){var u=null;if(null!==t[i]){o.update(t[i]);try{u=o.getResult()}catch(t){u=null}}n[i]=u}return n};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)}var kt=function(t,r){if(void 0===t||void 0===r)throw Error("undefined param in getSMA");for(var e=t.length,n=new Array(e).fill(null),o=new N(r),i=0;i<e;i++){var u=null;if(null!==t[i]){o.update(t[i]);try{u=o.getResult()}catch(t){u=null}}n[i]=u}return n};function Rt(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}var Tt=function(t,r){return t>r},Mt=function(t,r){return t<r},xt=function(t){var r=t.fast,e=t.slow,n=r.length;if(n==!e.length)throw Error("fast and slow do not have the same length");for(var o=new Array(n).fill(null),i=0;i<n;i++){var u=r[i],l=e[i],a=void 0;null===u||null===l?a="neutral":u===l?a=Tt(r[i-1],e[i-1])?1:Mt(r[i-1],e[i-1])?0:.5:Tt(u,l)?a=1:Mt(u,l)&&(a=0),o[i]=a}var c=Dt(o);return Ct(c)},Ct=function(t){var r=t.map((function(t){return t.length}));return t.map((function(t,e){var n=r[e];return t.map((function(t,r){var e=n-r;return.5===t&&(e=0),1===t&&(e*=1),0===t&&(e*=-1),e})).reverse()})).flat()},Dt=function(t){return 0===t.length?[]:t.reduce((function(t,r,e,n){if(0===e)t.push([r]);else{var o=n[e-1],i=t[t.length-1];r!==o?t.push([r]):i.push(r)}return t}),[])},It=function(t,r){var e=t.verticalOhlcv;if(!e.hasOwnProperty(r))throw Error("property ".concat(r," not found in verticalOhlcv. Invoked by findDirectionCross."));for(var n=e[r],o=n.length,i=new Array(o).fill(null),u=0;u<o;u++)if(u>0&&null!==n[u]){var l=n[u],a=n[u-1];Tt(l,a)?i[u]=1:Mt(l,a)?i[u]=0:i[u]=.5}return i},Lt=function(t,r){if(!t.verticalOhlcv.hasOwnProperty(r))throw Error("property ".concat(r," not found in verticalOhlcv. Invoked by findDirectionCross."));var e=It(t,r),n=Dt(e);return Ct(n)};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)}var Ft={getSMA:kt,getEMA:Et},Nt=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:14,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"SMA",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:14,o=t.length;if(o<r)return[];for(var i=new Array(o).fill(null),u=new _t(r),l=0;l<o;l++){var a=null;if(null!==t[l]){u.update(t[l]);try{a=u.getResult()}catch(t){a=null}}i[l]=a}var c,s,f,h=(c={},s="rsi_".concat(r),f=i,(s=function(t){var r=function(t,r){if("object"!=Bt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}(s))in c?Object.defineProperty(c,s,{value:f,enumerable:!0,configurable:!0,writable:!0}):c[s]=f,c);if("string"==typeof e&&"number"==typeof n&&Ft.hasOwnProperty("get".concat(e))){var v=Ft["get".concat(e)](i,n);h["rsi_".concat(e,"_").concat(n)]=v,h["rsi_".concat(r,"_x_rsi_").concat(e,"_").concat(n)]=xt({fast:i,slow:v})}return h};function qt(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=function(t,r){if(t){if("string"==typeof t)return Gt(t,r);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Gt(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return u=t.done,t},e:function(t){l=!0,i=t},f:function(){try{u||null==e.return||e.return()}finally{if(l)throw i}}}}function Gt(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}var Ht=function(t){var r=new Date(t),e=r.getDay(),n=r.getDate(),o=new Date(r.getFullYear(),r.getMonth(),1).getDay();return{day_of_the_week:e,day_of_the_month:n,week_of_the_month:Math.ceil((n+o)/7)}};function Vt(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}var Ut=function(t){for(var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,e=arguments.length>2?arguments[2]:void 0,n=function(t,r){return Math.abs(t-r)},o=new Array(e).fill(null),i=new Array(e).fill(null),u=new Array(e).fill(null),l=new Array(e).fill(null),a=new Array(e).fill(null),c=new Array(e).fill(null),s=new N(r),f=new N(parseInt(r/2)),h=0;h<e;h++){var v=t[h],p=v.open,y=v.high,b=v.low,d=v.close,m=void 0!==t[h-1]?$t(t[h],t[h-1]):null,g=null,w=null,O=n(p,d),j=void 0,_=void 0,S=d>p?1:0;1===S?(j=n(y,d),_=n(p,b)):(j=n(y,p),_=n(d,b)),s.update(O),m&&f.update(m);try{g=s.getResult(),w=f.getResult()}catch(t){g=null,w=null}i[h]=S,u[h]=zt(O,g,.25),l[h]=zt(j,g,.25),a[h]=zt(_,g,.25),c[h]=zt(m,w,.25);var P=[i[h],u[h],l[h],a[h]];P.every((function(t){return"number"==typeof t}))&&(o[h]=P.join("_"))}var E,A=new Map,k=0,R=function(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=function(t,r){if(t){if("string"==typeof t)return Vt(t,r);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Vt(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return u=t.done,t},e:function(t){l=!0,i=t},f:function(){try{u||null==e.return||e.return()}finally{if(l)throw i}}}}(o);try{for(R.s();!(E=R.n()).done;){var T=E.value;null===T||A.has(T)||A.set(T,k++)}}catch(t){R.e(t)}finally{R.f()}return{candle_label:o=o.map((function(t){return null!==t&&A.has(t)?A.get(t):null})),candle_direction:i,candle_gap_size:c,candle_body_size:u,candle_top_size:l,candle_bottom_size:a}},zt=function(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.25;return null===t||null===r?null:t>r*(5*e)?1:t<r*(3*e)?0:2*e},$t=function(t,r){if(!r)return null;var e=t.open,n=t.high,o=t.low,i=t.close,u=r.high,l=r.low,a=[n,u],c=[o,l];i>e?(a.push(i),c.push(e)):(a.push(e),c.push(i));var s=Math.max(n,u)-Math.min(o,l)-(Math.abs(u-l)+Math.abs(n-o));return s>0?s:.01},Jt=function(t,r){for(var e=t.length,n=new N(r),o=new Array(e),i=0,u=0,l=0,a=0;a<e;a++)if(n.update(t[a]),n.isStable){var c=n.getResult();o[a]=c,i+=c,u+=c*c,l++}else o[a]=null;var s=i/l,f=u/l-s*s,h=Math.sqrt(f);return o.map((function(t){return null!==t?(t-s)/h:null}))},Yt=function(t,r){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;if(t.length!==r.length)throw new Error("Both arrays must have the same length");for(var n=Jt(t,e),o=Jt(r,e),i=t.length,u=[],l=0,a=0,c=0,s=0,f=0,h=0,v=-1,p=0;p<i;p++){if(null!==n[p]&&null!==o[p]){v=p;break}u.push(0)}if(-1===v)return new Array(i).fill(0);for(var y=v;y<i;y++){var b=n[y],d=o[y];if(null!==b&&null!==d)if(l+=b,a+=d,c+=b*d,s+=b*b,f+=d*d,++h<2)u.push(0);else{var m=h*c-l*a,g=Math.sqrt((h*s-l*l)*(h*f-a*a)),w=0===g?0:m/g;u.push(w)}else l=a=c=s=f=h=0,u.push(0)}return u};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 Qt(t,r,e){return(r=tr(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function Wt(t,r){return function(t){if(Array.isArray(t))return t}(t)||function(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,o,i,u,l=[],a=!0,c=!1;try{if(i=(e=e.call(t)).next,0===r){if(Object(e)!==e)return;a=!1}else for(;!(a=(n=i.call(e)).done)&&(l.push(n.value),l.length!==r);a=!0);}catch(t){c=!0,o=t}finally{try{if(!a&&null!=e.return&&(u=e.return(),Object(u)!==u))return}finally{if(c)throw o}}return l}}(t,r)||function(t,r){if(t){if("string"==typeof t)return Xt(t,r);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Xt(t,r):void 0}}(t,r)||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 Xt(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}function Zt(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,tr(n.key),n)}}function tr(t){var r=function(t,r){if("object"!=Kt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}var rr=function(){return t=function t(r){var e=r.input,n=r.ticker,o=void 0===n?"undefined":n;if(function(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t),!Array.isArray(e))throw Error("input ohlcv must be an array: "+o);if(0===e.length)throw Error("input ohlcv must not be empty: "+o);if(!e[0].hasOwnProperty("close"))throw Error("input ohlcv array objects require at least close property: "+o);return this.len=e.length,this.crossPairsArr=[],this.inputOhlcv=e,this.verticalOhlcv=function(t,r){for(var e=["open","high","low","close","volume"],n=new Set(e),o={},i=0,u=e;i<u.length;i++)o[u[i]]=new Array(r);for(var l,a=[],c=0,s=Object.keys(t[0]);c<s.length;c++){var f=s[c];n.has(f)||(o[f]=new Array(r),a.push(f))}var h,v=0,p=0,y=(h=t)[0].hasOwnProperty("date")&&"string"==typeof h[0].date&&/^\d{4}-\d{2}-\d{2}/.test(h[0].date);y&&(o.session_index=new Array(r),o.session_intraday_index=new Array(r),o.day_of_the_week=new Array(r),o.day_of_the_month=new Array(r),o.week_of_the_month=new Array(r),l=t[0].date.slice(0,10));for(var b=0;b<r;b++){var d=t[b];o.open[b]=d.open,o.high[b]=d.high,o.low[b]=d.low,o.close[b]=d.close,o.volume[b]=d.volume;var m,g=qt(a);try{for(g.s();!(m=g.n()).done;){var w=m.value;o[w][b]=d[w]}}catch(t){g.e(t)}finally{g.f()}if(y){var O=d.date.slice(0,10);O!==l&&(l=O,v++,p=0);var j=Ht(O),_=j.day_of_the_week,S=j.day_of_the_month,P=j.week_of_the_month;o.day_of_the_week[b]=_,o.day_of_the_month[b]=S,o.week_of_the_month[b]=P,o.session_index[b]=v,o.session_intraday_index[b]=p,p++}}return o}(e,this.len),this.indicators={},this.studies={},this.utilities={correlation:Yt},this},r=[{key:"getData",value:function(){this.compute();for(var t=this.verticalOhlcv,r=Object.keys(t),e=t[r[0]].length,n=r.length,o=[],i=0;i<e;i++){for(var u={},l=!1,a=0;a<n;a++){var c=r[a],s=t[c][i];if(null==s){l=!0;break}u[c]=s}l||o.push(u)}return o}},{key:"getLastValues",value:function(){this.compute();for(var t=this.verticalOhlcv,r=this.len,e={},n=0,o=Object.entries(t);n<o.length;n++){var i=Wt(o[n],2),u=i[0],l=i[1][r-1];e[u]=l}return Object.assign(e,this.studies),e}},{key:"compute",value:function(){for(var t=this.indicators,r=this.addColumn.bind(this),e=0,n=Object.entries(t);e<n.length;e++){var o=Wt(n[e],2),i=o[0],u=o[1];this.verticalOhlcv.hasOwnProperty(i)?delete this.indicators[i]:r(i,u)}return this}},{key:"addColumn",value:function(t,r){var e=this.len;if(t=t.toLowerCase(),r.length>e)throw new Error("Invalid column data: The length of the new column exceeds the length of the OHLCV data");if(r.length<e){var n=e-r.length;r=new Array(n).fill(null).concat(r)}this.verticalOhlcv[t]=r}},{key:"crossPairs",value:function(t){this.compute();var r=function(t,r){var e,n=t.verticalOhlcv,o=t.len,i={},u={},l={},a=function(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=function(t,r){if(t){if("string"==typeof t)return Rt(t,r);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Rt(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return u=t.done,t},e:function(t){l=!0,i=t},f:function(){try{u||null==e.return||e.return()}finally{if(l)throw i}}}}(r);try{var c=function(){var t=e.value,r=t.fast,a=t.slow,c=t.count;if(!r||!a)return 1;"number"!=typeof a||i[a]||(i[a]=Array(o).fill(a));var s="".concat(r,"_x_").concat(a),f="".concat(r,"_c_").concat(a),h=function(t){return void 0!==c?t.slice(-c).filter((function(t){return 1===t||-1===t})).length:0};if(n[s]){var v=n[s];u[s]=v,void 0!==c&&(l[f]=h(v))}else if(n[r]&&n[a]){var p=xt({fast:n[r],slow:n[a]});u[s]=p,void 0!==c&&(l[f]=h(p))}else if(n[r]&&i[a]){var y=xt({fast:n[r],slow:i[a]});u[s]=y,void 0!==c&&(l[f]=h(y))}else console.log("Missing ohlcv properties for ".concat(r," or ").concat(a))};for(a.s();!(e=a.n()).done;)c()}catch(t){a.e(t)}finally{a.f()}return{x:u,c:l}}(this,t),e=r.x,n=r.c;return Object.assign(this.indicators,e),Object.assign(this.studies,n),this.compute(),this}},{key:"lag",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.compute();for(var e=this.verticalOhlcv,n=0;n<t.length;n++)for(var o=1;o<=r;o++){var i="".concat(t[n],"_lag_").concat(o),u=e[t[n]].slice(0,-o);Object.assign(this.indicators,Qt({},i,u))}return this.compute(),this}},{key:"relativeVolume",value:function(t){var r=function(t,r){var e=function(t){for(var r=new N(arguments.length>1&&void 0!==arguments[1]?arguments[1]:10),e=new Array(t.length).fill(null),n=new Array(t.length).fill(null),o=0;o<t.length;o++){var i=null;r.update(t[o]);try{i=r.getResult()}catch(t){i=null}e[o]=i,"number"==typeof e[o-1]&&(n[o]=t[o]/e[o-1])}return console.log(n),n}(t.verticalOhlcv.volume,r);return function(t,r,e){return(r=function(t){var r=function(t,r){if("object"!=St(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=St(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==St(r)?r:r+""}(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}({},"relative_volume_".concat(r),e)}(this,t);return Object.assign(this.indicators,r),this}},{key:"ema",value:function(t){var r=function(t,r){var e=t.verticalOhlcv.close,n=Et(e,r);return function(t,r,e){return(r=function(t){var r=function(t,r){if("object"!=Pt(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}({},"ema_".concat(r),n)}(this,t);return Object.assign(this.indicators,r),this}},{key:"sma",value:function(t){var r=function(t,r){var e=t.verticalOhlcv.close,n=kt(e,r);return function(t,r,e){return(r=function(t){var r=function(t,r){if("object"!=At(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.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(r)?r:r+""}(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}({},"sma_".concat(r),n)}(this,t);return Object.assign(this.indicators,r),this}},{key:"macd",value:function(t,r,e){var n=function(t,r,e,n){return function(t){for(var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:26,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:9,o=t.length,i=new Array(o).fill(null),u=new Array(o).fill(null),l=new Array(o).fill(null),a=new pt(new ct(r),new ct(e),new ct(n)),c=0;c<o;c++){var s={};a.update(t[c]);try{s=a.getResult()}catch(t){s={macd:null,signal:null,histogram:null}}i[c]=s.macd,u[c]=s.signal,l[c]=s.histogram}return{macd_diff:i,macd_dea:u,macd_histogram:l,macd_diff_x_macd_dea:xt({fast:i,slow:u})}}(t.verticalOhlcv.close,r,e,n)}(this,t,r,e);return Object.assign(this.indicators,n),this}},{key:"bollingerBands",value:function(t,r){var e=function(t,r,e){return function(t){for(var r,e,n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,u=t.length,l=Array(u).fill(null),a=Array(u).fill(null),c=Array(u).fill(null),s=Array(u).fill(null),f=Array(u).fill(null),h=null,v=null,p=new tt(o,i),y=0;y<u;y++){var b={};p.update(t[y]);var d=!1;try{b=p.getResult()}catch(t){d=!0,b={upper:null,middle:null,lower:null}}if(l[y]=b.upper,a[y]=b.middle,c[y]=b.lower,d)s[y]=null,f[y]=null;else{var m=(r=t[y],e=b.upper,{range:(r-(n=b.lower))/(e-n)*100,height:(e-n)/n*100});h=m.range,v=m.height}s[y]=h,f[y]=v}return{bollinger_bands_upper:l,bollinger_bands_middle:a,bollinger_bands_lower:c,bollinger_bands_range:s,bollinger_bands_height:f}}(t.verticalOhlcv.close,r,e)}(this,t,r);return Object.assign(this.indicators,e),this}},{key:"rsi",value:function(t,r,e){var n=function(t,r,e,n){var o=t.verticalOhlcv.close;return"number"==typeof r&&void 0===n&&(n=r),Nt(o,r,e,n)}(this,t,r,e);return Object.assign(this.indicators,n),this}},{key:"orb",value:function(){var t=function(t,r){for(var e=new Array(r).fill(0),n=new Array(r).fill(0),o=0,i=null,u=0,l=0,a=0;a<r;a++){var c=t[a];if(0===a&&!c.hasOwnProperty("date"))throw Error("input ohlcv array must have a date property available in candle datapoint");var s=c.date.split(" ")[0];s!==i&&(i=s,u=c.high,l=c.low),e[o]=u,n[o]=l,o++}return{orb_high:e,orb_low:n}}(this.inputOhlcv,this.len);return Object.assign(this.indicators,t),this}},{key:"donchianChannels",value:function(t,r){var e=function(t,r,e){var n=t.verticalOhlcv,o=t.len;return function(t,r,e,n,o){for(var i=new Array(o).fill(null),u=new Array(o).fill(null),l=new Array(o).fill(null),a=[],c=[],s=0;s<o;s++){for(;a.length&&a[0]<=s-e;)a.shift();for(;a.length&&t[a[a.length-1]]<=t[s];)a.pop();for(a.push(s);c.length&&c[0]<=s-e;)c.shift();for(;c.length&&r[c[c.length-1]]>=r[s];)c.pop();if(c.push(s),s>=e-1){var f=t[a[0]],h=r[c[0]],v=(f+h)/2,p=s+n;p>=0&&p<o&&(i[p]=f,u[p]=h,l[p]=v)}}return{donchian_channel_upper:i,donchian_channel_lower:u,donchian_channel_basis:l}}(n.high,n.low,r,e,o)}(this,t,r);return Object.assign(this.indicators,e),this}},{key:"candlesStudies",value:function(t){var r=function(t,r){var e=t.inputOhlcv,n=t.len;return Ut(e,r,n)}(this,t);return Object.assign(this.indicators,r),this}},{key:"findDirectionCross",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close","low"];this.compute();for(var r=0;r<t.length;r++){var e=t[r],n=Lt(this,e);Object.assign(this.indicators,Qt({},"".concat(e,"_direction_cross"),n))}return this.compute(),this}},{key:"findLinearDirection",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close","low"];this.compute();for(var r=0;r<t.length;r++){var e=t[r],n=It(this,e);Object.assign(this.indicators,Qt({},"".concat(e,"_linear_direction"),n))}return this.compute(),this}},{key:"change",value:function(t){this.compute();var r=this.verticalOhlcv;if(!r.hasOwnProperty(t)){var e='key "'.concat(t,'" not found in verticalOhlcv. change method');throw Error(e)}return Object.assign(this.indicators,Qt({},"".concat(t,"_change"),function(t){if(!Array.isArray(t))throw Error("data param in arrayGt function must be array");for(var r=Array(t.length).fill(0),e=1;e<r.length;e++)if(null===t[e]||null===t[e-1])r[e];else{var n=t[e],o=t[e-1];r[e]=(n-o)/o*100}return r}(r[t]))),this.compute(),this}},{key:"gt",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"close",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"open";this.compute();var e,n=this.verticalOhlcv;if(!n.hasOwnProperty(t)){var o='key "'.concat(t,'" not found in verticalOhlcv. gt method');throw Error(o)}if("string"==typeof r){if(!n.hasOwnProperty(r)){var i='key "'.concat(r,'" not found in verticalOhlcv. gt method');throw Error(i)}e=n[r]}else"number"==typeof r&&(e=new Array(n[t].length).fill(r));return Object.assign(this.indicators,Qt({},"".concat(t,"_gt_").concat(r),function(t,r){if(!Array.isArray(t)||!Array.isArray(r))throw Error("a and b params in arrayGt function must be arrays");if(t.length!==r.length)throw Error("array a and b must be the same length in arrayGt function");if(t.length<2)throw Error("arrays in arrayGt function must have at least 2 numeric items");for(var e=Array(t.length).fill(.5),n=1;n<e.length;n++)null!==t[n]&&null!==r[n]||(e[n]=null),t[n]>r[n]?e[n]=1:t[n]<r[n]&&(e[n]=0);return e}(n[t],e))),this.compute(),this}}],r&&Zt(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r}()})(),OHLCV_INDICATORS=r})();
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:()=>te});var r=1e6,n="[big.js] ",o=n+"Invalid ",i=o+"decimal places",u=o+"rounding mode",l=n+"Division by zero",a={},c=void 0,s=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;function f(t,e,r,n){var o=t.c;if(r===c&&(r=t.constructor.RM),0!==r&&1!==r&&2!==r&&3!==r)throw Error(u);if(e<1)n=3===r&&(n||!!o[0])||0===e&&(1===r&&o[0]>=5||2===r&&(o[0]>5||5===o[0]&&(n||o[1]!==c))),o.length=1,n?(t.e=t.e-e+1,o[0]=1):o[0]=t.e=0;else if(e<o.length){if(n=1===r&&o[e]>=5||2===r&&(o[e]>5||5===o[e]&&(n||o[e+1]!==c||1&o[e-1]))||3===r&&(n||!!o[0]),o.length=e,n)for(;++o[--e]>9;)if(o[e]=0,0===e){++t.e,o.unshift(1);break}for(e=o.length;!o[--e];)o.pop()}return t}function h(t,e,r){var n=t.e,o=t.c.join(""),i=o.length;if(e)o=o.charAt(0)+(i>1?"."+o.slice(1):"")+(n<0?"e":"e+")+n;else if(n<0){for(;++n;)o="0"+o;o="0."+o}else if(n>0)if(++n>i)for(n-=i;n--;)o+="0";else n<i&&(o=o.slice(0,n)+"."+o.slice(n));else i>1&&(o=o.charAt(0)+"."+o.slice(1));return t.s<0&&r?"-"+o:o}function 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 o=new(t.bind.apply(t,n));return r&&b(o,r.prototype),o}(t,arguments,d(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),b(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 b(t,e){return b=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},b(t,e)}function d(t){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},d(t)}a.abs=function(){var t=new this.constructor(this);return t.s=1,t},a.cmp=function(t){var e,r=this,n=r.c,o=(t=new r.constructor(t)).c,i=r.s,u=t.s,l=r.e,a=t.e;if(!n[0]||!o[0])return n[0]?i:o[0]?-u:0;if(i!=u)return i;if(e=i<0,l!=a)return l>a^e?1:-1;for(u=(l=n.length)<(a=o.length)?l:a,i=-1;++i<u;)if(n[i]!=o[i])return n[i]>o[i]^e?1:-1;return l==a?0:l>a^e?1:-1},a.div=function(t){var e=this,n=e.constructor,o=e.c,u=(t=new n(t)).c,a=e.s==t.s?1:-1,s=n.DP;if(s!==~~s||s<0||s>r)throw Error(i);if(!u[0])throw Error(l);if(!o[0])return t.s=a,t.c=[t.e=0],t;var h,v,p,y,b,d=u.slice(),m=h=u.length,g=o.length,w=o.slice(0,h),O=w.length,_=t,j=_.c=[],S=0,P=s+(_.e=e.e-t.e)+1;for(_.s=a,a=P<0?0:P,d.unshift(0);O++<h;)w.push(0);do{for(p=0;p<10;p++){if(h!=(O=w.length))y=h>O?1:-1;else for(b=-1,y=0;++b<h;)if(u[b]!=w[b]){y=u[b]>w[b]?1:-1;break}if(!(y<0))break;for(v=O==h?u:d;O;){if(w[--O]<v[O]){for(b=O;b&&!w[--b];)w[b]=9;--w[b],w[O]+=10}w[O]-=v[O]}for(;!w[0];)w.shift()}j[S++]=y?p:++p,w[0]&&y?w[O]=o[m]||0:w=[o[m]]}while((m++<g||w[0]!==c)&&a--);return j[0]||1==S||(j.shift(),_.e--,P--),S>P&&f(_,P,n.RM,w[0]!==c),_},a.eq=function(t){return 0===this.cmp(t)},a.gt=function(t){return this.cmp(t)>0},a.gte=function(t){return this.cmp(t)>-1},a.lt=function(t){return this.cmp(t)<0},a.lte=function(t){return this.cmp(t)<1},a.minus=a.sub=function(t){var e,r,n,o,i=this,u=i.constructor,l=i.s,a=(t=new u(t)).s;if(l!=a)return t.s=-a,i.plus(t);var c=i.c.slice(),s=i.e,f=t.c,h=t.e;if(!c[0]||!f[0])return f[0]?t.s=-a:c[0]?t=new u(i):t.s=1,t;if(l=s-h){for((o=l<0)?(l=-l,n=c):(h=s,n=f),n.reverse(),a=l;a--;)n.push(0);n.reverse()}else for(r=((o=c.length<f.length)?c:f).length,l=a=0;a<r;a++)if(c[a]!=f[a]){o=c[a]<f[a];break}if(o&&(n=c,c=f,f=n,t.s=-t.s),(a=(r=f.length)-(e=c.length))>0)for(;a--;)c[e++]=0;for(a=e;r>l;){if(c[--r]<f[r]){for(e=r;e&&!c[--e];)c[e]=9;--c[e],c[r]+=10}c[r]-=f[r]}for(;0===c[--a];)c.pop();for(;0===c[0];)c.shift(),--h;return c[0]||(t.s=1,c=[h=0]),t.c=c,t.e=h,t},a.mod=function(t){var e,r=this,n=r.constructor,o=r.s,i=(t=new n(t)).s;if(!t.c[0])throw Error(l);return r.s=t.s=1,e=1==t.cmp(r),r.s=o,t.s=i,e?new n(r):(o=n.DP,i=n.RM,n.DP=n.RM=0,r=r.div(t),n.DP=o,n.RM=i,this.minus(r.times(t)))},a.neg=function(){var t=new this.constructor(this);return t.s=-t.s,t},a.plus=a.add=function(t){var e,r,n,o=this,i=o.constructor;if(t=new i(t),o.s!=t.s)return t.s=-t.s,o.minus(t);var u=o.e,l=o.c,a=t.e,c=t.c;if(!l[0]||!c[0])return c[0]||(l[0]?t=new i(o):t.s=o.s),t;if(l=l.slice(),e=u-a){for(e>0?(a=u,n=c):(e=-e,n=l),n.reverse();e--;)n.push(0);n.reverse()}for(l.length-c.length<0&&(n=c,c=l,l=n),e=c.length,r=0;e;l[e]%=10)r=(l[--e]=l[e]+c[e]+r)/10|0;for(r&&(l.unshift(r),++a),e=l.length;0===l[--e];)l.pop();return t.c=l,t.e=a,t},a.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(o+"exponent");for(i&&(t=-t);1&t&&(n=n.times(e)),t>>=1;)e=e.times(e);return i?r.div(n):n},a.prec=function(t,e){if(t!==~~t||t<1||t>r)throw Error(o+"precision");return f(new this.constructor(this),t,e)},a.round=function(t,e){if(t===c)t=0;else if(t!==~~t||t<-r||t>r)throw Error(i);return f(new this.constructor(this),t+this.e+1,e)},a.sqrt=function(){var t,e,r,o=this,i=o.constructor,u=o.s,l=o.e,a=new i("0.5");if(!o.c[0])return new i(o);if(u<0)throw Error(n+"No square root");0===(u=Math.sqrt(o+""))||u===1/0?((e=o.c.join("")).length+l&1||(e+="0"),l=((l+1)/2|0)-(l<0||1&l),t=new i(((u=Math.sqrt(e))==1/0?"5e":(u=u.toExponential()).slice(0,u.indexOf("e")+1))+l)):t=new i(u+""),l=t.e+(i.DP+=4);do{r=t,t=a.times(r.plus(o.div(r)))}while(r.c.slice(0,l).join("")!==t.c.slice(0,l).join(""));return f(t,(i.DP-=4)+t.e+1,i.RM)},a.times=a.mul=function(t){var e,r=this,n=r.constructor,o=r.c,i=(t=new n(t)).c,u=o.length,l=i.length,a=r.e,c=t.e;if(t.s=r.s==t.s?1:-1,!o[0]||!i[0])return t.c=[t.e=0],t;for(t.e=a+c,u<l&&(e=o,o=i,i=e,c=u,u=l,l=c),e=new Array(c=u+l);c--;)e[c]=0;for(a=l;a--;){for(l=0,c=u+a;c>a;)l=e[c]+i[a]*o[c-a-1]+l,e[c--]=l%10,l=l/10|0;e[c]=l}for(l?++t.e:e.shift(),a=e.length;!e[--a];)e.pop();return t.c=e,t},a.toExponential=function(t,e){var n=this,o=n.c[0];if(t!==c){if(t!==~~t||t<0||t>r)throw Error(i);for(n=f(new n.constructor(n),++t,e);n.c.length<t;)n.c.push(0)}return h(n,!0,!!o)},a.toFixed=function(t,e){var n=this,o=n.c[0];if(t!==c){if(t!==~~t||t<0||t>r)throw Error(i);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,!!o)},a[Symbol.for("nodejs.util.inspect.custom")]=a.toJSON=a.toString=function(){var t=this,e=t.constructor;return h(t,t.e<=e.NE||t.e>=e.PE,!!t.c[0])},a.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},a.toPrecision=function(t,e){var n=this,i=n.constructor,u=n.c[0];if(t!==c){if(t!==~~t||t<1||t>r)throw Error(o+"precision");for(n=f(new i(n),t,e);n.c.length<t;)n.c.push(0)}return h(n,t<=n.e||n.e<=i.NE||n.e>=i.PE,!!u)},a.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===c?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(o+"value");r=0===r&&1/r<0?"-0":String(r)}!function(t,e){var r,n,i;if(!s.test(e))throw Error(o+"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=a,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=d(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||[],d(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&&b(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,_(n.key),n)}}function O(t,e,r){return(e=_(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _(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 j=function(){return t=function t(){(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,t),O(this,"previousHighest",void 0),O(this,"highest",void 0),O(this,"previousLowest",void 0),O(this,"lowest",void 0),O(this,"previousResult",void 0),O(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 S(t){return S="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},S(t)}function P(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,T(n.key),n)}}function E(t,e,r){return e=k(e),function(t,e){if(e&&("object"==S(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,A()?Reflect.construct(e,r||[],k(t).constructor):e.apply(t,r))}function A(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(A=function(){return!!t})()}function k(t){return k=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},k(t)}function R(t,e){return R=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},R(t,e)}function T(t){var e=function(t,e){if("object"!=S(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==S(e)?e:e+""}var M=function(t){function e(t){var r,n,o,i;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),n=r=E(this,e),i=void 0,(o=T(o="interval"))in n?Object.defineProperty(n,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[o]=i,r.interval=t,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&R(t,e)}(e,t),r=e,(n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"replace",value:function(t){return this.update(t,!0)}}])&&P(r.prototype,n),o&&P(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(j);function x(t){return x="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},x(t)}function C(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,F(n.key),n)}}function D(t,e,r){return e=L(e),function(t,e){if(e&&("object"==x(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,I()?Reflect.construct(e,r||[],L(t).constructor):e.apply(t,r))}function I(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(I=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 F(t){var e=function(t,e){if("object"!=x(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=x(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==x(e)?e:e+""}var N=function(t){function e(){var t,r,n,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var i=arguments.length,u=new Array(i),l=0;l<i;l++)u[l]=arguments[l];return r=t=D(this,e,[].concat(u)),o=[],(n=F(n="prices"))in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&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&&C(r.prototype,n),o&&C(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(M);function H(t){return H="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},H(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,W(n.key),n)}}function G(t,e,r){return e=z(e),function(t,e){if(e&&("object"==H(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||[],z(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 z(t){return z=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},z(t)}function U(t,e){return U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},U(t,e)}function $(t,e,r){return(e=W(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function W(t){var e=function(t,e){if("object"!=H(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==H(e)?e:e+""}var J=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=G(this,e),"interval",void 0),$(r,"indicator",void 0),$(r,"smoothingFactor",void 0),r.interval=t,r.indicator=new N(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&&U(t,e)}(e,t),r=e,n=[{key:"updates",value:function(t){var e=this;return t.forEach((function(t){return e.update(t)})),this.result}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.indicator.update(t);if(e&&void 0!==this.previousResult){var n=(t-this.previousResult)*this.smoothingFactor;return this.setResult(n+this.previousResult,e)}if(!e&&void 0!==this.result){var o=(t-this.result)*this.smoothingFactor;return this.setResult(o+this.result,e)}if(void 0===this.result&&void 0!==r)return this.setResult(r,e)}}],n&&q(r.prototype,n),o&&q(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(j);function K(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=K(this.prices),r=function(t,e){var r=e||K(t),n=K(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,at(n.key),n)}}function nt(t,e,r){return e=it(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,ot()?Reflect.construct(e,r||[],it(t).constructor):e.apply(t,r))}function ot(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(ot=function(){return!!t})()}function it(t){return it=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},it(t)}function ut(t,e){return ut=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},ut(t,e)}function lt(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"!=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 ct=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&&ut(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),o&&rt(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(M);function st(t){return st="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},st(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"!=st(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=st(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==st(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 o=r-n,i=this.signal.update(o,e);return this.result={histogram:o-i,macd:o,signal:i}}}}],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 bt(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,_t(n.key),n)}}function dt(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 Ot(t,e,r){return(e=_t(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _t(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 jt=function(t){function e(t){var r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),Ot(r=dt(this,e),"interval",void 0),Ot(r,"previousPrices",[]),Ot(r,"avgGain",void 0),Ot(r,"avgLoss",void 0),Ot(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 o=this.avgLoss.getResult();if(0===o)return this.setResult(100,e);var i=this.avgGain.getResult()/o;return this.setResult(this.maxValue-this.maxValue/(i+1),e)}}}}],n&&bt(r.prototype,n),o&&bt(r,o),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n,o}(j);function St(t){return St="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},St(t)}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)}var Et=function(t,e){if(void 0===t||void 0===e)throw Error("undefined param in getEMA");for(var r=t.length,n=new Array(r).fill(null),o=new ct(e),i=0;i<r;i++){var u=null;if(null!==t[i]){o.update(t[i]);try{u=o.getResult()}catch(t){u=null}}n[i]=u}return n};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)}var kt=function(t,e){if(void 0===t||void 0===e)throw Error("undefined param in getSMA");for(var r=t.length,n=new Array(r).fill(null),o=new N(e),i=0;i<r;i++){var u=null;if(null!==t[i]){o.update(t[i]);try{u=o.getResult()}catch(t){u=null}}n[i]=u}return n};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 Tt=function(t,e){return t>e},Mt=function(t,e){return t<e},xt=function(t){var e=t.fast,r=t.slow,n=e.length;if(n==!r.length)throw Error("fast and slow do not have the same length");for(var o=new Array(n).fill(null),i=0;i<n;i++){var u=e[i],l=r[i],a=void 0;null===u||null===l?a="neutral":u===l?a=Tt(e[i-1],r[i-1])?1:Mt(e[i-1],r[i-1])?0:.5:Tt(u,l)?a=1:Mt(u,l)&&(a=0),o[i]=a}var c=Dt(o);return Ct(c)},Ct=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()},Dt=function(t){return 0===t.length?[]:t.reduce((function(t,e,r,n){if(0===r)t.push([e]);else{var o=n[r-1],i=t[t.length-1];e!==o?t.push([e]):i.push(e)}return t}),[])},It=function(t,e){var r=t.verticalOhlcv;if(!r.hasOwnProperty(e))throw Error("property ".concat(e," not found in verticalOhlcv. Invoked by findDirectionCross."));for(var n=r[e],o=n.length,i=new Array(o).fill(null),u=0;u<o;u++)if(u>0&&null!==n[u]){var l=n[u],a=n[u-1];Tt(l,a)?i[u]=1:Mt(l,a)?i[u]=0:i[u]=.5}return i},Lt=function(t,e){if(!t.verticalOhlcv.hasOwnProperty(e))throw Error("property ".concat(e," not found in verticalOhlcv. Invoked by findDirectionCross."));var r=It(t,e),n=Dt(r);return Ct(n)};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)}var Ft={getSMA:kt,getEMA:Et},Nt=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:14,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"SMA",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:14,o=t.length;if(o<e)return[];for(var i=new Array(o).fill(null),u=new jt(e),l=0;l<o;l++){var a=null;if(null!==t[l]){u.update(t[l]);try{a=u.getResult()}catch(t){a=null}}i[l]=a}var c,s,f,h=(c={},s="rsi_".concat(e),f=i,(s=function(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+""}(s))in c?Object.defineProperty(c,s,{value:f,enumerable:!0,configurable:!0,writable:!0}):c[s]=f,c);if("string"==typeof r&&"number"==typeof n&&Ft.hasOwnProperty("get".concat(r))){var v=Ft["get".concat(r)](i,n);h["rsi_".concat(r,"_").concat(n)]=v,h["rsi_".concat(e,"_x_rsi_").concat(r,"_").concat(n)]=xt({fast:i,slow:v})}return h};function Ht(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 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))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){l=!0,i=t},f:function(){try{u||null==r.return||r.return()}finally{if(l)throw i}}}}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}var Gt={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(),o=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+o)/7)}},zt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.5;return null===t||null===e||null===r?null:t>=e+2*r?1:t>=e+1.5*r?.75:t>=e+.5*r?.25:t<=e-2*r?-1:t<=e-1.5*r?-.75:t<=e-.5*r?-.25:0},Ut=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1.5;return null===t||null===e||null===r?null:t>e+2*r?1:t>e+1*r?.75:t>e-1*r?.5:t>e-1.5*r?.25:0},$t=function(t,e){for(var r=t.length,n=new N(e),o=new Array(r),i=0,u=0,l=0,a=0;a<r;a++)if(n.update(t[a]),n.isStable){var c=n.getResult();o[a]=c,i+=c,u+=c*c,l++}else o[a]=null;var s=i/l,f=u/l-s*s,h=Math.sqrt(f);return o.map((function(t){return null!==t?(t-s)/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=$t(t,r),o=$t(e,r),i=t.length,u=[],l=0,a=0,c=0,s=0,f=0,h=0,v=-1,p=0;p<i;p++){if(null!==n[p]&&null!==o[p]){v=p;break}u.push(0)}if(-1===v)return new Array(i).fill(0);for(var y=v;y<i;y++){var b=n[y],d=o[y];if(null!==b&&null!==d)if(l+=b,a+=d,c+=b*d,s+=b*b,f+=d*d,++h<2)u.push(0);else{var m=h*c-l*a,g=Math.sqrt((h*s-l*l)*(h*f-a*a)),w=0===g?0:m/g;u.push(w)}else l=a=c=s=f=h=0,u.push(0)}return u};function Jt(t){return Jt="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},Jt(t)}function Kt(t,e,r){return(e=Zt(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}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,o,i,u,l=[],a=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;a=!1}else for(;!(a=(n=i.call(r)).done)&&(l.push(n.value),l.length!==e);a=!0);}catch(t){c=!0,o=t}finally{try{if(!a&&null!=r.return&&(u=r.return(),Object(u)!==u))return}finally{if(c)throw o}}return l}}(t,e)||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,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){(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"!=Jt(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=Jt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==Jt(e)?e:e+""}var te=function(){return t=function t(e){var r=e.input,n=e.ticker,o=void 0===n?null:n,i=e.studyOptions,u=void 0===i?null:i;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!Array.isArray(r))throw Error("input ohlcv must be an array: "+o);if(0===r.length)throw Error("input ohlcv must not be empty: "+o);if(!r[0].hasOwnProperty("close"))throw Error("input ohlcv array objects require at least close property: "+o);return this.len=r.length,this.crossPairsArr=[],this.inputOhlcv=r,this.studyOptions=null===u?Gt:u,this.verticalOhlcv=function(t,e,r){if(Boolean(r))for(var n in r)if(!Gt.hasOwnProperty(n))throw new Error("Key ".concat(n," not found in defaultStudyOptions. Available options: ").concat(Object.keys(Gt).join(", ")));var o=r.midPriceOpenClose,i=r.midPriceHighLow,u=r.sessionIndex,l=r.sessionIntradayIndex,a=r.dayOfTheWeek,c=r.dayOfTheMonth,s=r.weekOfTheMonth,f=["open","high","low","close","volume"];o&&f.push("mid_price_open_close"),i&&f.push("mid_price_high_low");for(var h=new Set(f),v={},p=0,y=f;p<y.length;p++)v[y[p]]=new Array(e);for(var b,d=[],m=0,g=Object.keys(t[0]);m<g.length;m++){var w=g[m];h.has(w)||(v[w]=new Array(e),d.push(w))}var O,_=0,j=0,S=(O=t)[0].hasOwnProperty("date")&&"string"==typeof O[0].date&&/^\d{4}-\d{2}-\d{2}/.test(O[0].date);S&&(u&&(v.session_index=new Array(e)),l&&(v.session_intraday_index=new Array(e)),a&&(v.day_of_the_week=new Array(e)),c&&(v.day_of_the_month=new Array(e)),s&&(v.week_of_the_month=new Array(e)),b=t[0].date.slice(0,10));for(var P=0;P<e;P++){var E=t[P];v.open[P]=E.open,v.high[P]=E.high,v.low[P]=E.low,v.close[P]=E.close,v.volume[P]=E.volume,o&&(v.mid_price_open_close[P]=(E.open+E.close)/2),i&&(v.mid_price_high_low[P]=(E.high+E.low)/2);var A,k=Ht(d);try{for(k.s();!(A=k.n()).done;){var R=A.value;v[R][P]=E[R]}}catch(t){k.e(t)}finally{k.f()}if(S){var T=E.date.slice(0,10);T!==b&&(b=T,_++,j=0);var M=Vt(T),x=M.day_of_the_week,C=M.day_of_the_month,D=M.week_of_the_month;a&&(v.day_of_the_week[P]=x),c&&(v.day_of_the_month[P]=C),s&&(v.week_of_the_month[P]=D),u&&(v.session_index[P]=_),l&&(v.session_intraday_index[P]=j),j++}}return v}(r,this.len,this.studyOptions),this.indicators={},this.studies={},this.utilities={correlation:Wt},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,o=[],i=0;i<r;i++){for(var u={},l=!1,a=0;a<n;a++){var c=e[a],s=t[c][i];if(null==s){l=!0;break}u[c]=s}l||o.push(u)}return o}},{key:"getLastValues",value:function(){this.compute();for(var t=this.verticalOhlcv,e=this.len,r={},n=0,o=Object.entries(t);n<o.length;n++){var i=Yt(o[n],2),u=i[0],l=i[1][e-1];r[u]=l}return Object.assign(r,this.studies),r}},{key:"compute",value:function(){for(var t=this.indicators,e=this.addColumn.bind(this),r=0,n=Object.entries(t);r<n.length;r++){var o=Yt(n[r],2),i=o[0],u=o[1];this.verticalOhlcv.hasOwnProperty(i)?delete this.indicators[i]:e(i,u)}return this}},{key:"addColumn",value:function(t,e){var r=this.len;if(t=t.toLowerCase(),e.length>r)throw new Error("Invalid column data: The length of the new column exceeds the length of the OHLCV data");if(e.length<r){var n=r-e.length;e=new Array(n).fill(null).concat(e)}this.verticalOhlcv[t]=e}},{key:"crossPairs",value:function(t){this.compute();var e=function(t,e){var r,n=t.verticalOhlcv,o=t.len,i={},u={},l={},a=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 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))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){l=!0,i=t},f:function(){try{u||null==r.return||r.return()}finally{if(l)throw i}}}}(e);try{var c=function(){var t=r.value,e=t.fast,a=t.slow,c=t.count;if(!e||!a)return 1;"number"!=typeof a||i[a]||(i[a]=Array(o).fill(a));var s="".concat(e,"_x_").concat(a),f="".concat(e,"_c_").concat(a),h=function(t){return void 0!==c?t.slice(-c).filter((function(t){return 1===t||-1===t})).length:0};if(n[s]){var v=n[s];u[s]=v,void 0!==c&&(l[f]=h(v))}else if(n[e]&&n[a]){var p=xt({fast:n[e],slow:n[a]});u[s]=p,void 0!==c&&(l[f]=h(p))}else if(n[e]&&i[a]){var y=xt({fast:n[e],slow:i[a]});u[s]=y,void 0!==c&&(l[f]=h(y))}else console.log("Missing ohlcv properties for ".concat(e," or ").concat(a))};for(a.s();!(r=a.n()).done;)c()}catch(t){a.e(t)}finally{a.f()}return{x:u,c:l}}(this,t),r=e.x,n=e.c;return Object.assign(this.indicators,r),Object.assign(this.studies,n),this.compute(),this}},{key:"lag",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close"],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.compute();for(var r=this.verticalOhlcv,n=0;n<t.length;n++)for(var o=1;o<=e;o++){var i="".concat(t[n],"_lag_").concat(o),u=r[t[n]].slice(0,-o);Object.assign(this.indicators,Kt({},i,u))}return this.compute(),this}},{key:"relativeVolume",value:function(t){var e=function(t,e){var r=function(t){for(var e=new N(arguments.length>1&&void 0!==arguments[1]?arguments[1]:10),r=new Array(t.length).fill(null),n=new Array(t.length).fill(null),o=0;o<t.length;o++){var i=null;e.update(t[o]);try{i=e.getResult()}catch(t){i=null}r[o]=i,"number"==typeof r[o-1]&&(n[o]=t[o]/r[o-1])}return console.log(n),n}(t.verticalOhlcv.volume,e);return function(t,e,r){return(e=function(t){var e=function(t,e){if("object"!=St(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=St(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==St(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}({},"relative_volume_".concat(e),r)}(this,t);return Object.assign(this.indicators,e),this}},{key:"ema",value:function(t){var e=function(t,e){var r=t.verticalOhlcv.close,n=Et(r,e);return function(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}({},"ema_".concat(e),n)}(this,t);return Object.assign(this.indicators,e),this}},{key:"sma",value:function(t){var e=function(t,e){var r=t.verticalOhlcv.close,n=kt(r,e);return function(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}({},"sma_".concat(e),n)}(this,t);return Object.assign(this.indicators,e),this}},{key:"macd",value:function(t,e,r){var n=function(t,e,r,n){return function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:26,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:9,o=t.length,i=new Array(o).fill(null),u=new Array(o).fill(null),l=new Array(o).fill(null),a=new pt(new ct(e),new ct(r),new ct(n)),c=0;c<o;c++){var s={};a.update(t[c]);try{s=a.getResult()}catch(t){s={macd:null,signal:null,histogram:null}}i[c]=s.macd,u[c]=s.signal,l[c]=s.histogram}return{macd_diff:i,macd_dea:u,macd_histogram:l,macd_diff_x_macd_dea:xt({fast:i,slow:u})}}(t.verticalOhlcv.close,e,r,n)}(this,t,e,r);return Object.assign(this.indicators,n),this}},{key:"bollingerBands",value:function(t,e){var r=function(t,e,r){return function(t){for(var e,r,n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2,u=t.length,l=Array(u).fill(null),a=Array(u).fill(null),c=Array(u).fill(null),s=Array(u).fill(null),f=Array(u).fill(null),h=null,v=null,p=new tt(o,i),y=0;y<u;y++){var b={};p.update(t[y]);var d=!1;try{b=p.getResult()}catch(t){d=!0,b={upper:null,middle:null,lower:null}}if(l[y]=b.upper,a[y]=b.middle,c[y]=b.lower,d)s[y]=null,f[y]=null;else{var m=(e=t[y],r=b.upper,{range:(e-(n=b.lower))/(r-n)*100,height:(r-n)/n*100});h=m.range,v=m.height}s[y]=h,f[y]=v}return{bollinger_bands_upper:l,bollinger_bands_middle:a,bollinger_bands_lower:c,bollinger_bands_range:s,bollinger_bands_height:f}}(t.verticalOhlcv.close,e,r)}(this,t,e);return Object.assign(this.indicators,r),this}},{key:"rsi",value:function(t,e,r){var n=function(t,e,r,n){var o=t.verticalOhlcv.close;return"number"==typeof e&&void 0===n&&(n=e),Nt(o,e,r,n)}(this,t,e,r);return Object.assign(this.indicators,n),this}},{key:"orb",value:function(){var t=function(t,e){for(var r=new Array(e).fill(0),n=new Array(e).fill(0),o=0,i=null,u=0,l=0,a=0;a<e;a++){var c=t[a];if(0===a&&!c.hasOwnProperty("date"))throw Error("input ohlcv array must have a date property available in candle datapoint");var s=c.date.split(" ")[0];s!==i&&(i=s,u=c.high,l=c.low),r[o]=u,n[o]=l,o++}return{orb_high:r,orb_low:n}}(this.inputOhlcv,this.len);return Object.assign(this.indicators,t),this}},{key:"donchianChannels",value:function(t,e){var r=function(t,e,r){var n=t.verticalOhlcv,o=t.len;return function(t,e,r,n,o){for(var i=new Array(o).fill(null),u=new Array(o).fill(null),l=new Array(o).fill(null),a=[],c=[],s=0;s<o;s++){for(;a.length&&a[0]<=s-r;)a.shift();for(;a.length&&t[a[a.length-1]]<=t[s];)a.pop();for(a.push(s);c.length&&c[0]<=s-r;)c.shift();for(;c.length&&e[c[c.length-1]]>=e[s];)c.pop();if(c.push(s),s>=r-1){var f=t[a[0]],h=e[c[0]],v=(f+h)/2,p=s+n;p>=0&&p<o&&(i[p]=f,u[p]=h,l[p]=v)}}return{donchian_channel_upper:i,donchian_channel_lower:u,donchian_channel_basis:l}}(n.high,n.low,e,r,o)}(this,t,e);return Object.assign(this.indicators,r),this}},{key:"candlesStudies",value:function(t){var e=function(t,e){return function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=arguments.length>2?arguments[2]:void 0,n=new Array(r).fill(null),o=new Array(r).fill(null),i=new Array(r).fill(null),u=new Array(r).fill(null),l=new Array(r).fill(null),a=new N(e),c=new N(e),s=new N(e),f=new N(e),h=new N(e),v=0;v<r;v++){var p=t[v],y=t[v-1];if(void 0!==y){var b=p.open,d=p.high,m=p.low,g=p.close,w=null,O=null,_=null,j=null,S=null,P=g-b,E=P>0?d-g:d-b,A=P>0?b-m:g-m,k=p.open-y.close,R=p.high-p.low;a.update(Math.abs(E)),c.update(Math.abs(A)),h.update(Math.abs(R)),s.update(k),f.update(P);try{_=a.getResult(),O=c.getResult(),w=s.getResult(),j=f.getResult(),S=h.getResult()}catch(t){j=null,w=null,_=null,O=null,S=null}n[v]=zt(P,j,.5),u[v]=zt(k,w,.5),o[v]=Ut(E,_,.5),i[v]=Ut(A,O,.5),l[v]=Ut(R,S,.5)}}return{candle_gap_size:u,candle_body_size:n,candle_top_size:o,candle_bottom_size:i,candle_shadow_size:l}}(t.inputOhlcv,e,t.len)}(this,t);return Object.assign(this.indicators,e),this}},{key:"findDirectionCross",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close","low"];this.compute();for(var e=0;e<t.length;e++){var r=t[e],n=Lt(this,r);Object.assign(this.indicators,Kt({},"".concat(r,"_direction_cross"),n))}return this.compute(),this}},{key:"findLinearDirection",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["close","low"];this.compute();for(var e=0;e<t.length;e++){var r=t[e],n=It(this,r);Object.assign(this.indicators,Kt({},"".concat(r,"_linear_direction"),n))}return this.compute(),this}},{key:"change",value:function(t){this.compute();var e=this.verticalOhlcv;if(!e.hasOwnProperty(t)){var r='key "'.concat(t,'" not found in verticalOhlcv. change method');throw Error(r)}return Object.assign(this.indicators,Kt({},"".concat(t,"_change"),function(t){if(!Array.isArray(t))throw Error("data param in arrayGt function must be array");for(var e=Array(t.length).fill(0),r=1;r<e.length;r++)if(null===t[r]||null===t[r-1])e[r];else{var n=t[r],o=t[r-1];e[r]=(n-o)/o*100}return e}(e[t]))),this.compute(),this}},{key:"gt",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"close",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"open";this.compute();var r,n=this.verticalOhlcv;if(!n.hasOwnProperty(t)){var o='key "'.concat(t,'" not found in verticalOhlcv. gt method');throw Error(o)}if("string"==typeof e){if(!n.hasOwnProperty(e)){var i='key "'.concat(e,'" not found in verticalOhlcv. gt method');throw Error(i)}r=n[e]}else"number"==typeof e&&(r=new Array(n[t].length).fill(e));return Object.assign(this.indicators,Kt({},"".concat(t,"_gt_").concat(e),function(t,e){if(!Array.isArray(t)||!Array.isArray(e))throw Error("a and b params in arrayGt function must be arrays");if(t.length!==e.length)throw Error("array a and b must be the same length in arrayGt function");if(t.length<2)throw Error("arrays in arrayGt function must have at least 2 numeric items");for(var r=Array(t.length).fill(.5),n=1;n<r.length;n++)null!==t[n]&&null!==e[n]||(r[n]=null),t[n]>e[n]?r[n]=1:t[n]<e[n]&&(r[n]=0);return r}(n[t],r))),this.compute(),this}}],e&&Xt(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}()})(),OHLCV_INDICATORS=e})();
package/index.js CHANGED
@@ -7,13 +7,13 @@ import { rsi } from './src/oscillators/rsi.js'
7
7
  import {crossPairs, findDirectionCross, findLinearDirection} from './src/studies/findCrosses.js'
8
8
  import { orb } from './src/oscillators/orb.js'
9
9
  import { donchianChannels } from './src/moving-averages/donchianChannel.js'
10
- import { parseOhlcvToVertical } from './src/utilities/parsing-utilities.js'
10
+ import { parseOhlcvToVertical, defaultStudyOptions } from './src/utilities/parsing-utilities.js'
11
11
  import { candlesStudies } from './src/studies/candleStudies.js'
12
12
  import { correlation } from './src/studies/correlation.js'
13
13
  import { arrayChange, arrayGt } from './src/utilities/math-array.js'
14
14
 
15
15
  export default class OHLCV_INDICATORS {
16
- constructor({input, ticker = 'undefined'}) {
16
+ constructor({input, ticker = null, studyOptions = null}) {
17
17
 
18
18
  if(!Array.isArray(input)) throw Error('input ohlcv must be an array: ' + ticker)
19
19
  if(input.length === 0) throw Error('input ohlcv must not be empty: ' + ticker)
@@ -22,7 +22,8 @@ export default class OHLCV_INDICATORS {
22
22
  this.len = input.length
23
23
  this.crossPairsArr = []
24
24
  this.inputOhlcv = input
25
- this.verticalOhlcv = parseOhlcvToVertical(input, this.len)
25
+ this.studyOptions = (studyOptions === null) ? defaultStudyOptions : studyOptions
26
+ this.verticalOhlcv = parseOhlcvToVertical(input, this.len, this.studyOptions)
26
27
  this.indicators = {}
27
28
  this.studies = {}
28
29
  this.utilities = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ohlcv-indicators",
3
- "version": "1.7.1",
3
+ "version": "1.7.4",
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",
@@ -10,186 +10,141 @@ export const candlesStudies = (main, period) => {
10
10
 
11
11
  const getCandlesStudies = (inputOhlcv, period = 20, len) => {
12
12
 
13
- let getSize = (a, b) => Math.abs(a - b)
14
-
15
- //candle_label
16
- let candle_label = new Array(len).fill(null)
17
-
18
13
  //close > open
19
- let candle_direction = new Array(len).fill(null)
20
-
21
- //body
22
- let candle_body_size = new Array(len).fill(null)
23
-
24
- //top
25
- let candle_top_size = new Array(len).fill(null)
26
-
27
- //bottom
28
- let candle_bottom_size = new Array(len).fill(null)
29
-
30
- //gap between the current open and previous close
31
- let candle_gap_size = new Array(len).fill(null)
14
+ let candle_body_size = new Array(len).fill(null) //scaled candle direction close - open
15
+ let candle_top_size = new Array(len).fill(null) //scaled top size (0, 0.5 and 1)
16
+ let candle_bottom_size = new Array(len).fill(null) //scaled bottom size(0, 0.5 and 1)
17
+ let candle_gap_size = new Array(len).fill(null) //scaled gap between the current open and previous close (-1 to 1)
18
+ let candle_shadow_size = new Array(len).fill(null) //scaled shadow size high - slow
32
19
 
33
20
  //instances
34
- let bodyInstance = new FasterSMA(period)
35
21
  let topInstance = new FasterSMA(period)
36
22
  let bottomInstance = new FasterSMA(period)
37
- let gapInstance = new FasterSMA(parseInt(period/2))
23
+ let gapInstance = new FasterSMA(period)
24
+ let bodySizeInstance = new FasterSMA(period)
25
+ let shadowSizeInstance = new FasterSMA(period)
38
26
 
39
27
  for(let x = 0; x < len; x++)
40
28
  {
41
- const {open, high, low, close} = inputOhlcv[x]
42
- const gapSize = (typeof inputOhlcv[x-1] !== 'undefined')
43
- ? calculateHighLowEmptyGaps(inputOhlcv[x], inputOhlcv[x-1])
44
- : null
45
- let bodySizeMean = null
46
- let gapSizeMean = null
47
- let bottomSizeMean = null
48
- let topSizeMean = null
49
- const bodySize = getSize(open, close)
50
- let topSize
51
- let bottomSize
52
- let candleDirection = (close > open) ? 1 : 0 // 1 for bullish and 0 for bearish
29
+ const curr = inputOhlcv[x]
30
+ const prev = inputOhlcv[x-1]
53
31
 
54
- if(candleDirection === 1)
55
- {
56
- topSize = getSize(high, close)
57
- bottomSize = getSize(open, low)
58
- }
59
- else
32
+ if(typeof prev === 'undefined')
60
33
  {
61
- topSize = getSize(high, open)
62
- bottomSize = getSize(close, low)
34
+ continue
63
35
  }
64
36
 
65
- bodyInstance.update(bodySize)
66
- topInstance.update(topSize)
67
- bottomInstance.update(bottomSize)
37
+ const {open, high, low, close} = curr
68
38
 
69
- if(gapSize)
70
- {
71
- gapInstance.update(gapSize)
72
- }
73
-
74
39
 
40
+ //initial means
41
+ let gapMean = null
42
+ let bottomSizeMean = null
43
+ let topSizeMean = null
44
+ let bodySizeMean = null
45
+ let shadowSizeMean = null
46
+
47
+ //directions
48
+ const candleBodySize = close - open // 1 for bullish and 0 for bearish
49
+
50
+ //sizes
51
+ const topSize = (candleBodySize > 0) ? high - close : high - open
52
+ const bottomSize = (candleBodySize > 0) ? open - low : close - low
53
+ const gapSize = curr.open - prev.close
54
+ const shadowSize = curr.high - curr.low
55
+
56
+
57
+ //instances
58
+ topInstance.update(Math.abs(topSize))
59
+ bottomInstance.update(Math.abs(bottomSize))
60
+ shadowSizeInstance.update(Math.abs(shadowSize))
61
+
62
+ gapInstance.update(gapSize)
63
+ bodySizeInstance.update(candleBodySize)
64
+
65
+
75
66
  try
76
67
  {
77
- bodySizeMean = bodyInstance.getResult()
78
68
  topSizeMean = topInstance.getResult()
79
69
  bottomSizeMean = bottomInstance.getResult()
80
- gapSizeMean = gapInstance.getResult()
70
+ gapMean = gapInstance.getResult()
71
+ bodySizeMean = bodySizeInstance.getResult()
72
+ shadowSizeMean = shadowSizeInstance.getResult()
81
73
  }
82
74
  catch(err)
83
75
  {
84
76
  bodySizeMean = null
85
- gapSizeMean = null
77
+ gapMean = null
78
+ topSizeMean = null
79
+ bottomSizeMean = null
80
+ shadowSizeMean = null
86
81
  }
87
82
 
88
- candle_direction[x] = candleDirection
89
-
90
- //body
91
- candle_body_size[x] = classifySize(bodySize, bodySizeMean, 0.25)
92
-
93
- //top
94
- candle_top_size[x] = classifySize(topSize, topSizeMean, 0.1)
95
-
96
- //bottom
97
- candle_bottom_size[x] = classifySize(bottomSize, bottomSizeMean, 0.1)
98
-
99
- //gap
100
- candle_gap_size[x] = classifySize(gapSize, gapSizeMean, 0.25)
101
-
102
-
103
- //label
83
+ //negatives and positives
84
+ candle_body_size[x] = classifyChange(candleBodySize, bodySizeMean, 0.5)
85
+ candle_gap_size[x] = classifyChange(gapSize, gapMean, 0.5)
104
86
 
105
- const labelArr = [candle_direction[x], candle_body_size[x], candle_top_size[x], candle_bottom_size[x]]
106
-
107
- if(labelArr.every(v => typeof v === 'number'))
108
- {
109
- candle_label[x] = labelArr.join('_')
110
- }
111
- }
112
-
113
-
114
- // Create a Map for unique labels with indices
115
- const labelMap = new Map();
116
- let labelIndex = 0;
117
-
118
- // Populate the label map and assign indices only once
119
- for (const label of candle_label) {
120
- if (label !== null && !labelMap.has(label)) {
121
- labelMap.set(label, labelIndex++);
122
- }
87
+ //positives only
88
+ candle_top_size[x] = classifySize(topSize, topSizeMean, 0.5)
89
+ candle_bottom_size[x] = classifySize(bottomSize, bottomSizeMean, 0.5)
90
+ candle_shadow_size[x] = classifySize(shadowSize, shadowSizeMean, 0.5)
123
91
  }
124
92
 
125
- // Transform candle_label in place using the labelMap for quick lookup
126
- candle_label = candle_label.map(v => (v !== null && labelMap.has(v)) ? labelMap.get(v) : null);
127
-
128
93
  return {
129
- candle_label,
130
- candle_direction,
131
94
  candle_gap_size,
132
95
  candle_body_size,
133
96
  candle_top_size,
134
- candle_bottom_size
97
+ candle_bottom_size,
98
+ candle_shadow_size
135
99
  }
136
100
  }
137
101
 
102
+ const classifyChange = (value, mean, standardDeviation = 0.5) => {
103
+ if (value === null || mean === null || standardDeviation === null) return null;
104
+
105
+ const largePositiveThreshold = mean + (2 * standardDeviation); // Large positive
106
+ const mediumPositiveThreshold = mean + (1.5 * standardDeviation); // Medium positive (1.5σ)
107
+ const smallPositiveThreshold = mean + (0.5 * standardDeviation); // Small positive (0.5σ)
108
+ const smallNegativeThreshold = mean - (0.5 * standardDeviation); // Small negative (-0.5σ)
109
+ const mediumNegativeThreshold = mean - (1.5 * standardDeviation); // Medium negative (-1.5σ)
110
+ const largeNegativeThreshold = mean - (2 * standardDeviation); // Large negative
111
+
112
+ if (value >= largePositiveThreshold) {
113
+ return 1; // Large positive
114
+ } else if (value >= mediumPositiveThreshold) {
115
+ return 0.75; // Medium positive
116
+ } else if (value >= smallPositiveThreshold) {
117
+ return 0.25; // Small positive
118
+ } else if (value <= largeNegativeThreshold) {
119
+ return -1; // Large negative
120
+ } else if (value <= mediumNegativeThreshold) {
121
+ return -0.75; // Medium negative
122
+ } else if (value <= smallNegativeThreshold) {
123
+ return -0.25; // Small negative
124
+ } else {
125
+ return 0; // No significant change
126
+ }
127
+ };
138
128
 
139
- const classifySize = (value, mean, threshold = 0.25) => {
140
- if (value === null || mean === null) return null;
141
129
 
142
- const largeThreshold = mean * (1 + threshold * 4); // Sensitively tuned for large
143
- const mediumThreshold = mean * (1 + threshold * 2); // Sensitively tuned for medium
144
- const smallThreshold = mean * (1 - threshold * 2); // Sensitively tuned for small
130
+
131
+ const classifySize = (value, mean, standardDeviation = 1.5) => {
132
+ if (value === null || mean === null || standardDeviation === null) return null;
133
+
134
+ const largeThreshold = mean + (2 * standardDeviation); // Large (2σ above mean)
135
+ const mediumThreshold = mean + (1 * standardDeviation); // Medium (1σ above mean)
136
+ const smallThreshold = mean - (1 * standardDeviation); // Small (1σ below mean)
137
+ const verySmallThreshold = mean - (1.5 * standardDeviation); // Very small (1.5σ below mean)
145
138
 
146
139
  if (value > largeThreshold) {
147
140
  return 1; // Large
148
141
  } else if (value > mediumThreshold) {
149
- return 0.75; // Medium-Large
150
- } else if (value > mean) {
151
- return 0.5; // Medium
142
+ return 0.75; // Medium
152
143
  } else if (value > smallThreshold) {
153
- return 0.25; // Small-Medium
144
+ return 0.5; // Small
145
+ } else if (value > verySmallThreshold) {
146
+ return 0.25; // Very small
154
147
  } else {
155
- return 0; // Small
148
+ return 0; // Insignificant
156
149
  }
157
150
  };
158
-
159
-
160
-
161
- const calculateHighLowEmptyGaps = (current, prev) => {
162
- // This function calculates the empty gaps between the current high/low and the previous high/low.
163
- // Gaps are zones where the highest highs and lowest lows of the previous and current candles do not touch.
164
- // If any of the values overlap, the gapSize is 0.
165
-
166
- if (!prev) return null; // No previous candle, so no gap
167
-
168
- const {open, high, low, close } = current;
169
- const { high: prevHigh, low: prevLow } = prev;
170
-
171
- const highs = [high, prevHigh]
172
- const lows = [low, prevLow]
173
-
174
-
175
- if(close > open)
176
- {
177
- highs.push(close)
178
- lows.push(open)
179
- }
180
- else
181
- {
182
- highs.push(open)
183
- lows.push(close)
184
- }
185
-
186
-
187
- const maxHigh = Math.max(high, prevHigh)
188
- const minLow = Math.min(low, prevLow)
189
- const fullSize = maxHigh - minLow
190
- const prevSize = Math.abs(prevHigh - prevLow)
191
- const currentSize = Math.abs(high-low)
192
- const gapSize = fullSize - (prevSize+currentSize)
193
-
194
- return (gapSize > 0) ? gapSize : 0.01
195
- }
@@ -1,8 +1,52 @@
1
1
  //true if first row date starts with yyyy-mm-dd date
2
2
  const validateFirstDate = arr => arr[0].hasOwnProperty('date') && typeof arr[0].date === 'string' && /^\d{4}-\d{2}-\d{2}/.test(arr[0].date)
3
3
 
4
- export const parseOhlcvToVertical = (input, len) => {
4
+ export const defaultStudyOptions = {
5
+ midPriceOpenClose: false,
6
+ midPriceHighLow: false,
7
+ sessionIndex: false,
8
+ sessionIntradayIndex: false,
9
+ dayOfTheWeek: false,
10
+ dayOfTheMonth: false,
11
+ weekOfTheMonth: false
12
+ }
13
+
14
+ export const parseOhlcvToVertical = (input, len, studyOptions) => {
15
+
16
+
17
+ if(Boolean(studyOptions))
18
+ {
19
+ for(let k in studyOptions)
20
+ {
21
+ if(!defaultStudyOptions.hasOwnProperty(k))
22
+ {
23
+ throw new Error(`Key ${k} not found in defaultStudyOptions. Available options: ${Object.keys(defaultStudyOptions).join(', ')}`)
24
+ }
25
+ }
26
+ }
27
+
28
+ const {
29
+ midPriceOpenClose,
30
+ midPriceHighLow,
31
+ sessionIndex,
32
+ sessionIntradayIndex,
33
+ dayOfTheWeek,
34
+ dayOfTheMonth,
35
+ weekOfTheMonth
36
+ } = studyOptions
37
+
5
38
  const numberColsKeys = ['open', 'high', 'low', 'close', 'volume']
39
+
40
+ if(midPriceOpenClose)
41
+ {
42
+ numberColsKeys.push('mid_price_open_close')
43
+ }
44
+
45
+ if(midPriceHighLow)
46
+ {
47
+ numberColsKeys.push('mid_price_high_low')
48
+ }
49
+
6
50
  const numberColsKeysSet = new Set(numberColsKeys)
7
51
  const verticalOhlcv = {}
8
52
 
@@ -24,17 +68,37 @@ export const parseOhlcvToVertical = (input, len) => {
24
68
 
25
69
 
26
70
  let prevDateStr
27
- let sessionIndex = 0
28
- let sessionIntradayIndex = 0
71
+ let sessionIndexCount = 0
72
+ let sessionIntradayIndexCount = 0
29
73
  const isValidDate = validateFirstDate(input)
30
74
 
31
75
  if(isValidDate)
32
76
  {
33
- verticalOhlcv['session_index'] = new Array(len)
34
- verticalOhlcv['session_intraday_index'] = new Array(len)
35
- verticalOhlcv['day_of_the_week'] = new Array(len)
36
- verticalOhlcv['day_of_the_month'] = new Array(len)
37
- verticalOhlcv['week_of_the_month'] = new Array(len)
77
+ if(sessionIndex)
78
+ {
79
+ verticalOhlcv['session_index'] = new Array(len)
80
+ }
81
+
82
+ if(sessionIntradayIndex)
83
+ {
84
+ verticalOhlcv['session_intraday_index'] = new Array(len)
85
+ }
86
+
87
+ if(dayOfTheWeek)
88
+ {
89
+ verticalOhlcv['day_of_the_week'] = new Array(len)
90
+ }
91
+
92
+ if(dayOfTheMonth)
93
+ {
94
+ verticalOhlcv['day_of_the_month'] = new Array(len)
95
+ }
96
+
97
+ if(weekOfTheMonth)
98
+ {
99
+ verticalOhlcv['week_of_the_month'] = new Array(len)
100
+ }
101
+
38
102
  prevDateStr = input[0].date.slice(0, 10)
39
103
  }
40
104
 
@@ -47,6 +111,16 @@ export const parseOhlcvToVertical = (input, len) => {
47
111
  verticalOhlcv.close[x] = current.close
48
112
  verticalOhlcv.volume[x] = current.volume
49
113
 
114
+ if(midPriceOpenClose)
115
+ {
116
+ verticalOhlcv.mid_price_open_close[x] = (current.open + current.close) / 2
117
+ }
118
+
119
+ if(midPriceHighLow)
120
+ {
121
+ verticalOhlcv.mid_price_high_low[x] = (current.high + current.low) / 2
122
+ }
123
+
50
124
  // Process other keys
51
125
  for (const key of otherKeys) {
52
126
  verticalOhlcv[key][x] = current[key]
@@ -58,8 +132,8 @@ export const parseOhlcvToVertical = (input, len) => {
58
132
 
59
133
  if (thisDateStr !== prevDateStr) {
60
134
  prevDateStr = thisDateStr
61
- sessionIndex++
62
- sessionIntradayIndex = 0
135
+ sessionIndexCount++
136
+ sessionIntradayIndexCount = 0
63
137
  }
64
138
 
65
139
  const {
@@ -68,13 +142,32 @@ export const parseOhlcvToVertical = (input, len) => {
68
142
  week_of_the_month
69
143
  } = getDateInfo(thisDateStr)
70
144
 
71
- verticalOhlcv.day_of_the_week[x] = day_of_the_week
72
- verticalOhlcv.day_of_the_month[x] = day_of_the_month
73
- verticalOhlcv.week_of_the_month[x] = week_of_the_month
74
- verticalOhlcv.session_index[x] = sessionIndex
75
- verticalOhlcv.session_intraday_index[x] = sessionIntradayIndex
145
+ if(dayOfTheWeek)
146
+ {
147
+ verticalOhlcv.day_of_the_week[x] = day_of_the_week
148
+ }
149
+
150
+ if(dayOfTheMonth)
151
+ {
152
+ verticalOhlcv.day_of_the_month[x] = day_of_the_month
153
+ }
154
+
155
+ if(weekOfTheMonth)
156
+ {
157
+ verticalOhlcv.week_of_the_month[x] = week_of_the_month
158
+ }
159
+
160
+ if(sessionIndex)
161
+ {
162
+ verticalOhlcv.session_index[x] = sessionIndexCount
163
+ }
164
+
165
+ if(sessionIntradayIndex)
166
+ {
167
+ verticalOhlcv.session_intraday_index[x] = sessionIntradayIndexCount
168
+ }
76
169
 
77
- sessionIntradayIndex++
170
+ sessionIntradayIndexCount++
78
171
  }
79
172
  }
80
173