@tradecanvas/commons 1.19.1 → 1.20.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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=function(e){return e[e.Background=0]=`Background`,e[e.Main=1]=`Main`,e[e.Panel=2]=`Panel`,e[e.Overlay=3]=`Overlay`,e[e.UI=4]=`UI`,e[e.Hover=5]=`Hover`,e}({}),t={"background.color":`color`,"panes.background":`color`,"panes.separatorColor":`color`,"panes.titleColor":`color`,"grid.horizontal.visible":`boolean`,"grid.horizontal.color":`color`,"grid.horizontal.style":`lineStyle`,"grid.horizontal.width":`width`,"grid.vertical.visible":`boolean`,"grid.vertical.color":`color`,"grid.vertical.style":`lineStyle`,"grid.vertical.width":`width`,"crosshair.horizontal.visible":`boolean`,"crosshair.horizontal.color":`color`,"crosshair.horizontal.style":`lineStyle`,"crosshair.horizontal.width":`width`,"crosshair.vertical.visible":`boolean`,"crosshair.vertical.color":`color`,"crosshair.vertical.style":`lineStyle`,"crosshair.vertical.width":`width`,"crosshair.labelBackground":`color`,"crosshair.labelTextColor":`color`,"axis.price.lineColor":`color`,"axis.price.textColor":`color`,"axis.time.lineColor":`color`,"axis.time.textColor":`color`,"legend.textColor":`color`,"legend.labelColor":`color`,"watermark.color":`color`,"lastPrice.visible":`boolean`,"lastPrice.upColor":`color`,"lastPrice.downColor":`color`,"lastPrice.style":`lineStyle`,"lastPrice.width":`width`,"volume.upColor":`color`,"volume.downColor":`color`,"sessionBreaks.color":`color`,"sessionBreaks.style":`lineStyle`,"sessionBreaks.width":`width`,"highLow.color":`color`,"trading.buyColor":`color`,"trading.sellColor":`color`,"trading.profitColor":`color`,"trading.lossColor":`color`,"trading.entryColor":`color`,"markers.longColor":`color`,"markers.shortColor":`color`,"markers.neutralColor":`color`,"tradeZones.profitColor":`color`,"tradeZones.lossColor":`color`,"tradeZones.activeColor":`color`,"drawings.handleColor":`color`,"series.candlestick.upColor":`color`,"series.candlestick.downColor":`color`,"series.candlestick.wickUpColor":`color`,"series.candlestick.wickDownColor":`color`,"series.heikinAshi.upColor":`color`,"series.heikinAshi.downColor":`color`,"series.heikinAshi.wickUpColor":`color`,"series.heikinAshi.wickDownColor":`color`,"series.hollowCandle.upColor":`color`,"series.hollowCandle.downColor":`color`,"series.volumeCandles.upColor":`color`,"series.volumeCandles.downColor":`color`,"series.volumeCandles.wickUpColor":`color`,"series.volumeCandles.wickDownColor":`color`,"series.equivolume.upColor":`color`,"series.equivolume.downColor":`color`,"series.equivolume.wickUpColor":`color`,"series.equivolume.wickDownColor":`color`,"series.bar.upColor":`color`,"series.bar.downColor":`color`,"series.hiLo.upColor":`color`,"series.hiLo.downColor":`color`,"series.renko.upColor":`color`,"series.renko.downColor":`color`,"series.lineBreak.upColor":`color`,"series.lineBreak.downColor":`color`,"series.rangeBars.upColor":`color`,"series.rangeBars.downColor":`color`,"series.kagi.upColor":`color`,"series.kagi.downColor":`color`,"series.pointAndFigure.upColor":`color`,"series.pointAndFigure.downColor":`color`,"series.baseline.upColor":`color`,"series.baseline.downColor":`color`,"series.baseline.lineWidth":`width`,"series.line.color":`color`,"series.line.lineWidth":`width`,"series.stepLine.color":`color`,"series.stepLine.lineWidth":`width`,"series.lineWithMarkers.color":`color`,"series.lineWithMarkers.lineWidth":`width`,"series.area.lineColor":`color`,"series.area.lineWidth":`width`,"series.area.topColor":`color`,"series.area.bottomColor":`color`,"series.hlcArea.lineColor":`color`,"series.hlcArea.lineWidth":`width`,"series.hlcArea.topColor":`color`,"series.hlcArea.bottomColor":`color`},n={color:`#4c8dff`,lineWidth:1,lineStyle:`solid`,fillColor:`rgba(76, 141, 255, 0.1)`,fillOpacity:.1,fontSize:12},r={enabled:!0,orderColors:{buy:`#1fa874`,sell:`#e8505b`},positionColors:{profit:`#1fa874`,loss:`#e8505b`,entry:`#4c8dff`},depthOverlay:{enabled:!1,bidColor:`rgba(31, 168, 116,0.15)`,askColor:`rgba(232, 80, 91,0.15)`,maxWidth:100},contextMenu:{enabled:!0},lineButtons:{cancel:!0,close:!0,reverse:!0,removeStops:!0},fillMarks:!0,pricePrecision:2,dragThreshold:3},i={longColor:`#1fa874`,shortColor:`#e8505b`,neutralColor:`#9E9E9E`,arrowSize:12,showLabel:!0,showConfidence:!0},a={profitColor:`#1fa874`,lossColor:`#e8505b`,activeColor:`#4c8dff`,fillOpacity:.12,borderWidth:1,showLabel:!0,showPnl:!0},o={enabled:!0,maxRetries:1/0,baseDelay:1e3,maxDelay:3e4,backoffMultiplier:2},s={historyLimit:500,autoScroll:!0,showCurrentPriceLine:!0,aggregateTicks:!1},c=[`change`,`changePercent`,`open`,`high`,`low`,`prevClose`,`volume`,`bid`,`ask`,`time`];function l(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.symbol==`string`?t.symbol.trim():``;if(!n||n.length>64||!u(t.last))return null;let r={symbol:n,last:t.last};for(let e of c){let n=t[e];u(n)&&(r[e]=n)}let i=r.prevClose??r.open;if(r.change===void 0&&i!==void 0&&(r.change=r.last-i),r.changePercent===void 0&&r.change!==void 0){let e=r.last-r.change;e!==0&&(r.changePercent=r.change/e*100)}return r}function u(e){return typeof e==`number`&&Number.isFinite(e)}var d=300,f=1e3,p=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();return n?n.slice(0,t):void 0},ee=e=>{if(typeof e==`string`)try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}};function te(e,t=20){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!t||typeof t!=`object`)continue;let e=t,r=p(e.title,d);if(!r||typeof e.time!=`number`||!Number.isFinite(e.time))continue;let i={title:r,time:e.time},a=ee(e.url);a&&(i.url=a);let o=p(e.source,d);o&&(i.source=o);let s=p(e.summary,f);s&&(i.summary=s);let c=p(e.id,d);c&&(i.id=c),n.push(i)}return n.sort((e,t)=>t.time-e.time).slice(0,Math.max(0,t))}function ne(e,t,n){return Math.max(t,Math.min(n,e))}function re(e,t,n){return e+(t-e)*n}function ie(e,t,n){return e===t?0:(n-e)/(t-e)}function ae(e,t){return Math.round(e/t)*t}function m(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function oe(e,t,n){return m(m(t-e,!1)/(n-1),!0)}function se(e){return e>0xe8d4a51000?e:e*1e3}function ce(e){return{time:se(e.time??e.t??0),open:e.open??e.o??0,high:e.high??e.h??0,low:e.low??e.l??0,close:e.close??e.c??0,volume:e.volume??e.v??0}}function le(e,t,n){let r=Math.max(0,t),i=Math.min(e.length,n+1);return e.slice(r,i)}function ue(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1;if(e[i].time<t)n=i+1;else if(e[i].time>t)r=i-1;else return i}return n}function de(e,t,n,r=.05){if(e.length===0)return{min:0,max:1};let i=Math.max(0,t),a=Math.min(e.length-1,n),o=1/0,s=-1/0;for(let t=i;t<=a;t++)e[t].low<o&&(o=e[t].low),e[t].high>s&&(s=e[t].high);if(o===1/0)return{min:0,max:1};let c=s-o||1;return{min:o-c*r,max:s+c*r}}function fe(e,t){return{...e,high:Math.max(e.high,t.price),low:Math.min(e.low,t.price),close:t.price,volume:e.volume+(t.volume??0),time:t.time}}function pe(e,t=1){let n=e.slice(1);return(n.length===3||n.length===4)&&(n=[...n.slice(0,3)].map(e=>e+e).join(``)),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}function me(e,t){let n=e.trim();if(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n))return pe(n,t);let r=n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);return r?`rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})`:e}function he(e,t,n){let r=e=>(e=e.replace(`#`,``),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16)}),i=r(e),a=r(t);return`rgb(${Math.round(i.r+(a.r-i.r)*n)},${Math.round(i.g+(a.g-i.g)*n)},${Math.round(i.b+(a.b-i.b)*n)})`}var h=6e4,g=1440*h,_=15*h,ge=8192,v=7*g,_e=4096,ve=new Set([`UTC`,`Etc/UTC`,`GMT`,`Etc/GMT`,`UCT`,`Etc/UCT`,`Universal`,`Etc/Universal`,`Zulu`,`Etc/Zulu`]),ye=new Map,y=new Map,be=new Map;function xe(e){let t=ye.get(e);return t||(t=new Intl.DateTimeFormat(`en-US`,{timeZone:e,hourCycle:`h23`,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`}),ye.set(e,t)),t}function Se(e){if(!e)return!1;try{return xe(e),!0}catch{return!1}}function b(e,t){if(!Number.isFinite(t)||ve.has(e))return 0;let n=be.get(e);n||(n=new Map,be.set(e,n));let r=Math.floor(t/v),i=n.get(r);return i||(i=Ce(e,r*v),n.size>=_e&&n.clear(),n.set(r,i)),t<i.change?i.before:i.after}function Ce(e,t){let n=x(e,t),r=t+v-_,i=x(e,r);if(i===n)return{before:n,change:1/0,after:i};let a=t;for(;r-a>_;){let t=a+Math.floor((r-a)/_/2)*_;x(e,t)===n?a=t:r=t}return{before:n,change:r,after:i}}function x(e,t){let n=Math.floor(t/_),r=`${e}|${n}`,i=y.get(r);if(i!==void 0)return i;let a=n*_,o=1970,s=1,c=1,l=0,u=0,d=0;for(let t of xe(e).formatToParts(new Date(a))){let e=Number(t.value);switch(t.type){case`year`:o=e;break;case`month`:s=e;break;case`day`:c=e;break;case`hour`:l=e%24;break;case`minute`:u=e;break;case`second`:d=e;break}}let f=Math.round((Date.UTC(o,s-1,c,l,u,d)-a)/h);return y.size>=ge&&y.clear(),y.set(r,f),f}function S(e,t){return e===null?-new Date(t).getTimezoneOffset():typeof e==`number`?e:b(e,t)}function we(e,t){let n=e-S(t,e-g)*h;if(n+S(t,n)*h===e)return n;let r=e-S(t,e+g)*h;return r+S(t,r)*h===e?r:n}var Te=new Map;function Ee(e,t,n){let r=`${e}|${JSON.stringify(t)}|${n===null?`local`:typeof n==`number`?`fixed:${n}`:n}`,i=Te.get(r);if(i)return i;let a=n===null?void 0:typeof n==`number`?`UTC`:n,o;try{o=new Intl.DateTimeFormat(e,{...t,timeZone:a})}catch{o=new Intl.DateTimeFormat(`en-US`,{...t,timeZone:a})}let s=typeof n==`number`?n*h:0;return i=e=>o.format(new Date(e+s)),Te.set(r,i),i}var De={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"45m":27e5,"1h":36e5,"2h":72e5,"3h":108e5,"4h":144e5,"6h":216e5,"8h":288e5,"12h":432e5,"1d":864e5,"2d":1728e5,"3d":2592e5,"1w":6048e5,"2w":12096e5,"1M":2592e6,"3M":7776e6,"6M":15552e6,"12M":31536e6},C={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,M:2592e6},Oe=/^([1-9]\d*)([smhdwM])$/;function w(e){let t=Oe.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)?{count:n,unit:t[2]}:null}var ke=1e6;function Ae(e){let t=/^([1-9]\d*)T$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)&&n<=ke?n:null}function je(e){return w(e)!==null}function T(e){let t=De[e];if(t!==void 0)return t;let n=w(e);return n?n.count*C[n.unit]:NaN}function Me(e,t){let n=new Date(e),r=T(t);return r>=864e5?n.toLocaleDateString(void 0,{month:`short`,day:`numeric`}):r>=36e5?n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}):n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Ne(e,t){let n=T(t);return Math.floor(e/n)*n}function Pe(e,t){if(t===null){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate(),hours:t.getHours(),minutes:t.getMinutes()}}let n=new Date(e+S(t,e)*6e4);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hours:n.getUTCHours(),minutes:n.getUTCMinutes()}}function Fe(e){return e.hours===0&&e.minutes===0}var Ie=20*36e5;function Le(e){let t=Math.min(e.length,64);if(t<2)return;let n=e=>e>0xe8d4a51000?e:e*1e3,r=1/0;for(let i=1;i<t;i++){let t=Math.abs(n(e[i].time)-n(e[i-1].time));t>0&&t<r&&(r=t)}return r===1/0?void 0:r>=Ie}function Re(e,t=Date.now()){let n=S(e,t),r=n>=0?`+`:`-`,i=Math.abs(n),a=Math.floor(i/60),o=i%60;return o===0?`UTC${r}${a}`:`UTC${r}${a}:${String(o).padStart(2,`0`)}`}var ze=Date.UTC(1970,0,5);function Be(e,t,n=1){let{count:r,unit:i}=w(t)??{count:1,unit:`m`};if(i===`s`||i===`m`||i===`h`||i===`d`){let t=r*C[i];return Math.floor(e/t)*t}let a=new Date(e);if(i===`w`){let e=C.d,t=(a.getUTCDay()-n+7)%7,i=Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()-t);if(r<=1)return i;let o=Math.floor((i-ze)/(7*e));return ze+Math.floor(o/r)*r*7*e}let o=a.getUTCFullYear()*12+a.getUTCMonth(),s=Math.floor(o/r)*r;return Date.UTC(Math.floor(s/12),s%12,1)}var Ve=64,E=new Map;function He(e,t){let n=`${e}|${t}`,r=E.get(n);return r||(E.size>=Ve&&E.clear(),r=new Intl.NumberFormat(e,{minimumFractionDigits:t,maximumFractionDigits:t}),E.set(n,r)),r}function D(e,t=2,n=`en-US`){return He(n,t).format(e)}function Ue(e,t){if(!(t>e)||!Number.isFinite(e)||!Number.isFinite(t))return 2;let n=oe(e,t,8);return n>0&&n<1?Math.ceil(-Math.log10(n))+1:2}function We(e,t,n,r=2,i=`en-US`){if((t===`percentage`||t===`indexedTo100`)&&n&&n!==0){if(t===`percentage`){let t=(e/n-1)*100;return`${t>0?`+`:``}${t.toFixed(2)}%`}return D(e/n*100,2,i)}return D(e,r,i)}function Ge(e,t,n=1){let r=Number.isInteger(n)&&n>1?n:1;if(!Number.isFinite(e)||!Number.isInteger(t)||t<2)return String(e);let i=t*r,a=Math.round(Math.abs(e)*i),o=Math.floor(a/i),s=a-o*i,c=Math.floor(s/r),l=String(t-1).length,u=r>1?String(Math.floor((s-c*r)/r*10)):``;return`${e<0&&a>0?`-`:``}${o}'${String(c).padStart(l,`0`)}${u}`}function Ke(e){if(!Number.isInteger(e.denominator)||e.denominator<2)return null;let t=Number.isInteger(e.subDenominator)&&(e.subDenominator??0)>1?e.subDenominator:1;return 1/(e.denominator*t)}function qe(e){return e?typeof e==`function`?e:Ke(e)===null?null:t=>Ge(t,e.denominator,e.subDenominator):null}function Je(e){return e>=1e9?(e/1e9).toFixed(2)+`B`:e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(2)+`K`:e.toFixed(0)}function Ye(e){let t=0;for(let n of e){let e=n.toString(),r=e.indexOf(`.`);r>=0&&(t=Math.max(t,e.length-r-1))}return Math.min(t,8)}var Xe=[`close`,`open`,`high`,`low`,`hl2`,`hlc3`,`ohlc4`,`hlcc4`];function Ze(e){return typeof e==`string`&&Xe.includes(e)}function Qe(e,t){switch(t){case`open`:return e.open;case`high`:return e.high;case`low`:return e.low;case`hl2`:return(e.high+e.low)/2;case`hlc3`:return(e.high+e.low+e.close)/3;case`ohlc4`:return(e.open+e.high+e.low+e.close)/4;case`hlcc4`:return(e.high+e.low+2*e.close)/4;default:return e.close}}var $e=/^ind:([^:]+):(.+)$/;function et(e,t){return`ind:${e}:${t}`}function tt(e){if(typeof e!=`string`)return null;let t=$e.exec(e);return t?{instanceId:t[1],key:t[2]}:null}var nt=864e5;function rt(e,t,n=1){let r=[],i=null;for(let a of e){let e=Be(a.time,t,n);i===null||e!==i.time?(i={time:e,open:a.open,high:a.high,low:a.low,close:a.close,volume:a.volume},r.push(i)):(a.high>i.high&&(i.high=a.high),a.low<i.low&&(i.low=a.low),i.close=a.close,i.volume+=a.volume)}return r}var O=e=>e===`s`||e===`m`||e===`h`||e===`d`;function it(e,t){let n=w(e),r=w(t);if(!n||!r)return!1;let i=T(e);return n.unit===`d`&&n.count>1?!1:O(r.unit)?O(n.unit)&&T(t)%i===0:n.unit===r.unit?r.count%n.count===0:O(n.unit)&&nt%i===0}function at(e,t){let n=null,r=0;for(let i of t){if(!it(i,e))continue;let t=T(i);t>r&&(n=i,r=t)}return n}function ot(e,t){if(!e)return 0;if(e===t)return 1e3;if(e.startsWith(t))return 600-Math.min(100,e.length-t.length);let n=e.indexOf(t);return n>=0?300-Math.min(100,n):0}function st(e,t,n=50,r){let i=t.trim().toUpperCase();if(!i)return e.slice(0,n);let a=[];for(let t of e){let e=Math.max(ot(t.symbol.toUpperCase(),i),ot((t.description??``).toUpperCase(),i)*.8);e>0&&a.push({info:t,score:e+(r?.(t)??0)})}return a.sort((e,t)=>t.score-e.score||e.info.symbol.localeCompare(t.info.symbol)),a.slice(0,n).map(e=>e.info)}function ct(e){let t=typeof e==`number`?e:Number(e);if(!Number.isFinite(t)||t<=0)return 0;for(let e=0;e<=12;e++){let n=t*10**e;if(Math.abs(n-Math.round(n))<1e-9*Math.max(1,n))return e}return 12}function k(e){let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n===24&&r===0?1440:n<24&&r<60?n*60+r:null}var A=864e5,j=6e4,lt=8;function ut(e,t){let n=e?.timezone,r=(e?.sessions??[]).flatMap(e=>{let t=k(e.start),n=k(e.end);return t===null||n===null||t===n?[]:[{start:t,end:n,days:Array.isArray(e.days)?e.days:null}]});if(!n||!Se(n)||r.length===0||!Number.isFinite(t))return{state:`always`,next:null};let i=b(n,t)*j,a=Math.floor((t+i)/A)*A,o=e=>e-b(n,e-b(n,e-i)*j)*j,s=[];for(let e=-1;e<=lt;e++){let t=a+e*A,n=(Math.floor(t/A)+4)%7;for(let e of r){if(e.days&&!e.days.includes(n))continue;let r=t+e.start*j,i=(e.end>e.start?t:t+A)+e.end*j;s.push([o(r),o(i)])}}s.sort((e,t)=>e[0]-t[0]);let c=[];for(let[e,t]of s){let n=c[c.length-1];n&&e<=n[1]?c[c.length-1]=[n[0],Math.max(n[1],t)]:c.push([e,t])}let l=c.find(([e,n])=>e<=t&&t<n);if(l)return{state:`open`,next:l[1]};let u=c.find(([e])=>e>t);return{state:`closed`,next:u?u[0]:null}}var dt=48,ft=2e3,pt=1e4;function mt(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(t.length>=dt)break;if(typeof n!=`object`||!n)continue;let{value:e,visible:r,color:i}=n;if(typeof e!=`number`||!Number.isFinite(e)||Math.abs(e)>pt||r!==void 0&&typeof r!=`boolean`)continue;let a={value:e,visible:r??!0};typeof i==`string`&&i&&(a.color=i),t.push(a)}return t}function ht(e,t){switch(e.kind){case`boolean`:return typeof t==`boolean`?t:void 0;case`number`:return typeof t!=`number`||!Number.isFinite(t)?void 0:Math.min(e.max??1/0,Math.max(e.min??-1/0,t));case`choice`:return typeof t==`string`&&e.choices.some(e=>e.value===t)?t:void 0;case`levels`:return mt(t);case`text`:return typeof t==`string`?t.slice(0,ft):void 0}}function gt(e,t){if(!e||typeof t!=`object`||!t)return{};let n={};for(let[r,i]of Object.entries(t)){let t=e[r];if(!t)continue;let a=ht(t,i);a!==void 0&&(n[r]=a)}return n}function _t(e){return Array.isArray(e)?e.map(e=>({...e})):e}function vt(e,t,n){let r=e?.[n];return r?_t((t&&n in t?ht(r,t[n]):void 0)??r.default):t?.[n]}function yt(e,t){let n={};for(let r of Object.keys(e??{}))n[r]=vt(e,t,r);return n}var bt=[`solid`,`dashed`,`dotted`],xt=64,St=2e3,Ct=20,wt=200;function M(e,t,n){return typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(t,e)):void 0}function Tt(e){return typeof e==`string`&&e.length>0&&e.length<=xt?e:void 0}function Et(e){if(typeof e!=`object`||!e)return{};let t=e,n={},r=Tt(t.color);r!==void 0&&(n.color=r);let i=M(t.lineWidth,.5,Ct);i!==void 0&&(n.lineWidth=i),bt.includes(t.lineStyle)&&(n.lineStyle=t.lineStyle);let a=Tt(t.fillColor);a!==void 0&&(n.fillColor=a);let o=M(t.fillOpacity,0,1);o!==void 0&&(n.fillOpacity=o);let s=M(t.fontSize,6,wt);return s!==void 0&&(n.fontSize=s),typeof t.text==`string`&&(n.text=t.text.slice(0,St)),n}var N=e=>typeof e==`number`&&Number.isFinite(e)&&e>0,P=(e,t,n)=>typeof e==`number`&&Number.isInteger(e)&&e>=t&&e<=n,F=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Dt(e){if(!F(e))return{};let t={};if(F(e.renko)){let{boxSize:n,atrPeriod:r}=e.renko;t.renko={...N(n)||n===`atr`?{boxSize:n}:{},...P(r,1,500)?{atrPeriod:r}:{}}}if(F(e.lineBreak)){let{lines:n}=e.lineBreak;t.lineBreak=P(n,1,10)?{lines:n}:{}}if(F(e.kagi)){let{reversal:n,reversalType:r}=e.kagi;t.kagi={...N(n)?{reversal:n}:{},...r===`percent`||r===`price`?{reversalType:r}:{}}}if(F(e.pointAndFigure)){let{boxSize:n,reversal:r}=e.pointAndFigure;t.pointAndFigure={...N(n)||n===`auto`?{boxSize:n}:{},...P(r,1,10)?{reversal:r}:{}}}if(F(e.rangeBars)){let{range:n}=e.rangeBars;t.rangeBars=N(n)||n===`auto`?{range:n}:{}}return t}var Ot=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,kt={family:Ot,sizeSmall:10,sizeMedium:12,sizeLarge:14},I={amber:`#f2a93b`,up:`#1fa874`,down:`#e8505b`,ochre:`#c98316`,blue:`#4c8dff`,violet:`#a57cff`,cyan:`#1398a8`,rose:`#e25592`,neutral:`#7d8696`,ink:`#0c1016`},At=.22;function L(e){return me(e,At)}var R=`#2eb88a`,z=`#e85a67`,jt=[I.blue,I.ochre,I.violet,I.cyan,I.rose],B={name:`dark`,background:I.ink,text:`#d9dde4`,textSecondary:`#7d8696`,grid:`#161b23`,crosshair:`#8a93a3`,candleUp:R,candleDown:z,candleUpWick:R,candleDownWick:z,lineColor:I.amber,areaTopColor:`rgba(242, 169, 59, 0.32)`,areaBottomColor:`rgba(242, 169, 59, 0.0)`,volumeUp:L(R),volumeDown:L(z),axisLine:`#1f2630`,axisLabel:`#9aa3b2`,axisLabelBackground:`#1f2630`,font:kt},V={name:`light`,background:`#ffffff`,text:`#0f131a`,textSecondary:`#6b7380`,grid:`#eef0f3`,crosshair:`#8a93a3`,candleUp:`#16a36a`,candleDown:`#d9414f`,candleUpWick:`#16a36a`,candleDownWick:`#d9414f`,lineColor:`#c77a0a`,areaTopColor:`rgba(199, 122, 10, 0.24)`,areaBottomColor:`rgba(199, 122, 10, 0.0)`,volumeUp:L(`#16a36a`),volumeDown:L(`#d9414f`),axisLine:`#dde1e7`,axisLabel:`#5b6472`,axisLabelBackground:`#eef0f3`,font:kt},H={name:`terminal`,background:`#0E0E0E`,text:`#C0C0C0`,textSecondary:`#8A8A8A`,grid:`#1A1A1A`,crosshair:`#666666`,candleUp:`#00FF87`,candleDown:`#FF3B4D`,candleUpWick:`#00FF87`,candleDownWick:`#FF3B4D`,lineColor:`#3D8BFD`,areaTopColor:`rgba(61, 139, 253, 0.3)`,areaBottomColor:`rgba(61, 139, 253, 0.0)`,volumeUp:`rgba(0, 255, 135, 0.2)`,volumeDown:`rgba(255, 59, 77, 0.2)`,axisLine:`#1A1A1A`,axisLabel:`#8A8A8A`,axisLabelBackground:`#1A1A1A`,font:{family:`'Roboto Mono', 'JetBrains Mono', 'SF Mono', Consolas, monospace`,sizeSmall:10,sizeMedium:12,sizeLarge:14}},Mt=new Set([B.volumeUp,B.volumeDown,V.volumeUp,V.volumeDown,H.volumeUp,H.volumeDown]);function U(e){let t=(e,t)=>{if(!Mt.has(e))return e;let n=L(t);return n===t?e:n};return{up:t(e.volumeUp,e.candleUp),down:t(e.volumeDown,e.candleDown)}}var Nt=[`solid`,`dashed`,`dotted`],Pt=20,Ft=64,It=2,Lt=[/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,/^[a-z]{3,30}$/i,/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i];function W(e){return typeof e==`string`&&e.length<=Ft&&Lt.some(t=>t.test(e.trim()))}function Rt(e,t){switch(e){case`color`:return W(t);case`lineStyle`:return Nt.includes(t);case`width`:return typeof t==`number`&&Number.isFinite(t)&&t>0&&t<=Pt;case`boolean`:return typeof t==`boolean`}}function zt(e){return Object.prototype.hasOwnProperty.call(t,e)}function Bt(e){let n={},r=[];if(typeof e!=`object`||!e||Array.isArray(e))return{overrides:{},rejected:r};for(let[i,a]of Object.entries(e))zt(i)?a===null?n[i]=null:Rt(t[i],a)?n[i]=a:r.push(i):r.push(i);return{overrides:n,rejected:r}}function Vt(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let{background:t,separator:n}=e,r={...W(t)?{background:t}:{},...W(n)?{separator:n}:{}};return Object.keys(r).length>0?r:null}var Ht=/^[A-Za-z0-9_]{1,32}$/;function Ut(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e)){if(!Ht.test(n)||typeof r!=`object`||!r)continue;let{lineStyle:e,visible:i}=r,a={...Nt.includes(e)?{lineStyle:e}:{},...typeof i==`boolean`?{visible:i}:{}};Object.keys(a).length>0&&(t[n]=a)}return Object.keys(t).length>0?t:void 0}function Wt(e,t,n=1){return e===`solid`?[]:e===`dotted`?[n,n*2]:[...t]}function Gt(e,t,n){let r=e=>t(`series.${n}.${e}`),i=r(`upColor`)??t(`series.candlestick.upColor`),a=r(`downColor`)??t(`series.candlestick.downColor`),o=i??e.candleUp,s=a??e.candleDown;return{up:o,down:s,wickUp:r(`wickUpColor`)??t(`series.candlestick.wickUpColor`)??(i===void 0?e.candleUpWick:o),wickDown:r(`wickDownColor`)??t(`series.candlestick.wickDownColor`)??(a===void 0?e.candleDownWick:s),line:r(`color`)??r(`lineColor`)??t(`series.line.color`)??e.lineColor,lineWidth:r(`lineWidth`)??t(`series.line.lineWidth`)??It,top:r(`topColor`)??t(`series.area.topColor`)??e.areaTopColor,bottom:r(`bottomColor`)??t(`series.area.bottomColor`)??e.areaBottomColor}}function G(e,t,n){return{visible:e(`${t}.visible`)??n.visible,color:e(`${t}.color`)??n.color,style:e(`${t}.style`)??n.style,width:e(`${t}.width`)??n.width}}function Kt(e,t,n){let{style:r,...i}=e,a=n,o=e=>a[e],s=Gt(i,o,t),c=o(`background.color`)??i.background,l=(e,t)=>o(e)??t,u=e=>o(e)??null,d={panes:{background:l(`panes.background`,c),separator:l(`panes.separatorColor`,i.axisLine),title:l(`panes.titleColor`,i.textSecondary)},grid:{horizontal:G(o,`grid.horizontal`,{visible:!0,color:i.grid,style:`solid`,width:1}),vertical:G(o,`grid.vertical`,{visible:!0,color:i.grid,style:`solid`,width:1})},crosshair:{horizontal:G(o,`crosshair.horizontal`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),vertical:G(o,`crosshair.vertical`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),labelBackground:l(`crosshair.labelBackground`,i.text),labelText:l(`crosshair.labelTextColor`,c)},axis:{price:{line:l(`axis.price.lineColor`,i.axisLine),text:l(`axis.price.textColor`,i.axisLabel)},time:{line:l(`axis.time.lineColor`,i.axisLine),text:l(`axis.time.textColor`,i.axisLabel)}},legend:{text:l(`legend.textColor`,i.text),label:l(`legend.labelColor`,i.textSecondary)},watermark:{color:o(`watermark.color`)??null},lastPrice:{visible:o(`lastPrice.visible`)??!0,up:l(`lastPrice.upColor`,s.up),down:l(`lastPrice.downColor`,s.down),style:o(`lastPrice.style`)??`dashed`,width:o(`lastPrice.width`)??1},sessionBreaks:{color:o(`sessionBreaks.color`)??null,style:o(`sessionBreaks.style`)??null,width:o(`sessionBreaks.width`)??null},highLow:{color:o(`highLow.color`)??null},series:{lineWidth:s.lineWidth},trading:{buy:u(`trading.buyColor`),sell:u(`trading.sellColor`),profit:u(`trading.profitColor`),loss:u(`trading.lossColor`),entry:u(`trading.entryColor`)},markers:{long:u(`markers.longColor`),short:u(`markers.shortColor`),neutral:u(`markers.neutralColor`)},tradeZones:{profit:u(`tradeZones.profitColor`),loss:u(`tradeZones.lossColor`),active:u(`tradeZones.activeColor`)},drawings:{handle:u(`drawings.handleColor`)}};return{...i,background:c,candleUp:s.up,candleDown:s.down,candleUpWick:s.wickUp,candleDownWick:s.wickDown,lineColor:s.line,areaTopColor:s.top,areaBottomColor:s.bottom,volumeUp:l(`volume.upColor`,i.volumeUp),volumeDown:l(`volume.downColor`,i.volumeDown),style:d}}var qt={"background.color":e=>e.background,"panes.background":(e,t)=>t.panes.background,"panes.separatorColor":(e,t)=>t.panes.separator,"panes.titleColor":(e,t)=>t.panes.title,"crosshair.labelBackground":(e,t)=>t.crosshair.labelBackground,"crosshair.labelTextColor":(e,t)=>t.crosshair.labelText,"axis.price.lineColor":(e,t)=>t.axis.price.line,"axis.price.textColor":(e,t)=>t.axis.price.text,"axis.time.lineColor":(e,t)=>t.axis.time.line,"axis.time.textColor":(e,t)=>t.axis.time.text,"legend.textColor":(e,t)=>t.legend.text,"legend.labelColor":(e,t)=>t.legend.label,"watermark.color":(e,t)=>t.watermark.color,"lastPrice.visible":(e,t)=>t.lastPrice.visible,"lastPrice.upColor":(e,t)=>t.lastPrice.up,"lastPrice.downColor":(e,t)=>t.lastPrice.down,"lastPrice.style":(e,t)=>t.lastPrice.style,"lastPrice.width":(e,t)=>t.lastPrice.width,"volume.upColor":e=>U(e).up,"volume.downColor":e=>U(e).down,"sessionBreaks.color":(e,t)=>t.sessionBreaks.color,"sessionBreaks.style":(e,t)=>t.sessionBreaks.style,"sessionBreaks.width":(e,t)=>t.sessionBreaks.width,"highLow.color":(e,t)=>t.highLow.color,"trading.buyColor":(e,t)=>t.trading.buy,"trading.sellColor":(e,t)=>t.trading.sell,"trading.profitColor":(e,t)=>t.trading.profit,"trading.lossColor":(e,t)=>t.trading.loss,"trading.entryColor":(e,t)=>t.trading.entry,"markers.longColor":(e,t)=>t.markers.long,"markers.shortColor":(e,t)=>t.markers.short,"markers.neutralColor":(e,t)=>t.markers.neutral,"tradeZones.profitColor":(e,t)=>t.tradeZones.profit,"tradeZones.lossColor":(e,t)=>t.tradeZones.loss,"tradeZones.activeColor":(e,t)=>t.tradeZones.active,"drawings.handleColor":(e,t)=>t.drawings.handle},Jt={visible:`visible`,color:`color`,style:`style`,width:`width`};function Yt(e,t,n,r=`candlestick`){let i=n.split(`.`);if(i[0]===`series`){let n=Gt(e,e=>t[e],i[1]);switch(i[2]){case`upColor`:return n.up;case`downColor`:return n.down;case`wickUpColor`:return n.wickUp;case`wickDownColor`:return n.wickDown;case`color`:case`lineColor`:return n.line;case`lineWidth`:return n.lineWidth;case`topColor`:return n.top;case`bottomColor`:return n.bottom}}let a=Kt(e,r,t),o=a.style;return i[0]===`grid`||i[0]===`crosshair`&&(i[1]===`horizontal`||i[1]===`vertical`)?(i[0]===`grid`?o.grid:o.crosshair)[i[1]][Jt[i[2]]]:qt[n]?.(a,o)??null}var Xt={autoScale:!0,rightMargin:5,minBarSpacing:2,maxBarSpacing:30,grid:{visible:!0,hLineStyle:`solid`,vLineStyle:`solid`},crosshair:{mode:`magnet`}},Zt=[`1s`,`1m`,`3m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`6h`,`8h`,`12h`,`1d`,`3d`,`1w`,`1M`],Qt=[`1m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`1d`,`1w`,`1M`,`3M`,`6M`,`12M`],$t=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1d`,`1w`,`1M`],en=[`1m`,`5m`,`15m`,`1h`,`4h`,`1d`,`1w`],tn=8,nn=2,rn=70,an=30,on=60,sn=120,K={candlestick:`Candlestick`,line:`Line`,area:`Area`,bar:`OHLC Bar`,price:`Price`,volume:`Volume`,time:`Time`,open:`Open`,high:`High`,low:`Low`,close:`Close`,sma:`SMA`,ema:`EMA`,bollingerBands:`Bollinger Bands`,vwap:`VWAP`,ichimoku:`Ichimoku Cloud`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Keltner Channel`,donchianChannel:`Donchian Channel`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Std Dev`,volumeProfile:`Volume Profile`,accumulationDistribution:`A/D Line`,vroc:`VROC`,trendLine:`Trend Line`,horizontalLine:`Horizontal Line`,verticalLine:`Vertical Line`,ray:`Ray`,extendedLine:`Extended Line`,parallelChannel:`Parallel Channel`,regressionChannel:`Regression Channel`,fibRetracement:`Fibonacci Retracement`,fibExtension:`Fibonacci Extension`,rectangle:`Rectangle`,ellipse:`Ellipse`,triangle:`Triangle`,pitchfork:`Andrews' Pitchfork`,elliottWave:`Elliott Wave`,priceRange:`Price Range`,dateRange:`Date Range`,measure:`Measure`,textTool:`Text`,arrow:`Arrow`,clearAll:`Clear All`,buy:`Buy`,sell:`Sell`,buyLimit:`Buy Limit`,sellLimit:`Sell Limit`,buyStop:`Buy Stop`,sellStop:`Sell Stop`,stopLoss:`Stop Loss`,takeProfit:`Take Profit`,market:`Market`,limit:`Limit`,stop:`Stop`,cancel:`Cancel`,modify:`Modify`,quantity:`Qty`,pnl:`P&L`,activeOrders:`Active Orders`,positions:`Positions`,noOrders:`No active orders`,noPositions:`No open positions`,placeOrder:`Place Order`,rightClickToTrade:`Right-click chart to place orders`,ceiling:`Ceiling`,floor:`Floor`,reference:`Reference`,session:`Session`,preOpen:`Pre-Open`,continuous:`Continuous`,preClose:`Pre-Close`,closed:`Closed`,settings:`Settings`,theme:`Theme`,darkTheme:`Dark`,lightTheme:`Light`,tools:`Tools`,indicators:`Indicators`,overlays:`Overlays`,panels:`Panels`,orders:`Orders`,autoScale:`Auto Scale`,crosshair:`Crosshair`,grid:`Grid`,loading:`Loading...`,error:`Error`,numberDecimalSeparator:`.`,numberGroupSeparator:`,`},cn={candlestick:`Nến`,line:`Đường`,area:`Vùng`,bar:`Thanh OHLC`,price:`Giá`,volume:`Khối lượng`,time:`Thời gian`,open:`Mở`,high:`Cao`,low:`Thấp`,close:`Đóng`,sma:`SMA`,ema:`EMA`,bollingerBands:`Dải Bollinger`,vwap:`VWAP`,ichimoku:`Mây Ichimoku`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Kênh Keltner`,donchianChannel:`Kênh Donchian`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Độ lệch chuẩn`,volumeProfile:`Phân bổ KL`,accumulationDistribution:`Tích lũy/Phân phối`,vroc:`VROC`,trendLine:`Đường xu hướng`,horizontalLine:`Đường ngang`,verticalLine:`Đường dọc`,ray:`Tia`,extendedLine:`Đường kéo dài`,parallelChannel:`Kênh song song`,regressionChannel:`Kênh hồi quy`,fibRetracement:`Fibonacci thoái lui`,fibExtension:`Fibonacci mở rộng`,rectangle:`Hình chữ nhật`,ellipse:`Hình elip`,triangle:`Tam giác`,pitchfork:`Chĩa ba Andrews`,elliottWave:`Sóng Elliott`,priceRange:`Khoảng giá`,dateRange:`Khoảng thời gian`,measure:`Đo lường`,textTool:`Chữ`,arrow:`Mũi tên`,clearAll:`Xóa tất cả`,buy:`Mua`,sell:`Bán`,buyLimit:`Mua giới hạn`,sellLimit:`Bán giới hạn`,buyStop:`Mua chặn`,sellStop:`Bán chặn`,stopLoss:`Cắt lỗ`,takeProfit:`Chốt lời`,market:`Thị trường`,limit:`Giới hạn`,stop:`Dừng`,cancel:`Hủy`,modify:`Sửa`,quantity:`KL`,pnl:`Lãi/Lỗ`,activeOrders:`Lệnh chờ`,positions:`Vị thế`,noOrders:`Không có lệnh chờ`,noPositions:`Không có vị thế mở`,placeOrder:`Đặt lệnh`,rightClickToTrade:`Nhấp chuột phải để đặt lệnh`,ceiling:`Trần`,floor:`Sàn`,reference:`Tham chiếu`,session:`Phiên`,preOpen:`Trước giờ mở`,continuous:`Liên tục`,preClose:`Trước giờ đóng`,closed:`Đóng cửa`,settings:`Cài đặt`,theme:`Giao diện`,darkTheme:`Tối`,lightTheme:`Sáng`,tools:`Công cụ`,indicators:`Chỉ báo`,overlays:`Phủ lên`,panels:`Bảng`,orders:`Lệnh`,autoScale:`Tự co giãn`,crosshair:`Chữ thập`,grid:`Lưới`,loading:`Đang tải...`,error:`Lỗi`,numberDecimalSeparator:`,`,numberGroupSeparator:`.`},q=new Map([[`en`,K],[`vi`,cn]]),J=`en`,Y=K;function ln(e){J=e,Y=q.get(e)??K}function un(){return J}function dn(e){return Y[e]??K[e]??e}function fn(e,t){q.set(e,t)}function pn(e){return q.get(e??J)??K}function X(e,t=2,n){let r=q.get(n??J)??K,i=r.numberDecimalSeparator,a=r.numberGroupSeparator,[o,s]=e.toFixed(t).split(`.`),c=o.startsWith(`-`),l=c?o.slice(1):o,u=``;for(let e=l.length-1,t=0;e>=0;e--,t++)t>0&&t%3==0&&(u=a+u),u=l[e]+u;return c&&(u=`-`+u),s?u+i+s:u}function mn(e){return X(e,0,`vi`)}function hn(e,t){return e>=1e9?X(e/1e9,2,t??J)+`B`:e>=1e6?X(e/1e6,2,t??J)+`M`:e>=1e3?X(e/1e3,2,t??J)+`K`:X(e,0,t??J)}var Z={up:`#FF0000`,down:`#0000FF`,unchanged:`#FFD700`,ceiling:`#FF00FF`,floor:`#00FFFF`,reference:`#FFD700`},Q=[{name:`ATO`,startTime:`09:00`,endTime:`09:15`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],$=[{name:`Phiên 1`,startTime:`09:00`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],gn={type:`stock`,exchange:`HOSE`,currency:`VND`,pricePrecision:2,volumeUnit:10,priceStep:.05,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:Q,colorScheme:Z},_n={type:`stock`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,priceLimits:{enabled:!0,ceilingPercent:10,floorPercent:10},sessions:$,colorScheme:Z},vn={type:`stock`,exchange:`UPCOM`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,priceLimits:{enabled:!0,ceilingPercent:15,floorPercent:15},sessions:$,colorScheme:Z},yn={type:`crypto`,currency:`USDT`,pricePrecision:2,priceLimits:{enabled:!1}},bn={type:`stock`,exchange:`NYSE`,currency:`USD`,pricePrecision:2,priceStep:.01,priceLimits:{enabled:!1},sessions:[{name:`Pre-Market`,startTime:`04:00`,endTime:`09:30`,type:`preOpen`},{name:`Regular`,startTime:`09:30`,endTime:`16:00`,type:`continuous`},{name:`After-Hours`,startTime:`16:00`,endTime:`20:00`,type:`preClose`}]};function xn(e){return{...e,candleUp:Z.up,candleDown:Z.down,candleUpWick:Z.up,candleDownWick:Z.down,volumeUp:`rgba(255, 0, 0, 0.3)`,volumeDown:`rgba(0, 0, 255, 0.3)`}}function Sn(e,t){if(!t.priceLimits?.enabled||!t.priceLimits.ceilingPercent)return null;let n=t.priceLimits.ceilingPercent/100,r=(t.priceLimits.floorPercent??t.priceLimits.ceilingPercent)/100;return{ceiling:e*(1+n),floor:e*(1-r),reference:e}}function Cn(e){let t=new Date,n=`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`;for(let t of e)if(n>=t.startTime&&n<t.endTime)return t;return null}exports.CHART_STYLE_KEYS=t,exports.DARK_TERMINAL=H,exports.DARK_THEME=B,exports.DEFAULT_BAR_SPACING=nn,exports.DEFAULT_BAR_WIDTH=tn,exports.DEFAULT_CHART_OPTIONS=Xt,exports.DEFAULT_DRAWING_STYLE=n,exports.DEFAULT_FONT_FAMILY=Ot,exports.DEFAULT_PANEL_HEIGHT=sn,exports.DEFAULT_RECONNECT=o,exports.DEFAULT_SIGNAL_STYLE=i,exports.DEFAULT_STREAM_CONFIG=s,exports.DEFAULT_TIMEFRAME_FAVORITES=en,exports.DEFAULT_TRADE_ZONE_STYLE=a,exports.DEFAULT_TRADING_CONFIG=r,exports.HNX_SESSIONS=$,exports.HOSE_SESSIONS=Q,exports.LIGHT_THEME=V,exports.LayerType=e,exports.MARKET_CRYPTO=yn,exports.MARKET_HNX=_n,exports.MARKET_HOSE=gn,exports.MARKET_NYSE=bn,exports.MARKET_UPCOM=vn,exports.MIN_PANEL_HEIGHT=on,exports.PRICE_AXIS_WIDTH=rn,exports.PRICE_SOURCES=Xe,exports.TC_PALETTE=I,exports.TC_SERIES_COLORS=jt,exports.TIMEFRAMES_CRYPTO=Zt,exports.TIMEFRAMES_FOREX=$t,exports.TIMEFRAMES_STOCK=Qt,exports.TIME_AXIS_HEIGHT=an,exports.VN_COLORS=Z,exports.VOLUME_ALPHA=At,exports.alignToTimeframe=Ne,exports.autoPricePrecision=Ue,exports.barsAreDaily=Le,exports.chartStyleValue=Yt,exports.clamp=ne,exports.computePriceLimits=Sn,exports.computePriceRange=de,exports.computeTickStep=oe,exports.createVNTheme=xn,exports.detectPrecision=Ye,exports.drawingOption=vt,exports.en=K,exports.findBarIndex=ue,exports.formatFraction=Ge,exports.formatNumber=X,exports.formatPrice=D,exports.formatPriceScaleLabel=We,exports.formatTimestamp=Me,exports.formatVND=mn,exports.formatVolume=Je,exports.formatVolumeLoc=hn,exports.fractionTick=Ke,exports.getCurrentSession=Cn,exports.getLocale=un,exports.getLocaleStrings=pn,exports.hexToRgba=pe,exports.indicatorSource=et,exports.inverseLerp=ie,exports.isDateOnly=Fe,exports.isPriceSource=Ze,exports.isTimeFrame=je,exports.isValidTimeZone=Se,exports.lerp=re,exports.lerpColor=he,exports.lineDash=Wt,exports.marketStatus=ut,exports.mergeBar=fe,exports.niceNumber=m,exports.normalizeBar=ce,exports.normalizeBarTime=se,exports.offsetAt=S,exports.parseIndicatorSource=tt,exports.parseTimeframe=w,exports.pickBaseTimeframe=at,exports.priceFormatterFor=qe,exports.rankSymbols=st,exports.readChartStyleOverrides=Bt,exports.readChartTypeOptions=Dt,exports.readIndicatorPlotStyles=Ut,exports.readNews=te,exports.readPaneStyle=Vt,exports.readQuote=l,exports.registerLocale=fn,exports.resampleBars=rt,exports.resolveChartTheme=Kt,exports.resolveDrawingOptions=yt,exports.resolveVolumeColors=U,exports.roundToStep=ae,exports.sanitizeDrawingOptions=gt,exports.sanitizeDrawingStyle=Et,exports.sessionMinute=k,exports.setLocale=ln,exports.sliceVisibleData=le,exports.sourcePrice=Qe,exports.stepDecimals=ct,exports.t=dn,exports.tickBarCount=Ae,exports.timeParts=Pe,exports.timeframeBucketStart=Be,exports.timeframeToMs=T,exports.tzLabel=Re,exports.vi=cn,exports.volumeColor=L,exports.wallToUtc=we,exports.withAlpha=me,exports.zoneOffsetMinutes=b,exports.zonedDateFormatter=Ee;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=function(e){return e[e.Background=0]=`Background`,e[e.Main=1]=`Main`,e[e.Panel=2]=`Panel`,e[e.Overlay=3]=`Overlay`,e[e.UI=4]=`UI`,e[e.Hover=5]=`Hover`,e}({}),t={"background.color":`color`,"panes.background":`color`,"panes.separatorColor":`color`,"panes.titleColor":`color`,"grid.horizontal.visible":`boolean`,"grid.horizontal.color":`color`,"grid.horizontal.style":`lineStyle`,"grid.horizontal.width":`width`,"grid.vertical.visible":`boolean`,"grid.vertical.color":`color`,"grid.vertical.style":`lineStyle`,"grid.vertical.width":`width`,"crosshair.horizontal.visible":`boolean`,"crosshair.horizontal.color":`color`,"crosshair.horizontal.style":`lineStyle`,"crosshair.horizontal.width":`width`,"crosshair.vertical.visible":`boolean`,"crosshair.vertical.color":`color`,"crosshair.vertical.style":`lineStyle`,"crosshair.vertical.width":`width`,"crosshair.labelBackground":`color`,"crosshair.labelTextColor":`color`,"axis.price.lineColor":`color`,"axis.price.textColor":`color`,"axis.time.lineColor":`color`,"axis.time.textColor":`color`,"legend.textColor":`color`,"legend.labelColor":`color`,"watermark.color":`color`,"lastPrice.visible":`boolean`,"lastPrice.upColor":`color`,"lastPrice.downColor":`color`,"lastPrice.style":`lineStyle`,"lastPrice.width":`width`,"volume.upColor":`color`,"volume.downColor":`color`,"sessionBreaks.color":`color`,"sessionBreaks.style":`lineStyle`,"sessionBreaks.width":`width`,"highLow.color":`color`,"trading.buyColor":`color`,"trading.sellColor":`color`,"trading.profitColor":`color`,"trading.lossColor":`color`,"trading.entryColor":`color`,"markers.longColor":`color`,"markers.shortColor":`color`,"markers.neutralColor":`color`,"tradeZones.profitColor":`color`,"tradeZones.lossColor":`color`,"tradeZones.activeColor":`color`,"drawings.handleColor":`color`,"series.candlestick.upColor":`color`,"series.candlestick.downColor":`color`,"series.candlestick.wickUpColor":`color`,"series.candlestick.wickDownColor":`color`,"series.heikinAshi.upColor":`color`,"series.heikinAshi.downColor":`color`,"series.heikinAshi.wickUpColor":`color`,"series.heikinAshi.wickDownColor":`color`,"series.hollowCandle.upColor":`color`,"series.hollowCandle.downColor":`color`,"series.volumeCandles.upColor":`color`,"series.volumeCandles.downColor":`color`,"series.volumeCandles.wickUpColor":`color`,"series.volumeCandles.wickDownColor":`color`,"series.equivolume.upColor":`color`,"series.equivolume.downColor":`color`,"series.equivolume.wickUpColor":`color`,"series.equivolume.wickDownColor":`color`,"series.bar.upColor":`color`,"series.bar.downColor":`color`,"series.hiLo.upColor":`color`,"series.hiLo.downColor":`color`,"series.renko.upColor":`color`,"series.renko.downColor":`color`,"series.lineBreak.upColor":`color`,"series.lineBreak.downColor":`color`,"series.rangeBars.upColor":`color`,"series.rangeBars.downColor":`color`,"series.kagi.upColor":`color`,"series.kagi.downColor":`color`,"series.pointAndFigure.upColor":`color`,"series.pointAndFigure.downColor":`color`,"series.baseline.upColor":`color`,"series.baseline.downColor":`color`,"series.baseline.lineWidth":`width`,"series.line.color":`color`,"series.line.lineWidth":`width`,"series.stepLine.color":`color`,"series.stepLine.lineWidth":`width`,"series.lineWithMarkers.color":`color`,"series.lineWithMarkers.lineWidth":`width`,"series.area.lineColor":`color`,"series.area.lineWidth":`width`,"series.area.topColor":`color`,"series.area.bottomColor":`color`,"series.hlcArea.lineColor":`color`,"series.hlcArea.lineWidth":`width`,"series.hlcArea.topColor":`color`,"series.hlcArea.bottomColor":`color`},n={color:`#4c8dff`,lineWidth:1,lineStyle:`solid`,fillColor:`rgba(76, 141, 255, 0.1)`,fillOpacity:.1,fontSize:12},r={enabled:!0,orderColors:{buy:`#1fa874`,sell:`#e8505b`},positionColors:{profit:`#1fa874`,loss:`#e8505b`,entry:`#4c8dff`},depthOverlay:{enabled:!1,bidColor:`rgba(31, 168, 116,0.15)`,askColor:`rgba(232, 80, 91,0.15)`,maxWidth:100},contextMenu:{enabled:!0},lineButtons:{cancel:!0,close:!0,reverse:!0,removeStops:!0},fillMarks:!0,pricePrecision:2,dragThreshold:3},i={longColor:`#1fa874`,shortColor:`#e8505b`,neutralColor:`#9E9E9E`,arrowSize:12,showLabel:!0,showConfidence:!0},a={profitColor:`#1fa874`,lossColor:`#e8505b`,activeColor:`#4c8dff`,fillOpacity:.12,borderWidth:1,showLabel:!0,showPnl:!0},o={enabled:!0,maxRetries:1/0,baseDelay:1e3,maxDelay:3e4,backoffMultiplier:2},s={historyLimit:500,autoScroll:!0,showCurrentPriceLine:!0,aggregateTicks:!1},c=[`change`,`changePercent`,`open`,`high`,`low`,`prevClose`,`volume`,`bid`,`ask`,`time`];function l(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.symbol==`string`?t.symbol.trim():``;if(!n||n.length>64||!u(t.last))return null;let r={symbol:n,last:t.last};for(let e of c){let n=t[e];u(n)&&(r[e]=n)}let i=r.prevClose??r.open;if(r.change===void 0&&i!==void 0&&(r.change=r.last-i),r.changePercent===void 0&&r.change!==void 0){let e=r.last-r.change;e!==0&&(r.changePercent=r.change/e*100)}return r}function u(e){return typeof e==`number`&&Number.isFinite(e)}var d=300,f=1e3,p=(e,t)=>{if(typeof e!=`string`)return;let n=e.trim();return n?n.slice(0,t):void 0},ee=e=>{if(typeof e==`string`)try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`?t.href:void 0}catch{return}};function te(e,t=20){if(!Array.isArray(e))return[];let n=[];for(let t of e){if(!t||typeof t!=`object`)continue;let e=t,r=p(e.title,d);if(!r||typeof e.time!=`number`||!Number.isFinite(e.time))continue;let i={title:r,time:e.time},a=ee(e.url);a&&(i.url=a);let o=p(e.source,d);o&&(i.source=o);let s=p(e.summary,f);s&&(i.summary=s);let c=p(e.id,d);c&&(i.id=c),n.push(i)}return n.sort((e,t)=>t.time-e.time).slice(0,Math.max(0,t))}function ne(e,t,n){return Math.max(t,Math.min(n,e))}function re(e,t,n){return e+(t-e)*n}function ie(e,t,n){return e===t?0:(n-e)/(t-e)}function ae(e,t){return Math.round(e/t)*t}function m(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function oe(e,t,n){return m(m(t-e,!1)/(n-1),!0)}function se(e){return e>0xe8d4a51000?e:e*1e3}function ce(e){return{time:se(e.time??e.t??0),open:e.open??e.o??0,high:e.high??e.h??0,low:e.low??e.l??0,close:e.close??e.c??0,volume:e.volume??e.v??0}}function le(e,t,n){let r=Math.max(0,t),i=Math.min(e.length,n+1);return e.slice(r,i)}function ue(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1;if(e[i].time<t)n=i+1;else if(e[i].time>t)r=i-1;else return i}return n}function de(e,t,n,r=.05){if(e.length===0)return{min:0,max:1};let i=Math.max(0,t),a=Math.min(e.length-1,n),o=1/0,s=-1/0;for(let t=i;t<=a;t++)e[t].low<o&&(o=e[t].low),e[t].high>s&&(s=e[t].high);if(o===1/0)return{min:0,max:1};let c=s-o||1;return{min:o-c*r,max:s+c*r}}function fe(e,t){return{...e,high:Math.max(e.high,t.price),low:Math.min(e.low,t.price),close:t.price,volume:e.volume+(t.volume??0),time:t.time}}function pe(e,t=1){let n=e.slice(1);return(n.length===3||n.length===4)&&(n=[...n.slice(0,3)].map(e=>e+e).join(``)),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}function me(e,t){let n=e.trim();if(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(n))return pe(n,t);let r=n.match(/^rgba?\(\s*(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)[\s,]+(\d+(?:\.\d+)?)/i);return r?`rgba(${r[1]}, ${r[2]}, ${r[3]}, ${t})`:e}function he(e,t,n){let r=e=>(e=e.replace(`#`,``),e.length===3&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),{r:parseInt(e.slice(0,2),16),g:parseInt(e.slice(2,4),16),b:parseInt(e.slice(4,6),16)}),i=r(e),a=r(t);return`rgb(${Math.round(i.r+(a.r-i.r)*n)},${Math.round(i.g+(a.g-i.g)*n)},${Math.round(i.b+(a.b-i.b)*n)})`}var h=6e4,g=1440*h,_=15*h,ge=8192,v=7*g,_e=4096,ve=new Set([`UTC`,`Etc/UTC`,`GMT`,`Etc/GMT`,`UCT`,`Etc/UCT`,`Universal`,`Etc/Universal`,`Zulu`,`Etc/Zulu`]),ye=new Map,y=new Map,be=new Map;function xe(e){let t=ye.get(e);return t||(t=new Intl.DateTimeFormat(`en-US`,{timeZone:e,hourCycle:`h23`,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`}),ye.set(e,t)),t}function b(e){if(!e)return!1;try{return xe(e),!0}catch{return!1}}function x(e,t){if(!Number.isFinite(t)||ve.has(e))return 0;let n=be.get(e);n||(n=new Map,be.set(e,n));let r=Math.floor(t/v),i=n.get(r);return i||(i=Se(e,r*v),n.size>=_e&&n.clear(),n.set(r,i)),t<i.change?i.before:i.after}function Se(e,t){let n=S(e,t),r=t+v-_,i=S(e,r);if(i===n)return{before:n,change:1/0,after:i};let a=t;for(;r-a>_;){let t=a+Math.floor((r-a)/_/2)*_;S(e,t)===n?a=t:r=t}return{before:n,change:r,after:i}}function S(e,t){let n=Math.floor(t/_),r=`${e}|${n}`,i=y.get(r);if(i!==void 0)return i;let a=n*_,o=1970,s=1,c=1,l=0,u=0,d=0;for(let t of xe(e).formatToParts(new Date(a))){let e=Number(t.value);switch(t.type){case`year`:o=e;break;case`month`:s=e;break;case`day`:c=e;break;case`hour`:l=e%24;break;case`minute`:u=e;break;case`second`:d=e;break}}let f=Math.round((Date.UTC(o,s-1,c,l,u,d)-a)/h);return y.size>=ge&&y.clear(),y.set(r,f),f}function C(e,t){return e===null?-new Date(t).getTimezoneOffset():typeof e==`number`?e:x(e,t)}function Ce(e,t){let n=e-C(t,e-g)*h;if(n+C(t,n)*h===e)return n;let r=e-C(t,e+g)*h;return r+C(t,r)*h===e?r:n}var we=new Map;function Te(e,t,n){let r=`${e}|${JSON.stringify(t)}|${n===null?`local`:typeof n==`number`?`fixed:${n}`:n}`,i=we.get(r);if(i)return i;let a=n===null?void 0:typeof n==`number`?`UTC`:n,o;try{o=new Intl.DateTimeFormat(e,{...t,timeZone:a})}catch{o=new Intl.DateTimeFormat(`en-US`,{...t,timeZone:a})}let s=typeof n==`number`?n*h:0;return i=e=>o.format(new Date(e+s)),we.set(r,i),i}var Ee={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"3m":18e4,"5m":3e5,"15m":9e5,"30m":18e5,"45m":27e5,"1h":36e5,"2h":72e5,"3h":108e5,"4h":144e5,"6h":216e5,"8h":288e5,"12h":432e5,"1d":864e5,"2d":1728e5,"3d":2592e5,"1w":6048e5,"2w":12096e5,"1M":2592e6,"3M":7776e6,"6M":15552e6,"12M":31536e6},w={s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,M:2592e6},De=/^([1-9]\d*)([smhdwM])$/;function T(e){let t=De.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)?{count:n,unit:t[2]}:null}var Oe=1e6;function ke(e){let t=/^([1-9]\d*)T$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isSafeInteger(n)&&n<=Oe?n:null}function Ae(e){return T(e)!==null}function E(e){let t=Ee[e];if(t!==void 0)return t;let n=T(e);return n?n.count*w[n.unit]:NaN}function je(e,t){let n=new Date(e),r=E(t);return r>=864e5?n.toLocaleDateString(void 0,{month:`short`,day:`numeric`}):r>=36e5?n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`}):n.toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Me(e,t){let n=E(t);return Math.floor(e/n)*n}function Ne(e,t){if(t===null){let t=new Date(e);return{year:t.getFullYear(),month:t.getMonth()+1,day:t.getDate(),hours:t.getHours(),minutes:t.getMinutes()}}let n=new Date(e+C(t,e)*6e4);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hours:n.getUTCHours(),minutes:n.getUTCMinutes()}}function Pe(e){return e.hours===0&&e.minutes===0}var Fe=20*36e5;function Ie(e){let t=Math.min(e.length,64);if(t<2)return;let n=e=>e>0xe8d4a51000?e:e*1e3,r=1/0;for(let i=1;i<t;i++){let t=Math.abs(n(e[i].time)-n(e[i-1].time));t>0&&t<r&&(r=t)}return r===1/0?void 0:r>=Fe}function Le(e,t=Date.now()){let n=C(e,t),r=n>=0?`+`:`-`,i=Math.abs(n),a=Math.floor(i/60),o=i%60;return o===0?`UTC${r}${a}`:`UTC${r}${a}:${String(o).padStart(2,`0`)}`}var Re=Date.UTC(1970,0,5);function ze(e,t,n=1){let{count:r,unit:i}=T(t)??{count:1,unit:`m`};if(i===`s`||i===`m`||i===`h`||i===`d`){let t=r*w[i];return Math.floor(e/t)*t}let a=new Date(e);if(i===`w`){let e=w.d,t=(a.getUTCDay()-n+7)%7,i=Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate()-t);if(r<=1)return i;let o=Math.floor((i-Re)/(7*e));return Re+Math.floor(o/r)*r*7*e}let o=a.getUTCFullYear()*12+a.getUTCMonth(),s=Math.floor(o/r)*r;return Date.UTC(Math.floor(s/12),s%12,1)}var Be=64,D=new Map;function Ve(e,t){let n=`${e}|${t}`,r=D.get(n);return r||(D.size>=Be&&D.clear(),r=new Intl.NumberFormat(e,{minimumFractionDigits:t,maximumFractionDigits:t}),D.set(n,r)),r}function He(e,t=2,n=`en-US`){return Ve(n,t).format(e)}function Ue(e,t){if(!(t>e)||!Number.isFinite(e)||!Number.isFinite(t))return 2;let n=oe(e,t,8);return n>0&&n<1?Math.ceil(-Math.log10(n))+1:2}function We(e,t,n,r=2,i=`en-US`){if((t===`percentage`||t===`indexedTo100`)&&n&&n!==0){if(t===`percentage`){let t=(e/n-1)*100;return`${t>0?`+`:``}${t.toFixed(2)}%`}return He(e/n*100,2,i)}return He(e,r,i)}function Ge(e,t,n=1){let r=Number.isInteger(n)&&n>1?n:1;if(!Number.isFinite(e)||!Number.isInteger(t)||t<2)return String(e);let i=t*r,a=Math.round(Math.abs(e)*i),o=Math.floor(a/i),s=a-o*i,c=Math.floor(s/r),l=String(t-1).length,u=r>1?String(Math.floor((s-c*r)/r*10)):``;return`${e<0&&a>0?`-`:``}${o}'${String(c).padStart(l,`0`)}${u}`}function Ke(e){if(!Number.isInteger(e.denominator)||e.denominator<2)return null;let t=Number.isInteger(e.subDenominator)&&(e.subDenominator??0)>1?e.subDenominator:1;return 1/(e.denominator*t)}function qe(e){return e?typeof e==`function`?e:Ke(e)===null?null:t=>Ge(t,e.denominator,e.subDenominator):null}function Je(e){return e>=1e9?(e/1e9).toFixed(2)+`B`:e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(2)+`K`:e.toFixed(0)}function Ye(e){let t=0;for(let n of e){let e=n.toString(),r=e.indexOf(`.`);r>=0&&(t=Math.max(t,e.length-r-1))}return Math.min(t,8)}var Xe=[`close`,`open`,`high`,`low`,`hl2`,`hlc3`,`ohlc4`,`hlcc4`];function Ze(e){return typeof e==`string`&&Xe.includes(e)}function Qe(e,t){switch(t){case`open`:return e.open;case`high`:return e.high;case`low`:return e.low;case`hl2`:return(e.high+e.low)/2;case`hlc3`:return(e.high+e.low+e.close)/3;case`ohlc4`:return(e.open+e.high+e.low+e.close)/4;case`hlcc4`:return(e.high+e.low+2*e.close)/4;default:return e.close}}var $e=/^ind:([^:]+):(.+)$/;function et(e,t){return`ind:${e}:${t}`}function tt(e){if(typeof e!=`string`)return null;let t=$e.exec(e);return t?{instanceId:t[1],key:t[2]}:null}var nt=864e5;function rt(e,t,n=1){let r=[],i=null;for(let a of e){let e=ze(a.time,t,n);i===null||e!==i.time?(i={time:e,open:a.open,high:a.high,low:a.low,close:a.close,volume:a.volume},r.push(i)):(a.high>i.high&&(i.high=a.high),a.low<i.low&&(i.low=a.low),i.close=a.close,i.volume+=a.volume)}return r}var it=e=>e===`s`||e===`m`||e===`h`||e===`d`;function at(e,t){let n=T(e),r=T(t);if(!n||!r)return!1;let i=E(e);return n.unit===`d`&&n.count>1?!1:it(r.unit)?it(n.unit)&&E(t)%i===0:n.unit===r.unit?r.count%n.count===0:it(n.unit)&&nt%i===0}function ot(e,t){let n=null,r=0;for(let i of t){if(!at(i,e))continue;let t=E(i);t>r&&(n=i,r=t)}return n}function st(e,t){if(!e)return 0;if(e===t)return 1e3;if(e.startsWith(t))return 600-Math.min(100,e.length-t.length);let n=e.indexOf(t);return n>=0?300-Math.min(100,n):0}function ct(e,t,n=50,r){let i=t.trim().toUpperCase();if(!i)return e.slice(0,n);let a=[];for(let t of e){let e=Math.max(st(t.symbol.toUpperCase(),i),st((t.description??``).toUpperCase(),i)*.8);e>0&&a.push({info:t,score:e+(r?.(t)??0)})}return a.sort((e,t)=>t.score-e.score||e.info.symbol.localeCompare(t.info.symbol)),a.slice(0,n).map(e=>e.info)}function lt(e){let t=typeof e==`number`?e:Number(e);if(!Number.isFinite(t)||t<=0)return 0;for(let e=0;e<=12;e++){let n=t*10**e;if(Math.abs(n-Math.round(n))<1e-9*Math.max(1,n))return e}return 12}function ut(e){let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return n===24&&r===0?1440:n<24&&r<60?n*60+r:null}var O=864e5,k=6e4,dt=8;function ft(e,t){let n=e?.timezone,r=(e?.sessions??[]).flatMap(e=>{let t=ut(e.start),n=ut(e.end);return t===null||n===null||t===n?[]:[{start:t,end:n,days:Array.isArray(e.days)?e.days:null}]});if(!n||!b(n)||r.length===0||!Number.isFinite(t))return{state:`always`,next:null};let i=x(n,t)*k,a=Math.floor((t+i)/O)*O,o=e=>e-x(n,e-x(n,e-i)*k)*k,s=[];for(let e=-1;e<=dt;e++){let t=a+e*O,n=(Math.floor(t/O)+4)%7;for(let e of r){if(e.days&&!e.days.includes(n))continue;let r=t+e.start*k,i=(e.end>e.start?t:t+O)+e.end*k;s.push([o(r),o(i)])}}s.sort((e,t)=>e[0]-t[0]);let c=[];for(let[e,t]of s){let n=c[c.length-1];n&&e<=n[1]?c[c.length-1]=[n[0],Math.max(n[1],t)]:c.push([e,t])}let l=c.find(([e,n])=>e<=t&&t<n);if(l)return{state:`open`,next:l[1]};let u=c.find(([e])=>e>t);return{state:`closed`,next:u?u[0]:null}}var pt=48,mt=2e3,ht=1e4;function gt(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(t.length>=pt)break;if(typeof n!=`object`||!n)continue;let{value:e,visible:r,color:i}=n;if(typeof e!=`number`||!Number.isFinite(e)||Math.abs(e)>ht||r!==void 0&&typeof r!=`boolean`)continue;let a={value:e,visible:r??!0};typeof i==`string`&&i&&(a.color=i),t.push(a)}return t}function _t(e,t){switch(e.kind){case`boolean`:return typeof t==`boolean`?t:void 0;case`number`:return typeof t!=`number`||!Number.isFinite(t)?void 0:Math.min(e.max??1/0,Math.max(e.min??-1/0,t));case`choice`:return typeof t==`string`&&e.choices.some(e=>e.value===t)?t:void 0;case`levels`:return gt(t);case`text`:return typeof t==`string`?t.slice(0,mt):void 0}}function vt(e,t){if(!e||typeof t!=`object`||!t)return{};let n={};for(let[r,i]of Object.entries(t)){let t=e[r];if(!t)continue;let a=_t(t,i);a!==void 0&&(n[r]=a)}return n}function yt(e){return Array.isArray(e)?e.map(e=>({...e})):e}function bt(e,t,n){let r=e?.[n];return r?yt((t&&n in t?_t(r,t[n]):void 0)??r.default):t?.[n]}function xt(e,t){let n={};for(let r of Object.keys(e??{}))n[r]=bt(e,t,r);return n}var St=[`solid`,`dashed`,`dotted`],Ct=64,wt=2e3,Tt=20,Et=200;function A(e,t,n){return typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(t,e)):void 0}function Dt(e){return typeof e==`string`&&e.length>0&&e.length<=Ct?e:void 0}function Ot(e){if(typeof e!=`object`||!e)return{};let t=e,n={},r=Dt(t.color);r!==void 0&&(n.color=r);let i=A(t.lineWidth,.5,Tt);i!==void 0&&(n.lineWidth=i),St.includes(t.lineStyle)&&(n.lineStyle=t.lineStyle);let a=Dt(t.fillColor);a!==void 0&&(n.fillColor=a);let o=A(t.fillOpacity,0,1);o!==void 0&&(n.fillOpacity=o);let s=A(t.fontSize,6,Et);return s!==void 0&&(n.fontSize=s),typeof t.text==`string`&&(n.text=t.text.slice(0,wt)),n}var j=e=>typeof e==`number`&&Number.isFinite(e)&&e>0,M=(e,t,n)=>typeof e==`number`&&Number.isInteger(e)&&e>=t&&e<=n,N=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function kt(e){if(!N(e))return{};let t={};if(N(e.renko)){let{boxSize:n,atrPeriod:r}=e.renko;t.renko={...j(n)||n===`atr`?{boxSize:n}:{},...M(r,1,500)?{atrPeriod:r}:{}}}if(N(e.lineBreak)){let{lines:n}=e.lineBreak;t.lineBreak=M(n,1,10)?{lines:n}:{}}if(N(e.kagi)){let{reversal:n,reversalType:r}=e.kagi;t.kagi={...j(n)?{reversal:n}:{},...r===`percent`||r===`price`?{reversalType:r}:{}}}if(N(e.pointAndFigure)){let{boxSize:n,reversal:r}=e.pointAndFigure;t.pointAndFigure={...j(n)||n===`auto`?{boxSize:n}:{},...M(r,1,10)?{reversal:r}:{}}}if(N(e.rangeBars)){let{range:n}=e.rangeBars;t.rangeBars=j(n)||n===`auto`?{range:n}:{}}return t}var At=`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,jt={family:At,sizeSmall:10,sizeMedium:12,sizeLarge:14},P={amber:`#f2a93b`,up:`#1fa874`,down:`#e8505b`,ochre:`#c98316`,blue:`#4c8dff`,violet:`#a57cff`,cyan:`#1398a8`,rose:`#e25592`,neutral:`#7d8696`,ink:`#0c1016`},Mt=.22;function F(e){return me(e,Mt)}var I=`#2eb88a`,L=`#e85a67`,Nt=[P.blue,P.ochre,P.violet,P.cyan,P.rose],R={name:`dark`,background:P.ink,text:`#d9dde4`,textSecondary:`#7d8696`,grid:`#161b23`,crosshair:`#8a93a3`,candleUp:I,candleDown:L,candleUpWick:I,candleDownWick:L,lineColor:P.amber,areaTopColor:`rgba(242, 169, 59, 0.32)`,areaBottomColor:`rgba(242, 169, 59, 0.0)`,volumeUp:F(I),volumeDown:F(L),axisLine:`#1f2630`,axisLabel:`#9aa3b2`,axisLabelBackground:`#1f2630`,font:jt},z={name:`light`,background:`#ffffff`,text:`#0f131a`,textSecondary:`#6b7380`,grid:`#eef0f3`,crosshair:`#8a93a3`,candleUp:`#16a36a`,candleDown:`#d9414f`,candleUpWick:`#16a36a`,candleDownWick:`#d9414f`,lineColor:`#c77a0a`,areaTopColor:`rgba(199, 122, 10, 0.24)`,areaBottomColor:`rgba(199, 122, 10, 0.0)`,volumeUp:F(`#16a36a`),volumeDown:F(`#d9414f`),axisLine:`#dde1e7`,axisLabel:`#5b6472`,axisLabelBackground:`#eef0f3`,font:jt},B={name:`terminal`,background:`#0E0E0E`,text:`#C0C0C0`,textSecondary:`#8A8A8A`,grid:`#1A1A1A`,crosshair:`#666666`,candleUp:`#00FF87`,candleDown:`#FF3B4D`,candleUpWick:`#00FF87`,candleDownWick:`#FF3B4D`,lineColor:`#3D8BFD`,areaTopColor:`rgba(61, 139, 253, 0.3)`,areaBottomColor:`rgba(61, 139, 253, 0.0)`,volumeUp:`rgba(0, 255, 135, 0.2)`,volumeDown:`rgba(255, 59, 77, 0.2)`,axisLine:`#1A1A1A`,axisLabel:`#8A8A8A`,axisLabelBackground:`#1A1A1A`,font:{family:`'Roboto Mono', 'JetBrains Mono', 'SF Mono', Consolas, monospace`,sizeSmall:10,sizeMedium:12,sizeLarge:14}},Pt=new Set([R.volumeUp,R.volumeDown,z.volumeUp,z.volumeDown,B.volumeUp,B.volumeDown]);function V(e){let t=(e,t)=>{if(!Pt.has(e))return e;let n=F(t);return n===t?e:n};return{up:t(e.volumeUp,e.candleUp),down:t(e.volumeDown,e.candleDown)}}var Ft=[`solid`,`dashed`,`dotted`],It=20,Lt=64,Rt=2,zt=[/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,/^[a-z]{3,30}$/i,/^(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\([0-9a-z.,%/\s-]*\)$/i];function H(e){return typeof e==`string`&&e.length<=Lt&&zt.some(t=>t.test(e.trim()))}function Bt(e,t){switch(e){case`color`:return H(t);case`lineStyle`:return Ft.includes(t);case`width`:return typeof t==`number`&&Number.isFinite(t)&&t>0&&t<=It;case`boolean`:return typeof t==`boolean`}}function Vt(e){return Object.prototype.hasOwnProperty.call(t,e)}function Ht(e){let n={},r=[];if(typeof e!=`object`||!e||Array.isArray(e))return{overrides:{},rejected:r};for(let[i,a]of Object.entries(e))Vt(i)?a===null?n[i]=null:Bt(t[i],a)?n[i]=a:r.push(i):r.push(i);return{overrides:n,rejected:r}}function Ut(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let{background:t,separator:n}=e,r={...H(t)?{background:t}:{},...H(n)?{separator:n}:{}};return Object.keys(r).length>0?r:null}var Wt=/^[A-Za-z0-9_]{1,32}$/;function Gt(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e)){if(!Wt.test(n)||typeof r!=`object`||!r)continue;let{lineStyle:e,visible:i}=r,a={...Ft.includes(e)?{lineStyle:e}:{},...typeof i==`boolean`?{visible:i}:{}};Object.keys(a).length>0&&(t[n]=a)}return Object.keys(t).length>0?t:void 0}function Kt(e,t,n=1){return e===`solid`?[]:e===`dotted`?[n,n*2]:[...t]}function qt(e,t,n){let r=e=>t(`series.${n}.${e}`),i=r(`upColor`)??t(`series.candlestick.upColor`),a=r(`downColor`)??t(`series.candlestick.downColor`),o=i??e.candleUp,s=a??e.candleDown;return{up:o,down:s,wickUp:r(`wickUpColor`)??t(`series.candlestick.wickUpColor`)??(i===void 0?e.candleUpWick:o),wickDown:r(`wickDownColor`)??t(`series.candlestick.wickDownColor`)??(a===void 0?e.candleDownWick:s),line:r(`color`)??r(`lineColor`)??t(`series.line.color`)??e.lineColor,lineWidth:r(`lineWidth`)??t(`series.line.lineWidth`)??Rt,top:r(`topColor`)??t(`series.area.topColor`)??e.areaTopColor,bottom:r(`bottomColor`)??t(`series.area.bottomColor`)??e.areaBottomColor}}function U(e,t,n){return{visible:e(`${t}.visible`)??n.visible,color:e(`${t}.color`)??n.color,style:e(`${t}.style`)??n.style,width:e(`${t}.width`)??n.width}}function Jt(e,t,n){let{style:r,...i}=e,a=n,o=e=>a[e],s=qt(i,o,t),c=o(`background.color`)??i.background,l=(e,t)=>o(e)??t,u=e=>o(e)??null,d={panes:{background:l(`panes.background`,c),separator:l(`panes.separatorColor`,i.axisLine),title:l(`panes.titleColor`,i.textSecondary)},grid:{horizontal:U(o,`grid.horizontal`,{visible:!0,color:i.grid,style:`solid`,width:1}),vertical:U(o,`grid.vertical`,{visible:!0,color:i.grid,style:`solid`,width:1})},crosshair:{horizontal:U(o,`crosshair.horizontal`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),vertical:U(o,`crosshair.vertical`,{visible:!0,color:i.crosshair,style:`dashed`,width:1}),labelBackground:l(`crosshair.labelBackground`,i.text),labelText:l(`crosshair.labelTextColor`,c)},axis:{price:{line:l(`axis.price.lineColor`,i.axisLine),text:l(`axis.price.textColor`,i.axisLabel)},time:{line:l(`axis.time.lineColor`,i.axisLine),text:l(`axis.time.textColor`,i.axisLabel)}},legend:{text:l(`legend.textColor`,i.text),label:l(`legend.labelColor`,i.textSecondary)},watermark:{color:o(`watermark.color`)??null},lastPrice:{visible:o(`lastPrice.visible`)??!0,up:l(`lastPrice.upColor`,s.up),down:l(`lastPrice.downColor`,s.down),style:o(`lastPrice.style`)??`dashed`,width:o(`lastPrice.width`)??1},sessionBreaks:{color:o(`sessionBreaks.color`)??null,style:o(`sessionBreaks.style`)??null,width:o(`sessionBreaks.width`)??null},highLow:{color:o(`highLow.color`)??null},series:{lineWidth:s.lineWidth},trading:{buy:u(`trading.buyColor`),sell:u(`trading.sellColor`),profit:u(`trading.profitColor`),loss:u(`trading.lossColor`),entry:u(`trading.entryColor`)},markers:{long:u(`markers.longColor`),short:u(`markers.shortColor`),neutral:u(`markers.neutralColor`)},tradeZones:{profit:u(`tradeZones.profitColor`),loss:u(`tradeZones.lossColor`),active:u(`tradeZones.activeColor`)},drawings:{handle:u(`drawings.handleColor`)}};return{...i,background:c,candleUp:s.up,candleDown:s.down,candleUpWick:s.wickUp,candleDownWick:s.wickDown,lineColor:s.line,areaTopColor:s.top,areaBottomColor:s.bottom,volumeUp:l(`volume.upColor`,i.volumeUp),volumeDown:l(`volume.downColor`,i.volumeDown),style:d}}var Yt={"background.color":e=>e.background,"panes.background":(e,t)=>t.panes.background,"panes.separatorColor":(e,t)=>t.panes.separator,"panes.titleColor":(e,t)=>t.panes.title,"crosshair.labelBackground":(e,t)=>t.crosshair.labelBackground,"crosshair.labelTextColor":(e,t)=>t.crosshair.labelText,"axis.price.lineColor":(e,t)=>t.axis.price.line,"axis.price.textColor":(e,t)=>t.axis.price.text,"axis.time.lineColor":(e,t)=>t.axis.time.line,"axis.time.textColor":(e,t)=>t.axis.time.text,"legend.textColor":(e,t)=>t.legend.text,"legend.labelColor":(e,t)=>t.legend.label,"watermark.color":(e,t)=>t.watermark.color,"lastPrice.visible":(e,t)=>t.lastPrice.visible,"lastPrice.upColor":(e,t)=>t.lastPrice.up,"lastPrice.downColor":(e,t)=>t.lastPrice.down,"lastPrice.style":(e,t)=>t.lastPrice.style,"lastPrice.width":(e,t)=>t.lastPrice.width,"volume.upColor":e=>V(e).up,"volume.downColor":e=>V(e).down,"sessionBreaks.color":(e,t)=>t.sessionBreaks.color,"sessionBreaks.style":(e,t)=>t.sessionBreaks.style,"sessionBreaks.width":(e,t)=>t.sessionBreaks.width,"highLow.color":(e,t)=>t.highLow.color,"trading.buyColor":(e,t)=>t.trading.buy,"trading.sellColor":(e,t)=>t.trading.sell,"trading.profitColor":(e,t)=>t.trading.profit,"trading.lossColor":(e,t)=>t.trading.loss,"trading.entryColor":(e,t)=>t.trading.entry,"markers.longColor":(e,t)=>t.markers.long,"markers.shortColor":(e,t)=>t.markers.short,"markers.neutralColor":(e,t)=>t.markers.neutral,"tradeZones.profitColor":(e,t)=>t.tradeZones.profit,"tradeZones.lossColor":(e,t)=>t.tradeZones.loss,"tradeZones.activeColor":(e,t)=>t.tradeZones.active,"drawings.handleColor":(e,t)=>t.drawings.handle},Xt={visible:`visible`,color:`color`,style:`style`,width:`width`};function Zt(e,t,n,r=`candlestick`){let i=n.split(`.`);if(i[0]===`series`){let n=qt(e,e=>t[e],i[1]);switch(i[2]){case`upColor`:return n.up;case`downColor`:return n.down;case`wickUpColor`:return n.wickUp;case`wickDownColor`:return n.wickDown;case`color`:case`lineColor`:return n.line;case`lineWidth`:return n.lineWidth;case`topColor`:return n.top;case`bottomColor`:return n.bottom}}let a=Jt(e,r,t),o=a.style;return i[0]===`grid`||i[0]===`crosshair`&&(i[1]===`horizontal`||i[1]===`vertical`)?(i[0]===`grid`?o.grid:o.crosshair)[i[1]][Xt[i[2]]]:Yt[n]?.(a,o)??null}var Qt={autoScale:!0,rightMargin:5,minBarSpacing:2,maxBarSpacing:30,grid:{visible:!0,hLineStyle:`solid`,vLineStyle:`solid`},crosshair:{mode:`magnet`}},$t=[`1s`,`1m`,`3m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`6h`,`8h`,`12h`,`1d`,`3d`,`1w`,`1M`],en=[`1m`,`5m`,`15m`,`30m`,`1h`,`2h`,`4h`,`1d`,`1w`,`1M`,`3M`,`6M`,`12M`],tn=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1d`,`1w`,`1M`],nn=[`1m`,`5m`,`15m`,`1h`,`4h`,`1d`,`1w`],rn=8,an=2,on=70,sn=30,cn=60,ln=120,W={candlestick:`Candlestick`,line:`Line`,area:`Area`,bar:`OHLC Bar`,price:`Price`,volume:`Volume`,time:`Time`,open:`Open`,high:`High`,low:`Low`,close:`Close`,sma:`SMA`,ema:`EMA`,bollingerBands:`Bollinger Bands`,vwap:`VWAP`,ichimoku:`Ichimoku Cloud`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Keltner Channel`,donchianChannel:`Donchian Channel`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Std Dev`,volumeProfile:`Volume Profile`,accumulationDistribution:`A/D Line`,vroc:`VROC`,trendLine:`Trend Line`,horizontalLine:`Horizontal Line`,verticalLine:`Vertical Line`,ray:`Ray`,extendedLine:`Extended Line`,parallelChannel:`Parallel Channel`,regressionChannel:`Regression Channel`,fibRetracement:`Fibonacci Retracement`,fibExtension:`Fibonacci Extension`,rectangle:`Rectangle`,ellipse:`Ellipse`,triangle:`Triangle`,pitchfork:`Andrews' Pitchfork`,elliottWave:`Elliott Wave`,priceRange:`Price Range`,dateRange:`Date Range`,measure:`Measure`,textTool:`Text`,arrow:`Arrow`,clearAll:`Clear All`,buy:`Buy`,sell:`Sell`,buyLimit:`Buy Limit`,sellLimit:`Sell Limit`,buyStop:`Buy Stop`,sellStop:`Sell Stop`,stopLoss:`Stop Loss`,takeProfit:`Take Profit`,market:`Market`,limit:`Limit`,stop:`Stop`,cancel:`Cancel`,modify:`Modify`,quantity:`Qty`,pnl:`P&L`,activeOrders:`Active Orders`,positions:`Positions`,noOrders:`No active orders`,noPositions:`No open positions`,placeOrder:`Place Order`,rightClickToTrade:`Right-click chart to place orders`,ceiling:`Ceiling`,floor:`Floor`,reference:`Reference`,session:`Session`,preOpen:`Pre-Open`,continuous:`Continuous`,preClose:`Pre-Close`,closed:`Closed`,settings:`Settings`,theme:`Theme`,darkTheme:`Dark`,lightTheme:`Light`,tools:`Tools`,indicators:`Indicators`,overlays:`Overlays`,panels:`Panels`,orders:`Orders`,autoScale:`Auto Scale`,crosshair:`Crosshair`,grid:`Grid`,loading:`Loading...`,error:`Error`,numberDecimalSeparator:`.`,numberGroupSeparator:`,`},un={candlestick:`Nến`,line:`Đường`,area:`Vùng`,bar:`Thanh OHLC`,price:`Giá`,volume:`Khối lượng`,time:`Thời gian`,open:`Mở`,high:`Cao`,low:`Thấp`,close:`Đóng`,sma:`SMA`,ema:`EMA`,bollingerBands:`Dải Bollinger`,vwap:`VWAP`,ichimoku:`Mây Ichimoku`,parabolicSAR:`Parabolic SAR`,supertrend:`Supertrend`,keltnerChannel:`Kênh Keltner`,donchianChannel:`Kênh Donchian`,rsi:`RSI`,macd:`MACD`,stochastic:`Stochastic`,atr:`ATR`,adx:`ADX`,obv:`OBV`,williamsR:`Williams %R`,cci:`CCI`,mfi:`MFI`,aroon:`Aroon`,roc:`ROC`,tsi:`TSI`,cmf:`CMF`,stddev:`Độ lệch chuẩn`,volumeProfile:`Phân bổ KL`,accumulationDistribution:`Tích lũy/Phân phối`,vroc:`VROC`,trendLine:`Đường xu hướng`,horizontalLine:`Đường ngang`,verticalLine:`Đường dọc`,ray:`Tia`,extendedLine:`Đường kéo dài`,parallelChannel:`Kênh song song`,regressionChannel:`Kênh hồi quy`,fibRetracement:`Fibonacci thoái lui`,fibExtension:`Fibonacci mở rộng`,rectangle:`Hình chữ nhật`,ellipse:`Hình elip`,triangle:`Tam giác`,pitchfork:`Chĩa ba Andrews`,elliottWave:`Sóng Elliott`,priceRange:`Khoảng giá`,dateRange:`Khoảng thời gian`,measure:`Đo lường`,textTool:`Chữ`,arrow:`Mũi tên`,clearAll:`Xóa tất cả`,buy:`Mua`,sell:`Bán`,buyLimit:`Mua giới hạn`,sellLimit:`Bán giới hạn`,buyStop:`Mua chặn`,sellStop:`Bán chặn`,stopLoss:`Cắt lỗ`,takeProfit:`Chốt lời`,market:`Thị trường`,limit:`Giới hạn`,stop:`Dừng`,cancel:`Hủy`,modify:`Sửa`,quantity:`KL`,pnl:`Lãi/Lỗ`,activeOrders:`Lệnh chờ`,positions:`Vị thế`,noOrders:`Không có lệnh chờ`,noPositions:`Không có vị thế mở`,placeOrder:`Đặt lệnh`,rightClickToTrade:`Nhấp chuột phải để đặt lệnh`,ceiling:`Trần`,floor:`Sàn`,reference:`Tham chiếu`,session:`Phiên`,preOpen:`Trước giờ mở`,continuous:`Liên tục`,preClose:`Trước giờ đóng`,closed:`Đóng cửa`,settings:`Cài đặt`,theme:`Giao diện`,darkTheme:`Tối`,lightTheme:`Sáng`,tools:`Công cụ`,indicators:`Chỉ báo`,overlays:`Phủ lên`,panels:`Bảng`,orders:`Lệnh`,autoScale:`Tự co giãn`,crosshair:`Chữ thập`,grid:`Lưới`,loading:`Đang tải...`,error:`Lỗi`,numberDecimalSeparator:`,`,numberGroupSeparator:`.`},G=new Map([[`en`,W],[`vi`,un]]),K=`en`,dn=W;function fn(e){K=e,dn=G.get(e)??W}function pn(){return K}function mn(e){return dn[e]??W[e]??e}function hn(e,t){G.set(e,t)}function gn(e){return G.get(e??K)??W}function q(e,t=2,n){let r=G.get(n??K)??W,i=r.numberDecimalSeparator,a=r.numberGroupSeparator,[o,s]=e.toFixed(t).split(`.`),c=o.startsWith(`-`),l=c?o.slice(1):o,u=``;for(let e=l.length-1,t=0;e>=0;e--,t++)t>0&&t%3==0&&(u=a+u),u=l[e]+u;return c&&(u=`-`+u),s?u+i+s:u}function _n(e){return q(e,0,`vi`)}function vn(e,t){return e>=1e9?q(e/1e9,2,t??K)+`B`:e>=1e6?q(e/1e6,2,t??K)+`M`:e>=1e3?q(e/1e3,2,t??K)+`K`:q(e,0,t??K)}var J={up:`#22C55E`,down:`#EF4444`,unchanged:`#EAB308`,ceiling:`#D946EF`,floor:`#06B6D4`,reference:`#EAB308`},Y=`Asia/Ho_Chi_Minh`,yn=[{name:`ATO`,startTime:`09:00`,endTime:`09:15`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],bn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`},{name:`PLO`,startTime:`14:45`,endTime:`15:00`,type:`postClose`}],xn=[{name:`Phiên 1`,startTime:`09:15`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`}],Sn=[{name:`ATO`,startTime:`08:45`,endTime:`09:00`,type:`preOpen`},{name:`Phiên 1`,startTime:`09:00`,endTime:`11:30`,type:`continuous`},{name:`Nghỉ trưa`,startTime:`11:30`,endTime:`13:00`,type:`closed`},{name:`Phiên 2`,startTime:`13:00`,endTime:`14:30`,type:`continuous`},{name:`ATC`,startTime:`14:30`,endTime:`14:45`,type:`preClose`}],Cn={type:`stock`,exchange:`HOSE`,currency:`VND`,pricePrecision:2,volumeUnit:100,priceStep:.01,priceSteps:[{from:0,step:.01},{from:10,step:.05},{from:50,step:.1}],timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:yn,colorScheme:J},wn={...Cn,priceSteps:void 0},Tn={type:`stock`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:10,floorPercent:10},sessions:bn,colorScheme:J},En={type:`stock`,exchange:`UPCOM`,currency:`VND`,pricePrecision:1,volumeUnit:100,priceStep:.1,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:15,floorPercent:15},sessions:xn,colorScheme:J},Dn={type:`futures`,exchange:`HNX`,currency:`VND`,pricePrecision:1,volumeUnit:1,priceStep:.1,contractMultiplier:1e5,timeZone:Y,priceLimits:{enabled:!0,ceilingPercent:7,floorPercent:7},sessions:Sn,colorScheme:J},On={type:`crypto`,currency:`USDT`,pricePrecision:2,priceLimits:{enabled:!1}},kn={type:`stock`,exchange:`NYSE`,currency:`USD`,pricePrecision:2,priceStep:.01,timeZone:`America/New_York`,priceLimits:{enabled:!1},sessions:[{name:`Pre-Market`,startTime:`04:00`,endTime:`09:30`,type:`preOpen`},{name:`Regular`,startTime:`09:30`,endTime:`16:00`,type:`continuous`},{name:`After-Hours`,startTime:`16:00`,endTime:`20:00`,type:`postClose`}]};function An(e){return{...e,candleUp:J.up,candleDown:J.down,candleUpWick:J.up,candleDownWick:J.down,volumeUp:F(J.up),volumeDown:F(J.down)}}var X=1e-9;function jn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e+X>=r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function Mn(e,t){let n=t.priceStep;for(let r of t.priceSteps??[])e-X>r.from&&(n=r.step);return n!==void 0&&n>0?n:void 0}function Z(e,t,n=`nearest`){let r=jn(e,t);if(r===void 0||!Number.isFinite(e))return e;let i=e/r,a=n===`down`?Math.floor(i+X):n===`up`?Math.ceil(i-X):Math.round(i);return Number((a*r).toFixed(lt(r)))}function Nn(e,t){if(!t.priceLimits?.enabled||!t.priceLimits.ceilingPercent)return null;let n=t.priceLimits.ceilingPercent/100,r=(t.priceLimits.floorPercent??t.priceLimits.ceilingPercent)/100,i=e,a=i*(1+n),o=i*(1-r),s=jn(i,t);if(s===void 0)return{ceiling:a,floor:o,reference:i};let c=Z(i+s,t);if(Math.abs(i-s)<X)return{ceiling:c,floor:i,reference:i};let l=Z(a,t,`down`),u=Z(o,t,`up`);return l<=i&&(l=c),u>=i&&(u=Z(i-(Mn(i,t)??s),t)),u<=0&&(u=i),{ceiling:l,floor:u,reference:i}}var Q=(e,t)=>Math.round(e*t*1e9)/1e9;function Pn(e,t){let n=Math.round(Math.log10(t));return{...e,pricePrecision:e.pricePrecision===void 0?void 0:Math.max(0,e.pricePrecision-n),priceStep:e.priceStep===void 0?void 0:Q(e.priceStep,t),priceSteps:e.priceSteps?.map(e=>({from:Q(e.from,t),step:Q(e.step,t)})),priceLimits:e.priceLimits&&{...e.priceLimits,referencePrice:e.priceLimits.referencePrice===void 0?void 0:Q(e.priceLimits.referencePrice,t)}}}var Fn=6e4,In=864e5;function Ln(e,t){let n,r;if(t){let i=new Date(e+x(t,e)*Fn);n=i.getUTCHours(),r=i.getUTCMinutes()}else{let t=new Date(e);n=t.getHours(),r=t.getMinutes()}return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function Rn(e,t=Date.now(),n){if(n!==void 0&&!b(n))return null;let r=Ln(t,n);for(let t of e)if(r>=t.startTime&&r<t.endTime)return t;return null}var $=e=>String(e).padStart(2,`0`),zn=e=>{let t=new Date(e);return`${t.getUTCFullYear()}-${$(t.getUTCMonth()+1)}-${$(t.getUTCDate())}`},Bn=4,Vn=7*36e5;function Hn(e,t,n){let r=Date.UTC(e,t-1,1),i=1+(Bn-new Date(r).getUTCDay()+7)%7,a=Date.UTC(e,t-1,i+14),o=e=>{let t=new Date(e).getUTCDay();return t===0||t===6||(n?.(zn(e))??!1)};for(;o(a);)a-=In;return zn(a)}function Un(e,t){let n=zn(e+Vn),r=(e,n)=>({symbol:`VN30F${$(e%100)}${$(n)}`,year:e,month:n,lastTradingDay:Hn(e,n,t)}),i=e=>e.month===12?r(e.year+1,1):r(e.year,e.month+1),a=new Date(e+Vn),o=r(a.getUTCFullYear(),a.getUTCMonth()+1);n>o.lastTradingDay&&(o=i(o));let s=[o,i(o)],c=i(s[1]);for(;s.length<4;)c.month%3==0&&s.push(c),c=i(c);return s}exports.CHART_STYLE_KEYS=t,exports.DARK_TERMINAL=B,exports.DARK_THEME=R,exports.DEFAULT_BAR_SPACING=an,exports.DEFAULT_BAR_WIDTH=rn,exports.DEFAULT_CHART_OPTIONS=Qt,exports.DEFAULT_DRAWING_STYLE=n,exports.DEFAULT_FONT_FAMILY=At,exports.DEFAULT_PANEL_HEIGHT=ln,exports.DEFAULT_RECONNECT=o,exports.DEFAULT_SIGNAL_STYLE=i,exports.DEFAULT_STREAM_CONFIG=s,exports.DEFAULT_TIMEFRAME_FAVORITES=nn,exports.DEFAULT_TRADE_ZONE_STYLE=a,exports.DEFAULT_TRADING_CONFIG=r,exports.HNX_SESSIONS=bn,exports.HOSE_SESSIONS=yn,exports.LIGHT_THEME=z,exports.LayerType=e,exports.MARKET_CRYPTO=On,exports.MARKET_HNX=Tn,exports.MARKET_HOSE=Cn,exports.MARKET_HOSE_ETF=wn,exports.MARKET_NYSE=kn,exports.MARKET_UPCOM=En,exports.MARKET_VN30F=Dn,exports.MIN_PANEL_HEIGHT=cn,exports.PRICE_AXIS_WIDTH=on,exports.PRICE_SOURCES=Xe,exports.TC_PALETTE=P,exports.TC_SERIES_COLORS=Nt,exports.TIMEFRAMES_CRYPTO=$t,exports.TIMEFRAMES_FOREX=tn,exports.TIMEFRAMES_STOCK=en,exports.TIME_AXIS_HEIGHT=sn,exports.UPCOM_SESSIONS=xn,exports.VN30F_SESSIONS=Sn,exports.VN_COLORS=J,exports.VOLUME_ALPHA=Mt,exports.alignToTimeframe=Me,exports.autoPricePrecision=Ue,exports.barsAreDaily=Ie,exports.chartStyleValue=Zt,exports.clamp=ne,exports.computePriceLimits=Nn,exports.computePriceRange=de,exports.computeTickStep=oe,exports.createVNTheme=An,exports.detectPrecision=Ye,exports.drawingOption=bt,exports.en=W,exports.findBarIndex=ue,exports.formatFraction=Ge,exports.formatNumber=q,exports.formatPrice=He,exports.formatPriceScaleLabel=We,exports.formatTimestamp=je,exports.formatVND=_n,exports.formatVolume=Je,exports.formatVolumeLoc=vn,exports.fractionTick=Ke,exports.getCurrentSession=Rn,exports.getLocale=pn,exports.getLocaleStrings=gn,exports.hexToRgba=pe,exports.indicatorSource=et,exports.inverseLerp=ie,exports.isDateOnly=Pe,exports.isPriceSource=Ze,exports.isTimeFrame=Ae,exports.isValidTimeZone=b,exports.lerp=re,exports.lerpColor=he,exports.lineDash=Kt,exports.marketStatus=ft,exports.mergeBar=fe,exports.niceNumber=m,exports.normalizeBar=ce,exports.normalizeBarTime=se,exports.offsetAt=C,exports.parseIndicatorSource=tt,exports.parseTimeframe=T,exports.pickBaseTimeframe=ot,exports.priceFormatterFor=qe,exports.priceStepAt=jn,exports.rankSymbols=ct,exports.readChartStyleOverrides=Ht,exports.readChartTypeOptions=kt,exports.readIndicatorPlotStyles=Gt,exports.readNews=te,exports.readPaneStyle=Ut,exports.readQuote=l,exports.registerLocale=hn,exports.resampleBars=rt,exports.resolveChartTheme=Jt,exports.resolveDrawingOptions=xt,exports.resolveVolumeColors=V,exports.roundToPriceStep=Z,exports.roundToStep=ae,exports.sanitizeDrawingOptions=vt,exports.sanitizeDrawingStyle=Ot,exports.scaleMarketPrices=Pn,exports.sessionMinute=ut,exports.setLocale=fn,exports.sliceVisibleData=le,exports.sourcePrice=Qe,exports.stepDecimals=lt,exports.t=mn,exports.tickBarCount=ke,exports.timeParts=Ne,exports.timeframeBucketStart=ze,exports.timeframeToMs=E,exports.tzLabel=Le,exports.vi=un,exports.vn30fContracts=Un,exports.vn30fLastTradingDay=Hn,exports.volumeColor=F,exports.wallToUtc=Ce,exports.withAlpha=me,exports.zoneOffsetMinutes=x,exports.zonedDateFormatter=Te;
2
2
  //# sourceMappingURL=index.cjs.map