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