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