technicalindicators
Version:
Techincal Indicators written in javascript
1 lines • 51.4 kB
JavaScript
(function(e){'use strict';function r(e){return $[e]}function t(e){let t=r('precision');return t?parseFloat(e.toPrecision(t)):e}function o(e){ee.reverseInputs(e);var r=new re(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function l(e){ee.reverseInputs(e);var r=new te(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function a(e){ee.reverseInputs(e);var r=new oe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function n(e){ee.reverseInputs(e);var r=new le(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function s(e){ee.reverseInputs(e);var r=new ae(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function u(e){ee.reverseInputs(e);var r=new ne(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function i(e){ee.reverseInputs(e);var r=new se(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function h(e){ee.reverseInputs(e);var r=new ue(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function p(e){ee.reverseInputs(e);var r=new ie(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function g(e){ee.reverseInputs(e);var r=new he(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function v(e){ee.reverseInputs(e);var r=new de(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function d(e){ee.reverseInputs(e);var r=new me(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function c(e){ee.reverseInputs(e);var r=new xe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function m(e){ee.reverseInputs(e);var r=new we(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function x(e){ee.reverseInputs(e);var r=new fe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function w(e){ee.reverseInputs(e);var r=new Ie(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function f(e){ee.reverseInputs(e);var r=new _e(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function I(e){ee.reverseInputs(e);var r=new Pe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function _(e){ee.reverseInputs(e);var r=new Ce(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function P(e){ee.reverseInputs(e);var r=new be(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function C(e){ee.reverseInputs(e);var r=new qe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function b(e){ee.reverseInputs(e);var r=new Ee(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function q(e){ee.reverseInputs(e);var r=new Se(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function E(e){ee.reverseInputs(e);var r=new Ve(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function S(e){ee.reverseInputs(e);var r=new ke(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function V(e,r,t,o){return e<=t&&r>=t||t<=e&&o>=e}function k(e){ee.reverseInputs(e);var r=new He(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function H(e){ee.reverseInputs(e);var r=new Le(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function z(e){ee.reverseInputs(e);var r=new Be(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function L(e){ee.reverseInputs(e);var r=new Ae(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function B(e){ee.reverseInputs(e);var r=new Te(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function A(e){ee.reverseInputs(e);var r=new Me(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function T(e){ee.reverseInputs(e);var r=new Re(e).result;return e.reversedInput&&(r.open.reverse(),r.high.reverse(),r.low.reverse(),r.close.reverse(),r.volume.reverse(),r.timestamp.reverse()),ee.reverseInputs(e),r}function M(e){ee.reverseInputs(e);var r=new De(e).result;return e.reversedInput&&(r.open.reverse(),r.high.reverse(),r.low.reverse(),r.close.reverse(),r.volume.reverse(),r.timestamp.reverse()),ee.reverseInputs(e),r}function R(e){return new Ye().hasPattern(e)}function D(e){return new Ze().hasPattern(e)}function j(e){return new $e().hasPattern(e)}function O(e){return new Je().hasPattern(e)}function y(e){ee.reverseInputs(e);var r=new qr(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function F(e){ee.reverseInputs(e);var r=new Er(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function W(e){ee.reverseInputs(e);var r=new Sr(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}function K(){return['sma','ema','wma','wema','macd','rsi','bollingerbands','adx','atr','truerange','roc','kst','psar','stochastic','williamsr','adl','obv','trix','cci','awesomeoscillator','forceindex','vwap','volumeprofile','renko','heikinashi','stochasticrsi','mfi','averagegain','averageloss','highest','lowest','sum','FixedSizeLinkedList','sd','bullish','bearish','abandonedbaby','doji','bearishengulfingpattern','bullishengulfingpattern','darkcloudcover','downsidetasukigap','dragonflydoji','gravestonedoji','bullishharami','bearishharami','bullishharamicross','bearishharamicross','eveningdojistar','eveningstar','morningdojistar','morningstar','bullishmarubozu','bearishmarubozu','piercingline','bullishspinningtop','bearishspinningtop','threeblackcrows','threewhitesoldiers','bullishhammerstick','bearishhammerstick','bullishinvertedhammerstick','bearishinvertedhammerstick','hammerpattern','hammerpatternunconfirmed','hangingman','hangingmanunconfirmed','shootingstar','shootingstarunconfirmed','tweezertop','tweezerbottom','ichimokucloud','keltnerchannels','chandelierexit']}var U=Math.min,G=Math.max,N=Math.abs;class X{constructor(e,r,t){this.next=t,t&&(t.prev=this),this.prev=r,r&&(r.next=this),this.data=e}}class Q{constructor(){this._length=0}get head(){return this._head&&this._head.data}get tail(){return this._tail&&this._tail.data}get current(){return this._current&&this._current.data}get length(){return this._length}push(e){this._tail=new X(e,this._tail),0===this._length&&(this._head=this._tail,this._current=this._head,this._next=this._head),this._length++}pop(){var e=this._tail;if(0!==this._length)return(this._length--,0===this._length)?(this._head=this._tail=this._current=this._next=void 0,e.data):(this._tail=e.prev,this._tail.next=void 0,this._current===e&&(this._current=this._tail,this._next=void 0),e.data)}shift(){var e=this._head;if(0!==this._length)return(this._length--,0===this._length)?(this._head=this._tail=this._current=this._next=void 0,e.data):(this._head=this._head.next,this._current===e&&(this._current=this._head,this._next=this._current.next),e.data)}unshift(e){this._head=new X(e,void 0,this._head),0===this._length&&(this._tail=this._head,this._next=this._head),this._length++}unshiftCurrent(){var e=this._current;return e===this._head||2>this._length?e&&e.data:(e===this._tail?(this._tail=e.prev,this._tail.next=void 0,this._current=this._tail):(e.next.prev=e.prev,e.prev.next=e.next,this._current=e.prev),this._next=this._current.next,e.next=this._head,e.prev=void 0,this._head.prev=e,this._head=e,e.data)}removeCurrent(){var e=this._current;if(0!==this._length)return(this._length--,0===this._length)?(this._head=this._tail=this._current=this._next=void 0,e.data):(e===this._tail?(this._tail=e.prev,this._tail.next=void 0,this._current=this._tail):e===this._head?(this._head=e.next,this._head.prev=void 0,this._current=this._head):(e.next.prev=e.prev,e.prev.next=e.next,this._current=e.prev),this._next=this._current.next,e.data)}resetCursor(){return this._current=this._next=this._head,this}next(){var e=this._next;if(void 0!==e)return this._next=e.next,this._current=e,e.data}}class Y extends Q{constructor(e,r,t,o){if(super(),this.size=e,this.maintainHigh=r,this.maintainLow=t,this.maintainSum=o,this.totalPushed=0,this.periodHigh=0,this.periodLow=Infinity,this.periodSum=0,!e||'number'!=typeof e)throw'Size required and should be a number.';this._push=this.push,this.push=function(e){this.add(e),this.totalPushed++}}add(e){this.length===this.size?(this.lastShift=this.shift(),this._push(e),this.maintainHigh&&this.lastShift==this.periodHigh&&this.calculatePeriodHigh(),this.maintainLow&&this.lastShift==this.periodLow&&this.calculatePeriodLow(),this.maintainSum&&(this.periodSum-=this.lastShift)):this._push(e),this.maintainHigh&&this.periodHigh<=e&&(this.periodHigh=e),this.maintainLow&&this.periodLow>=e&&(this.periodLow=e),this.maintainSum&&(this.periodSum+=e)}*iterator(){for(this.resetCursor();this.next();)yield this.current}calculatePeriodHigh(){for(this.resetCursor(),this.next()&&(this.periodHigh=this.current);this.next();)this.periodHigh<=this.current&&(this.periodHigh=this.current)}calculatePeriodLow(){for(this.resetCursor(),this.next()&&(this.periodLow=this.current);this.next();)this.periodLow>=this.current&&(this.periodLow=this.current)}}class Z{constructor(){this.open=[],this.high=[],this.low=[],this.close=[],this.volume=[],this.timestamp=[]}}let $={};class J{}class ee{constructor(e){this.format=e.format||t}static reverseInputs(e){e.reversedInput&&(e.values?e.values.reverse():void 0,e.open?e.open.reverse():void 0,e.high?e.high.reverse():void 0,e.low?e.low.reverse():void 0,e.close?e.close.reverse():void 0,e.volume?e.volume.reverse():void 0,e.timestamp?e.timestamp.reverse():void 0)}getResult(){return this.result}}class re extends ee{constructor(e){super(e),this.period=e.period,this.price=e.values;this.generator=function*(e){var r,t=new Q,o=0,l=1,a=yield;for(t.push(0);;)l<e?(l++,t.push(a),o+=a):(o=o-t.shift()+a,r=o/e,t.push(a)),a=yield r}(this.period),this.generator.next(),this.result=[],this.price.forEach((e)=>{var r=this.generator.next(e);r.value!==void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e).value;if(r!=void 0)return this.format(r)}}re.calculate=o;class te extends ee{constructor(e){super(e);var r,t=e.period,o=e.values;this.result=[],r=new re({period:t,values:[]});this.generator=function*(){for(var e,o=yield;;)void 0!=e&&void 0!==o?(e=(o-e)*(2/(t+1))+e,o=yield e):(o=yield,e=r.nextValue(o),e&&(o=yield e))}(),this.generator.next(),this.generator.next(),o.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e).value;if(r!=void 0)return this.format(r)}}te.calculate=l;class oe extends ee{constructor(e){super(e);var r=e.period,t=e.values;this.result=[],this.generator=function*(){for(let t=new Q;;)if(t.length<r)t.push((yield));else{t.resetCursor();let o=0;for(let e=1;e<=r;e++)o+=t.next()*e/(r*(r+1)/2);var e=yield o;t.shift(),t.push(e)}}(),this.generator.next(),t.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e).value;if(r!=void 0)return this.format(r)}}oe.calculate=a;class le extends ee{constructor(e){super(e);var r,t=e.period,o=e.values;this.result=[],r=new re({period:t,values:[]});this.generator=function*(){for(var e,o=yield;;)void 0!=e&&void 0!==o?(e=(o-e)*(1/t)+e,o=yield e):(o=yield,e=r.nextValue(o),void 0!==e&&(o=yield e))}(),this.generator.next(),this.generator.next(),o.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e).value;if(r!=void 0)return this.format(r)}}le.calculate=n;class ae extends ee{constructor(e){super(e);var r=e.SimpleMAOscillator?re:te,t=e.SimpleMASignal?re:te,o=new r({period:e.fastPeriod,values:[],format:(e)=>e}),l=new r({period:e.slowPeriod,values:[],format:(e)=>e}),a=new t({period:e.signalPeriod,values:[],format:(e)=>e}),n=this.format;this.result=[],this.generator=function*(){for(var r,t,s,u,i,h,p=0;;){if(p<e.slowPeriod){r=yield,i=o.nextValue(r),h=l.nextValue(r),p++;continue}i&&h&&(t=i-h,s=a.nextValue(t)),u=t-s,r=yield{MACD:n(t),signal:s?n(s):void 0,histogram:isNaN(u)?void 0:n(u)},i=o.nextValue(r),h=l.nextValue(r)}}(),this.generator.next(),e.values.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){var r=this.generator.next(e).value;return r}}ae.calculate=s;class ne extends ee{constructor(e){super(e);let r=e.values,t=e.period,o=this.format;this.generator=function*(e){var r,t,l=yield,a=1,n=0,s=l;for(l=yield;;)t=l-s,t=0<t?t:0,0<t&&(n+=t),a<e?a++:void 0==r?r=n/e:r=(r*(e-1)+t)/e,s=l,r=void 0===r?void 0:o(r),l=yield r}(t),this.generator.next(),this.result=[],r.forEach((e)=>{var r=this.generator.next(e);r.value!==void 0&&this.result.push(r.value)})}nextValue(e){return this.generator.next(e).value}}ne.calculate=u;class se extends ee{constructor(e){super(e);let r=e.values,t=e.period,o=this.format;this.generator=function*(e){var r,t,l=yield,a=1,n=0,s=l;for(l=yield;;)t=s-l,t=0<t?t:0,0<t&&(n+=t),a<e?a++:void 0==r?r=n/e:r=(r*(e-1)+t)/e,s=l,r=void 0===r?void 0:o(r),l=yield r}(t),this.generator.next(),this.result=[],r.forEach((e)=>{var r=this.generator.next(e);r.value!==void 0&&this.result.push(r.value)})}nextValue(e){return this.generator.next(e).value}}se.calculate=i;class ue extends ee{constructor(e){super(e);var r=e.period,t=e.values,o=new ne({period:r,values:[]}),l=new se({period:r,values:[]});let a=1;this.generator=function*(){for(var e,r,t,n,s=yield;;)e=o.nextValue(s),r=l.nextValue(s),void 0!==e&&void 0!==r&&(0===r?n=100:0===e?n=0:(t=e/r,t=isNaN(t)?0:t,n=parseFloat((100-100/(1+t)).toFixed(2)))),a++,s=yield n}(r),this.generator.next(),this.result=[],t.forEach((e)=>{var r=this.generator.next(e);r.value!==void 0&&this.result.push(r.value)})}nextValue(e){return this.generator.next(e).value}}ue.calculate=h;class ie extends ee{constructor(e){super(e);var r=e.period,t=e.values,o=new re({period:r,values:[],format:(e)=>e});this.result=[],this.generator=function*(){var e,t,l=new Y(r);e=yield;for(var a;;){if(l.push(e),t=o.nextValue(e),t){let e=0;for(let r of l.iterator())e+=Math.pow(r-t,2);a=Math.sqrt(e/r)}e=yield a}}(),this.generator.next(),t.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return this.format(r.value)}}ie.calculate=p;class he extends ee{constructor(e){super(e);var r,t,o=e.period,l=e.values,a=e.stdDev,n=this.format;this.result=[],r=new re({period:o,values:[],format:(e)=>e}),t=new ie({period:o,values:[],format:(e)=>e}),this.generator=function*(){var e,o,l,s;for(o=yield;;){if(l=r.nextValue(o),s=t.nextValue(o),l){let r=n(l),t=n(l+s*a),u=n(l-s*a),i=n((o-u)/(t-u));e={middle:r,upper:t,lower:u,pb:i}}o=yield e}}(),this.generator.next(),l.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){return this.generator.next(e).value}}he.calculate=g;class pe extends ee{constructor(e){super(e),this.period=e.period,this.price=e.values;this.generator=function*(e){for(var r=new Q,t=0,o=1,l=yield,a=0;;)o<e?(o++,t+=l,a=void 0):o==e?(o++,t+=l,a=t):a=a-a/e+l,l=yield a}(this.period),this.generator.next(),this.result=[],this.price.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e).value;if(r!=void 0)return this.format(r)}}pe.calculate=function(e){ee.reverseInputs(e);var r=new pe(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r};class ge extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=this.format;if(r.length!=t.length)throw'Inputs(low,high) not of equal size';this.result=[],this.generator=function*(){for(var e,r,t=yield;;){if(r){let l=t.high-r.high,a=r.low-t.low;e=o(a>l&&0<a?a:0)}r=t,t=yield e}}(),this.generator.next(),r.forEach((e,o)=>{var l=this.generator.next({high:t[o],low:r[o]});l.value!==void 0&&this.result.push(l.value)})}static calculate(e){ee.reverseInputs(e);var r=new ge(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}nextValue(e){return this.generator.next(e).value}}class ve extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=this.format;if(r.length!=t.length)throw'Inputs(low,high) not of equal size';this.result=[],this.generator=function*(){for(var e,r,t=yield;;){if(r){let l=t.high-r.high,a=r.low-t.low;e=o(l>a&&0<l?l:0)}r=t,t=yield e}}(),this.generator.next(),r.forEach((e,o)=>{var l=this.generator.next({high:t[o],low:r[o]});l.value!==void 0&&this.result.push(l.value)})}static calculate(e){ee.reverseInputs(e);var r=new ve(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r}nextValue(e){return this.generator.next(e).value}}class de extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=e.close,l=this.format;if(r.length!=t.length)throw'Inputs(low,high) not of equal size';this.result=[],this.generator=function*(){for(var e,r,t=yield;;)void 0==e&&(e=t.close,t=yield r),r=G(t.high-t.low,isNaN(N(t.high-e))?0:N(t.high-e),isNaN(N(t.low-e))?0:N(t.low-e)),e=t.close,void 0!=r&&(r=l(r)),t=yield r}(),this.generator.next(),r.forEach((e,l)=>{var a=this.generator.next({high:t[l],low:r[l],close:o[l]});a.value!=void 0&&this.result.push(a.value)})}nextValue(e){return this.generator.next(e).value}}de.calculate=v;class ce extends J{}class me extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=e.close,l=e.period,a=this.format,n=new ve({high:[],low:[]}),s=new ge({high:[],low:[]}),u=new pe({period:l,values:[],format:(e)=>e}),i=new pe({period:l,values:[],format:(e)=>e}),h=new pe({period:l,values:[],format:(e)=>e}),p=new le({period:l,values:[],format:(e)=>e}),g=new de({low:[],high:[],close:[]});if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';this.result=[],ce,this.generator=function*(){var e,r,t,o,l,a,v,d=yield;for(e=0,r=0,t=0;;){let e=g.nextValue(d),r=n.nextValue(d),t=s.nextValue(d);if(e===void 0){d=yield;continue}let c=h.nextValue(e),m=u.nextValue(r),x=i.nextValue(t);if(c!=void 0&&m!=void 0&&x!=void 0){o=100*m/c,l=100*x/c;let e=N(o-l),r=o+l;a=100*(e/r),v=p.nextValue(a)}d=yield{adx:v,pdi:o,mdi:l}}}(),this.generator.next(),r.forEach((e,l)=>{var n=this.generator.next({high:t[l],low:r[l],close:o[l]});n.value!=void 0&&n.value.adx!=void 0&&this.result.push({adx:a(n.value.adx),pdi:a(n.value.pdi),mdi:a(n.value.mdi)})})}nextValue(e){let r=this.generator.next(e).value;if(r!=void 0&&r.adx!=void 0)return{adx:this.format(r.adx),pdi:this.format(r.pdi),mdi:this.format(r.mdi)}}}me.calculate=d;class xe extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=e.close,l=e.period,a=this.format;if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';var n=new de({low:[],high:[],close:[]}),s=new le({period:l,values:[],format:(e)=>e});this.result=[],this.generator=function*(){for(var e,r,t=yield;;)r=n.nextValue({low:t.low,high:t.high,close:t.close}),e=void 0===r?void 0:s.nextValue(r),t=yield e}(),this.generator.next(),r.forEach((e,l)=>{var n=this.generator.next({high:t[l],low:r[l],close:o[l]});n.value!==void 0&&this.result.push(a(n.value))})}nextValue(e){return this.generator.next(e).value}}xe.calculate=c;class we extends ee{constructor(e){super(e);var r=e.period,t=e.values;this.result=[],this.generator=function*(){let e=1;for(var t,o=new Y(r),l=yield;;)o.push(l),e<r?e++:t=100*((l-o.lastShift)/o.lastShift),l=yield t}(),this.generator.next(),t.forEach((e)=>{var r=this.generator.next(e);r.value==void 0||isNaN(r.value)||this.result.push(this.format(r.value))})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0&&!isNaN(r.value))return this.format(r.value)}}we.calculate=m;class fe extends ee{constructor(e){super(e);let r=e.values,t=e.ROCPer1,o=e.ROCPer2,l=e.ROCPer3,a=e.ROCPer4,n=e.SMAROCPer1,s=e.SMAROCPer2,u=e.SMAROCPer3,i=e.SMAROCPer4,h=e.signalPeriod,p=new we({period:t,values:[]}),g=new we({period:o,values:[]}),v=new we({period:l,values:[]}),d=new we({period:a,values:[]}),c=new re({period:n,values:[],format:(e)=>e}),m=new re({period:s,values:[],format:(e)=>e}),x=new re({period:u,values:[],format:(e)=>e}),w=new re({period:i,values:[],format:(e)=>e}),f=new re({period:h,values:[],format:(e)=>e});var I=this.format;this.result=[];let _=G(t+n,o+s,l+u,a+i);this.generator=function*(){for(let e,r,t,o,l,a,n,s=1,u=yield;;){let i=p.nextValue(u),h=g.nextValue(u),P=v.nextValue(u),C=d.nextValue(u);r=i===void 0?void 0:c.nextValue(i),t=h===void 0?void 0:m.nextValue(h),o=P===void 0?void 0:x.nextValue(P),l=C===void 0?void 0:w.nextValue(C),s<_?s++:e=1*r+2*t+3*o+4*l,a=e===void 0?void 0:f.nextValue(e),n=e===void 0?void 0:{kst:I(e),signal:a?I(a):void 0},u=yield n}}(),this.generator.next(),r.forEach((e)=>{let r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){let r=this.generator.next(e);if(r.value!=void 0)return r.value}}fe.calculate=x;class Ie extends ee{constructor(e){super(e);let r=e.high||[],t=e.low||[];this.result=[],this.generator=function*(e,r){for(let t,o,l,a,n=!0,s=e,u=yield;;)t?(l+=s*(o-l),n?(l=U(l,a.low,u.low),t.high>o&&(o=t.high,s=U(s+e,r))):(l=G(l,a.high,u.high),t.low<o&&(o=t.low,s=U(s+e,r))),(n&&t.low<l||!n&&t.high>l)&&(s=e,l=o,n=!n,o=n?t.high:t.low)):(l=u.low,o=u.high),a=u,t&&(u=t),t=yield l}(e.step,e.max),this.generator.next(),t.forEach((e,o)=>{var l=this.generator.next({high:r[o],low:t[o]});l.value!==void 0&&this.result.push(l.value)})}nextValue(e){let r=this.generator.next(e);if(r.value!==void 0)return r.value}}Ie.calculate=w;class _e extends ee{constructor(e){super(e);let r=e.low,t=e.high,o=e.close,l=e.period,a=e.signalPeriod,n=this.format;if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';this.result=[],this.generator=function*(){let e,r,t=1,o=new Y(l,!0,!1),s=new Y(l,!1,!0),u=new re({period:a,values:[],format:(e)=>e});for(var i=yield;;){if(o.push(i.high),s.push(i.low),t<l){t++,i=yield;continue}let a=s.periodLow;e=100*((i.close-a)/(o.periodHigh-a)),e=isNaN(e)?0:e,r=u.nextValue(e),i=yield{k:n(e),d:void 0===r?void 0:n(r)}}}(),this.generator.next(),r.forEach((e,l)=>{var a=this.generator.next({high:t[l],low:r[l],close:o[l]});a.value!==void 0&&this.result.push(a.value)})}nextValue(e){let r=this.generator.next(e);if(r.value!==void 0)return r.value}}_e.calculate=f;class Pe extends ee{constructor(e){super(e);let r=e.low,t=e.high,o=e.close,l=e.period,a=this.format;if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';this.result=[],this.generator=function*(){let e,r,t=1,o=new Y(l,!0,!1),n=new Y(l,!1,!0);var s=yield;for(let u;;){if(o.push(s.high),n.push(s.low),t<l){t++,s=yield;continue}e=n.periodLow,r=o.periodHigh,u=a(-100*((r-s.close)/(r-e))),s=yield u}}(),this.generator.next(),r.forEach((e,l)=>{var a=this.generator.next({high:t[l],low:r[l],close:o[l]});a.value!==void 0&&this.result.push(a.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return this.format(r.value)}}Pe.calculate=I;class Ce extends ee{constructor(e){super(e);var r=e.high,t=e.low,o=e.close,l=e.volume;if(t.length!==r.length||r.length!==o.length||r.length!==l.length)throw'Inputs(low,high, close, volumes) not of equal size';this.result=[],this.generator=function*(){var e,r=0;for(e=yield;;){let t=(e.close-e.low-(e.high-e.close))/(e.high-e.low);t=isNaN(t)?1:t;let o=t*e.volume;r+=o,e=yield Math.round(r)}}(),this.generator.next(),r.forEach((e,r)=>{var a={high:e,low:t[r],close:o[r],volume:l[r]},n=this.generator.next(a);n.value!=void 0&&this.result.push(n.value)})}nextValue(e){return this.generator.next(e).value}}Ce.calculate=_;class be extends ee{constructor(e){super(e);var r=e.close,t=e.volume;this.result=[],this.generator=function*(){var e,r,t=0;for(e=yield,e.close&&'number'==typeof e.close&&(r=e.close,e=yield);;)r<e.close?t+=e.volume:e.close<r&&(t-=e.volume),r=e.close,e=yield t}(),this.generator.next(),r.forEach((e,o)=>{let l={close:r[o],volume:t[o]},a=this.generator.next(l);a.value!=void 0&&this.result.push(a.value)})}nextValue(e){return this.generator.next(e).value}}be.calculate=P;class qe extends ee{constructor(e){super(e);let r=e.values,t=e.period,o=this.format,l=new te({period:t,values:[],format:(e)=>e}),a=new te({period:t,values:[],format:(e)=>e}),n=new te({period:t,values:[],format:(e)=>e}),s=new we({period:1,values:[],format:(e)=>e});this.result=[],this.generator=function*(){for(let e=yield;;){let r=l.nextValue(e),t=r?a.nextValue(r):void 0,u=t?n.nextValue(t):void 0,i=u?s.nextValue(u):void 0;e=yield i?o(i):void 0}}(),this.generator.next(),r.forEach((e)=>{let r=this.generator.next(e);r.value!==void 0&&this.result.push(r.value)})}nextValue(e){let r=this.generator.next(e);if(r.value!==void 0)return r.value}}qe.calculate=C;class Ee extends ee{constructor(e){super(e);var r=e.close,t=e.volume,o=e.period||1;if(t.length!==r.length)throw'Inputs(volume, close) not of equal size';let l=new te({values:[],period:o});this.result=[],this.generator=function*(){var e=yield,r=yield;for(let t;;)t=(r.close-e.close)*r.volume,e=r,r=yield l.nextValue(t)}(),this.generator.next(),t.forEach((e,o)=>{var l=this.generator.next({close:r[o],volume:t[o]});l.value!=void 0&&this.result.push(l.value)})}nextValue(e){let r=this.generator.next(e).value;if(r!=void 0)return r}}Ee.calculate=b;class Se extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=e.close,l=e.period,a=this.format;var n=new Y(l),s=new re({period:l,values:[],format:(e)=>e});if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';this.result=[],this.generator=function*(){for(var e=yield;;){let r=(e.high+e.low+e.close)/3;n.push(r);let t,o=s.nextValue(r),a=null,u=0;if(o!=void 0){for(let e of n.iterator())u+=N(e-o);a=u/l,t=(r-o)/(.015*a)}e=yield t}}(),this.generator.next(),r.forEach((e,l)=>{var a=this.generator.next({high:t[l],low:r[l],close:o[l]});a.value!=void 0&&this.result.push(a.value)})}nextValue(e){let r=this.generator.next(e).value;if(r!=void 0)return r}}Se.calculate=q;class Ve extends ee{constructor(e){super(e);var r=e.high,t=e.low,o=e.fastPeriod,l=e.slowPeriod,a=new re({values:[],period:l}),n=new re({values:[],period:o});this.result=[],this.generator=function*(){var e,r,t,o,l;for(r=yield;;)t=(r.high+r.low)/2,o=a.nextValue(t),l=n.nextValue(t),void 0!==o&&void 0!==l&&(e=l-o),r=yield e}(),this.generator.next(),r.forEach((e,r)=>{var o={high:e,low:t[r]},l=this.generator.next(o);l.value!=void 0&&this.result.push(this.format(l.value))})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return this.format(r.value)}}Ve.calculate=E;class ke extends ee{constructor(e){super(e);var r=e.low,t=e.high,o=e.close,l=e.volume,a=this.format;if(r.length!==t.length||t.length!==o.length)throw'Inputs(low,high, close) not of equal size';this.result=[],this.generator=function*(){var e=yield;for(let r=0,t=0;;){let o=(e.high+e.low+e.close)/3,l=e.volume*o;r+=l,t+=e.volume,e=yield r/t}}(),this.generator.next(),r.forEach((e,a)=>{var n=this.generator.next({high:t[a],low:r[a],close:o[a],volume:l[a]});n.value!=void 0&&this.result.push(n.value)})}nextValue(e){let r=this.generator.next(e).value;if(r!=void 0)return r}}ke.calculate=S;class He extends ee{constructor(e){super(e);var r=e.high,t=e.low,o=e.close,l=e.open,a=e.volume,n=e.noOfBars;if(t.length!==r.length||r.length!==o.length||r.length!==a.length)throw'Inputs(low,high, close, volumes) not of equal size';this.result=[];var s=G(...r,...t,...o,...l),u=U(...r,...t,...o,...l),i=u;for(let h=0;h<n;h++){let e=i,h=e+(s-u)/n;i=h;let p=0,g=0,v=0;for(let n=0;n<r.length;n++){let s=t[n],u=r[n],i=l[n],d=o[n],c=a[n];V(e,h,s,u)&&(v+=c,i>d?g+=c:p+=c)}this.result.push({rangeStart:e,rangeEnd:h,bullishVolume:p,bearishVolume:g,totalVolume:v})}}nextValue(){throw'Next value not supported for volume profile'}}He.calculate=k;class ze extends ee{constructor(e){super(e),this.result=[],this.generator=function*(){for(let e=yield;;)e=yield(e.high+e.low+e.close)/3}(),this.generator.next(),e.low.forEach((r,t)=>{var o=this.generator.next({high:e.high[t],low:e.low[t],close:e.close[t]});this.result.push(o.value)})}nextValue(e){var r=this.generator.next(e).value;return r}}ze.calculate=function(e){ee.reverseInputs(e);var r=new ze(e).result;return e.reversedInput&&r.reverse(),ee.reverseInputs(e),r};class Le extends ee{constructor(e){super(e);var r=e.high,t=e.low,o=e.close,l=e.volume,a=e.period,n=new ze({low:[],high:[],close:[]}),s=new Y(a,!1,!1,!0),u=new Y(a,!1,!1,!0);if(t.length!==r.length||r.length!==o.length||r.length!==l.length)throw'Inputs(low,high, close, volumes) not of equal size';this.result=[],this.generator=function*(){var e,r,t,o,l,i,h=0;let p=null,g=null;for(r=yield,t=r.close,r=yield;;){var{high:v,low:d,close:c,volume:m}=r,x=0,w=0;p=n.nextValue({high:v,low:d,close:c}),h=p*m,null!=p&&null!=g&&(p>g?x=h:w=h,s.push(x),u.push(w),o=s.periodSum,i=u.periodSum,s.totalPushed>=a&&s.totalPushed>=a&&(l=o/i,e=100-100/(1+l))),g=p,r=yield e}}(),this.generator.next(),r.forEach((e,r)=>{var a={high:e,low:t[r],close:o[r],volume:l[r]},n=this.generator.next(a);n.value!=void 0&&this.result.push(parseFloat(n.value.toFixed(2)))})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return parseFloat(r.value.toFixed(2))}}Le.calculate=H;class Be extends ee{constructor(e){super(e);let r=e.values,t=e.rsiPeriod,o=e.stochasticPeriod,l=e.kPeriod,a=e.dPeriod,n=this.format;this.result=[],this.generator=function*(){let e,r,n,s,u=new ue({period:t,values:[]}),i=new _e({period:o,high:[],low:[],close:[],signalPeriod:l}),h=new re({period:a,values:[],format:(e)=>e});for(var p=yield;;){if(e=u.nextValue(p),void 0!==e){var g={high:e,low:e,close:e};r=i.nextValue(g),void 0!==r&&void 0!==r.d&&(n=h.nextValue(r.d),void 0!==n&&(s={stochRSI:r.k,k:r.d,d:n}))}p=yield s}}(),this.generator.next(),r.forEach((e)=>{var r=this.generator.next(e);r.value!==void 0&&this.result.push(r.value)})}nextValue(e){let r=this.generator.next(e);if(r.value!==void 0)return r.value}}Be.calculate=z;class Ae extends ee{constructor(e){super(e);var r=e.values,t=e.period;this.result=[];var o=new Y(t,!0,!1,!1);this.generator=function*(){var e,r;for(e=yield;;)o.push(e),o.totalPushed>=t&&(r=o.periodHigh),e=yield r}(),this.generator.next(),r.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return r.value}}Ae.calculate=L;class Te extends ee{constructor(e){super(e);var r=e.values,t=e.period;this.result=[];var o=new Y(t,!1,!0,!1);this.generator=function*(){var e,r;for(e=yield;;)o.push(e),o.totalPushed>=t&&(r=o.periodLow),e=yield r}(),this.generator.next(),r.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return r.value}}Te.calculate=B;class Me extends ee{constructor(e){super(e);var r=e.values,t=e.period;this.result=[];var o=new Y(t,!1,!1,!0);this.generator=function*(){var e,r;for(e=yield;;)o.push(e),o.totalPushed>=t&&(r=o.periodSum),e=yield r}(),this.generator.next(),r.forEach((e)=>{var r=this.generator.next(e);r.value!=void 0&&this.result.push(r.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return r.value}}Me.calculate=A;class Re extends ee{constructor(e){super(e);this.format;let r=e.useATR,t=e.brickSize||0;if(r){let r=c(Object.assign({},e));t=r[r.length-1]}if(this.result=new Z,0===t)return void console.error('Not enough data to calculate brickSize for renko when using ATR');let o=0,l=0,a=Infinity,n=0,s=0,u=0;this.generator=function*(){for(let e=yield;;){if(0==o){o=e.close,l=e.high,a=e.low,n=e.close,s=e.volume,u=e.timestamp,e=yield;continue}let r=N(e.close-n),i=N(e.close-o);if(r>=t&&i>=t){let u=r>i?o:n,h={open:u,high:l>e.high?l:e.high,low:a<e.Low?a:e.low,close:u>e.close?u-t:u+t,volume:s+e.volume,timestamp:e.timestamp};o=h.open,l=h.close,a=h.close,n=h.close,s=0,e=yield h}else l=l>e.high?l:e.high,a=a<e.Low?a:e.low,s+=e.volume,u=e.timestamp,e=yield}}(),this.generator.next(),e.low.forEach((r,t)=>{var o=this.generator.next({open:e.open[t],high:e.high[t],low:e.low[t],close:e.close[t],volume:e.volume[t],timestamp:e.timestamp[t]});o.value&&(this.result.open.push(o.value.open),this.result.high.push(o.value.high),this.result.low.push(o.value.low),this.result.close.push(o.value.close),this.result.volume.push(o.value.volume),this.result.timestamp.push(o.value.timestamp))})}nextValue(){return console.error('Cannot calculate next value on Renko, Every value has to be recomputed for every change, use calcualte method'),null}}Re.calculate=T;class De extends ee{constructor(e){super(e);this.format;this.result=new Z;let r=null,t=0,o=Infinity,l=0,a=0,n=0;this.generator=function*(){for(let e=yield,s=null;;){if(null==r)r=(e.close+e.open)/2,t=e.high,o=e.low,l=(e.close+e.open+e.high+e.low)/4,a=e.volume||0,n=e.timestamp||0,s={open:r,high:t,low:o,close:l,volume:e.volume||0,timestamp:e.timestamp||0};else{let a=(e.close+e.open+e.high+e.low)/4,n=(r+l)/2,u=G(n,a,e.high),i=U(e.low,n,a);s={close:a,open:n,high:u,low:i,volume:e.volume||0,timestamp:e.timestamp||0},l=a,r=n,t=u,o=i}e=yield s}}(),this.generator.next(),e.low.forEach((r,t)=>{var o=this.generator.next({open:e.open[t],high:e.high[t],low:e.low[t],close:e.close[t],volume:e.volume?e.volume[t]:e.volume,timestamp:e.timestamp?e.timestamp[t]:e.timestamp});o.value&&(this.result.open.push(o.value.open),this.result.high.push(o.value.high),this.result.low.push(o.value.low),this.result.close.push(o.value.close),this.result.volume.push(o.value.volume),this.result.timestamp.push(o.value.timestamp))})}nextValue(e){var r=this.generator.next(e).value;return r}}De.calculate=M;class je{constructor(){}approximateEqual(e,r){let t=1*parseFloat(N(e-r).toPrecision(4)),o=1*parseFloat((1e-3*e).toPrecision(4));return t<=o}logic(){throw'this has to be implemented'}getAllPatternIndex(e){if(e.close.length<this.requiredCount)return console.warn('Data count less than data required for the strategy ',this.name),[];e.reversedInput&&(e.open.reverse(),e.high.reverse(),e.low.reverse(),e.close.reverse());let r=this.logic;return this._generateDataForCandleStick(e).map((e,t)=>r.call(this,e)?t:void 0).filter((e)=>e)}hasPattern(e){if(e.close.length<this.requiredCount)return console.warn('Data count less than data required for the strategy ',this.name),!1;e.reversedInput&&(e.open.reverse(),e.high.reverse(),e.low.reverse(),e.close.reverse());let r=this.logic;return r.call(this,this._getLastDataForCandleStick(e))}_getLastDataForCandleStick(e){let r=this.requiredCount;if(e.close.length===r)return e;else{let t={open:[],high:[],low:[],close:[]},o=0,l=e.close.length-r;for(;o<r;)t.open.push(e.open[l+o]),t.high.push(e.high[l+o]),t.low.push(e.low[l+o]),t.close.push(e.close[l+o]),o++;return t}}_generateDataForCandleStick(e){let r=this.requiredCount,t=e.close.map(function(t,o){let l=0,a={open:[],high:[],low:[],close:[]};for(;l<r;)a.open.push(e.open[o+l]),a.high.push(e.high[o+l]),a.low.push(e.low[o+l]),a.close.push(e.close[o+l]),l++;return a}).filter((t,o)=>o<=e.close.length-r);return t}}class Oe extends je{constructor(){super(),this.name='MorningStar',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2];return t<r&&l>u&&l>s&&s<l&&u<l&&i>s&&n<i&&i<h&&h>(r+t)/2}}class ye extends je{constructor(){super(),this.name='BullishEngulfingPattern',this.requiredCount=2}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return t<r&&r>a&&t>a&&r<n}}class Fe extends je{constructor(){super(),this.requiredCount=2,this.name='BullishHarami'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return r>a&&t<a&&t<n&&r>u&&o>s}}class We extends je{constructor(){super(),this.requiredCount=2,this.name='BullishHaramiCross'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=this.approximateEqual(a,n);return r>a&&t<a&&t<n&&r>u&&o>s&&i}}class Ke extends je{constructor(){super(),this.name='Doji',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=this.approximateEqual(r,t),n=a&&this.approximateEqual(r,o),s=a&&this.approximateEqual(t,l);return a&&n==s}}class Ue extends je{constructor(){super(),this.name='MorningDojiStar',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2],v=new Ke().hasPattern({open:[a],close:[n],high:[s],low:[u]});return t<r&&v&&i<h&&s<l&&u<l&&i>s&&n<i&&h>(r+t)/2}}class Ge extends je{constructor(){super(),this.requiredCount=3,this.name='DownsideTasukiGap'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2];return t<r&&n<a&&h>i&&s<l&&a>i&&n<i&&h>a&&h<t}}class Ne extends je{constructor(){super(),this.name='BullishMarubozu',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=this.approximateEqual(t,o)&&this.approximateEqual(l,r)&&r<t&&r<o;return a}}class Xe extends je{constructor(){super(),this.requiredCount=2,this.name='PiercingLine'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return u<l&&t<r&&l>a&&n>(r+t)/2&&n>a}}class Qe extends je{constructor(){super(),this.name='ThreeWhiteSoldiers',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2];return s>o&&p>s&&r<t&&a<n&&i<h&&t>a&&a<o&&s>i&&i<n}}class Ye extends je{constructor(){super(),this.name='BullishHammerStick',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=t>r;return a=a&&this.approximateEqual(t,o),a=a&&t-r<=2*(r-l),a}}class Ze extends je{constructor(){super(),this.name='BullishInvertedHammerStick',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=t>r;return a=a&&this.approximateEqual(r,l),a=a&&t-r<=2*(o-t),a}}class $e extends je{constructor(){super(),this.name='BearishHammerStick',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=r>t;return a=a&&this.approximateEqual(r,o),a=a&&r-t<=2*(t-l),a}}class Je extends je{constructor(){super(),this.name='BearishInvertedHammerStick',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=r>t;return a=a&&this.approximateEqual(t,l),a=a&&r-t<=2*(o-r),a}}class er extends je{constructor(){super(),this.name='HammerPattern',this.requiredCount=5}logic(e){let r=this.downwardTrend(e);return r=r&&this.includesHammer(e),r=r&&this.hasConfirmation(e),r}downwardTrend(e,r=!0){let t=r?3:4,o=u({values:e.close.slice(0,t),period:t-1}),l=i({values:e.close.slice(0,t),period:t-1});return l>o}includesHammer(e,r=!0){let t=r?3:4,o=r?4:void 0,l={open:e.open.slice(t,o),close:e.close.slice(t,o),low:e.low.slice(t,o),high:e.high.slice(t,o)},a=j(l);return a=a||O(l),a=a||R(l),a=a||D(l),a}hasConfirmation(e){let r={open:e.open[3],close:e.close[3],low:e.low[3],high:e.high[3]},t={open:e.open[4],close:e.close[4],low:e.low[4],high:e.high[4]},o=t.open<t.close;return o&&r.close<t.close}}class rr extends er{constructor(){super(),this.name='HammerPatternUnconfirmed'}logic(e){let r=this.downwardTrend(e,!1);return r=r&&this.includesHammer(e,!1),r}}class tr extends je{constructor(){super(),this.name='TweezerBottom',this.requiredCount=5}logic(e){return this.downwardTrend(e)&&e.low[3]==e.low[4]}downwardTrend(e){let r=u({values:e.close.slice(0,3),period:2}),t=i({values:e.close.slice(0,3),period:2});return t>r}}let or=[new ye,new Ge,new Fe,new We,new Ue,new Oe,new Ne,new Xe,new Qe,new Ye,new Ze,new er,new rr,new tr];class lr extends je{constructor(){super(),this.name='Bullish Candlesticks'}hasPattern(e){return or.reduce(function(r,t){let o=t.hasPattern(e);return r||o},!1)}}class ar extends je{constructor(){super(),this.name='BearishEngulfingPattern',this.requiredCount=2}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return t>r&&r<a&&t<a&&r>n}}class nr extends je{constructor(){super(),this.requiredCount=2,this.name='BearishHarami'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return r<a&&t>a&&t>n&&r<u&&o>s}}class sr extends je{constructor(){super(),this.requiredCount=2,this.name='BearishHaramiCross'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=this.approximateEqual(a,n);return r<a&&t>a&&t>n&&r<u&&o>s&&i}}class ur extends je{constructor(){super(),this.name='EveningDojiStar',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2],v=new Ke().hasPattern({open:[a],close:[n],high:[s],low:[u]});return t>r&&v&&s>o&&u>o&&i<u&&n>i&&i>h&&h<(r+t)/2}}class ir extends je{constructor(){super(),this.name='EveningStar',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2];return t>r&&o<u&&o<s&&s>o&&u>o&&i<u&&n>i&&i>h&&h<(r+t)/2}}class hr extends je{constructor(){super(),this.name='BearishMarubozu',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=this.approximateEqual(r,o)&&this.approximateEqual(l,t)&&r>t&&r>l;return a}}class pr extends je{constructor(){super(),this.name='ThreeBlackCrows',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2];return l>u&&u>g&&r>t&&a>n&&i>h&&r>a&&a>t&&a>i&&i>n}}class gr extends je{constructor(){super(),this.name='HangingMan',this.requiredCount=5}logic(e){let r=this.upwardTrend(e);return r=r&&this.includesHammer(e),r=r&&this.hasConfirmation(e),r}upwardTrend(e,r=!0){let t=r?3:4,o=u({values:e.close.slice(0,t),period:t-1}),l=i({values:e.close.slice(0,t),period:t-1});return o>l}includesHammer(e,r=!0){let t=r?3:4,o=r?4:void 0,l={open:e.open.slice(t,o),close:e.close.slice(t,o),low:e.low.slice(t,o),high:e.high.slice(t,o)},a=j(l);return a=a||R(l),a}hasConfirmation(e){let r={open:e.open[3],close:e.close[3],low:e.low[3],high:e.high[3]},t={open:e.open[4],close:e.close[4],low:e.low[4],high:e.high[4]},o=t.open>t.close;return o&&r.close>t.close}}class vr extends gr{constructor(){super(),this.name='HangingManUnconfirmed'}logic(e){let r=this.upwardTrend(e,!1);return r=r&&this.includesHammer(e,!1),r}}class dr extends je{constructor(){super(),this.name='ShootingStar',this.requiredCount=5}logic(e){let r=this.upwardTrend(e);return r=r&&this.includesHammer(e),r=r&&this.hasConfirmation(e),r}upwardTrend(e,r=!0){let t=r?3:4,o=u({values:e.close.slice(0,t),period:t-1}),l=i({values:e.close.slice(0,t),period:t-1});return o>l}includesHammer(e,r=!0){let t=r?3:4,o=r?4:void 0,l={open:e.open.slice(t,o),close:e.close.slice(t,o),low:e.low.slice(t,o),high:e.high.slice(t,o)},a=O(l);return a=a||D(l),a}hasConfirmation(e){let r={open:e.open[3],close:e.close[3],low:e.low[3],high:e.high[3]},t={open:e.open[4],close:e.close[4],low:e.low[4],high:e.high[4]},o=t.open>t.close;return o&&r.close>t.close}}class cr extends dr{constructor(){super(),this.name='ShootingStarUnconfirmed'}logic(e){let r=this.upwardTrend(e,!1);return r=r&&this.includesHammer(e,!1),r}}class mr extends je{constructor(){super(),this.name='TweezerTop',this.requiredCount=5}logic(e){return this.upwardTrend(e)&&e.high[3]==e.high[4]}upwardTrend(e){let r=u({values:e.close.slice(0,3),period:2}),t=i({values:e.close.slice(0,3),period:2});return r>t}}let xr=[new ar,new nr,new sr,new ur,new ir,new hr,new pr,new $e,new Je,new gr,new vr,new dr,new cr,new mr];class wr extends je{constructor(){super(),this.name='Bearish Candlesticks'}hasPattern(e){return xr.reduce(function(r,t){return r||t.hasPattern(e)},!1)}}class fr extends je{constructor(){super(),this.name='AbandonedBaby',this.requiredCount=3}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1],i=e.open[2],h=e.close[2],p=e.high[2],g=e.low[2],v=new Ke().hasPattern({open:[a],close:[n],high:[s],low:[u]});return t<r&&v&&s<l&&g>s&&h>i&&p<r}}class Ir extends je{constructor(){super(),this.name='DarkCloudCover',this.requiredCount=2}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=e.open[1],n=e.close[1],s=e.high[1],u=e.low[1];return t>r&&n<a&&a>o&&n<(t+r)/2&&n>r}}class _r extends je{constructor(){super(),this.requiredCount=1,this.name='DragonFlyDoji'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=this.approximateEqual(r,t),n=a&&this.approximateEqual(r,o),s=a&&this.approximateEqual(t,l);return a&&n&&!s}}class Pr extends je{constructor(){super(),this.requiredCount=1,this.name='GraveStoneDoji'}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=this.approximateEqual(r,t),n=a&&this.approximateEqual(r,o),s=a&&this.approximateEqual(t,l);return a&&s&&!n}}class Cr extends je{constructor(){super(),this.name='BullishSpinningTop',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=N(t-r),n=N(o-t),s=N(r-l);return a<n&&a<s}}class br extends je{constructor(){super(),this.name='BearishSpinningTop',this.requiredCount=1}logic(e){let r=e.open[0],t=e.close[0],o=e.high[0],l=e.low[0],a=N(t-r),n=N(o-r),s=N(o-l);return a<n&&a<s}}class qr extends ee{constructor(e){super(e),this.result=[];var r=Object.assign({},{conversionPeriod:9,basePeriod:26,spanPeriod:52,displacement:26},e),t=new Y(2*r.conversionPeriod,!0,!0,!1),o=new Y(2*r.basePeriod,!0,!0,!1),l=new Y(2*r.spanPeriod,!0,!0,!1);this.generator=function*(){let e,a,n=G(r.conversionPeriod,r.basePeriod,r.spanPeriod,r.displacement),s=1;for(a=yield;;){if(t.push(a.high),t.push(a.low),o.push(a.high),o.push(a.low),l.push(a.high),l.push(a.low),s<n)s++;else{let r=(t.periodHigh+t.periodLow)/2,a=(o.periodHigh+o.periodLow)/2,n=(l.periodHigh+l.periodLow)/2;e={conversion:r,base:a,spanA:(r+a)/2,spanB:n}}a=yield e}}(),this.generator.next(),e.low.forEach((r,t)=>{var o=this.generator.next({high:e.high[t],low:e.low[t]});o.value&&this.result.push(o.value)})}nextValue(e){return this.generator.next(e).value}}qr.calculate=y;class Er extends ee{constructor(e){super(e);var r,t=e.useSMA?re:te,o=new t({period:e.maPeriod,values:[],format:(e)=>e}),l=new xe({period:e.atrPeriod,high:[],low:[],close:[],format:(e)=>e});this.result=[],this.generator=function*(){var t;for(r=yield;;){var{close:a}=r,n=o.nextValue(a),s=l.nextValue(r);n!=void 0&&s!=void 0&&(t={middle:n,upper:n+e.multiplier*s,lower:n-e.multiplier*s}),r=yield t}}(),this.generator.next();var a=e.high;a.forEach((r,t)=>{var o={high:r,low:e.low[t],close:e.close[t]},l=this.generator.next(o);l.value!=void 0&&this.result.push(l.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return r.value}}Er.calculate=F;class Sr extends ee{constructor(e){super(e);var r=e.high,t=e.low,o=e.close;this.result=[];var l=new xe({period:e.period,high:[],low:[],close:[],format:(e)=>e}),a=new Y(2*e.period,!0,!0,!1);this.generator=function*(){for(var r,t,o=yield;;){var{high:n,low:s}=o;a.push(n),a.push(s),t=l.nextValue(o),a.totalPushed>=2*e.period&&t!=void 0&&(r={exitLong:a.periodHigh-t*e.multiplier,exitShort:a.periodLow+t*e.multiplier}),o=yield r}}(),this.generator.next(),r.forEach((e,r)=>{var l={high:e,low:t[r],close:o[r]},a=this.generator.next(l);a.value!=void 0&&this.result.push(a.value)})}nextValue(e){var r=this.generator.next(e);if(r.value!=void 0)return r.value}}Sr.calculate=W;let Vr=K();e.getAvailableIndicators=K,e.AvailableIndicators=Vr,e.FixedSizeLinkedList=Y,e.CandleData=class{},e.CandleList=Z,e.sma=o,e.SMA=re,e.ema=l,e.EMA=te,e.wma=a,e.WMA=oe,e.wema=n,e.WEMA=le,e.macd=s,e.MACD=ae,e.rsi=h,e.RSI=ue,e.bollingerbands=g,e.BollingerBands=he,e.adx=d,e.ADX=me,e.atr=c,e.ATR=xe,e.truerange=v,e.TrueRange=de,e.roc=m,e.ROC=we,e.kst=x,e.KST=fe,e.psar=w,e.PSAR=Ie,e.stochastic=f,e.Stochastic=_e,e.williamsr=I,e.WilliamsR=Pe,e.adl=_,e.ADL=Ce,e.obv=P,e.OBV=be,e.trix=C,e.TRIX=qe,e.forceindex=b,e.ForceIndex=Ee,e.cci=q,e.CCI=Se,e.awesomeoscillator=E,e.AwesomeOscillator=Ve,e.vwap=S,e.VWAP=ke,e.volumeprofile=k,e.VolumeProfile=He,e.mfi=H,e.MFI=Le,e.stochasticrsi=z,e.StochasticRSI=Be,e.averagegain=u,e.AverageGain=ne,e.averageloss=i,e.AverageLoss=se,e.sd=p,e.SD=ie,e.highest=L,e.Highest=Ae,e.lowest=B,e.Lowest=Te,e.sum=A,e.Sum=Me,e.renko=T,e.HeikinAshi=De,e.heikinashi=M,e.bullish=function(e){return new lr().hasPattern(e)},e.bearish=function(e){return new wr().hasPattern(e)},e.abandonedbaby=function(e){return new fr().hasPattern(e)},e.doji=function(e){return new Ke().hasPattern(e)},e.bearishengulfingpattern=function(e){return new ar().hasPattern(e)},e.bullishengulfingpattern=function(e){return new ye().hasPattern(e)},e.darkcloudcover=function(e){return new Ir().hasPattern(e)},e.downsidetasukigap=function(e){return new Ge().hasPattern(e)},e.dragonflydoji=function(e){return new _r().hasPattern(e)},e.gravestonedoji=function(e){return new Pr().hasPattern(e)},e.bullishharami=function(e){return new Fe().hasPattern(e)},e.bearishharami=function(e){return new nr().hasPattern(e)},e.bullishharamicross=function(e){return new We().hasPattern(e)},e.bearishharamicross=function(e){return new sr().hasPattern(e)},e.eveningdojistar=function(e){return new ur().hasPattern(e)},e.eveningstar=function(e){return new ir().hasPattern(e)},e.morningdojistar=function(e){return new Ue().hasPattern(e)},e.morningstar=function(e){return new Oe().hasPattern(e)},e.bullishmarubozu=function(e){return new Ne().hasPattern(e)},e.bearishmarubozu=function(e){return new hr().hasPattern(e)},e.piercingline=function(e){return new Xe().hasPattern(e)},e.bullishspinningtop=function(e){return new Cr().hasPattern(e)},e.bearishspinningtop=function(e){return new br().hasPattern(e)},e.threeblackcrows=function(e){return new pr().hasPattern(e)},e.three