UNPKG

openalgo-charts

Version:

From-scratch, dependency-free canvas charting engine for OpenAlgo: professional-grade interactive rendering, advanced on-chart trading, and a one-call widget tier that adds the toolbar, drawing rail, dialogs and shortcuts.

3 lines • 201 kB
import{IndicatorInputError as e,DEFAULT_TIMEZONE as t,resolveInterval as l,parseSessionSpec as o,bucketStartOf as n,zonedWallClockToUtcSeconds as r,zonedWeekIndex as a,zonedDayIndex as i,utcSecondsToZonedParts as s,normalizeDataVariant as c,dataVariantKey as u,tryResolveInterval as p,isTimeBucketed as y,isValidTimezone as f,isNewZonedPeriod as d,utcSecondsToIstParts as m,IST_OFFSET_SECONDS as h,sourceValues as b,supertrend as g,atr as w,sourceValue as k,sessionStartFlags as v,calendarPeriodFlags as N,isNewIstDay as C,isNewZonedDay as M,rsi as x,trueRange as A,plotStyleKeys as S,withAlpha as L,sharedHistoryRequests as B,registerIndicator as F}from"./openalgo-charts.mjs";function K(e,t){if(void 0!==e&&(!Number.isSafeInteger(e)||e<=0))throw new RangeError("Missing-value window period must be a positive safe integer");if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError("Missing-value options must be an object");const l=void 0===t.missing?"propagate":t.missing;if("propagate"!==l&&"skip"!==l)throw new TypeError("Missing-value policy must be propagate or skip");return l}function W(e,t,l,o){const n=K(t,l),r=new Array(e.length).fill(NaN),a=[];for(let l=0;l<e.length;l++){const i=e[l];"skip"!==n||Number.isFinite(i)?(a.push(i),a.length>t&&a.shift(),a.length===t&&a.every(Number.isFinite)&&(r[l]=o(a))):l>0&&(r[l]=r[l-1])}return r}function D(e,t,l={}){return W(e,t,l,e=>{const l=e.slice().sort((e,t)=>e-t),o=Math.floor(t/2);if(t%2!=0)return l[o];const n=l[o-1],r=l[o];return n===r?n:n/2+r/2})}function O(e,t,l={}){return W(e,t,l,e=>{const t=new Map;let l=1/0,o=0;for(const n of e){const e=(t.get(n)??0)+1;t.set(n,e),(e>o||e===o&&n<l)&&(l=n,o=e)}return l})}function R(e,t,l={}){if(void 0!==l.sample&&"boolean"!=typeof l.sample)throw new TypeError("Numerical sample option must be boolean");return W(e,t,l,e=>{if(l.sample&&1===t)return NaN;const o=e[0];let n=0;for(const l of e){const e=l-o;if(!Number.isFinite(e))return 1/0;n+=e/t}const r=l.sample?t-1:t;let a=0;for(const t of e){const e=t-o-n;a+=e/r*e}return a})}function T(e,t,l={}){return W(e,t,l,e=>{let t=1/0,l=-1/0;for(const o of e)t=Math.min(t,o),l=Math.max(l,o);return l-t})}function P(e,t,l,o={}){if(!Number.isFinite(l)||l<0||l>100)throw new RangeError("Numerical percentage must be finite and between 0 and 100");return W(e,t,o,e=>{const o=e.slice().sort((e,t)=>e-t),n=l/100*(t-1),r=Math.floor(n),a=Math.ceil(n),i=n-r;return o[r]===o[a]?o[r]:o[r]*(1-i)+o[a]*i})}function U(e,t,l={}){return W(e,t,l,e=>{const l=e.map((e,t)=>({value:e,index:t})).sort((e,t)=>e.value-t.value),o=new Array(t);for(let e=0;e<t;){let n=e+1;for(;n<t&&l[n].value===l[e].value;)n++;const r=(e+n-1)/2;for(let t=e;t<n;t++)o[l[t].index]=r;e=n}const n=(t-1)/2;let r=0,a=0,i=0;for(let e=0;e<t;e++){const t=o[e]-n,l=e-n;r+=t*l,a+=t*t,i+=l*l}const s=Math.sqrt(a)*Math.sqrt(i);return 0===s?NaN:Math.max(-100,Math.min(100,100*r/s))})}function $(e,t,l){let o=0,n=0;for(let r=0;r<e.length;r++){const a=e[r]/t*(l?e.length-r:1),i=o+a;n+=Math.abs(o)>=Math.abs(a)?o-i+a:a-i+o,o=i}return o+n}function I(e,t,l={}){return W(e,t,l,e=>{const t=$(e,1,!1);if(0===t)return NaN;const l=$(e,1,!0);if(Number.isFinite(t)&&Number.isFinite(l))return-l/t;let o=0;for(const t of e)o=Math.max(o,Math.abs(t));const n=2**Math.min(1023,Math.floor(Math.log2(o))),r=Number.isFinite(t)?t/n:$(e,n,!1),a=$(e,n,!0);return 0===r?Number.isFinite(t)?-a/t*n:NaN:-a/r})}function E(e,t,l){const o=K(void 0,t),n=new Array(e.length).fill(NaN);let r=NaN,a=!1;for(let t=0;t<e.length;t++){const i=e[t];Number.isFinite(i)?a||(Number.isNaN(r)||(l?i>r:i<r))&&(r=i):"propagate"===o&&(a=!0),a||(n[t]=r)}return n}function q(e,t={}){return E(e,t,!1)}function V(e,t={}){return E(e,t,!0)}function H(e,t,l,o){if(e.length!==t.length)throw new RangeError("Numerical crossing arrays must have equal lengths");const n=K(void 0,l),r=new Array(e.length).fill(!1);let a=NaN,i=NaN;for(let l=0;l<e.length;l++){if(!Number.isFinite(e[l])||!Number.isFinite(t[l])){"propagate"===n&&(a=NaN,i=NaN);continue}const s=e[l]>t[l]&&a<=i,c=e[l]<t[l]&&a>=i;r[l]="above"===o?s:"below"===o?c:s||c,a=e[l],i=t[l]}return r}function z(e,t,l={}){return H(e,t,l,"above")}function j(e,t,l={}){return H(e,t,l,"below")}function Z(e,t,l={}){return H(e,t,l,"either")}function Y(e,t,l,o){const n=K(t,l),r=new Array(e.length).fill(!1),a=[];for(let l=0;l<e.length;l++){const i=e[l];Number.isFinite(i)&&a.length===t&&(r[l]=a.every(e=>Number.isFinite(e)&&(o?i>e:i<e))),("propagate"===n||Number.isFinite(i))&&(a.push(i),a.length>t&&a.shift())}return r}function J(e,t,l={}){return Y(e,t,l,!0)}function G(e,t,l={}){return Y(e,t,l,!1)}function X(e,t){const l=new Array(e.length).fill(NaN);if(e.length<t)return l;if(1===t){for(let t=0;t<e.length;t++){const o=e[t];Number.isFinite(o)&&(l[t]=0===o?0:o)}return l}let o=0;for(let n=0;n<e.length;n++){if(Number.isFinite(e[n])||o++,n>=t&&!Number.isFinite(e[n-t])&&o--,n<t-1||0!==o)continue;let r=0;for(let l=n-t+1;l<=n;l++)r+=e[l];Number.isFinite(r)&&(l[n]=r)}return l}function _(e,t){const l=X(e,t);if(1!==t)for(let e=0;e<l.length;e++)l[e]/=t;return l}function Q(e,t,l,o,n=!1){const r=K(t,l),a=new Array(e.length).fill(NaN),i=[];let s=0;for(let l=0;l<e.length;l++){const c=e[l],u=Number.isFinite(c);n&&u&&i.length===t&&0===s&&(a[l]=o(i,l)),("propagate"===r||u)&&(i.push({value:c,index:l}),u||s++,i.length>t&&!Number.isFinite(i.shift().value)&&s--),n||i.length!==t||0!==s||(a[l]=o(i,l))}return a}function ee(e,t,l,o){if("number"!=typeof e)throw new TypeError(`${l} must contain numbers`);if(!(o&&Number.isNaN(e)||Number.isSafeInteger(e)&&!(e<t)))throw new RangeError(`${l} must be a safe integer greater than or equal to ${t}`)}function te(e,t,l,o){if(!Array.isArray(e))throw new TypeError(`${o} must be an array`);if(e.length!==t)throw new RangeError(`${o} array length must match the source`);for(let t=0;t<e.length;t++)ee(e[t],l,o,!0)}function le(e,t,l,o,n=!1){te(t,e.length,1,"Window length");const r=K(1,void 0===l?{}:l),a=new Array(e.length).fill(NaN),i=[];let s=0;const c=(e,t)=>{const l=Number.isFinite(e);s=l?s+1:0,("propagate"===r||l)&&i.push({value:e,index:t})};for(let l=0;l<e.length;l++){const u=e[l];n||c(u,l);const p=t[l];!Number.isNaN(p)&&p<=i.length&&("skip"===r||p<=s)&&(!n||Number.isFinite(u))&&(a[l]=o(i.slice(i.length-p),l)),n&&c(u,l)}return a}function oe(e,t){const l=new DataView(new ArrayBuffer(8)),o=(1n<<52n)-1n;let n=0n,r=0n;for(let a=0;a<e.length;a++){const i=BigInt(t?.[a]??1);if(0n===i)continue;l.setFloat64(0,e[a]);const s=l.getBigUint64(0),c=Number(s>>52n&0x7ffn),u=s&o,p=0===c?u:(1n<<52n|u)<<BigInt(c-1);n+=(s>>63n?-p:p)*i,r+=i}return function(e,t){const l=e<0n,o=l?-e:e,n=o/t,r=Math.max(0,n.toString(2).length-53),a=t<<BigInt(r);let i=o/a;const s=o%a;(2n*s>a||2n*s===a&&0n!=(1n&i))&&i++;const c=Number(i)*2**(r-1074);return l?-c:c}(n,r)}function ne(e,t){let l=0,o=0,n=0,r=1/0,a=-1/0;for(let i=0;i<e.length;i++){const s=t?.[i]??1;if(0===s)continue;r=Math.min(r,e[i]),a=Math.max(a,e[i]),n+=s;const c=e[i]*s,u=l+c;o+=Math.abs(l)>=Math.abs(c)?l-u+c:c-u+l,l=u}if(r===a)return r;const i=l+o,s=Number.isFinite(i)&&Number.isSafeInteger(n)?i/n:oe(e,t);return Math.max(r,Math.min(a,s))}function re(e){return ne(e.map(e=>e.value))}function ae(e,t){const l=e[0].value;let o=0,n=0,r=e.map(({value:e})=>{o=Math.max(o,Math.abs(e));const t=e-l;return n=Math.max(n,Math.abs(t)),t});if(0===n)return 0;const a=2**Math.min(1023,Math.floor(Math.log2(Number.isFinite(n)?n:o)));r=Number.isFinite(n)?r.map(e=>e/a):e.map(({value:e})=>e/a-l/a);const i=ne(r),s=ne(r.map(e=>{const l=Math.abs(e-i);return t?l*l:l}));return Math.min(o,(t?Math.sqrt(s):s)*a)}function ie(e,t){let l=e[0];for(let o=1;o<e.length;o++){const n=e[o];(t?n.value>=l.value:n.value<=l.value)&&(l=n)}return l}function se(e,t,l,o){const n=K(t,l),r=new Array(e.length).fill(NaN);let a=0;const i=[];let s=NaN;for(let l=0;l<e.length;l++){const c=e[l];if(Number.isFinite(c)){if(a<t){if(i.push(c),++a<t)continue;s=ne(i),i.length=0}else s=ne([s,c],[t-1,o]);r[l]=s}else"propagate"===n?(a=0,i.length=0,s=NaN):a===t&&(r[l]=s)}return r}function ce(e,t,l){if("number"!=typeof t)return le(e,t,l,re);if(void 0!==l)return Q(e,t,l,re);if(Number.isSafeInteger(t)&&t>0)return _(e,t);const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;let r=0,a=0;for(let l=0;l<o;l++){const o=e[l];if(Number.isFinite(o)?r+=o:a+=1,l>=t){const o=e[l-t];Number.isFinite(o)?r-=o:a-=1}l>=t-1&&(n[l]=0===a?r/t:NaN)}return n}function ue(e,t,l){if("number"!=typeof t)return le(e,t,l,e=>ne(e.map(e=>e.value),e.map((e,t)=>t+1)));if(void 0!==l)return Q(e,t,l,e=>ne(e.map(e=>e.value),e.map((e,t)=>t+1)));const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;const r=t*(t+1)/2,a=Number.isSafeInteger(t);for(let l=t-1;l<o;l++){let o=0;for(let n=0;n<t;n++){const r=a?t-1-n:n;o+=e[l-r]*(t-r)}const i=o/r;a&&!Number.isFinite(i)||(n[l]=i)}return n}function pe(e,t,l){const o=new Array(e.length).fill(NaN);if(e.length<t)return o;const n=2/(t+1);let r=0,a=NaN,i=!1;for(let s=0;s<e.length;s++){const c=e[s];if(Number.isFinite(c)){if(i)a=l?c*n+a*(1-n):(a*(t-1)+c)/t;else{if(++r<t)continue;let l=0;for(let o=s+1-t;o<=s;o++)l+=e[o];const o=l/t;if(!Number.isFinite(o))continue;a=0===o?0:o,i=!0}Number.isFinite(a)&&(o[s]=0===a?0:a)}else r=0}return o}function ye(e,t,l){if(void 0!==l)return se(e,t,l,1);if(Number.isSafeInteger(t)&&t>0)return pe(e,t,!1);const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;let r=0;for(let l=0;l<t;l++)r+=e[l];let a=r/t;n[t-1]=a;for(let l=t;l<o;l++)a=(a*(t-1)+e[l])/t,n[l]=a;return n}function fe(e,t,l){if("number"!=typeof t)return le(e,t,l,e=>ae(e,!0));if(void 0!==l)return Q(e,t,l,e=>ae(e,!0));const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;const r=ce(e,t),a=Number.isSafeInteger(t);for(let l=t-1;l<o;l++){let o=0;const i=r[l];for(let n=0;n<t;n++){const r=e[l-(a?t-1-n:n)]-i;o+=r*r}const s=Math.sqrt(o/t);a&&!Number.isFinite(s)||(n[l]=s)}return n}function de(e,t,l){if("number"!=typeof t)return le(e,t,l,e=>ie(e,!0).value);if(void 0!==l)return Q(e,t,l,e=>ie(e,!0).value);const o=e.length,n=new Array(o).fill(NaN);if(t<=0)return n;for(let l=t-1;l<o;l++){let o=-1/0;for(let n=0;n<t;n++)e[l-n]>o&&(o=e[l-n]);n[l]=o}return n}function me(e,t,l){if("number"!=typeof t)return le(e,t,l,e=>ie(e,!1).value);if(void 0!==l)return Q(e,t,l,e=>ie(e,!1).value);const o=e.length,n=new Array(o).fill(NaN);if(t<=0)return n;for(let l=t-1;l<o;l++){let o=1/0;for(let n=0;n<t;n++)e[l-n]<o&&(o=e[l-n]);n[l]=o}return n}function he(e){const t=new Array(e.length);for(let l=0;l<e.length;l++){const o=e[l];t[l]=Number.isFinite(o)?o:null}return t}function be(e,t,l){if(void 0!==l)return se(e,t,l,2);if(Number.isSafeInteger(t)&&t>0)return pe(e,t,!0);const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;let r=0;for(let l=0;l<t;l++)r+=e[l];let a=r/t;n[t-1]=a;const i=2/(t+1);for(let l=t;l<o;l++)a=e[l]*i+a*(1-i),n[l]=a;return n}function ge(e,t=1){const l=e.length,o=new Array(l).fill(NaN);for(let n=t;n<l;n++)o[n]=e[n]-e[n-t];return o}function we(e,t){const l=e.length,o=new Array(l).fill(NaN);if(t<=0)return o;for(let n=t;n<l;n++){const l=e[n-t];o[n]=0===l?NaN:100*(e[n]-l)/l}return o}function ke(e,t,l){if("number"!=typeof t)return le(e,t,l,e=>ae(e,!1));if(void 0!==l)return Q(e,t,l,e=>ae(e,!1));const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;const r=ce(e,t),a=Number.isSafeInteger(t);for(let l=t-1;l<o;l++){let o=0;for(let n=0;n<t;n++)o+=Math.abs(e[l-(a?t-1-n:n)]-r[l]);const i=o/t;a&&!Number.isFinite(i)||(n[l]=i)}return n}function ve(e,t,l){if("number"!=typeof t)return le(e,t,l,(t,l)=>{let o=0;for(const n of t)n.value<=e[l]&&o++;return 100*o/t.length},!0);if(void 0!==l)return Q(e,t,l,(l,o)=>{let n=0;for(const t of l)t.value<=e[o]&&n++;return 100*n/t},!0);const o=e.length,n=new Array(o).fill(NaN);if(t<=0)return n;for(let l=t;l<o;l++){let o=0;for(let n=1;n<=t;n++)e[l-n]<=e[l]&&(o+=1);n[l]=100*o/t}return n}function Ne(e,t,l,o){const n=e.length,r=new Array(n).fill(NaN);if(!Number.isSafeInteger(t)||t<=0||o<=0||n<t)return r;const a=l*(t-1),i=t/o,s=new Array(t);let c=0;for(let e=0;e<t;e++){const t=Math.exp(-(e-a)*(e-a)/(2*i*i));s[e]=t,c+=t}if(0===c)return r;for(let l=t-1;l<n;l++){let o=0;for(let n=0;n<t;n++)o+=e[l-(t-1-n)]*s[n];r[l]=o/c}return r}function Ce(e,t,l){const o=e.length,n=new Array(o);for(let l=0;l<o;l++)n[l]=e[l]*(t[l]??0);const r=ce(n,l),a=ce(t,l),i=new Array(o).fill(NaN);for(let e=0;e<o;e++)i[e]=0===a[e]?NaN:r[e]/a[e];return i}function Me(e,t,l){return"number"!=typeof t?le(e,t,l,(e,t)=>ie(e,!0).index-t):void 0!==l?Q(e,t,l,(e,t)=>ie(e,!0).index-t):Ae(e,t,!0)}function xe(e,t,l){return"number"!=typeof t?le(e,t,l,(e,t)=>ie(e,!1).index-t):void 0!==l?Q(e,t,l,(e,t)=>ie(e,!1).index-t):Ae(e,t,!1)}function Ae(e,t,l){const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;for(let r=t-1;r<o;r++){let o=e[r],a=0;for(let n=1;n<t;n++){const t=e[r-n];(l?t>o:t<o)&&(o=t,a=n)}n[r]=0===a?0:-a}return n}function Se(e,t){if(Number.isSafeInteger(t)&&t>0)return X(e,t);const l=e.length,o=new Array(l).fill(NaN);if(t<=0||l<t)return o;let n=0;for(let r=0;r<l;r++)n+=e[r],r>=t&&(n-=e[r-t]),r>=t-1&&(o[r]=n);return o}function Le(e){const t=e.length,l=new Array(t);let o=0;for(let n=0;n<t;n++){const t=e[n];Number.isFinite(t)&&(o+=t),l[n]=o}return l}function Be(e,t,l=0){const o=e.length,n=new Array(o).fill(NaN);if(t<=1||o<t)return n;const r=(t-1)*t/2,a=t*((t-1)*t*(2*t-1)/6)-r*r;if(0===a)return n;for(let i=t-1;i<o;i++){let o=0,s=0;for(let l=0;l<t;l++){const n=e[i-(t-1-l)];o+=n,s+=n*l}const c=(t*s-r*o)/a,u=(o-c*r)/t;n[i]=u+c*(t-1-l)}return n}function Fe(e){const t=e.length,l=new Array(t).fill(NaN);for(let o=3;o<t;o++)l[o]=(e[o-3]+2*e[o-2]+2*e[o-1]+e[o])/6;return l}function Ke(e,t,l,o){const n=e.length,r=new Array(n).fill(NaN),a=de(t,o),i=me(l,o);for(let t=0;t<n;t++){const l=a[t]-i[t];r[t]=0===l?NaN:100*(e[t]-i[t])/l}return r}function We(e,t,l){const o=e.length,n=new Array(o).fill(NaN);if(t<=0||o<t)return n;for(let r=t-1;r<o;r++){const o=e.slice(r-t+1,r+1);if(o.some(e=>!Number.isFinite(e)))continue;o.sort((e,t)=>e-t);const a=Math.max(1,Math.ceil(l/100*t));n[r]=o[a-1]??NaN}return n}function De(e,t,l){const o=e.length,n=new Array(o).fill(NaN);if(l<=1||o<l)return n;for(let r=l-1;r<o;r++){let o=0,a=0,i=0,s=0,c=0;for(let n=r-l+1;n<=r;n++)o+=e[n],a+=t[n];const u=o/l,p=a/l;for(let o=r-l+1;o<=r;o++){const l=e[o]-u,n=t[o]-p;i+=l*n,s+=l*l,c+=n*n}const y=i/l/(Math.sqrt(s/l)*Math.sqrt(c/l));Number.isFinite(y)&&(n[r]=y)}return n}function Oe(e,t){const l=e.length,o=new Array(l).fill(NaN),n=ce(e,t),r=ke(e,t);for(let t=0;t<l;t++)o[t]=0===r[t]?NaN:(e[t]-n[t])/(.015*r[t]);return o}function Re(e,t){const l=e.length,o=new Array(l).fill(NaN);if(t<3||l<t)return o;const n=(t+1)/2;let r=0;for(let e=0;e<t;e++)r+=(n-e-1)*(n-e-1);for(let a=t-1;a<l;a++){let l=0;for(let o=0;o<t;o++)l+=e[a-o];const i=l/t;let s=0,c=0;for(let l=0;l<t;l++){const t=i-e[a-l];s+=t*t,c+=(n-l-1)*t}o[a]=Math.sqrt((s-c*c/r)/(t-2))}return o}function Te(e,t,l){const o=e.length,n=new Array(o).fill(NaN),r=X(e,l),a=X(t,l);for(let e=l;e<o;e++){const t=r[e],l=a[e];Number.isFinite(t)&&Number.isFinite(l)&&(n[e]=0===l?100:100-100/(1+t/l))}return n}function Pe(e,t,l){return"number"!=typeof t||"number"!=typeof l?$e(e,t,l,!0):Ie(e,t,l,!0)}function Ue(e,t,l){return"number"!=typeof t||"number"!=typeof l?$e(e,t,l,!1):Ie(e,t,l,!1)}function $e(e,t,l,o){for(const[o,n]of[["Left pivot width",t],["Right pivot width",l]])"number"==typeof n?ee(n,0,o,!1):te(n,e.length,0,o);const n=new Array(e.length).fill(NaN);for(let r=0;r<e.length;r++){const a="number"==typeof t?t:t[r],i="number"==typeof l?l:l[r];if(Number.isNaN(a)||Number.isNaN(i)||i>r||a>r-i)continue;const s=r-i,c=e[s];if(!Number.isFinite(c))continue;let u=!0;for(let t=s-a;t<=r&&u;t++){if(t===s)continue;const l=e[t];Number.isFinite(l)&&!(o?l>=c:l<=c)||(u=!1)}u&&(n[r]=c)}return n}function Ie(e,t,l,o){const n=e.length,r=new Array(n).fill(NaN);for(let a=t+l;a<n;a++){const n=a-l,i=e[n];if(!Number.isFinite(i))continue;let s=!0;for(let l=1;l<=t&&s;l++){const t=e[n-l];Number.isFinite(t)&&!(o?t>=i:t<=i)||(s=!1)}for(let t=1;t<=l&&s;t++){const l=e[n+t];Number.isFinite(l)&&!(o?l>=i:l<=i)||(s=!1)}s&&(r[a]=i)}return r}function Ee(e){const t=e.length,l=new Array(t).fill(NaN);let o=-1;for(let n=0;n<t;n++)e[n]&&(o=n),o>=0&&(l[n]=n-o);return l}function qe(e,t,l){const o=e.length,n=new Array(o).fill(NaN);if(!Number.isSafeInteger(l)||l<0)return n;const r=[];for(let a=0;a<o;a++){e[a]&&r.push(a);const o=r.length-1-l;o>=0&&(n[a]=t[r[o]]??NaN)}return n}const Ve=new WeakMap,He=e=>Number.isFinite(e)?e:null,ze=e=>Number.isSafeInteger(e)&&e>0;function je(e){return(t,l,o,n,r,a)=>{const i=e(t,l,o,n,r,a);if(null===i)return null;for(const e of Object.keys(n))if(!Object.prototype.hasOwnProperty.call(i,e)){const e="object"==typeof r&&null!==r?Ve.get(r):void 0;return void 0!==e&&(e.misses=3),null}return i}}function Ze(e,t){const l={...e,calc:(o=e.calc,(e,t,l,n)=>{if("object"==typeof l&&null!==l){const e=Ve.get(l);Ve.set(l,{owner:o,misses:e?.owner===o?e.misses:0})}return o(e,t,l,n)})};var o;return Object.defineProperty(l,"calcTail",{value:je(t(e.calc)),enumerable:!1,writable:!0,configurable:!0}),l}function Ye(e,t,l,o){if("object"!=typeof e||null===e||!Number.isSafeInteger(o)||o<0||o>=l.length)return;const n=Ve.get(e);return void 0!==n&&n.owner===t&&n.misses<3?n:void 0}function Je(e){return e.misses++,null}function Ge(e){if(Array.isArray(e))return e.map(Ge);if(null!==e&&"object"==typeof e){const t={};for(const l of Object.keys(e))t[l]=Ge(e[l]);return t}return e}function Xe(e,t,l,o){const n=e.at;return void 0===n||n.key!==t||n.index!==o-1||0!==o&&n.time!==l[o-1].time?void 0:n}function _e(e,t,l,o,n){const r={};for(const a of Object.keys(t)){const i=t[a];if(n>0){const t=o[a];if(void 0===t||t.length<n||!Object.is(t[n-1]??null,i[l-1]??null))return Je(e)}r[a]=i.slice(l)}return e.misses=0,r}function Qe(e,t){return(l,o,n,r,a,i)=>{const s=Ye(a,e,l,n),c=t(o);if(void 0===s||null===c)return null;const u=Math.max(0,n-1-c);return _e(s,e(0===u?l:l.slice(u),o,a,i),n-u,r,n)}}function et(e,t,l,o,n,r,a){const i=Ye(a,e,o,n);if(void 0===i)return null;const s=Xe(i,t,o,n);let c,u;if(void 0!==s)c=Ge(s.state),u=s.row.slice();else{c=l.start(),u=l.keys.map(()=>null);for(let e=0;e<n;e++)l.step(c,e,u)}if(!function(e,t,l,o){if(0===o)return!0;for(let n=0;n<t.length;n++){const r=e[t[n]];if(void 0===r||r.length<o||!Object.is(r[o-1]??null,l[n]))return!1}return!0}(r,l.keys,u,n))return Je(i);if(!1===l.ready?.(c))return null;const p=o.length,y=l.keys.map(()=>new Array(p-n));for(let e=n;e<p;e++){e===p-1&&(i.at={key:t,index:e-1,time:e>0?o[e-1].time:NaN,state:Ge(c),row:u.slice()}),l.step(c,e,u);for(let t=0;t<y.length;t++)y[t][e-n]=u[t]}i.misses=0;const f={};return l.keys.forEach((e,t)=>{f[e]=y[t]}),f}function tt(e,t){const l=e.start(),o=e.keys.map(()=>null),n=e.keys.map(()=>new Array(t));for(let r=0;r<t;r++){e.step(l,r,o);for(let e=0;e<n.length;e++)n[e][r]=o[e]}const r={};return e.keys.forEach((e,t)=>{r[e]=n[t]}),r}const lt=()=>({run:0,value:NaN,seeded:!1,recent:[]});function ot(e,t,l,o){if(!Number.isFinite(t))return e.run=0,e.recent.length=0,NaN;if(e.seeded){const n=2/(l+1);e.value=o?t*n+e.value*(1-n):(e.value*(l-1)+t)/l}else{const o=e.recent;if(o.push(t),o.length>l&&o.shift(),++e.run<l)return NaN;let n=0;for(let e=0;e<o.length;e++)n+=o[e];const r=n/l;if(!Number.isFinite(r))return NaN;e.value=0===r?0:r,e.seeded=!0,o.length=0}return Number.isFinite(e.value)?0===e.value?0:e.value:NaN}const nt=()=>({count:0,seed:[],value:NaN});function rt(e,t){const l=e[t];if(0===t)return l.high-l.low;const o=e[t-1].close;return Math.max(l.high-l.low,Math.abs(l.high-o),Math.abs(l.low-o))}const at=()=>({a:NaN,run:0,recent:[]});function it(e,t,l){if(!Number.isFinite(t))return e.run=0,e.recent.length=0,NaN;if(e.run++,Number.isNaN(e.a)){const o=e.recent;if(o.push(t),o.length>l&&o.shift(),e.run>=l){let t=0;for(let e=0;e<o.length;e++)t+=o[e];Number.isFinite(t/l)&&(e.a=t/l,o.length=0)}}else e.a=(e.a*(l-1)+t)/l;return Number.isFinite(e.a)?e.a:NaN}const st=()=>({primed:!1,last:NaN,gain:NaN,loss:NaN,gainSeeded:!1,lossSeeded:!1,run:0,recent:[]});const ct=()=>({atr:{a:NaN,run:0,recent:[]},upper:NaN,lower:NaN,st:NaN,close:NaN,started:!1});function ut(e,t,l){if(t<l-1)return NaN;if(1===l){const l=e(t);return Number.isFinite(l)?0===l?0:l:NaN}let o=0;for(let n=t-l+1;n<=t;n++){const t=e(n);if(!Number.isFinite(t))return NaN;o+=t}return Number.isFinite(o)?o/l:NaN}const pt=604800,yt=86400;function ft(e,t,l,o){if("calendar"===e.mode)return n(e,t,l);if("interval"!==e.mode)return t;const c=e.seconds;if(c%pt===0)return Math.floor(a(t,l)/(c/pt));if(c%yt===0)return Math.floor(i(t,l)/(c/yt));if(null===o)return n(e,t);const u=s(t,l),p=r(u.year,u.month,u.day,Math.floor(o/60),o%60,0,l);return 1e6*i(t,l)+Math.floor((t-p)/c)}function dt(e){const t={index:NaN,year:0,month:0,date:0,from:1/0,to:-1/0};return l=>{if(l>=t.from&&l<t.to)return t;const o=s(l,e),n=new Date(Date.UTC(o.year,o.month-1,o.day+1));return t.index=i(l,e),t.year=o.year,t.month=o.month,t.date=o.day,t.from=r(o.year,o.month,o.day,0,0,0,e),t.to=r(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),0,0,0,e),t}}function mt(e,t,l){const o="calendar"===e.mode&&void 0!==e.timezone&&e.timezone!==t;if("calendar"!==e.mode&&"interval"!==e.mode)return o=>ft(e,o,t,l);if(o||"interval"===e.mode&&e.seconds%yt!==0&&null===l)return o=>ft(e,o,t,l);const a="interval"===e.mode?e.seconds:0,i=dt(t);let s=NaN,c=0;return o=>{const u=i(o);return u.index!==s&&(s=u.index,"calendar"===e.mode?c=n(e,o,t):null!==l&&a%yt!==0&&(c=r(u.year,u.month,u.date,Math.floor(l/60),l%60,0,t))),"calendar"===e.mode?c:a%pt===0?Math.floor(Math.floor((u.index+3)/7)/(a/pt)):a%yt===0?Math.floor(u.index/(a/yt)):1e6*u.index+Math.floor((o-c)/a)}}const ht=e=>Number.isFinite(e);function bt(e,t){!ht(e.open)&&ht(t.open)&&(e.open=t.open),ht(t.high)&&(!ht(e.high)||t.high>e.high)&&(e.high=t.high),ht(t.low)&&(!ht(e.low)||t.low<e.low)&&(e.low=t.low),ht(t.close)&&(e.close=t.close),void 0!==t.volume&&(e.volume=(e.volume??0)+t.volume),void 0!==t.oi&&(e.oi=t.oi)}function gt(n,r,a={}){const i=a.timezone??t,s=Math.floor(a.offset??0);if(!Number.isFinite(s)||s<0)throw new e("securitySeries: offset must be zero or a positive count of buckets");const c=!0===a.lookahead,{bucketing:u}=l(r);if("ticks"===u.mode||"volume"===u.mode)throw new e(`securitySeries: "${r}" closes on trade flow rather than the clock and cannot be folded from time bars`);let p=null;if(void 0!==a.session){const t=o(a.session);if(null===t)throw new e(`securitySeries: cannot read session "${a.session}"`);p=t.start}const y=n.length,f=new Array(y).fill(null),d=new Array(y).fill(null),m=new Array(y).fill(null),h=new Array(y).fill(null),b=new Array(y).fill(null),g=new Array(y).fill(null),w=new Array(y).fill(null),k=new Array(y).fill(!1);if(0===y)return{open:f,high:d,low:m,close:h,volume:b,oi:g,bucketStart:w,isNew:k};const v=[],N=new Array(y),C=mt(u,i,p);let M=NaN;for(let e=0;e<y;e++){const t=n[e],l=C(t.time);0===e||l!==M?(v.push({start:t.time,open:t.open,high:t.high,low:t.low,close:t.close,volume:void 0===t.volume?null:t.volume,oi:void 0===t.oi?null:t.oi}),k[e]=!0):bt(v[v.length-1],t),N[e]=v.length-1,M=l}let x=NaN,A=NaN,S=null,L=null;for(let e=0;e<y;e++){const t=n[e],l=N[e];if(s>0){const t=l-s;if(t<0)continue;const o=v[t];f[e]=o.open,d[e]=o.high,m[e]=o.low,h[e]=o.close,b[e]=o.volume,g[e]=o.oi,w[e]=o.start;continue}const o=v[l];w[e]=o.start,c?(f[e]=o.open,d[e]=o.high,m[e]=o.low,h[e]=o.close,b[e]=o.volume,g[e]=o.oi):(k[e]?(x=t.high,A=t.low,S=void 0===t.volume?null:t.volume,L=void 0===t.oi?null:t.oi):(ht(t.high)&&(!ht(x)||t.high>x)&&(x=t.high),ht(t.low)&&(!ht(A)||t.low<A)&&(A=t.low),void 0!==t.volume&&(S=(S??0)+t.volume),void 0!==t.oi&&(L=t.oi)),f[e]=o.open,d[e]=ht(x)?x:null,m[e]=ht(A)?A:null,h[e]=ht(t.close)?t.close:null,b[e]=S,g[e]=L)}return{open:f,high:d,low:m,close:h,volume:b,oi:g,bucketStart:w,isNew:k}}function wt(n,r,a,i={}){const s=i.mode??"confirmed";if(!["confirmed","developing","lookahead"].includes(s))throw new e("securityExpression: invalid mode");const c=i.timezone??t,{bucketing:u}=l(r);if("interval"!==u.mode&&"calendar"!==u.mode)throw new e("securityExpression: requested interval must close on the clock");const p=void 0===i.session?void 0:o(i.session);if(null===p)throw new e("securityExpression: invalid session");if(0===n.length)return{};const y=[],f=[],d=mt(u,c,p?.start??null),m={};let h,b,g=-1/0;const w=()=>{const t=a(Object.freeze(y.slice()));if(null===t||"object"!=typeof t||Array.isArray(t))throw new e("securityExpression: expression must return named columns");const l=Object.keys(t);if(h&&(l.length!==h.length||h.some(e=>!Object.prototype.hasOwnProperty.call(t,e))))throw new e("securityExpression: expression column keys must remain stable");for(const o of l){if(!Array.isArray(t[o])||t[o].length!==y.length)throw new e("securityExpression: expression column length must match requested bars");Object.prototype.hasOwnProperty.call(m,o)||Object.defineProperty(m,o,{value:new Array(n.length).fill(null),enumerable:!0})}return h=l,t},k=(e,t,l)=>{for(const o of h??[]){const n=e[o][l];m[o][t]="number"==typeof n&&Number.isFinite(n)?n:null}};for(let t=0;t<n.length;t++){const l=n[t];if(!Number.isFinite(l.time)||l.time<=g)throw new e("securityExpression: source times must be finite and strictly increasing");g=l.time;const o=d(l.time);if(o!==b)y.push(Object.freeze({...l}));else{const e={...y[y.length-1]};bt(e,l),y[y.length-1]=Object.freeze(e)}b=o,f.push(y.length-1),"developing"===s&&k(w(),t,y.length-1)}if("developing"!==s){const e=w();for(let t=0;t<n.length;t++)k(e,t,f[t]-("confirmed"===s?1:0))}return m}function kt(t){throw new e(`Requested context: ${t}`)}function vt(e){if(null===e||"object"!=typeof e||Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function Nt(e,t,l){Object.defineProperty(e,t,{value:l,enumerable:!0,writable:!0,configurable:!0})}function Ct(e,t){vt(e)&&Array.isArray(e.bars)&&Array.isArray(e.availableAt)&&Array.isArray(e.confirmed)||kt("snapshot must contain bars, availableAt and confirmed arrays");const l=e.bars.length;e.availableAt.length===l&&e.confirmed.length===l||kt("snapshot arrays must have equal lengths"),"function"!=typeof t&&kt("expression must be a function");const o=[],n=[];let r=-1/0,a=-1/0,i=!1;for(let t=0;t<l;t++){const l=e.bars[t];(!vt(l)||!Number.isFinite(l.time)||l.time<=r)&&kt("bar times must be finite and strictly increasing"),(["open","high","low","close"].some(e=>"number"!=typeof l[e])||void 0!==l.volume&&"number"!=typeof l.volume||void 0!==l.oi&&"number"!=typeof l.oi)&&kt("bar readings must be numbers");const s=e.availableAt[t];null!==s&&(!Number.isFinite(s)||s<l.time)&&kt("availability must be null or finite and at or after bar opening"),"boolean"!=typeof e.confirmed[t]&&kt("confirmation must be boolean"),r=l.time,o.push(Object.freeze({...l})),e.confirmed[t]&&null!==s||(i=!0),i||null===s||(a=Math.max(a,s),n.push(a))}const s={},c=Object.freeze(o);if(0===l)return{bars:c,eligibleAt:n,values:s};const u=t(c);vt(u)||kt("expression must return named columns");for(const e of Object.keys(u)){const t=u[e];Array.isArray(t)&&t.length===l||kt("expression columns must match requested bar count");const o=[];for(let e=0;e<l;e++){const l=t[e];null!==l&&"number"!=typeof l&&kt("expression values must be numbers or null"),o.push(null!==l&&Number.isFinite(l)?l:null)}Nt(s,e,o)}return{bars:c,eligibleAt:n,values:s}}function Mt(e,t,l,o={}){Array.isArray(e)||kt("target times must be an array");let n=-1/0;for(const t of e)(!Number.isFinite(t)||t<=n)&&kt("target times must be finite and strictly increasing"),n=t;(!vt(o)||void 0!==o.gaps&&"carry"!==o.gaps&&"missing"!==o.gaps)&&kt("gaps must be carry or missing");const{eligibleAt:r,values:a}=Ct(t,l),i=Object.keys(a),s={};for(const t of i)Nt(s,t,new Array(e.length).fill(null));let c=-1,u=-1;for(let t=0;t<e.length;t++){for(;c+1<r.length&&r[c+1]<=e[t];)c++;if(c>=0&&("missing"!==o.gaps||c!==u))for(const e of i)s[e][t]=a[e][c];u=c}return s}function xt(e,t,l,o={}){Array.isArray(e)||kt("target windows must be an array");let n=-1/0;for(const t of e)(!vt(t)||!Number.isFinite(t.start)||!Number.isFinite(t.end)||t.start>=t.end||t.start<n)&&kt("windows must be finite, ordered and nonoverlapping with start < end"),n=t.end;vt(o)&&(void 0===o.asOf||Number.isFinite(o.asOf))||kt("asOf must be finite");const{bars:r,eligibleAt:a,values:i}=Ct(t,l),s=Object.keys(i),c={times:e.map(()=>[]),values:{}};for(const t of s)Nt(c.values,t,e.map(()=>[]));let u=0;for(let t=0;t<e.length;t++){const{start:l,end:n}=e[t],p=Math.min(n,o.asOf??1/0);for(;u<a.length&&r[u].time<l;)u++;for(;u<a.length&&r[u].time<n;){if(a[u]<=p){c.times[t].push(r[u].time);for(const e of s)c.values[e][t].push(i[e][u])}u++}}return c}const At=e=>!0===e?.[Symbol.for("openalgo-charts.data-context.passing")];function St(e){const t=c(e);return c(t&&{session:t.session,adjustment:t.adjustment})}const Lt="__requestedIndicator",Bt={bars:[],availableAt:[],confirmed:[]},Ft=e=>e[Lt],Kt=t=>{throw new e(`Requested indicator: ${t}`)};function Wt(e){!function(e){"function"==typeof e.request&&"function"==typeof e.expression||Kt("request and expression must be functions"),void 0!==e.gaps&&"carry"!==e.gaps&&"missing"!==e.gaps&&Kt("gaps must be carry or missing"),void 0!==e.targetTimes&&"function"!=typeof e.targetTimes&&Kt("targetTimes must be a function")}(e);const t=[...new Set(e.plots.flatMap(e=>void 0===e.ohlc?[e.key]:[e.ohlc.open,e.ohlc.high,e.ohlc.low,e.ohlc.close]))],l=new WeakMap;return{id:e.id,name:e.name,category:e.category,placement:e.placement,inputs:e.inputs,plots:e.plots,levels:e.levels,range:e.range,calc:(o,n,r,a)=>{const i=Ft(r);try{const s={...i?.context,bars:o,settings:n,calculation:a},c=e.targetTimes?.(s)??o.map(e=>e.time);Array.isArray(c)&&c.length===o.length||Kt("target times must match source length");const u=Mt(c,i?.snapshot??Bt,t=>e.expression(t,n,s),{gaps:e.gaps});for(const e of t)i?.snapshot?.bars.length&&!Object.prototype.hasOwnProperty.call(u,e)&&Kt(`expression is missing plot column ${e}`),Object.prototype.hasOwnProperty.call(u,e)||Object.defineProperty(u,e,{value:new Array(o.length).fill(null),enumerable:!0,writable:!0,configurable:!0});return l.delete(r),u}catch(e){throw l.set(r,{snapshot:i?.snapshot??null,error:e}),e}},attach:t=>{const o=Ft(t.store)??{owner:0,key:null,completed:null,wanted:null,request:null,snapshot:null,context:null,status:{state:"empty"}};t.store[Lt]=o;const n=++o.owner;let r=!0,a=0,i=0,s=null,p=()=>{};const y=()=>r&&o.owner===n&&!t.signal?.aborted,f=e=>{o.status=e,y()&&t.setDataStatus?.(e)},d=()=>{const e=o.request;o.request=null,s=null,e?.controller.abort(),e?.reject(e.controller.signal.reason)},m=()=>{o.completed=null,o.wanted=null;const e=null!==o.snapshot;o.snapshot=null,d(),e&&t.requestRecompute()},h=e=>{s!==e&&(s=e,e.promise.then(n=>{if(!y()||o.request!==e||e.controller.signal.aborted)return;let r;try{r=function(e,t){let l=[];Mt([],e,e=>(l=e,{}));let o=l.length;if(void 0!==t)for(o=0;o<l.length&&e.confirmed[o]&&null!==e.availableAt[o]&&e.availableAt[o]<=t;)o++;return Object.freeze({bars:Object.freeze(l.slice(0,o)),availableAt:Object.freeze(e.availableAt.slice(0,o)),confirmed:Object.freeze(e.confirmed.slice(0,o))})}(n,e.selection.request.asOf)}catch(t){return void b(e,t)}o.request=null,s=null;const a=o.snapshot;o.snapshot=r,o.completed=e.selection.version;try{t.requestRecompute();const e=l.get(t.store);if(e?.snapshot===r)throw e.error}catch(t){return void(y()&&o.snapshot===r&&o.key===e.selection.key&&(o.snapshot=a,f({state:"error",error:t}),o.wanted?.version!==e.selection.version&&w()))}y()&&o.snapshot===r&&(null===o.request&&f({state:r.bars.length?"ready":"empty"}),w())},t=>b(e,t)))},b=(e,t)=>{y()&&o.request===e&&!e.controller.signal.aborted&&(o.request=null,s=null,o.completed=e.selection.version,f({state:"error",error:t}),o.wanted?.version!==e.selection.version&&w())},g=e=>{if(y()&&o.request===e&&!e.controller.signal.aborted&&!e.started){e.started=!0;try{e.resolve(t.requestSnapshot({...e.selection.request,signal:e.controller.signal}))}catch(t){e.reject(t)}}},w=(l=!1)=>{if(!y()||At(t.dataContext?.()))return;const n=++i,r=()=>y()&&i===n,s=o.context?.requestState?.replay,p=t.requestState?.(),d=p?.replay,b={bars:t.bars(),settings:t.settings(),dataContext:t.dataContext?.(),requestState:p};let w;o.context=b;let k="";try{const t=e.request(b);w=null===t?null:function(e,t){let l;(null===e||"object"!=typeof e||"string"!=typeof e.symbol||""===e.symbol.trim()||"string"!=typeof e.interval||""===e.interval.trim()||void 0!==e.exchange&&"string"!=typeof e.exchange||!Number.isFinite(e.from)||!Number.isFinite(e.to)||e.from>e.to||void 0!==e.asOf&&!Number.isFinite(e.asOf)||void 0!==e.warmupBars&&(!Number.isInteger(e.warmupBars)||e.warmupBars<0||e.warmupBars>1e5))&&Kt("request requires an instrument and a finite ordered time window");try{l=void 0===e.variant?St(t?.variant):c(e.variant)}catch{Kt("request variant must be a data variant")}return{symbol:e.symbol,exchange:e.exchange,interval:e.interval,from:e.from,to:e.to,asOf:e.asOf,...void 0===e.warmupBars?{}:{warmupBars:e.warmupBars},...l?{variant:l}:{}}}(t,b.dataContext),k=u(b.dataContext?.variant)}catch(e){return void(r()&&(m(),r()&&f({state:"error",error:e})))}if(!r())return;if(null===w||void 0===t.requestSnapshot||!1===p?.supportsSnapshots||void 0!==d&&void 0===d.asOf)return m(),void(r()&&(o.key=null,f({state:"unsupported"})));if(0===b.bars.length)return m(),void(r()&&f({state:"empty"}));const v=p?.source,N=b.dataContext,C=JSON.stringify([w.symbol,w.exchange,w.interval,w.asOf,w.warmupBars,N?.symbol,N?.exchange,N?.interval,k,w.variant??null,p?.providerRevision,v?.sourceId,void 0===d?v?.historyRevision:null,void 0!==d]),M=void 0!==d?.asOf&&void 0!==s?.asOf&&d.asOf<s.asOf;if(o.key!==C||M){if(m(),!r())return;o.key=C}void 0!==d?.asOf&&(w.asOf=void 0===w.asOf?d.asOf:Math.min(w.asOf,d.asOf));const x=JSON.stringify([C,w.from,w.to,w.asOf,w.warmupBars,void 0===d&&!1!==e.refreshOnSourceUpdate?v?.revision:null,p?.dataRevision,d?.time,d?.forming,a]),A={key:C,version:x,request:w};o.wanted=A,null!==o.request?(h(o.request),g(o.request)):(l||o.completed!==x)&&(e=>{let t,l;const n={selection:e,controller:new AbortController,started:!1,promise:new Promise((e,o)=>{t=e,l=o}),resolve:t,reject:l};o.request=n,h(n),f({state:"loading"}),g(n)})(A)},k=()=>{r&&(r=!1,p(),t.signal?.removeEventListener("abort",v),o.owner===n&&(t.setDataRetry?.(null),queueMicrotask(()=>{o.owner===n&&d()})))},v=()=>{o.owner===n&&d(),k()};t.signal?.addEventListener("abort",v,{once:!0}),p=void 0!==t.subscribeRequestChanges?t.subscribeRequestChanges(()=>w()):t.subscribeDataChanges?.(()=>{a++,w()})??(()=>{}),t.setDataRetry?.(()=>w(!0));const N=l.get(t.store);return t.setDataStatus?.(N?.snapshot===o.snapshot?{state:"error",error:N.error}:o.status),w(),k}}}const Dt="timeframe",Ot={key:Dt,type:"interval",label:"Timeframe",default:"",tooltip:"Compute on a higher timeframe, using independent history when the host supports it. Values appear once their periods close."},Rt={month:1,quarter:3,year:12};function Tt(e){return"interval"===e.mode?e.seconds:"calendar"===e.mode?Rt[e.unit]*Math.max(1,Math.floor(e.count??1))*2629746:NaN}function Pt(l,o,n){const r=o[Dt];if(null==r)return null;if("string"!=typeof r)throw new e(`${l.name}: the timeframe must be an interval code`);const a=r.trim();if(""===a)return null;const i=p(a);if(null===i)throw new e(`${l.name}: "${a}" is not a known timeframe`);if(!y(i.bucketing))throw new e(`${l.name}: "${a}" bars close on trade flow, not the clock, so they cannot be folded`);const s=n?.interval,c=void 0===s||""===s?null:p(s)?.bucketing??null;if(null!==c){if(!y(c))throw new e(`${l.name}: the chart's "${s??""}" bars close on trade flow, not the clock, so they cannot be folded`);if(Tt(i.bucketing)<=Tt(c))return null}if(!0===n?.transformed)throw new e(`${l.name}: this chart draws transformed bars, which a timeframe cannot fold; compute the study on the underlying bars`);for(const t of l.inputs){const n=o[t.key];if("source"===t.type&&"object"==typeof n&&null!==n)throw new e(`${l.name}: another study's output cannot be folded to a timeframe; pick a price source`)}const u=n?.timezone??("string"==typeof o.timezone&&""!==o.timezone?o.timezone:t);return{tf:a,bucketing:i.bucketing,zone:u,known:null!==c}}function Ut(e){const t=String(Math.floor(e/60)).padStart(2,"0")+String(e%60).padStart(2,"0");return`${t}-${t}`}function $t(e,t,l){if(void 0===e)return;const{resolveSource:o,...n}=e;return{...n,interval:t,barState:{...e.barState,lastIndex:l-1}}}const It=e=>"number"==typeof e&&Number.isFinite(e)?e:null;const Et=new WeakMap,qt=e=>"object"==typeof e&&null!==e?e:null;function Vt(e,t){const l=qt(e);null!==l&&(null===t?Et.delete(l):Et.set(l,t))}function Ht(e,t={}){if(e.inputs.some(e=>e.key===Dt))throw new Error(`withTimeframe: ${e.id} already has a "${Dt}" input`);if(void 0!==e.attach)throw new Error(`withTimeframe: ${e.id} brings its own data, which a timeframe cannot fold`);const l=e.inputs.findIndex(e=>void 0!==e.group),o=l<0?[...e.inputs,Ot]:[...e.inputs.slice(0,l),Ot,...e.inputs.slice(l)],n={...e,inputs:o,calc:(t,l,o,n)=>{const r=Pt(e,l,n);if(null===r||0===t.length)return Vt(o,null),e.calc(t,l,o,n);const a="interval"===r.bucketing.mode&&r.bucketing.seconds%86400!=0?function(e,t){const l=new Map,o=dt(t);let n=NaN;for(const r of e){const e=o(r.time).index;if(e===n)continue;const a=s(r.time,t),i=60*a.hour+a.minute;l.set(i,(l.get(i)??0)+1),n=e}let r=null,a=0;for(const[e,t]of l)(t>a||t===a&&null!==r&&e<r)&&(r=e,a=t);return r}(t,r.zone):null;let i=0,c=!0;const u=wt(t,r.tf,t=>{i=t.length;const a=e.calc(t,l,o,$t(n,r.tf,i));if(i>1){const o=e.calc(t.slice(0,-1),l,{},$t(n,r.tf,i-1));c=function(e,t,l){for(const o of Object.keys(t)){const n=e[o],r=t[o];if(void 0===n||void 0===r)return!1;for(let e=0;e<l;e++)if(!Object.is(It(n[e]),It(r[e])))return!1}return!0}(o,a,i-1)}return a},{mode:"confirmed",timezone:r.zone,...null===a?{}:{session:Ut(a)}});return r.known||i!==t.length?(Vt(o,c?{tf:r.tf,zone:r.zone,sessionStart:a,identity:!1}:null),u):(Vt(o,{tf:r.tf,zone:r.zone,sessionStart:a,identity:!0}),e.calc(t,l,o,n))}};return Object.defineProperty(n,"calcTail",{value:(t,l,o,n,r,a)=>{const i=Pt(e,l,a);if(null===i)return e.calcTail?.(t,l,o,n,r,a)??null;const s=qt(r),c=null===s?void 0:Et.get(s),u=t.length;if(void 0===c||c.tf!==i.tf||c.zone!==i.zone||o<0||o>=u)return null;if(c.identity)return u===o+1?e.calcTail?.(t,l,o,n,r,a)??null:null;const p=e=>ft(i.bucketing,t[e]?.time??NaN,i.zone,c.sessionStart),y=p(o);for(let e=o+1;e<u;e++)if(p(e)!==y)return null;const f={};for(const e of Object.keys(n)){const t=n[e];if(void 0===t||t.length<=o)return null;f[e]=new Array(u-o).fill(t[o]??null)}return f},enumerable:!1,writable:!0,configurable:!0}),function(e,t,l,o){const n=new WeakMap,r=new WeakSet,a=e=>{const t=e.requestState?.();return!0===t?.supportsWarmup&&!0===t.supportsSnapshots},i=e=>{if(!a(e)||null===l(e.settings()))return!1;const t=e.dataContext?.()?.interval;try{return null!==o(e.settings(),{interval:t,barState:{isNew:!1,isConfirmed:!0,isRealtime:!1,lastIndex:0}})}catch{return!0}},s=Wt({...e,refreshOnSourceUpdate:!1,request:e=>{if(!e.requestState?.supportsWarmup||!e.requestState.supportsSnapshots)return null;const t=l(e.settings),n=e.dataContext?.interval,r=o(e.settings,{interval:n,barState:{isNew:!1,isConfirmed:!0,isRealtime:!1,lastIndex:e.bars.length-1}});return null===t||!r||!e.dataContext?.symbol||!e.bars.length||Number(e.settings.offset??0)<0?null:{symbol:e.dataContext.symbol,interval:r,...void 0===e.dataContext.exchange?{}:{exchange:e.dataContext.exchange},from:e.bars[0].time,to:e.bars[e.bars.length-1].time+1,warmupBars:t}},expression:(t,l,o)=>{const{resolveSource:n,...r}=o.calculation??{},a=o.calculation?{...r,interval:String(l.timeframe),barState:{...o.calculation.barState,lastIndex:t.length-1}}:void 0;return e.calc(t,l,{},a)}}),c=(e,t,r)=>{const i=n.get(e);return void 0!==i&&a(i)&&null!==l(t)&&null!==o(t,r)},u={...t,calc:(e,l,o,n)=>c(o,l,n)?s.calc(e,l,o,n):t.calc(e,l,o,n),attach:e=>{n.set(e.store,e);const t=s.attach({...e,setDataStatus:t=>{i(e)?(r.add(e.store),e.setDataStatus?.(t)):r.delete(e.store)&&e.setDataStatus?.({state:"ready"})},setDataRetry:t=>{(i(e)||null===t)&&e.setDataRetry?.(t)}});return()=>{n.get(e.store)===e&&n.delete(e.store),"function"==typeof t&&t()}}};return Object.defineProperty(u,"calcTail",{enumerable:!1,configurable:!0,writable:!0,value:(...e)=>c(e[4],e[1],e[5])?null:t.calcTail?.(...e)??null}),u}(e,n,t.historyBars??(t=>function(e,t){const l=(e,l)=>Math.max(1,Math.round(Number(t[e]??l))),o=l("length",20),n=Math.max(0,Math.round(Number(t.offset??0)));switch(e){case"sma":case"ema":case"wma":return l("length",9);case"vwma":case"lsma":case"donchian":return o+n;case"alma":case"smma":case"mcginley-dynamic":case"bollinger":case"envelope":return o;case"dema":return 2*o-1;case"tema":return 3*o-2;case"t3":return 6*o-5;case"hma":return o+Math.ceil(Math.sqrt(o));case"zlema":return o+Math.floor((o-1)/2);case"kama":return l("erLength",10)+1;case"vidya":return o+l("cmoLength",9)+1;case"rsi":return l("length",14)+1;case"macd":return Math.max(l("fastPeriod",12),l("slowPeriod",26))+l("signalPeriod",9)-1;case"stochastic":return l("kPeriod",14)+l("kSmoothing",1)+l("dPeriod",3)-2;case"stochastic-rsi":return l("lengthRSI",14)+l("lengthStoch",14)+l("smoothK",3)+l("smoothD",3);case"adx":return l("period",14)+l("adxPeriod",14);case"atr":case"supertrend":return l("period",14)+1;case"keltner-channel":return Math.max(o,l("atrlength",10))+1;case"parabolic-sar":return 2;case"williams-percent-r":return l("length",14);case"cci":return l("period",20);default:return null}}(e.id,t)),(t,l)=>Pt(e,t,l)?.tf??null)}const zt=(e,t,l)=>{const o=e[t];return"number"==typeof o&&Number.isFinite(o)?o:l},jt=(e,t,l,o=1)=>Math.max(o,Math.round(zt(e,t,l))),Zt=(e,t,l)=>Math.round(zt(e,t,l)),Yt=(e,t,l)=>{const o=e[t];return"string"==typeof o&&""!==o?o:l},Jt=(e,t,l)=>{const o=e[t];return"boolean"==typeof o?o:l},Gt=(e,t="source",l="close")=>e[t]??l,Xt=e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===t?t:f(l)?l:t};function _t(e,t){const l=e.length,o=new Array(l).fill(NaN);for(let n=Math.max(0,t),r=Math.min(l,l+t);n<r;n++)o[n]=e[n-t];return o}function Qt(e,t){const l=new Array(e.length).fill(!1);for(let o=t;o<e.length;o++)l[o]=e[o-t];return l}const el=(e,t)=>new Array(e).fill(t),tl=e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0;function ll(e,t,l){const o=new Array(e.length);for(let n=0;n<e.length;n++)o[n]=l(e[n],t[n]);return o}const ol=e=>Math.floor((Math.floor((e+h)/86400)+3)/7);function nl(e,l){return l!==t?(t,o)=>d(t,o,e,l):"week"===e?(e,t)=>ol(e)!==ol(t):(t,l)=>{const o=m(t),n=m(l);return o.year!==n.year||"year"!==e&&("quarter"===e?Math.floor((o.month-1)/3)!==Math.floor((n.month-1)/3):o.month!==n.month)}}function rl(e,t,l,o,n){return Ze({id:e,name:t,category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close",allowStudyOutputs:!0},{key:"color",type:"color",label:"Color",default:l}],plots:[{key:"ma",type:"line",title:t,colorKey:"color",style:{color:l,lineWidth:1.5}}],calc:(e,t,l,n)=>{const r=Gt(t),a="string"==typeof r?b(e,r):b(e,r,n).map(e=>e??NaN);return{ma:he(o(a,jt(t,"length",9),"string"==typeof r?void 0:{missing:"propagate"}))}}},e=>n?function(e){return(t,l,o,n,r,a)=>{const i=jt(l,"length",9);if(!ze(i))return null;const s=Gt(l);if("string"==typeof s)return et(e,`${i}|${s}`,{keys:["ma"],start:lt,step:(e,l,o)=>{o[0]=He(ot(e,k(t[l],s),i,!0))}},t,o,n,r);if(void 0===Ye(r,e,t,o))return null;const c=a?.resolveSource?.(s);return Array.isArray(c)&&c.length===t.length?et(e,`${i}|${s.instanceId}|${s.plotKey}`,{keys:["ma"],start:nt,step:(e,t,l)=>{l[0]=He(function(e,t,l){if(!Number.isFinite(t))return e.count=0,e.seed.length=0,e.value=NaN,NaN;if(e.count<l){if(e.seed.push(t),++e.count<l)return NaN;e.value=ne(e.seed),e.seed.length=0}else e.value=ne([e.value,t],[l-1,2]);return e.value}(e,c[t]??NaN,i))}},t,o,n,r):null}}(e):function(e,t){const l=Qe(e,e=>{const t=jt(e,"length",9);return ze(t)?t-1:null});return(o,n,r,a,i,s)=>{const c=Gt(n);if("string"==typeof c)return l(o,n,r,a,i,s);const u=jt(n,"length",9),p=Ye(i,e,o,r),y=void 0===p?void 0:s?.resolveSource?.(c);if(void 0===p||!ze(u)||!Array.isArray(y)||y.length!==o.length)return null;const f=Math.max(0,r-u),d=y.slice(f).map(e=>e??NaN);return _e(p,{ma:he(t(d,u,{missing:"propagate"}))},r-f,a,r)}}(e,o))}const al=Ht(rl("sma","SMA","#4f8cff",ce,!1)),il=Ht(rl("wma","WMA","#ab47bc",ue,!1)),sl=Ht(rl("ema","EMA","#f5a623",be,!0));const cl=Ht(Ze({id:"bollinger",name:"Bollinger Bands",category:"Volatility",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:2,max:1e3,step:1},{key:"stdDev",type:"number",label:"StdDev",default:2,min:.1,max:10,step:.1},{key:"source",type:"source",label:"Source",default:"close"},{key:"basisColor",type:"color",label:"Basis",default:"#f5a623"},{key:"bandColor",type:"color",label:"Bands",default:"#4f8cff"}],plots:[{key:"upper",type:"line",title:"BB Upper",colorKey:"bandColor",style:{lineWidth:1}},{key:"basis",type:"line",title:"BB Basis",colorKey:"basisColor",style:{lineWidth:1.5}},{key:"lower",type:"line",title:"BB Lower",colorKey:"bandColor",style:{lineWidth:1}}],calc:function(e,t){const l=b(e,Gt(t)),o=jt(t,"length",20),n=zt(t,"stdDev",2),r=ce(l,o),a=fe(l,o),i=ll(r,a,(e,t)=>e+n*t),s=ll(r,a,(e,t)=>e-n*t);return{upper:he(i),basis:he(r),lower:he(s)}}},e=>Qe(e,e=>{const t=jt(e,"length",20);return ze(t)?t-1:null})));function ul(e,t,l){if("continuous"===t)return new Array(e.length).fill(!1);const o=e.map(e=>e.time);return"session"===t?v(o,l):N(o,nl(t,l))}const pl=e=>e.median>0&&e.median<86400,yl=e=>Math.max(4*e.median,14400),fl=e=>pl(e)&&e.opens>0&&e.short>e.opens>>1;function dl(e,t){const l=[];for(let t=1;t<e.length;t++)e[t]>e[t-1]&&l.push(e[t]-e[t-1]);l.sort((e,t)=>e-t);const o=0===l.length?0:l[l.length>>1],n={gaps:l.length,median:o,below:0,equal:0,opens:0,short:0,open:e[0],last:e[e.length-1],flag:t};for(const e of l)e<o?n.below++:e===o&&n.equal++;if(pl(n))for(let t=1;t<e.length;t++)e[t]-e[t-1]<yl(n)||(n.opens++,e[t]-n.open<=129600&&n.short++,n.open=e[t]);return n}const ml=Ze({id:"vwap",name:"VWAP",category:"Volume",placement:"onchart",inputs:[{key:"anchor",type:"select",label:"Anchor Period",default:"session",options:[{label:"Session",value:"session"},{label:"Week",value:"week"},{label:"Month",value:"month"},{label:"Quarter",value:"quarter"},{label:"Year",value:"year"},{label:"Continuous",value:"continuous"}]},{key:"source",type:"source",label:"Source",default:"hlc3"},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"calcMode",type:"select",label:"Bands Calculation Mode",default:"stdev",options:[{label:"Standard Deviation",value:"stdev"},{label:"Percentage",value:"percent"}],group:"Bands"},{key:"showBand1",type:"boolean",label:"Band #1",default:!0,group:"Bands"},{key:"bandMult1",type:"number",label:"Bands Multiplier #1",default:1,min:0,step:.5,group:"Bands"},{key:"showBand2",type:"boolean",label:"Band #2",default:!1,group:"Bands"},{key:"bandMult2",type:"number",label:"Bands Multiplier #2",default:2,min:0,step:.5,group:"Bands"},{key:"showBand3",type:"boolean",label:"Band #3",default:!1,group:"Bands"},{key:"bandMult3",type:"number",label:"Bands Multiplier #3",default:3,min:0,step:.5,group:"Bands"},{key:"color",type:"color",label:"VWAP",default:"#2962ff"},{key:"band1Color",type:"color",label:"Band #1",default:"#4caf50",group:"Bands"},{key:"band2Color",type:"color",label:"Band #2",default:"#808000",group:"Bands"},{key:"band3Color",type:"color",label:"Band #3",default:"#00bcd4",group:"Bands"}],plots:[{key:"vwap",type:"line",title:"VWAP",colorKey:"color",style:{lineWidth:1.5}},{key:"upper1",type:"line",title:"Upper Band #1",colorKey:"band1Color",style:{lineWidth:1}},{key:"lower1",type:"line",title:"Lower Band #1",colorKey:"band1Color",style:{lineWidth:1}},{key:"upper2",type:"line",title:"Upper Band #2",colorKey:"band2Color",style:{lineWidth:1}},{key:"lower2",type:"line",title:"Lower Band #2",colorKey:"band2Color",style:{lineWidth:1}},{key:"upper3",type:"line",title:"Upper Band #3",colorKey:"band3Color",style:{lineWidth:1}},{key:"lower3",type:"line",title:"Lower Band #3",colorKey:"band3Color",style:{lineWidth:1}}],fills:[{between:["upper1","lower1"],colorUpKey:"band1Color",colorDownKey:"band1Color",opacity:.05},{between:["upper2","lower2"],colorUpKey:"band2Color",colorDownKey:"band2Color",opacity:.05},{between:["upper3","lower3"],colorUpKey:"band3Color",colorDownKey:"band3Color",opacity:.05}],calc:(e,t)=>{const l=e.length,o=b(e,Gt(t,"source","hlc3")),n=Yt(t,"anchor","session"),r="percent"===t.calcMode,a=Zt(t,"offset",0),i=new Array(l).fill(NaN),s=new Array(l).fill(NaN),c=ul(e,n,Xt(t));let u=0,p=0,y=0;for(let t=0;t<l;t++){c[t]&&(u=0,p=0,y=0);const l=e[t].volume??0,n=o[t];if(!Number.isFinite(n)||!Number.isFinite(l))continue;if(u+=n*l,y+=n*n*l,p+=l,p<=0)continue;const a=u/p;i[t]=a;const f=Math.max(0,y/p-a*a);s[t]=r?.01*a:Math.sqrt(f)}const f=(e,t,o)=>{const n=new Array(l).fill(NaN);if(!e)return n;for(let e=0;e<l;e++)Number.isFinite(i[e])&&Number.isFinite(s[e])&&(n[e]=i[e]+o*s[e]*t);return n},d=!1!==t.showBand1,m=!0===t.showBand2,h=!0===t.showBand3,g=zt(t,"bandMult1",1),w=zt(t,"bandMult2",2),k=zt(t,"bandMult3",3);return{vwap:he(_t(i,a)),upper1:he(_t(f(d,g,1),a)),lower1:he(_t(f(d,g,-1),a)),upper2:he(_t(f(m,w,1),a)),lower2:he(_t(f(m,w,-1),a)),upper3:he(_t(f(h,k,1),a)),lower3:he(_t(f(h,k,-1),a))}}},function(e){return(l,o,n,r,a)=>{const i=l.length;if(0!==Zt(o,"offset",0)||i-n>2)return null;const s=Gt(o,"source","hlc3"),c=Yt(o,"anchor","session"),u=Xt(o),p="percent"===o.calcMode,y=[!1!==o.showBand1,!0===o.showBand2,!0===o.showBand3],f=[zt(o,"bandMult1",1),zt(o,"bandMult2",2),zt(o,"bandMult3",3)];let d=[],m=[];return et(e,`${c}|${s}|${u}|${p}|${y.join()}|${f.join()}`,{keys:["vwap","upper1","lower1","upper2","lower2","upper3","lower3"],start:()=>{const e=n+1===i?l:l.slice(0,n+1);return d=ul(e,c,u),{pv:0,vol:0,pv2:0,reading:"continuous"===c?null:dl(e.map(e=>e.time),d[n])}},ready:e=>{const o=e.reading;if(null===o||"continuous"===c)return m=[!1,!1],!0;if(o.last!==l[n].time)return!1;const r=o.flag,a=i===n+2&&function(e,l,o,n){const r=fl(e),a=l-e.last;if(a>0){if(0===e.gaps)return null;const t=e.gaps+1>>1,l=e.below+(a<e.median?1:0),o=e.equal+(a===e.median?1:0);if(l>t||t>=l+o)return null;e.gaps++,e.below=l,e.equal=o}const i=pl(e)&&a>=yl(e),s=e.open,c=e.last;return i&&(e.opens++,l-e.open<=129600&&e.short++,e.open=l),fl(e)!==r?null:(e.last=l,e.flag="session"===o?r?i:n===t?C(c,l):M(c,l,n):r?i&&nl(o,n)(s,l):nl(o,n)(c,l),e.flag)}(o,l[i-1].time,c,u);return m=[r,!0===a],null!==a},step:(e,t,o)=>{(t<n?d[t]:m[t-n])&&(e.pv=0,e.vol=0,e.pv2=0);const r=l[t],a=r.volume??0,i=k(r,s);let c=NaN,u=NaN;if(Number.isFinite(i)&&Number.isFinite(a)&&(e.pv+=i*a,e.pv2+=i*i*a,e.vol+=a,e.vol>0)){c=e.pv/e.vol;const t=Math.max(0,e.pv2/e.vol-c*c);u=p?.01*c:Math.sqrt(t)}o[0]=He(c);const h=Number.isFinite(c)&&Number.isFinite(u);for(let e=0;e<3;e++)o[1+2*e]=y[e]&&h?He(c+u*f[e]):null,o[2+2*e]=y[e]&&h?He(c-u*f[e]):null}},l,n,r,a)}}),hl=Ht(Ze({id:"supertrend",name:"Supertrend",category:"Trend",placement:"onchart",inputs:[{key:"period",type:"number",label:"ATR Period",default:10,min:1,max:200,step:1},{key:"multiplier",type:"number",label:"Multiplier",default:3,min:.1,max:20,step:.1},{key:"upColor",type:"color",label:"Uptrend",default:"#26a69a"},{key:"downColor",type:"color",label:"Downtrend",default:"#ef5350"}],plots:[{key:"up",type:"line",title:"Supertrend Up",colorKey:"upColor",style:{lineWidth:2}},{key:"down",type:"line",title:"Supertrend Down",colorKey:"downColor",style:{lineWidth:2}}],fills:[{between:["bodyMid","up"],colorUpKey:"upColor",colorDownKey:"upColor",opacity:.1},{between:["bodyMid","down"],colorUpKey:"downColor",colorDownKey:"downColor",opacity:.1}],calc:(e,t)=>{const l=g(e,jt(t,"period",10),zt(t,"multiplier",3)),o=[],n=[],r=[];for(let t=0;t<l.length;t++){const a=l[t],i=Number.isFinite(a.value);o.push(i&&-1===a.direction?a.value:null),n.push(i&&1===a.direction?a.value:null);const s=e[t];r.push(i&&void 0!==s?(s.open+s.close)/2:null)}return{up:o,down:n,bodyMid:r}}},e=>(t,l,o,n,r)=>{const a=jt(l,"period",10),i=zt(l,"multiplier",3);if(!ze(a))return null;const s={direction:1};return et(e,`${a}|${i}`,{keys:["up","down","bodyMid"],start:ct,step:(e,l,o)=>{const n=function(e,t,l,o,n,r){const a=it(e.atr,rt(t,l),o),i=t[l],s=i.close;if(!Number.isFinite(a)||!Number.isFinite(s))return NaN;const c=(i.high+i.low)/2,u=c+n*a,p=c-n*a,y=e.started?u<e.upper||e.close>e.upper?u:e.upper:u,f=e.started?p>e.lower||e.close<e.lower?p:e.lower:p;let d;return e.started&&e.st!==e.upper?s>=f?(d=f,r.direction=-1):(d=y,r.direction=1):s<=y?(d=y,r.direction=1):(d=f,r.direction=-1),e.upper=y,e.lower=f,e.st=d,e.close=s,e.started=!0,d}(e,t,l,a,i,s),r=Number.isFinite(n),c=t[l];o[0]=r&&-1===s.direction?n:null,o[1]=r&&1===s.direction?n:null,o[2]=r&&void 0!==c?(c.open+c.close)/2:null}},t,o,n,r)})),bl=Ht(Ze({id:"parabolic-sar",name:"Parabolic SAR",category:"Trend",placement:"onchart",inputs:[{key:"start",type:"number",label:"Start",default:.02,min:.001,max:1,step:.001},{key:"increment",type:"number",label:"Increment",default:.02,min:.001,max:1,step:.001},{key:"maximum",type:"number",label:"Maximum",default:.2,min:.01,max:1,step:.01},{key:"color",type:"color",label:"Color",default:"#e0b020"}],plots:[{key:"sar",type:"line",title:"SAR",colorKey:"color",style:{markersOnly:!0,markerRadius:1.5}}],calc:(e,t)=>{const l=e.length,o=new Array(l).fill(NaN),n=zt(t,"start",.02),r=zt(t,"increment",.02),a=zt(t,"maximum",.2);let i,s,c=!1,u=NaN,p=NaN,y=n;for(let t=0;t<l;t++){const l=e[t];Number.isFinite(l.high)&&Number.isFinite(l.low)&&Number.isFinite(l.close)&&(void 0!==i?void 0!==s?(u+=y*(p-u),c&&l.low<u?(c=!1,u=Math.max(p,l.high),p=l.low,y=n):!c&&l.high>u?(c=!0,u=Math.min(p,l.low),p=l.high,y=n):c&&l.high>p?(p=l.high,y=Math.min(a,y+r)):!c&&l.low<p&&(p=l.low,y=Math.min(a,y+r)),u=c?Math.min(u,i.low,s.low):Math.max(u,i.high,s.high),o[t]=u,s=i,i=l):(c=l.close>=i.close,u=c?i.low:i.high,p=c?l.high:l.low,o[t]=u,s=i,i=l):i=l)}return{sar:he(o)}}},e=>(t,l,o,n,r)=>{const a=zt(l,"start",.02),i=zt(l,"increment",.02),s=zt(l,"maximum",.2);return et(e,`${a}|${i}|${s}`,{keys:["sar"],start:()=>(e=>({prev:null,prev2:null,rising:!1,sar:NaN,ep:NaN,af:e}))(a),step:(e,l,o)=>{o[0]=He(function(e,t,l,o,n){if(!Number.isFinite(t.high)||!Number.isFinite(t.low)||!Number.isFinite(t.close))return NaN;const r=e.prev;if(null===r)return e.prev=t,NaN;if(null===e.prev2)return e.rising=t.close>=r.close,e.sar=e.rising?r.low:r.high,e.ep=e.rising?t.high:t.low,e.prev2=r,e.prev=t,e.sar;const a=e.prev2;let i=e.sar+e.af*(e.ep-e.sar);return e.rising&&t.low<i?(e.rising=!1,i=Math.max(e.ep,t.high),e.ep=t.low,e.af=l):!e.rising&&t.high>i?(e.rising=!0,i=Math.min(e.ep,t.low),e.ep=t.high,e.af=l):e.rising&&t.high>e.ep?(e.ep=t.high,e.af=Math.min(n,e.af+o)):!e.rising&&t.low<e.ep&&(e.ep=t.low,e.af=Math.min(n,e.af+o)),i=e.rising?Math.min(i,r.low,a.low):Math.max(i,r.high,a.high),e.sar=i,e.prev2=r,e.prev=t,i}(e,t[l],a,i,s))}},t,o,n,r)})),gl={id:"ichimoku",name:"Ichimoku Cloud",category:"Trend",placement:"onchart",inputs:[{key:"conversionPeriod",type:"number",label:"Conversion",default:9,min:1,max:200,step:1},{key:"basePeriod",type:"number",label:"Base",default:26,min:1,max:200,step:1},{key:"laggingSpanPeriod",type:"number",label:"Lagging Span",default:52,min:1,max:400,step:1},{key:"displacement",type:"number",label:"Displacement",default:26,min:0,max:200,step:1},{key:"conversionColor",type:"color",label:"Conversion",default:"#4f8cff"},{key:"baseColor",type:"color",label:"Base",default:"#ef5350"},{key:"spanAColor",type:"color",label:"Span A",default:"#26a69a"},{key:"spanBColor",type:"color",label:"Span B",default:"#ab47bc"},{key:"laggingColor",type:"color",label:"Lagging",default:"#8892a6"},{key:"cloudUpColor",type:"color",label:"Cloud up",default:"#26a69a"},{key:"cloudDownColor",type:"color",label:"Cloud down",default:"#ef5350"}],plots:[{key:"conversion",type:"line",title:"Tenkan-sen",colorKey:"conversionColor",style:{lineWidth:1}},{key:"base",type:"line",title:"Kijun-sen",colorKey:"baseColor",style:{lineWidth:1}},{key:"spanA",type:"line",title:"Senkou Span A",colorKey:"spanAColor",style:{lineWidth:1}},{key:"spanB",type:"line",title:"Senkou Span B",colorKey:"spanBColor",style:{lineWidth:1}},{key:"lagging",type:"line",title:"Chikou Span",colorKey:"laggingColor",style:{lineWidth:1}}],fills:[{between:["spanA","spanB"],colorUpKey:"cloudUpColor",colorDownKey:"cloudDownColor",opacity:.14}],calc:(e,t)=>{const l=e.length,o=jt(t,"conversionPeriod",9),n=jt(t,"basePeriod",26),r=jt(t,"laggingSpanPeriod",52),a=Zt(t,"displacement",26),i=t=>{const o=new Array(l).fill(NaN);for(let n=t-1;n<l;n++){let l=-1/0,r=1/0;for(let o=0;o<t;o++){const t=e[n-o];t.high>l&&(l=t.high),t.low<r&&(r=t.low)}o[n]=(l+r)/2}return o},s=i(o),c=i(n),u=ll(s,c,(e,t)=>(e+t)/2),p=i(r),y=e.map(e=>e.close);return{conversion:he(s),base:he(c),spanA:he(_t(u,a)),spanB:he(_t(p,a)),lagging:he(_t(y,-a))}}},wl={id:"halftrend",name:"HalfTrend",category:"Trend",placement:"onchart",inputs:[{key:"amplitude",type:"number",label:"Amplitude",default:2,min:1,max:100,step:1},{key:"channelDeviation",type:"number",label:"Channel Deviation",default:2,min:0,max:20,step:.1},{key:"atrPeriod",type:"number",label:"ATR Period",default:100,min:1,max:500,step:1},{key:"showChannels",type:"boolean",label:"Show Channels",default:!0},{key:"showSignals",type:"boolean",label:"Show Signals",default:!0},{key:"showLabels",type:"boolean",label:"Show Buy/Sell Labels",default:!0},{key:"upColor",type:"color",label:"Uptrend",default:"#2962ff"},{key:"downColor",type:"color",label:"Downtrend",default:"#ef5350"}],plots:[{key:"up",type:"line",title:"HalfTrend Up",colorKey:"upColor",style:{lineWidth:2}},{key:"down",type:"line",title:"HalfTrend Down",colorKey:"downColor",style:{lineWidth:2}},{key:"atrHigh",type:"line",title:"Channel High",colorKey:"downColor",style:{markersOnly:!0,markerRadius:1}},{key:"atrLow",type:"line",title:"Channel Low",colorKey:"upColor",style:{markersOnly:!0,markerRadius:1}},{key:"buySignal",type:"line",title:"Buy",colorKey:"upColor",style:{markersOnly:!0,markerRadius:3.5}},{key:"sellSignal",type:"line",title:"Sell",colorKey:"downColor",style:{markersOnly:!0,markerRadius:3.5}}],fills:[{between:["up","atrLow"],colorUpKey:"upColor",colorDownKey:"upColor",opacity:.15},{between:["down","atrHigh"],colorUpKey:"downColor",colorDownKey:"downColor",opacity:.15}],markers:({bars:e,values:t,settings:l})=>{if(!1===l.showLabels)return[];const o=t.buySignal??[],n=t.sellSignal??[],r=[];for(let t=0;t<e.length;t++){const a=o[t];if(null!=a){r.push({time:e[t].time,position:"atPrice",price:a,shape:"labelUp",size:"small",color:Yt(l,"upColor","#2962ff"),text:"Buy"});continue}const i=n[t];null!=i&&r.push({time:e[t].time,position:"atPrice",price:i,shape:"labelDown",size:"small",color:Yt(l,"downColor","#ef5350"),text:"Sell"})}return r},calc:(e,t)=>{const l=e.length,o=new Array(l).fill(null),n=new Array(l).fill(null),r=new Array(l).fill(null),a=new Array(l).fill(null),i=new Array(l).fill(null),s=new Array(l).fill(null),c={up:o,down:n,atrHigh:r,atrLow:a,buySignal:i,sellSignal:s};if(0===l)return c;const u=jt(t,"amplitude",2),p=zt(t,"channelDeviation",2),y=!1!==t.showChannels,f=!1!==t.showSignals,d=e.map(e=>e.high),m=e.map(e=>e.low),h=w(d,m,e.map(e=>e.close),jt(t,"atrPeriod",100)),b=ce(d,u),g=ce(m,u),k=de(d,u),v=me(m,u);let N=0,C=0,M=m[0],x=d[0],A=0,S=0,L=!1;for(let t=0;t<l;t++){const l=h[t]/2,c=p*l,u=k[t],w=v[t],B=t>0?d[t-1]:d[0],F=t>0?m[t-1]:m[0],K=L?N:-1;let W;1===C?(Number.isFinite(w)&&(M=Math.max(w,M)),Number.isFinite(b[t])&&b[t]<M&&e[t].close<F&&(N=1,C=0,x=u)):(Number.isFinite(u)&&(x=Math.min(u,x)),Number.isFinite(g[t])&&g[t]>x&&e[t].close>B&&(N=0,C=1,M=w)),0===N?(1===K?(A=S,f&&Number.isFinite(l)&&(i[t]=A-l)):A=-1===K?M:Math.max(M,A),W=A):(0===K?(S=A,f&&Number.isFinite(l)&&(s[t]=S+l)):S=-1===K?x:Math.min(x,S),W=S),L=!0,Number.isFinite(W)&&(0===N?o[t]=W:n[t]=W,y&&Number.isFinite(c)&&(r[t]=W+c,a[t]=W-c))}return c}},kl=[{label:"None",value:"None"},{label:"SMA",value:"SMA"},{label:"SMA + Bollinger Bands",value:"SMA + Bollinger Bands"},{label:"EMA",value:"EMA"},{label:"SMMA (RMA)",value:"SMMA (RMA)"},{label:"WMA",value:"WMA"},{label:"VWMA",value:"VWMA"}];function vl(e,t){const l=e.length,o=new Array(l).fill(NaN);let n=0;for(;n<l&&!Number.isFinite(e[n]);)n+=1;if(n>=l)return o;const r=t(e.slice(n),n);for(let e=0;e<r.length&&n+e<l;e++)o[n+e]=r[e];return o}function Nl(e,t){return vl(e,e=>be(e,t))}function Cl(e,t,l,o){switch(e){case"EMA":return Nl(t,o);case"SMMA (RMA)":return vl(t,e=>ye(e,o));case"WMA":return vl(t,e=>ue(e,o));case"VWMA":return vl(t,(e,t)=>Ce(e,l.slice(t),o));default:return vl(t,e=>ce(e,o))}}function Ml(e,t,l){return[{key:"maType",type:"select",label:"Type",default:t,options:kl,group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:l,min:1,max:500,step:1,group:"Smoothing"},{key:"bbMult",type:"number",label:"BB StdDev",default:2,min:.001,max:50,step:.5,group:"Smoothing"},{key:"maColor",type:"color",label:`${e}-based MA`,default:"#ffeb3b",group:"Smoothing"},{key:"bbUpperColor",type:"color",label:"Upper Bollinger Band",default:"#4caf50",group:"Smoothing"},{key:"bbLowerColor",type:"color",label:"Lower Bollinger Band",default:"#4caf50",group:"Smoothing"}]}function xl(e){return[{key:"ma",type:"line",title:`${e}-based MA`,colorKey:"maColor",style:{lineWidth:1.5}},{key:"bbUpper",type:"line",title:"Upper Bollinger Band",colorKey:"bbUpperColor",style:{lineWidth:1}},{key:"bbLower",type:"line",title:"Lower Bollinger Band",colorKey:"bbLowerColor",style:{lineWidth:1}}]}function Al(e,t,l,o,n){const r=e.length,a=Yt(l,"maType",o),i=jt(l,"maLength",n),s=zt(l,"bbMult",2),c="None"===a?new Array(r).fill(NaN):Cl(a,e,t,i),u="SMA + Bollinger Bands"===a?vl(e,e=>fe(e,i)).map(e=>e*s):new Array(r).fill(NaN);return{ma:he(c),bbUpper:he(ll(c,u,(e,t)=>e+t)),bbLower:he(ll(c,u,(e,t)=>e-t))}}const Sl=Ht(Ze({id:"rsi",name:"RSI",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"Color",default:"#e0b020"},{key:"overbought",type:"number",label:"Overbought",default:70,min:50,max:100,step:1},{key:"oversold",type:"number",label:"Oversold",default:30,min:0,max:50,step:1},{key:"bandColor",type:"color",label:"Background",default:"#7e57c2"}],plots:[{key:"rsi",type:"line",title:"RSI",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1}],calc:(e,t)=>({rsi:he(x(b(e,Gt(t)),jt(t,"length",14))),upperLevel:el(e.length,zt(t,"overbought",70)),lowerLevel:el(e.length,zt(t,"oversold",30))}),levels:e=>[{price:zt(e,"overbought",70),color:"#ef5350",title:"OB",dashed:!0},{price:50,color:"#5a6b8c",title:"",dashed:!0},{price:zt(e,"oversold",30),color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},e=>(t,l,o,n,r)=>{const a=jt(l,"length",14);if(!ze(a))return null;const i=Gt(l),s=zt(l,"overbought",70),c=zt(l,"oversold",30);return et(e,`${a}|${i}|${s}|${c}`,{keys:["rsi","upperLevel","lowerLevel"],start:st,step:(e,l,o)=>{o[0]=He(function(e,t,l){const o=t-e.last;if(e.last=t,!e.primed)return e.primed=!0,NaN;if(!Number.isFinite(o))return e.run=0,e.recent.length=0,NaN;e.run++;const n=o>0?o:0,r=o<0?-o:0;if(e.gainSeeded&&(e.gain=(e.gain*(l-1)+n)/l),e.lossSeeded&&(e.loss=(e.loss*(l-1)+r)/l),!e.gainSeeded||!e.lossSeeded){const t=e.recent;if(t.push(o),t.length>l&&t.shift(),e.run>=l){let o=0,n=0;for(let e=0;e<t.length;e++){const l=t[e];l>=0?o+=l:n-=l}!e.gainSeeded&&Number.isFinite(o/l)&&(e.gain=o/l,e.gainSeeded=!0),!e.lossSeeded&&Number.isFinite(n/l)&&(e.loss=n/l,e.lossSeeded=!0)}}if(Number.isFinite(e.gain)&&Number.isFinite(e.loss)){const t=0===e.loss?100:100-100/(1+e.gain/e.loss);if(Number.isFinite(t))return t}return NaN}(e,k(t[l],i),a)),o[1]=s,o[2]=c}},t,o,n,r)})),Ll=Ht(Ze({id:"macd",name:"MACD",category:"Momentum",placement:"pane",inputs:[{key:"fastPeriod",type:"number",label:"Fast",default:12,min:1,max:500,step:1},{key:"slowPeriod",type:"number",label:"Slow",default:26,min:1,max:500,step:1},{key:"signalPeriod",type:"number",label:"Signal",default:9,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"macdColor",type:"color",label:"MACD",default:"#2962ff"},{key:"histUpColor",type:"color",label:"Histogram up",default:"#26a69a"},{key:"histUpFadeColor",type:"color",label:"Histogram up (weakening)",default:"#a7d8d2"},{key:"histDownColor",type:"color",label:"Histogram down",default:"#ef5350"},{key:"histDownFadeColor",type:"color",label:"Histogram down (weakening)",default:"#f5b0ae"},{key:"signalColor",type:"color",label:"Signal",default:"#ff6d00"}],plots:[{key:"histogram",type:"histogram",title:"Histogram",style:{color:"#3a4666",base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.histogram?.[t-1],r=null==n||!Number.isFinite(n)||e>=n;return e>=0?r?Yt(o,"histUpColor","#26a69a"):Yt(o,"histUpFadeColor","#a7d8d2"):r?Yt(o,"histDownFadeColor","#f5b0ae"):Yt(o,"histDownColor","#ef5350")}},{key:"macd",type:"line",title:"MACD",colorKey:"macdColor",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,Gt(t)),o=ll(be(l,jt(t,"fastPeriod",12)),be(l,jt(t,"slowPeriod",26)),(e,t)=>e-t),n=vl(o,e=>be(e,jt(t,"signalPeriod",9))),r=ll(o,n,(e,t)=>e-t);return{macd:he(o),signal:he(n),histogram:he(r)}},levels:()=>[{price:0,color:"#5a6b8c",dashed:!0}]},e=>(t,l,o,n,r)=>{const a=jt(l,"fastPeriod",12),i=jt(l,"slowPeriod",26),s=jt(l,"signalPeriod",9);if(!ze(a)||!ze(i)||!ze(s))return null;const c=Gt(l);return et(e,`${a}|${i}|${s}|${c}`,{keys:["macd","signal","histogram"],start:()=>({fast:{run:0,value:NaN,seeded:!1,recent:[]},slow:{run:0,value:NaN,seeded:!1,recent:[]},signal:{run:0,value:NaN,seeded:!1,recent:[]}}),step:(e,l,o)=>{const n=k(t[l],c),r=ot(e.fast,n,a,!0)-ot(e.slow,n,i,!0),u=ot(e.signal,r,s,!0);o[0]=He(r),o[1]=He(u),o[2]=He(r-u)}},t,o,n,r)})),Bl=Ht(Ze({id:"stochastic",name:"Stochastic",category:"Momentum",placement:"pane",inputs:[{key:"kPeriod",type:"number",label:"%K Length",default:14,min:1,max:500,step:1},{key:"kSmoothing",type:"number",label:"%K Smoothing",default:1,min:1,max:100,step:1},{key:"dPeriod",type:"number",label:"%D Smoothing",default:3,min:1,max:100,step:1},{key:"kColor",type:"color",label:"%K",default:"#4f8cff"},{key:"dColor",type:"color",label:"%D",default:"#f5a623"},{key:"bandColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"k",type:"line",title:"%K",colorKey:"kColor",style:{lineWidth:1.5}},{key:"d",type:"line",title:"%D",colorKey:"dColor",style:{lineWidth:1.5}}],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1}],calc:(e,t)=>{const l=de(e.map(e=>e.high),jt(t,"kPeriod",14)),o=me(e.map(e=>e.low),jt(t,"kPeriod",14)),n=e.map((e,t)=>{const n=l[t]-o[t];return n>0&&n<1/0?100*(e.close-o[t])/n:NaN}),r=ce(n,jt(t,"kSmoothing",1)),a=ce(r,jt(t,"dPeriod",3));return{k:he(r),d:he(a),upperLevel:el(e.length,80),lowerLevel:el(e.length,20)}},levels:()=>[{price:80,color:"#ef5350",title:"OB",dashed:!0},{price:20,color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},e=>Qe(e,e=>{const t=jt(e,"kPeriod",14),l=jt(e,"kSmoothing",1),o=jt(e,"dPeriod",3);return ze(t)&&ze(l)&&ze(o)?t+l+o-3:null}))),Fl=Ht(Ze({id:"adx",name:"ADX / DMI",category:"Trend",placement:"pane",inputs:[{key:"period",type:"number",label:"DI Length",default:14,min:1,max:500,step:1},{key:"adxPeriod",type:"number",label:"ADX Smoothing",default:14,min:1,max:500,step:1},{key:"adxColor",type:"color",label:"ADX",default:"#e0e3ea"},{key:"plusColor",type:"color",label:"+DI",default:"#26a69a"},{key:"minusColor",type:"color",label:"-DI",default:"#ef5350"}],plots:[{key:"plusDi",type:"line",title:"+DI",colorKey:"plusColor",style:{lineWidth:1}},{key:"minusDi",type:"line",title:"-DI",colorKey:"minusColor",style:{lineWidth:1}},{key:"adx",type:"line",title:"ADX",colorKey:"adxColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=jt(t,"period",14),n=e.map(e=>e.high),r=e.map(e=>e.low),a=e.map(e=>e.close),i=A(n,r,a);l>0&&(i[0]=NaN);const s=new Array(l).fill(NaN),c=new Array(l).fill(NaN);for(let e=1;e<l;e++){if(!(Number.isFinite(n[e])&&Number.isFinite(r[e])&&Number.isFinite(n[e-1])&&Number.isFinite(r[e-1])))continue;const t=n[e]-n[e-1],l=r[e-1]-r[e];s[e]=t>l&&t>0?t:0,c[e]=l>t&&l>0?l:0}const u=ye(i,o),p=ye(s,o),y=ye(c,o),f=new Array(l).fill(NaN),d=new Array(l).fill(NaN),m=new Array(l).fill(NaN);for(let e=0;e<l;e++){const t=u[e];if(!Number.isFinite(t)||0===t)continue;const l=p[e]/t*100,o=y[e]/t*100;if(Number.isFinite(l)&&(f[e]=l),Number.isFinite(o)&&(d[e]=o),!Number.isFinite(f[e])||!Number.isFinite(d[e]))continue;const n=f[e]+d[e];m[e]=n>0?Math.abs(f[e]-d[e])/n*100:0}const h=vl(m,e=>ye(e,jt(t,"adxPeriod",14)));return{plusDi:he(f),minusDi:he(d),adx:he(h)}},levels:()=>[{price:25,color:"#5a6b8c",title:"25",dashed:!0}]},e=>(t,l,o,n,r)=>{const a=jt(l,"period",14),i=jt(l,"adxPeriod",14);return ze(a)&&ze(i)?et(e,`${a}|${i}`,{keys:["plusDi","minusDi","adx"],start:()=>({tr:{run:0,value:NaN,seeded:!1,recent:[]},plus:{run:0,value:NaN,seeded:!1,recent:[]},minus:{run:0,value:NaN,seeded:!1,recent:[]},adx:{run:0,value:NaN,seeded:!1,recent:[]}}),step:(e,l,o)=>{const[n,r,s]=function(e,t){if(0===t)return[NaN,NaN,NaN];const l=e[t],o=e[t-1],n=rt(e,t);if(!(Number.isFinite(l.high)&&Number.isFinite(l.low)&&Number.isFinite(o.high)&&Number.isFinite(o.low)))return[n,NaN,NaN];const r=l.high-o.high,a=o.low-l.low;return[n,r>a&&r>0?r:0,a>r&&a>0?a:0]}(t,l),c=ot(e.tr,n,a,!1),u=ot(e.plus,r,a,!1),p=ot(e.minus,s,a,!1);let y=NaN,f=NaN,d=NaN;if(Number.isFinite(c)&&0!==c){const e=u/c*100,t=p/c*100;if(Number.isFinite(e)&&(y=e),Number.isFinite(t)&&(f=t),Number.isFinite(y)&&Number.isFinite(f)){const e=y+f;d=e>0?Math.abs(y-f)/e*100:0}}o[0]=He(y),o[1]=He(f),o[2]=He(ot(e.adx,d,i,!1))}},t,o,n,r):null}));const Kl=Ht(Ze({id:"cci",name:"CCI",category:"Momentum",placement:"pane",inputs:[{key:"period",type:"number",label:"Length",default:20,min:1,max:500,step:1},{key:"constant",type:"number",label:"Constant",default:.015,min:.001,max:1,step:.001},{key:"color",type:"color",label:"Color",default:"#26c6da"},{key:"bandColor",type:"color",label:"Background",default:"#2196f3"},...Ml("CCI","SMA",20)],plots:[{key:"cci",type:"line",title:"CCI",colorKey:"color",style:{lineWidth:1.5}},...xl("CCI")],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1},{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=jt(t,"period",20),n=zt(t,"constant",.015),r=e.map(e=>(e.high+e.low+e.close)/3),a=ce(r,o),i=new Array(l).fill(NaN);for(let e=o-1;e<l;e++){let t=0;for(let l=0;l<o;l++)t+=Math.abs(r[e-l]-a[e]);const l=t/o;i[e]=Number.isFinite(l)?l>0?(r[e]-a[e])/(n*l):0:NaN}return{cci:he(i),...Al(i,e.map(e=>e.volume??0),t,"SMA",20),upperLevel:el(l,100),lowerLevel:el(l,-100)}},levels:()=>[{price:100,color:"#ef5350",dashed:!0},{price:0,color:"#5a6b8c",dashed:!0},{price:-100,color:"#26a69a",dashed:!0}]},function(e){const t=Qe(e,e=>{const t=jt(e,"period",20),l=jt(e,"maLength",20);return ze(t)&&ze(l)?t-1+("None"===Yt(e,"maType","SMA")?0:l-1):null});return(l,o,n,r,a,i)=>{const s=Yt(o,"maType","SMA");if("EMA"!==s&&"SMMA (RMA)"!==s)return t(l,o,n,r,a,i);const c=jt(o,"period",20),u=zt(o,"constant",.015),p=jt(o,"maLength",20);if(!ze(c)||!ze(p))return null;const y=e=>(l[e].high+l[e].low+l[e].close)/3;return et(e,`${c}|${u}|${s}|${p}`,{keys:["cci","ma","bbUpper","bbLower","upperLevel","lowerLevel"],start:lt,step:(e,t,l)=>{let o=NaN;if(t>=c-1){const e=ut(y,t,c),l=y(t);let n=0;for(let l=0;l<c;l++)n+=Math.abs(y(t-l)-e);const r=n/c;o=Number.isFinite(r)?r>0?(l-e)/(u*r):0:NaN}l[0]=He(o),l[1]=He(ot(e,o,p,"EMA"===s)),l[2]=null,l[3]=null,l[4]=100,l[5]=-100}},l,n,r,a)}}));const Wl={id:"mfi",name:"Money Flow Index",category:"Momentum",placement:"pane",inputs:[{key:"period",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"color",type:"color",label:"Color",default:"#ab47bc"},{key:"bandColor",type:"color",label:"Background",default:"#7e57c2"}],plots:[{key:"mfi",type:"line",title:"MFI",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=jt(t,"period",14),n=e.map(e=>(e.high+e.low+e.close)/3),r=new Array(l).fill(0),a=new Array(l).fill(0);for(let t=1;t<l;t++){const l=e[t].volume??0;if(!Number.isFinite(n[t])||!Number.isFinite(n[t-1])||!Number.isFinite(l)){r[t]=NaN,a[t]=NaN;continue}const o=n[t]*l,i=Number.isFinite(o)?o:NaN;n[t]>n[t-1]?r[t]=i:n[t]<n[t-1]&&(a[t]=i)}return{mfi:he(Te(r,a,o)),upperLevel:el(l,80),lowerLevel:el(l,20)}},levels:()=>[{price:80,color:"#ef5350",title:"OB",dashed:!0},{price:20,color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},Dl=Ht(Ze({id:"atr",name:"ATR",category:"Volatility",placement:"pane",inputs:[{key:"period",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"color",type:"color",label:"Color",default:"#f5a623"}],plots:[{key:"atr",type:"line",title:"ATR",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({atr:he(w(e.map(e=>e.high),e.map(e=>e.low),e.map(e=>e.close),jt(t,"period",14)))})},e=>(t,l,o,n,r)=>{const a=jt(l,"period",14);return ze(a)?et(e,`${a}`,{keys:["atr"],start:at,step:(e,l,o)=>{o[0]=He(it(e,rt(t,l),a))}},t,o,n,r):null})),Ol={id:"williams-vix-fix",name:"Williams VIX Fix",category:"Volatility",placement:"pane",inputs:[{key:"pd",type:"number",label:"LookBack Period Standard Deviation High",default:22,min:1,max:500,step:1},{key:"bbl",type:"number",label:"Bollinger Band Length",default:20,min:1,max:500,step:1},{key:"mult",type:"number",label:"Bollinger Band Standard Deviation Up",default:2,min:1,max:5,step:.1},{key:"lb",type:"number",label:"Look Back Period Percentile High",default:50,min:1,max:500,step:1},{key:"ph",type:"number",label:"Highest Percentile",default:.85,min:0,max:1,step:.01},{key:"pl",type:"number",label:"Lowest Percentile",default:1.01,min:1,max:2,step:.01},{key:"hp",type:"boolean",label:"Show High Range",default:!1},{key:"sd",type:"boolean",label:"Show Standard Deviation Line",default:!1},{key:"highColor",type:"color",label:"Alert",default:"#00ff00"},{key:"normalColor",type:"color",label:"Normal",default:"#808080"},{key:"rangeColor",type:"color",label:"Range",default:"#ffa500"},{key:"bandColor",type:"color",label:"Band",default:"#00ffff"}],plots:[{key:"wvf",type:"histogram",title:"Williams Vix Fix",style:{lineWidth:4,base:0},colorBy:({index:e,values:t,settings:l})=>{const o=t.wvf?.[e],n=t.alertUpper?.[e],r=t.alertHigh?.[e];if(null==o)return;return null!=n&&o>=n||null!=r&&o>=r?Yt(l,"highColor","#00ff00"):Yt(l,"normalColor","#808080")}},{key:"rangeHigh",type:"line",title:"Range High Percentile",colorKey:"rangeColor",style:{lineWidth:4}},{key:"rangeLow",type:"line",title:"Range Low Percentile",colorKey:"rangeColor",style:{lineWidth:4}},{key:"upperBand",type:"line",title:"Upper Band",colorKey:"bandColor",style:{lineWidth:3}}],calc:(e,t)=>{const l=e.length,o=e.map(e=>e.close),n=e.map(e=>e.low),r=jt(t,"pd",22),a=jt(t,"bbl",20),i=zt(t,"mult",2),s=jt(t,"lb",50),c=zt(t,"ph",.85),u=zt(t,"pl",1.01),p=!0===t.hp,y=!0===t.sd,f=de(o,r),d=new Array(l);for(let e=0;e<l;e++){const t=f[e];d[e]=Number.isFinite(t)&&0!==t?(t-n[e])/t*100:NaN}const m=fe(d,a),h=ce(d,a),b=de(d,s),g=me(d,s),w=new Array(l),k=new Array(l),v=new Array(l),N=new Array(l),C=new Array(l);for(let e=0;e<l;e++){const t=h[e]+i*m[e],l=b[e]*c,o=g[e]*u;w[e]=Number.isFinite(t)?t:null,k[e]=Number.isFinite(l)?l:null,v[e]=y?w[e]:null,N[e]=p?k[e]:null,C[e]=p&&Number.isFinite(o)?o:null}return{wvf:he(d),rangeHigh:N,rangeLow:C,upperBand:v,alertUpper:w,alertHigh:k}}},Rl={id:"volume",name:"Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#3a4666"},{key:"colorByDirection",type:"boolean",label:"Match candle direction",default:!1},{key:"upColor",type:"color",label:"Up candle",default:"#26a69a"},{key:"downColor",type:"color",label:"Down candle",default:"#ef5350"},{key:"showMA",type:"boolean",label:"Show moving average",default:!1,group:"Moving average"},{key:"maPeriod",type:"number",label:"Period",default:20,min:1,max:500,step:1,group:"Moving average"},{key:"maColor",type:"color",label:"Color",default:"#e6b53c",group:"Moving average"}],plots:[{key:"volume",type:"histogram",title:"Volume",colorKey:"color",style:{base:0},colorBy:({index:e,values:t,settings:l})=>!0===l.colorByDirection?-1===t.direction[e]?Yt(l,"downColor","#ef5350"):Yt(l,"upColor","#26a69a"):void 0},{key:"ma",type:"line",title:"Volume average",colorKey:"maColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.map(e=>e.volume??0);return{volume:he(l),direction:e.map(e=>e.close>=e.open?1:-1),ma:!0===t.showMA?he(ce(l,jt(t,"maPeriod",20))):l.map(()=>null)}}},Tl=Ze({id:"obv",name:"On-Balance Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#26c6da"},...Ml("OBV","None",9)],plots:[{key:"obv",type:"line",title:"OBV",colorKey:"color",style:{lineWidth:1.5}},...xl("OBV")],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=new Array(l).fill(NaN);let n=0;for(let t=0;t<l;t++){if(t>0){const l=e[t],o=e[t-1],r=tl(l);l.close>o.close?n+=r:l.close<o.close&&(n-=r)}o[t]=n}return{obv:he(o),...Al(o,e.map(tl),t,"None",9)}}},e=>(t,l,o,n,r)=>{const a=Yt(l,"maType","None"),i=jt(l,"maLength",9);if(!ze(i))return null;const s="EMA"===a||"SMMA (RMA)"===a,c=et(e,`${a}|${i}`,{keys:s?["obv","ma","bbUpper","bbLower"]:["obv"],start:()=>({acc:0,ma:{run:0,value:NaN,seeded:!1,recent:[]}}),step:(e,l,o)=>{if(l>0){const o=t[l],n=t[l-1],r=tl(o);o.close>n.close?e.acc+=r:o.close<n.close&&(e.acc-=r)}o[0]=He(e.acc),s&&(o[1]=He(ot(e.ma,e.acc,i,"EMA"===a)),o[2]=null,o[3]=null)}},t,o,n,r);if(null===c||s)return c;const u=n.obv,p=Ye(r,e,t,o);if(void 0===p||void 0===u||u.length<o)return null;const y=Math.max(0,o-i),f=[];for(let e=y;e<t.length;e++)f.push((e<o?u[e]:c.obv[e-o])??NaN);const d=_e(p,Al(f,t.slice(y).map(tl),l,"None",9),o-y,n,o);return null===d?null:{obv:c.obv,...d}}),Pl={id:"adl",name:"Accumulation/Distribution",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#4f8cff"}],plots:[{key:"adl",type:"line",title:"A/D Line",colorKey:"color",style:{lineWidth:1.5}}],calc:e=>{const t=new Array(e.length).fill(NaN);let l=0;for(let o=0;o<e.length;o++){const n=e[o];if(!Number.isFinite(n.high)||!Number.isFinite(n.low)||!Number.isFinite(n.close))continue;const r=n.high-n.low;if(Number.isFinite(r)){if(r>0){const e=(n.close-n.low-(n.high-n.close))/r*tl(n);if(!Number.isFinite(e))continue;l+=e}t[o]=l}}return{adl:he(t)}}},Ul=e=>void 0!==e&&Number.isFinite(e)?e:null,$l={id:"open-interest",name:"Open Interest",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Open interest",default:"#26c6da"}],plots:[{key:"oi",type:"line",title:"Open interest",colorKey:"color",priceFormat:{type:"volume"},style:{lineWidth:1.5}}],calc:e=>({oi:e.map(e=>Ul(e.oi))})},Il={id:"open-interest-change",name:"Open Interest Change",category:"Volume",placement:"pane",inputs:[{key:"upColor",type:"color",label:"Increase",default:"#26a69a"},{key:"downColor",type:"color",label:"Decrease",default:"#ef5350"}],plots:[{key:"change",type:"histogram",title:"OI change",colorKey:"upColor",style:{base:0},priceFormat:{type:"volume"},colorBy:({value:e,settings:t})=>e<0?Yt(t,"downColor","#ef5350"):Yt(t,"upColor","#26a69a")}],calc:e=>({change:e.map((t,l)=>{const o=Ul(t.oi),n=Ul(e[l-1]?.oi);return null===o||null===n?null:o-n})})},El=[["longBuildupColor","#26a69a"],["shortBuildupColor","#ef5350"],["shortCoveringColor","#42a5f5"],["longUnwindingColor","#ffb74d"]],ql={id:"open-interest-buildup",name:"Open Interest Buildup",category:"Volume",placement:"onchart",inputs:[{key:"longBuildupColor",type:"color",label:"Long buildup",default:"#26a69a"},{key:"shortBuildupColor",type:"color",label:"Short buildup",default:"#ef5350"},{key:"shortCoveringColor",type:"color",label:"Short covering",default:"#42a5f5"},{key:"longUnwindingColor",type:"color",label:"Long unwinding",default:"#ffb74d"},{key:"unchanged",type:"select",label:"Unchanged reading",default:"neutral",options:[{value:"neutral",label:"Neutral"},{value:"up",label:"Treat as up"}]}],plots:[],calc:(e,t)=>({state:e.map((l,o)=>{const n=e[o-1],r=Ul(l.oi),a=Ul(n?.oi);if(void 0===n||null===r||null===a)return null;const i=l.close-n.close,s=r-a;return Number.isFinite(i)&&("up"===t.unchanged||0!==i&&0!==s)?s>=0?i>=0?1:2:i>=0?3:4:null})}),barColors:({values:e,settings:t})=>e.state.map(e=>{if(null===e)return null;const[l,o]=El[e-1];return Yt(t,l,o)})},Vl=e=>e.map(e=>e.high),Hl=e=>e.map(e=>e.low);function zl(e,t,l){const o=e.length,n=new Array(o).fill(NaN);if(t<=0)return n;for(let r=t-1;r<o;r++){let o=l?-1/0:1/0,a=!0;for(let n=0;n<t;n++){const t=e[r-n];if(!Number.isFinite(t)){a=!1;break}(l?t>o:t<o)&&(o=t)}a&&(n[r]=o)}return n}const jl=.05,Zl=Ht({id:"alma",name:"Arnaud Legoux Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"offset",type:"number",label:"Offset",default:.85,min:0,max:1,step:.01},{key:"sigma",type:"number",label:"Sigma",default:6,min:.1,max:100,step:.1},{key:"color",type:"color",label:"ALMA",default:"#2962ff"}],plots:[{key:"alma",type:"line",title:"ALMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>({alma:he(Ne(b(e,"close"),jt(t,"length",9),zt(t,"offset",.85),zt(t,"sigma",6)))})}),Yl=Ht({id:"dema",name:"Double EMA",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"DEMA",default:"#43a047"}],plots:[{key:"dema",type:"line",title:"DEMA",colorKey:"color",style:{color:"#43a047",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,Gt(t)),o=jt(t,"length",9),n=be(l,o);return{dema:he(ll(n,Nl(n,o),(e,t)=>2*e-t))}}}),Jl=Ht({id:"hma",name:"Hull Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"HMA",default:"#2962ff"}],plots:[{key:"hma",type:"line",title:"HMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>({hma:he(io(b(e,Gt(t)),jt(t,"length",9)))})}),Gl=Ht({id:"envelope",name:"Envelope",category:"Volatility",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:1e3,step:1},{key:"percent",type:"number",label:"Percent",default:10,min:0,max:100,step:.1},{key:"source",type:"source",label:"Source",default:"close"},{key:"exponential",type:"boolean",label:"Exponential",default:!1},{key:"basisColor",type:"color",label:"Basis",default:"#ff6d00"},{key:"bandColor",type:"color",label:"Bands",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"upper",type:"line",title:"Env Upper",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}},{key:"basis",type:"line",title:"Env Basis",colorKey:"basisColor",style:{color:"#ff6d00",lineWidth:1.5}},{key:"lower",type:"line",title:"Env Lower",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}}],fills:[{between:["upper","lower"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:jl}],calc:(e,t)=>{const l=b(e,Gt(t)),o=jt(t,"length",20),n=zt(t,"percent",10)/100,r=!0===t.exponential?be(l,o):ce(l,o);return{upper:he(r.map(e=>e*(1+n))),basis:he(r),lower:he(r.map(e=>e*(1-n)))}}}),Xl=Ht(Ze({id:"donchian",name:"Donchian Channels",category:"Volatility",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:1e3,step:1},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"basisColor",type:"color",label:"Basis",default:"#ff6d00"},{key:"bandColor",type:"color",label:"Bands",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"upper",type:"line",title:"DC Upper",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}},{key:"basis",type:"line",title:"DC Basis",colorKey:"basisColor",style:{color:"#ff6d00",lineWidth:1.5}},{key:"lower",type:"line",title:"DC Lower",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}}],fills:[{between:["upper","lower"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:jl}],calc:(e,t)=>{const l=jt(t,"length",20),o=Zt(t,"offset",0),n=de(Vl(e),l),r=me(Hl(e),l),a=ll(n,r,(e,t)=>(e+t)/2);return{upper:he(_t(n,o)),basis:he(_t(a,o)),lower:he(_t(r,o))}}},e=>Qe(e,e=>{const t=jt(e,"length",20),l=Zt(e,"offset",0);return ze(t)&&l>=0?t-1+l:null}))),_l={id:"chande-kroll-stop",name:"Chande Kroll Stop",category:"Trend",placement:"onchart",inputs:[{key:"p",type:"number",label:"ATR Length (p)",default:10,min:1,max:500,step:1},{key:"x",type:"number",label:"ATR Coefficient (x)",default:1,min:1,max:100,step:1},{key:"q",type:"number",label:"Stop Length (q)",default:9,min:1,max:500,step:1},{key:"longColor",type:"color",label:"Stop Long",default:"#2962ff"},{key:"shortColor",type:"color",label:"Stop Short",default:"#ff6d00"}],plots:[{key:"stopLong",type:"line",title:"Stop Long",colorKey:"longColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"stopShort",type:"line",title:"Stop Short",colorKey:"shortColor",style:{color:"#ff6d00",lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"p",10),o=jt(t,"x",1),n=jt(t,"q",9),r=Vl(e),a=Hl(e),i=w(r,a,e.map(e=>e.close),l),s=ll(de(r,l),i,(e,t)=>e-o*t);return{stopLong:he(zl(ll(me(a,l),i,(e,t)=>e+o*t),n,!1)),stopShort:he(zl(s,n,!0))}}},Ql={id:"chandelier-exit",name:"Chandelier Exit",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:22,min:1,max:500,step:1},{key:"atrLength",type:"number",label:"ATR length",default:22,min:1,max:500,step:1},{key:"atrMultiplier",type:"number",label:"ATR multiplier",default:3,min:0,max:50,step:.01},{key:"longColor",type:"color",label:"Long exit",default:"#2962ff"},{key:"shortColor",type:"color",label:"Short exit",default:"#ff6d00"}],plots:[{key:"longExit",type:"line",title:"Long Exit",colorKey:"longColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"shortExit",type:"line",title:"Short Exit",colorKey:"shortColor",style:{color:"#ff6d00",lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",22),o=zt(t,"atrMultiplier",3),n=Vl(e),r=Hl(e),a=w(n,r,e.map(e=>e.close),jt(t,"atrLength",22));return{longExit:he(ll(de(n,l),a,(e,t)=>e-o*t)),shortExit:he(ll(me(r,l),a,(e,t)=>e+o*t))}}},eo={id:"standard-error-bands",name:"Standard Error Bands",category:"Volatility",placement:"onchart",inputs:[{key:"periods",type:"number",label:"Periods",default:21,min:3,max:1e3,step:1},{key:"errors",type:"number",label:"Standard Errors",default:2,min:0,max:100,step:.1},{key:"method",type:"select",label:"Method",default:"Simple",options:[{label:"Simple",value:"Simple"},{label:"Exponential",value:"Exponential"},{label:"Weighted",value:"Weighted"}]},{key:"averagePeriods",type:"number",label:"Averaging Periods",default:3,min:1,max:1e3,step:1},{key:"basisColor",type:"color",label:"Basis",default:"#ff6d00"},{key:"bandColor",type:"color",label:"Bands",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"upper",type:"line",title:"SEB Upper",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}},{key:"basis",type:"line",title:"SEB Basis",colorKey:"basisColor",style:{color:"#ff6d00",lineWidth:1.5}},{key:"lower",type:"line",title:"SEB Lower",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}}],fills:[{between:["upper","lower"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:jl}],calc:(e,t)=>{const l=b(e,"close"),o=jt(t,"periods",21,3),n=zt(t,"errors",2),r=jt(t,"averagePeriods",3),a=Re(l,o),i=Be(l,o,0),s=e=>he("Exponential"===t.method?Nl(e,r):"Weighted"===t.method?ue(e,r):ce(e,r));return{upper:s(ll(i,a,(e,t)=>e+n*t)),basis:s(i),lower:s(ll(i,a,(e,t)=>e-n*t))}}},to={id:"ma-channel",name:"Moving Average Channel",category:"Volatility",placement:"onchart",inputs:[{key:"upperLength",type:"number",label:"Upper Length",default:20,min:1,max:1e3,step:1},{key:"lowerLength",type:"number",label:"Lower Length",default:20,min:1,max:1e3,step:1},{key:"upperOffset",type:"number",label:"Upper Offset",default:0,min:-500,max:500,step:1},{key:"lowerOffset",type:"number",label:"Lower Offset",default:0,min:-500,max:500,step:1},{key:"upperColor",type:"color",label:"Upper",default:"#2962ff"},{key:"lowerColor",type:"color",label:"Lower",default:"#ff6d00"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"upper",type:"line",title:"MAC Upper",colorKey:"upperColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"lower",type:"line",title:"MAC Lower",colorKey:"lowerColor",style:{color:"#ff6d00",lineWidth:1.5}}],fills:[{between:["upper","lower"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:jl}],calc:(e,t)=>({upper:he(_t(ce(Vl(e),jt(t,"upperLength",20)),Zt(t,"upperOffset",0))),lower:he(_t(ce(Hl(e),jt(t,"lowerLength",20)),Zt(t,"lowerOffset",0)))})},lo="#00ff00",oo="#ff0000",no="#ff9800",ro=e=>Math.max(1,Math.floor(e)),ao=e=>Math.max(1,Math.round(Math.sqrt(e)));function io(e,t){const l=ue(e,ro(t/2)),o=ue(e,t);return ue(ll(l,o,(e,t)=>2*e-t),ao(t))}function so(e,t,l){return"Ehma"===t?function(e,t){return Nl(ll(be(e,ro(t/2)),be(e,t),(e,t)=>2*e-t),ao(t))}(e,l):"Thma"===t?function(e,t){const l=ue(e,ro(t/3)),o=ue(e,ro(t/2)),n=ue(e,t);return ue(l.map((e,t)=>3*e-o[t]-n[t]),t)}(e,ro(l/2)):io(e,l)}const co=(e,t,l)=>{if(!1===l.switchColor)return Yt(l,"neutralColor",no);const o=e?.[t],n=e?.[t-2];return"number"==typeof o&&"number"==typeof n&&o>n?Yt(l,"bullishColor",lo):Yt(l,"bearishColor",oo)},uo={id:"hull-suite",name:"Hull Suite",category:"Trend",placement:"onchart",inputs:[{key:"source",type:"source",label:"Source",default:"close"},{key:"mode",type:"select",label:"Variation",default:"Hma",options:[{label:"HMA",value:"Hma"},{label:"THMA",value:"Thma"},{label:"EHMA",value:"Ehma"}]},{key:"length",type:"number",label:"Length",default:55,min:1,max:1e3,step:1},{key:"lengthMult",type:"number",label:"Length Multiplier",default:1,min:.1,max:10,step:.1},{key:"switchColor",type:"boolean",label:"Color Hull By Trend",default:!0},{key:"candleCol",type:"boolean",label:"Color Candles By Trend",default:!1},{key:"visualSwitch",type:"boolean",label:"Show Band",default:!0},{key:"bullishColor",type:"color",label:"Bullish Color",default:lo},{key:"bearishColor",type:"color",label:"Bearish Color",default:oo},{key:"neutralColor",type:"color",label:"Neutral Color",default:no}],plots:[{key:"mhull",type:"line",title:"Hull",colorKey:"neutralColor",style:{color:no,lineWidth:2},colorBy:({index:e,values:t,settings:l})=>co(t.mhull,e,l)},{key:"shull",type:"line",title:"Hull Displaced",colorKey:"neutralColor",style:{color:no,lineWidth:2},colorBy:({index:e,values:t,settings:l})=>co(t.mhull,e,l)}],fills:[{between:["mhull","shull"],colorUp:lo,colorDown:oo,colorUpKey:"bullishColor",colorDownKey:"bearishColor",opacity:.6}],calc:(e,t)=>{const l=b(e,Gt(t)),o=ro(jt(t,"length",55)*zt(t,"lengthMult",1)),n=so(l,Yt(t,"mode","Hma"),o),r=!1!==t.visualSwitch;return{mhull:he(n),shull:he(r?_t(n,2):new Array(n.length).fill(NaN))}},barColors:({bars:e,values:t,settings:l})=>!0===l.candleCol?e.map((e,o)=>co(t.mhull,o,l)):e.map(()=>null)},po=[Zl,Yl,Jl,Gl,Xl,_l,Ql,eo,to,uo],yo=e=>b(e,"hl2"),fo={id:"aroon",name:"Aroon",category:"Trend",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"upColor",type:"color",label:"Aroon Up",default:"#fb8c00"},{key:"downColor",type:"color",label:"Aroon Down",default:"#2962ff"}],plots:[{key:"up",type:"line",title:"Aroon Up",colorKey:"upColor",style:{lineWidth:1.5}},{key:"down",type:"line",title:"Aroon Down",colorKey:"downColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",14),o=Me(e.map(e=>e.high),l+1),n=xe(e.map(e=>e.low),l+1),r=e=>e.map(e=>100*(e+l)/l);return{up:he(r(o)),down:he(r(n))}},levels:()=>[{price:50,color:"#5a6b8c",dashed:!0}],range:()=>({min:0,max:100})},mo={id:"aroon-oscillator",name:"Aroon Oscillator",category:"Trend",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"upColor",type:"color",label:"Positive",default:"#4caf50"},{key:"downColor",type:"color",label:"Negative",default:"#ff5252"}],plots:[{key:"osc",type:"line",title:"Oscillator",colorKey:"upColor",style:{lineWidth:1.5}}],fills:[{between:["osc","zero"],colorUpKey:"upColor",colorDownKey:"downColor",opacity:.1}],calc:(e,t)=>{const l=jt(t,"length",14),o=ll(Me(e.map(e=>e.high),l+1),xe(e.map(e=>e.low),l+1),(e,t)=>100*(e-t)/l);return{osc:he(o),zero:o.map(e=>Number.isFinite(e)?0:null)}},levels:()=>[{price:90,color:"#5a6b8c",title:"Upper level",dashed:!0},{price:0,color:"#787b86"},{price:-90,color:"#5a6b8c",title:"Lower level",dashed:!0}],range:()=>({min:-100,max:100})},ho={id:"awesome-oscillator",name:"Awesome Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"upColor",type:"color",label:"Rising",default:"#009688"},{key:"downColor",type:"color",label:"Falling",default:"#f44336"}],plots:[{key:"ao",type:"column",title:"AO",colorKey:"upColor",style:{base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.ao?.[t-1];return null==n||!Number.isFinite(n)||e-n>0?Yt(o,"upColor","#009688"):Yt(o,"downColor","#f44336")}}],calc:e=>{const t=yo(e);return{ao:he(ll(ce(t,5),ce(t,34),(e,t)=>e-t))}},levels:()=>[{price:0,color:"#787b86"}]},bo={id:"balance-of-power",name:"Balance of Power",category:"Momentum",placement:"pane",inputs:[{key:"color",type:"color",label:"BOP",default:"#ff5252"}],plots:[{key:"bop",type:"line",title:"BOP",colorKey:"color",style:{lineWidth:1.5}}],calc:e=>({bop:e.map(e=>{const t=e.high-e.low,l=e.close-e.open;if(0===t||!Number.isFinite(t)||!Number.isFinite(l))return null;const o=l/t;return Number.isFinite(o)?o:null})}),levels:()=>[{price:0,color:"#787b86"}]},go={id:"chande-momentum",name:"Chande Momentum Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"Chande MO",default:"#2962ff"}],plots:[{key:"cmo",type:"line",title:"Chande MO",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=jt(t,"length",9),n=ge(b(e,Gt(t))),r=new Array(Math.max(0,l-1)),a=new Array(Math.max(0,l-1));for(let e=1;e<l;e++){const t=n[e];r[e-1]=t>=0?t:0,a[e-1]=t>=0?0:-t}const i=Se(r,o),s=Se(a,o),c=new Array(l).fill(NaN);for(let e=0;e<i.length;e++){const t=i[e]+s[e];c[e+1]=0===t?NaN:100*(i[e]-s[e])/t}return{cmo:he(c)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]},wo={id:"coppock-curve",name:"Coppock Curve",category:"Momentum",placement:"pane",inputs:[{key:"wmaLength",type:"number",label:"WMA Length",default:10,min:1,max:500,step:1},{key:"longRoCLength",type:"number",label:"Long RoC Length",default:14,min:1,max:500,step:1},{key:"shortRoCLength",type:"number",label:"Short RoC Length",default:11,min:1,max:500,step:1},{key:"color",type:"color",label:"Coppock Curve",default:"#2962ff"}],plots:[{key:"curve",type:"line",title:"Coppock Curve",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.map(e=>e.close);return{curve:he(ue(ll(we(l,jt(t,"longRoCLength",14)),we(l,jt(t,"shortRoCLength",11)),(e,t)=>e+t),jt(t,"wmaLength",10)))}}},ko={id:"dpo",name:"Detrended Price Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"period",type:"number",label:"Length",default:21,min:1,max:500,step:1},{key:"isCentered",type:"boolean",label:"Centered",default:!1},{key:"color",type:"color",label:"DPO",default:"#43a047"}],plots:[{key:"dpo",type:"line",title:"DPO",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=jt(t,"period",21),n=Math.floor(o/2)+1,r=e.map(e=>e.close),a=ce(r,o),i=new Array(l).fill(NaN);if(!0===t.isCentered)for(let e=0;e+n<l;e++)i[e]=r[e]-a[e+n];else for(let e=n;e<l;e++)i[e]=r[e]-a[e-n];return{dpo:he(i)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line"}]},vo={id:"fisher-transform",name:"Fisher Transform",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:500,step:1},{key:"fisherColor",type:"color",label:"Fisher",default:"#2962ff"},{key:"triggerColor",type:"color",label:"Trigger",default:"#ff6d00"}],plots:[{key:"fisher",type:"line",title:"Fisher",colorKey:"fisherColor",style:{lineWidth:1.5}},{key:"trigger",type:"line",title:"Trigger",colorKey:"triggerColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=jt(t,"length",9),n=yo(e),r=de(n,o),a=me(n,o),i=new Array(l).fill(NaN);let s=0,c=0;for(let e=0;e<l;e++){const t=r[e]-a[e];if(!Number.isFinite(t)||!Number.isFinite(n[e])){s=0,c=0;continue}const l=.66*((n[e]-a[e])/Math.max(t,.001)-.5)+.67*s,o=l>.99?.999:l<-.99?-.999:l,u=.5*Math.log((1+o)/(1-o))+.5*c;i[e]=u,s=o,c=u}const u=new Array(l).fill(NaN);for(let e=1;e<l;e++)u[e]=i[e-1];return{fisher:he(i),trigger:he(u)}},levels:()=>[{price:1.5,color:"#e91e63",title:"1.5"},{price:.75,color:"#787b86",title:"0.75"},{price:0,color:"#e91e63",title:"0"},{price:-.75,color:"#787b86",title:"-0.75"},{price:-1.5,color:"#e91e63",title:"-1.5"}]};function No(e){const t=e.length,l=new Array(t).fill(0);for(let o=0;o<t;o++){const t=o>0?l[o-1]:0;o>0&&e[o]===e[o-1]?l[o]=0:o>0&&e[o]>e[o-1]?l[o]=t<=0?1:t+1:l[o]=t>=0?-1:t-1}return l}const Co={id:"connors-rsi",name:"Connors RSI",category:"Momentum",placement:"pane",inputs:[{key:"lenrsi",type:"number",label:"RSI Length",default:3,min:1,max:500,step:1},{key:"lenupdown",type:"number",label:"UpDown Length",default:2,min:1,max:500,step:1},{key:"lenroc",type:"number",label:"ROC Length",default:100,min:1,max:1e3,step:1},{key:"color",type:"color",label:"CRSI",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"crsi",type:"line",title:"CRSI",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=e.map(e=>e.close),n=x(o,jt(t,"lenrsi",3)),r=x(No(o),jt(t,"lenupdown",2)),a=ve(we(o,1).slice(1),jt(t,"lenroc",100)),i=new Array(l).fill(NaN);for(let e=0;e<a.length;e++)i[e+1]=a[e];const s=new Array(l);for(let e=0;e<l;e++)s[e]=(n[e]+r[e]+i[e])/3;return{crsi:he(s),bandHigh:new Array(l).fill(70),bandLow:new Array(l).fill(30)}},levels:()=>[{price:70,color:"#787b86",title:"Upper Band"},{price:50,color:"#5a6b8c",title:"Middle Band",dashed:!0},{price:30,color:"#787b86",title:"Lower Band"}],range:()=>({min:0,max:100})},Mo=[fo,mo,ho,bo,go,wo,ko,vo,Co];function xo(e,t){return`${e}${Math.round(255*(1-t/100)).toString(16).padStart(2,"0")}`}function Ao(e,t,l){const o=e.length,n=ce(e,t),r=fe(e,t),a=new Array(o),i=new Array(o);for(let e=0;e<o;e++){const t=l*r[e];a[e]=n[e]+t,i[e]=n[e]-t}return{middle:n,upper:a,lower:i}}const So={id:"bollinger-percent-b",name:"Bollinger Bands %b",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:2e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"mult",type:"number",label:"StdDev",default:2,min:.001,max:50,step:.1},{key:"color",type:"color",label:"Bollinger Bands %b",default:"#2962ff"},{key:"fillColor",type:"color",label:"Middle Background",default:"#2962ff"}],plots:[{key:"percentB",type:"line",title:"Bollinger Bands %b",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=b(e,Gt(t)),{upper:o,lower:n}=Ao(l,jt(t,"length",20),zt(t,"mult",2)),r=new Array(l.length);for(let e=0;e<l.length;e++){const t=o[e]-n[e];r[e]=t>0?(l[e]-n[e])/t:NaN}return{percentB:he(r),bandHigh:new Array(e.length).fill(1),bandLow:new Array(e.length).fill(0)}},levels:()=>[{price:1,color:"#f23645",title:"Overbought",dashed:!0},{price:.5,color:"#2962ff",title:"Middle Band"},{price:0,color:"#089981",title:"Oversold",dashed:!0}]},Lo={id:"bollinger-bandwidth",name:"Bollinger BandWidth",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:2e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"mult",type:"number",label:"StdDev",default:2,min:.001,max:50,step:.1},{key:"expansionLength",type:"number",label:"Highest Expansion Length",default:125,min:1,max:5e3,step:1,tooltip:"Bars searched for the widest bandwidth reading, drawn as the upper reference line."},{key:"contractionLength",type:"number",label:"Lowest Contraction Length",default:125,min:1,max:5e3,step:1,tooltip:"Bars searched for the narrowest bandwidth reading, drawn as the lower reference line. A squeeze is price sitting on it."},{key:"color",type:"color",label:"Bollinger BandWidth",default:"#2962ff"},{key:"expansionColor",type:"color",label:"Highest Expansion",default:"#f23645"},{key:"contractionColor",type:"color",label:"Lowest Contraction",default:"#089981"}],plots:[{key:"bandwidth",type:"line",title:"Bollinger BandWidth",colorKey:"color",style:{lineWidth:1.5},priceFormat:{type:"percent"}},{key:"expansion",type:"line",title:"Highest Expansion",colorKey:"expansionColor",style:{lineWidth:1}},{key:"contraction",type:"line",title:"Lowest Contraction",colorKey:"contractionColor",style:{lineWidth:1}}],calc:(e,t)=>{const l=b(e,Gt(t)),{middle:o,upper:n,lower:r}=Ao(l,jt(t,"length",20),zt(t,"mult",2)),a=new Array(l.length);for(let e=0;e<l.length;e++)a[e]=0===o[e]?NaN:(n[e]-r[e])/o[e]*100;return{bandwidth:he(a),expansion:he(de(a,jt(t,"expansionLength",125))),contraction:he(me(a,jt(t,"contractionLength",125)))}}},Bo={id:"bb-trend",name:"BBTrend",category:"Volatility",placement:"pane",inputs:[{key:"shortLength",type:"number",label:"Short BB Length",default:20,min:1,max:2e3,step:1},{key:"longLength",type:"number",label:"Long BB Length",default:50,min:1,max:2e3,step:1},{key:"stdDevMult",type:"number",label:"StdDev",default:2,min:.001,max:50,step:.1},{key:"posColor",type:"color",label:"Above zero",default:"#089981"},{key:"negColor",type:"color",label:"Below zero",default:"#f23645"}],plots:[{key:"bbtrend",type:"column",title:"BBTrend",colorKey:"posColor",style:{base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.bbtrend?.[t-1],r="number"==typeof n&&Number.isFinite(n);return r&&e>0?xo(Yt(o,"posColor","#089981"),e>=n?25:50):r&&e<0?xo(Yt(o,"negColor","#f23645"),e>n?50:25):xo(Yt(o,"posColor","#089981"),50)}}],calc:(e,t)=>{const l=e.map(e=>e.close),o=zt(t,"stdDevMult",2),n=Ao(l,jt(t,"shortLength",20),o),r=Ao(l,jt(t,"longLength",50),o),a=new Array(l.length);for(let e=0;e<l.length;e++){const t=Math.abs(n.lower[e]-r.lower[e])-Math.abs(n.upper[e]-r.upper[e]);a[e]=0===n.middle[e]?NaN:t/n.middle[e]*100}return{bbtrend:he(a)}},levels:()=>[{price:0,color:"#5a6b8c",title:"Zero line",dashed:!0}]},Fo={id:"choppiness-index",name:"Choppiness Index",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:2e3,step:1},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"color",type:"color",label:"CHOP",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"chop",type:"line",title:"CHOP",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=jt(t,"length",14),o=e.map(e=>e.high),n=e.map(e=>e.low),r=Se(A(o,n,e.map(e=>e.close)),l),a=de(o,l),i=me(n,l),s=Math.log10(l),c=new Array(e.length).fill(NaN);if(0!==s)for(let t=0;t<e.length;t++){const e=a[t]-i[t];if(!(e>0))continue;const l=r[t]/e;l>0&&(c[t]=100*Math.log10(l)/s)}return{chop:he(_t(c,Zt(t,"offset",0))),bandHigh:new Array(e.length).fill(61.8),bandLow:new Array(e.length).fill(38.2)}},levels:()=>[{price:61.8,color:"#787b86",title:"Upper Band",dashed:!0},{price:50,color:"#787b86",title:"Middle Band"},{price:38.2,color:"#787b86",title:"Lower Band",dashed:!0}],range:()=>({min:0,max:100})},Ko={id:"historical-volatility",name:"Historical Volatility",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:10,min:1,max:2e3,step:1},{key:"per",type:"number",label:"Days per bar unit",default:1,min:1,max:365,step:1,tooltip:"Calendar days each bar covers, used to annualise: 1 for intraday and daily, 7 for weekly and above."},{key:"color",type:"color",label:"HV",default:"#2962ff"}],plots:[{key:"hv",type:"line",title:"HV",colorKey:"color",style:{lineWidth:1.5},priceFormat:{type:"percent"}}],calc:(e,t)=>{const l=e.length,o=zt(t,"per",1),n=new Array(l).fill(NaN);for(let t=1;t<l;t++){const l=e[t-1].close,o=e[t].close;n[t]=l>0&&o>0?Math.log(o/l):NaN}const r=fe(n,jt(t,"length",10)),a=o>0?Math.sqrt(365/o):NaN;return{hv:he(r.map(e=>100*e*a))}}},Wo={id:"average-daily-range",name:"Average Daily Range",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:2e3,step:1},{key:"color",type:"color",label:"ADR",default:"#2962ff"}],plots:[{key:"adr",type:"line",title:"ADR",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({adr:he(ce(e.map(e=>e.high-e.low),jt(t,"length",14)))})},Do=4*Math.atan(1),Oo={id:"chop-zone",name:"Chop Zone",category:"Volatility",placement:"pane",inputs:[{key:"turquoiseColor",type:"color",label:"Steep up",default:"#26c6da"},{key:"darkGreenColor",type:"color",label:"Up",default:"#43a047"},{key:"paleGreenColor",type:"color",label:"Mild up",default:"#a5d6a7"},{key:"limeColor",type:"color",label:"Slight up",default:"#009688"},{key:"yellowColor",type:"color",label:"Flat",default:"#fdd835"},{key:"lightOrangeColor",type:"color",label:"Slight down",default:"#ffb74d"},{key:"orangeColor",type:"color",label:"Mild down",default:"#ff6d00"},{key:"redColor",type:"color",label:"Down",default:"#e91e63"},{key:"darkRedColor",type:"color",label:"Steep down",default:"#d50000"}],plots:[{key:"chopZone",type:"column",title:"Chop Zone",colorKey:"yellowColor",style:{base:0},colorBy:({index:e,values:t,settings:l})=>{const o=t.angle?.[e];return null!=o&&Number.isFinite(o)?o>=5?Yt(l,"turquoiseColor","#26c6da"):o>=3.57?Yt(l,"darkGreenColor","#43a047"):o>=2.14?Yt(l,"paleGreenColor","#a5d6a7"):o>=.71?Yt(l,"limeColor","#009688"):o<=-5?Yt(l,"darkRedColor","#d50000"):o<=-3.57?Yt(l,"redColor","#e91e63"):o<=-2.14?Yt(l,"orangeColor","#ff6d00"):o<=-.71?Yt(l,"lightOrangeColor","#ffb74d"):Yt(l,"yellowColor","#fdd835"):Yt(l,"yellowColor","#fdd835")}}],calc:e=>{const t=e.length,l=de(e.map(e=>e.high),30),o=me(e.map(e=>e.high),30),n=be(e.map(e=>e.close),34),r=new Array(t).fill(NaN);for(let a=1;a<t;a++){const t=l[a]-o[a],i=(e[a].high+e[a].low+e[a].close)/3;if(!(t>0)||0===i)continue;const s=25/t*o[a],c=(n[a-1]-n[a])/i*s;if(!Number.isFinite(c))continue;const u=Math.sqrt(1+c*c),p=Math.round(180*Math.acos(1/u)/Do);r[a]=c>0?-p:p}return{chopZone:new Array(t).fill(1),angle:he(r)}},range:()=>({min:0,max:1})},Ro={id:"chaikin-volatility",name:"Chaikin Volatility",category:"Volatility",placement:"pane",inputs:[{key:"periods",type:"number",label:"Periods",default:10,min:1,max:2e3,step:1},{key:"rocLookback",type:"number",label:"Rate of Change Lookback",default:10,min:1,max:2e3,step:1},{key:"color",type:"color",label:"Chaikin Volatility",default:"#ab47bc"}],plots:[{key:"chaikinVolatility",type:"line",title:"Chaikin Volatility",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({chaikinVolatility:he(we(be(e.map(e=>e.high-e.low),jt(t,"periods",10)),jt(t,"rocLookback",10)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},To={id:"standard-deviation",name:"Standard Deviation",category:"Volatility",placement:"pane",inputs:[{key:"periods",type:"number",label:"Periods",default:5,min:1,max:2e3,step:1},{key:"deviations",type:"number",label:"Deviations",default:1,min:.001,max:50,step:.1},{key:"color",type:"color",label:"Standard Deviation",default:"#089981"}],plots:[{key:"stdDev",type:"line",title:"Standard Deviation",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=zt(t,"deviations",1);return{stdDev:he(fe(e.map(e=>e.close),jt(t,"periods",5)).map(e=>e*l))}}},Po={id:"standard-error",name:"Standard Error",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:3,max:2e3,step:1},{key:"color",type:"color",label:"Standard Error",default:"#ff6d00"}],plots:[{key:"stdErr",type:"line",title:"Standard Error",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({stdErr:he(Re(e.map(e=>e.close),jt(t,"length",14,3)))})},Uo=e=>jt(e,"length",20,2),$o=Ze({id:"volatility-squeeze",name:"Volatility Squeeze",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:20,min:2,max:1e3,step:1},{key:"bbMult",type:"number",label:"BB StdDev",default:2,min:.1,max:10,step:.1},{key:"kcMult",type:"number",label:"KC Multiplier",default:1.5,min:.1,max:10,step:.1},{key:"upColor",type:"color",label:"Momentum up",default:"#26a69a"},{key:"upFadeColor",type:"color",label:"Momentum up (weakening)",default:"#a7d8d2"},{key:"downColor",type:"color",label:"Momentum down",default:"#ef5350"},{key:"downFadeColor",type:"color",label:"Momentum down (weakening)",default:"#f5b0ae"},{key:"onColor",type:"color",label:"Squeeze on",default:"#ff9800"},{key:"offColor",type:"color",label:"Squeeze off",default:"#787b86"}],plots:[{key:"momentum",type:"histogram",title:"Momentum",colorKey:"upColor",style:{color:"#26a69a",base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.momentum?.[t-1],r="number"==typeof n&&Number.isFinite(n)?n:0;return e>0?e>r?Yt(o,"upColor","#26a69a"):Yt(o,"upFadeColor","#a7d8d2"):e<r?Yt(o,"downColor","#ef5350"):Yt(o,"downFadeColor","#f5b0ae")}},{key:"squeeze",type:"line",title:"Squeeze",colorKey:"offColor",style:{color:"#787b86",markersOnly:!0,markerRadius:3},colorBy:({index:e,values:t,settings:l})=>1===t.state?.[e]?Yt(l,"onColor","#ff9800"):Yt(l,"offColor","#787b86")}],calc:(e,t)=>{const l=e.length,o=Uo(t),n=e.map(e=>e.high),r=e.map(e=>e.low),a=e.map(e=>e.close),{middle:i,upper:s,lower:c}=Ao(a,o,zt(t,"bbMult",2)),u=ce(A(n,r,a),o),p=zt(t,"kcMult",1.5),y=de(n,o),f=me(r,o),d=a.map((e,t)=>e-((y[t]+f[t])/2+i[t])/2),m=new Array(l).fill(null),h=new Array(l).fill(null);for(let e=0;e<l;e++){const t=p*u[e],l=i[e]+t,o=i[e]-t;[s[e],c[e],l,o].every(Number.isFinite)&&(m[e]=c[e]>o&&s[e]<l?1:0,h[e]=0)}return{momentum:he(Be(d,o)),squeeze:h,state:m}}},e=>Qe(e,e=>2*Uo(e)-2)),Io=[So,Lo,Bo,Fo,Ko,Wo,Oo,Ro,To,Po,$o];function Eo(e){const t=new Array(e.length);for(let l=0;l<e.length;l++){const o=e[l],n=o.close===o.high&&o.close===o.low||o.high===o.low;t[l]=n?0:(2*o.close-o.low-o.high)/(o.high-o.low)*tl(o)}return t}const qo={id:"chaikin-money-flow",name:"Chaikin Money Flow",category:"Volume",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:500,step:1},{key:"color",type:"color",label:"Color",default:"#43a047"}],plots:[{key:"cmf",type:"line",title:"CMF",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",20),o=Se(Eo(e),l),n=Se(e.map(tl),l),r=new Array(e.length).fill(NaN);for(let t=0;t<e.length;t++)n[t]>0&&(r[t]=o[t]/n[t]);return{cmf:he(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Vo={id:"chaikin-oscillator",name:"Chaikin Oscillator",category:"Volume",placement:"pane",inputs:[{key:"short",type:"number",label:"Fast Length",default:3,min:1,max:500,step:1},{key:"long",type:"number",label:"Slow Length",default:10,min:1,max:500,step:1},{key:"color",type:"color",label:"Color",default:"#ec407a"}],plots:[{key:"osc",type:"line",title:"Chaikin Oscillator",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=Le(Eo(e)),o=Nl(l,jt(t,"short",3)),n=Nl(l,jt(t,"long",10)),r=new Array(e.length);for(let t=0;t<e.length;t++)r[t]=o[t]-n[t];return{osc:he(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Ho={id:"ease-of-movement",name:"Ease of Movement",category:"Volume",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"divisor",type:"number",label:"Divisor",default:1e4,min:1,max:1e6,step:1},{key:"color",type:"color",label:"Color",default:"#43a047"}],plots:[{key:"eom",type:"line",title:"EOM",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=zt(t,"divisor",1e4),o=ge(e.map(e=>(e.high+e.low)/2)),n=new Array(e.length);for(let t=0;t<e.length;t++){const r=e[t],a=tl(r);n[t]=0===a?NaN:l*o[t]*(r.high-r.low)/a}return{eom:he(ce(n,jt(t,"length",14)))}}},zo={id:"elder-force-index",name:"Elder Force Index",category:"Volume",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:13,min:1,max:500,step:1},{key:"color",type:"color",label:"Color",default:"#f44336"}],plots:[{key:"efi",type:"line",title:"Elder Force Index",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=ge(e.map(e=>e.close)),o=new Array(e.length);for(let t=0;t<e.length;t++)o[t]=l[t]*tl(e[t]);return{efi:he(Nl(o,jt(t,"length",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},jo={id:"net-volume",name:"Net Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#2196f3"}],plots:[{key:"net",type:"histogram",title:"Net Volume",colorKey:"color",style:{base:0}}],calc:e=>{const t=new Array(e.length).fill(0);for(let l=1;l<e.length;l++){const o=e[l].close-e[l-1].close;t[l]=o>0?tl(e[l]):o<0?-tl(e[l]):0}return{net:he(t)}}},Zo=[qo,Vo,Ho,zo,jo],Yo=Ht({id:"kama",name:"Kaufman's Adaptive Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"erLength",type:"number",label:"ER Length",default:10,min:1,max:1e3,step:1},{key:"fastLength",type:"number",label:"Fast Length",default:2,min:1,max:1e3,step:1},{key:"slowLength",type:"number",label:"Slow Length",default:30,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"KAMA",default:"#2962ff"}],plots:[{key:"kama",type:"line",title:"KAMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,Gt(t)),o=l.length,n=jt(t,"erLength",10),r=new Array(o).fill(NaN);if(o<=n)return{kama:he(r)};const a=ge(l,1);for(let e=0;e<o;e++)a[e]=Number.isFinite(a[e])?Math.abs(a[e]):0;const i=Se(a,n),s=ge(l,n),c=2/(jt(t,"fastLength",2)+1),u=2/(jt(t,"slowLength",30)+1);let p=l[n];r[n]=p;for(let e=n+1;e<o;e++){const t=i[e],o=(Number.isFinite(t)&&0!==t?Math.abs(s[e])/t:0)*(c-u)+u;p+=o*o*(l[e]-p),r[e]=p}return{kama:he(r)}}}),Jo=Ht(Ze({id:"keltner-channel",name:"Keltner Channels",category:"Volatility",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:1e3,step:1},{key:"mult",type:"number",label:"Multiplier",default:2,min:.1,max:50,step:.1},{key:"source",type:"source",label:"Source",default:"close"},{key:"exp",type:"boolean",label:"Use Exponential MA",default:!0},{key:"bandsStyle",type:"select",label:"Bands Style",default:"Average True Range",options:[{label:"Average True Range",value:"Average True Range"},{label:"True Range",value:"True Range"},{label:"Range",value:"Range"}]},{key:"atrlength",type:"number",label:"ATR Length",default:10,min:1,max:1e3,step:1},{key:"basisColor",type:"color",label:"Basis",default:"#2962ff"},{key:"bandColor",type:"color",label:"Bands",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"upper",type:"line",title:"Upper",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}},{key:"basis",type:"line",title:"Basis",colorKey:"basisColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"lower",type:"line",title:"Lower",colorKey:"bandColor",style:{color:"#2962ff",lineWidth:1}}],fills:[{between:["upper","lower"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.05}],calc:(e,t)=>{const l=e.length,o=jt(t,"length",20),n=zt(t,"mult",2),r=b(e,Gt(t)),a=Jt(t,"exp",!0)?be(r,o):ce(r,o),i=e.map(e=>e.high),s=e.map(e=>e.low),c=e.map(e=>e.close),u=Yt(t,"bandsStyle","Average True Range");let p;p="True Range"===u?A(i,s,c):"Range"===u?ye(ll(i,s,(e,t)=>e-t),o):w(i,s,c,jt(t,"atrlength",10));const y=new Array(l).fill(NaN),f=new Array(l).fill(NaN);for(let e=0;e<l;e++){const t=p[e]*n;y[e]=a[e]+t,f[e]=a[e]-t}return{upper:he(y),basis:he(a),lower:he(f)}}},e=>(t,l,o,n,r)=>{const a=jt(l,"length",20),i=jt(l,"atrlength",10);if(!ze(a)||!ze(i))return null;const s=zt(l,"mult",2),c=Gt(l),u=Jt(l,"exp",!0),p=Yt(l,"bandsStyle","Average True Range"),y=e=>k(t[e],c);return et(e,`${a}|${i}|${s}|${c}|${u}|${p}`,{keys:["upper","basis","lower"],start:()=>({basis:{run:0,value:NaN,seeded:!1,recent:[]},range:{run:0,value:NaN,seeded:!1,recent:[]},atr:{a:NaN,run:0,recent:[]}}),step:(e,l,o)=>{const n=t[l],r=u?ot(e.basis,y(l),a,!0):ut(y,l,a),c=("True Range"===p?rt(t,l):"Range"===p?ot(e.range,n.high-n.low,a,!1):it(e.atr,rt(t,l),i))*s;o[0]=He(r+c),o[1]=He(r),o[2]=He(r-c)}},t,o,n,r)})),Go=Ht({id:"lsma",name:"Least Squares Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:25,min:2,max:1e3,step:1},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"LSMA",default:"#2962ff"}],plots:[{key:"lsma",type:"line",title:"LSMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>({lsma:he(Be(b(e,Gt(t)),jt(t,"length",25,2),Zt(t,"offset",0)))})}),Xo={id:"klinger-oscillator",name:"Klinger Oscillator",category:"Volume",placement:"pane",inputs:[{key:"kvoColor",type:"color",label:"Klinger Oscillator",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal",default:"#43a047"}],plots:[{key:"kvo",type:"line",title:"Klinger Oscillator",colorKey:"kvoColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{color:"#43a047",lineWidth:1.5}}],calc:e=>{const t=e.length,l=ge(b(e,"hlc3"),1),o=new Array(t);for(let n=0;n<t;n++){const t=e[n].volume??0;o[n]=l[n]>=0?t:-t}const n=be(o,34),r=be(o,55),a=new Array(t).fill(NaN);for(let e=0;e<t;e++)a[e]=n[e]-r[e];return{kvo:he(a),signal:he(Nl(a,13))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},_o={id:"know-sure-thing",name:"Know Sure Thing",category:"Momentum",placement:"pane",inputs:[{key:"roclen1",type:"number",label:"ROC Length #1",default:10,min:1,max:1e3,step:1},{key:"roclen2",type:"number",label:"ROC Length #2",default:15,min:1,max:1e3,step:1},{key:"roclen3",type:"number",label:"ROC Length #3",default:20,min:1,max:1e3,step:1},{key:"roclen4",type:"number",label:"ROC Length #4",default:30,min:1,max:1e3,step:1},{key:"smalen1",type:"number",label:"SMA Length #1",default:10,min:1,max:1e3,step:1},{key:"smalen2",type:"number",label:"SMA Length #2",default:10,min:1,max:1e3,step:1},{key:"smalen3",type:"number",label:"SMA Length #3",default:10,min:1,max:1e3,step:1},{key:"smalen4",type:"number",label:"SMA Length #4",default:15,min:1,max:1e3,step:1},{key:"siglen",type:"number",label:"Signal Line Length",default:9,min:1,max:1e3,step:1},{key:"kstColor",type:"color",label:"KST",default:"#009688"},{key:"signalColor",type:"color",label:"Signal",default:"#f44336"}],plots:[{key:"kst",type:"line",title:"KST",colorKey:"kstColor",style:{color:"#009688",lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{color:"#f44336",lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=b(e,"close"),n=(e,l,n,r)=>ce(we(o,jt(t,e,l)),jt(t,n,r)),r=n("roclen1",10,"smalen1",10),a=n("roclen2",15,"smalen2",10),i=n("roclen3",20,"smalen3",10),s=n("roclen4",30,"smalen4",15),c=new Array(l).fill(NaN);for(let e=0;e<l;e++)c[e]=r[e]+2*a[e]+3*i[e]+4*s[e];return{kst:he(c),signal:he(ce(c,jt(t,"siglen",9)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Qo={id:"linreg-slope",name:"Linear Regression Slope",category:"Trend",placement:"pane",inputs:[{key:"periods",type:"number",label:"Periods",default:14,min:2,max:1e3,step:1},{key:"color",type:"color",label:"Slope",default:"#ff5252"}],plots:[{key:"slope",type:"line",title:"Slope",colorKey:"color",style:{color:"#ff5252",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,"close"),o=l.length,n=jt(t,"periods",14,2),r=new Array(o).fill(NaN),a=n*(n+1)/2,i=n*n*(n*n-1)/12;for(let e=n-1;e<o;e++){let t=0,o=0;for(let r=0;r<n;r++){const a=l[e-r];t+=a,o+=a*(n-r)}r[e]=(n*o-a*t)/i}return{slope:he(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},en=[Yo,Jo,Go,Xo,_o,Qo],tn={id:"ma-cross",name:"MA Cross",category:"Trend",placement:"onchart",inputs:[{key:"shortLength",type:"number",label:"Short MA Length",default:9,min:1,max:1e3,step:1},{key:"longLength",type:"number",label:"Long MA Length",default:26,min:1,max:1e3,step:1},{key:"shortColor",type:"color",label:"Short MA",default:"#ff6d00"},{key:"longColor",type:"color",label:"Long MA",default:"#43a047"},{key:"crossColor",type:"color",label:"Cross",default:"#2962ff"}],plots:[{key:"short",type:"line",title:"Short MA",colorKey:"shortColor",style:{color:"#ff6d00",lineWidth:1.5}},{key:"long",type:"line",title:"Long MA",colorKey:"longColor",style:{color:"#43a047",lineWidth:1.5}},{key:"cross",type:"line",title:"Cross",colorKey:"crossColor",style:{markersOnly:!0,markerRadius:3}}],calc:(e,t)=>{const l=b(e,"close"),o=ce(l,jt(t,"shortLength",9)),n=ce(l,jt(t,"longLength",26)),r=Z(o,n);return{short:he(o),long:he(n),cross:o.map((e,t)=>r[t]?e:null)}}},ln=Ht({id:"mcginley-dynamic",name:"McGinley Dynamic",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:1e3,step:1},{key:"color",type:"color",label:"McGinley Dynamic",default:"#2962ff"}],plots:[{key:"mg",type:"line",title:"McGinley Dynamic",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,"close"),o=jt(t,"length",14),n=be(l,o),r=new Array(l.length).fill(NaN);let a=NaN;for(let e=0;e<l.length;e++){if(Number.isFinite(a)&&0!==a){const t=o*Math.pow(l[e]/a,4),i=a+(l[e]-a)/t;r[e]=Number.isFinite(i)?i:n[e]}else r[e]=n[e];a=r[e]}return{mg:he(r)}}}),on={id:"median",name:"Median",category:"Trend",placement:"onchart",inputs:[{key:"source",type:"source",label:"Median Source",default:"hl2"},{key:"length",type:"number",label:"Median Length",default:3,min:1,max:1e3,step:1},{key:"atrLength",type:"number",label:"ATR Length",default:14,min:1,max:1e3,step:1},{key:"atrMult",type:"number",label:"ATR Multiplier",default:2,min:0,max:50,step:.1},{key:"medianColor",type:"color",label:"Median",default:"#ff5252"},{key:"upperColor",type:"color",label:"Upper Band",default:"#00e676"},{key:"lowerColor",type:"color",label:"Lower Band",default:"#e040fb"},{key:"emaColor",type:"color",label:"Median EMA",default:"#2196f3"}],plots:[{key:"median",type:"line",title:"Median",colorKey:"medianColor",style:{color:"#ff5252",lineWidth:3}},{key:"upper",type:"line",title:"Upper Band",colorKey:"upperColor",style:{color:"#00e676",lineWidth:1}},{key:"lower",type:"line",title:"Lower Band",colorKey:"lowerColor",style:{color:"#e040fb",lineWidth:1}},{key:"medianEma",type:"line",title:"Median EMA",colorKey:"emaColor",style:{color:"#2196f3",lineWidth:1}}],fills:[{between:["median","medianEma"],colorUpKey:"upperColor",colorDownKey:"lowerColor",opacity:.9}],calc:(e,t)=>{const l=b(e,Gt(t,"source","hl2")),o=jt(t,"length",3),n=zt(t,"atrMult",2),r=We(l,o,50),a=w(e.map(e=>e.high),e.map(e=>e.low),e.map(e=>e.close),jt(t,"atrLength",14));return{median:he(r),upper:he(ll(r,a,(e,t)=>e+n*t)),lower:he(ll(r,a,(e,t)=>e-n*t)),medianEma:he(Nl(r,o))}}},nn=[{label:"SMA",value:"SMA"},{label:"EMA",value:"EMA"},{label:"SMMA (RMA)",value:"SMMA (RMA)"},{label:"WMA",value:"WMA"},{label:"VWMA",value:"VWMA"}];const rn=[{lane:1,length:20,color:"#f6c309"},{lane:2,length:50,color:"#fb9800"},{lane:3,length:100,color:"#fb6500"},{lane:4,length:200,color:"#f60c0c"}],an={id:"ma-ribbon",name:"Moving Average Ribbon",category:"Trend",placement:"onchart",inputs:rn.flatMap(e=>function(e,t,l){const o=`MA #${e}`;return[{key:`showMa${e}`,type:"boolean",label:o,default:!0,group:o},{key:`ma${e}Type`,type:"select",label:"Type",default:"SMA",options:nn,group:o},{key:`ma${e}Source`,type:"source",label:"Source",default:"close",group:o},{key:`ma${e}Length`,type:"number",label:"Length",default:t,min:1,max:1e3,step:1,group:o},{key:`ma${e}Color`,type:"color",label:"Color",default:l,group:o}]}(e.lane,e.length,e.color)),plots:rn.map(e=>({key:`ma${e.lane}`,type:"line",title:`MA #${e.lane}`,colorKey:`ma${e.lane}Color`,style:{color:e.color,lineWidth:1.5}})),calc:(e,t)=>{const l=e.map(tl),o={};for(const{lane:n,length:r}of rn){if(!Jt(t,`showMa${n}`,!0)){o[`ma${n}`]=new Array(e.length).fill(null);continue}const a=b(e,Gt(t,`ma${n}Source`));o[`ma${n}`]=he(Cl(Yt(t,`ma${n}Type`,"SMA"),a,l,jt(t,`ma${n}Length`,r)))}return o}},sn=Ht({id:"tema",name:"Triple EMA",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"color",type:"color",label:"TEMA",default:"#2962ff"}],plots:[{key:"tema",type:"line",title:"TEMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,"close"),o=jt(t,"length",9),n=be(l,o),r=Nl(n,o),a=Nl(r,o);return{tema:he(n.map((e,t)=>3*e-3*r[t]+a[t]))}}}),cn={id:"twap",name:"Time Weighted Average Price",category:"Trend",placement:"onchart",inputs:[{key:"anchor",type:"select",label:"Anchor Period",default:"session",options:[{label:"Session",value:"session"},{label:"Continuous",value:"continuous"}]},{key:"source",type:"source",label:"Source",default:"ohlc4"},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"color",type:"color",label:"TWAP",default:"#dd7a28"}],plots:[{key:"twap",type:"line",title:"TWAP",colorKey:"color",style:{color:"#dd7a28",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,Gt(t,"source","ohlc4")),o="continuous"!==t.anchor?v(e.map(e=>e.time),Xt(t)):null,n=new Array(e.length).fill(NaN);let r=0,a=0;for(let t=0;t<e.length;t++){null!==o&&o[t]&&(r=0,a=0);const e=l[t];Number.isFinite(e)&&(r+=e,a+=1,n[t]=r/a)}return{twap:he(_t(n,Zt(t,"offset",0)))}}},un=Ht({id:"vwma",name:"Volume Weighted Moving Average",category:"Volume",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"color",type:"color",label:"VWMA",default:"#2962ff"}],plots:[{key:"vwma",type:"line",title:"VWMA",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>({vwma:he(_t(Ce(b(e,Gt(t)),e.map(tl),jt(t,"length",20)),Zt(t,"offset",0)))})}),pn={id:"alligator",name:"Williams Alligator",category:"Trend",placement:"onchart",inputs:[{key:"jawLength",type:"number",label:"Jaw Length",default:21,min:1,max:1e3,step:1},{key:"teethLength",type:"number",label:"Teeth Length",default:13,min:1,max:1e3,step:1},{key:"lipsLength",type:"number",label:"Lips Length",default:8,min:1,max:1e3,step:1},{key:"jawOffset",type:"number",label:"Jaw Offset",default:8,min:-500,max:500,step:1},{key:"teethOffset",type:"number",label:"Teeth Offset",default:5,min:-500,max:500,step:1},{key:"lipsOffset",type:"number",label:"Lips Offset",default:3,min:-500,max:500,step:1},{key:"jawColor",type:"color",label:"Jaw",default:"#2962ff"},{key:"teethColor",type:"color",label:"Teeth",default:"#e91e63"},{key:"lipsColor",type:"color",label:"Lips",default:"#66bb6a"}],plots:[{key:"jaw",type:"line",title:"Jaw",colorKey:"jawColor",style:{color:"#2962ff",lineWidth:1.5}},{key:"teeth",type:"line",title:"Teeth",colorKey:"teethColor",style:{color:"#e91e63",lineWidth:1.5}},{key:"lips",type:"line",title:"Lips",colorKey:"lipsColor",style:{color:"#66bb6a",lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,"hl2");return{jaw:he(_t(ye(l,jt(t,"jawLength",21)),Zt(t,"jawOffset",8))),teeth:he(_t(ye(l,jt(t,"teethLength",13)),Zt(t,"teethOffset",5))),lips:he(_t(ye(l,jt(t,"lipsLength",8)),Zt(t,"lipsOffset",3)))}}},yn=Ht({id:"smma",name:"Smoothed Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:7,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"SMMA",default:"#673ab7"}],plots:[{key:"smma",type:"line",title:"SMMA",colorKey:"color",style:{color:"#673ab7",lineWidth:1.5}}],calc:(e,t)=>({smma:he(ye(b(e,Gt(t)),jt(t,"length",7)))})});function fn(e,t,l){const o=Nl(e,t);if(0===l)return o;return ll(o,Nl(o,t),(e,t)=>e*(1+l)-t*l)}const dn=Ht({id:"t3",name:"T3 Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:5,min:1,max:1e3,step:1},{key:"factor",type:"number",label:"Factor",default:.7,min:0,max:1,step:.1},{key:"highlightMovements",type:"boolean",label:"Highlight Movements",default:!0},{key:"source",type:"source",label:"Source",default:"close"},{key:"upColor",type:"color",label:"Rising",default:"#26a69a"},{key:"downColor",type:"color",label:"Falling",default:"#ff5252"},{key:"neutralColor",type:"color",label:"T3",default:"#6d1e7f"}],plots:[{key:"t3",type:"line",title:"T3",colorKey:"neutralColor",style:{color:"#6d1e7f",lineWidth:2},colorBy:({value:e,index:t,values:l,settings:o})=>{if(!Jt(o,"highlightMovements",!0))return Yt(o,"neutralColor","#6d1e7f");const n=l.t3?.[t-1];return"number"==typeof n&&Number.isFinite(n)&&e>n?Yt(o,"upColor","#26a69a"):Yt(o,"downColor","#ff5252")}}],calc:(e,t)=>{const l=b(e,Gt(t)),o=jt(t,"length",5),n=zt(t,"factor",.7),r=fn(l,o,n),a=fn(r,o,n);return{t3:he(fn(a,o,n))}}}),mn=[tn,ln,on,an,sn,cn,un,pn,yn,dn];function hn(e,t,l){const o=ge(e),n=e=>Nl(Nl(e,l),t);return ll(n(o),n(o.map(e=>Math.abs(e))),(e,t)=>100*e/t)}const bn={id:"momentum",name:"Momentum",category:"Momentum",placement:"pane",inputs:[{key:"len",type:"number",label:"Length",default:10,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"MOM",default:"#2962ff"}],plots:[{key:"mom",type:"line",title:"MOM",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({mom:he(ge(b(e,Gt(t)),jt(t,"len",10)))})},gn={id:"roc",name:"Rate of Change",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"ROC",default:"#2962ff"}],plots:[{key:"roc",type:"line",title:"ROC",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>({roc:he(we(b(e,Gt(t)),jt(t,"length",9)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]};function wn(e,t,l){return"SMA"===l?ce(e,t):Nl(e,t)}const kn={id:"ppo",name:"Percentage Price Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"source",type:"source",label:"Source",default:"close"},{key:"fastLength",type:"number",label:"Fast length",default:12,min:1,max:500,step:1},{key:"slowLength",type:"number",label:"Slow length",default:26,min:1,max:500,step:1},{key:"signalLength",type:"number",label:"Signal length",default:9,min:1,max:500,step:1},{key:"oscType",type:"select",label:"Oscillator MA type",default:"EMA",options:[{label:"EMA",value:"EMA"},{label:"SMA",value:"SMA"}]},{key:"sigType",type:"select",label:"Signal MA type",default:"EMA",options:[{label:"EMA",value:"EMA"},{label:"SMA",value:"SMA"}]},{key:"histUpColor",type:"color",label:"Histogram up",default:"#26a69a"},{key:"histUpFadeColor",type:"color",label:"Histogram up (weakening)",default:"#b2dfdb"},{key:"histDownFadeColor",type:"color",label:"Histogram down (weakening)",default:"#ffcdd2"},{key:"histDownColor",type:"color",label:"Histogram down",default:"#ff5252"},{key:"ppoColor",type:"color",label:"PPO",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal line",default:"#ff6d00"}],plots:[{key:"hist",type:"column",title:"Histogram",colorKey:"histUpColor",style:{base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.hist?.[t-1],r="number"==typeof n&&Number.isFinite(n)&&e>n;return e>=0?r?Yt(o,"histUpColor","#26a69a"):Yt(o,"histUpFadeColor","#b2dfdb"):r?Yt(o,"histDownFadeColor","#ffcdd2"):Yt(o,"histDownColor","#ff5252")}},{key:"ppo",type:"line",title:"PPO",colorKey:"ppoColor",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal line",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=b(e,Gt(t)),o=Yt(t,"oscType","EMA"),n=ll(wn(l,jt(t,"fastLength",12),o),wn(l,jt(t,"slowLength",26),o),(e,t)=>0===t?NaN:100*(e-t)/t),r=wn(n,jt(t,"signalLength",9),Yt(t,"sigType","EMA"));return{hist:he(ll(n,r,(e,t)=>e-t)),ppo:he(n),signal:he(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},vn={id:"trix",name:"TRIX",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:18,min:1,max:500,step:1},{key:"color",type:"color",label:"TRIX",default:"#f44336"}],plots:[{key:"trix",type:"line",title:"TRIX",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",18);return{trix:he(ge(Nl(Nl(Nl(e.map(e=>e.close>0?Math.log(e.close):NaN),l),l),l)).map(e=>1e4*e))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Nn={id:"tsi",name:"True Strength Index",category:"Momentum",placement:"pane",inputs:[{key:"long",type:"number",label:"Long Length",default:25,min:1,max:500,step:1},{key:"short",type:"number",label:"Short Length",default:13,min:1,max:500,step:1},{key:"signal",type:"number",label:"Signal Length",default:13,min:1,max:500,step:1},{key:"color",type:"color",label:"True Strength Index",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal",default:"#e91e63"}],plots:[{key:"tsi",type:"line",title:"True Strength Index",colorKey:"color",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=hn(e.map(e=>e.close),jt(t,"short",13),jt(t,"long",25));return{tsi:he(l),signal:he(Nl(l,jt(t,"signal",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Cn={id:"smi-ergodic-indicator",name:"SMI Ergodic Indicator",category:"Momentum",placement:"pane",inputs:[{key:"longlen",type:"number",label:"Long Length",default:20,min:1,max:500,step:1},{key:"shortlen",type:"number",label:"Short Length",default:5,min:1,max:500,step:1},{key:"siglen",type:"number",label:"Signal Line Length",default:5,min:1,max:500,step:1},{key:"color",type:"color",label:"SMI",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal",default:"#ff6d00"}],plots:[{key:"erg",type:"line",title:"SMI",colorKey:"color",style:{lineWidth:1.5}},{key:"sig",type:"line",title:"Signal",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=hn(e.map(e=>e.close),jt(t,"shortlen",5),jt(t,"longlen",20));return{erg:he(l),sig:he(Nl(l,jt(t,"siglen",5)))}}},Mn={id:"smi-ergodic-oscillator",name:"SMI Ergodic Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"longlen",type:"number",label:"Long Length",default:20,min:1,max:500,step:1},{key:"shortlen",type:"number",label:"Short Length",default:5,min:1,max:500,step:1},{key:"siglen",type:"number",label:"Signal Line Length",default:5,min:1,max:500,step:1},{key:"color",type:"color",label:"SMI Ergodic Oscillator",default:"#ff5252"}],plots:[{key:"osc",type:"histogram",title:"SMI Ergodic Oscillator",colorKey:"color",style:{base:0}}],calc:(e,t)=>{const l=hn(e.map(e=>e.close),jt(t,"shortlen",5),jt(t,"longlen",20));return{osc:he(ll(l,Nl(l,jt(t,"siglen",5)),(e,t)=>e-t))}}},xn={id:"smi",name:"Stochastic Momentum Index",category:"Momentum",placement:"pane",inputs:[{key:"lengthK",type:"number",label:"%K Length",default:10,min:1,max:15e3,step:1},{key:"lengthD",type:"number",label:"%D Length",default:3,min:1,max:4999,step:1},{key:"lengthEMA",type:"number",label:"EMA Length",default:3,min:1,max:4999,step:1},{key:"color",type:"color",label:"SMI",default:"#2196f3"},{key:"emaColor",type:"color",label:"SMI-based EMA",default:"#ff9800"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"smi",type:"line",title:"SMI",colorKey:"color",style:{lineWidth:1.5}},{key:"ema",type:"line",title:"SMI-based EMA",colorKey:"emaColor",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=jt(t,"lengthK",10),o=jt(t,"lengthD",3),n=de(e.map(e=>e.high),l),r=me(e.map(e=>e.low),l),a=ll(n,r,(e,t)=>e-t),i=e=>Nl(Nl(e,o),o),s=ll(i(e.map((e,t)=>e.close-(n[t]+r[t])/2)),i(a),(e,t)=>0===t?NaN:e/t*200);return{smi:he(s),ema:he(Nl(s,jt(t,"lengthEMA",3))),bandHigh:new Array(e.length).fill(40),bandLow:new Array(e.length).fill(-40)}},levels:()=>[{price:40,color:"#787b86",title:"Overbought Line",dashed:!0},{price:0,color:"#787b86",title:"Middle Line",dashed:!0},{price:-40,color:"#787b86",title:"Oversold Line",dashed:!0}]},An=[bn,gn,kn,vn,Nn,Cn,Mn,xn];function Sn(e,t,l){const o=new Array(e.length).fill(NaN);let n=0;for(;n<e.length;){if(!Number.isFinite(e[n])){n+=1;continue}let r=n;for(;r<e.length&&Number.isFinite(e[r]);)r+=1;const a=l(e.slice(n,r),t);for(let e=0;e<a.length;e++)o[n+e]=a[e];n=r}return o}const Ln=e=>"SMA"===e?ce:be;function Bn(e,t,l,o){return{id:e,name:t,category:"Volume",placement:"pane",inputs:[{key:"maLength",type:"number",label:"EMA length",default:255,min:1,max:5e3,step:1},{key:"color",type:"color",label:l,default:"#2962ff"},{key:"emaColor",type:"color",label:`${l}-based EMA`,default:"#ff9800"}],plots:[{key:e,type:"line",title:l,colorKey:"color",style:{lineWidth:1.5}},{key:"ema",type:"line",title:`${l}-based EMA`,colorKey:"emaColor",style:{lineWidth:1.5}}],calc:(t,l)=>{const n=function(e,t){const l=new Array(e.length);let o=1;for(let n=0;n<e.length;n++){if(n>0){const l=e[n],r=e[n-1],a=r.close,i=l.close;("falling"===t?tl(l)<tl(r):tl(l)>tl(r))&&0!==a&&Number.isFinite(a)&&Number.isFinite(i)&&(o*=i/a)}l[n]=1e3*o}return l}(t,o);return{[e]:he(n),ema:he(Sn(n,jt(l,"maLength",255),be))}}}}const Fn=Bn("nvi","Negative Volume Index","NVI","falling"),Kn=Bn("pvi","Positive Volume Index","PVI","rising"),Wn={id:"pvt",name:"Price Volume Trend",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"PVT",default:"#2962ff"}],plots:[{key:"pvt",type:"line",title:"PVT",colorKey:"color",style:{lineWidth:1.5}}],calc:e=>{const t=new Array(e.length).fill(NaN);for(let l=1;l<e.length;l++){const o=e[l-1].close;0!==o&&Number.isFinite(o)&&(t[l]=(e[l].close-o)/o*tl(e[l]))}return{pvt:he(Le(t))}}},Dn={id:"pvo",name:"Percentage Volume Oscillator",category:"Volume",placement:"pane",inputs:[{key:"fastLength",type:"number",label:"Fast length",default:12,min:1,max:500,step:1},{key:"slowLength",type:"number",label:"Slow length",default:26,min:1,max:500,step:1},{key:"signalLength",type:"number",label:"Signal length",default:9,min:1,max:500,step:1},{key:"oscType",type:"select",label:"Oscillator MA type",default:"EMA",options:[{label:"EMA",value:"EMA"},{label:"SMA",value:"SMA"}]},{key:"sigType",type:"select",label:"Signal MA type",default:"EMA",options:[{label:"EMA",value:"EMA"},{label:"SMA",value:"SMA"}]},{key:"histUpColor",type:"color",label:"Histogram up",default:"#26a69a"},{key:"histUpFadeColor",type:"color",label:"Histogram up (weakening)",default:"#b2dfdb"},{key:"histDownFadeColor",type:"color",label:"Histogram down (weakening)",default:"#ffcdd2"},{key:"histDownColor",type:"color",label:"Histogram down",default:"#ff5252"},{key:"color",type:"color",label:"PVO",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal line",default:"#ff6d00"}],plots:[{key:"hist",type:"column",title:"Histogram",colorKey:"histUpColor",style:{base:0},colorBy:({value:e,index:t,values:l,settings:o})=>{const n=l.hist?.[t-1],r=null!=n&&Number.isFinite(n)&&e>n;return e>=0?r?Yt(o,"histUpColor","#26a69a"):Yt(o,"histUpFadeColor","#b2dfdb"):r?Yt(o,"histDownFadeColor","#ffcdd2"):Yt(o,"histDownColor","#ff5252")}},{key:"pvo",type:"line",title:"PVO",colorKey:"color",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal line",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=e.map(tl),n=Ln(Yt(t,"oscType","EMA")),r=n(o,jt(t,"fastLength",12)),a=n(o,jt(t,"slowLength",26)),i=new Array(l).fill(NaN);for(let e=0;e<l;e++)0!==a[e]&&(i[e]=100*(r[e]-a[e])/a[e]);const s=Sn(i,jt(t,"signalLength",9),Ln(Yt(t,"sigType","EMA"))),c=new Array(l);for(let e=0;e<l;e++)c[e]=i[e]-s[e];return{hist:he(c),pvo:he(i),signal:he(s)}},levels:()=>[{price:0,color:"#787b8680",title:"Zero"}]},On={id:"mass-index",name:"Mass Index",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:10,min:1,max:500,step:1},{key:"color",type:"color",label:"Mass Index",default:"#2962ff"}],plots:[{key:"mi",type:"line",title:"Mass Index",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=be(e.map(e=>e.high-e.low),9),n=be(o,9),r=new Array(l).fill(NaN);for(let e=0;e<l;e++)0!==n[e]&&(r[e]=o[e]/n[e]);return{mi:he(Sn(r,jt(t,"length",10),Se))}}},Rn={id:"ulcer-index",name:"Ulcer Index",category:"Volatility",placement:"pane",inputs:[{key:"source",type:"source",label:"Source",default:"close"},{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"color",type:"color",label:"Ulcer Index",default:"#2962ff"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"ui",type:"line",title:"Ulcer Index",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["ui","zero"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=jt(t,"length",14),n=b(e,Gt(t)),r=de(n,o),a=new Array(l).fill(NaN);for(let e=0;e<l;e++){const t=r[e];if(!Number.isFinite(t)||0===t)continue;const l=100*(n[e]-t)/t;a[e]=l*l}const i=ce(a,o),s=new Array(l);for(let e=0;e<l;e++)s[e]=Math.sqrt(i[e]);return{ui:he(s),zero:s.map(e=>Number.isFinite(e)?0:null)}},levels:()=>[{price:0,color:"#2196f3",title:"Zero"}]},Tn=[Fn,Kn,Wn,Dn,On,Rn];function Pn(e,t,l){const o=e.length,n=new Array(o).fill(NaN),r=ce(e,t),a=2/(t+1);let i=NaN;for(let t=0;t<o;t++){const o=e[t];if(Number.isFinite(i))if(Number.isFinite(o))i=o*a+i*(1-a);else{if(!(t<l))continue;i=NaN}else i=r[t];n[t]=i}return n}const Un=Ht({id:"stochastic-rsi",name:"Stochastic RSI",category:"Momentum",placement:"pane",inputs:[{key:"smoothK",type:"number",label:"K",default:3,min:1,max:100,step:1},{key:"smoothD",type:"number",label:"D",default:3,min:1,max:100,step:1},{key:"lengthRSI",type:"number",label:"RSI Length",default:14,min:1,max:500,step:1},{key:"lengthStoch",type:"number",label:"Stochastic Length",default:14,min:1,max:500,step:1},{key:"source",type:"source",label:"RSI Source",default:"close"},{key:"kColor",type:"color",label:"K",default:"#2962ff"},{key:"dColor",type:"color",label:"D",default:"#ff6d00"},{key:"fillColor",type:"color",label:"Background",default:"#2196f3"}],plots:[{key:"k",type:"line",title:"K",colorKey:"kColor",style:{lineWidth:1.5}},{key:"d",type:"line",title:"D",colorKey:"dColor",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=jt(t,"lengthStoch",14),o=vl(x(b(e,Gt(t)),jt(t,"lengthRSI",14)),e=>Ke(e,e,e,l)),n=vl(o,e=>ce(e,jt(t,"smoothK",3))),r=vl(n,e=>ce(e,jt(t,"smoothD",3)));return{k:he(n),d:he(r),bandHigh:new Array(e.length).fill(80),bandLow:new Array(e.length).fill(20)}},levels:()=>[{price:80,color:"#787b86",title:"Upper Band"},{price:50,color:"#5a6b8c",title:"Middle Band"},{price:20,color:"#787b86",title:"Lower Band"}],range:()=>({min:0,max:100})}),$n=Ht({id:"williams-percent-r",name:"Williams Percent Range",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"%R",default:"#7e57c2"},{key:"fillColor",type:"color",label:"Background",default:"#7e57c2"}],plots:[{key:"percentR",type:"line",title:"%R",colorKey:"color",style:{lineWidth:1.5}}],fills:[{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=jt(t,"length",14),o=b(e,Gt(t)),n=de(e.map(e=>e.high),l),r=me(e.map(e=>e.low),l),a=o.map((e,t)=>{const l=n[t]-r[t];return 0===l?NaN:100*(e-n[t])/l});return{percentR:he(a),bandHigh:new Array(e.length).fill(-20),bandLow:new Array(e.length).fill(-80)}},levels:()=>[{price:-20,color:"#787b86",title:"Upper Band"},{price:-50,color:"#787b86",title:"Middle Level",dashed:!0},{price:-80,color:"#787b86",title:"Lower Band"}],range:()=>({min:-100,max:0})}),In={id:"ultimate-oscillator",name:"Ultimate Oscillator",category:"Momentum",placement:"pane",inputs:[{key:"length1",type:"number",label:"Fast Length",default:7,min:1,max:500,step:1},{key:"length2",type:"number",label:"Middle Length",default:14,min:1,max:500,step:1},{key:"length3",type:"number",label:"Slow Length",default:28,min:1,max:500,step:1},{key:"color",type:"color",label:"Oscillator",default:"#f44336"}],plots:[{key:"uo",type:"line",title:"Oscillator",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=Math.max(0,l-1),n=new Array(o),r=new Array(o);for(let t=1;t<l;t++){const l=e[t-1].close,o=Math.max(e[t].high,l),a=Math.min(e[t].low,l);n[t-1]=e[t].close-a,r[t-1]=o-a}const a=e=>ll(Se(n,e),Se(r,e),(e,t)=>0===t?NaN:e/t),i=a(jt(t,"length1",7)),s=a(jt(t,"length2",14)),c=a(jt(t,"length3",28)),u=new Array(l).fill(NaN);for(let e=0;e<o;e++)u[e+1]=100*(4*i[e]+2*s[e]+c[e])/7;return{uo:he(u)}}},En={id:"relative-vigor-index",name:"Relative Vigor Index",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:10,min:1,max:500,step:1},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"rvgiColor",type:"color",label:"RVGI",default:"#008000"},{key:"signalColor",type:"color",label:"Signal",default:"#ff0000"}],plots:[{key:"rvgi",type:"line",title:"RVGI",colorKey:"rvgiColor",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",10),o=Fe(e.map(e=>e.close-e.open)),n=Fe(e.map(e=>e.high-e.low)),r=ll(vl(o,e=>Se(e,l)),vl(n,e=>Se(e,l)),(e,t)=>0===t?NaN:e/t),a=vl(r,e=>Fe(e)),i=Zt(t,"offset",0);return{rvgi:he(_t(r,i)),signal:he(_t(a,i))}}},qn={id:"relative-volatility-index",name:"Relative Volatility Index",category:"Volatility",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:10,min:1,max:500,step:1},{key:"offset",type:"number",label:"Offset",default:0,min:-500,max:500,step:1},{key:"color",type:"color",label:"RVI",default:"#7e57c2"},{key:"fillColor",type:"color",label:"Background",default:"#7e57c2"},...Ml("RVI","SMA",14)],plots:[{key:"rvi",type:"line",title:"RVI",colorKey:"color",style:{lineWidth:1.5}},...xl("RVI")],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1},{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,t)=>{const l=e.length,o=e.map(e=>e.close),n=fe(o,jt(t,"length",10)),r=ge(o),a=new Array(l),i=new Array(l);for(let e=0;e<l;e++){const t=r[e];a[e]=Number.isFinite(t)&&t<=0?0:n[e],i[e]=Number.isFinite(t)&&t>0?0:n[e]}let s=0;for(;s<l&&!Number.isFinite(n[s]);)s+=1;const c=Pn(a,14,s),u=Pn(i,14,s),p=new Array(l).fill(NaN);for(let e=0;e<l;e++){const t=c[e]+u[e];p[e]=0===t?NaN:c[e]/t*100}return{rvi:he(_t(p,Zt(t,"offset",0))),...Al(p,e.map(e=>e.volume??0),t,"SMA",14),bandHigh:new Array(l).fill(80),bandLow:new Array(l).fill(20)}},levels:()=>[{price:80,color:"#787b86",title:"Upper Band"},{price:50,color:"#5a6b8c",title:"Middle Band"},{price:20,color:"#787b86",title:"Lower Band"}]},Vn={id:"woodies-cci",name:"Woodies CCI",category:"Momentum",placement:"pane",inputs:[{key:"cciTurboLength",type:"number",label:"CCI Turbo Length",default:6,min:3,max:14,step:1},{key:"cci14Length",type:"number",label:"CCI 14 Length",default:14,min:7,max:20,step:1},{key:"upColor",type:"color",label:"Five bars up",default:"#009688"},{key:"downColor",type:"color",label:"Five bars down",default:"#f44336"},{key:"turboColor",type:"color",label:"CCI Turbo",default:"#009688"},{key:"cciColor",type:"color",label:"CCI 14",default:"#f44336"}],plots:[{key:"hist",type:"histogram",title:"CCI Turbo Histogram",colorKey:"upColor",style:{base:0},colorBy:({index:e,values:t,settings:l})=>{const o=Yt(l,"upColor","#009688"),n=Yt(l,"downColor","#f44336"),r=l=>{const o=t.hist?.[e-l];return"number"==typeof o&&Number.isFinite(o)?o:null};let a=!0,i=!0;for(let e=1;e<=5;e+=1){const t=r(e);(null===t||t<=0)&&(a=!1),(null===t||t>=0)&&(i=!1)}if(a)return o;if(i)return n;const s=r(0);return null!==s&&s<0?o:n}},{key:"turbo",type:"line",title:"CCI Turbo",colorKey:"turboColor",style:{lineWidth:1.5}},{key:"cci14",type:"line",title:"CCI 14",colorKey:"cciColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.map(e=>e.close),o=Oe(l,jt(t,"cciTurboLength",6)),n=Oe(l,jt(t,"cci14Length",14));return{hist:he(n),turbo:he(o),cci14:he(n)}},levels:()=>[{price:100,color:"#787b86",title:"Hundred Line",dashed:!0},{price:0,color:"#787b86",title:"Zero Line"},{price:-100,color:"#787b86",title:"Minus Line",dashed:!0}]},Hn=[{weight:1,roc:10,smooth:10},{weight:2,roc:15,smooth:10},{weight:3,roc:20,smooth:10},{weight:4,roc:30,smooth:15},{weight:1,roc:40,smooth:50},{weight:2,roc:65,smooth:65},{weight:3,roc:75,smooth:75},{weight:4,roc:100,smooth:100},{weight:1,roc:195,smooth:130},{weight:2,roc:265,smooth:130},{weight:3,roc:390,smooth:130},{weight:4,roc:530,smooth:195}],zn={id:"special-k",name:"Pring's Special K",category:"Momentum",placement:"pane",inputs:[{key:"source",type:"source",label:"Source",default:"close"},{key:"length1",type:"number",label:"Signal length 1",default:100,min:1,max:1e3,step:1},{key:"length2",type:"number",label:"Signal length 2",default:100,min:1,max:1e3,step:1},{key:"color",type:"color",label:"Special K",default:"#2962ff"},{key:"signalColor",type:"color",label:"Signal",default:"#ff6d00"}],plots:[{key:"specialK",type:"line",title:"Special K",colorKey:"color",style:{lineWidth:1.5}},{key:"signal",type:"line",title:"Signal",colorKey:"signalColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=b(e,Gt(t)),n=new Array(l).fill(0);for(const e of Hn){const t=vl(we(o,e.roc),t=>ce(t,e.smooth));for(let o=0;o<l;o++)n[o]+=e.weight*t[o]}const r=vl(n,e=>ce(e,jt(t,"length1",100))),a=vl(r,e=>ce(e,jt(t,"length2",100)));return{specialK:he(n),signal:he(a)}},levels:()=>[{price:0,color:"#787b86",title:"Zero"}]},jn=[Un,$n,In,En,qn,Vn,zn],Zn={id:"vortex",name:"Vortex Indicator",category:"Trend",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:2,max:500,step:1},{key:"upColor",type:"color",label:"VI +",default:"#2962ff"},{key:"downColor",type:"color",label:"VI -",default:"#e91e63"}],plots:[{key:"vip",type:"line",title:"VI +",colorKey:"upColor",style:{lineWidth:1.5}},{key:"vim",type:"line",title:"VI -",colorKey:"downColor",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.length,o=jt(t,"length",14),n=new Array(l).fill(NaN),r=new Array(l).fill(NaN);if(0===l)return{vip:he(n),vim:he(r)};const a=e.map(e=>e.high),i=e.map(e=>e.low),s=e.map(e=>e.close),c=new Array(l-1),u=new Array(l-1);for(let e=1;e<l;e++)c[e-1]=Math.abs(a[e]-i[e-1]),u[e-1]=Math.abs(i[e]-a[e-1]);const p=Se(c,o),y=Se(u,o),f=Se(A(a,i,s),o);for(let e=1;e<l;e++)n[e]=p[e-1]/f[e],r[e]=y[e-1]/f[e];return{vip:he(n),vim:he(r)}}},Yn={id:"volatility-stop",name:"Volatility Stop",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:2,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"factor",type:"number",label:"Multiplier",default:2,min:.25,max:20,step:.25},{key:"upColor",type:"color",label:"Uptrend",default:"#009688"},{key:"downColor",type:"color",label:"Downtrend",default:"#f44336"}],plots:[{key:"up",type:"line",title:"Volatility Stop Up",colorKey:"upColor",style:{markersOnly:!0,markerRadius:1.5}},{key:"down",type:"line",title:"Volatility Stop Down",colorKey:"downColor",style:{markersOnly:!0,markerRadius:1.5}}],calc:(e,t)=>{const l=e.length,o=new Array(l).fill(null),n=new Array(l).fill(null);if(0===l)return{up:o,down:n};const r=b(e,Gt(t)),a=zt(t,"factor",2),i=e.map(e=>e.high),s=e.map(e=>e.low),c=e.map(e=>e.close),u=w(i,s,c,jt(t,"length",20)),p=A(i,s,c);let y=r[0],f=r[0],d=!0,m=NaN;for(let e=0;e<l;e++){const t=r[e],l=Number.isFinite(u[e])?u[e]*a:p[e];y=Math.max(y,t),f=Math.min(f,t);let i=d?Math.max(m,y-l):Math.min(m,f+l);Number.isFinite(i)||(i=t);const s=t-i>=0;e>0&&s!==d&&(y=t,f=t,i=s?y-l:f+l),d=s,m=i,Number.isFinite(i)&&(s?o[e]=i:n[e]=i)}return{up:o,down:n}}},Jn={id:"trend-strength-index",name:"Trend Strength Index",category:"Trend",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:14,min:2,max:500,step:1},{key:"color",type:"color",label:"Trend Strength Index",default:"#7e57c2"},{key:"bullishColor",type:"color",label:"Bullish Color",default:"#089981"},{key:"bearishColor",type:"color",label:"Bearish Color",default:"#f23645"}],plots:[{key:"tsi",type:"line",title:"Trend Strength Index",colorKey:"color",style:{lineWidth:1.5}}],calc:(e,t)=>{const l=e.map((e,t)=>t);return{tsi:he(De(e.map(e=>e.close),l,jt(t,"length",14)))}},levels:e=>[{price:1,color:Yt(e,"bullishColor","#089981"),title:"TSI Bullish Band"},{price:0,color:"#787b86",title:"TSI Middle Band",dashed:!0},{price:-1,color:Yt(e,"bearishColor","#f23645"),title:"TSI Bearish Band"}],range:()=>({min:-1,max:1})};function Gn(e,t,l,o){const n=e[t];if(!Number.isFinite(n))return!1;const r=t=>t>=0&&t<e.length&&Number.isFinite(e[t])&&(o?e[t]<n:e[t]>n),a=t=>t>=0&&t<e.length&&Number.isFinite(e[t])&&(o?e[t]<=n:e[t]>=n);for(let e=1;e<=l;e++)if(!r(t+e))return!1;for(let e=0;e<=4;e++){let o=!0;for(let l=1;l<=e&&o;l++)a(t-l)||(o=!1);for(let n=1;n<=l&&o;n++)r(t-e-n)||(o=!1);if(o)return!0}return!1}const Xn={id:"williams-fractals",name:"Williams Fractals",category:"Trend",placement:"onchart",inputs:[{key:"periods",type:"number",label:"Periods",default:2,min:2,max:100,step:1},{key:"showUp",type:"boolean",label:"Show Up Fractals",default:!0},{key:"showDown",type:"boolean",label:"Show Down Fractals",default:!0},{key:"upColor",type:"color",label:"Up Fractal",default:"#009688"},{key:"downColor",type:"color",label:"Down Fractal",default:"#f44336"}],plots:[{key:"fractals",type:"line",title:"Fractals",colorKey:"upColor"}],calc:(e,t)=>{const l=e.length,o=new Array(l).fill(null),n=new Array(l).fill(null),r=new Array(l).fill(null),a={fractals:o,upFractal:n,downFractal:r};if(0===l)return a;const i=Math.max(2,jt(t,"periods",2)),s=e.map(e=>e.high),c=e.map(e=>e.low),u=Jt(t,"showUp",!0),p=Jt(t,"showDown",!0);for(let e=0;e<l;e++)u&&Gn(s,e,i,!0)&&(n[e]=s[e]),p&&Gn(c,e,i,!1)&&(r[e]=c[e]);return a},markers:({bars:e,values:t,settings:l})=>{const o=t.upFractal??[],n=t.downFractal??[],r=Yt(l,"upColor","#009688"),a=Yt(l,"downColor","#f44336"),i=[];for(let t=0;t<e.length;t++){const l=o[t];null!=l&&i.push({time:e[t].time,position:"atPrice",price:l,shape:"triangleUp",size:"small",color:r});const s=n[t];null!=s&&i.push({time:e[t].time,position:"atPrice",price:s,shape:"triangleDown",size:"small",color:a})}return i}},_n={id:"rsi-divergence",name:"RSI Divergence Indicator",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"RSI Period",default:14,min:1,max:500,step:1},{key:"source",type:"source",label:"RSI Source",default:"close"},{key:"lbR",type:"number",label:"Pivot Lookback Right",default:5,min:1,max:100,step:1},{key:"lbL",type:"number",label:"Pivot Lookback Left",default:5,min:1,max:100,step:1},{key:"rangeUpper",type:"number",label:"Max of Lookback Range",default:60,min:1,max:1e3,step:1},{key:"rangeLower",type:"number",label:"Min of Lookback Range",default:5,min:1,max:1e3,step:1},{key:"plotBull",type:"boolean",label:"Plot Bullish",default:!0},{key:"plotHiddenBull",type:"boolean",label:"Plot Hidden Bullish",default:!1},{key:"plotBear",type:"boolean",label:"Plot Bearish",default:!0},{key:"plotHiddenBear",type:"boolean",label:"Plot Hidden Bearish",default:!1},{key:"color",type:"color",label:"RSI",default:"#2962ff"},{key:"bullColor",type:"color",label:"Bullish",default:"#4caf50"},{key:"bearColor",type:"color",label:"Bearish",default:"#ff5252"}],plots:[{key:"rsi",type:"line",title:"RSI",colorKey:"color",style:{lineWidth:2}}],calc:(e,t)=>{const l=e.length,o=new Array(l).fill(null),n=new Array(l).fill(null),r=new Array(l).fill(null),a=new Array(l).fill(null),i=x(b(e,Gt(t)),jt(t,"length",14)),s={rsi:he(i),bull:o,hiddenBull:n,bear:r,hiddenBear:a};if(0===l)return s;const c=jt(t,"lbR",5),u=jt(t,"lbL",5),p=jt(t,"rangeLower",5),y=jt(t,"rangeUpper",60),f=!1!==t.plotBull,d=!0===t.plotHiddenBull,m=!1!==t.plotBear,h=!0===t.plotHiddenBear,g=Ue(i,u,c).map(e=>Number.isFinite(e)),w=Pe(i,u,c).map(e=>Number.isFinite(e)),k=_t(i,c),v=_t(e.map(e=>e.low),c),N=_t(e.map(e=>e.high),c),C=Ee(Qt(g,1)),M=Ee(Qt(w,1)),A=qe(g,k,1),S=qe(g,v,1),L=qe(w,k,1),B=qe(w,N,1);for(let e=0;e<l;e++){const t=e-c;if(t<0)continue;const l=k[e];if(g[e]){const r=p<=C[e]&&C[e]<=y,a=l>A[e]&&r,i=l<A[e]&&r;f&&a&&v[e]<S[e]&&(o[t]=l),d&&i&&v[e]>S[e]&&(n[t]=l)}if(w[e]){const o=p<=M[e]&&M[e]<=y,n=l<L[e]&&o,i=l>L[e]&&o;m&&n&&N[e]>B[e]&&(r[t]=l),h&&i&&N[e]<B[e]&&(a[t]=l)}}return s},markers:({bars:e,values:t,settings:l})=>{const o=Yt(l,"bullColor","#4caf50"),n=Yt(l,"bearColor","#ff5252"),r=[{col:t.bull,shape:"labelUp",text:"Bull",color:o},{col:t.hiddenBull,shape:"labelUp",text:"H Bull",color:o},{col:t.bear,shape:"labelDown",text:"Bear",color:n},{col:t.hiddenBear,shape:"labelDown",text:"H Bear",color:n}],a=[];for(let t=0;t<e.length;t++)for(const l of r){const o=l.col?.[t];null!=o&&a.push({time:e[t].time,position:"atPrice",price:o,shape:l.shape,size:"small",color:l.color,text:l.text})}return a},levels:()=>[{price:70,color:"#787b86",title:"Overbought",dashed:!0},{price:50,color:"#787b86",title:"Middle Line",dashed:!0},{price:30,color:"#787b86",title:"Oversold",dashed:!0}],range:()=>({min:0,max:100})},Qn={id:"consolidation-breakout",name:"Consolidation and Breakout",category:"Trend",placement:"onchart",inputs:[{key:"markbreakout",type:"boolean",label:"Mark Breakouts",default:!0},{key:"colorinside",type:"boolean",label:"Tint Inside Bars",default:!0},{key:"bullBreakColor",type:"color",label:"Break Up",default:"#00c853"},{key:"bearBreakColor",type:"color",label:"Break Down",default:"#ff5252"},{key:"insideColor",type:"color",label:"Inside Bar",default:"#000000"},{key:"highlowColor",type:"color",label:"Range",default:"#e91e63"}],plots:[{key:"rangeHigh",type:"line",title:"Range High",colorKey:"highlowColor",style:{lineWidth:2}},{key:"rangeLow",type:"line",title:"Range Low",colorKey:"highlowColor",style:{lineWidth:2}}],calc:e=>{const t=e.length,l=new Array(t).fill(NaN),o=new Array(t).fill(NaN),n=new Array(t).fill(NaN),r=new Array(t).fill(NaN),a=new Array(t).fill(NaN);let i=0;for(let s=0;s<t;s++){const t=e[s],c=Math.max(t.open,t.close),u=Math.min(t.open,t.close),p=e[i].high,y=e[i].low,f=s-i,d=f>1&&f<=250;d&&c>p&&(n[s]=p),d&&u<y&&(r[s]=y);const m=i;i=s>1&&u>=y&&u<=p&&c>=y&&c<=p?i:s,i===m&&(l[s]=e[i].high,o[s]=e[i].low);const h=s-i;h>0&&(a[s]=h)}return{rangeHigh:he(l),rangeLow:he(o),breakUp:he(n),breakDown:he(r),insideAge:he(a)}},markers:({bars:e,values:t,settings:l})=>{const o=[];if(!Jt(l,"markbreakout",!0))return o;const n=t.breakUp??[],r=t.breakDown??[],a=Yt(l,"bullBreakColor","#00c853"),i=Yt(l,"bearBreakColor","#ff5252");for(let t=0;t<e.length;t++)null!==n[t]&&void 0!==n[t]&&o.push({time:e[t].time,position:"belowBar",shape:"triangleUp",size:"small",color:a}),null!==r[t]&&void 0!==r[t]&&o.push({time:e[t].time,position:"aboveBar",shape:"triangleDown",size:"small",color:i});return o},barColors:({bars:e,values:t,settings:l})=>{const o=t.insideAge??[],n=Yt(l,"insideColor","#000000"),r=Jt(l,"colorinside",!0);return e.map((e,t)=>r&&null!==o[t]&&void 0!==o[t]?n:null)}},er=[Zn,Yn,Jn,Xn,_n,Qn],tr=e=>new Array(e).fill(NaN);function lr(e){const t=function(e){if(e.length<2)return 0;const t=[];for(let l=1;l<e.length;l++){const o=e[l].time-e[l-1].time;o>0&&t.push(o)}return 0===t.length?0:(t.sort((e,t)=>e-t),t[Math.floor(t.length/2)])}(e);return t<=0||t<86400?"daily":t<604800?"weekly":"monthly"}const or={daily:"d",weekly:"w",monthly:"m"},nr={daily:"Daily",weekly:"Weekly",monthly:"Monthly"},rr=(e,t,l,o)=>({key:e,type:"line",title:t,colorKey:l,style:{markersOnly:!0,markerRadius:o}});function ar(e){const t=or[e],l=nr[e],o=`${t}SupportColor`,n=`${t}ResistanceColor`,r=`${t}CprColor`;return[{key:`${t}Pivot`,type:"line",title:`${l} Pivot`,colorKey:`${t}PivotColor`,style:{lineWidth:2}},rr(`${t}S1`,`${l} S1`,o,1),rr(`${t}S2`,`${l} S2`,o,1),rr(`${t}S3`,`${l} S3`,o,1),rr(`${t}R1`,`${l} R1`,n,1),rr(`${t}R2`,`${l} R2`,n,1),rr(`${t}R3`,`${l} R3`,n,1),rr(`${t}Bc`,`${l} Bottom Pivot`,r,2),rr(`${t}Tc`,`${l} Top Pivot`,r,2)]}function ir(e){const t=or[e],l=nr[e];return[{key:`${t}PivotColor`,type:"color",label:"Pivot",default:"#ffeb3b",group:l},{key:`${t}SupportColor`,type:"color",label:"Support",default:"#4caf50",group:l},{key:`${t}ResistanceColor`,type:"color",label:"Resistance",default:"#ff5252",group:l},{key:`${t}CprColor`,type:"color",label:"CPR",default:"#ff9800",group:l},{key:`${t}FillColor`,type:"color",label:"CPR Fill",default:"#f47676",group:l}]}function sr(e,t,l,o,n){const r=e.length,a=tr(r),i=tr(r),s=tr(r),c=tr(r),u=tr(r),p=tr(r),y=tr(r),f=tr(r),d=tr(r);if(l){const l=function(e,t,l){const o=e.map(e=>e.time);return"daily"===t?v(o,l):N(o,nl("weekly"===t?"week":"month",l))}(e,t,n);let m=NaN,h=NaN,b=NaN,g=NaN,w=NaN,k=NaN;for(let t=0;t<r;t++){l[t]&&(m=g,h=w,b=k);const n=e[t],r=Number.isFinite(n.high)?n.high:NaN,v=Number.isFinite(n.low)?n.low:NaN,N=0===t||l[t];if(g=N?r:Math.max(g,r),w=N?v:Math.min(w,v),k=n.close,!Number.isFinite(m)||!Number.isFinite(h)||!Number.isFinite(b))continue;const C=(m+h+b)/3,M=m-h,x=2*C-m,A=2*C-h,S=(m+h)/2;o.pivot&&(a[t]=C),o.support&&(o.s1r1&&(i[t]=x),s[t]=C-M,c[t]=x-M),o.resistance&&(o.s1r1&&(u[t]=A),p[t]=C+M,y[t]=A+M),o.cpr&&(f[t]=S,d[t]=2*C-S)}}const m=or[t];return{[`${m}Pivot`]:he(a),[`${m}S1`]:he(i),[`${m}S2`]:he(s),[`${m}S3`]:he(c),[`${m}R1`]:he(u),[`${m}R2`]:he(p),[`${m}R3`]:he(y),[`${m}Bc`]:he(f),[`${m}Tc`]:he(d)}}const cr={id:"cpr",name:"CPR with Floor Pivot",category:"Trend",placement:"onchart",inputs:[{key:"pivotMode",type:"select",label:"Select Pivot Mode",default:"auto",options:[{label:"Auto",value:"auto"},{label:"Manual",value:"manual"}]},{key:"showDaily",type:"boolean",label:"Show Daily CPR (Manual)",default:!0},{key:"showWeekly",type:"boolean",label:"Show Weekly CPR (Manual)",default:!1},{key:"showMonthly",type:"boolean",label:"Show Monthly CPR (Manual)",default:!1},{key:"displaypivots",type:"boolean",label:"Plot Pivot",default:!0},{key:"displaysupport",type:"boolean",label:"Plot Support",default:!0},{key:"displayresistance",type:"boolean",label:"Plot Resistance",default:!0},{key:"displaycpr",type:"boolean",label:"Plot CPR",default:!0},{key:"displayS1R1",type:"boolean",label:"Plot S1 / R1",default:!1},...ir("daily"),...ir("weekly"),...ir("monthly")],plots:[...ar("daily"),...ar("weekly"),...ar("monthly")],fills:["daily","weekly","monthly"].map(e=>{const t=or[e];return{between:[`${t}Tc`,`${t}Bc`],colorUpKey:`${t}FillColor`,colorDownKey:`${t}FillColor`,opacity:.48}}),calc:(e,t)=>{const l="manual"===t.pivotMode,o=lr(e),n={pivot:Jt(t,"displaypivots",!0),support:Jt(t,"displaysupport",!0),resistance:Jt(t,"displayresistance",!0),cpr:Jt(t,"displaycpr",!0),s1r1:Jt(t,"displayS1R1",!1)},r=l?{daily:Jt(t,"showDaily",!0),weekly:Jt(t,"showWeekly",!1),monthly:Jt(t,"showMonthly",!1)}:{daily:"daily"===o,weekly:"weekly"===o,monthly:"monthly"===o},a=Xt(t);return{...sr(e,"daily",r.daily,n,a),...sr(e,"weekly",r.weekly,n,a),...sr(e,"monthly",r.monthly,n,a)}}};const ur={id:"alphatrend",name:"AlphaTrend",category:"Trend",placement:"onchart",inputs:[{key:"coeff",type:"number",label:"Multiplier",default:1,min:0,max:20,step:.1},{key:"AP",type:"number",label:"Common Period",default:14,min:1,max:500,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"showsignalsk",type:"boolean",label:"Show Signals",default:!0},{key:"novolumedata",type:"boolean",label:"Change calculation (no volume data)",default:!1},{key:"color",type:"color",label:"AlphaTrend",default:"#0022fc"},{key:"lagColor",type:"color",label:"AlphaTrend Lag",default:"#fc0400"},{key:"risingFillColor",type:"color",label:"Rising Fill",default:"#00e60f"},{key:"fallingFillColor",type:"color",label:"Falling Fill",default:"#80000b"},{key:"buyColor",type:"color",label:"Buy",default:"#0022fc"},{key:"sellColor",type:"color",label:"Sell",default:"#880e4f"}],plots:[{key:"alphatrend",type:"line",title:"AlphaTrend",colorKey:"color",style:{lineWidth:3}},{key:"lagged",type:"line",title:"AlphaTrend Lag",colorKey:"lagColor",style:{lineWidth:3}}],fills:[{between:["alphatrend","lagged"],colorUpKey:"risingFillColor",colorDownKey:"fallingFillColor",opacity:1}],markers:({bars:e,values:t,settings:l})=>{if(!1===l.showsignalsk)return[];const o=t.buySignal??[],n=t.sellSignal??[],r=[];for(let t=0;t<e.length;t++){const a=o[t];if(null!=a){r.push({time:e[t].time,position:"atPrice",price:a,shape:"labelUp",size:"tiny",color:Yt(l,"buyColor","#0022fc"),text:"BUY"});continue}const i=n[t];null!=i&&r.push({time:e[t].time,position:"atPrice",price:i,shape:"labelDown",size:"tiny",color:Yt(l,"sellColor","#880e4f"),text:"SELL"})}return r},calc:(e,t)=>{const l=e.length,o=tr(l),n=tr(l),r=tr(l);if(0===l)return{alphatrend:[],lagged:[],buySignal:[],sellSignal:[]};const a=jt(t,"AP",14),i=zt(t,"coeff",1),s=!0===t.novolumedata,c=!1!==t.showsignalsk,u=e.map(e=>e.high),p=e.map(e=>e.low),y=e.map(e=>e.close),f=_(A(u,p,y),a),d=s?x(b(e,Gt(t)),a):function(e,t,l){const o=e.length,n=new Array(o).fill(0),r=new Array(o).fill(0);for(let l=1;l<o;l++){const o=e[l]*t[l];e[l]>e[l-1]?n[l]=o:e[l]<e[l-1]&&(r[l]=o)}return Te(n,r,l)}(e.map(e=>(e.high+e.low+e.close)/3),e.map(e=>e.volume??0),a);for(let t=0;t<l;t++){const l=t>0&&Number.isFinite(o[t-1])?o[t-1]:0;if(!Number.isFinite(f[t])||!Number.isFinite(d[t]))continue;const n=f[t]*i;o[t]=d[t]>=50?Math.max(e[t].low-n,l):Math.min(e[t].high+n,l)}const m=_t(o,2),h=z(o,m),g=j(o,m);if(c){const e=Qt(h,1),t=Qt(g,1),o=Ee(h),a=Ee(g),i=Ee(e),s=Ee(t);for(let e=0;e<l;e++)h[e]&&i[e]>a[e]?n[e]=.9999*m[e]:g[e]&&s[e]>o[e]&&(r[e]=1.0001*m[e])}return{alphatrend:he(o),lagged:he(m),buySignal:he(n),sellSignal:he(r)}}},pr={id:"range-analysis",name:"Range Analysis",category:"Volatility",placement:"pane",inputs:[{key:"showAverage",type:"boolean",label:"Show Average Range",default:!1},{key:"avgLength",type:"number",label:"Average Length",default:3,min:1,max:500,step:1},{key:"color",type:"color",label:"Range",default:"#ff5252"},{key:"avgColor",type:"color",label:"Average Range",default:"#2196f3"}],plots:[{key:"range",type:"histogram",title:"Range",colorKey:"color",style:{lineWidth:3,base:0}},{key:"avgRange",type:"line",title:"Average Range",colorKey:"avgColor",style:{lineWidth:2}}],calc:(e,t)=>{const l=e.map(e=>e.high-e.low);return!0!==t.showAverage?{range:he(l),avgRange:new Array(e.length).fill(null)}:{range:he(l),avgRange:he(ce(l,jt(t,"avgLength",3)))}}},yr=[cr,ur,pr],fr=e=>/^#[0-9a-f]{6}$/i.test(e)?`${e}99`:e,dr={id:"wavetrend",name:"WaveTrend Pro",category:"Momentum",placement:"pane",inputs:[{key:"source",type:"source",label:"Source",default:"hlc3",group:"WaveTrend"},{key:"n1",type:"number",label:"Channel Length",default:10,min:1,max:500,step:1,group:"WaveTrend"},{key:"n2",type:"number",label:"Average Length",default:21,min:1,max:500,step:1,group:"WaveTrend"},{key:"sigLen",type:"number",label:"Signal Smoothing",default:4,min:1,max:100,step:1,group:"WaveTrend"},{key:"wt1Color",type:"color",label:"WT1",default:"#2962ff",group:"WaveTrend"},{key:"wt2Color",type:"color",label:"WT2",default:"#ff6d00",group:"WaveTrend"},{key:"fillUpColor",type:"color",label:"WT Fill Up",default:"#4caf50",group:"WaveTrend"},{key:"fillDownColor",type:"color",label:"WT Fill Down",default:"#ff5252",group:"WaveTrend"},{key:"obLevel1",type:"number",label:"Overbought 1",default:60,min:-200,max:200,step:1,group:"Levels"},{key:"obLevel2",type:"number",label:"Overbought 2",default:53,min:-200,max:200,step:1,group:"Levels"},{key:"osLevel1",type:"number",label:"Oversold 1",default:-60,min:-200,max:200,step:1,group:"Levels"},{key:"osLevel2",type:"number",label:"Oversold 2",default:-53,min:-200,max:200,step:1,group:"Levels"},{key:"obBandColor",type:"color",label:"OB Band",default:"#ff5252",group:"Levels"},{key:"osBandColor",type:"color",label:"OS Band",default:"#4caf50",group:"Levels"},{key:"filterZone",type:"boolean",label:"Only show crosses inside OB/OS zones",default:!0,group:"Signals"},{key:"useInner",type:"boolean",label:"Use inner levels (53) as the zone gate",default:!0,group:"Signals"},{key:"showMom",type:"boolean",label:"Show momentum histogram (wt1 - wt2)",default:!0,group:"Signals"},{key:"momUpColor",type:"color",label:"Momentum Up",default:"#008080",group:"Signals"},{key:"momDownColor",type:"color",label:"Momentum Down",default:"#880e4f",group:"Signals"},{key:"buyColor",type:"color",label:"Bullish Cross",default:"#00e676",group:"Signals"},{key:"sellColor",type:"color",label:"Bearish Cross",default:"#ff5252",group:"Signals"},{key:"showRegDiv",type:"boolean",label:"Regular divergence",default:!0,group:"Divergence"},{key:"showHidDiv",type:"boolean",label:"Hidden divergence",default:!1,group:"Divergence"},{key:"lbL",type:"number",label:"Pivot Lookback Left",default:3,min:1,max:100,step:1,group:"Divergence"},{key:"lbR",type:"number",label:"Pivot Lookback Right",default:3,min:1,max:100,step:1,group:"Divergence"},{key:"rangeUpper",type:"number",label:"Max Bars Between Pivots",default:60,min:1,max:1e3,step:1,group:"Divergence"},{key:"rangeLower",type:"number",label:"Min Bars Between Pivots",default:5,min:1,max:1e3,step:1,group:"Divergence"},{key:"bullColor",type:"color",label:"Bullish Divergence",default:"#4caf50",group:"Divergence"},{key:"bearColor",type:"color",label:"Bearish Divergence",default:"#ff5252",group:"Divergence"}],plots:[{key:"mom",type:"histogram",title:"Momentum",colorKey:"momUpColor",style:{base:0},colorBy:({value:e,settings:t})=>e>=0?Yt(t,"momUpColor","#008080"):Yt(t,"momDownColor","#880e4f")},{key:"wt1",type:"line",title:"WT1",colorKey:"wt1Color",style:{lineWidth:2}},{key:"wt2",type:"line",title:"WT2",colorKey:"wt2Color",style:{lineWidth:1}}],fills:[{between:["wt1","wt2"],colorUp:"#4caf50",colorDown:"#ff5252",colorUpKey:"fillUpColor",colorDownKey:"fillDownColor",opacity:.15},{between:["obUpper","obLower"],colorUp:"#ff5252",colorDown:"#ff5252",colorUpKey:"obBandColor",colorDownKey:"obBandColor",opacity:.08},{between:["osUpper","osLower"],colorUp:"#4caf50",colorDown:"#4caf50",colorUpKey:"osBandColor",colorDownKey:"osBandColor",opacity:.08}],calc:(e,t)=>{const l=e.length,o=jt(t,"n1",10),n=jt(t,"n2",21),r=jt(t,"sigLen",4),a=zt(t,"obLevel1",60),i=zt(t,"obLevel2",53),s=zt(t,"osLevel1",-60),c=zt(t,"osLevel2",-53),u=new Array(l).fill(null),p=new Array(l).fill(null),y=new Array(l).fill(null),f=new Array(l).fill(null),d=new Array(l).fill(null),m=new Array(l).fill(null),h=b(e,Gt(t,"source","hlc3")),g=vl(h,e=>be(e,o)),w=vl(ll(h,g,(e,t)=>Math.abs(e-t)),e=>be(e,o)),k=vl(h.map((e,t)=>{const l=w[t];return Number.isFinite(l)?0===l?0:(e-g[t])/(.015*l):NaN}),e=>be(e,n)),v=vl(k,e=>_(e,r)),N=ll(k,v,(e,t)=>e-t),C={wt1:he(k),wt2:he(v),mom:!1===t.showMom?new Array(l).fill(null):he(N),obUpper:el(l,a),obLower:el(l,i),osUpper:el(l,c),osLower:el(l,s),buy:u,sell:p,bull:y,bear:f,hiddenBull:d,hiddenBear:m},M=!1!==t.filterZone,x=!1!==t.useInner,A=x?i:a,S=x?c:s;for(let e=1;e<l;e++){const t=k[e-1],l=v[e-1],o=k[e],n=v[e];Number.isFinite(t)&&Number.isFinite(l)&&(Number.isFinite(o)&&Number.isFinite(n)&&(o>n&&t<=l&&(!M||n<=S)&&(u[e]=n),o<n&&t>=l&&(!M||n>=A)&&(p[e]=n)))}const L=jt(t,"lbL",3),B=jt(t,"lbR",3),F=jt(t,"rangeLower",5),K=jt(t,"rangeUpper",60),W=!1!==t.showRegDiv,D=!0===t.showHidDiv,O=Ue(v,L,B).map(e=>Number.isFinite(e)),R=Pe(v,L,B).map(e=>Number.isFinite(e)),T=_t(v,B),P=_t(e.map(e=>e.low),B),U=_t(e.map(e=>e.high),B),$=Ee(Qt(O,1)),I=Ee(Qt(R,1)),E=qe(O,T,1),q=qe(O,P,1),V=qe(R,T,1),H=qe(R,U,1);for(let e=0;e<l;e++){const t=e-B;if(t<0)continue;const l=T[e];if(O[e]){const o=F<=$[e]&&$[e]<=K;W&&o&&l>E[e]&&P[e]<q[e]&&(y[t]=l),D&&o&&l<E[e]&&P[e]>q[e]&&(d[t]=l)}if(R[e]){const o=F<=I[e]&&I[e]<=K;W&&o&&l<V[e]&&U[e]>H[e]&&(f[t]=l),D&&o&&l>V[e]&&U[e]<H[e]&&(m[t]=l)}}return C},markers:({bars:e,values:t,settings:l})=>{const o=Yt(l,"bullColor","#4caf50"),n=Yt(l,"bearColor","#ff5252"),r=[{col:t.buy,shape:"circle",size:"tiny",color:Yt(l,"buyColor","#00e676"),text:void 0},{col:t.sell,shape:"circle",size:"tiny",color:Yt(l,"sellColor","#ff5252"),text:void 0},{col:t.bull,shape:"labelUp",size:"small",color:o,text:"R"},{col:t.bear,shape:"labelDown",size:"small",color:n,text:"R"},{col:t.hiddenBull,shape:"labelUp",size:"small",color:fr(o),text:"H"},{col:t.hiddenBear,shape:"labelDown",size:"small",color:fr(n),text:"H"}],a=[];for(let t=0;t<e.length;t++)for(const l of r){const o=l.col?.[t];if(null==o)continue;const n={time:e[t].time,position:"atPrice",price:o,shape:l.shape,size:l.size,color:l.color};void 0!==l.text&&(n.text=l.text),a.push(n)}return a},levels:e=>[{price:zt(e,"obLevel1",60),color:Yt(e,"obBandColor","#ff5252"),title:"Overbought 1",dashed:!0},{price:zt(e,"obLevel2",53),color:Yt(e,"obBandColor","#ff5252"),title:"Overbought 2",dashed:!0},{price:0,color:"#787b86",title:"Zero",dashed:!0},{price:zt(e,"osLevel2",-53),color:Yt(e,"osBandColor","#4caf50"),title:"Oversold 2",dashed:!0},{price:zt(e,"osLevel1",-60),color:Yt(e,"osBandColor","#4caf50"),title:"Oversold 1",dashed:!0}]},mr=[dr],hr="#089981",br="#F23745",gr="#787b86",wr=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function kr(e,t){let l=e;if(/^#[0-9a-f]{3}$/i.test(l))l=`#${l[1]}${l[1]}${l[2]}${l[2]}${l[3]}${l[3]}`;else if(/^#[0-9a-f]{8}$/i.test(l))l=l.slice(0,7);else if(!/^#[0-9a-f]{6}$/i.test(l))return e;return`${l}${Math.round(255*Math.min(1,Math.max(0,t))).toString(16).padStart(2,"0")}`}const vr=kr(gr,.2),Nr=kr(gr,.5);function Cr(e,t,l,o){if(null===e||!Number.isFinite(e))return;return kr(e>=0?l:o,.1+.4*(t>0?Math.min(1,Math.abs(e)/t):1))}const Mr=e=>`${e.toFixed(2)}%`;const xr=(e,t)=>100*e+t;function Ar(e,t){const l=function(e,t){const l=[];let o=null,n=0,a=0;for(const i of e)if(null===o||i.time<n||i.time>=a){const e=s(i.time,t);o={year:e.year,month:e.month,last:i.close},l.push(o),n=r(e.year,e.month,1,0,0,0,t),a=r(e.year,e.month+1,1,0,0,0,t)}else o.last=i.close;return l}(e,Xt(t)),o=Math.round(zt(t,"startYear",2015)),n=function(e){const t=new Set;for(const l of e.split(",")){const e=l.replace(/[\s-]/g,"");if(!/^\d{6}$/.test(e))continue;const o=Number(e),n=o%100;n>=1&&n<=12&&t.add(o)}return t}(Yt(t,"ignoredMonths","")),a=l.length>0?l[l.length-1]:null;null!==a&&n.add(xr(a.year,a.month));const i=[],c=new Map;for(let e=1;e<l.length;e++){const t=l[e],r=l[e-1];if(t.year<o||n.has(xr(t.year,t.month)))continue;if(!Number.isFinite(r.last)||!Number.isFinite(t.last)||0===r.last)continue;const a=100*(t.last-r.last)/Math.abs(r.last);if(!Number.isFinite(a))continue;let s=c.get(t.year);void 0===s&&(s=new Array(12).fill(null),c.set(t.year,s),i.push(t.year)),s[t.month-1]=a}return{years:i,byYear:c,skipped:n}}function Sr(e,t){const l=[];for(const o of e.years){const n=e.byYear.get(o)?.[t];null!=n&&l.push(n)}return l}const Lr=e=>{if(0===e.length)return null;let t=0;for(const l of e)t+=l;const l=t/e.length;return Number.isFinite(l)?l:null};function Br(e){if(e.length<2)return null;const t=Lr(e);if(null===t)return null;let l=0;for(const o of e)l+=(o-t)*(o-t);const o=Math.sqrt(l/(e.length-1));return Number.isFinite(o)?o:null}const Fr=e=>{if(0===e.length)return null;let t=0;for(const l of e)l>=0&&(t+=1);return 100*t/e.length},Kr={Left:"bottom-left",Center:"bottom-center",Right:"bottom-right"},Wr=[52,...new Array(12).fill(46)],Dr=e=>({text:e,bgColor:vr}),Or={id:"seasonality",name:"Seasonality",category:"Trend",placement:"pane",inputs:[{key:"startYear",type:"number",label:"Starting year",default:2015,min:1800,max:2999,step:1},{key:"posColor",type:"color",label:"Positive Color",default:hr,group:"Color settings"},{key:"negColor",type:"color",label:"Negative Color",default:br,group:"Color settings"},{key:"cutoffPercent",type:"number",label:"Color intensity cutoff (%)",default:10,min:0,max:100,step:1,group:"Color settings"},{key:"tablePosition",type:"select",label:"Table Position",default:"Center",options:[{label:"Left",value:"Left"},{label:"Center",value:"Center"},{label:"Right",value:"Right"}],group:"Heatmap settings"},{key:"tableWidth",type:"number",label:"Table Width (%)",default:100,min:0,max:100,step:1,group:"Heatmap settings"},{key:"tableHeight",type:"number",label:"Table Height (%)",default:95,min:0,max:100,step:1,group:"Heatmap settings"},{key:"showAvg",type:"boolean",label:"Show Averages",default:!0,group:"Heatmap settings"},{key:"showStDev",type:"boolean",label:"Show Standard Deviation",default:!0,group:"Heatmap settings"},{key:"showPos",type:"boolean",label:"Show Percent Positive",default:!0,group:"Heatmap settings"},{key:"ignoredMonths",type:"text",label:"Ignored months",default:"YYYY-MM, YYYY-MM",group:"Additional settings"}],plots:[{key:"seasonality",type:"line",title:"Seasonality"}],calc:e=>({seasonality:new Array(e.length).fill(null)}),table:({bars:e,settings:t})=>{const l=Ar(e,t);if(0===l.years.length)return null;const o=zt(t,"cutoffPercent",10),n=Yt(t,"posColor",hr),r=Yt(t,"negColor",br),a=[[Dr("Year"),...wr.map(Dr)]],i=[1];for(const e of l.years){const t=l.byYear.get(e)??[],s=[Dr(String(e))];for(let a=0;a<12;a++){if(l.skipped.has(xr(e,a+1))){s.push({text:"SKIP",bgColor:Nr});continue}const i=t[a]??null;s.push(null===i?{text:""}:{text:Mr(i),bgColor:Cr(i,o,n,r)})}a.push(s),i.push(1)}const s=Jt(t,"showAvg",!0),c=Jt(t,"showStDev",!0),u=Jt(t,"showPos",!0);if(s||c||u){if(a.push(Array.from({length:13},()=>({text:"",bgColor:vr}))),i.push(.3),s){const e=[Dr("Avgs:")];for(let t=0;t<12;t++){const a=Lr(Sr(l,t));e.push(null===a?{text:""}:{text:Mr(a),bgColor:Cr(a,o,n,r)})}a.push(e),i.push(1)}if(c){const e=[Dr("StDev:")];for(let t=0;t<12;t++){const o=Br(Sr(l,t));e.push({text:null===o?"":o.toFixed(2),bgColor:vr})}a.push(e),i.push(1)}if(u){const e=[Dr("Pos%:")];for(let t=0;t<12;t++){const o=Fr(Sr(l,t));e.push(null===o?{text:""}:{text:`${Math.round(o)}%`,bgColor:Cr(o-50,50,n,r)})}a.push(e),i.push(1)}}return{rows:a,options:{position:Kr[Yt(t,"tablePosition","Center")]??"bottom-center",cellWidth:Wr,cellHeight:18,rowWeights:i,widthPercent:zt(t,"tableWidth",100),heightPercent:zt(t,"tableHeight",95),fontSize:10,margin:8}}}},Rr=[Or],Tr=e=>Math.floor((e-1)/2),Pr=Ht(Ze({id:"zlema",name:"Zero Lag EMA",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:20,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"ZLEMA",default:"#00bcd4"}],plots:[{key:"zlema",type:"line",title:"ZLEMA",colorKey:"color",style:{color:"#00bcd4",lineWidth:1.5}}],calc:(e,t)=>{const l=jt(t,"length",20),o=Tr(l),n=b(e,Gt(t));return{zlema:he(be(n.map((e,t)=>t>=o?e+(e-n[t-o]):NaN),l))}}},e=>(t,l,o,n,r)=>{const a=jt(l,"length",20),i=Tr(a),s=Gt(l);return et(e,`${a}|${s}`,{keys:["zlema"],start:lt,step:(e,l,o)=>{const n=k(t[l],s);o[0]=He(ot(e,l>=i?n+(n-k(t[l-i],s)):NaN,a,!0))}},t,o,n,r)}));function Ur(e,t){const l=2/(jt(t,"length",9)+1),o=jt(t,"cmoLength",9),n=Gt(t),r=t=>k(e[t],n);return{keys:["vidya"],start:()=>({value:NaN}),step:(e,t,n)=>{const a=r(t),i=t>=o?l*function(e,t,l){let o=0,n=0;for(let r=t-l+1;r<=t;r++){const t=e(r)-e(r-1);if(!Number.isFinite(t))return NaN;t>=0?o+=t:n-=t}const r=o+n;return 0===r?0:Math.abs(o-n)/r}(r,t,o):NaN,s=Number.isNaN(e.value)?a:i*a+(1-i)*e.value;Number.isFinite(a)&&Number.isFinite(i)&&Number.isFinite(s)?(e.value=s,n[0]=s):n[0]=null}}}const $r=Ht(Ze({id:"vidya",name:"Variable Index Dynamic Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:1,max:1e3,step:1},{key:"cmoLength",type:"number",label:"CMO Length",default:9,min:1,max:1e3,step:1},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"VIDYA",default:"#ff9800"}],plots:[{key:"vidya",type:"line",title:"VIDYA",colorKey:"color",style:{color:"#ff9800",lineWidth:1.5}}],calc:(e,t)=>tt(Ur(e,t),e.length)},e=>(t,l,o,n,r)=>et(e,`${jt(l,"length",9)}|${jt(l,"cmoLength",9)}|${Gt(l)}`,Ur(t,l),t,o,n,r))),Ir=Ze({id:"elder-ray",name:"Elder-Ray Index",category:"Momentum",placement:"pane",inputs:[{key:"length",type:"number",label:"Length",default:13,min:1,max:500,step:1},{key:"bullColor",type:"color",label:"Bull Power",default:"#26a69a"},{key:"bearColor",type:"color",label:"Bear Power",default:"#ef5350"}],plots:[{key:"bull",type:"histogram",title:"Bull Power",colorKey:"bullColor",style:{color:"#26a69a",base:0}},{key:"bear",type:"histogram",title:"Bear Power",colorKey:"bearColor",style:{color:"#ef5350",base:0}}],calc:(e,t)=>{const l=be(b(e,"close"),jt(t,"length",13));return{bull:he(ll(e,l,(e,t)=>e.high-t)),bear:he(ll(e,l,(e,t)=>e.low-t))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},e=>(t,l,o,n,r)=>{const a=jt(l,"length",13);return et(e,`${a}`,{keys:["bull","bear"],start:lt,step:(e,l,o)=>{const n=t[l],r=ot(e,n.close,a,!0);o[0]=He(n.high-r),o[1]=He(n.low-r)}},t,o,n,r)});function Er(e,t,l,o){if(e.push(t),e.length>l&&e.shift(),e.length<l)return NaN;let n=1/0,r=-1/0;for(const t of e){if(!Number.isFinite(t))return NaN;t<n&&(n=t),t>r&&(r=t)}const a=r-n;return 0===a?o:a<1/0?100*(t-n)/a:NaN}function qr(e,t){const l=jt(t,"fastLength",23),o=jt(t,"slowLength",50),n=jt(t,"cycleLength",10),r=zt(t,"factor",.5),a=Gt(t);return{keys:["stc"],start:()=>({fast:{run:0,value:NaN,seeded:!1,recent:[]},slow:{run:0,value:NaN,seeded:!1,recent:[]},macd:[],pfs:[],f1:NaN,pf:NaN,f2:NaN,stc:NaN}),step:(t,i,s)=>{const c=k(e[i],a),u=ot(t.fast,c,l,!0)-ot(t.slow,c,o,!0),p=Er(t.macd,u,n,t.f1);let y=NaN;Number.isFinite(p)&&(t.f1=p,y=Number.isNaN(t.pf)?p:t.pf+r*(p-t.pf),t.pf=y);const f=Er(t.pfs,y,n,t.f2);let d=NaN;Number.isFinite(f)&&(t.f2=f,d=Number.isNaN(t.stc)?f:t.stc+r*(f-t.stc),t.stc=d),s[0]=He(d)}}}const Vr=Ze({id:"schaff-trend-cycle",name:"Schaff Trend Cycle",category:"Momentum",placement:"pane",inputs:[{key:"fastLength",type:"number",label:"Fast Length",default:23,min:1,max:500,step:1},{key:"slowLength",type:"number",label:"Slow Length",default:50,min:1,max:500,step:1},{key:"cycleLength",type:"number",label:"Cycle Length",default:10,min:1,max:500,step:1},{key:"factor",type:"number",label:"Smoothing Factor",default:.5,min:.01,max:1,step:.01},{key:"source",type:"source",label:"Source",default:"close"},{key:"color",type:"color",label:"STC",default:"#2962ff"}],plots:[{key:"stc",type:"line",title:"STC",colorKey:"color",style:{color:"#2962ff",lineWidth:1.5}}],calc:(e,t)=>tt(qr(e,t),e.length),levels:()=>[{price:75,color:"#ef5350",title:"Upper",dashed:!0},{price:25,color:"#26a69a",title:"Lower",dashed:!0}],range:()=>({min:0,max:100})},e=>(t,l,o,n,r)=>et(e,`${jt(l,"fastLength",23)}|${jt(l,"slowLength",50)}|${jt(l,"cycleLength",10)}|${zt(l,"factor",.5)}|${Gt(l)}`,qr(t,l),t,o,n,r)),Hr=[Pr,$r,Ir,Vr],zr=e=>Math.max(.01,zt(e,"deviation",5)),jr=(e,t,l)=>e>0&&100*e>=Math.abs(t)*l;function Zr(e,t,l,o,n){const r=t.high,a=t.low;if(Number.isFinite(r)&&Number.isFinite(a))if(0===e.dir){if(r<=e.high||(e.high=r,e.highAt=l),a>=e.low||(e.low=a,e.lowAt=l),e.highAt===e.lowAt)return;const t=e.lowAt<e.highAt;if(!jr(e.high-e.low,t?e.low:e.high,o))return;e.dir=t?1:-1,n(e.lowAt,e.low),n(e.highAt,e.high)}else e.dir>0?r>e.high?(n(e.highAt,null),e.high=r,e.highAt=l,n(l,r)):jr(e.high-a,e.high,o)&&(e.dir=-1,e.low=a,e.lowAt=l,n(l,a)):a<e.low?(n(e.lowAt,null),e.low=a,e.lowAt=l,n(l,a)):jr(r-e.low,e.low,o)&&(e.dir=1,e.high=r,e.highAt=l,n(l,r))}const Yr={key:"zigzag",type:"line",title:"ZigZag",colorKey:"color",style:{color:"#2962ff",lineWidth:2}},Jr=()=>{};const Gr=["solid","dashed","dotted"],Xr=Ze({id:"zigzag",name:"ZigZag",category:"Trend",placement:"onchart",inputs:[{key:"deviation",type:"number",label:"Deviation (%)",default:5,min:.01,max:100,step:.1},{key:"color",type:"color",label:"ZigZag",default:"#2962ff"}],plots:[Yr],calc:(e,t)=>{const l=new Array(e.length).fill(null),o=zr(t),n={dir:0,high:NaN,highAt:-1,low:NaN,lowAt:-1},r=(e,t)=>{l[e]=t};for(let t=0;t<e.length;t++)Zr(n,e[t],t,o,r);return{zigzag:l}},draws:({bars:e,values:t,settings:l})=>{const o=t.zigzag??[],n=[];for(let t=0;t<e.length;t++){const l=o[t];"number"==typeof l&&Number.isFinite(l)&&n.push({time:e[t].time,price:l})}const r=S(Yr),a=Yt(l,r.color,"#2962ff"),i=zt(l,r.opacity,100),s=zt(l,r.width,2),c=l[r.lineStyle],u=Gr.includes(c)?c:"solid",p=[];for(let e=1;e<n.length;e++)p.push({kind:"line",from:n[e-1],to:n[e],color:i>=100?a:L(a,Math.max(0,i)/100),lineWidth:s>0?s:2,lineStyle:e<n.length-1?u:"dashed"===u?"dotted":"dashed"});return p}},function(e){return(t,l,o,n,r)=>{const a=Ye(r,e,t,o),i=n.zigzag;if(void 0===a||void 0===i||i.length<o)return null;const s=zr(l),c=`${s}`,u=Xe(a,c,t,o),p=void 0!==u?{...u.state}:{dir:0,high:NaN,highAt:-1,low:NaN,lowAt:-1};if(void 0===u)for(let e=0;e<o;e++)Zr(p,t[e],e,s,Jr);const y=new Map;p.dir>=0&&p.highAt>=0&&y.set(p.highAt,0===p.dir?null:p.high),p.dir<=0&&p.lowAt>=0&&y.set(p.lowAt,0===p.dir?null:p.low);const f=t.length,d=new Array(f-o).fill(null),m=(e,t)=>{e>=o?d[e-o]=t:y.set(e,t)};for(let e=o;e<f;e++)e===f-1&&(a.at={key:c,index:e-1,time:e>0?t[e-1].time:NaN,state:{...p},row:[]}),Zr(p,t[e],e,s,m);for(const[e,t]of y)if(!Object.is(i[e]??null,t))return null;return a.misses=0,{zigzag:d}}});function _r(e,t,l){const o=e.length,n=new Array(o-l).fill(null),r=new Array(o-l).fill(null);if(0===o)return{high:n,low:r};const a=l=>i(e[l].time,t),s=a(0);let c=o;for(;c>l&&a(c-1)-364>=s;)c--;if(c===o)return{high:n,low:r};let u=c;const p=a(c)-364;for(;u>0&&a(u-1)>p;)u--;const y=[],f=[],d=[];let m=0,h=0;for(let t=u;t<o;t++){const o=e[t];if(y.push(a(t)),Number.isFinite(o.high)){for(;f.length>m&&e[f[f.length-1]].high<=o.high;)f.pop();f.push(t)}if(Number.isFinite(o.low)){for(;d.length>h&&e[d[d.length-1]].low>=o.low;)d.pop();d.push(t)}if(t<c)continue;const i=y[t-u]-364;for(;m<f.length&&y[f[m]-u]<=i;)m++;for(;h<d.length&&y[d[h]-u]<=i;)h++;m<f.length&&(n[t-l]=e[f[m]].high),h<d.length&&(r[t-l]=e[d[h]].low)}return{high:n,low:r}}const Qr=Ze({id:"high-low-52-week",name:"52 Week High/Low",category:"Trend",placement:"onchart",inputs:[{key:"highColor",type:"color",label:"52W High",default:"#26a69a"},{key:"lowColor",type:"color",label:"52W Low",default:"#ef5350"}],plots:[{key:"high",type:"step",title:"52W High",colorKey:"highColor",style:{color:"#26a69a",lineWidth:1.5}},{key:"low",type:"step",title:"52W Low",colorKey:"lowColor",style:{color:"#ef5350",lineWidth:1.5}}],calc:(e,t)=>_r(e,Xt(t),0)},e=>(t,l,o,n,r)=>{const a=Ye(r,e,t,o);if(void 0===a)return null;const i=Math.max(0,o-1);return _e(a,_r(t,Xt(l),i),o-i,n,o)}),ea=[Xr,Qr];function ta(e){return{symbol:e.symbol,exchange:e.exchange??"",interval:e.interval,signal:e.signal,...e.variant?{variant:e.variant}:{}}}function la(e,t){return Array.from(new Map([...e,...t].map(e=>[e.time,{...e}])).values()).sort((e,t)=>e.time-t.time)}function oa(e){if(e.signal?.aborted)throw e.signal.reason}function na(e,t){const l=B(e),o=new Map,n=t.now??(()=>Date.now()/1e3),r=(e,l)=>{const o=e.map(e=>t.availability(e,l)),n={bars:e.map(e=>({...e})),availableAt:o.map(e=>e.at),confirmed:o.map(e=>e.confirmed)};return Mt([],n,()=>({})),n};return{supportsWarmup:!0,requestBars:e=>l.getBars({...ta(e),from:e.from,to:e.to}),requestSnapshot:async a=>{oa(a);const i=a.warmupBars??0;if(!Number.isInteger(i)||i<0||i>1e5||!Number.isFinite(a.from)||!Number.isFinite(a.to)||a.from>a.to)throw new Error("Invalid timeframe history window or warmup count");if(void 0!==a.asOf){if(!t.historicalSnapshot)throw new Error("Historical value snapshots are unavailable for this source");const e=await t.historicalSnapshot(a);return oa(a),Mt([],e,()=>({})),e}const s=ta(a),c=e.resolve({...s,from:a.from,to:a.to}),p=JSON.stringify([c.market.key,a.symbol,a.exchange,a.interval,u(a.variant)]);let y=o.get(p);y&&n()-y.stored>300&&(o.delete(p),y=void 0);let f=y?y.bars.map(e=>({...e})):[],d=y?.from??a.from,m=y?.exhausted??!1;if(!y||a.from<y.from||a.to>y.to){const e=!y||a.from<y.from?a.from:y.to;a.to>e&&(f=la(f,await l.getBars({...s,from:e,to:a.to}))),d=Math.min(d,a.from)}let h=r(f.filter(e=>e.time<a.to),a);const b=()=>h.bars.filter((e,t)=>e.time<a.from&&h.confirmed[t]&&null!==h.availableAt[t]&&h.availableAt[t]<=a.from).length;let g=0,w=d,k=1;for(let e=0;b()<i&&!m;e++){if(e>=512||f.length>=1e5)throw new Error("Timeframe warmup history limit reached");const t=d,o=await l.getBarsPage({...s,before:t,countBack:Math.max(1,i-b())*k});f=la(o.bars,f);const n=o.nextBefore??o.bars[0]?.time;if(m=!1===o.hasMore||void 0!==c.source.earliest&&void 0!==n&&n<=c.source.earliest,!m&&(void 0===n||n>=d))throw new Error("Warmup history page did not advance");if(0===o.bars.length?(0===g&&(w=t),g++,k=Math.min(2*k,64)):(g=0,k=1),void 0!==n&&(d=Math.min(d,n)),!m&&g>=4&&w-d>2592e3)throw new Error("Insufficient confirmed history: no source bars in more than 30 days before the warmup");h=r(f.filter(e=>e.time<a.to),a)}oa(a);let v=0;for(;v<h.bars.length&&h.confirmed[v]&&null!==h.availableAt[v];)v++;return((e,t)=>{o.delete(e),o.set(e,t);let l=0;for(const e of o.values())l+=e.bars.length;for(;o.size>24||l>25e4;){const e=o.keys().next().value;l-=o.get(e).bars.length,o.delete(e)}})(p,{bars:h.bars.slice(0,v),from:d,to:h.bars[v]?.time??a.to,exhausted:m,stored:y?.stored??n()}),h}}}const ra="__tier2",aa=e=>e[ra];function ia(e,t){return(e.refetchOn??[]).map(e=>`${e}=${String(t[e])}`).join("&")}function sa(e,t){const l=e[e.length-1];if(void 0===l||t.time>l.time)return void e.push(t);if(t.time===l.time)return void(e[e.length-1]=t);let o=0,n=e.length;for(;o<n;){const l=o+n>>1;e[l].time<t.time?o=l+1:n=l}e[o]?.time===t.time?e[o]=t:e.splice(o,0,t)}function ca(e){const t=new WeakMap;return{id:e.id,name:e.name,category:e.category,placement:e.placement,inputs:e.inputs,plots:e.plots,levels:e.levels,range:e.range,calc:(l,o,n,r)=>{const a=aa(n);try{const i=function(e,t,l){const o={};for(const t of l)o[t]=new Array(e.length).fill(null);if(0===t.length)return o;let n=-1;for(let r=0;r<e.length;r++){for(;n+1<t.length&&t[n+1].time<=e[r].time;)n+=1;if(n<0)continue;const a=t[n].values;for(const e of l){const t=a[e];o[e][r]="number"==typeof t&&Number.isFinite(t)?t:null}}return o}(l,a?.points??[],function(e){const t=e.plots.map(e=>e.key);for(const l of e.series??[])t.includes(l)||t.push(l);return t}(e)),s=void 0===e.calc?i:e.calc(l,i,o,n,r);return t.delete(n),s}catch(e){throw t.set(n,{points:a?.points,error:e}),e}},attach:l=>{const o=aa(l.store)??{key:null,points:[],live:[],loaded:!1,from:0,to:0,status:{state:"empty"},request:null,subscription:null,generation:0,completedVersion:null,liveRevision:0,liveVersions:new Map};l.store[ra]=o;let n=++o.generation,r=!0,a=0,i=()=>{};const s=()=>r&&o.generation===n&&!l.signal?.aborted,c=e=>{o.status=e;const n=t.get(l.store);s()&&l.setDataStatus?.("ready"!==e.state&&"empty"!==e.state||n?.points!==o.points?e:{state:"error",error:n.error})},u=()=>{const e=o.request;o.request=null,e?.controller.abort()},p=()=>{const e=o.subscription;o.subscription=null,e?.dispose?.()},y=()=>{n=++o.generation,o.loaded=!1,o.completedVersion=null,o.completedContext=void 0,o.baseDataRevision=o.lastContext?.requestState?.dataRevision,o.live=[],o.liveVersions.clear(),o.errorKind=void 0;const e=o.points.length>0;o.points=[],o.status={state:"empty"};const t=o.request,r=o.subscription;o.request=null,o.subscription=null,t?.controller.abort(),r?.dispose?.(),e&&l.requestRecompute()},f=e=>{e.receive=n=>{if(!s()||o.request!==e||e.controller.signal.aborted)return;if(o.request=null,o.completedVersion=e.version,!n.ok)return o.errorKind="fetch",c({state:"error",error:n.error}),void(void 0!==e.context.requestState&&h());const r="tail"===e.mode?o.points.slice():[];try{for(const t of n.points.slice().sort((e,t)=>e.time-t.time))Number.isFinite(t.time)&&(void 0===e.context.asOf||t.time<=e.context.asOf)&&sa(r,t)}catch(t){return o.errorKind="fetch",c({state:"error",error:t}),void(void 0!==e.context.requestState&&h())}if("prepend"===e.mode)for(const e of o.points)sa(r,e);if(void 0===e.context.asOf)for(const t of o.live)(null===e.liveAfter||(o.liveVersions.get(t.time)??0)>e.liveAfter)&&sa(r,t);const a=o.points;o.points=r;try{l.requestRecompute();const e=t.get(l.store);if(e?.points===r)throw e.error}catch(t){return void(s()&&o.points===r&&(o.points=a,o.errorKind="calc",c({state:"error",error:t}),void 0!==e.context.requestState&&h()))}if(s()&&o.points===r){if(null!==e.liveAfter){o.live=o.live.filter(t=>(o.liveVersions.get(t.time)??0)>e.liveAfter);for(const[t,l]of o.liveVersions)l<=e.liveAfter&&o.liveVersions.delete(t)}o.from=o.loaded&&"replace"!==e.mode?Math.min(o.from,e.from):e.from,o.to=o.loaded&&"replace"!==e.mode?Math.max(o.to,e.to):e.to,o.loaded=!0,o.completedContext=e.context,o.errorKind=void 0,c({state:r.length>0?"ready":"empty"}),h()}},void 0!==e.outcome&&e.receive(e.outcome)},d=t=>{if(!s()||o.request!==t||t.started||t.controller.signal.aborted)return;t.started=!0;const l=e=>{t.outcome=e,t.receive(e)};let n;try{n=e.fetch({...t.context,from:t.from,to:t.to,signal:t.controller.signal})}catch(e){return void l({ok:!1,error:e})}Promise.resolve(n).then(e=>l({ok:!0,points:e}),e=>l({ok:!1,error:e}))},m=(e,t,l,n,r,a=!1)=>{const i={controller:new AbortController,context:e,from:t,to:l,mode:n,version:r,liveAfter:a?o.liveRevision:null,started:!1,receive:()=>{}};o.request=i,f(i),c({state:"loading"}),d(i)},h=(t=!1)=>{if(!s()||At(l.dataContext?.()))return;const r=++a,i=()=>s()&&a===r,u=(()=>{const e=l.bars(),t=l.dataContext?.()??{symbol:l.symbol?.(),interval:l.interval?.()},o=l.requestState?.();return{settings:l.settings(),bars:e,dataContext:{...t},requestState:o,asOf:o?.replay?.asOf,from:e[0]?.time??0,to:e[e.length-1]?.time??0,requestBars:l.requestBars&&(e=>{const o=void 0===e.variant?St(t.variant):e.variant;return l.requestBars(void 0===o?e:{...e,variant:o})})}})(),p=o.lastContext;o.lastContext=u;const h=u.dataContext,b=u.requestState,g=b?.replay,w=b?.source,k=p?.requestState?.source,v=p?.requestState?.replay,N=JSON.stringify([ia(e,u.settings),h?.symbol,h?.exchange,h?.interval,h?.variant??null,b?.providerRevision,w?.sourceId,void 0!==g]),C=u.bars.length-(p?.bars.length??0),M=void 0!==p&&void 0!==k&&void 0!==w&&"prepend"===w.change&&w.revision===k.revision+1&&w.historyRevision===k.historyRevision+1&&u.bars!==p.bars&&C>0&&p.bars.every((e,t)=>u.bars[C+t]===e),x=void 0===g&&void 0!==w&&void 0!==k&&w.historyRevision!==k.historyRevision&&!M,A=void 0!==u.asOf&&void 0!==v?.asOf&&u.asOf<v.asOf,S=N!==o.key||x||A;if(S){if(y(),!i())return;o.key=N}let L;try{L=(void 0===g||!0===e.supportsReplay&&Number.isFinite(u.asOf))&&(e.supports?.(u)??!0)}catch(e){return void(i()&&c({state:"error",error:e}))}if(!i())return;if(!L)return y(),void(i()&&c({state:"unsupported"}));if(0===u.bars.length)return void(void 0!==b?(y(),i()&&c({state:"empty"})):null===o.request&&c({state:"empty"}));const B=JSON.stringify([N,u.from,void 0===e.subscribe||void 0!==g?u.to:null,void 0===g&&void 0===e.subscribe?w?.revision:null,b?.dataRevision,u.asOf]),F=u.from<o.from||void 0===e.subscribe&&u.to>o.to;if(null!==o.request){const e=o.request;f(e),d(e)}else if(t||S||(void 0!==b?o.completedVersion!==B||F&&"error"!==o.status.state:"error"!==o.status.state)){const l=void 0!==b&&(o.completedContext?.requestState?.dataRevision??o.baseDataRevision)!==b.dataRevision;!o.loaded||t||void 0!==g||l?m(u,u.from,u.to,"replace",B,l):u.from<o.from?m(u,u.from,o.from,"prepend",B):void 0===e.subscribe&&(u.to>o.to||void 0!==b)?m(u,o.to,u.to,"tail",B):c({state:o.points.length>0?"ready":"empty"})}if(i()&&null===o.subscription&&void 0!==e.subscribe&&void 0===g){const t=n,r={};o.subscription=r;try{const a=e.subscribe(u,e=>{s()&&n===t&&o.subscription===r&&Number.isFinite(e.time)&&(sa(o.live,e),o.liveVersions.set(e.time,++o.liveRevision),sa(o.points,e),l.requestRecompute(),s()&&n===t&&o.subscription===r&&null===o.request&&"error"!==o.status.state&&c({state:"ready"}))});s()&&n===t&&o.subscription===r?r.dispose=a:a()}catch(e){s()&&o.subscription===r&&(o.subscription=null,c({state:"error",error:e}))}}},b=()=>{if(!s()&&!r)return;if(r=!1,i(),l.signal?.removeEventListener("abort",g),o.generation!==n)return;o.generation+=1;const e=o.generation;l.setDataRetry?.(null),p(),queueMicrotask(()=>{o.generation===e&&u()})},g=()=>{o.generation===n&&u(),b()};p(),l.signal?.addEventListener("abort",g,{once:!0}),i=void 0!==l.requestState&&void 0!==l.subscribeRequestChanges?l.subscribeRequestChanges(()=>h()):l.subscribeDataChanges?.(()=>h())??(()=>{}),l.setDataRetry?.(()=>h(!0));const w=t.get(l.store);return"calc"===o.errorKind&&void 0===w&&(o.errorKind=void 0,o.status={state:o.points.length?"ready":"empty"}),l.setDataStatus?.(w?.points===o.points?{state:"error",error:w.error}:o.status),h("error"===o.status.state&&"calc"!==o.errorKind),b}}}const ua="indicators",pa=[al,sl,il,ml,cl,hl,wl,bl,gl,Sl,Ll,Bl,Fl,Kl,Wl,Dl,Ol,Rl,Tl,Pl,$l,Il,ql,...po,...Mo,...Io,...Zo,...en,...mn,...An,...Tn,...jn,...er,...yr,...mr,...Rr,...Hr,...ea];let ya=!1;function fa(){if(!ya){ya=!0;for(const e of pa)F(e)}}fa();export{en as ADAPTIVE_INDICATORS,Pl as ADL,Fl as ADX,pn as ALLIGATOR,Zl as ALMA,ur as ALPHATREND,fo as AROON,mo as AROON_OSCILLATOR,Dl as ATR,Wo as AVERAGE_DAILY_RANGE,mn as AVERAGE_INDICATORS,ho as AWESOME_OSCILLATOR,bo as BALANCE_OF_POWER,Bo as BB_TREND,cl as BOLLINGER,Lo as BOLLINGER_BANDWIDTH,So as BOLLINGER_PERCENT_B,pa as BUILTIN_INDICATORS,Kl as CCI,qo as CHAIKIN_MONEY_FLOW,Vo as CHAIKIN_OSCILLATOR,Ro as CHAIKIN_VOLATILITY,Ql as CHANDELIER_EXIT,_l as CHANDE_KROLL_STOP,go as CHANDE_MOMENTUM,Fo as CHOPPINESS_INDEX,Oo as CHOP_ZONE,Co as CONNORS_RSI,Qn as CONSOLIDATION_BREAKOUT,wo as COPPOCK_CURVE,cr as CPR,Yl as DEMA,Xl as DONCHIAN,ko as DPO,Ho as EASE_OF_MOVEMENT,zo as ELDER_FORCE_INDEX,Ir as ELDER_RAY,sl as EMA,Gl as ENVELOPE,Hr as EXPONENTIAL_INDICATORS,vo as FISHER_TRANSFORM,Zo as FLOW_INDICATORS,wl as HALFTREND,Qr as HIGH_LOW_52_WEEK,Ko as HISTORICAL_VOLATILITY,Jl as HMA,uo as HULL_SUITE,gl as ICHIMOKU,Tn as INDEX_INDICATORS,ua as INDICATORS_TIER,Yo as KAMA,Jo as KELTNER_CHANNEL,Xo as KLINGER_OSCILLATOR,_o as KNOW_SURE_THING,Qo as LINREG_SLOPE,Go as LSMA,Ll as MACD,On as MASS_INDEX,to as MA_CHANNEL,tn as MA_CROSS,an as MA_RIBBON,ln as MCGINLEY_DYNAMIC,on as MEDIAN,Wl as MFI,bn as MOMENTUM,jo as NET_VOLUME,Fn as NVI,Tl as OBV,$l as OPEN_INTEREST,ql as OPEN_INTEREST_BUILDUP,Il as OPEN_INTEREST_CHANGE,Mo as OSCILLATOR_INDICATORS,po as OVERLAY_INDICATORS,bl as PARABOLIC_SAR,kn as PPO,Kn as PVI,Dn as PVO,Wn as PVT,pr as RANGE_ANALYSIS,jn as RANGE_INDICATORS,En as RELATIVE_VIGOR_INDEX,qn as RELATIVE_VOLATILITY_INDEX,gn as ROC,Sl as RSI,_n as RSI_DIVERGENCE,Vr as SCHAFF_TREND_CYCLE,Or as SEASONALITY,Rr as SEASONALITY_INDICATORS,er as SIGNAL_INDICATORS,al as SMA,xn as SMI,Cn as SMI_ERGODIC_INDICATOR,Mn as SMI_ERGODIC_OSCILLATOR,yn as SMMA,zn as SPECIAL_K,To as STANDARD_DEVIATION,Po as STANDARD_ERROR,eo as STANDARD_ERROR_BANDS,Bl as STOCHASTIC,Un as STOCHASTIC_RSI,An as STRENGTH_INDICATORS,yr as STUDY_INDICATORS,hl as SUPERTREND,ea as SWING_INDICATORS,dn as T3,sn as TEMA,Jn as TREND_STRENGTH_INDEX,vn as TRIX,Nn as TSI,cn as TWAP,Rn as ULCER_INDEX,In as ULTIMATE_OSCILLATOR,$r as VIDYA,Io as VOLATILITY_INDICATORS,$o as VOLATILITY_SQUEEZE,Yn as VOLATILITY_STOP,Rl as VOLUME,Zn as VORTEX,ml as VWAP,un as VWMA,dr as WAVETREND,mr as WAVETREND_INDICATORS,Xn as WILLIAMS_FRACTALS,$n as WILLIAMS_PERCENT_R,Ol as WILLIAMS_VIX_FIX,il as WMA,Vn as WOODIES_CCI,Xr as ZIGZAG,Pr as ZLEMA,Mt as alignRequestedExpression,Ne as alma,Ee as barsSince,Oe as cci,I as centerOfGravity,ge as change,No as connorsStreak,De as correlation,Wt as createRequestedIndicator,ca as createTier2Indicator,na as createTimeframeProvider,Z as crosses,z as crossesAbove,j as crossesBelow,Le as cumulative,ke as dev,G as falling,de as highest,Me as highestBars,St as inheritedDataVariant,Be as linreg,me as lowest,xe as lowestBars,he as nulls,ve as percentRank,P as percentileLinear,We as percentileNearestRank,Pe as pivotHigh,Ue as pivotLow,U as rankCorrelation,fa as registerBuiltinIndicators,xt as requestedIntrabars,J as rising,ye as rma,we as roc,D as rollingMedian,O as rollingMode,T as rollingRange,Se as rollingSum,R as rollingVariance,V as runningMax,q as runningMin,wt as securityExpression,gt as securitySeries,ce as sma,be as smaSeededEma,fe as stdev,Ke as stoch,Fe as swma,qe as valueWhen,Ce as vwma,Ht as withTimeframe,ue as wma};
//# sourceMappingURL=openalgo-charts.indicators.mjs.map