openalgo-charts 2.3.2 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -23
- package/dist/index.d.ts +208 -7
- package/dist/indicators/index.d.ts +79 -2
- package/dist/openalgo-charts.indicators.mjs +1 -1
- package/dist/openalgo-charts.indicators.mjs.map +1 -1
- package/dist/openalgo-charts.mjs +1 -1
- package/dist/openalgo-charts.mjs.map +1 -1
- package/dist/openalgo-charts.standalone.js +1 -1
- package/dist/openalgo-charts.standalone.js.map +1 -1
- package/dist/openalgo-charts.webgl.mjs +1 -1
- package/dist/openalgo-charts.webgl.mjs.map +1 -1
- package/dist/openalgo-charts.widget.mjs +1 -1
- package/dist/openalgo-charts.widget.mjs.map +1 -1
- package/dist/profile/index.d.ts +9 -0
- package/dist/transform/index.d.ts +9 -0
- package/dist/webgl/index.d.ts +17 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{sourceValues as e,supertrend as l,atr as t,sessionStartFlags as o,calendarPeriodFlags as n,DEFAULT_TIMEZONE as r,isValidTimezone as a,isNewZonedPeriod as i,utcSecondsToIstParts as s,IST_OFFSET_SECONDS as c,rsi as p,trueRange as y,isNewZonedWeek as u,isNewZonedMonth as f,utcSecondsToZonedParts as d,zonedWallClockToUtcSeconds as m,registerIndicator as b}from"./openalgo-charts.mjs";function h(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0,r=0;for(let a=0;a<t;a++){const t=e[a];if(Number.isFinite(t)?n+=t:r+=1,a>=l){const t=e[a-l];Number.isFinite(t)?n-=t:r-=1}a>=l-1&&(o[a]=0===r?n/l:NaN)}return o}function g(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=l*(l+1)/2;for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=e[r-o]*(l-o);o[r]=t/n}return o}function k(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let t=0;t<l;t++)n+=e[t];let r=n/l;o[l-1]=r;for(let n=l;n<t;n++)r=(r*(l-1)+e[n])/l,o[n]=r;return o}function w(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=h(e,l);for(let r=l-1;r<t;r++){let t=0;const a=n[r];for(let o=0;o<l;o++){const l=e[r-o]-a;t+=l*l}o[r]=Math.sqrt(t/l)}return o}function C(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l-1;n<t;n++){let t=-1/0;for(let o=0;o<l;o++)e[n-o]>t&&(t=e[n-o]);o[n]=t}return o}function M(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l-1;n<t;n++){let t=1/0;for(let o=0;o<l;o++)e[n-o]<t&&(t=e[n-o]);o[n]=t}return o}function v(e){const l=new Array(e.length);for(let t=0;t<e.length;t++){const o=e[t];l[t]=Number.isFinite(o)?o:null}return l}function A(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let t=0;t<l;t++)n+=e[t];let r=n/l;o[l-1]=r;const a=2/(l+1);for(let n=l;n<t;n++)r=e[n]*a+r*(1-a),o[n]=r;return o}function N(e,l=1){const t=e.length,o=new Array(t).fill(NaN);for(let n=l;n<t;n++)o[n]=e[n]-e[n-l];return o}function x(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l;n<t;n++){const t=e[n-l];o[n]=0===t?NaN:100*(e[n]-t)/t}return o}function S(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=h(e,l);for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=Math.abs(e[r-o]-n[r]);o[r]=t/l}return o}function L(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l;n<t;n++){let t=0;for(let o=1;o<=l;o++)e[n-o]<=e[n]&&(t+=1);o[n]=100*t/l}return o}function B(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN);if(l<=0||o<=0||n<l)return r;const a=t*(l-1),i=l/o,s=new Array(l);let c=0;for(let e=0;e<l;e++){const l=Math.exp(-(e-a)*(e-a)/(2*i*i));s[e]=l,c+=l}if(0===c)return r;for(let t=l-1;t<n;t++){let o=0;for(let n=0;n<l;n++)o+=e[t-(l-1-n)]*s[n];r[t]=o/c}return r}function K(e,l,t){const o=e.length,n=new Array(o);for(let t=0;t<o;t++)n[t]=e[t]*(l[t]??0);const r=h(n,t),a=h(l,t),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 W(e,l){return F(e,l,!0)}function D(e,l){return F(e,l,!1)}function F(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0||o<l)return n;for(let r=l-1;r<o;r++){let o=e[r],a=0;for(let n=1;n<l;n++){const l=e[r-n];(t?l>o:l<o)&&(o=l,a=n)}n[r]=0===a?0:-a}return n}function R(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let r=0;r<t;r++)n+=e[r],r>=l&&(n-=e[r-l]),r>=l-1&&(o[r]=n);return o}function U(e){const l=e.length,t=new Array(l);let o=0;for(let n=0;n<l;n++){const l=e[n];Number.isFinite(l)&&(o+=l),t[n]=o}return t}function T(e,l,t=0){const o=e.length,n=new Array(o).fill(NaN);if(l<=1||o<l)return n;const r=(l-1)*l/2,a=l*((l-1)*l*(2*l-1)/6)-r*r;if(0===a)return n;for(let i=l-1;i<o;i++){let o=0,s=0;for(let t=0;t<l;t++){const n=e[i-(l-1-t)];o+=n,s+=n*t}const c=(l*s-r*o)/a,p=(o-c*r)/l;n[i]=p+c*(l-1-t)}return n}function P(e){const l=e.length,t=new Array(l).fill(NaN);for(let o=3;o<l;o++)t[o]=(e[o-3]+2*e[o-2]+2*e[o-1]+e[o])/6;return t}function O(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN),a=C(l,o),i=M(t,o);for(let l=0;l<n;l++){const t=a[l]-i[l];r[l]=0===t?NaN:100*(e[l]-i[l])/t}return r}function I(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0||o<l)return n;for(let r=l-1;r<o;r++){const o=e.slice(r-l+1,r+1);if(o.some(e=>!Number.isFinite(e)))continue;o.sort((e,l)=>e-l);const a=Math.max(1,Math.ceil(t/100*l));n[r]=o[a-1]}return n}function V(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(t<=1||o<t)return n;for(let r=t-1;r<o;r++){let o=0,a=0,i=0,s=0,c=0;for(let n=0;n<t;n++){const t=e[r-n],p=l[r-n];o+=t,a+=p,i+=t*t,s+=p*p,c+=t*p}const p=t*c-o*a,y=Math.sqrt(t*i-o*o)*Math.sqrt(t*s-a*a);n[r]=0===y?NaN:p/y}return n}function H(e,l){const t=e.length,o=new Array(t).fill(NaN),n=h(e,l),r=S(e,l);for(let l=0;l<t;l++)o[l]=0===r[l]?NaN:(e[l]-n[l])/(.015*r[l]);return o}function E(e,l,t){return q(e,l,t,!0)}function $(e,l,t){return q(e,l,t,!1)}function q(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN);for(let a=l+t;a<n;a++){const n=a-t,i=e[n];if(!Number.isFinite(i))continue;let s=!0;for(let t=1;t<=l&&s;t++){const l=e[n-t];Number.isFinite(l)&&!(o?l>=i:l<=i)||(s=!1)}for(let l=1;l<=t&&s;l++){const t=e[n+l];Number.isFinite(t)&&!(o?t>=i:t<=i)||(s=!1)}s&&(r[a]=i)}return r}function z(e){const l=e.length,t=new Array(l).fill(NaN);let o=-1;for(let n=0;n<l;n++)e[n]&&(o=n),o>=0&&(t[n]=n-o);return t}function Z(e,l,t){const o=e.length,n=new Array(o).fill(NaN),r=[];for(let a=0;a<o;a++){e[a]&&r.push(a);const o=r.length-1-t;o>=0&&(n[a]=l[r[o]])}return n}const Y=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},j=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},G=(e,l="source")=>e[l]??"close";function X(l,t,o,n){return{id:l,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"},{key:"color",type:"color",label:"Color",default:o}],plots:[{key:"ma",type:"line",title:t,colorKey:"color",style:{color:o,lineWidth:1.5}}],calc:(l,t)=>({ma:v(n(e(l,G(t)),Y(t,"length",9)))})}}const J=X("sma","SMA","#4f8cff",h),_=X("wma","WMA","#ab47bc",g),Q=X("ema","EMA","#f5a623",A),ee={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:(l,t)=>{const o=e(l,G(t)),n=Y(t,"length",20),r=Y(t,"stdDev",2),a=h(o,n),i=w(o,n),s=a.map((e,l)=>e+r*i[l]),c=a.map((e,l)=>e-r*i[l]);return{upper:v(s),basis:v(a),lower:v(c)}}},le=e=>Math.floor(((e=>Math.floor((e+c)/86400))(e)-4)/7);function te(e,l){return l===r?(l,t)=>function(e,l,t){if("week"===e)return le(l)!==le(t);const o=s(l),n=s(t);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)}(e,l,t):(t,o)=>i(t,o,e,l)}function oe(e,l){if(0===l)return e.slice();const t=new Array(e.length).fill(NaN);for(let o=0;o<e.length;o++){const n=o+l;n>=0&&n<e.length&&(t[n]=e[o])}return t}const ne={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:(l,t)=>{const i=l.length,s=e(l,G(t)),c="string"==typeof t.anchor?t.anchor:"session",p="percent"===t.calcMode,y=Math.round(Y(t,"offset",0)),u=new Array(i).fill(NaN),f=new Array(i).fill(NaN),d=function(e,l,t){if("continuous"===l)return new Array(e.length).fill(!1);const r=e.map(e=>e.time);return"session"===l?o(r,t):n(r,te(l,t))}(l,c,(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(t));let m=0,b=0,h=0;for(let e=0;e<i;e++){d[e]&&(m=0,b=0,h=0);const t=l[e].volume??0,o=s[e];if(m+=o*t,h+=o*o*t,b+=t,b<=0)continue;const n=m/b;u[e]=n;const r=Math.max(0,h/b-n*n);f[e]=p?.01*n:Math.sqrt(r)}const g=(e,l,t)=>{const o=new Array(i).fill(NaN);if(!e)return o;for(let e=0;e<i;e++)Number.isFinite(u[e])&&Number.isFinite(f[e])&&(o[e]=u[e]+t*f[e]*l);return o},k=!1!==t.showBand1,w=!0===t.showBand2,C=!0===t.showBand3,M=Y(t,"bandMult1",1),A=Y(t,"bandMult2",2),N=Y(t,"bandMult3",3);return{vwap:v(oe(u,y)),upper1:v(oe(g(k,M,1),y)),lower1:v(oe(g(k,M,-1),y)),upper2:v(oe(g(w,A,1),y)),lower2:v(oe(g(w,A,-1),y)),upper3:v(oe(g(C,N,1),y)),lower3:v(oe(g(C,N,-1),y))}}},re={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 o=l(e,Y(t,"period",10),Y(t,"multiplier",3)),n=[],r=[],a=[];for(let l=0;l<o.length;l++){const t=o[l],i=Number.isFinite(t.value);n.push(i&&-1===t.direction?t.value:null),r.push(i&&1===t.direction?t.value:null);const s=e[l];a.push(i&&void 0!==s?(s.open+s.close)/2:null)}return{up:n,down:r,bodyMid:a}}},ae={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,l)=>{const t=e.length,o=new Array(t).fill(NaN);if(t<2)return{sar:v(o)};const n=Y(l,"start",.02),r=Y(l,"increment",.02),a=Y(l,"maximum",.2);let i=e[1].close>=e[0].close,s=i?e[0].low:e[0].high,c=i?e[1].high:e[1].low,p=n;o[1]=s;for(let l=2;l<t;l++){s+=p*(c-s),i&&e[l].low<s?(i=!1,s=Math.max(c,e[l].high),c=e[l].low,p=n):!i&&e[l].high>s?(i=!0,s=Math.min(c,e[l].low),c=e[l].high,p=n):i&&e[l].high>c?(c=e[l].high,p=Math.min(a,p+r)):!i&&e[l].low<c&&(c=e[l].low,p=Math.min(a,p+r));const t=e[l-1].low,y=e[l-1].high,u=e[l-2].low,f=e[l-2].high;s=i?Math.min(s,t,u):Math.max(s,y,f),o[l]=s}return{sar:v(o)}}};function ie(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}const se={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,l)=>{const t=e.length,o=Y(l,"conversionPeriod",9),n=Y(l,"basePeriod",26),r=Y(l,"laggingSpanPeriod",52),a=Y(l,"displacement",26),i=l=>{const o=new Array(t).fill(NaN);for(let n=l-1;n<t;n++){let t=-1/0,r=1/0;for(let o=0;o<l;o++)e[n-o].high>t&&(t=e[n-o].high),e[n-o].low<r&&(r=e[n-o].low);o[n]=(t+r)/2}return o},s=i(o),c=i(n),p=s.map((e,l)=>(e+c[l])/2),y=i(r),u=e.map(e=>e.close);return{conversion:v(s),base:v(c),spanA:v(ie(p,a)),spanB:v(ie(y,a)),lagging:v(ie(u,-a))}}},ce={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:l,settings:t})=>{if(!1===t.showLabels)return[];const o=l.buySignal??[],n=l.sellSignal??[],r=[];for(let l=0;l<e.length;l++){const a=o[l];if(null!=a){r.push({time:e[l].time,position:"atPrice",price:a,shape:"labelUp",size:"small",color:j(t,"upColor","#2962ff"),text:"Buy"});continue}const i=n[l];null!=i&&r.push({time:e[l].time,position:"atPrice",price:i,shape:"labelDown",size:"small",color:j(t,"downColor","#ef5350"),text:"Sell"})}return r},calc:(e,l)=>{const o=e.length,n=new Array(o).fill(null),r=new Array(o).fill(null),a=new Array(o).fill(null),i=new Array(o).fill(null),s=new Array(o).fill(null),c=new Array(o).fill(null),p={up:n,down:r,atrHigh:a,atrLow:i,buySignal:s,sellSignal:c};if(0===o)return p;const y=Math.max(1,Math.round(Y(l,"amplitude",2))),u=Y(l,"channelDeviation",2),f=!1!==l.showChannels,d=!1!==l.showSignals,m=e.map(e=>e.high),b=e.map(e=>e.low),g=t(m,b,e.map(e=>e.close),Math.max(1,Math.round(Y(l,"atrPeriod",100)))),k=h(m,y),w=h(b,y),v=C(m,y),A=M(b,y);let N=0,x=0,S=b[0],L=m[0],B=0,K=0,W=!1;for(let l=0;l<o;l++){const t=g[l]/2,o=u*t,p=v[l],y=A[l],h=l>0?m[l-1]:m[0],C=l>0?b[l-1]:b[0],M=W?N:-1;let D;1===x?(Number.isFinite(y)&&(S=Math.max(y,S)),Number.isFinite(k[l])&&k[l]<S&&e[l].close<C&&(N=1,x=0,L=p)):(Number.isFinite(p)&&(L=Math.min(p,L)),Number.isFinite(w[l])&&w[l]>L&&e[l].close>h&&(N=0,x=1,S=y)),0===N?(1===M?(B=K,d&&Number.isFinite(t)&&(s[l]=B-t)):B=-1===M?S:Math.max(S,B),D=B):(0===M?(K=B,d&&Number.isFinite(t)&&(c[l]=K+t)):K=-1===M?L:Math.min(L,K),D=K),W=!0,Number.isFinite(D)&&(0===N?n[l]=D:r[l]=D,f&&Number.isFinite(o)&&(a[l]=D+o,i[l]=D-o))}return p}},pe=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},ye=e=>e.source??"close",ue=(e,l)=>new Array(e).fill(l);function fe(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n),n);for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}const de={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:(l,t)=>({rsi:v(p(e(l,ye(t)),pe(t,"length",14))),upperLevel:ue(l.length,pe(t,"overbought",70)),lowerLevel:ue(l.length,pe(t,"oversold",30))}),levels:e=>[{price:pe(e,"overbought",70),color:"#ef5350",title:"OB",dashed:!0},{price:50,color:"#5a6b8c",title:"",dashed:!0},{price:pe(e,"oversold",30),color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},me={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:l,values:t,settings:o})=>{const n=t.histogram?.[l-1],r=null==n||!Number.isFinite(n)||e>=n,a=(e,l)=>{const t=o[e];return"string"==typeof t?t:l};return e>=0?r?a("histUpColor","#26a69a"):a("histUpFadeColor","#a7d8d2"):r?a("histDownFadeColor","#f5b0ae"):a("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:(l,t)=>{const o=e(l,ye(t)),n=A(o,pe(t,"fastPeriod",12)),r=A(o,pe(t,"slowPeriod",26)),a=n.map((e,l)=>e-r[l]),i=fe(a,e=>A(e,pe(t,"signalPeriod",9))),s=a.map((e,l)=>e-i[l]);return{macd:v(a),signal:v(i),histogram:v(s)}},levels:()=>[{price:0,color:"#5a6b8c",dashed:!0}]},be={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,l)=>{const t=C(e.map(e=>e.high),pe(l,"kPeriod",14)),o=M(e.map(e=>e.low),pe(l,"kPeriod",14)),n=e.map((e,l)=>{const n=t[l]-o[l];return n>0?(e.close-o[l])/n*100:NaN}),r=h(n,pe(l,"kSmoothing",1)),a=h(r,pe(l,"dPeriod",3));return{k:v(r),d:v(a),upperLevel:ue(e.length,80),lowerLevel:ue(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})},he={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,l)=>{const t=e.length,o=pe(l,"period",14),n=e.map(e=>e.high),r=e.map(e=>e.low),a=e.map(e=>e.close),i=y(n,r,a);t>0&&(i[0]=NaN);const s=new Array(t).fill(0),c=new Array(t).fill(0);for(let e=1;e<t;e++){const l=n[e]-n[e-1],t=r[e-1]-r[e];s[e]=l>t&&l>0?l:0,c[e]=t>l&&t>0?t:0}const p=i.findIndex(e=>Number.isFinite(e)),u=new Array(t).fill(NaN);if(p>=0){const e=k(i.slice(p),o);for(let l=0;l<e.length&&p+l<t;l++)u[p+l]=e[l]}const f=k(s,o),d=k(c,o),m=new Array(t).fill(NaN),b=new Array(t).fill(NaN),h=new Array(t).fill(NaN);let g=NaN,w=NaN;for(let e=0;e<t;e++){const l=u[e];if(Number.isFinite(l)&&0!==l&&(g=f[e]/l*100,w=d[e]/l*100),!Number.isFinite(g)||!Number.isFinite(w))continue;m[e]=g,b[e]=w;const t=g+w;h[e]=t>0?Math.abs(g-w)/t*100:0}const C=h.findIndex(e=>Number.isFinite(e)),M=new Array(t).fill(NaN);if(C>=0){const e=k(h.slice(C),pe(l,"adxPeriod",14));for(let l=0;l<e.length;l++)M[C+l]=e[l]}return{plusDi:v(m),minusDi:v(b),adx:v(M)}},levels:()=>[{price:25,color:"#5a6b8c",title:"25",dashed:!0}]},ge={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"},{key:"maType",type:"select",label:"Type",default:"SMA",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:20,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:"CCI-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"}],plots:[{key:"cci",type:"line",title:"CCI",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"CCI-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}}],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1},{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=pe(l,"period",20),n=pe(l,"constant",.015),r=e.map(e=>(e.high+e.low+e.close)/3),a=h(r,o),i=new Array(t).fill(NaN);for(let e=o-1;e<t;e++){let l=0;for(let t=0;t<o;t++)l+=Math.abs(r[e-t]-a[e]);const t=l/o;i[e]=t>0?(r[e]-a[e])/(n*t):0}const s=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(l,"maType","SMA"),c=((e,l,t,o=1)=>Math.max(o,Math.round(pe(e,l,t))))(l,"maLength",20),p=pe(l,"bbMult",2),y="None"===s?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return fe(l,e=>A(e,o));case"SMMA (RMA)":return fe(l,e=>k(e,o));case"WMA":return fe(l,e=>g(e,o));case"VWMA":return fe(l,(e,l)=>K(e,t.slice(l),o));default:return fe(l,e=>h(e,o))}}(s,i,e.map(e=>e.volume??0),c),u="SMA + Bollinger Bands"===s?fe(i,e=>w(e,c)).map(e=>e*p):new Array(t).fill(NaN);return{cci:v(i),ma:v(y),bbUpper:v(y.map((e,l)=>e+u[l])),bbLower:v(y.map((e,l)=>e-u[l])),upperLevel:ue(t,100),lowerLevel:ue(t,-100)}},levels:()=>[{price:100,color:"#ef5350",dashed:!0},{price:0,color:"#5a6b8c",dashed:!0},{price:-100,color:"#26a69a",dashed:!0}]},ke={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,l)=>{const t=e.length,o=pe(l,"period",14),n=e.map(e=>(e.high+e.low+e.close)/3),r=new Array(t).fill(0),a=new Array(t).fill(0);for(let l=1;l<t;l++){const t=n[l]*(e[l].volume??0);n[l]>n[l-1]?r[l]=t:n[l]<n[l-1]&&(a[l]=t)}const i=new Array(t).fill(NaN);for(let e=o;e<t;e++){let l=0,t=0;for(let n=0;n<o;n++)l+=r[e-n],t+=a[e-n];i[e]=0===t?100:100-100/(1+l/t)}return{mfi:v(i),upperLevel:ue(t,80),lowerLevel:ue(t,20)}},levels:()=>[{price:80,color:"#ef5350",title:"OB",dashed:!0},{price:20,color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},we={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,l)=>({atr:v(t(e.map(e=>e.high),e.map(e=>e.low),e.map(e=>e.close),pe(l,"period",14)))})},Ce={id:"williams-vix-fix",name:"William 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:l,settings:t})=>{const o=l.wvf?.[e],n=l.alertUpper?.[e],r=l.alertHigh?.[e],a=(e,l)=>"string"==typeof t[e]?t[e]:l;if(null==o)return;return null!=n&&o>=n||null!=r&&o>=r?a("highColor","#00ff00"):a("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,l)=>{const t=e.length,o=e.map(e=>e.close),n=e.map(e=>e.low),r=pe(l,"pd",22),a=pe(l,"bbl",20),i=pe(l,"mult",2),s=pe(l,"lb",50),c=pe(l,"ph",.85),p=pe(l,"pl",1.01),y=!0===l.hp,u=!0===l.sd,f=C(o,r),d=new Array(t);for(let e=0;e<t;e++){const l=f[e];d[e]=Number.isFinite(l)&&0!==l?(l-n[e])/l*100:NaN}const m=w(d,a),b=h(d,a),g=C(d,s),k=M(d,s),A=new Array(t),N=new Array(t),x=new Array(t),S=new Array(t),L=new Array(t);for(let e=0;e<t;e++){const l=b[e]+i*m[e],t=g[e]*c,o=k[e]*p;A[e]=Number.isFinite(l)?l:null,N[e]=Number.isFinite(t)?t:null,x[e]=u?A[e]:null,S[e]=y?N[e]:null,L[e]=y&&Number.isFinite(o)?o:null}return{wvf:v(d),rangeHigh:S,rangeLow:L,upperBand:x,alertUpper:A,alertHigh:N}}},Me=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t};const ve={id:"volume",name:"Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#3a4666"}],plots:[{key:"volume",type:"histogram",title:"Volume",colorKey:"color",style:{base:0}}],calc:e=>({volume:v(e.map(e=>e.volume??0))})},Ae={id:"obv",name:"On-Balance Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#26c6da"},{key:"maType",type:"select",label:"Type",default:"None",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:9,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:"OBV-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"}],plots:[{key:"obv",type:"line",title:"OBV",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"OBV-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}}],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=new Array(t).fill(NaN);let n=0;for(let l=0;l<t;l++){if(l>0){const t=e[l].volume??0;e[l].close>e[l-1].close?n+=t:e[l].close<e[l-1].close&&(n-=t)}o[l]=n}const r=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(l,"maType","None"),a=((e,l,t,o=1)=>Math.max(o,Math.round(Me(e,l,t))))(l,"maLength",9),i=Me(l,"bbMult",2),s="None"===r?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return A(l,o);case"SMMA (RMA)":return k(l,o);case"WMA":return g(l,o);case"VWMA":return K(l,t,o);default:return h(l,o)}}(r,o,e.map(e=>e.volume??0),a),c="SMA + Bollinger Bands"===r?w(o,a).map(e=>e*i):new Array(t).fill(NaN);return{obv:v(o),ma:v(s),bbUpper:v(s.map((e,l)=>e+c[l])),bbLower:v(s.map((e,l)=>e-c[l]))}}},Ne={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 l=new Array(e.length).fill(NaN);let t=0;for(let o=0;o<e.length;o++){const n=e[o],r=n.high-n.low;r>0&&(t+=(n.close-n.low-(n.high-n.close))/r*(n.volume??0)),l[o]=t}return{adl:v(l)}}},xe=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Se=(e,l,t,o=1)=>Math.max(o,Math.round(xe(e,l,t))),Le=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},Be=(e,l="source")=>e[l]??"close",Ke=e=>e.map(e=>e.high),We=e=>e.map(e=>e.low);function De(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=A(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}function Fe(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0)return n;for(let r=l-1;r<o;r++){let o=t?-1/0:1/0,a=!0;for(let n=0;n<l;n++){const l=e[r-n];if(!Number.isFinite(l)){a=!1;break}(t?l>o:l<o)&&(o=l)}a&&(n[r]=o)}return n}function Re(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}const Ue=.05,Te={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:(l,t)=>({alma:v(B(e(l,"close"),Se(t,"length",9),xe(t,"offset",.85),xe(t,"sigma",6)))})},Pe={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:(l,t)=>{const o=e(l,Be(t)),n=Se(t,"length",9),r=A(o,n),a=De(r,n);return{dema:v(r.map((e,l)=>2*e-a[l]))}}};const Oe={id:"hma",name:"Hull Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:2,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:(l,t)=>{const o=e(l,Be(t)),n=Se(t,"length",9,2),r=Math.max(.5,n/2),a=Math.max(1,Math.floor(Math.sqrt(n))),i=function(e,l){const t=e.length,o=new Array(t).fill(NaN),n=Math.ceil(l);if(l<=0||t<n)return o;let r=0;for(let e=0;e<n;e++)r+=l-e;for(let a=n-1;a<t;a++){let t=0;for(let o=0;o<n;o++)t+=e[a-o]*(l-o);o[a]=t/r}return o}(o,r),s=g(o,n);return{hma:v(g(i.map((e,l)=>2*e-s[l]),a))}}},Ie={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:Ue}],calc:(l,t)=>{const o=e(l,Be(t)),n=Se(t,"length",20),r=xe(t,"percent",10)/100,a=!0===t.exponential?A(o,n):h(o,n);return{upper:v(a.map(e=>e*(1+r))),basis:v(a),lower:v(a.map(e=>e*(1-r)))}}},Ve={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:Ue}],calc:(e,l)=>{const t=Se(l,"length",20),o=Math.round(xe(l,"offset",0)),n=C(Ke(e),t),r=M(We(e),t),a=n.map((e,l)=>(e+r[l])/2);return{upper:v(Re(n,o)),basis:v(Re(a,o)),lower:v(Re(r,o))}}},He={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,l)=>{const o=Se(l,"p",10),n=Se(l,"x",1),r=Se(l,"q",9),a=Ke(e),i=We(e),s=t(a,i,e.map(e=>e.close),o),c=C(a,o).map((e,l)=>e-n*s[l]);return{stopLong:v(Fe(M(i,o).map((e,l)=>e+n*s[l]),r,!1)),stopShort:v(Fe(c,r,!0))}}},Ee={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,l)=>{const o=Se(l,"length",22),n=xe(l,"atrMultiplier",3),r=Ke(e),a=We(e),i=t(r,a,e.map(e=>e.close),Se(l,"atrLength",22));return{longExit:v(C(r,o).map((e,l)=>e-n*i[l])),shortExit:v(M(a,o).map((e,l)=>e+n*i[l]))}}};const $e={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:Ue}],calc:(l,t)=>{const o=e(l,"close"),n=Se(t,"periods",21,3),r=xe(t,"errors",2),a=Se(t,"averagePeriods",3),i=function(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<3||t<l)return o;const n=(l+1)/2;for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=e[r-o];const a=t/l;let i=0,s=0,c=0;for(let t=0;t<l;t++){const l=a-e[r-t],o=n-t-1;i+=l*l,s+=o*l,c+=o*o}o[r]=Math.sqrt((i-s*s/c)/(l-2))}return o}(o,n),s=T(o,n,0),c=e=>v("Exponential"===t.method?De(e,a):"Weighted"===t.method?g(e,a):h(e,a));return{upper:c(s.map((e,l)=>e+r*i[l])),basis:c(s),lower:c(s.map((e,l)=>e-r*i[l]))}}},qe={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:Ue}],calc:(e,l)=>({upper:v(Re(h(Ke(e),Se(l,"upperLength",20)),Math.round(xe(l,"upperOffset",0)))),lower:v(Re(h(We(e),Se(l,"lowerLength",20)),Math.round(xe(l,"lowerOffset",0))))})},ze="#00ff00",Ze="#ff0000",Ye="#ff9800",je=e=>Math.max(1,Math.floor(e)),Ge=e=>Math.max(1,Math.round(Math.sqrt(e)));function Xe(e,l,t){return"Ehma"===l?function(e,l){const t=A(e,je(l/2)),o=A(e,l);return De(t.map((e,l)=>2*e-o[l]),Ge(l))}(e,t):"Thma"===l?function(e,l){const t=g(e,je(l/3)),o=g(e,je(l/2)),n=g(e,l);return g(t.map((e,l)=>3*e-o[l]-n[l]),l)}(e,je(t/2)):function(e,l){const t=g(e,je(l/2)),o=g(e,l);return g(t.map((e,l)=>2*e-o[l]),Ge(l))}(e,t)}const Je=(e,l,t)=>{if(!1===t.switchColor)return Le(t,"neutralColor",Ye);const o=e?.[l],n=e?.[l-2];return"number"==typeof o&&"number"==typeof n&&o>n?Le(t,"bullishColor",ze):Le(t,"bearishColor",Ze)},_e={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:ze},{key:"bearishColor",type:"color",label:"Bearish Color",default:Ze},{key:"neutralColor",type:"color",label:"Neutral Color",default:Ye}],plots:[{key:"mhull",type:"line",title:"Hull",colorKey:"neutralColor",style:{color:Ye,lineWidth:2},colorBy:({index:e,values:l,settings:t})=>Je(l.mhull,e,t)},{key:"shull",type:"line",title:"Hull Displaced",colorKey:"neutralColor",style:{color:Ye,lineWidth:2},colorBy:({index:e,values:l,settings:t})=>Je(l.mhull,e,t)}],fills:[{between:["mhull","shull"],colorUp:ze,colorDown:Ze,colorUpKey:"bullishColor",colorDownKey:"bearishColor",opacity:.6}],calc:(l,t)=>{const o=e(l,Be(t)),n=je(Se(t,"length",55)*xe(t,"lengthMult",1)),r=Xe(o,Le(t,"mode","Hma"),n),a=!1!==t.visualSwitch;return{mhull:v(r),shull:v(a?Re(r,2):new Array(r.length).fill(NaN))}},barColors:({bars:e,values:l,settings:t})=>!0===t.candleCol?e.map((e,o)=>Je(l.mhull,o,t)):e.map(()=>null)},Qe=[Te,Pe,Oe,Ie,Ve,He,Ee,$e,qe,_e],el=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),ll=l=>e(l,"hl2"),tl={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,l)=>{const t=el(l,"length",14),o=W(e.map(e=>e.high),t+1),n=D(e.map(e=>e.low),t+1),r=e=>e.map(e=>100*(e+t)/t);return{up:v(r(o)),down:v(r(n))}},levels:()=>[{price:50,color:"#5a6b8c",dashed:!0}],range:()=>({min:0,max:100})},ol={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,l)=>{const t=el(l,"length",14),o=W(e.map(e=>e.high),t+1),n=D(e.map(e=>e.low),t+1),r=o.map((e,l)=>100*(e-n[l])/t);return{osc:v(r),zero:r.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})},nl={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:l,values:t,settings:o})=>{const n=t.ao?.[l-1],r=(e,l)=>"string"==typeof o[e]?o[e]:l;return null==n||!Number.isFinite(n)||e-n>0?r("upColor","#009688"):r("downColor","#f44336")}}],calc:e=>{const l=ll(e),t=h(l,5),o=h(l,34);return{ao:v(t.map((e,l)=>e-o[l]))}},levels:()=>[{price:0,color:"#787b86"}]},rl={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 l=e.high-e.low;return 0===l?null:(e.close-e.open)/l})}),levels:()=>[{price:0,color:"#787b86"}]},al={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:(l,t)=>{const o=l.length,n=el(t,"length",9),r=N(e(l,(e=>e.source??"close")(t))),a=new Array(Math.max(0,o-1)),i=new Array(Math.max(0,o-1));for(let e=1;e<o;e++){const l=r[e];a[e-1]=l>=0?l:0,i[e-1]=l>=0?0:-l}const s=R(a,n),c=R(i,n),p=new Array(o).fill(NaN);for(let e=0;e<s.length;e++){const l=s[e]+c[e];p[e+1]=0===l?NaN:100*(s[e]-c[e])/l}return{cmo:v(p)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]},il={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,l)=>{const t=e.map(e=>e.close),o=x(t,el(l,"longRoCLength",14)),n=x(t,el(l,"shortRoCLength",11));return{curve:v(g(o.map((e,l)=>e+n[l]),el(l,"wmaLength",10)))}}},sl={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,l)=>{const t=e.length,o=el(l,"period",21),n=Math.floor(o/2)+1,r=e.map(e=>e.close),a=h(r,o),i=new Array(t).fill(NaN);if(!0===l.isCentered)for(let e=0;e+n<t;e++)i[e]=r[e]-a[e+n];else for(let e=n;e<t;e++)i[e]=r[e]-a[e-n];return{dpo:v(i)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line"}]},cl={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,l)=>{const t=e.length,o=el(l,"length",9),n=ll(e),r=C(n,o),a=M(n,o),i=new Array(t).fill(NaN);let s=0,c=0;for(let e=0;e<t;e++){const l=r[e]-a[e];if(!Number.isFinite(l)){s=0,c=0;continue}const t=.66*((n[e]-a[e])/Math.max(l,.001)-.5)+.67*s,o=t>.99?.999:t<-.99?-.999:t,p=.5*Math.log((1+o)/(1-o))+.5*c;i[e]=p,s=o,c=p}const p=new Array(t).fill(NaN);for(let e=1;e<t;e++)p[e]=i[e-1];return{fisher:v(i),trigger:v(p)}},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 pl(e){const l=e.length,t=new Array(l).fill(0);for(let o=0;o<l;o++){const l=o>0?t[o-1]:0;o>0&&e[o]===e[o-1]?t[o]=0:o>0&&e[o]>e[o-1]?t[o]=l<=0?1:l+1:t[o]=l>=0?-1:l-1}return t}const yl={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,l)=>{const t=e.length,o=e.map(e=>e.close),n=p(o,el(l,"lenrsi",3)),r=p(pl(o),el(l,"lenupdown",2)),a=L(x(o,1).slice(1),el(l,"lenroc",100)),i=new Array(t).fill(NaN);for(let e=0;e<a.length;e++)i[e+1]=a[e];const s=new Array(t);for(let e=0;e<t;e++)s[e]=(n[e]+r[e]+i[e])/3;return{crsi:v(s),bandHigh:new Array(t).fill(70),bandLow:new Array(t).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})},ul=[tl,ol,nl,rl,al,il,sl,cl,yl];function fl(e,l){return`${e}${Math.round(255*(1-l/100)).toString(16).padStart(2,"0")}`}const dl=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},ml=e=>e.source??"close",bl=(e,l,t)=>"string"==typeof e[l]?e[l]:t;function hl(e,l,t){const o=e.length,n=h(e,l),r=w(e,l),a=new Array(o),i=new Array(o);for(let e=0;e<o;e++){const l=t*r[e];a[e]=n[e]+l,i[e]=n[e]-l}return{middle:n,upper:a,lower:i}}function gl(e,l){const t=e.length;if(0===l)return e.slice();const o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n+l;r>=0&&r<t&&(o[r]=e[n])}return o}const kl={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:(l,t)=>{const o=e(l,ml(t)),{upper:n,lower:r}=hl(o,dl(t,"length",20),dl(t,"mult",2)),a=new Array(o.length);for(let e=0;e<o.length;e++){const l=n[e]-r[e];a[e]=l>0?(o[e]-r[e])/l:NaN}return{percentB:v(a),bandHigh:new Array(l.length).fill(1),bandLow:new Array(l.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}]},wl={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:(l,t)=>{const o=e(l,ml(t)),{middle:n,upper:r,lower:a}=hl(o,dl(t,"length",20),dl(t,"mult",2)),i=new Array(o.length);for(let e=0;e<o.length;e++)i[e]=0===n[e]?NaN:(r[e]-a[e])/n[e]*100;return{bandwidth:v(i),expansion:v(C(i,dl(t,"expansionLength",125))),contraction:v(M(i,dl(t,"contractionLength",125)))}}},Cl={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:l,values:t,settings:o})=>{const n=t.bbtrend?.[l-1],r="number"==typeof n&&Number.isFinite(n);return r&&e>0?fl(bl(o,"posColor","#089981"),e>=n?25:50):r&&e<0?fl(bl(o,"negColor","#f23645"),e>n?50:25):fl(bl(o,"posColor","#089981"),50)}}],calc:(e,l)=>{const t=e.map(e=>e.close),o=dl(l,"stdDevMult",2),n=hl(t,dl(l,"shortLength",20),o),r=hl(t,dl(l,"longLength",50),o),a=new Array(t.length);for(let e=0;e<t.length;e++){const l=Math.abs(n.lower[e]-r.lower[e])-Math.abs(n.upper[e]-r.upper[e]);a[e]=0===n.middle[e]?NaN:l/n.middle[e]*100}return{bbtrend:v(a)}},levels:()=>[{price:0,color:"#5a6b8c",title:"Zero line",dashed:!0}]},Ml={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,l)=>{const t=dl(l,"length",14),o=e.map(e=>e.high),n=e.map(e=>e.low),r=R(y(o,n,e.map(e=>e.close)),t),a=C(o,t),i=M(n,t),s=Math.log10(t),c=new Array(e.length).fill(NaN);if(0!==s)for(let l=0;l<e.length;l++){const e=a[l]-i[l];if(!(e>0))continue;const t=r[l]/e;t>0&&(c[l]=100*Math.log10(t)/s)}return{chop:v(gl(c,dl(l,"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})},vl={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,l)=>{const t=e.length,o=dl(l,"per",1),n=new Array(t).fill(NaN);for(let l=1;l<t;l++){const t=e[l-1].close,o=e[l].close;n[l]=t>0&&o>0?Math.log(o/t):NaN}const r=w(n,dl(l,"length",10)),a=o>0?Math.sqrt(365/o):NaN;return{hv:v(r.map(e=>100*e*a))}}},Al={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,l)=>({adr:v(h(e.map(e=>e.high-e.low),dl(l,"length",14)))})},Nl=4*Math.atan(1),xl={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:l,settings:t})=>{const o=l.angle?.[e],n=(e,l)=>bl(t,e,l);return null!=o&&Number.isFinite(o)?o>=5?n("turquoiseColor","#26c6da"):o>=3.57?n("darkGreenColor","#43a047"):o>=2.14?n("paleGreenColor","#a5d6a7"):o>=.71?n("limeColor","#009688"):o<=-5?n("darkRedColor","#d50000"):o<=-3.57?n("redColor","#e91e63"):o<=-2.14?n("orangeColor","#ff6d00"):o<=-.71?n("lightOrangeColor","#ffb74d"):n("yellowColor","#fdd835"):n("yellowColor","#fdd835")}}],calc:e=>{const l=e.length,t=C(e.map(e=>e.high),30),o=M(e.map(e=>e.high),30),n=A(e.map(e=>e.close),34),r=new Array(l).fill(NaN);for(let a=1;a<l;a++){const l=t[a]-o[a],i=(e[a].high+e[a].low+e[a].close)/3;if(!(l>0)||0===i)continue;const s=25/l*o[a],c=(n[a-1]-n[a])/i*s;if(!Number.isFinite(c))continue;const p=Math.sqrt(1+c*c),y=Math.round(180*Math.acos(1/p)/Nl);r[a]=c>0?-y:y}return{chopZone:new Array(l).fill(1),angle:v(r)}},range:()=>({min:0,max:1})},Sl={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,l)=>({chaikinVolatility:v(x(A(e.map(e=>e.high-e.low),dl(l,"periods",10)),dl(l,"rocLookback",10)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Ll={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,l)=>{const t=dl(l,"deviations",1);return{stdDev:v(w(e.map(e=>e.close),dl(l,"periods",5)).map(e=>e*t))}}},Bl={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,l)=>{const t=Math.max(3,Math.trunc(dl(l,"length",14))),o=e.map(e=>e.close),n=(t+1)/2;let r=0;for(let e=0;e<t;e++)r+=(n-e-1)**2;const a=new Array(o.length).fill(NaN);for(let e=t-1;e<o.length;e++){let l=0;for(let n=0;n<t;n++)l+=o[e-n];const i=l/t;let s=0,c=0;for(let l=0;l<t;l++){const t=i-o[e-l];s+=t*t,c+=(n-l-1)*t}a[e]=Math.sqrt((s-c*c/r)/(t-2))}return{stdErr:v(a)}}},Kl=[kl,wl,Cl,Ml,vl,Al,xl,Sl,Ll,Bl],Wl=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Dl=e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0;function Fl(e){const l=new Array(e.length);for(let t=0;t<e.length;t++){const o=e[t],n=o.close===o.high&&o.close===o.low||o.high===o.low;l[t]=n?0:(2*o.close-o.low-o.high)/(o.high-o.low)*Dl(o)}return l}function Rl(e,l){const t=new Array(e.length).fill(NaN),o=e.findIndex(e=>Number.isFinite(e));if(o<0)return t;const n=A(e.slice(o),l);for(let e=0;e<n.length;e++)t[o+e]=n[e];return t}const Ul={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,l)=>{const t=Wl(l,"length",20),o=R(Fl(e),t),n=R(e.map(Dl),t),r=new Array(e.length).fill(NaN);for(let l=0;l<e.length;l++)n[l]>0&&(r[l]=o[l]/n[l]);return{cmf:v(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Tl={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,l)=>{const t=U(Fl(e)),o=Rl(t,Wl(l,"short",3)),n=Rl(t,Wl(l,"long",10)),r=new Array(e.length);for(let l=0;l<e.length;l++)r[l]=o[l]-n[l];return{osc:v(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Pl={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,l)=>{const t=Wl(l,"divisor",1e4),o=N(e.map(e=>(e.high+e.low)/2)),n=new Array(e.length);for(let l=0;l<e.length;l++){const r=e[l],a=Dl(r);n[l]=0===a?NaN:t*o[l]*(r.high-r.low)/a}return{eom:v(h(n,Wl(l,"length",14)))}}},Ol={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,l)=>{const t=N(e.map(e=>e.close)),o=new Array(e.length);for(let l=0;l<e.length;l++)o[l]=t[l]*Dl(e[l]);return{efi:v(Rl(o,Wl(l,"length",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Il={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 l=new Array(e.length).fill(0);for(let t=1;t<e.length;t++){const o=e[t].close-e[t-1].close;l[t]=o>0?Dl(e[t]):o<0?-Dl(e[t]):0}return{net:v(l)}}},Vl=[Ul,Tl,Pl,Ol,Il],Hl=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},El=(e,l,t,o=1)=>Math.max(o,Math.round(Hl(e,l,t))),$l=(e,l="source")=>e[l]??"close";function ql(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=A(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}const zl={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:(l,t)=>{const o=e(l,$l(t)),n=o.length,r=El(t,"erLength",10),a=new Array(n).fill(NaN);if(n<=r)return{kama:v(a)};const i=N(o,1);for(let e=0;e<n;e++)i[e]=Number.isFinite(i[e])?Math.abs(i[e]):0;const s=R(i,r),c=N(o,r),p=2/(El(t,"fastLength",2)+1),y=2/(El(t,"slowLength",30)+1);let u=o[r];a[r]=u;for(let e=r+1;e<n;e++){const l=s[e],t=(Number.isFinite(l)&&0!==l?Math.abs(c[e])/l:0)*(p-y)+y;u+=t*t*(o[e]-u),a[e]=u}return{kama:v(a)}}},Zl={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:(l,o)=>{const n=l.length,r=El(o,"length",20),a=Hl(o,"mult",2),i=e(l,$l(o)),s=((e,l,t)=>{const o=e[l];return"boolean"==typeof o?o:t})(o,"exp",!0)?A(i,r):h(i,r),c=l.map(e=>e.high),p=l.map(e=>e.low),u=l.map(e=>e.close),f=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(o,"bandsStyle","Average True Range");let d;d="True Range"===f?y(c,p,u):"Range"===f?k(c.map((e,l)=>e-p[l]),r):t(c,p,u,El(o,"atrlength",10));const m=new Array(n).fill(NaN),b=new Array(n).fill(NaN);for(let e=0;e<n;e++){const l=d[e]*a;m[e]=s[e]+l,b[e]=s[e]-l}return{upper:v(m),basis:v(s),lower:v(b)}}},Yl={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:(l,t)=>({lsma:v(T(e(l,$l(t)),El(t,"length",25,2),Math.round(Hl(t,"offset",0))))})},jl={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:l=>{const t=l.length,o=N(e(l,"hlc3"),1),n=new Array(t);for(let e=0;e<t;e++){const t=l[e].volume??0;n[e]=o[e]>=0?t:-t}const r=A(n,34),a=A(n,55),i=new Array(t).fill(NaN);for(let e=0;e<t;e++)i[e]=r[e]-a[e];return{kvo:v(i),signal:v(ql(i,13))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Gl={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:(l,t)=>{const o=l.length,n=e(l,"close"),r=(e,l,o,r)=>h(x(n,El(t,e,l)),El(t,o,r)),a=r("roclen1",10,"smalen1",10),i=r("roclen2",15,"smalen2",10),s=r("roclen3",20,"smalen3",10),c=r("roclen4",30,"smalen4",15),p=new Array(o).fill(NaN);for(let e=0;e<o;e++)p[e]=a[e]+2*i[e]+3*s[e]+4*c[e];return{kst:v(p),signal:v(h(p,El(t,"siglen",9)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Xl={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:(l,t)=>{const o=e(l,"close"),n=o.length,r=El(t,"periods",14,2),a=new Array(n).fill(NaN),i=r*(r+1)/2,s=r*r*(r*r-1)/12;for(let e=r-1;e<n;e++){let l=0,t=0;for(let n=0;n<r;n++){const a=o[e-n];l+=a,t+=a*(r-n)}a[e]=(r*t-i*l)/s}return{slope:v(a)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Jl=[zl,Zl,Yl,jl,Gl,Xl],_l=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Ql=(e,l,t,o=1)=>Math.max(o,Math.round(_l(e,l,t))),et=(e,l,t)=>Math.round(_l(e,l,t)),lt=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},tt=(e,l,t)=>{const o=e[l];return"boolean"==typeof o?o:t},ot=(e,l="source")=>e[l]??"close",nt=e=>e.map(e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0);function rt(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}function at(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=A(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}const it={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:(l,t)=>{const o=e(l,"close"),n=h(o,Ql(t,"shortLength",9)),r=h(o,Ql(t,"longLength",21)),a=function(e,l){const t=e.length,o=new Array(t).fill(!1);for(let n=1;n<t;n++){const t=e[n-1],r=l[n-1],a=e[n],i=l[n];Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(a)&&Number.isFinite(i)&&(o[n]=a>i&&t<=r||a<i&&t>=r)}return o}(n,r);return{short:v(n),long:v(r),cross:n.map((e,l)=>a[l]?e:null)}}},st={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:(l,t)=>{const o=e(l,"close"),n=Ql(t,"length",14),r=A(o,n),a=new Array(o.length).fill(NaN);let i=NaN;for(let e=0;e<o.length;e++){if(Number.isFinite(i)&&0!==i){const l=n*Math.pow(o[e]/i,4),t=i+(o[e]-i)/l;a[e]=Number.isFinite(t)?t:r[e]}else a[e]=r[e];i=a[e]}return{mg:v(a)}}},ct={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:(l,o)=>{const n=e(l,ot(o)),r=Ql(o,"length",3),a=_l(o,"atrMult",2),i=I(n,r,50),s=t(l.map(e=>e.high),l.map(e=>e.low),l.map(e=>e.close),Ql(o,"atrLength",14));return{median:v(i),upper:v(i.map((e,l)=>e+a*s[l])),lower:v(i.map((e,l)=>e-a*s[l])),medianEma:v(at(i,r))}}},pt=[{label:"SMA",value:"SMA"},{label:"EMA",value:"EMA"},{label:"SMMA (RMA)",value:"SMMA (RMA)"},{label:"WMA",value:"WMA"},{label:"VWMA",value:"VWMA"}];function yt(e,l,t,o){switch(e){case"EMA":return A(l,o);case"SMMA (RMA)":return k(l,o);case"WMA":return g(l,o);case"VWMA":return K(l,t,o);default:return h(l,o)}}const ut=[{lane:1,length:20,color:"#f6c309"},{lane:2,length:50,color:"#fb9800"},{lane:3,length:100,color:"#fb6500"},{lane:4,length:200,color:"#f60c0c"}],ft={id:"ma-ribbon",name:"Moving Average Ribbon",category:"Trend",placement:"onchart",inputs:ut.flatMap(e=>function(e,l,t){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:pt,group:o},{key:`ma${e}Source`,type:"source",label:"Source",default:"close",group:o},{key:`ma${e}Length`,type:"number",label:"Length",default:l,min:1,max:1e3,step:1,group:o},{key:`ma${e}Color`,type:"color",label:"Color",default:t,group:o}]}(e.lane,e.length,e.color)),plots:ut.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:(l,t)=>{const o=nt(l),n={};for(const{lane:r,length:a}of ut){if(!tt(t,`showMa${r}`,!0)){n[`ma${r}`]=new Array(l.length).fill(null);continue}const i=e(l,ot(t,`ma${r}Source`));n[`ma${r}`]=v(yt(lt(t,`ma${r}Type`,"SMA"),i,o,Ql(t,`ma${r}Length`,a)))}return n}},dt={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:(l,t)=>{const o=e(l,"close"),n=Ql(t,"length",9),r=A(o,n),a=at(r,n),i=at(a,n);return{tema:v(r.map((e,l)=>3*(e-a[l])+i[l]))}}},mt={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:(l,t)=>{const n=e(l,ot(t)),i="continuous"!==t.anchor?o(l.map(e=>e.time),(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(t)):null,s=new Array(l.length).fill(NaN);let c=0,p=0;for(let e=0;e<l.length;e++)null!==i&&i[e]&&(c=0,p=0),c+=n[e],p+=1,s[e]=c/p;return{twap:v(rt(s,et(t,"offset",0)))}}},bt={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:(l,t)=>({vwma:v(rt(K(e(l,ot(t)),nt(l),Ql(t,"length",20)),et(t,"offset",0)))})},ht={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:(l,t)=>{const o=e(l,"hl2");return{jaw:v(rt(k(o,Ql(t,"jawLength",13)),et(t,"jawOffset",8))),teeth:v(rt(k(o,Ql(t,"teethLength",8)),et(t,"teethOffset",5))),lips:v(rt(k(o,Ql(t,"lipsLength",5)),et(t,"lipsOffset",3)))}}},gt={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:(l,t)=>({smma:v(k(e(l,ot(t)),Ql(t,"length",7)))})};function kt(e,l,t){const o=at(e,l);if(0===t)return o;const n=at(o,l);return o.map((e,l)=>e*(1+t)-n[l]*t)}const wt={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:l,values:t,settings:o})=>{if(!tt(o,"highlightMovements",!0))return lt(o,"neutralColor","#6d1e7f");const n=t.t3?.[l-1];return"number"==typeof n&&Number.isFinite(n)&&e>n?lt(o,"upColor","#26a69a"):lt(o,"downColor","#ff5252")}}],calc:(l,t)=>{const o=e(l,ot(t)),n=Ql(t,"length",5),r=_l(t,"factor",.7),a=kt(o,n,r),i=kt(a,n,r);return{t3:v(kt(i,n,r))}}},Ct=[it,st,ct,ft,dt,mt,bt,ht,gt,wt],Mt=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),vt=e=>e.source??"close",At=(e,l,t)=>"string"==typeof e[l]?e[l]:t;function Nt(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=A(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}function xt(e,l,t){const o=N(e),n=e=>Nt(Nt(e,t),l),r=n(o),a=n(o.map(e=>Math.abs(e)));return r.map((e,l)=>e/a[l]*100)}const St={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:(l,t)=>({mom:v(N(e(l,vt(t)),Mt(t,"len",10)))})},Lt={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:(l,t)=>({roc:v(x(e(l,vt(t)),Mt(t,"length",9)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]};function Bt(e,l,t){return"SMA"===t?h(e,l):Nt(e,l)}const Kt={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:l,values:t,settings:o})=>{const n=t.hist?.[l-1],r=(e,l)=>"string"==typeof o[e]?o[e]:l,a="number"==typeof n&&Number.isFinite(n)&&e>n;return e>=0?a?r("histUpColor","#26a69a"):r("histUpFadeColor","#b2dfdb"):a?r("histDownFadeColor","#ffcdd2"):r("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:(l,t)=>{const o=e(l,vt(t)),n=At(t,"oscType","EMA"),r=Bt(o,Mt(t,"fastLength",12),n),a=Bt(o,Mt(t,"slowLength",26),n),i=r.map((e,l)=>0===a[l]?NaN:100*(e-a[l])/a[l]),s=Bt(i,Mt(t,"signalLength",9),At(t,"sigType","EMA"));return{hist:v(i.map((e,l)=>e-s[l])),ppo:v(i),signal:v(s)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Wt={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,l)=>{const t=Mt(l,"length",18);return{trix:v(N(Nt(Nt(Nt(e.map(e=>e.close>0?Math.log(e.close):NaN),t),t),t)).map(e=>1e4*e))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Dt={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,l)=>{const t=xt(e.map(e=>e.close),Mt(l,"short",13),Mt(l,"long",25));return{tsi:v(t),signal:v(Nt(t,Mt(l,"signal",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Ft={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,l)=>{const t=xt(e.map(e=>e.close),Mt(l,"shortlen",5),Mt(l,"longlen",20));return{erg:v(t),sig:v(Nt(t,Mt(l,"siglen",5)))}}},Rt={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,l)=>{const t=xt(e.map(e=>e.close),Mt(l,"shortlen",5),Mt(l,"longlen",20)),o=Nt(t,Mt(l,"siglen",5));return{osc:v(t.map((e,l)=>e-o[l]))}}},Ut={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,l)=>{const t=Mt(l,"lengthK",10),o=Mt(l,"lengthD",3),n=C(e.map(e=>e.high),t),r=M(e.map(e=>e.low),t),a=n.map((e,l)=>e-r[l]),i=e=>Nt(Nt(e,o),o),s=i(e.map((e,l)=>e.close-(n[l]+r[l])/2)),c=i(a),p=s.map((e,l)=>0===c[l]?NaN:e/c[l]*200);return{smi:v(p),ema:v(Nt(p,Mt(l,"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}]},Tt=[St,Lt,Kt,Wt,Dt,Ft,Rt,Ut],Pt=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),Ot=(e,l,t)=>"string"==typeof e[l]?e[l]:t,It=e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0;function Vt(e,l,t){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=t(e.slice(n,r),l);for(let e=0;e<a.length;e++)o[n+e]=a[e];n=r}return o}const Ht=e=>"SMA"===e?h:A;function Et(e,l,t,o){return{id:e,name:l,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:t,default:"#2962ff"},{key:"emaColor",type:"color",label:`${t}-based EMA`,default:"#ff9800"}],plots:[{key:e,type:"line",title:t,colorKey:"color",style:{lineWidth:1.5}},{key:"ema",type:"line",title:`${t}-based EMA`,colorKey:"emaColor",style:{lineWidth:1.5}}],calc:(l,t)=>{const n=function(e,l){const t=new Array(e.length);let o=1;for(let n=0;n<e.length;n++){if(n>0){const t=e[n-1].close;("falling"===l?It(e[n])<It(e[n-1]):It(e[n])>It(e[n-1]))&&0!==t&&Number.isFinite(t)&&(o*=e[n].close/t)}t[n]=1e3*o}return t}(l,o);return{[e]:v(n),ema:v(Vt(n,Pt(t,"maLength",255),A))}}}}const $t=Et("nvi","Negative Volume Index","NVI","falling"),qt=Et("pvi","Positive Volume Index","PVI","rising"),zt={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 l=new Array(e.length).fill(NaN);for(let t=1;t<e.length;t++){const o=e[t-1].close;0!==o&&Number.isFinite(o)&&(l[t]=(e[t].close-o)/o*It(e[t]))}return{pvt:v(U(l))}}},Zt={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:l,values:t,settings:o})=>{const n=t.hist?.[l-1],r=null!=n&&Number.isFinite(n)&&e>n,a=(e,l)=>"string"==typeof o[e]?o[e]:l;return e>=0?r?a("histUpColor","#26a69a"):a("histUpFadeColor","#b2dfdb"):r?a("histDownFadeColor","#ffcdd2"):a("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,l)=>{const t=e.length,o=e.map(It),n=Ht(Ot(l,"oscType","EMA")),r=n(o,Pt(l,"fastLength",12)),a=n(o,Pt(l,"slowLength",26)),i=new Array(t).fill(NaN);for(let e=0;e<t;e++)0!==a[e]&&(i[e]=100*(r[e]-a[e])/a[e]);const s=Vt(i,Pt(l,"signalLength",9),Ht(Ot(l,"sigType","EMA"))),c=new Array(t);for(let e=0;e<t;e++)c[e]=i[e]-s[e];return{hist:v(c),pvo:v(i),signal:v(s)}},levels:()=>[{price:0,color:"#787b8680",title:"Zero"}]},Yt={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,l)=>{const t=e.length,o=A(e.map(e=>e.high-e.low),9),n=Vt(o,9,A),r=new Array(t).fill(NaN);for(let e=0;e<t;e++)0!==n[e]&&(r[e]=o[e]/n[e]);return{mi:v(Vt(r,Pt(l,"length",10),R))}}},jt={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:(l,t)=>{const o=l.length,n=Pt(t,"length",14),r=e(l,(e=>e.source??"close")(t)),a=C(r,n),i=new Array(o).fill(NaN);for(let e=0;e<o;e++){const l=a[e];if(!Number.isFinite(l)||0===l)continue;const t=100*(r[e]-l)/l;i[e]=t*t}const s=h(i,n),c=new Array(o);for(let e=0;e<o;e++)c[e]=Math.sqrt(s[e]);return{ui:v(c),zero:c.map(e=>Number.isFinite(e)?0:null)}},levels:()=>[{price:0,color:"#2196f3",title:"Zero"}]},Gt=[$t,qt,zt,Zt,Yt,jt],Xt=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Jt=(e,l,t,o=1)=>Math.max(o,Math.round(Xt(e,l,t))),_t=(e,l,t)=>Math.round(Xt(e,l,t)),Qt=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},eo=(e,l="source")=>e[l]??"close";function lo(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n),n);for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}function to(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;const n=h(e,l),r=2/(l+1);let a=NaN;for(let l=0;l<t;l++){if(Number.isFinite(a)){const t=e[l];a=Number.isFinite(t)?t*r+a*(1-r):NaN}else a=n[l];o[l]=a}return o}function oo(e,l){if(0===l)return e.slice();const t=e.length,o=new Array(t).fill(null);for(let n=0;n<t;n++){const r=n+l;r>=0&&r<t&&(o[r]=e[n])}return o}const no={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:(l,t)=>{const o=Jt(t,"lengthStoch",14),n=lo(p(e(l,eo(t)),Jt(t,"lengthRSI",14)),e=>O(e,e,e,o)),r=lo(n,e=>h(e,Jt(t,"smoothK",3))),a=lo(r,e=>h(e,Jt(t,"smoothD",3)));return{k:v(r),d:v(a),bandHigh:new Array(l.length).fill(80),bandLow:new Array(l.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})},ro={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:(l,t)=>{const o=Jt(t,"length",14),n=e(l,eo(t)),r=C(l.map(e=>e.high),o),a=M(l.map(e=>e.low),o),i=n.map((e,l)=>{const t=r[l]-a[l];return 0===t?NaN:100*(e-r[l])/t});return{percentR:v(i),bandHigh:new Array(l.length).fill(-20),bandLow:new Array(l.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})},ao={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,l)=>{const t=e.length,o=Math.max(0,t-1),n=new Array(o),r=new Array(o);for(let l=1;l<t;l++){const t=e[l-1].close,o=Math.max(e[l].high,t),a=Math.min(e[l].low,t);n[l-1]=e[l].close-a,r[l-1]=o-a}const a=e=>{const l=R(n,e),t=R(r,e);return l.map((e,l)=>0===t[l]?NaN:e/t[l])},i=a(Jt(l,"length1",7)),s=a(Jt(l,"length2",14)),c=a(Jt(l,"length3",28)),p=new Array(t).fill(NaN);for(let e=0;e<o;e++)p[e+1]=100*(4*i[e]+2*s[e]+c[e])/7;return{uo:v(p)}}},io={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,l)=>{const t=Jt(l,"length",10),o=P(e.map(e=>e.close-e.open)),n=P(e.map(e=>e.high-e.low)),r=lo(o,e=>R(e,t)),a=lo(n,e=>R(e,t)),i=r.map((e,l)=>0===a[l]?NaN:e/a[l]),s=lo(i,e=>P(e)),c=_t(l,"offset",0);return{rvgi:oo(v(i),c),signal:oo(v(s),c)}}};const so={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"},{key:"maType",type:"select",label:"Type",default:"SMA",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:14,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:"RVI-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"}],plots:[{key:"rvi",type:"line",title:"RVI",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"RVI-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}}],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1},{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=e.map(e=>e.close),n=w(o,Jt(l,"length",10)),r=N(o),a=new Array(t),i=new Array(t);for(let e=0;e<t;e++){const l=r[e];a[e]=Number.isFinite(l)&&l<=0?0:n[e],i[e]=Number.isFinite(l)&&l>0?0:n[e]}const s=to(a,14),c=to(i,14),p=new Array(t).fill(NaN);for(let e=0;e<t;e++){const l=s[e]+c[e];p[e]=0===l?NaN:s[e]/l*100}const y=Qt(l,"maType","SMA"),u=Jt(l,"maLength",14),f=Xt(l,"bbMult",2),d="SMA + Bollinger Bands"===y,m="None"===y?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return to(l,o);case"SMMA (RMA)":return lo(l,e=>k(e,o));case"WMA":return lo(l,e=>g(e,o));case"VWMA":return lo(l,(e,l)=>K(e,t.slice(l),o));default:return lo(l,e=>h(e,o))}}(y,p,e.map(e=>e.volume??0),u),b=d?lo(p,e=>w(e,u)).map(e=>e*f):new Array(t).fill(NaN),C=_t(l,"offset",0);return{rvi:oo(v(p),C),ma:v(m),bbUpper:v(m.map((e,l)=>e+b[l])),bbLower:v(m.map((e,l)=>e-b[l])),bandHigh:new Array(t).fill(80),bandLow:new Array(t).fill(20)}},levels:()=>[{price:80,color:"#787b86",title:"Upper Band"},{price:50,color:"#5a6b8c",title:"Middle Band"},{price:20,color:"#787b86",title:"Lower Band"}]},co={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:l,settings:t})=>{const o=Qt(t,"upColor","#009688"),n=Qt(t,"downColor","#f44336"),r=t=>{const o=l.hist?.[e-t];return"number"==typeof o&&Number.isFinite(o)?o:null};let a=!0,i=!0;for(let e=1;e<=5;e+=1){const l=r(e);(null===l||l<=0)&&(a=!1),(null===l||l>=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,l)=>{const t=e.map(e=>e.close),o=H(t,Jt(l,"cciTurboLength",6)),n=H(t,Jt(l,"cci14Length",14));return{hist:v(n),turbo:v(o),cci14:v(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}]},po=[{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}],yo={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:(l,t)=>{const o=l.length,n=e(l,eo(t)),r=new Array(o).fill(0);for(const e of po){const l=lo(x(n,e.roc),l=>h(l,e.smooth));for(let t=0;t<o;t++)r[t]+=e.weight*l[t]}const a=lo(r,e=>h(e,Jt(t,"length1",100))),i=lo(a,e=>h(e,Jt(t,"length2",100)));return{specialK:v(r),signal:v(i)}},levels:()=>[{price:0,color:"#787b86",title:"Zero"}]},uo=[no,ro,ao,io,so,co,yo],fo=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},mo=(e,l,t)=>Math.max(1,Math.floor(fo(e,l,t))),bo=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},ho=(e,l="source")=>e[l]??"close",go=(e,l)=>!1!==e[l];function ko(e,l){const t=new Array(e.length).fill(NaN);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}function wo(e,l){const t=new Array(e.length).fill(!1);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}const Co={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,l)=>{const t=e.length,o=mo(l,"length",14),n=new Array(t).fill(NaN),r=new Array(t).fill(NaN);if(0===t)return{vip:v(n),vim:v(r)};const a=e.map(e=>e.high),i=e.map(e=>e.low),s=e.map(e=>e.close),c=new Array(t-1),p=new Array(t-1);for(let e=1;e<t;e++)c[e-1]=Math.abs(a[e]-i[e-1]),p[e-1]=Math.abs(i[e]-a[e-1]);const u=R(c,o),f=R(p,o),d=R(y(a,i,s),o);for(let e=1;e<t;e++)n[e]=u[e-1]/d[e],r[e]=f[e-1]/d[e];return{vip:v(n),vim:v(r)}}},Mo={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:(l,o)=>{const n=l.length,r=new Array(n).fill(null),a=new Array(n).fill(null);if(0===n)return{up:r,down:a};const i=e(l,ho(o)),s=fo(o,"factor",2),c=l.map(e=>e.high),p=l.map(e=>e.low),u=l.map(e=>e.close),f=t(c,p,u,mo(o,"length",20)),d=y(c,p,u);let m=i[0],b=i[0],h=!0,g=NaN;for(let e=0;e<n;e++){const l=i[e],t=Number.isFinite(f[e])?f[e]*s:d[e];m=Math.max(m,l),b=Math.min(b,l);let o=h?Math.max(g,m-t):Math.min(g,b+t);Number.isFinite(o)||(o=l);const n=l-o>=0;e>0&&n!==h&&(m=l,b=l,o=n?m-t:b+t),h=n,g=o,Number.isFinite(o)&&(n?r[e]=o:a[e]=o)}return{up:r,down:a}}},vo={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,l)=>{const t=e.map((e,l)=>l);return{tsi:v(V(e.map(e=>e.close),t,mo(l,"length",14)))}},levels:e=>[{price:1,color:bo(e,"bullishColor","#089981"),title:"TSI Bullish Band"},{price:0,color:"#787b86",title:"TSI Middle Band",dashed:!0},{price:-1,color:bo(e,"bearishColor","#f23645"),title:"TSI Bearish Band"}],range:()=>({min:-1,max:1})};function Ao(e,l,t,o){const n=e[l];if(!Number.isFinite(n))return!1;const r=l=>l>=0&&l<e.length&&Number.isFinite(e[l])&&(o?e[l]<n:e[l]>n),a=l=>l>=0&&l<e.length&&Number.isFinite(e[l])&&(o?e[l]<=n:e[l]>=n);for(let e=1;e<=t;e++)if(!r(l+e))return!1;for(let e=0;e<=4;e++){let o=!0;for(let t=1;t<=e&&o;t++)a(l-t)||(o=!1);for(let n=1;n<=t&&o;n++)r(l-e-n)||(o=!1);if(o)return!0}return!1}const No={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,l)=>{const t=e.length,o=new Array(t).fill(null),n=new Array(t).fill(null),r=new Array(t).fill(null),a={fractals:o,upFractal:n,downFractal:r};if(0===t)return a;const i=Math.max(2,mo(l,"periods",2)),s=e.map(e=>e.high),c=e.map(e=>e.low),p=go(l,"showUp"),y=go(l,"showDown");for(let e=0;e<t;e++)p&&Ao(s,e,i,!0)&&(n[e]=s[e]),y&&Ao(c,e,i,!1)&&(r[e]=c[e]);return a},markers:({bars:e,values:l,settings:t})=>{const o=l.upFractal??[],n=l.downFractal??[],r=bo(t,"upColor","#009688"),a=bo(t,"downColor","#f44336"),i=[];for(let l=0;l<e.length;l++){const t=o[l];null!=t&&i.push({time:e[l].time,position:"atPrice",price:t,shape:"triangleUp",size:"small",color:r});const s=n[l];null!=s&&i.push({time:e[l].time,position:"atPrice",price:s,shape:"triangleDown",size:"small",color:a})}return i}},xo={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:(l,t)=>{const o=l.length,n=new Array(o).fill(null),r=new Array(o).fill(null),a=new Array(o).fill(null),i=new Array(o).fill(null),s=p(e(l,ho(t)),mo(t,"length",14)),c={rsi:v(s),bull:n,hiddenBull:r,bear:a,hiddenBear:i};if(0===o)return c;const y=mo(t,"lbR",5),u=mo(t,"lbL",5),f=fo(t,"rangeLower",5),d=fo(t,"rangeUpper",60),m=!1!==t.plotBull,b=!0===t.plotHiddenBull,h=!1!==t.plotBear,g=!0===t.plotHiddenBear,k=$(s,u,y).map(e=>Number.isFinite(e)),w=E(s,u,y).map(e=>Number.isFinite(e)),C=ko(s,y),M=ko(l.map(e=>e.low),y),A=ko(l.map(e=>e.high),y),N=z(wo(k,1)),x=z(wo(w,1)),S=Z(k,C,1),L=Z(k,M,1),B=Z(w,C,1),K=Z(w,A,1);for(let e=0;e<o;e++){const l=e-y;if(!(l<0)){if(k[e]){const t=f<=N[e]&&N[e]<=d,o=C[e]>S[e]&&t,a=C[e]<S[e]&&t;m&&o&&M[e]<L[e]&&(n[l]=C[e]),b&&a&&M[e]>L[e]&&(r[l]=C[e])}if(w[e]){const t=f<=x[e]&&x[e]<=d,o=C[e]<B[e]&&t,n=C[e]>B[e]&&t;h&&o&&A[e]>K[e]&&(a[l]=C[e]),g&&n&&A[e]<K[e]&&(i[l]=C[e])}}}return c},markers:({bars:e,values:l,settings:t})=>{const o=bo(t,"bullColor","#4caf50"),n=bo(t,"bearColor","#ff5252"),r=[{col:l.bull,shape:"labelUp",text:"Bull",color:o},{col:l.hiddenBull,shape:"labelUp",text:"H Bull",color:o},{col:l.bear,shape:"labelDown",text:"Bear",color:n},{col:l.hiddenBear,shape:"labelDown",text:"H Bear",color:n}],a=[];for(let l=0;l<e.length;l++)for(const t of r){const o=t.col?.[l];null!=o&&a.push({time:e[l].time,position:"atPrice",price:o,shape:t.shape,size:"small",color:t.color,text:t.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})},So={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 l=e.length,t=new Array(l).fill(NaN),o=new Array(l).fill(NaN),n=new Array(l).fill(NaN),r=new Array(l).fill(NaN),a=new Array(l).fill(NaN);let i=0;for(let s=0;s<l;s++){const l=e[s],c=Math.max(l.open,l.close),p=Math.min(l.open,l.close),y=e[i].high,u=e[i].low,f=s-i,d=f>1&&f<=250;d&&c>y&&(n[s]=y),d&&p<u&&(r[s]=u);const m=i;i=s>1&&p>=u&&p<=y&&c>=u&&c<=y?i:s,i===m&&(t[s]=e[i].high,o[s]=e[i].low);const b=s-i;b>0&&(a[s]=b)}return{rangeHigh:v(t),rangeLow:v(o),breakUp:v(n),breakDown:v(r),insideAge:v(a)}},markers:({bars:e,values:l,settings:t})=>{const o=[];if(!go(t,"markbreakout"))return o;const n=l.breakUp??[],r=l.breakDown??[],a=bo(t,"bullBreakColor","#00c853"),i=bo(t,"bearBreakColor","#ff5252");for(let l=0;l<e.length;l++)null!==n[l]&&void 0!==n[l]&&o.push({time:e[l].time,position:"belowBar",shape:"triangleUp",size:"small",color:a}),null!==r[l]&&void 0!==r[l]&&o.push({time:e[l].time,position:"aboveBar",shape:"triangleDown",size:"small",color:i});return o},barColors:({bars:e,values:l,settings:t})=>{const o=l.insideAge??[],n=bo(t,"insideColor","#000000"),r=go(t,"colorinside");return e.map((e,l)=>r&&null!==o[l]&&void 0!==o[l]?n:null)}},Lo=[Co,Mo,vo,No,xo,So],Bo=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Ko=(e,l,t)=>"string"==typeof e[l]?e[l]:t,Wo=(e,l,t)=>"boolean"==typeof e[l]?e[l]:t,Do=e=>new Array(e).fill(NaN),Fo=86400,Ro=e=>Math.floor(((e=>Math.floor((e+c)/Fo))(e)-4)/7);function Uo(e,l,t){const a=e.map(e=>e.time);return"daily"===l?o(a,t):n(a,function(e,l){return l!==r?"weekly"===e?(e,t)=>u(e,t,l):(e,t)=>f(e,t,l):"weekly"===e?(e,l)=>Ro(e)!==Ro(l):(e,l)=>{const t=s(e),o=s(l);return t.year!==o.year||t.month!==o.month}}(l,t))}function To(e){const l=function(e){if(e.length<2)return 0;const l=[];for(let t=1;t<e.length;t++){const o=e[t].time-e[t-1].time;o>0&&l.push(o)}return 0===l.length?0:(l.sort((e,l)=>e-l),l[Math.floor(l.length/2)])}(e);return l<=0||l<Fo?"daily":l<604800?"weekly":"monthly"}const Po={daily:"d",weekly:"w",monthly:"m"},Oo={daily:"Daily",weekly:"Weekly",monthly:"Monthly"},Io=(e,l,t,o)=>({key:e,type:"line",title:l,colorKey:t,style:{markersOnly:!0,markerRadius:o}});function Vo(e){const l=Po[e],t=Oo[e],o=`${l}SupportColor`,n=`${l}ResistanceColor`,r=`${l}CprColor`;return[{key:`${l}Pivot`,type:"line",title:`${t} Pivot`,colorKey:`${l}PivotColor`,style:{lineWidth:2}},Io(`${l}S1`,`${t} S1`,o,1),Io(`${l}S2`,`${t} S2`,o,1),Io(`${l}S3`,`${t} S3`,o,1),Io(`${l}R1`,`${t} R1`,n,1),Io(`${l}R2`,`${t} R2`,n,1),Io(`${l}R3`,`${t} R3`,n,1),Io(`${l}Bc`,`${t} Bottom Pivot`,r,2),Io(`${l}Tc`,`${t} Top Pivot`,r,2)]}function Ho(e){const l=Po[e],t=Oo[e];return[{key:`${l}PivotColor`,type:"color",label:"Pivot",default:"#ffeb3b",group:t},{key:`${l}SupportColor`,type:"color",label:"Support",default:"#4caf50",group:t},{key:`${l}ResistanceColor`,type:"color",label:"Resistance",default:"#ff5252",group:t},{key:`${l}CprColor`,type:"color",label:"CPR",default:"#ff9800",group:t},{key:`${l}FillColor`,type:"color",label:"CPR Fill",default:"#f47676",group:t}]}function Eo(e,l,t,o,n){const r=e.length,a=Do(r),i=Do(r),s=Do(r),c=Do(r),p=Do(r),y=Do(r),u=Do(r),f=Do(r),d=Do(r);if(t){const t=Uo(e,l,n);let m=NaN,b=NaN,h=NaN,g=NaN,k=NaN,w=NaN;for(let l=0;l<r;l++){t[l]&&(m=g,b=k,h=w,g=NaN,k=NaN);const n=e[l];if(g=Number.isFinite(g)?Math.max(g,n.high):n.high,k=Number.isFinite(k)?Math.min(k,n.low):n.low,w=n.close,!Number.isFinite(m)||!Number.isFinite(b)||!Number.isFinite(h))continue;const r=(m+b+h)/3,C=m-b,M=2*r-m,v=2*r-b,A=(m+b)/2;o.pivot&&(a[l]=r),o.support&&(o.s1r1&&(i[l]=M),s[l]=r-C,c[l]=M-C),o.resistance&&(o.s1r1&&(p[l]=v),y[l]=r+C,u[l]=v+C),o.cpr&&(f[l]=A,d[l]=2*r-A)}}const m=Po[l];return{[`${m}Pivot`]:v(a),[`${m}S1`]:v(i),[`${m}S2`]:v(s),[`${m}S3`]:v(c),[`${m}R1`]:v(p),[`${m}R2`]:v(y),[`${m}R3`]:v(u),[`${m}Bc`]:v(f),[`${m}Tc`]:v(d)}}const $o={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},...Ho("daily"),...Ho("weekly"),...Ho("monthly")],plots:[...Vo("daily"),...Vo("weekly"),...Vo("monthly")],fills:["daily","weekly","monthly"].map(e=>{const l=Po[e];return{between:[`${l}Tc`,`${l}Bc`],colorUpKey:`${l}FillColor`,colorDownKey:`${l}FillColor`,opacity:.48}}),calc:(e,l)=>{const t="manual"===l.pivotMode,o=To(e),n={pivot:Wo(l,"displaypivots",!0),support:Wo(l,"displaysupport",!0),resistance:Wo(l,"displayresistance",!0),cpr:Wo(l,"displaycpr",!0),s1r1:Wo(l,"displayS1R1",!1)},i=t?{daily:Wo(l,"showDaily",!0),weekly:Wo(l,"showWeekly",!1),monthly:Wo(l,"showMonthly",!1)}:{daily:"daily"===o,weekly:"weekly"===o,monthly:"monthly"===o},s=(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(l);return{...Eo(e,"daily",i.daily,n,s),...Eo(e,"weekly",i.weekly,n,s),...Eo(e,"monthly",i.monthly,n,s)}}};const qo={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:l,settings:t})=>{if(!1===t.showsignalsk)return[];const o=l.buySignal??[],n=l.sellSignal??[],r=[];for(let l=0;l<e.length;l++){const a=o[l];if(null!=a){r.push({time:e[l].time,position:"atPrice",price:a,shape:"labelUp",size:"tiny",color:Ko(t,"buyColor","#0022fc"),text:"BUY"});continue}const i=n[l];null!=i&&r.push({time:e[l].time,position:"atPrice",price:i,shape:"labelDown",size:"tiny",color:Ko(t,"sellColor","#880e4f"),text:"SELL"})}return r},calc:(l,t)=>{const o=l.length,n=Do(o),r=Do(o),a=Do(o),i=Do(o);if(0===o)return{alphatrend:[],lagged:[],buySignal:[],sellSignal:[]};const s=Math.max(1,Math.round(Bo(t,"AP",14))),c=Bo(t,"coeff",1),u=!0===t.novolumedata,f=!1!==t.showsignalsk,d=l.map(e=>e.high),m=l.map(e=>e.low),b=l.map(e=>e.close),g=h(y(d,m,b),s),k=u?p(e(l,((e,l="source")=>e[l]??"close")(t)),s):function(e,l,t){const o=e.length,n=Do(o);if(t<=0||0===o)return n;const r=new Array(o).fill(0),a=new Array(o).fill(0);for(let t=1;t<o;t++){const o=e[t]*l[t];e[t]>e[t-1]?r[t]=o:e[t]<e[t-1]&&(a[t]=o)}const i=R(r,t),s=R(a,t);for(let e=t;e<o;e++)n[e]=0===s[e]?100:100-100/(1+i[e]/s[e]);return n}(l.map(e=>(e.high+e.low+e.close)/3),l.map(e=>e.volume??0),s);for(let e=0;e<o;e++){const t=e>0&&Number.isFinite(n[e-1])?n[e-1]:0;if(!Number.isFinite(g[e])||!Number.isFinite(k[e]))continue;const o=g[e]*c;n[e]=k[e]>=50?Math.max(l[e].low-o,t):Math.min(l[e].high+o,t)}for(let e=2;e<o;e++)r[e]=n[e-2];const w=new Array(o).fill(!1),C=new Array(o).fill(!1);for(let e=1;e<o;e++){const l=n[e],t=r[e],o=n[e-1],a=r[e-1];Number.isFinite(l)&&Number.isFinite(t)&&Number.isFinite(o)&&Number.isFinite(a)&&(l>t&&o<=a?w[e]=!0:l<t&&o>=a&&(C[e]=!0))}if(f){const e=w.map((e,l)=>l>0&&w[l-1]),l=C.map((e,l)=>l>0&&C[l-1]),t=z(w),n=z(C),s=z(e),c=z(l);for(let e=0;e<o;e++)w[e]&&s[e]>n[e]?a[e]=.9999*r[e]:C[e]&&c[e]>t[e]&&(i[e]=1.0001*r[e])}return{alphatrend:v(n),lagged:v(r),buySignal:v(a),sellSignal:v(i)}}},zo={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,l)=>{const t=e.map(e=>e.high-e.low);return!0!==l.showAverage?{range:v(t),avgRange:new Array(e.length).fill(null)}:{range:v(t),avgRange:v(h(t,Math.max(1,Math.round(Bo(l,"avgLength",3)))))}}},Zo=[$o,qo,zo],Yo=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},jo=(e,l,t)=>Math.max(1,Math.floor(Yo(e,l,t))),Go=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},Xo=(e,l)=>new Array(e).fill(l),Jo=e=>/^#[0-9a-f]{6}$/i.test(e)?`${e}99`:e;function _o(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n));for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}function Qo(e,l){const t=new Array(e.length).fill(NaN);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}function en(e,l){const t=new Array(e.length).fill(!1);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}const ln={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:l})=>{const t=(e,t)=>{const o=l[e];return"string"==typeof o&&""!==o?o:t};return e>=0?t("momUpColor","#008080"):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:(l,t)=>{const o=l.length,n=jo(t,"n1",10),r=jo(t,"n2",21),a=jo(t,"sigLen",4),i=Yo(t,"obLevel1",60),s=Yo(t,"obLevel2",53),c=Yo(t,"osLevel1",-60),p=Yo(t,"osLevel2",-53),y=new Array(o).fill(null),u=new Array(o).fill(null),f=new Array(o).fill(null),d=new Array(o).fill(null),m=new Array(o).fill(null),b=new Array(o).fill(null),g=e(l,(e=>e.source??"hlc3")(t)),k=_o(g,e=>A(e,n)),w=_o(g.map((e,l)=>Math.abs(e-k[l])),e=>A(e,n)),C=_o(g.map((e,l)=>{const t=w[l];return Number.isFinite(t)?0===t?0:(e-k[l])/(.015*t):NaN}),e=>A(e,r)),M=_o(C,e=>h(e,a)),N=C.map((e,l)=>e-M[l]),x={wt1:v(C),wt2:v(M),mom:!1===t.showMom?new Array(o).fill(null):v(N),obUpper:Xo(o,i),obLower:Xo(o,s),osUpper:Xo(o,p),osLower:Xo(o,c),buy:y,sell:u,bull:f,bear:d,hiddenBull:m,hiddenBear:b},S=!1!==t.filterZone,L=!1!==t.useInner,B=L?s:i,K=L?p:c;for(let e=1;e<o;e++){const l=C[e-1],t=M[e-1],o=C[e],n=M[e];Number.isFinite(l)&&Number.isFinite(t)&&(Number.isFinite(o)&&Number.isFinite(n)&&(o>n&&l<=t&&(!S||n<=K)&&(y[e]=n),o<n&&l>=t&&(!S||n>=B)&&(u[e]=n)))}const W=jo(t,"lbL",3),D=jo(t,"lbR",3),F=Yo(t,"rangeLower",5),R=Yo(t,"rangeUpper",60),U=!1!==t.showRegDiv,T=!0===t.showHidDiv,P=$(M,W,D).map(e=>Number.isFinite(e)),O=E(M,W,D).map(e=>Number.isFinite(e)),I=Qo(M,D),V=Qo(l.map(e=>e.low),D),H=Qo(l.map(e=>e.high),D),q=z(en(P,1)),Y=z(en(O,1)),j=Z(P,I,1),G=Z(P,V,1),X=Z(O,I,1),J=Z(O,H,1);for(let e=0;e<o;e++){const l=e-D;if(!(l<0)){if(P[e]){const t=F<=q[e]&&q[e]<=R;U&&t&&I[e]>j[e]&&V[e]<G[e]&&(f[l]=I[e]),T&&t&&I[e]<j[e]&&V[e]>G[e]&&(m[l]=I[e])}if(O[e]){const t=F<=Y[e]&&Y[e]<=R;U&&t&&I[e]<X[e]&&H[e]>J[e]&&(d[l]=I[e]),T&&t&&I[e]>X[e]&&H[e]<J[e]&&(b[l]=I[e])}}}return x},markers:({bars:e,values:l,settings:t})=>{const o=Go(t,"bullColor","#4caf50"),n=Go(t,"bearColor","#ff5252"),r=[{col:l.buy,shape:"circle",size:"tiny",color:Go(t,"buyColor","#00e676"),text:void 0},{col:l.sell,shape:"circle",size:"tiny",color:Go(t,"sellColor","#ff5252"),text:void 0},{col:l.bull,shape:"labelUp",size:"small",color:o,text:"R"},{col:l.bear,shape:"labelDown",size:"small",color:n,text:"R"},{col:l.hiddenBull,shape:"labelUp",size:"small",color:Jo(o),text:"H"},{col:l.hiddenBear,shape:"labelDown",size:"small",color:Jo(n),text:"H"}],a=[];for(let l=0;l<e.length;l++)for(const t of r){const o=t.col?.[l];if(null==o)continue;const n={time:e[l].time,position:"atPrice",price:o,shape:t.shape,size:t.size,color:t.color};void 0!==t.text&&(n.text=t.text),a.push(n)}return a},levels:e=>[{price:Yo(e,"obLevel1",60),color:Go(e,"obBandColor","#ff5252"),title:"Overbought 1",dashed:!0},{price:Yo(e,"obLevel2",53),color:Go(e,"obBandColor","#ff5252"),title:"Overbought 2",dashed:!0},{price:0,color:"#787b86",title:"Zero",dashed:!0},{price:Yo(e,"osLevel2",-53),color:Go(e,"osBandColor","#4caf50"),title:"Oversold 2",dashed:!0},{price:Yo(e,"osLevel1",-60),color:Go(e,"osBandColor","#4caf50"),title:"Oversold 1",dashed:!0}]},tn=[ln],on=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},nn=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},rn=(e,l)=>!1!==e[l],an="#089981",sn="#F23745",cn="#787b86",pn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function yn(e,l){let t=e;if(/^#[0-9a-f]{3}$/i.test(t))t=`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`;else if(/^#[0-9a-f]{8}$/i.test(t))t=t.slice(0,7);else if(!/^#[0-9a-f]{6}$/i.test(t))return e;return`${t}${Math.round(255*Math.min(1,Math.max(0,l))).toString(16).padStart(2,"0")}`}const un=yn(cn,.2),fn=yn(cn,.5);function dn(e,l,t,o){if(null===e||!Number.isFinite(e))return;return yn(e>=0?t:o,.1+.4*(l>0?Math.min(1,Math.abs(e)/l):1))}const mn=e=>`${e.toFixed(2)}%`;const bn=(e,l)=>100*e+l;function hn(e,l){const t=function(e,l){const t=[];let o=null,n=0,r=0;for(const a of e)if(null===o||a.time<n||a.time>=r){const e=d(a.time,l);o={year:e.year,month:e.month,last:a.close},t.push(o),n=m(e.year,e.month,1,0,0,0,l),r=m(e.year,e.month+1,1,0,0,0,l)}else o.last=a.close;return t}(e,(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(l)),o=Math.round(on(l,"startYear",2015)),n=function(e){const l=new Set;for(const t of e.split(",")){const e=t.replace(/[\s-]/g,"");if(!/^\d{6}$/.test(e))continue;const o=Number(e),n=o%100;n>=1&&n<=12&&l.add(o)}return l}(nn(l,"ignoredMonths","")),i=t.length>0?t[t.length-1]:null;null!==i&&n.add(bn(i.year,i.month));const s=[],c=new Map;for(let e=1;e<t.length;e++){const l=t[e],r=t[e-1];if(l.year<o||n.has(bn(l.year,l.month)))continue;if(!Number.isFinite(r.last)||!Number.isFinite(l.last)||0===r.last)continue;let a=c.get(l.year);void 0===a&&(a=new Array(12).fill(null),c.set(l.year,a),s.push(l.year)),a[l.month-1]=100*(l.last-r.last)/Math.abs(r.last)}return{years:s,byYear:c,skipped:n}}function gn(e,l){const t=[];for(const o of e.years){const n=e.byYear.get(o)?.[l];null!=n&&t.push(n)}return t}const kn=e=>{if(0===e.length)return null;let l=0;for(const t of e)l+=t;return l/e.length};function wn(e){if(e.length<2)return null;const l=kn(e);if(null===l)return null;let t=0;for(const o of e)t+=(o-l)*(o-l);return Math.sqrt(t/(e.length-1))}const Cn=e=>{if(0===e.length)return null;let l=0;for(const t of e)t>=0&&(l+=1);return 100*l/e.length},Mn={Left:"bottom-left",Center:"bottom-center",Right:"bottom-right"},vn=[52,...new Array(12).fill(46)],An=e=>({text:e,bgColor:un}),Nn={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:an,group:"Color settings"},{key:"negColor",type:"color",label:"Negative Color",default:sn,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:l})=>{const t=hn(e,l);if(0===t.years.length)return null;const o=on(l,"cutoffPercent",10),n=nn(l,"posColor",an),r=nn(l,"negColor",sn),a=[[An("Year"),...pn.map(An)]],i=[1];for(const e of t.years){const l=t.byYear.get(e)??[],s=[An(String(e))];for(let a=0;a<12;a++){if(t.skipped.has(bn(e,a+1))){s.push({text:"SKIP",bgColor:fn});continue}const i=l[a]??null;s.push(null===i?{text:""}:{text:mn(i),bgColor:dn(i,o,n,r)})}a.push(s),i.push(1)}const s=rn(l,"showAvg"),c=rn(l,"showStDev"),p=rn(l,"showPos");if(s||c||p){if(a.push(Array.from({length:13},()=>({text:"",bgColor:un}))),i.push(.3),s){const e=[An("Avgs:")];for(let l=0;l<12;l++){const a=kn(gn(t,l));e.push(null===a?{text:""}:{text:mn(a),bgColor:dn(a,o,n,r)})}a.push(e),i.push(1)}if(c){const e=[An("StDev:")];for(let l=0;l<12;l++){const o=wn(gn(t,l));e.push({text:null===o?"":o.toFixed(2),bgColor:un})}a.push(e),i.push(1)}if(p){const e=[An("Pos%:")];for(let l=0;l<12;l++){const o=Cn(gn(t,l));e.push(null===o?{text:""}:{text:`${Math.round(o)}%`,bgColor:dn(o-50,50,n,r)})}a.push(e),i.push(1)}}return{rows:a,options:{position:Mn[nn(l,"tablePosition","Center")]??"bottom-center",cellWidth:vn,cellHeight:18,rowWeights:i,widthPercent:on(l,"tableWidth",100),heightPercent:on(l,"tableHeight",95),fontSize:10,margin:8}}}},xn=[Nn],Sn="__tier2",Ln=e=>e[Sn];function Bn(e,l){return(e.refetchOn??[]).map(e=>`${e}=${String(l[e])}`).join("&")}function Kn(e,l){const t=e[e.length-1];if(void 0===t||l.time>t.time)return void e.push(l);if(l.time===t.time)return void(e[e.length-1]=l);let o=0,n=e.length;for(;o<n;){const t=o+n>>1;e[t].time<l.time?o=t+1:n=t}e[o]?.time===l.time?e[o]=l:e.splice(o,0,l)}function Wn(e){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,t,o)=>{const n=Ln(o);return function(e,l,t){const o={};for(const l of t)o[l.key]=new Array(e.length).fill(null);if(0===l.length)return o;let n=-1;for(let r=0;r<e.length;r++){for(;n+1<l.length&&l[n+1].time<=e[r].time;)n+=1;if(n<0)continue;const a=l[n].values;for(const e of t){const l=a[e.key];o[e.key][r]="number"==typeof l&&Number.isFinite(l)?l:null}}return o}(l,n?.points??[],e.plots)},attach:l=>{const t=Ln(l.store)??{key:null,points:[],live:[],loaded:!1,from:0,to:0,status:{state:"empty"},request:null,unsubscribe:null,generation:0};l.store[Sn]=t;let o=++t.generation,n=!0,r=null,a=()=>{};t.unsubscribe?.(),t.unsubscribe=null;const i=()=>n&&t.generation===o&&!l.signal?.aborted,s=e=>{t.status=e,i()&&l.setDataStatus?.(e)},c=()=>{t.request?.controller.abort(),t.request=null,r=null},p=()=>{t.unsubscribe?.(),t.unsubscribe=null},y=e=>{r!==e&&(r=e,e.promise.then(o=>{if(!i()||t.request!==e||e.controller.signal.aborted)return;t.request=null,r=null;const n=e.extend&&e.from<t.from,a=e.extend&&!n?t.points.slice():[];for(const e of o.slice().sort((e,l)=>e.time-l.time))Number.isFinite(e.time)&&Kn(a,e);if(n)for(const e of t.points)Kn(a,e);for(const e of t.live)Kn(a,e);t.points=a,t.from=t.loaded?Math.min(t.from,e.from):e.from,t.to=t.loaded?Math.max(t.to,e.to):e.to,t.loaded=!0,s({state:a.length>0?"ready":"empty"}),l.requestRecompute(),f()},l=>{i()&&t.request===e&&!e.controller.signal.aborted&&(t.request=null,r=null,s({state:"error",error:l}))}))},u=(l,o,n,r)=>{const a=new AbortController;let i;s({state:"loading"});try{i=e.fetch({...l,from:o,to:n,signal:a.signal})}catch(e){return void s({state:"error",error:e})}const c={promise:i,controller:a,from:o,to:n,extend:r};t.request=c,y(c)},f=(n=!1)=>{if(!i())return;const r=(()=>{const e=l.bars(),t=l.dataContext?.()??{symbol:l.symbol?.(),interval:l.interval?.()};return{settings:l.settings(),bars:e,dataContext:{...t},from:e[0]?.time??0,to:e[e.length-1]?.time??0}})(),a=r.dataContext,f=JSON.stringify([Bn(e,r.settings),a?.symbol,a?.exchange,a?.interval]),d=f!==t.key;let m;d&&(o=++t.generation,p(),c(),t.key=f,t.loaded=!1,t.live=[],t.status={state:"empty"},t.points.length>0&&(t.points=[],l.requestRecompute()));try{m=e.supports?.(r)??!0}catch(e){return void s({state:"error",error:e})}if(!m)return o=++t.generation,p(),c(),t.loaded=!1,t.live=[],t.points.length>0&&(t.points=[],l.requestRecompute()),void s({state:"unsupported"});if(0!==r.bars.length){if(null!==t.request?y(t.request):(n||d||"error"!==t.status.state)&&(!t.loaded||n?u(r,r.from,r.to,!1):r.from<t.from?u(r,r.from,t.from,!0):void 0===e.subscribe&&r.to>t.to?u(r,t.to,r.to,!0):s({state:t.points.length>0?"ready":"empty"})),null===t.unsubscribe&&void 0!==e.subscribe){const n=o;try{t.unsubscribe=e.subscribe(r,e=>{i()&&o===n&&Number.isFinite(e.time)&&(Kn(t.live,e),Kn(t.points,e),null===t.request&&"error"!==t.status.state&&s({state:"ready"}),l.requestRecompute())})}catch(e){s({state:"error",error:e})}}}else null===t.request&&s({state:"empty"})},d=()=>{if(!i()&&!n)return;if(n=!1,a(),l.signal?.removeEventListener("abort",m),t.generation!==o)return;t.generation+=1,p(),l.setDataRetry?.(null);const e=t.generation;queueMicrotask(()=>{t.generation===e&&c()})},m=()=>{c(),d()};return l.signal?.addEventListener("abort",m,{once:!0}),a=l.subscribeDataChanges?.(()=>f())??(()=>{}),l.setDataRetry?.(()=>f(!0)),l.setDataStatus?.(t.status),f("error"===t.status.state),d}}}const Dn="indicators",Fn=[J,Q,_,ne,ee,re,ce,ae,se,de,me,be,he,ge,ke,we,Ce,ve,Ae,Ne,...Qe,...ul,...Kl,...Vl,...Jl,...Ct,...Tt,...Gt,...uo,...Lo,...Zo,...tn,...xn];let Rn=!1;function Un(){if(!Rn){Rn=!0;for(const e of Fn)b(e)}}Un();export{Jl as ADAPTIVE_INDICATORS,Ne as ADL,he as ADX,ht as ALLIGATOR,Te as ALMA,qo as ALPHATREND,tl as AROON,ol as AROON_OSCILLATOR,we as ATR,Al as AVERAGE_DAILY_RANGE,Ct as AVERAGE_INDICATORS,nl as AWESOME_OSCILLATOR,rl as BALANCE_OF_POWER,Cl as BB_TREND,ee as BOLLINGER,wl as BOLLINGER_BANDWIDTH,kl as BOLLINGER_PERCENT_B,Fn as BUILTIN_INDICATORS,ge as CCI,Ul as CHAIKIN_MONEY_FLOW,Tl as CHAIKIN_OSCILLATOR,Sl as CHAIKIN_VOLATILITY,Ee as CHANDELIER_EXIT,He as CHANDE_KROLL_STOP,al as CHANDE_MOMENTUM,Ml as CHOPPINESS_INDEX,xl as CHOP_ZONE,yl as CONNORS_RSI,So as CONSOLIDATION_BREAKOUT,il as COPPOCK_CURVE,$o as CPR,Pe as DEMA,Ve as DONCHIAN,sl as DPO,Pl as EASE_OF_MOVEMENT,Ol as ELDER_FORCE_INDEX,Q as EMA,Ie as ENVELOPE,cl as FISHER_TRANSFORM,Vl as FLOW_INDICATORS,ce as HALFTREND,vl as HISTORICAL_VOLATILITY,Oe as HMA,_e as HULL_SUITE,se as ICHIMOKU,Gt as INDEX_INDICATORS,Dn as INDICATORS_TIER,zl as KAMA,Zl as KELTNER_CHANNEL,jl as KLINGER_OSCILLATOR,Gl as KNOW_SURE_THING,Xl as LINREG_SLOPE,Yl as LSMA,me as MACD,Yt as MASS_INDEX,qe as MA_CHANNEL,it as MA_CROSS,ft as MA_RIBBON,st as MCGINLEY_DYNAMIC,ct as MEDIAN,ke as MFI,St as MOMENTUM,Il as NET_VOLUME,$t as NVI,Ae as OBV,ul as OSCILLATOR_INDICATORS,Qe as OVERLAY_INDICATORS,ae as PARABOLIC_SAR,Kt as PPO,qt as PVI,Zt as PVO,zt as PVT,zo as RANGE_ANALYSIS,uo as RANGE_INDICATORS,io as RELATIVE_VIGOR_INDEX,so as RELATIVE_VOLATILITY_INDEX,Lt as ROC,de as RSI,xo as RSI_DIVERGENCE,Nn as SEASONALITY,xn as SEASONALITY_INDICATORS,Lo as SIGNAL_INDICATORS,J as SMA,Ut as SMI,Ft as SMI_ERGODIC_INDICATOR,Rt as SMI_ERGODIC_OSCILLATOR,gt as SMMA,yo as SPECIAL_K,Ll as STANDARD_DEVIATION,Bl as STANDARD_ERROR,$e as STANDARD_ERROR_BANDS,be as STOCHASTIC,no as STOCHASTIC_RSI,Tt as STRENGTH_INDICATORS,Zo as STUDY_INDICATORS,re as SUPERTREND,wt as T3,dt as TEMA,vo as TREND_STRENGTH_INDEX,Wt as TRIX,Dt as TSI,mt as TWAP,jt as ULCER_INDEX,ao as ULTIMATE_OSCILLATOR,Kl as VOLATILITY_INDICATORS,Mo as VOLATILITY_STOP,ve as VOLUME,Co as VORTEX,ne as VWAP,bt as VWMA,ln as WAVETREND,tn as WAVETREND_INDICATORS,No as WILLIAMS_FRACTALS,ro as WILLIAMS_PERCENT_R,Ce as WILLIAMS_VIX_FIX,_ as WMA,co as WOODIES_CCI,B as alma,z as barsSince,H as cci,N as change,pl as connorsStreak,V as correlation,Wn as createTier2Indicator,U as cumulative,S as dev,C as highest,W as highestBars,T as linreg,M as lowest,D as lowestBars,v as nulls,L as percentRank,I as percentileNearestRank,E as pivotHigh,$ as pivotLow,Un as registerBuiltinIndicators,k as rma,x as roc,R as rollingSum,h as sma,A as smaSeededEma,w as stdev,O as stoch,P as swma,Z as valueWhen,K as vwma,g as wma};
|
|
1
|
+
import{sourceValues as e,supertrend as l,atr as t,sessionStartFlags as o,calendarPeriodFlags as n,DEFAULT_TIMEZONE as r,isValidTimezone as a,isNewZonedPeriod as i,utcSecondsToIstParts as s,IST_OFFSET_SECONDS as c,rsi as p,trueRange as y,isNewZonedWeek as u,isNewZonedMonth as f,utcSecondsToZonedParts as d,zonedWallClockToUtcSeconds as m,IndicatorInputError as h,resolveInterval as b,parseSessionSpec as g,bucketStartOf as k,zonedWeekIndex as w,zonedDayIndex as C,startOfZonedDay as v,registerIndicator as M}from"./openalgo-charts.mjs";function A(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0,r=0;for(let a=0;a<t;a++){const t=e[a];if(Number.isFinite(t)?n+=t:r+=1,a>=l){const t=e[a-l];Number.isFinite(t)?n-=t:r-=1}a>=l-1&&(o[a]=0===r?n/l:NaN)}return o}function N(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=l*(l+1)/2;for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=e[r-o]*(l-o);o[r]=t/n}return o}function x(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let t=0;t<l;t++)n+=e[t];let r=n/l;o[l-1]=r;for(let n=l;n<t;n++)r=(r*(l-1)+e[n])/l,o[n]=r;return o}function S(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=A(e,l);for(let r=l-1;r<t;r++){let t=0;const a=n[r];for(let o=0;o<l;o++){const l=e[r-o]-a;t+=l*l}o[r]=Math.sqrt(t/l)}return o}function L(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l-1;n<t;n++){let t=-1/0;for(let o=0;o<l;o++)e[n-o]>t&&(t=e[n-o]);o[n]=t}return o}function B(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l-1;n<t;n++){let t=1/0;for(let o=0;o<l;o++)e[n-o]<t&&(t=e[n-o]);o[n]=t}return o}function K(e){const l=new Array(e.length);for(let t=0;t<e.length;t++){const o=e[t];l[t]=Number.isFinite(o)?o:null}return l}function W(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let t=0;t<l;t++)n+=e[t];let r=n/l;o[l-1]=r;const a=2/(l+1);for(let n=l;n<t;n++)r=e[n]*a+r*(1-a),o[n]=r;return o}function D(e,l=1){const t=e.length,o=new Array(t).fill(NaN);for(let n=l;n<t;n++)o[n]=e[n]-e[n-l];return o}function F(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l;n<t;n++){const t=e[n-l];o[n]=0===t?NaN:100*(e[n]-t)/t}return o}function R(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;const n=A(e,l);for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=Math.abs(e[r-o]-n[r]);o[r]=t/l}return o}function U(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;for(let n=l;n<t;n++){let t=0;for(let o=1;o<=l;o++)e[n-o]<=e[n]&&(t+=1);o[n]=100*t/l}return o}function T(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN);if(l<=0||o<=0||n<l)return r;const a=t*(l-1),i=l/o,s=new Array(l);let c=0;for(let e=0;e<l;e++){const l=Math.exp(-(e-a)*(e-a)/(2*i*i));s[e]=l,c+=l}if(0===c)return r;for(let t=l-1;t<n;t++){let o=0;for(let n=0;n<l;n++)o+=e[t-(l-1-n)]*s[n];r[t]=o/c}return r}function P(e,l,t){const o=e.length,n=new Array(o);for(let t=0;t<o;t++)n[t]=e[t]*(l[t]??0);const r=A(n,t),a=A(l,t),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 O(e,l){return V(e,l,!0)}function I(e,l){return V(e,l,!1)}function V(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0||o<l)return n;for(let r=l-1;r<o;r++){let o=e[r],a=0;for(let n=1;n<l;n++){const l=e[r-n];(t?l>o:l<o)&&(o=l,a=n)}n[r]=0===a?0:-a}return n}function H(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0||t<l)return o;let n=0;for(let r=0;r<t;r++)n+=e[r],r>=l&&(n-=e[r-l]),r>=l-1&&(o[r]=n);return o}function E(e){const l=e.length,t=new Array(l);let o=0;for(let n=0;n<l;n++){const l=e[n];Number.isFinite(l)&&(o+=l),t[n]=o}return t}function $(e,l,t=0){const o=e.length,n=new Array(o).fill(NaN);if(l<=1||o<l)return n;const r=(l-1)*l/2,a=l*((l-1)*l*(2*l-1)/6)-r*r;if(0===a)return n;for(let i=l-1;i<o;i++){let o=0,s=0;for(let t=0;t<l;t++){const n=e[i-(l-1-t)];o+=n,s+=n*t}const c=(l*s-r*o)/a,p=(o-c*r)/l;n[i]=p+c*(l-1-t)}return n}function q(e){const l=e.length,t=new Array(l).fill(NaN);for(let o=3;o<l;o++)t[o]=(e[o-3]+2*e[o-2]+2*e[o-1]+e[o])/6;return t}function z(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN),a=L(l,o),i=B(t,o);for(let l=0;l<n;l++){const t=a[l]-i[l];r[l]=0===t?NaN:100*(e[l]-i[l])/t}return r}function Z(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0||o<l)return n;for(let r=l-1;r<o;r++){const o=e.slice(r-l+1,r+1);if(o.some(e=>!Number.isFinite(e)))continue;o.sort((e,l)=>e-l);const a=Math.max(1,Math.ceil(t/100*l));n[r]=o[a-1]}return n}function Y(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(t<=1||o<t)return n;for(let r=t-1;r<o;r++){let o=0,a=0,i=0,s=0,c=0;for(let n=0;n<t;n++){const t=e[r-n],p=l[r-n];o+=t,a+=p,i+=t*t,s+=p*p,c+=t*p}const p=t*c-o*a,y=Math.sqrt(t*i-o*o)*Math.sqrt(t*s-a*a);n[r]=0===y?NaN:p/y}return n}function j(e,l){const t=e.length,o=new Array(t).fill(NaN),n=A(e,l),r=R(e,l);for(let l=0;l<t;l++)o[l]=0===r[l]?NaN:(e[l]-n[l])/(.015*r[l]);return o}function G(e,l,t){return J(e,l,t,!0)}function X(e,l,t){return J(e,l,t,!1)}function J(e,l,t,o){const n=e.length,r=new Array(n).fill(NaN);for(let a=l+t;a<n;a++){const n=a-t,i=e[n];if(!Number.isFinite(i))continue;let s=!0;for(let t=1;t<=l&&s;t++){const l=e[n-t];Number.isFinite(l)&&!(o?l>=i:l<=i)||(s=!1)}for(let l=1;l<=t&&s;l++){const t=e[n+l];Number.isFinite(t)&&!(o?t>=i:t<=i)||(s=!1)}s&&(r[a]=i)}return r}function _(e){const l=e.length,t=new Array(l).fill(NaN);let o=-1;for(let n=0;n<l;n++)e[n]&&(o=n),o>=0&&(t[n]=n-o);return t}function Q(e,l,t){const o=e.length,n=new Array(o).fill(NaN),r=[];for(let a=0;a<o;a++){e[a]&&r.push(a);const o=r.length-1-t;o>=0&&(n[a]=l[r[o]])}return n}const ee=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},le=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},te=(e,l="source")=>e[l]??"close";function oe(l,t,o,n){return{id:l,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"},{key:"color",type:"color",label:"Color",default:o}],plots:[{key:"ma",type:"line",title:t,colorKey:"color",style:{color:o,lineWidth:1.5}}],calc:(l,t)=>({ma:K(n(e(l,te(t)),ee(t,"length",9)))})}}const ne=oe("sma","SMA","#4f8cff",A),re=oe("wma","WMA","#ab47bc",N),ae=oe("ema","EMA","#f5a623",W),ie={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:(l,t)=>{const o=e(l,te(t)),n=ee(t,"length",20),r=ee(t,"stdDev",2),a=A(o,n),i=S(o,n),s=a.map((e,l)=>e+r*i[l]),c=a.map((e,l)=>e-r*i[l]);return{upper:K(s),basis:K(a),lower:K(c)}}},se=e=>Math.floor(((e=>Math.floor((e+c)/86400))(e)-4)/7);function ce(e,l){return l===r?(l,t)=>function(e,l,t){if("week"===e)return se(l)!==se(t);const o=s(l),n=s(t);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)}(e,l,t):(t,o)=>i(t,o,e,l)}function pe(e,l){if(0===l)return e.slice();const t=new Array(e.length).fill(NaN);for(let o=0;o<e.length;o++){const n=o+l;n>=0&&n<e.length&&(t[n]=e[o])}return t}const ye={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:(l,t)=>{const i=l.length,s=e(l,te(t)),c="string"==typeof t.anchor?t.anchor:"session",p="percent"===t.calcMode,y=Math.round(ee(t,"offset",0)),u=new Array(i).fill(NaN),f=new Array(i).fill(NaN),d=function(e,l,t){if("continuous"===l)return new Array(e.length).fill(!1);const r=e.map(e=>e.time);return"session"===l?o(r,t):n(r,ce(l,t))}(l,c,(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(t));let m=0,h=0,b=0;for(let e=0;e<i;e++){d[e]&&(m=0,h=0,b=0);const t=l[e].volume??0,o=s[e];if(m+=o*t,b+=o*o*t,h+=t,h<=0)continue;const n=m/h;u[e]=n;const r=Math.max(0,b/h-n*n);f[e]=p?.01*n:Math.sqrt(r)}const g=(e,l,t)=>{const o=new Array(i).fill(NaN);if(!e)return o;for(let e=0;e<i;e++)Number.isFinite(u[e])&&Number.isFinite(f[e])&&(o[e]=u[e]+t*f[e]*l);return o},k=!1!==t.showBand1,w=!0===t.showBand2,C=!0===t.showBand3,v=ee(t,"bandMult1",1),M=ee(t,"bandMult2",2),A=ee(t,"bandMult3",3);return{vwap:K(pe(u,y)),upper1:K(pe(g(k,v,1),y)),lower1:K(pe(g(k,v,-1),y)),upper2:K(pe(g(w,M,1),y)),lower2:K(pe(g(w,M,-1),y)),upper3:K(pe(g(C,A,1),y)),lower3:K(pe(g(C,A,-1),y))}}},ue={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 o=l(e,ee(t,"period",10),ee(t,"multiplier",3)),n=[],r=[],a=[];for(let l=0;l<o.length;l++){const t=o[l],i=Number.isFinite(t.value);n.push(i&&-1===t.direction?t.value:null),r.push(i&&1===t.direction?t.value:null);const s=e[l];a.push(i&&void 0!==s?(s.open+s.close)/2:null)}return{up:n,down:r,bodyMid:a}}},fe={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,l)=>{const t=e.length,o=new Array(t).fill(NaN);if(t<2)return{sar:K(o)};const n=ee(l,"start",.02),r=ee(l,"increment",.02),a=ee(l,"maximum",.2);let i=e[1].close>=e[0].close,s=i?e[0].low:e[0].high,c=i?e[1].high:e[1].low,p=n;o[1]=s;for(let l=2;l<t;l++){s+=p*(c-s),i&&e[l].low<s?(i=!1,s=Math.max(c,e[l].high),c=e[l].low,p=n):!i&&e[l].high>s?(i=!0,s=Math.min(c,e[l].low),c=e[l].high,p=n):i&&e[l].high>c?(c=e[l].high,p=Math.min(a,p+r)):!i&&e[l].low<c&&(c=e[l].low,p=Math.min(a,p+r));const t=e[l-1].low,y=e[l-1].high,u=e[l-2].low,f=e[l-2].high;s=i?Math.min(s,t,u):Math.max(s,y,f),o[l]=s}return{sar:K(o)}}};function de(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}const me={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,l)=>{const t=e.length,o=ee(l,"conversionPeriod",9),n=ee(l,"basePeriod",26),r=ee(l,"laggingSpanPeriod",52),a=ee(l,"displacement",26),i=l=>{const o=new Array(t).fill(NaN);for(let n=l-1;n<t;n++){let t=-1/0,r=1/0;for(let o=0;o<l;o++)e[n-o].high>t&&(t=e[n-o].high),e[n-o].low<r&&(r=e[n-o].low);o[n]=(t+r)/2}return o},s=i(o),c=i(n),p=s.map((e,l)=>(e+c[l])/2),y=i(r),u=e.map(e=>e.close);return{conversion:K(s),base:K(c),spanA:K(de(p,a)),spanB:K(de(y,a)),lagging:K(de(u,-a))}}},he={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:l,settings:t})=>{if(!1===t.showLabels)return[];const o=l.buySignal??[],n=l.sellSignal??[],r=[];for(let l=0;l<e.length;l++){const a=o[l];if(null!=a){r.push({time:e[l].time,position:"atPrice",price:a,shape:"labelUp",size:"small",color:le(t,"upColor","#2962ff"),text:"Buy"});continue}const i=n[l];null!=i&&r.push({time:e[l].time,position:"atPrice",price:i,shape:"labelDown",size:"small",color:le(t,"downColor","#ef5350"),text:"Sell"})}return r},calc:(e,l)=>{const o=e.length,n=new Array(o).fill(null),r=new Array(o).fill(null),a=new Array(o).fill(null),i=new Array(o).fill(null),s=new Array(o).fill(null),c=new Array(o).fill(null),p={up:n,down:r,atrHigh:a,atrLow:i,buySignal:s,sellSignal:c};if(0===o)return p;const y=Math.max(1,Math.round(ee(l,"amplitude",2))),u=ee(l,"channelDeviation",2),f=!1!==l.showChannels,d=!1!==l.showSignals,m=e.map(e=>e.high),h=e.map(e=>e.low),b=t(m,h,e.map(e=>e.close),Math.max(1,Math.round(ee(l,"atrPeriod",100)))),g=A(m,y),k=A(h,y),w=L(m,y),C=B(h,y);let v=0,M=0,N=h[0],x=m[0],S=0,K=0,W=!1;for(let l=0;l<o;l++){const t=b[l]/2,o=u*t,p=w[l],y=C[l],A=l>0?m[l-1]:m[0],L=l>0?h[l-1]:h[0],B=W?v:-1;let D;1===M?(Number.isFinite(y)&&(N=Math.max(y,N)),Number.isFinite(g[l])&&g[l]<N&&e[l].close<L&&(v=1,M=0,x=p)):(Number.isFinite(p)&&(x=Math.min(p,x)),Number.isFinite(k[l])&&k[l]>x&&e[l].close>A&&(v=0,M=1,N=y)),0===v?(1===B?(S=K,d&&Number.isFinite(t)&&(s[l]=S-t)):S=-1===B?N:Math.max(N,S),D=S):(0===B?(K=S,d&&Number.isFinite(t)&&(c[l]=K+t)):K=-1===B?x:Math.min(x,K),D=K),W=!0,Number.isFinite(D)&&(0===v?n[l]=D:r[l]=D,f&&Number.isFinite(o)&&(a[l]=D+o,i[l]=D-o))}return p}},be=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},ge=e=>e.source??"close",ke=(e,l)=>new Array(e).fill(l);function we(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n),n);for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}const Ce={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:(l,t)=>({rsi:K(p(e(l,ge(t)),be(t,"length",14))),upperLevel:ke(l.length,be(t,"overbought",70)),lowerLevel:ke(l.length,be(t,"oversold",30))}),levels:e=>[{price:be(e,"overbought",70),color:"#ef5350",title:"OB",dashed:!0},{price:50,color:"#5a6b8c",title:"",dashed:!0},{price:be(e,"oversold",30),color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},ve={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:l,values:t,settings:o})=>{const n=t.histogram?.[l-1],r=null==n||!Number.isFinite(n)||e>=n,a=(e,l)=>{const t=o[e];return"string"==typeof t?t:l};return e>=0?r?a("histUpColor","#26a69a"):a("histUpFadeColor","#a7d8d2"):r?a("histDownFadeColor","#f5b0ae"):a("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:(l,t)=>{const o=e(l,ge(t)),n=W(o,be(t,"fastPeriod",12)),r=W(o,be(t,"slowPeriod",26)),a=n.map((e,l)=>e-r[l]),i=we(a,e=>W(e,be(t,"signalPeriod",9))),s=a.map((e,l)=>e-i[l]);return{macd:K(a),signal:K(i),histogram:K(s)}},levels:()=>[{price:0,color:"#5a6b8c",dashed:!0}]},Me={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,l)=>{const t=L(e.map(e=>e.high),be(l,"kPeriod",14)),o=B(e.map(e=>e.low),be(l,"kPeriod",14)),n=e.map((e,l)=>{const n=t[l]-o[l];return n>0?(e.close-o[l])/n*100:NaN}),r=A(n,be(l,"kSmoothing",1)),a=A(r,be(l,"dPeriod",3));return{k:K(r),d:K(a),upperLevel:ke(e.length,80),lowerLevel:ke(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})},Ae={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,l)=>{const t=e.length,o=be(l,"period",14),n=e.map(e=>e.high),r=e.map(e=>e.low),a=e.map(e=>e.close),i=y(n,r,a);t>0&&(i[0]=NaN);const s=new Array(t).fill(0),c=new Array(t).fill(0);for(let e=1;e<t;e++){const l=n[e]-n[e-1],t=r[e-1]-r[e];s[e]=l>t&&l>0?l:0,c[e]=t>l&&t>0?t:0}const p=i.findIndex(e=>Number.isFinite(e)),u=new Array(t).fill(NaN);if(p>=0){const e=x(i.slice(p),o);for(let l=0;l<e.length&&p+l<t;l++)u[p+l]=e[l]}const f=x(s,o),d=x(c,o),m=new Array(t).fill(NaN),h=new Array(t).fill(NaN),b=new Array(t).fill(NaN);let g=NaN,k=NaN;for(let e=0;e<t;e++){const l=u[e];if(Number.isFinite(l)&&0!==l&&(g=f[e]/l*100,k=d[e]/l*100),!Number.isFinite(g)||!Number.isFinite(k))continue;m[e]=g,h[e]=k;const t=g+k;b[e]=t>0?Math.abs(g-k)/t*100:0}const w=b.findIndex(e=>Number.isFinite(e)),C=new Array(t).fill(NaN);if(w>=0){const e=x(b.slice(w),be(l,"adxPeriod",14));for(let l=0;l<e.length;l++)C[w+l]=e[l]}return{plusDi:K(m),minusDi:K(h),adx:K(C)}},levels:()=>[{price:25,color:"#5a6b8c",title:"25",dashed:!0}]},Ne={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"},{key:"maType",type:"select",label:"Type",default:"SMA",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:20,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:"CCI-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"}],plots:[{key:"cci",type:"line",title:"CCI",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"CCI-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}}],fills:[{between:["upperLevel","lowerLevel"],colorUpKey:"bandColor",colorDownKey:"bandColor",opacity:.1},{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=be(l,"period",20),n=be(l,"constant",.015),r=e.map(e=>(e.high+e.low+e.close)/3),a=A(r,o),i=new Array(t).fill(NaN);for(let e=o-1;e<t;e++){let l=0;for(let t=0;t<o;t++)l+=Math.abs(r[e-t]-a[e]);const t=l/o;i[e]=t>0?(r[e]-a[e])/(n*t):0}const s=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(l,"maType","SMA"),c=((e,l,t,o=1)=>Math.max(o,Math.round(be(e,l,t))))(l,"maLength",20),p=be(l,"bbMult",2),y="None"===s?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return we(l,e=>W(e,o));case"SMMA (RMA)":return we(l,e=>x(e,o));case"WMA":return we(l,e=>N(e,o));case"VWMA":return we(l,(e,l)=>P(e,t.slice(l),o));default:return we(l,e=>A(e,o))}}(s,i,e.map(e=>e.volume??0),c),u="SMA + Bollinger Bands"===s?we(i,e=>S(e,c)).map(e=>e*p):new Array(t).fill(NaN);return{cci:K(i),ma:K(y),bbUpper:K(y.map((e,l)=>e+u[l])),bbLower:K(y.map((e,l)=>e-u[l])),upperLevel:ke(t,100),lowerLevel:ke(t,-100)}},levels:()=>[{price:100,color:"#ef5350",dashed:!0},{price:0,color:"#5a6b8c",dashed:!0},{price:-100,color:"#26a69a",dashed:!0}]},xe={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,l)=>{const t=e.length,o=be(l,"period",14),n=e.map(e=>(e.high+e.low+e.close)/3),r=new Array(t).fill(0),a=new Array(t).fill(0);for(let l=1;l<t;l++){const t=n[l]*(e[l].volume??0);n[l]>n[l-1]?r[l]=t:n[l]<n[l-1]&&(a[l]=t)}const i=new Array(t).fill(NaN);for(let e=o;e<t;e++){let l=0,t=0;for(let n=0;n<o;n++)l+=r[e-n],t+=a[e-n];i[e]=0===t?100:100-100/(1+l/t)}return{mfi:K(i),upperLevel:ke(t,80),lowerLevel:ke(t,20)}},levels:()=>[{price:80,color:"#ef5350",title:"OB",dashed:!0},{price:20,color:"#26a69a",title:"OS",dashed:!0}],range:()=>({min:0,max:100})},Se={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,l)=>({atr:K(t(e.map(e=>e.high),e.map(e=>e.low),e.map(e=>e.close),be(l,"period",14)))})},Le={id:"williams-vix-fix",name:"William 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:l,settings:t})=>{const o=l.wvf?.[e],n=l.alertUpper?.[e],r=l.alertHigh?.[e],a=(e,l)=>"string"==typeof t[e]?t[e]:l;if(null==o)return;return null!=n&&o>=n||null!=r&&o>=r?a("highColor","#00ff00"):a("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,l)=>{const t=e.length,o=e.map(e=>e.close),n=e.map(e=>e.low),r=be(l,"pd",22),a=be(l,"bbl",20),i=be(l,"mult",2),s=be(l,"lb",50),c=be(l,"ph",.85),p=be(l,"pl",1.01),y=!0===l.hp,u=!0===l.sd,f=L(o,r),d=new Array(t);for(let e=0;e<t;e++){const l=f[e];d[e]=Number.isFinite(l)&&0!==l?(l-n[e])/l*100:NaN}const m=S(d,a),h=A(d,a),b=L(d,s),g=B(d,s),k=new Array(t),w=new Array(t),C=new Array(t),v=new Array(t),M=new Array(t);for(let e=0;e<t;e++){const l=h[e]+i*m[e],t=b[e]*c,o=g[e]*p;k[e]=Number.isFinite(l)?l:null,w[e]=Number.isFinite(t)?t:null,C[e]=u?k[e]:null,v[e]=y?w[e]:null,M[e]=y&&Number.isFinite(o)?o:null}return{wvf:K(d),rangeHigh:v,rangeLow:M,upperBand:C,alertUpper:k,alertHigh:w}}},Be=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t};const Ke={id:"volume",name:"Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#3a4666"}],plots:[{key:"volume",type:"histogram",title:"Volume",colorKey:"color",style:{base:0}}],calc:e=>({volume:K(e.map(e=>e.volume??0))})},We={id:"obv",name:"On-Balance Volume",category:"Volume",placement:"pane",inputs:[{key:"color",type:"color",label:"Color",default:"#26c6da"},{key:"maType",type:"select",label:"Type",default:"None",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:9,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:"OBV-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"}],plots:[{key:"obv",type:"line",title:"OBV",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"OBV-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}}],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=new Array(t).fill(NaN);let n=0;for(let l=0;l<t;l++){if(l>0){const t=e[l].volume??0;e[l].close>e[l-1].close?n+=t:e[l].close<e[l-1].close&&(n-=t)}o[l]=n}const r=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(l,"maType","None"),a=((e,l,t,o=1)=>Math.max(o,Math.round(Be(e,l,t))))(l,"maLength",9),i=Be(l,"bbMult",2),s="None"===r?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return W(l,o);case"SMMA (RMA)":return x(l,o);case"WMA":return N(l,o);case"VWMA":return P(l,t,o);default:return A(l,o)}}(r,o,e.map(e=>e.volume??0),a),c="SMA + Bollinger Bands"===r?S(o,a).map(e=>e*i):new Array(t).fill(NaN);return{obv:K(o),ma:K(s),bbUpper:K(s.map((e,l)=>e+c[l])),bbLower:K(s.map((e,l)=>e-c[l]))}}},De={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 l=new Array(e.length).fill(NaN);let t=0;for(let o=0;o<e.length;o++){const n=e[o],r=n.high-n.low;r>0&&(t+=(n.close-n.low-(n.high-n.close))/r*(n.volume??0)),l[o]=t}return{adl:K(l)}}},Fe=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Re=(e,l,t,o=1)=>Math.max(o,Math.round(Fe(e,l,t))),Ue=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},Te=(e,l="source")=>e[l]??"close",Pe=e=>e.map(e=>e.high),Oe=e=>e.map(e=>e.low);function Ie(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=W(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}function Ve(e,l,t){const o=e.length,n=new Array(o).fill(NaN);if(l<=0)return n;for(let r=l-1;r<o;r++){let o=t?-1/0:1/0,a=!0;for(let n=0;n<l;n++){const l=e[r-n];if(!Number.isFinite(l)){a=!1;break}(t?l>o:l<o)&&(o=l)}a&&(n[r]=o)}return n}function He(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}const Ee=.05,$e={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:(l,t)=>({alma:K(T(e(l,"close"),Re(t,"length",9),Fe(t,"offset",.85),Fe(t,"sigma",6)))})},qe={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:(l,t)=>{const o=e(l,Te(t)),n=Re(t,"length",9),r=W(o,n),a=Ie(r,n);return{dema:K(r.map((e,l)=>2*e-a[l]))}}};const ze={id:"hma",name:"Hull Moving Average",category:"Trend",placement:"onchart",inputs:[{key:"length",type:"number",label:"Length",default:9,min:2,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:(l,t)=>{const o=e(l,Te(t)),n=Re(t,"length",9,2),r=Math.max(.5,n/2),a=Math.max(1,Math.floor(Math.sqrt(n))),i=function(e,l){const t=e.length,o=new Array(t).fill(NaN),n=Math.ceil(l);if(l<=0||t<n)return o;let r=0;for(let e=0;e<n;e++)r+=l-e;for(let a=n-1;a<t;a++){let t=0;for(let o=0;o<n;o++)t+=e[a-o]*(l-o);o[a]=t/r}return o}(o,r),s=N(o,n);return{hma:K(N(i.map((e,l)=>2*e-s[l]),a))}}},Ze={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:Ee}],calc:(l,t)=>{const o=e(l,Te(t)),n=Re(t,"length",20),r=Fe(t,"percent",10)/100,a=!0===t.exponential?W(o,n):A(o,n);return{upper:K(a.map(e=>e*(1+r))),basis:K(a),lower:K(a.map(e=>e*(1-r)))}}},Ye={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:Ee}],calc:(e,l)=>{const t=Re(l,"length",20),o=Math.round(Fe(l,"offset",0)),n=L(Pe(e),t),r=B(Oe(e),t),a=n.map((e,l)=>(e+r[l])/2);return{upper:K(He(n,o)),basis:K(He(a,o)),lower:K(He(r,o))}}},je={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,l)=>{const o=Re(l,"p",10),n=Re(l,"x",1),r=Re(l,"q",9),a=Pe(e),i=Oe(e),s=t(a,i,e.map(e=>e.close),o),c=L(a,o).map((e,l)=>e-n*s[l]);return{stopLong:K(Ve(B(i,o).map((e,l)=>e+n*s[l]),r,!1)),stopShort:K(Ve(c,r,!0))}}},Ge={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,l)=>{const o=Re(l,"length",22),n=Fe(l,"atrMultiplier",3),r=Pe(e),a=Oe(e),i=t(r,a,e.map(e=>e.close),Re(l,"atrLength",22));return{longExit:K(L(r,o).map((e,l)=>e-n*i[l])),shortExit:K(B(a,o).map((e,l)=>e+n*i[l]))}}};const Xe={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:Ee}],calc:(l,t)=>{const o=e(l,"close"),n=Re(t,"periods",21,3),r=Fe(t,"errors",2),a=Re(t,"averagePeriods",3),i=function(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<3||t<l)return o;const n=(l+1)/2;for(let r=l-1;r<t;r++){let t=0;for(let o=0;o<l;o++)t+=e[r-o];const a=t/l;let i=0,s=0,c=0;for(let t=0;t<l;t++){const l=a-e[r-t],o=n-t-1;i+=l*l,s+=o*l,c+=o*o}o[r]=Math.sqrt((i-s*s/c)/(l-2))}return o}(o,n),s=$(o,n,0),c=e=>K("Exponential"===t.method?Ie(e,a):"Weighted"===t.method?N(e,a):A(e,a));return{upper:c(s.map((e,l)=>e+r*i[l])),basis:c(s),lower:c(s.map((e,l)=>e-r*i[l]))}}},Je={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:Ee}],calc:(e,l)=>({upper:K(He(A(Pe(e),Re(l,"upperLength",20)),Math.round(Fe(l,"upperOffset",0)))),lower:K(He(A(Oe(e),Re(l,"lowerLength",20)),Math.round(Fe(l,"lowerOffset",0))))})},_e="#00ff00",Qe="#ff0000",el="#ff9800",ll=e=>Math.max(1,Math.floor(e)),tl=e=>Math.max(1,Math.round(Math.sqrt(e)));function ol(e,l,t){return"Ehma"===l?function(e,l){const t=W(e,ll(l/2)),o=W(e,l);return Ie(t.map((e,l)=>2*e-o[l]),tl(l))}(e,t):"Thma"===l?function(e,l){const t=N(e,ll(l/3)),o=N(e,ll(l/2)),n=N(e,l);return N(t.map((e,l)=>3*e-o[l]-n[l]),l)}(e,ll(t/2)):function(e,l){const t=N(e,ll(l/2)),o=N(e,l);return N(t.map((e,l)=>2*e-o[l]),tl(l))}(e,t)}const nl=(e,l,t)=>{if(!1===t.switchColor)return Ue(t,"neutralColor",el);const o=e?.[l],n=e?.[l-2];return"number"==typeof o&&"number"==typeof n&&o>n?Ue(t,"bullishColor",_e):Ue(t,"bearishColor",Qe)},rl={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:_e},{key:"bearishColor",type:"color",label:"Bearish Color",default:Qe},{key:"neutralColor",type:"color",label:"Neutral Color",default:el}],plots:[{key:"mhull",type:"line",title:"Hull",colorKey:"neutralColor",style:{color:el,lineWidth:2},colorBy:({index:e,values:l,settings:t})=>nl(l.mhull,e,t)},{key:"shull",type:"line",title:"Hull Displaced",colorKey:"neutralColor",style:{color:el,lineWidth:2},colorBy:({index:e,values:l,settings:t})=>nl(l.mhull,e,t)}],fills:[{between:["mhull","shull"],colorUp:_e,colorDown:Qe,colorUpKey:"bullishColor",colorDownKey:"bearishColor",opacity:.6}],calc:(l,t)=>{const o=e(l,Te(t)),n=ll(Re(t,"length",55)*Fe(t,"lengthMult",1)),r=ol(o,Ue(t,"mode","Hma"),n),a=!1!==t.visualSwitch;return{mhull:K(r),shull:K(a?He(r,2):new Array(r.length).fill(NaN))}},barColors:({bars:e,values:l,settings:t})=>!0===t.candleCol?e.map((e,o)=>nl(l.mhull,o,t)):e.map(()=>null)},al=[$e,qe,ze,Ze,Ye,je,Ge,Xe,Je,rl],il=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),sl=l=>e(l,"hl2"),cl={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,l)=>{const t=il(l,"length",14),o=O(e.map(e=>e.high),t+1),n=I(e.map(e=>e.low),t+1),r=e=>e.map(e=>100*(e+t)/t);return{up:K(r(o)),down:K(r(n))}},levels:()=>[{price:50,color:"#5a6b8c",dashed:!0}],range:()=>({min:0,max:100})},pl={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,l)=>{const t=il(l,"length",14),o=O(e.map(e=>e.high),t+1),n=I(e.map(e=>e.low),t+1),r=o.map((e,l)=>100*(e-n[l])/t);return{osc:K(r),zero:r.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})},yl={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:l,values:t,settings:o})=>{const n=t.ao?.[l-1],r=(e,l)=>"string"==typeof o[e]?o[e]:l;return null==n||!Number.isFinite(n)||e-n>0?r("upColor","#009688"):r("downColor","#f44336")}}],calc:e=>{const l=sl(e),t=A(l,5),o=A(l,34);return{ao:K(t.map((e,l)=>e-o[l]))}},levels:()=>[{price:0,color:"#787b86"}]},ul={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 l=e.high-e.low;return 0===l?null:(e.close-e.open)/l})}),levels:()=>[{price:0,color:"#787b86"}]},fl={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:(l,t)=>{const o=l.length,n=il(t,"length",9),r=D(e(l,(e=>e.source??"close")(t))),a=new Array(Math.max(0,o-1)),i=new Array(Math.max(0,o-1));for(let e=1;e<o;e++){const l=r[e];a[e-1]=l>=0?l:0,i[e-1]=l>=0?0:-l}const s=H(a,n),c=H(i,n),p=new Array(o).fill(NaN);for(let e=0;e<s.length;e++){const l=s[e]+c[e];p[e+1]=0===l?NaN:100*(s[e]-c[e])/l}return{cmo:K(p)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]},dl={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,l)=>{const t=e.map(e=>e.close),o=F(t,il(l,"longRoCLength",14)),n=F(t,il(l,"shortRoCLength",11));return{curve:K(N(o.map((e,l)=>e+n[l]),il(l,"wmaLength",10)))}}},ml={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,l)=>{const t=e.length,o=il(l,"period",21),n=Math.floor(o/2)+1,r=e.map(e=>e.close),a=A(r,o),i=new Array(t).fill(NaN);if(!0===l.isCentered)for(let e=0;e+n<t;e++)i[e]=r[e]-a[e+n];else for(let e=n;e<t;e++)i[e]=r[e]-a[e-n];return{dpo:K(i)}},levels:()=>[{price:0,color:"#787b86",title:"Zero Line"}]},hl={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,l)=>{const t=e.length,o=il(l,"length",9),n=sl(e),r=L(n,o),a=B(n,o),i=new Array(t).fill(NaN);let s=0,c=0;for(let e=0;e<t;e++){const l=r[e]-a[e];if(!Number.isFinite(l)){s=0,c=0;continue}const t=.66*((n[e]-a[e])/Math.max(l,.001)-.5)+.67*s,o=t>.99?.999:t<-.99?-.999:t,p=.5*Math.log((1+o)/(1-o))+.5*c;i[e]=p,s=o,c=p}const p=new Array(t).fill(NaN);for(let e=1;e<t;e++)p[e]=i[e-1];return{fisher:K(i),trigger:K(p)}},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 bl(e){const l=e.length,t=new Array(l).fill(0);for(let o=0;o<l;o++){const l=o>0?t[o-1]:0;o>0&&e[o]===e[o-1]?t[o]=0:o>0&&e[o]>e[o-1]?t[o]=l<=0?1:l+1:t[o]=l>=0?-1:l-1}return t}const gl={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,l)=>{const t=e.length,o=e.map(e=>e.close),n=p(o,il(l,"lenrsi",3)),r=p(bl(o),il(l,"lenupdown",2)),a=U(F(o,1).slice(1),il(l,"lenroc",100)),i=new Array(t).fill(NaN);for(let e=0;e<a.length;e++)i[e+1]=a[e];const s=new Array(t);for(let e=0;e<t;e++)s[e]=(n[e]+r[e]+i[e])/3;return{crsi:K(s),bandHigh:new Array(t).fill(70),bandLow:new Array(t).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})},kl=[cl,pl,yl,ul,fl,dl,ml,hl,gl];function wl(e,l){return`${e}${Math.round(255*(1-l/100)).toString(16).padStart(2,"0")}`}const Cl=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},vl=e=>e.source??"close",Ml=(e,l,t)=>"string"==typeof e[l]?e[l]:t;function Al(e,l,t){const o=e.length,n=A(e,l),r=S(e,l),a=new Array(o),i=new Array(o);for(let e=0;e<o;e++){const l=t*r[e];a[e]=n[e]+l,i[e]=n[e]-l}return{middle:n,upper:a,lower:i}}function Nl(e,l){const t=e.length;if(0===l)return e.slice();const o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n+l;r>=0&&r<t&&(o[r]=e[n])}return o}const xl={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:(l,t)=>{const o=e(l,vl(t)),{upper:n,lower:r}=Al(o,Cl(t,"length",20),Cl(t,"mult",2)),a=new Array(o.length);for(let e=0;e<o.length;e++){const l=n[e]-r[e];a[e]=l>0?(o[e]-r[e])/l:NaN}return{percentB:K(a),bandHigh:new Array(l.length).fill(1),bandLow:new Array(l.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}]},Sl={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:(l,t)=>{const o=e(l,vl(t)),{middle:n,upper:r,lower:a}=Al(o,Cl(t,"length",20),Cl(t,"mult",2)),i=new Array(o.length);for(let e=0;e<o.length;e++)i[e]=0===n[e]?NaN:(r[e]-a[e])/n[e]*100;return{bandwidth:K(i),expansion:K(L(i,Cl(t,"expansionLength",125))),contraction:K(B(i,Cl(t,"contractionLength",125)))}}},Ll={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:l,values:t,settings:o})=>{const n=t.bbtrend?.[l-1],r="number"==typeof n&&Number.isFinite(n);return r&&e>0?wl(Ml(o,"posColor","#089981"),e>=n?25:50):r&&e<0?wl(Ml(o,"negColor","#f23645"),e>n?50:25):wl(Ml(o,"posColor","#089981"),50)}}],calc:(e,l)=>{const t=e.map(e=>e.close),o=Cl(l,"stdDevMult",2),n=Al(t,Cl(l,"shortLength",20),o),r=Al(t,Cl(l,"longLength",50),o),a=new Array(t.length);for(let e=0;e<t.length;e++){const l=Math.abs(n.lower[e]-r.lower[e])-Math.abs(n.upper[e]-r.upper[e]);a[e]=0===n.middle[e]?NaN:l/n.middle[e]*100}return{bbtrend:K(a)}},levels:()=>[{price:0,color:"#5a6b8c",title:"Zero line",dashed:!0}]},Bl={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,l)=>{const t=Cl(l,"length",14),o=e.map(e=>e.high),n=e.map(e=>e.low),r=H(y(o,n,e.map(e=>e.close)),t),a=L(o,t),i=B(n,t),s=Math.log10(t),c=new Array(e.length).fill(NaN);if(0!==s)for(let l=0;l<e.length;l++){const e=a[l]-i[l];if(!(e>0))continue;const t=r[l]/e;t>0&&(c[l]=100*Math.log10(t)/s)}return{chop:K(Nl(c,Cl(l,"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})},Kl={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,l)=>{const t=e.length,o=Cl(l,"per",1),n=new Array(t).fill(NaN);for(let l=1;l<t;l++){const t=e[l-1].close,o=e[l].close;n[l]=t>0&&o>0?Math.log(o/t):NaN}const r=S(n,Cl(l,"length",10)),a=o>0?Math.sqrt(365/o):NaN;return{hv:K(r.map(e=>100*e*a))}}},Wl={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,l)=>({adr:K(A(e.map(e=>e.high-e.low),Cl(l,"length",14)))})},Dl=4*Math.atan(1),Fl={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:l,settings:t})=>{const o=l.angle?.[e],n=(e,l)=>Ml(t,e,l);return null!=o&&Number.isFinite(o)?o>=5?n("turquoiseColor","#26c6da"):o>=3.57?n("darkGreenColor","#43a047"):o>=2.14?n("paleGreenColor","#a5d6a7"):o>=.71?n("limeColor","#009688"):o<=-5?n("darkRedColor","#d50000"):o<=-3.57?n("redColor","#e91e63"):o<=-2.14?n("orangeColor","#ff6d00"):o<=-.71?n("lightOrangeColor","#ffb74d"):n("yellowColor","#fdd835"):n("yellowColor","#fdd835")}}],calc:e=>{const l=e.length,t=L(e.map(e=>e.high),30),o=B(e.map(e=>e.high),30),n=W(e.map(e=>e.close),34),r=new Array(l).fill(NaN);for(let a=1;a<l;a++){const l=t[a]-o[a],i=(e[a].high+e[a].low+e[a].close)/3;if(!(l>0)||0===i)continue;const s=25/l*o[a],c=(n[a-1]-n[a])/i*s;if(!Number.isFinite(c))continue;const p=Math.sqrt(1+c*c),y=Math.round(180*Math.acos(1/p)/Dl);r[a]=c>0?-y:y}return{chopZone:new Array(l).fill(1),angle:K(r)}},range:()=>({min:0,max:1})},Rl={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,l)=>({chaikinVolatility:K(F(W(e.map(e=>e.high-e.low),Cl(l,"periods",10)),Cl(l,"rocLookback",10)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Ul={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,l)=>{const t=Cl(l,"deviations",1);return{stdDev:K(S(e.map(e=>e.close),Cl(l,"periods",5)).map(e=>e*t))}}},Tl={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,l)=>{const t=Math.max(3,Math.trunc(Cl(l,"length",14))),o=e.map(e=>e.close),n=(t+1)/2;let r=0;for(let e=0;e<t;e++)r+=(n-e-1)**2;const a=new Array(o.length).fill(NaN);for(let e=t-1;e<o.length;e++){let l=0;for(let n=0;n<t;n++)l+=o[e-n];const i=l/t;let s=0,c=0;for(let l=0;l<t;l++){const t=i-o[e-l];s+=t*t,c+=(n-l-1)*t}a[e]=Math.sqrt((s-c*c/r)/(t-2))}return{stdErr:K(a)}}},Pl=[xl,Sl,Ll,Bl,Kl,Wl,Fl,Rl,Ul,Tl],Ol=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Il=e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0;function Vl(e){const l=new Array(e.length);for(let t=0;t<e.length;t++){const o=e[t],n=o.close===o.high&&o.close===o.low||o.high===o.low;l[t]=n?0:(2*o.close-o.low-o.high)/(o.high-o.low)*Il(o)}return l}function Hl(e,l){const t=new Array(e.length).fill(NaN),o=e.findIndex(e=>Number.isFinite(e));if(o<0)return t;const n=W(e.slice(o),l);for(let e=0;e<n.length;e++)t[o+e]=n[e];return t}const El={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,l)=>{const t=Ol(l,"length",20),o=H(Vl(e),t),n=H(e.map(Il),t),r=new Array(e.length).fill(NaN);for(let l=0;l<e.length;l++)n[l]>0&&(r[l]=o[l]/n[l]);return{cmf:K(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},$l={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,l)=>{const t=E(Vl(e)),o=Hl(t,Ol(l,"short",3)),n=Hl(t,Ol(l,"long",10)),r=new Array(e.length);for(let l=0;l<e.length;l++)r[l]=o[l]-n[l];return{osc:K(r)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},ql={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,l)=>{const t=Ol(l,"divisor",1e4),o=D(e.map(e=>(e.high+e.low)/2)),n=new Array(e.length);for(let l=0;l<e.length;l++){const r=e[l],a=Il(r);n[l]=0===a?NaN:t*o[l]*(r.high-r.low)/a}return{eom:K(A(n,Ol(l,"length",14)))}}},zl={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,l)=>{const t=D(e.map(e=>e.close)),o=new Array(e.length);for(let l=0;l<e.length;l++)o[l]=t[l]*Il(e[l]);return{efi:K(Hl(o,Ol(l,"length",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Zl={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 l=new Array(e.length).fill(0);for(let t=1;t<e.length;t++){const o=e[t].close-e[t-1].close;l[t]=o>0?Il(e[t]):o<0?-Il(e[t]):0}return{net:K(l)}}},Yl=[El,$l,ql,zl,Zl],jl=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Gl=(e,l,t,o=1)=>Math.max(o,Math.round(jl(e,l,t))),Xl=(e,l="source")=>e[l]??"close";function Jl(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=W(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}const _l={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:(l,t)=>{const o=e(l,Xl(t)),n=o.length,r=Gl(t,"erLength",10),a=new Array(n).fill(NaN);if(n<=r)return{kama:K(a)};const i=D(o,1);for(let e=0;e<n;e++)i[e]=Number.isFinite(i[e])?Math.abs(i[e]):0;const s=H(i,r),c=D(o,r),p=2/(Gl(t,"fastLength",2)+1),y=2/(Gl(t,"slowLength",30)+1);let u=o[r];a[r]=u;for(let e=r+1;e<n;e++){const l=s[e],t=(Number.isFinite(l)&&0!==l?Math.abs(c[e])/l:0)*(p-y)+y;u+=t*t*(o[e]-u),a[e]=u}return{kama:K(a)}}},Ql={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:(l,o)=>{const n=l.length,r=Gl(o,"length",20),a=jl(o,"mult",2),i=e(l,Xl(o)),s=((e,l,t)=>{const o=e[l];return"boolean"==typeof o?o:t})(o,"exp",!0)?W(i,r):A(i,r),c=l.map(e=>e.high),p=l.map(e=>e.low),u=l.map(e=>e.close),f=((e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t})(o,"bandsStyle","Average True Range");let d;d="True Range"===f?y(c,p,u):"Range"===f?x(c.map((e,l)=>e-p[l]),r):t(c,p,u,Gl(o,"atrlength",10));const m=new Array(n).fill(NaN),h=new Array(n).fill(NaN);for(let e=0;e<n;e++){const l=d[e]*a;m[e]=s[e]+l,h[e]=s[e]-l}return{upper:K(m),basis:K(s),lower:K(h)}}},et={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:(l,t)=>({lsma:K($(e(l,Xl(t)),Gl(t,"length",25,2),Math.round(jl(t,"offset",0))))})},lt={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:l=>{const t=l.length,o=D(e(l,"hlc3"),1),n=new Array(t);for(let e=0;e<t;e++){const t=l[e].volume??0;n[e]=o[e]>=0?t:-t}const r=W(n,34),a=W(n,55),i=new Array(t).fill(NaN);for(let e=0;e<t;e++)i[e]=r[e]-a[e];return{kvo:K(i),signal:K(Jl(i,13))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},tt={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:(l,t)=>{const o=l.length,n=e(l,"close"),r=(e,l,o,r)=>A(F(n,Gl(t,e,l)),Gl(t,o,r)),a=r("roclen1",10,"smalen1",10),i=r("roclen2",15,"smalen2",10),s=r("roclen3",20,"smalen3",10),c=r("roclen4",30,"smalen4",15),p=new Array(o).fill(NaN);for(let e=0;e<o;e++)p[e]=a[e]+2*i[e]+3*s[e]+4*c[e];return{kst:K(p),signal:K(A(p,Gl(t,"siglen",9)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},ot={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:(l,t)=>{const o=e(l,"close"),n=o.length,r=Gl(t,"periods",14,2),a=new Array(n).fill(NaN),i=r*(r+1)/2,s=r*r*(r*r-1)/12;for(let e=r-1;e<n;e++){let l=0,t=0;for(let n=0;n<r;n++){const a=o[e-n];l+=a,t+=a*(r-n)}a[e]=(r*t-i*l)/s}return{slope:K(a)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},nt=[_l,Ql,et,lt,tt,ot],rt=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},at=(e,l,t,o=1)=>Math.max(o,Math.round(rt(e,l,t))),it=(e,l,t)=>Math.round(rt(e,l,t)),st=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},ct=(e,l,t)=>{const o=e[l];return"boolean"==typeof o?o:t},pt=(e,l="source")=>e[l]??"close",yt=e=>e.map(e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0);function ut(e,l){const t=e.length,o=new Array(t).fill(NaN);for(let n=0;n<t;n++){const r=n-l;r>=0&&r<t&&(o[n]=e[r])}return o}function ft(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=W(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}const dt={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:(l,t)=>{const o=e(l,"close"),n=A(o,at(t,"shortLength",9)),r=A(o,at(t,"longLength",21)),a=function(e,l){const t=e.length,o=new Array(t).fill(!1);for(let n=1;n<t;n++){const t=e[n-1],r=l[n-1],a=e[n],i=l[n];Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(a)&&Number.isFinite(i)&&(o[n]=a>i&&t<=r||a<i&&t>=r)}return o}(n,r);return{short:K(n),long:K(r),cross:n.map((e,l)=>a[l]?e:null)}}},mt={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:(l,t)=>{const o=e(l,"close"),n=at(t,"length",14),r=W(o,n),a=new Array(o.length).fill(NaN);let i=NaN;for(let e=0;e<o.length;e++){if(Number.isFinite(i)&&0!==i){const l=n*Math.pow(o[e]/i,4),t=i+(o[e]-i)/l;a[e]=Number.isFinite(t)?t:r[e]}else a[e]=r[e];i=a[e]}return{mg:K(a)}}},ht={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:(l,o)=>{const n=e(l,pt(o)),r=at(o,"length",3),a=rt(o,"atrMult",2),i=Z(n,r,50),s=t(l.map(e=>e.high),l.map(e=>e.low),l.map(e=>e.close),at(o,"atrLength",14));return{median:K(i),upper:K(i.map((e,l)=>e+a*s[l])),lower:K(i.map((e,l)=>e-a*s[l])),medianEma:K(ft(i,r))}}},bt=[{label:"SMA",value:"SMA"},{label:"EMA",value:"EMA"},{label:"SMMA (RMA)",value:"SMMA (RMA)"},{label:"WMA",value:"WMA"},{label:"VWMA",value:"VWMA"}];function gt(e,l,t,o){switch(e){case"EMA":return W(l,o);case"SMMA (RMA)":return x(l,o);case"WMA":return N(l,o);case"VWMA":return P(l,t,o);default:return A(l,o)}}const kt=[{lane:1,length:20,color:"#f6c309"},{lane:2,length:50,color:"#fb9800"},{lane:3,length:100,color:"#fb6500"},{lane:4,length:200,color:"#f60c0c"}],wt={id:"ma-ribbon",name:"Moving Average Ribbon",category:"Trend",placement:"onchart",inputs:kt.flatMap(e=>function(e,l,t){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:bt,group:o},{key:`ma${e}Source`,type:"source",label:"Source",default:"close",group:o},{key:`ma${e}Length`,type:"number",label:"Length",default:l,min:1,max:1e3,step:1,group:o},{key:`ma${e}Color`,type:"color",label:"Color",default:t,group:o}]}(e.lane,e.length,e.color)),plots:kt.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:(l,t)=>{const o=yt(l),n={};for(const{lane:r,length:a}of kt){if(!ct(t,`showMa${r}`,!0)){n[`ma${r}`]=new Array(l.length).fill(null);continue}const i=e(l,pt(t,`ma${r}Source`));n[`ma${r}`]=K(gt(st(t,`ma${r}Type`,"SMA"),i,o,at(t,`ma${r}Length`,a)))}return n}},Ct={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:(l,t)=>{const o=e(l,"close"),n=at(t,"length",9),r=W(o,n),a=ft(r,n),i=ft(a,n);return{tema:K(r.map((e,l)=>3*(e-a[l])+i[l]))}}},vt={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:(l,t)=>{const n=e(l,pt(t)),i="continuous"!==t.anchor?o(l.map(e=>e.time),(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(t)):null,s=new Array(l.length).fill(NaN);let c=0,p=0;for(let e=0;e<l.length;e++)null!==i&&i[e]&&(c=0,p=0),c+=n[e],p+=1,s[e]=c/p;return{twap:K(ut(s,it(t,"offset",0)))}}},Mt={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:(l,t)=>({vwma:K(ut(P(e(l,pt(t)),yt(l),at(t,"length",20)),it(t,"offset",0)))})},At={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:(l,t)=>{const o=e(l,"hl2");return{jaw:K(ut(x(o,at(t,"jawLength",13)),it(t,"jawOffset",8))),teeth:K(ut(x(o,at(t,"teethLength",8)),it(t,"teethOffset",5))),lips:K(ut(x(o,at(t,"lipsLength",5)),it(t,"lipsOffset",3)))}}},Nt={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:(l,t)=>({smma:K(x(e(l,pt(t)),at(t,"length",7)))})};function xt(e,l,t){const o=ft(e,l);if(0===t)return o;const n=ft(o,l);return o.map((e,l)=>e*(1+t)-n[l]*t)}const St={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:l,values:t,settings:o})=>{if(!ct(o,"highlightMovements",!0))return st(o,"neutralColor","#6d1e7f");const n=t.t3?.[l-1];return"number"==typeof n&&Number.isFinite(n)&&e>n?st(o,"upColor","#26a69a"):st(o,"downColor","#ff5252")}}],calc:(l,t)=>{const o=e(l,pt(t)),n=at(t,"length",5),r=rt(t,"factor",.7),a=xt(o,n,r),i=xt(a,n,r);return{t3:K(xt(i,n,r))}}},Lt=[dt,mt,ht,wt,Ct,vt,Mt,At,Nt,St],Bt=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),Kt=e=>e.source??"close",Wt=(e,l,t)=>"string"==typeof e[l]?e[l]:t;function Dt(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=W(e.slice(n),l);for(let e=0;e<r.length;e++)o[n+e]=r[e];return o}function Ft(e,l,t){const o=D(e),n=e=>Dt(Dt(e,t),l),r=n(o),a=n(o.map(e=>Math.abs(e)));return r.map((e,l)=>e/a[l]*100)}const Rt={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:(l,t)=>({mom:K(D(e(l,Kt(t)),Bt(t,"len",10)))})},Ut={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:(l,t)=>({roc:K(F(e(l,Kt(t)),Bt(t,"length",9)))}),levels:()=>[{price:0,color:"#787b86",title:"Zero Line",dashed:!0}]};function Tt(e,l,t){return"SMA"===t?A(e,l):Dt(e,l)}const Pt={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:l,values:t,settings:o})=>{const n=t.hist?.[l-1],r=(e,l)=>"string"==typeof o[e]?o[e]:l,a="number"==typeof n&&Number.isFinite(n)&&e>n;return e>=0?a?r("histUpColor","#26a69a"):r("histUpFadeColor","#b2dfdb"):a?r("histDownFadeColor","#ffcdd2"):r("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:(l,t)=>{const o=e(l,Kt(t)),n=Wt(t,"oscType","EMA"),r=Tt(o,Bt(t,"fastLength",12),n),a=Tt(o,Bt(t,"slowLength",26),n),i=r.map((e,l)=>0===a[l]?NaN:100*(e-a[l])/a[l]),s=Tt(i,Bt(t,"signalLength",9),Wt(t,"sigType","EMA"));return{hist:K(i.map((e,l)=>e-s[l])),ppo:K(i),signal:K(s)}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Ot={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,l)=>{const t=Bt(l,"length",18);return{trix:K(D(Dt(Dt(Dt(e.map(e=>e.close>0?Math.log(e.close):NaN),t),t),t)).map(e=>1e4*e))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},It={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,l)=>{const t=Ft(e.map(e=>e.close),Bt(l,"short",13),Bt(l,"long",25));return{tsi:K(t),signal:K(Dt(t,Bt(l,"signal",13)))}},levels:()=>[{price:0,color:"#787b86",title:"Zero",dashed:!0}]},Vt={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,l)=>{const t=Ft(e.map(e=>e.close),Bt(l,"shortlen",5),Bt(l,"longlen",20));return{erg:K(t),sig:K(Dt(t,Bt(l,"siglen",5)))}}},Ht={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,l)=>{const t=Ft(e.map(e=>e.close),Bt(l,"shortlen",5),Bt(l,"longlen",20)),o=Dt(t,Bt(l,"siglen",5));return{osc:K(t.map((e,l)=>e-o[l]))}}},Et={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,l)=>{const t=Bt(l,"lengthK",10),o=Bt(l,"lengthD",3),n=L(e.map(e=>e.high),t),r=B(e.map(e=>e.low),t),a=n.map((e,l)=>e-r[l]),i=e=>Dt(Dt(e,o),o),s=i(e.map((e,l)=>e.close-(n[l]+r[l])/2)),c=i(a),p=s.map((e,l)=>0===c[l]?NaN:e/c[l]*200);return{smi:K(p),ema:K(Dt(p,Bt(l,"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}]},$t=[Rt,Ut,Pt,Ot,It,Vt,Ht,Et],qt=(e,l,t)=>Math.max(1,Math.floor(((e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t})(e,l,t))),zt=(e,l,t)=>"string"==typeof e[l]?e[l]:t,Zt=e=>"number"==typeof e.volume&&Number.isFinite(e.volume)?e.volume:0;function Yt(e,l,t){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=t(e.slice(n,r),l);for(let e=0;e<a.length;e++)o[n+e]=a[e];n=r}return o}const jt=e=>"SMA"===e?A:W;function Gt(e,l,t,o){return{id:e,name:l,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:t,default:"#2962ff"},{key:"emaColor",type:"color",label:`${t}-based EMA`,default:"#ff9800"}],plots:[{key:e,type:"line",title:t,colorKey:"color",style:{lineWidth:1.5}},{key:"ema",type:"line",title:`${t}-based EMA`,colorKey:"emaColor",style:{lineWidth:1.5}}],calc:(l,t)=>{const n=function(e,l){const t=new Array(e.length);let o=1;for(let n=0;n<e.length;n++){if(n>0){const t=e[n-1].close;("falling"===l?Zt(e[n])<Zt(e[n-1]):Zt(e[n])>Zt(e[n-1]))&&0!==t&&Number.isFinite(t)&&(o*=e[n].close/t)}t[n]=1e3*o}return t}(l,o);return{[e]:K(n),ema:K(Yt(n,qt(t,"maLength",255),W))}}}}const Xt=Gt("nvi","Negative Volume Index","NVI","falling"),Jt=Gt("pvi","Positive Volume Index","PVI","rising"),_t={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 l=new Array(e.length).fill(NaN);for(let t=1;t<e.length;t++){const o=e[t-1].close;0!==o&&Number.isFinite(o)&&(l[t]=(e[t].close-o)/o*Zt(e[t]))}return{pvt:K(E(l))}}},Qt={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:l,values:t,settings:o})=>{const n=t.hist?.[l-1],r=null!=n&&Number.isFinite(n)&&e>n,a=(e,l)=>"string"==typeof o[e]?o[e]:l;return e>=0?r?a("histUpColor","#26a69a"):a("histUpFadeColor","#b2dfdb"):r?a("histDownFadeColor","#ffcdd2"):a("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,l)=>{const t=e.length,o=e.map(Zt),n=jt(zt(l,"oscType","EMA")),r=n(o,qt(l,"fastLength",12)),a=n(o,qt(l,"slowLength",26)),i=new Array(t).fill(NaN);for(let e=0;e<t;e++)0!==a[e]&&(i[e]=100*(r[e]-a[e])/a[e]);const s=Yt(i,qt(l,"signalLength",9),jt(zt(l,"sigType","EMA"))),c=new Array(t);for(let e=0;e<t;e++)c[e]=i[e]-s[e];return{hist:K(c),pvo:K(i),signal:K(s)}},levels:()=>[{price:0,color:"#787b8680",title:"Zero"}]},eo={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,l)=>{const t=e.length,o=W(e.map(e=>e.high-e.low),9),n=Yt(o,9,W),r=new Array(t).fill(NaN);for(let e=0;e<t;e++)0!==n[e]&&(r[e]=o[e]/n[e]);return{mi:K(Yt(r,qt(l,"length",10),H))}}},lo={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:(l,t)=>{const o=l.length,n=qt(t,"length",14),r=e(l,(e=>e.source??"close")(t)),a=L(r,n),i=new Array(o).fill(NaN);for(let e=0;e<o;e++){const l=a[e];if(!Number.isFinite(l)||0===l)continue;const t=100*(r[e]-l)/l;i[e]=t*t}const s=A(i,n),c=new Array(o);for(let e=0;e<o;e++)c[e]=Math.sqrt(s[e]);return{ui:K(c),zero:c.map(e=>Number.isFinite(e)?0:null)}},levels:()=>[{price:0,color:"#2196f3",title:"Zero"}]},to=[Xt,Jt,_t,Qt,eo,lo],oo=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},no=(e,l,t,o=1)=>Math.max(o,Math.round(oo(e,l,t))),ro=(e,l,t)=>Math.round(oo(e,l,t)),ao=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},io=(e,l="source")=>e[l]??"close";function so(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n),n);for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}function co(e,l){const t=e.length,o=new Array(t).fill(NaN);if(l<=0)return o;const n=A(e,l),r=2/(l+1);let a=NaN;for(let l=0;l<t;l++){if(Number.isFinite(a)){const t=e[l];a=Number.isFinite(t)?t*r+a*(1-r):NaN}else a=n[l];o[l]=a}return o}function po(e,l){if(0===l)return e.slice();const t=e.length,o=new Array(t).fill(null);for(let n=0;n<t;n++){const r=n+l;r>=0&&r<t&&(o[r]=e[n])}return o}const yo={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:(l,t)=>{const o=no(t,"lengthStoch",14),n=so(p(e(l,io(t)),no(t,"lengthRSI",14)),e=>z(e,e,e,o)),r=so(n,e=>A(e,no(t,"smoothK",3))),a=so(r,e=>A(e,no(t,"smoothD",3)));return{k:K(r),d:K(a),bandHigh:new Array(l.length).fill(80),bandLow:new Array(l.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})},uo={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:(l,t)=>{const o=no(t,"length",14),n=e(l,io(t)),r=L(l.map(e=>e.high),o),a=B(l.map(e=>e.low),o),i=n.map((e,l)=>{const t=r[l]-a[l];return 0===t?NaN:100*(e-r[l])/t});return{percentR:K(i),bandHigh:new Array(l.length).fill(-20),bandLow:new Array(l.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})},fo={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,l)=>{const t=e.length,o=Math.max(0,t-1),n=new Array(o),r=new Array(o);for(let l=1;l<t;l++){const t=e[l-1].close,o=Math.max(e[l].high,t),a=Math.min(e[l].low,t);n[l-1]=e[l].close-a,r[l-1]=o-a}const a=e=>{const l=H(n,e),t=H(r,e);return l.map((e,l)=>0===t[l]?NaN:e/t[l])},i=a(no(l,"length1",7)),s=a(no(l,"length2",14)),c=a(no(l,"length3",28)),p=new Array(t).fill(NaN);for(let e=0;e<o;e++)p[e+1]=100*(4*i[e]+2*s[e]+c[e])/7;return{uo:K(p)}}},mo={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,l)=>{const t=no(l,"length",10),o=q(e.map(e=>e.close-e.open)),n=q(e.map(e=>e.high-e.low)),r=so(o,e=>H(e,t)),a=so(n,e=>H(e,t)),i=r.map((e,l)=>0===a[l]?NaN:e/a[l]),s=so(i,e=>q(e)),c=ro(l,"offset",0);return{rvgi:po(K(i),c),signal:po(K(s),c)}}};const ho={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"},{key:"maType",type:"select",label:"Type",default:"SMA",options:[{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"}],group:"Smoothing"},{key:"maLength",type:"number",label:"Length",default:14,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:"RVI-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"}],plots:[{key:"rvi",type:"line",title:"RVI",colorKey:"color",style:{lineWidth:1.5}},{key:"ma",type:"line",title:"RVI-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}}],fills:[{between:["bbUpper","bbLower"],colorUpKey:"bbUpperColor",colorDownKey:"bbUpperColor",opacity:.1},{between:["bandHigh","bandLow"],colorUpKey:"fillColor",colorDownKey:"fillColor",opacity:.1}],calc:(e,l)=>{const t=e.length,o=e.map(e=>e.close),n=S(o,no(l,"length",10)),r=D(o),a=new Array(t),i=new Array(t);for(let e=0;e<t;e++){const l=r[e];a[e]=Number.isFinite(l)&&l<=0?0:n[e],i[e]=Number.isFinite(l)&&l>0?0:n[e]}const s=co(a,14),c=co(i,14),p=new Array(t).fill(NaN);for(let e=0;e<t;e++){const l=s[e]+c[e];p[e]=0===l?NaN:s[e]/l*100}const y=ao(l,"maType","SMA"),u=no(l,"maLength",14),f=oo(l,"bbMult",2),d="SMA + Bollinger Bands"===y,m="None"===y?new Array(t).fill(NaN):function(e,l,t,o){switch(e){case"EMA":return co(l,o);case"SMMA (RMA)":return so(l,e=>x(e,o));case"WMA":return so(l,e=>N(e,o));case"VWMA":return so(l,(e,l)=>P(e,t.slice(l),o));default:return so(l,e=>A(e,o))}}(y,p,e.map(e=>e.volume??0),u),h=d?so(p,e=>S(e,u)).map(e=>e*f):new Array(t).fill(NaN),b=ro(l,"offset",0);return{rvi:po(K(p),b),ma:K(m),bbUpper:K(m.map((e,l)=>e+h[l])),bbLower:K(m.map((e,l)=>e-h[l])),bandHigh:new Array(t).fill(80),bandLow:new Array(t).fill(20)}},levels:()=>[{price:80,color:"#787b86",title:"Upper Band"},{price:50,color:"#5a6b8c",title:"Middle Band"},{price:20,color:"#787b86",title:"Lower Band"}]},bo={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:l,settings:t})=>{const o=ao(t,"upColor","#009688"),n=ao(t,"downColor","#f44336"),r=t=>{const o=l.hist?.[e-t];return"number"==typeof o&&Number.isFinite(o)?o:null};let a=!0,i=!0;for(let e=1;e<=5;e+=1){const l=r(e);(null===l||l<=0)&&(a=!1),(null===l||l>=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,l)=>{const t=e.map(e=>e.close),o=j(t,no(l,"cciTurboLength",6)),n=j(t,no(l,"cci14Length",14));return{hist:K(n),turbo:K(o),cci14:K(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}]},go=[{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}],ko={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:(l,t)=>{const o=l.length,n=e(l,io(t)),r=new Array(o).fill(0);for(const e of go){const l=so(F(n,e.roc),l=>A(l,e.smooth));for(let t=0;t<o;t++)r[t]+=e.weight*l[t]}const a=so(r,e=>A(e,no(t,"length1",100))),i=so(a,e=>A(e,no(t,"length2",100)));return{specialK:K(r),signal:K(i)}},levels:()=>[{price:0,color:"#787b86",title:"Zero"}]},wo=[yo,uo,fo,mo,ho,bo,ko],Co=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},vo=(e,l,t)=>Math.max(1,Math.floor(Co(e,l,t))),Mo=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},Ao=(e,l="source")=>e[l]??"close",No=(e,l)=>!1!==e[l];function xo(e,l){const t=new Array(e.length).fill(NaN);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}function So(e,l){const t=new Array(e.length).fill(!1);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}const Lo={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,l)=>{const t=e.length,o=vo(l,"length",14),n=new Array(t).fill(NaN),r=new Array(t).fill(NaN);if(0===t)return{vip:K(n),vim:K(r)};const a=e.map(e=>e.high),i=e.map(e=>e.low),s=e.map(e=>e.close),c=new Array(t-1),p=new Array(t-1);for(let e=1;e<t;e++)c[e-1]=Math.abs(a[e]-i[e-1]),p[e-1]=Math.abs(i[e]-a[e-1]);const u=H(c,o),f=H(p,o),d=H(y(a,i,s),o);for(let e=1;e<t;e++)n[e]=u[e-1]/d[e],r[e]=f[e-1]/d[e];return{vip:K(n),vim:K(r)}}},Bo={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:(l,o)=>{const n=l.length,r=new Array(n).fill(null),a=new Array(n).fill(null);if(0===n)return{up:r,down:a};const i=e(l,Ao(o)),s=Co(o,"factor",2),c=l.map(e=>e.high),p=l.map(e=>e.low),u=l.map(e=>e.close),f=t(c,p,u,vo(o,"length",20)),d=y(c,p,u);let m=i[0],h=i[0],b=!0,g=NaN;for(let e=0;e<n;e++){const l=i[e],t=Number.isFinite(f[e])?f[e]*s:d[e];m=Math.max(m,l),h=Math.min(h,l);let o=b?Math.max(g,m-t):Math.min(g,h+t);Number.isFinite(o)||(o=l);const n=l-o>=0;e>0&&n!==b&&(m=l,h=l,o=n?m-t:h+t),b=n,g=o,Number.isFinite(o)&&(n?r[e]=o:a[e]=o)}return{up:r,down:a}}},Ko={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,l)=>{const t=e.map((e,l)=>l);return{tsi:K(Y(e.map(e=>e.close),t,vo(l,"length",14)))}},levels:e=>[{price:1,color:Mo(e,"bullishColor","#089981"),title:"TSI Bullish Band"},{price:0,color:"#787b86",title:"TSI Middle Band",dashed:!0},{price:-1,color:Mo(e,"bearishColor","#f23645"),title:"TSI Bearish Band"}],range:()=>({min:-1,max:1})};function Wo(e,l,t,o){const n=e[l];if(!Number.isFinite(n))return!1;const r=l=>l>=0&&l<e.length&&Number.isFinite(e[l])&&(o?e[l]<n:e[l]>n),a=l=>l>=0&&l<e.length&&Number.isFinite(e[l])&&(o?e[l]<=n:e[l]>=n);for(let e=1;e<=t;e++)if(!r(l+e))return!1;for(let e=0;e<=4;e++){let o=!0;for(let t=1;t<=e&&o;t++)a(l-t)||(o=!1);for(let n=1;n<=t&&o;n++)r(l-e-n)||(o=!1);if(o)return!0}return!1}const Do={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,l)=>{const t=e.length,o=new Array(t).fill(null),n=new Array(t).fill(null),r=new Array(t).fill(null),a={fractals:o,upFractal:n,downFractal:r};if(0===t)return a;const i=Math.max(2,vo(l,"periods",2)),s=e.map(e=>e.high),c=e.map(e=>e.low),p=No(l,"showUp"),y=No(l,"showDown");for(let e=0;e<t;e++)p&&Wo(s,e,i,!0)&&(n[e]=s[e]),y&&Wo(c,e,i,!1)&&(r[e]=c[e]);return a},markers:({bars:e,values:l,settings:t})=>{const o=l.upFractal??[],n=l.downFractal??[],r=Mo(t,"upColor","#009688"),a=Mo(t,"downColor","#f44336"),i=[];for(let l=0;l<e.length;l++){const t=o[l];null!=t&&i.push({time:e[l].time,position:"atPrice",price:t,shape:"triangleUp",size:"small",color:r});const s=n[l];null!=s&&i.push({time:e[l].time,position:"atPrice",price:s,shape:"triangleDown",size:"small",color:a})}return i}},Fo={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:(l,t)=>{const o=l.length,n=new Array(o).fill(null),r=new Array(o).fill(null),a=new Array(o).fill(null),i=new Array(o).fill(null),s=p(e(l,Ao(t)),vo(t,"length",14)),c={rsi:K(s),bull:n,hiddenBull:r,bear:a,hiddenBear:i};if(0===o)return c;const y=vo(t,"lbR",5),u=vo(t,"lbL",5),f=Co(t,"rangeLower",5),d=Co(t,"rangeUpper",60),m=!1!==t.plotBull,h=!0===t.plotHiddenBull,b=!1!==t.plotBear,g=!0===t.plotHiddenBear,k=X(s,u,y).map(e=>Number.isFinite(e)),w=G(s,u,y).map(e=>Number.isFinite(e)),C=xo(s,y),v=xo(l.map(e=>e.low),y),M=xo(l.map(e=>e.high),y),A=_(So(k,1)),N=_(So(w,1)),x=Q(k,C,1),S=Q(k,v,1),L=Q(w,C,1),B=Q(w,M,1);for(let e=0;e<o;e++){const l=e-y;if(!(l<0)){if(k[e]){const t=f<=A[e]&&A[e]<=d,o=C[e]>x[e]&&t,a=C[e]<x[e]&&t;m&&o&&v[e]<S[e]&&(n[l]=C[e]),h&&a&&v[e]>S[e]&&(r[l]=C[e])}if(w[e]){const t=f<=N[e]&&N[e]<=d,o=C[e]<L[e]&&t,n=C[e]>L[e]&&t;b&&o&&M[e]>B[e]&&(a[l]=C[e]),g&&n&&M[e]<B[e]&&(i[l]=C[e])}}}return c},markers:({bars:e,values:l,settings:t})=>{const o=Mo(t,"bullColor","#4caf50"),n=Mo(t,"bearColor","#ff5252"),r=[{col:l.bull,shape:"labelUp",text:"Bull",color:o},{col:l.hiddenBull,shape:"labelUp",text:"H Bull",color:o},{col:l.bear,shape:"labelDown",text:"Bear",color:n},{col:l.hiddenBear,shape:"labelDown",text:"H Bear",color:n}],a=[];for(let l=0;l<e.length;l++)for(const t of r){const o=t.col?.[l];null!=o&&a.push({time:e[l].time,position:"atPrice",price:o,shape:t.shape,size:"small",color:t.color,text:t.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})},Ro={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 l=e.length,t=new Array(l).fill(NaN),o=new Array(l).fill(NaN),n=new Array(l).fill(NaN),r=new Array(l).fill(NaN),a=new Array(l).fill(NaN);let i=0;for(let s=0;s<l;s++){const l=e[s],c=Math.max(l.open,l.close),p=Math.min(l.open,l.close),y=e[i].high,u=e[i].low,f=s-i,d=f>1&&f<=250;d&&c>y&&(n[s]=y),d&&p<u&&(r[s]=u);const m=i;i=s>1&&p>=u&&p<=y&&c>=u&&c<=y?i:s,i===m&&(t[s]=e[i].high,o[s]=e[i].low);const h=s-i;h>0&&(a[s]=h)}return{rangeHigh:K(t),rangeLow:K(o),breakUp:K(n),breakDown:K(r),insideAge:K(a)}},markers:({bars:e,values:l,settings:t})=>{const o=[];if(!No(t,"markbreakout"))return o;const n=l.breakUp??[],r=l.breakDown??[],a=Mo(t,"bullBreakColor","#00c853"),i=Mo(t,"bearBreakColor","#ff5252");for(let l=0;l<e.length;l++)null!==n[l]&&void 0!==n[l]&&o.push({time:e[l].time,position:"belowBar",shape:"triangleUp",size:"small",color:a}),null!==r[l]&&void 0!==r[l]&&o.push({time:e[l].time,position:"aboveBar",shape:"triangleDown",size:"small",color:i});return o},barColors:({bars:e,values:l,settings:t})=>{const o=l.insideAge??[],n=Mo(t,"insideColor","#000000"),r=No(t,"colorinside");return e.map((e,l)=>r&&null!==o[l]&&void 0!==o[l]?n:null)}},Uo=[Lo,Bo,Ko,Do,Fo,Ro],To=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},Po=(e,l,t)=>"string"==typeof e[l]?e[l]:t,Oo=(e,l,t)=>"boolean"==typeof e[l]?e[l]:t,Io=e=>new Array(e).fill(NaN),Vo=86400,Ho=e=>Math.floor(((e=>Math.floor((e+c)/Vo))(e)-4)/7);function Eo(e,l,t){const a=e.map(e=>e.time);return"daily"===l?o(a,t):n(a,function(e,l){return l!==r?"weekly"===e?(e,t)=>u(e,t,l):(e,t)=>f(e,t,l):"weekly"===e?(e,l)=>Ho(e)!==Ho(l):(e,l)=>{const t=s(e),o=s(l);return t.year!==o.year||t.month!==o.month}}(l,t))}function $o(e){const l=function(e){if(e.length<2)return 0;const l=[];for(let t=1;t<e.length;t++){const o=e[t].time-e[t-1].time;o>0&&l.push(o)}return 0===l.length?0:(l.sort((e,l)=>e-l),l[Math.floor(l.length/2)])}(e);return l<=0||l<Vo?"daily":l<604800?"weekly":"monthly"}const qo={daily:"d",weekly:"w",monthly:"m"},zo={daily:"Daily",weekly:"Weekly",monthly:"Monthly"},Zo=(e,l,t,o)=>({key:e,type:"line",title:l,colorKey:t,style:{markersOnly:!0,markerRadius:o}});function Yo(e){const l=qo[e],t=zo[e],o=`${l}SupportColor`,n=`${l}ResistanceColor`,r=`${l}CprColor`;return[{key:`${l}Pivot`,type:"line",title:`${t} Pivot`,colorKey:`${l}PivotColor`,style:{lineWidth:2}},Zo(`${l}S1`,`${t} S1`,o,1),Zo(`${l}S2`,`${t} S2`,o,1),Zo(`${l}S3`,`${t} S3`,o,1),Zo(`${l}R1`,`${t} R1`,n,1),Zo(`${l}R2`,`${t} R2`,n,1),Zo(`${l}R3`,`${t} R3`,n,1),Zo(`${l}Bc`,`${t} Bottom Pivot`,r,2),Zo(`${l}Tc`,`${t} Top Pivot`,r,2)]}function jo(e){const l=qo[e],t=zo[e];return[{key:`${l}PivotColor`,type:"color",label:"Pivot",default:"#ffeb3b",group:t},{key:`${l}SupportColor`,type:"color",label:"Support",default:"#4caf50",group:t},{key:`${l}ResistanceColor`,type:"color",label:"Resistance",default:"#ff5252",group:t},{key:`${l}CprColor`,type:"color",label:"CPR",default:"#ff9800",group:t},{key:`${l}FillColor`,type:"color",label:"CPR Fill",default:"#f47676",group:t}]}function Go(e,l,t,o,n){const r=e.length,a=Io(r),i=Io(r),s=Io(r),c=Io(r),p=Io(r),y=Io(r),u=Io(r),f=Io(r),d=Io(r);if(t){const t=Eo(e,l,n);let m=NaN,h=NaN,b=NaN,g=NaN,k=NaN,w=NaN;for(let l=0;l<r;l++){t[l]&&(m=g,h=k,b=w,g=NaN,k=NaN);const n=e[l];if(g=Number.isFinite(g)?Math.max(g,n.high):n.high,k=Number.isFinite(k)?Math.min(k,n.low):n.low,w=n.close,!Number.isFinite(m)||!Number.isFinite(h)||!Number.isFinite(b))continue;const r=(m+h+b)/3,C=m-h,v=2*r-m,M=2*r-h,A=(m+h)/2;o.pivot&&(a[l]=r),o.support&&(o.s1r1&&(i[l]=v),s[l]=r-C,c[l]=v-C),o.resistance&&(o.s1r1&&(p[l]=M),y[l]=r+C,u[l]=M+C),o.cpr&&(f[l]=A,d[l]=2*r-A)}}const m=qo[l];return{[`${m}Pivot`]:K(a),[`${m}S1`]:K(i),[`${m}S2`]:K(s),[`${m}S3`]:K(c),[`${m}R1`]:K(p),[`${m}R2`]:K(y),[`${m}R3`]:K(u),[`${m}Bc`]:K(f),[`${m}Tc`]:K(d)}}const Xo={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},...jo("daily"),...jo("weekly"),...jo("monthly")],plots:[...Yo("daily"),...Yo("weekly"),...Yo("monthly")],fills:["daily","weekly","monthly"].map(e=>{const l=qo[e];return{between:[`${l}Tc`,`${l}Bc`],colorUpKey:`${l}FillColor`,colorDownKey:`${l}FillColor`,opacity:.48}}),calc:(e,l)=>{const t="manual"===l.pivotMode,o=$o(e),n={pivot:Oo(l,"displaypivots",!0),support:Oo(l,"displaysupport",!0),resistance:Oo(l,"displayresistance",!0),cpr:Oo(l,"displaycpr",!0),s1r1:Oo(l,"displayS1R1",!1)},i=t?{daily:Oo(l,"showDaily",!0),weekly:Oo(l,"showWeekly",!1),monthly:Oo(l,"showMonthly",!1)}:{daily:"daily"===o,weekly:"weekly"===o,monthly:"monthly"===o},s=(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(l);return{...Go(e,"daily",i.daily,n,s),...Go(e,"weekly",i.weekly,n,s),...Go(e,"monthly",i.monthly,n,s)}}};const Jo={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:l,settings:t})=>{if(!1===t.showsignalsk)return[];const o=l.buySignal??[],n=l.sellSignal??[],r=[];for(let l=0;l<e.length;l++){const a=o[l];if(null!=a){r.push({time:e[l].time,position:"atPrice",price:a,shape:"labelUp",size:"tiny",color:Po(t,"buyColor","#0022fc"),text:"BUY"});continue}const i=n[l];null!=i&&r.push({time:e[l].time,position:"atPrice",price:i,shape:"labelDown",size:"tiny",color:Po(t,"sellColor","#880e4f"),text:"SELL"})}return r},calc:(l,t)=>{const o=l.length,n=Io(o),r=Io(o),a=Io(o),i=Io(o);if(0===o)return{alphatrend:[],lagged:[],buySignal:[],sellSignal:[]};const s=Math.max(1,Math.round(To(t,"AP",14))),c=To(t,"coeff",1),u=!0===t.novolumedata,f=!1!==t.showsignalsk,d=l.map(e=>e.high),m=l.map(e=>e.low),h=l.map(e=>e.close),b=A(y(d,m,h),s),g=u?p(e(l,((e,l="source")=>e[l]??"close")(t)),s):function(e,l,t){const o=e.length,n=Io(o);if(t<=0||0===o)return n;const r=new Array(o).fill(0),a=new Array(o).fill(0);for(let t=1;t<o;t++){const o=e[t]*l[t];e[t]>e[t-1]?r[t]=o:e[t]<e[t-1]&&(a[t]=o)}const i=H(r,t),s=H(a,t);for(let e=t;e<o;e++)n[e]=0===s[e]?100:100-100/(1+i[e]/s[e]);return n}(l.map(e=>(e.high+e.low+e.close)/3),l.map(e=>e.volume??0),s);for(let e=0;e<o;e++){const t=e>0&&Number.isFinite(n[e-1])?n[e-1]:0;if(!Number.isFinite(b[e])||!Number.isFinite(g[e]))continue;const o=b[e]*c;n[e]=g[e]>=50?Math.max(l[e].low-o,t):Math.min(l[e].high+o,t)}for(let e=2;e<o;e++)r[e]=n[e-2];const k=new Array(o).fill(!1),w=new Array(o).fill(!1);for(let e=1;e<o;e++){const l=n[e],t=r[e],o=n[e-1],a=r[e-1];Number.isFinite(l)&&Number.isFinite(t)&&Number.isFinite(o)&&Number.isFinite(a)&&(l>t&&o<=a?k[e]=!0:l<t&&o>=a&&(w[e]=!0))}if(f){const e=k.map((e,l)=>l>0&&k[l-1]),l=w.map((e,l)=>l>0&&w[l-1]),t=_(k),n=_(w),s=_(e),c=_(l);for(let e=0;e<o;e++)k[e]&&s[e]>n[e]?a[e]=.9999*r[e]:w[e]&&c[e]>t[e]&&(i[e]=1.0001*r[e])}return{alphatrend:K(n),lagged:K(r),buySignal:K(a),sellSignal:K(i)}}},_o={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,l)=>{const t=e.map(e=>e.high-e.low);return!0!==l.showAverage?{range:K(t),avgRange:new Array(e.length).fill(null)}:{range:K(t),avgRange:K(A(t,Math.max(1,Math.round(To(l,"avgLength",3)))))}}},Qo=[Xo,Jo,_o],en=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},ln=(e,l,t)=>Math.max(1,Math.floor(en(e,l,t))),tn=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},on=(e,l)=>new Array(e).fill(l),nn=e=>/^#[0-9a-f]{6}$/i.test(e)?`${e}99`:e;function rn(e,l){const t=e.length,o=new Array(t).fill(NaN);let n=0;for(;n<t&&!Number.isFinite(e[n]);)n+=1;if(n>=t)return o;const r=l(e.slice(n));for(let e=0;e<r.length&&n+e<t;e++)o[n+e]=r[e];return o}function an(e,l){const t=new Array(e.length).fill(NaN);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}function sn(e,l){const t=new Array(e.length).fill(!1);for(let o=l;o<e.length;o++)t[o]=e[o-l];return t}const cn={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:l})=>{const t=(e,t)=>{const o=l[e];return"string"==typeof o&&""!==o?o:t};return e>=0?t("momUpColor","#008080"):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:(l,t)=>{const o=l.length,n=ln(t,"n1",10),r=ln(t,"n2",21),a=ln(t,"sigLen",4),i=en(t,"obLevel1",60),s=en(t,"obLevel2",53),c=en(t,"osLevel1",-60),p=en(t,"osLevel2",-53),y=new Array(o).fill(null),u=new Array(o).fill(null),f=new Array(o).fill(null),d=new Array(o).fill(null),m=new Array(o).fill(null),h=new Array(o).fill(null),b=e(l,(e=>e.source??"hlc3")(t)),g=rn(b,e=>W(e,n)),k=rn(b.map((e,l)=>Math.abs(e-g[l])),e=>W(e,n)),w=rn(b.map((e,l)=>{const t=k[l];return Number.isFinite(t)?0===t?0:(e-g[l])/(.015*t):NaN}),e=>W(e,r)),C=rn(w,e=>A(e,a)),v=w.map((e,l)=>e-C[l]),M={wt1:K(w),wt2:K(C),mom:!1===t.showMom?new Array(o).fill(null):K(v),obUpper:on(o,i),obLower:on(o,s),osUpper:on(o,p),osLower:on(o,c),buy:y,sell:u,bull:f,bear:d,hiddenBull:m,hiddenBear:h},N=!1!==t.filterZone,x=!1!==t.useInner,S=x?s:i,L=x?p:c;for(let e=1;e<o;e++){const l=w[e-1],t=C[e-1],o=w[e],n=C[e];Number.isFinite(l)&&Number.isFinite(t)&&(Number.isFinite(o)&&Number.isFinite(n)&&(o>n&&l<=t&&(!N||n<=L)&&(y[e]=n),o<n&&l>=t&&(!N||n>=S)&&(u[e]=n)))}const B=ln(t,"lbL",3),D=ln(t,"lbR",3),F=en(t,"rangeLower",5),R=en(t,"rangeUpper",60),U=!1!==t.showRegDiv,T=!0===t.showHidDiv,P=X(C,B,D).map(e=>Number.isFinite(e)),O=G(C,B,D).map(e=>Number.isFinite(e)),I=an(C,D),V=an(l.map(e=>e.low),D),H=an(l.map(e=>e.high),D),E=_(sn(P,1)),$=_(sn(O,1)),q=Q(P,I,1),z=Q(P,V,1),Z=Q(O,I,1),Y=Q(O,H,1);for(let e=0;e<o;e++){const l=e-D;if(!(l<0)){if(P[e]){const t=F<=E[e]&&E[e]<=R;U&&t&&I[e]>q[e]&&V[e]<z[e]&&(f[l]=I[e]),T&&t&&I[e]<q[e]&&V[e]>z[e]&&(m[l]=I[e])}if(O[e]){const t=F<=$[e]&&$[e]<=R;U&&t&&I[e]<Z[e]&&H[e]>Y[e]&&(d[l]=I[e]),T&&t&&I[e]>Z[e]&&H[e]<Y[e]&&(h[l]=I[e])}}}return M},markers:({bars:e,values:l,settings:t})=>{const o=tn(t,"bullColor","#4caf50"),n=tn(t,"bearColor","#ff5252"),r=[{col:l.buy,shape:"circle",size:"tiny",color:tn(t,"buyColor","#00e676"),text:void 0},{col:l.sell,shape:"circle",size:"tiny",color:tn(t,"sellColor","#ff5252"),text:void 0},{col:l.bull,shape:"labelUp",size:"small",color:o,text:"R"},{col:l.bear,shape:"labelDown",size:"small",color:n,text:"R"},{col:l.hiddenBull,shape:"labelUp",size:"small",color:nn(o),text:"H"},{col:l.hiddenBear,shape:"labelDown",size:"small",color:nn(n),text:"H"}],a=[];for(let l=0;l<e.length;l++)for(const t of r){const o=t.col?.[l];if(null==o)continue;const n={time:e[l].time,position:"atPrice",price:o,shape:t.shape,size:t.size,color:t.color};void 0!==t.text&&(n.text=t.text),a.push(n)}return a},levels:e=>[{price:en(e,"obLevel1",60),color:tn(e,"obBandColor","#ff5252"),title:"Overbought 1",dashed:!0},{price:en(e,"obLevel2",53),color:tn(e,"obBandColor","#ff5252"),title:"Overbought 2",dashed:!0},{price:0,color:"#787b86",title:"Zero",dashed:!0},{price:en(e,"osLevel2",-53),color:tn(e,"osBandColor","#4caf50"),title:"Oversold 2",dashed:!0},{price:en(e,"osLevel1",-60),color:tn(e,"osBandColor","#4caf50"),title:"Oversold 1",dashed:!0}]},pn=[cn],yn=(e,l,t)=>{const o=e[l];return"number"==typeof o&&Number.isFinite(o)?o:t},un=(e,l,t)=>{const o=e[l];return"string"==typeof o&&""!==o?o:t},fn=(e,l)=>!1!==e[l],dn="#089981",mn="#F23745",hn="#787b86",bn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function gn(e,l){let t=e;if(/^#[0-9a-f]{3}$/i.test(t))t=`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`;else if(/^#[0-9a-f]{8}$/i.test(t))t=t.slice(0,7);else if(!/^#[0-9a-f]{6}$/i.test(t))return e;return`${t}${Math.round(255*Math.min(1,Math.max(0,l))).toString(16).padStart(2,"0")}`}const kn=gn(hn,.2),wn=gn(hn,.5);function Cn(e,l,t,o){if(null===e||!Number.isFinite(e))return;return gn(e>=0?t:o,.1+.4*(l>0?Math.min(1,Math.abs(e)/l):1))}const vn=e=>`${e.toFixed(2)}%`;const Mn=(e,l)=>100*e+l;function An(e,l){const t=function(e,l){const t=[];let o=null,n=0,r=0;for(const a of e)if(null===o||a.time<n||a.time>=r){const e=d(a.time,l);o={year:e.year,month:e.month,last:a.close},t.push(o),n=m(e.year,e.month,1,0,0,0,l),r=m(e.year,e.month+1,1,0,0,0,l)}else o.last=a.close;return t}(e,(e=>{const l=e.timezone;return"string"!=typeof l||""===l||l===r?r:a(l)?l:r})(l)),o=Math.round(yn(l,"startYear",2015)),n=function(e){const l=new Set;for(const t of e.split(",")){const e=t.replace(/[\s-]/g,"");if(!/^\d{6}$/.test(e))continue;const o=Number(e),n=o%100;n>=1&&n<=12&&l.add(o)}return l}(un(l,"ignoredMonths","")),i=t.length>0?t[t.length-1]:null;null!==i&&n.add(Mn(i.year,i.month));const s=[],c=new Map;for(let e=1;e<t.length;e++){const l=t[e],r=t[e-1];if(l.year<o||n.has(Mn(l.year,l.month)))continue;if(!Number.isFinite(r.last)||!Number.isFinite(l.last)||0===r.last)continue;let a=c.get(l.year);void 0===a&&(a=new Array(12).fill(null),c.set(l.year,a),s.push(l.year)),a[l.month-1]=100*(l.last-r.last)/Math.abs(r.last)}return{years:s,byYear:c,skipped:n}}function Nn(e,l){const t=[];for(const o of e.years){const n=e.byYear.get(o)?.[l];null!=n&&t.push(n)}return t}const xn=e=>{if(0===e.length)return null;let l=0;for(const t of e)l+=t;return l/e.length};function Sn(e){if(e.length<2)return null;const l=xn(e);if(null===l)return null;let t=0;for(const o of e)t+=(o-l)*(o-l);return Math.sqrt(t/(e.length-1))}const Ln=e=>{if(0===e.length)return null;let l=0;for(const t of e)t>=0&&(l+=1);return 100*l/e.length},Bn={Left:"bottom-left",Center:"bottom-center",Right:"bottom-right"},Kn=[52,...new Array(12).fill(46)],Wn=e=>({text:e,bgColor:kn}),Dn={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:dn,group:"Color settings"},{key:"negColor",type:"color",label:"Negative Color",default:mn,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:l})=>{const t=An(e,l);if(0===t.years.length)return null;const o=yn(l,"cutoffPercent",10),n=un(l,"posColor",dn),r=un(l,"negColor",mn),a=[[Wn("Year"),...bn.map(Wn)]],i=[1];for(const e of t.years){const l=t.byYear.get(e)??[],s=[Wn(String(e))];for(let a=0;a<12;a++){if(t.skipped.has(Mn(e,a+1))){s.push({text:"SKIP",bgColor:wn});continue}const i=l[a]??null;s.push(null===i?{text:""}:{text:vn(i),bgColor:Cn(i,o,n,r)})}a.push(s),i.push(1)}const s=fn(l,"showAvg"),c=fn(l,"showStDev"),p=fn(l,"showPos");if(s||c||p){if(a.push(Array.from({length:13},()=>({text:"",bgColor:kn}))),i.push(.3),s){const e=[Wn("Avgs:")];for(let l=0;l<12;l++){const a=xn(Nn(t,l));e.push(null===a?{text:""}:{text:vn(a),bgColor:Cn(a,o,n,r)})}a.push(e),i.push(1)}if(c){const e=[Wn("StDev:")];for(let l=0;l<12;l++){const o=Sn(Nn(t,l));e.push({text:null===o?"":o.toFixed(2),bgColor:kn})}a.push(e),i.push(1)}if(p){const e=[Wn("Pos%:")];for(let l=0;l<12;l++){const o=Ln(Nn(t,l));e.push(null===o?{text:""}:{text:`${Math.round(o)}%`,bgColor:Cn(o-50,50,n,r)})}a.push(e),i.push(1)}}return{rows:a,options:{position:Bn[un(l,"tablePosition","Center")]??"bottom-center",cellWidth:Kn,cellHeight:18,rowWeights:i,widthPercent:yn(l,"tableWidth",100),heightPercent:yn(l,"tableHeight",95),fontSize:10,margin:8}}}},Fn=[Dn],Rn="__tier2",Un=e=>e[Rn];function Tn(e,l){return(e.refetchOn??[]).map(e=>`${e}=${String(l[e])}`).join("&")}function Pn(e,l){const t=e[e.length-1];if(void 0===t||l.time>t.time)return void e.push(l);if(l.time===t.time)return void(e[e.length-1]=l);let o=0,n=e.length;for(;o<n;){const t=o+n>>1;e[t].time<l.time?o=t+1:n=t}e[o]?.time===l.time?e[o]=l:e.splice(o,0,l)}function On(e){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,t,o,n)=>{const r=Un(o),a=function(e,l,t){const o={};for(const l of t)o[l]=new Array(e.length).fill(null);if(0===l.length)return o;let n=-1;for(let r=0;r<e.length;r++){for(;n+1<l.length&&l[n+1].time<=e[r].time;)n+=1;if(n<0)continue;const a=l[n].values;for(const e of t){const l=a[e];o[e][r]="number"==typeof l&&Number.isFinite(l)?l:null}}return o}(l,r?.points??[],function(e){const l=e.plots.map(e=>e.key);for(const t of e.series??[])l.includes(t)||l.push(t);return l}(e));return void 0===e.calc?a:e.calc(l,a,t,o,n)},attach:l=>{const t=Un(l.store)??{key:null,points:[],live:[],loaded:!1,from:0,to:0,status:{state:"empty"},request:null,unsubscribe:null,generation:0};l.store[Rn]=t;let o=++t.generation,n=!0,r=null,a=()=>{};t.unsubscribe?.(),t.unsubscribe=null;const i=()=>n&&t.generation===o&&!l.signal?.aborted,s=e=>{t.status=e,i()&&l.setDataStatus?.(e)},c=()=>{t.request?.controller.abort(),t.request=null,r=null},p=()=>{t.unsubscribe?.(),t.unsubscribe=null},y=e=>{r!==e&&(r=e,e.promise.then(o=>{if(!i()||t.request!==e||e.controller.signal.aborted)return;t.request=null,r=null;const n=e.extend&&e.from<t.from,a=e.extend&&!n?t.points.slice():[];for(const e of o.slice().sort((e,l)=>e.time-l.time))Number.isFinite(e.time)&&Pn(a,e);if(n)for(const e of t.points)Pn(a,e);for(const e of t.live)Pn(a,e);t.points=a,t.from=t.loaded?Math.min(t.from,e.from):e.from,t.to=t.loaded?Math.max(t.to,e.to):e.to,t.loaded=!0,s({state:a.length>0?"ready":"empty"}),l.requestRecompute(),f()},l=>{i()&&t.request===e&&!e.controller.signal.aborted&&(t.request=null,r=null,s({state:"error",error:l}))}))},u=(l,o,n,r)=>{const a=new AbortController;let i;s({state:"loading"});try{i=e.fetch({...l,from:o,to:n,signal:a.signal})}catch(e){return void s({state:"error",error:e})}const c={promise:i,controller:a,from:o,to:n,extend:r};t.request=c,y(c)},f=(n=!1)=>{if(!i())return;const r=(()=>{const e=l.bars(),t=l.dataContext?.()??{symbol:l.symbol?.(),interval:l.interval?.()};return{settings:l.settings(),bars:e,dataContext:{...t},from:e[0]?.time??0,to:e[e.length-1]?.time??0,requestBars:l.requestBars}})(),a=r.dataContext,f=JSON.stringify([Tn(e,r.settings),a?.symbol,a?.exchange,a?.interval]),d=f!==t.key;let m;d&&(o=++t.generation,p(),c(),t.key=f,t.loaded=!1,t.live=[],t.status={state:"empty"},t.points.length>0&&(t.points=[],l.requestRecompute()));try{m=e.supports?.(r)??!0}catch(e){return void s({state:"error",error:e})}if(!m)return o=++t.generation,p(),c(),t.loaded=!1,t.live=[],t.points.length>0&&(t.points=[],l.requestRecompute()),void s({state:"unsupported"});if(0!==r.bars.length){if(null!==t.request?y(t.request):(n||d||"error"!==t.status.state)&&(!t.loaded||n?u(r,r.from,r.to,!1):r.from<t.from?u(r,r.from,t.from,!0):void 0===e.subscribe&&r.to>t.to?u(r,t.to,r.to,!0):s({state:t.points.length>0?"ready":"empty"})),null===t.unsubscribe&&void 0!==e.subscribe){const n=o;try{t.unsubscribe=e.subscribe(r,e=>{i()&&o===n&&Number.isFinite(e.time)&&(Pn(t.live,e),Pn(t.points,e),null===t.request&&"error"!==t.status.state&&s({state:"ready"}),l.requestRecompute())})}catch(e){s({state:"error",error:e})}}}else null===t.request&&s({state:"empty"})},d=()=>{if(!i()&&!n)return;if(n=!1,a(),l.signal?.removeEventListener("abort",m),t.generation!==o)return;t.generation+=1,p(),l.setDataRetry?.(null);const e=t.generation;queueMicrotask(()=>{t.generation===e&&c()})},m=()=>{c(),d()};return l.signal?.addEventListener("abort",m,{once:!0}),a=l.subscribeDataChanges?.(()=>f())??(()=>{}),l.setDataRetry?.(()=>f(!0)),l.setDataStatus?.(t.status),f("error"===t.status.state),d}}}const In=604800;function Vn(e,l,t,o){if("calendar"===e.mode)return k(e,l,t);if("interval"!==e.mode)return l;const n=e.seconds;if(n%In===0)return Math.floor(w(l,t)/(n/In));if(n%86400==0)return Math.floor(C(l,t)/(n/86400));if(null===o)return k(e,l);const r=v(l,t)+60*o;return 1e6*C(l,t)+Math.floor((l-r)/n)}const Hn=e=>Number.isFinite(e);function En(e,l,t={}){const o=t.timezone??r,n=Math.floor(t.offset??0);if(!Number.isFinite(n)||n<0)throw new h("securitySeries: offset must be zero or a positive count of buckets");const a=!0===t.lookahead,{bucketing:i}=b(l);if("ticks"===i.mode||"volume"===i.mode)throw new h(`securitySeries: "${l}" closes on trade flow rather than the clock and cannot be folded from time bars`);let s=null;if(void 0!==t.session){const e=g(t.session);if(null===e)throw new h(`securitySeries: cannot read session "${t.session}"`);s=e.start}const c=e.length,p=new Array(c).fill(null),y=new Array(c).fill(null),u=new Array(c).fill(null),f=new Array(c).fill(null),d=new Array(c).fill(null),m=new Array(c).fill(null),k=new Array(c).fill(!1);if(0===c)return{open:p,high:y,low:u,close:f,volume:d,bucketStart:m,isNew:k};const w=[],C=new Array(c);let v=NaN;for(let l=0;l<c;l++){const t=e[l],n=Vn(i,t.time,o,s);if(0===l||n!==v)w.push({start:t.time,open:t.open,high:t.high,low:t.low,close:t.close,volume:void 0===t.volume?null:t.volume}),k[l]=!0;else{const e=w[w.length-1];!Hn(e.open)&&Hn(t.open)&&(e.open=t.open),Hn(t.high)&&(!Hn(e.high)||t.high>e.high)&&(e.high=t.high),Hn(t.low)&&(!Hn(e.low)||t.low<e.low)&&(e.low=t.low),Hn(t.close)&&(e.close=t.close),void 0!==t.volume&&(e.volume=(e.volume??0)+t.volume)}C[l]=w.length-1,v=n}let M=NaN,A=NaN,N=null;for(let l=0;l<c;l++){const t=e[l],o=C[l];if(n>0){const e=o-n;if(e<0)continue;const t=w[e];p[l]=t.open,y[l]=t.high,u[l]=t.low,f[l]=t.close,d[l]=t.volume,m[l]=t.start;continue}const r=w[o];m[l]=r.start,a?(p[l]=r.open,y[l]=r.high,u[l]=r.low,f[l]=r.close,d[l]=r.volume):(k[l]?(M=t.high,A=t.low,N=void 0===t.volume?null:t.volume):(Hn(t.high)&&(!Hn(M)||t.high>M)&&(M=t.high),Hn(t.low)&&(!Hn(A)||t.low<A)&&(A=t.low),void 0!==t.volume&&(N=(N??0)+t.volume)),p[l]=r.open,y[l]=Hn(M)?M:null,u[l]=Hn(A)?A:null,f[l]=Hn(t.close)?t.close:null,d[l]=N)}return{open:p,high:y,low:u,close:f,volume:d,bucketStart:m,isNew:k}}const $n="indicators",qn=[ne,ae,re,ye,ie,ue,he,fe,me,Ce,ve,Me,Ae,Ne,xe,Se,Le,Ke,We,De,...al,...kl,...Pl,...Yl,...nt,...Lt,...$t,...to,...wo,...Uo,...Qo,...pn,...Fn];let zn=!1;function Zn(){if(!zn){zn=!0;for(const e of qn)M(e)}}Zn();export{nt as ADAPTIVE_INDICATORS,De as ADL,Ae as ADX,At as ALLIGATOR,$e as ALMA,Jo as ALPHATREND,cl as AROON,pl as AROON_OSCILLATOR,Se as ATR,Wl as AVERAGE_DAILY_RANGE,Lt as AVERAGE_INDICATORS,yl as AWESOME_OSCILLATOR,ul as BALANCE_OF_POWER,Ll as BB_TREND,ie as BOLLINGER,Sl as BOLLINGER_BANDWIDTH,xl as BOLLINGER_PERCENT_B,qn as BUILTIN_INDICATORS,Ne as CCI,El as CHAIKIN_MONEY_FLOW,$l as CHAIKIN_OSCILLATOR,Rl as CHAIKIN_VOLATILITY,Ge as CHANDELIER_EXIT,je as CHANDE_KROLL_STOP,fl as CHANDE_MOMENTUM,Bl as CHOPPINESS_INDEX,Fl as CHOP_ZONE,gl as CONNORS_RSI,Ro as CONSOLIDATION_BREAKOUT,dl as COPPOCK_CURVE,Xo as CPR,qe as DEMA,Ye as DONCHIAN,ml as DPO,ql as EASE_OF_MOVEMENT,zl as ELDER_FORCE_INDEX,ae as EMA,Ze as ENVELOPE,hl as FISHER_TRANSFORM,Yl as FLOW_INDICATORS,he as HALFTREND,Kl as HISTORICAL_VOLATILITY,ze as HMA,rl as HULL_SUITE,me as ICHIMOKU,to as INDEX_INDICATORS,$n as INDICATORS_TIER,_l as KAMA,Ql as KELTNER_CHANNEL,lt as KLINGER_OSCILLATOR,tt as KNOW_SURE_THING,ot as LINREG_SLOPE,et as LSMA,ve as MACD,eo as MASS_INDEX,Je as MA_CHANNEL,dt as MA_CROSS,wt as MA_RIBBON,mt as MCGINLEY_DYNAMIC,ht as MEDIAN,xe as MFI,Rt as MOMENTUM,Zl as NET_VOLUME,Xt as NVI,We as OBV,kl as OSCILLATOR_INDICATORS,al as OVERLAY_INDICATORS,fe as PARABOLIC_SAR,Pt as PPO,Jt as PVI,Qt as PVO,_t as PVT,_o as RANGE_ANALYSIS,wo as RANGE_INDICATORS,mo as RELATIVE_VIGOR_INDEX,ho as RELATIVE_VOLATILITY_INDEX,Ut as ROC,Ce as RSI,Fo as RSI_DIVERGENCE,Dn as SEASONALITY,Fn as SEASONALITY_INDICATORS,Uo as SIGNAL_INDICATORS,ne as SMA,Et as SMI,Vt as SMI_ERGODIC_INDICATOR,Ht as SMI_ERGODIC_OSCILLATOR,Nt as SMMA,ko as SPECIAL_K,Ul as STANDARD_DEVIATION,Tl as STANDARD_ERROR,Xe as STANDARD_ERROR_BANDS,Me as STOCHASTIC,yo as STOCHASTIC_RSI,$t as STRENGTH_INDICATORS,Qo as STUDY_INDICATORS,ue as SUPERTREND,St as T3,Ct as TEMA,Ko as TREND_STRENGTH_INDEX,Ot as TRIX,It as TSI,vt as TWAP,lo as ULCER_INDEX,fo as ULTIMATE_OSCILLATOR,Pl as VOLATILITY_INDICATORS,Bo as VOLATILITY_STOP,Ke as VOLUME,Lo as VORTEX,ye as VWAP,Mt as VWMA,cn as WAVETREND,pn as WAVETREND_INDICATORS,Do as WILLIAMS_FRACTALS,uo as WILLIAMS_PERCENT_R,Le as WILLIAMS_VIX_FIX,re as WMA,bo as WOODIES_CCI,T as alma,_ as barsSince,j as cci,D as change,bl as connorsStreak,Y as correlation,On as createTier2Indicator,E as cumulative,R as dev,L as highest,O as highestBars,$ as linreg,B as lowest,I as lowestBars,K as nulls,U as percentRank,Z as percentileNearestRank,G as pivotHigh,X as pivotLow,Zn as registerBuiltinIndicators,x as rma,F as roc,H as rollingSum,En as securitySeries,A as sma,W as smaSeededEma,S as stdev,z as stoch,q as swma,Q as valueWhen,P as vwma,N as wma};
|
|
2
2
|
//# sourceMappingURL=openalgo-charts.indicators.mjs.map
|