candleview 2.8.7 → 2.8.8

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.
Files changed (3) hide show
  1. package/dist/index.js +11 -11
  2. package/dist/index.mjs +190 -146
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -136,47 +136,47 @@ React keys must be passed directly to JSX without using spread:
136
136
  margin-left: 10px;
137
137
  color: ${e.lineColor};
138
138
  font-size: 11px;
139
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.adxIndicator)return;this.adxIndicator.calculate(this.adxIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.adxIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class no{calculateATR(t,e){if(t.length<e+1)return[];const i=[],r=[];for(let o=1;o<t.length;o++){const l=t[o],h=t[o-1],d=l.high,g=l.low,c=h.close,u=d-g,p=Math.abs(d-c),M=Math.abs(g-c),k=Math.max(u,p,M);r.push(k)}let a=r.slice(0,e).reduce((o,l)=>o+l,0)/e;const s=t[e].time;t[e].isVirtual||i.push({time:s,value:a});for(let o=e;o<r.length;o++){a=(a*(e-1)+r[o])/e;const l=t[o+1].time;t[o+1].isVirtual||i.push({time:l,value:a})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateATR(e,i.paramValue);i.data=r}),t}}class oo extends vt{constructor(){super(...arguments),this.seriesMap={},this.atrIndicator=null,this.currentValues={},this.atrIndicatorInfo=[{paramName:"ATR14",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"ATR21",paramValue:21,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"ATR50",paramValue:50,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.atrIndicator=new no,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.atrIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.atrIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.atrIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.atrIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.atrIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
139
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.adxIndicator)return;const e=this.adxIndicator.calculate(this.adxIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.adxIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class no{calculateATR(t,e){if(t.length<e+1)return[];const i=[],r=[];for(let o=1;o<t.length;o++){const l=t[o],h=t[o-1],d=l.high,g=l.low,c=h.close,u=d-g,p=Math.abs(d-c),M=Math.abs(g-c),k=Math.max(u,p,M);r.push(k)}let a=r.slice(0,e).reduce((o,l)=>o+l,0)/e;const s=t[e].time;t[e].isVirtual||i.push({time:s,value:a});for(let o=e;o<r.length;o++){a=(a*(e-1)+r[o])/e;const l=t[o+1].time;t[o+1].isVirtual||i.push({time:l,value:a})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateATR(e,i.paramValue);i.data=r}),t}}class oo extends vt{constructor(){super(...arguments),this.seriesMap={},this.atrIndicator=null,this.currentValues={},this.atrIndicatorInfo=[{paramName:"ATR14",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"ATR21",paramValue:21,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"ATR50",paramValue:50,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.atrIndicator=new no,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.atrIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.atrIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.atrIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.atrIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.atrIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
140
140
  margin-left: 10px;
141
141
  color: ${e.lineColor};
142
142
  font-size: 11px;
143
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(4):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.atrIndicator)return;this.atrIndicator.calculate(this.atrIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class lo{calculateBBWidth(t,e,i){if(t.length<e)return[];const r=[];for(let a=e-1;a<t.length;a++){const n=t.slice(a-e+1,a+1).map(g=>g.close),o=n.reduce((g,c)=>g+c,0)/e,l=n.reduce((g,c)=>g+Math.pow(c-o,2),0)/e,h=Math.sqrt(l),d=2*i*h/o*100;r.push({time:t[a].time,value:d,...t[a].isVirtual&&{color:"transparent"}})}return r}calculate(t,e){return t.forEach(i=>{const r=i.paramValue||20,s=this.calculateBBWidth(e,r,2);s.length>0&&(i.data=s)}),t}}class ho extends vt{constructor(){super(...arguments),this.seriesMap={},this.bbWidthIndicator=null,this.currentValues={},this.bbWidthIndicatorInfo=[{paramName:"BBWidth",paramValue:20,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.bbWidthIndicator=new lo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.bbWidthIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.bbWidthIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.bbWidthIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.bbWidthIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
143
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(4):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.atrIndicator)return;const e=this.atrIndicator.calculate(this.atrIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class lo{calculateBBWidth(t,e,i){if(t.length<e)return[];const r=[];for(let a=e-1;a<t.length;a++){const n=t.slice(a-e+1,a+1).map(g=>g.close),o=n.reduce((g,c)=>g+c,0)/e,l=n.reduce((g,c)=>g+Math.pow(c-o,2),0)/e,h=Math.sqrt(l),d=2*i*h/o*100;r.push({time:t[a].time,value:d,...t[a].isVirtual&&{color:"transparent"}})}return r}calculate(t,e){return t.forEach(i=>{const r=i.paramValue||20,s=this.calculateBBWidth(e,r,2);s.length>0&&(i.data=s)}),t}}class ho extends vt{constructor(){super(...arguments),this.seriesMap={},this.bbWidthIndicator=null,this.currentValues={},this.bbWidthIndicatorInfo=[{paramName:"BBWidth",paramValue:20,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.bbWidthIndicator=new lo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.bbWidthIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.bbWidthIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.bbWidthIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.bbWidthIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
144
144
  margin-left: 10px;
145
145
  color: ${e.lineColor};
146
146
  font-size: 11px;
147
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getParams(){return this.bbWidthIndicatorInfo}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.bbWidthIndicator)return;this.bbWidthIndicator.calculate(this.bbWidthIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){const e=this.bbWidthIndicatorInfo.findIndex(i=>i.paramName===t.paramName);e!==-1&&(this.bbWidthIndicatorInfo[e]={...this.bbWidthIndicatorInfo[e],...t})}getIndicatorSettings(){return this.bbWidthIndicatorInfo.length>0?this.bbWidthIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}calculateIndicatorData(t){return!t||t.length===0?[]:t.map((e,i)=>({time:e.time,value:Math.sin(i*.06)*2+3}))}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class co{calculateCCI(t,e){if(t.length<e)return[];const i=[];for(let r=e-1;r<t.length;r++){const s=t.slice(r-e+1,r+1).map(h=>(h.high+h.low+h.close)/3),n=s.reduce((h,d)=>h+d,0)/e,o=s.reduce((h,d)=>h+Math.abs(d-n),0)/e,l=o!==0?(s[s.length-1]-n)/(.015*o):0;i.push({time:t[r].time,value:l,...t[r].isVirtual&&{color:"transparent"}})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateCCI(e,i.paramValue);r.length>0&&(i.data=r)}),t}}class uo extends vt{constructor(){super(...arguments),this.seriesMap={},this.cciIndicator=null,this.currentValues={},this.cciIndicatorInfo=[{paramName:"CCI",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.cciIndicator=new co,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.cciIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.cciIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.cciIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.cciIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.cciIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
147
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getParams(){return this.bbWidthIndicatorInfo}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.bbWidthIndicator)return;const e=this.bbWidthIndicator.calculate(this.bbWidthIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){const e=this.bbWidthIndicatorInfo.findIndex(i=>i.paramName===t.paramName);e!==-1&&(this.bbWidthIndicatorInfo[e]={...this.bbWidthIndicatorInfo[e],...t})}getIndicatorSettings(){return this.bbWidthIndicatorInfo.length>0?this.bbWidthIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}calculateIndicatorData(t){return!t||t.length===0?[]:t.map((e,i)=>({time:e.time,value:Math.sin(i*.06)*2+3}))}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class co{calculateCCI(t,e){if(t.length<e)return[];const i=[];for(let r=e-1;r<t.length;r++){const s=t.slice(r-e+1,r+1).map(h=>(h.high+h.low+h.close)/3),n=s.reduce((h,d)=>h+d,0)/e,o=s.reduce((h,d)=>h+Math.abs(d-n),0)/e,l=o!==0?(s[s.length-1]-n)/(.015*o):0;i.push({time:t[r].time,value:l,...t[r].isVirtual&&{color:"transparent"}})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateCCI(e,i.paramValue);r.length>0&&(i.data=r)}),t}}class uo extends vt{constructor(){super(...arguments),this.seriesMap={},this.cciIndicator=null,this.currentValues={},this.cciIndicatorInfo=[{paramName:"CCI",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.cciIndicator=new co,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.cciIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.cciIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.cciIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.cciIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.cciIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
148
148
  margin-left: 10px;
149
149
  color: ${e.lineColor};
150
150
  font-size: 11px;
151
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:-200,maximum:200,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.cciIndicator)return;this.cciIndicator.calculate(this.cciIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class go{calculateKDJ(t,e=9,i=3){if(t.length<e)return{K:[],D:[],J:[]};const r={K:[],D:[],J:[]},a=[],s=[];for(let n=e-1;n<t.length;n++){const o=t.slice(n-e+1,n+1),l=Math.max(...o.map(P=>P.high)),h=Math.min(...o.map(P=>P.low)),d=t[n].close,g=l===h?50:(d-h)/(l-h)*100;let c;a.length===0?c=50+(g-50)*2/3:c=(a[a.length-1]*(i-1)+g)/i,a.push(c);let u;s.length===0?u=50+(c-50)*2/3:u=(s[s.length-1]*(i-1)+c)/i,s.push(u);const p=3*c-2*u,M=t[n].isVirtual||!1,k={time:t[n].time,value:c,isVirtual:M};M&&(k.color="transparent"),r.K.push(k),r.D.push({time:t[n].time,value:u,isVirtual:M,...M&&{color:"transparent"}}),r.J.push({time:t[n].time,value:p,isVirtual:M,...M&&{color:"transparent"}})}return r}calculate(t,e){const i=t.find(o=>o.paramName==="K"),r=t.find(o=>o.paramName==="D"),a=i?.paramValue||9,s=r?.paramValue||3,n=this.calculateKDJ(e,a,s);return t.forEach(o=>{const l=n[o.paramName];if(l&&l.length>0){const h=l.filter(d=>!d.isVirtual);o.data=h.map(d=>({time:d.time,value:d.value}))}}),t}}class po extends vt{constructor(){super(...arguments),this.seriesMap={},this.kdjIndicator=null,this.currentValues={},this.kdjIndicatorInfo=[{paramName:"K",paramValue:9,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"D",paramValue:3,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"J",paramValue:3,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.kdjIndicator=new go,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.kdjIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.kdjIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.kdjIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.kdjIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
151
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:-200,maximum:200,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.cciIndicator)return;const e=this.cciIndicator.calculate(this.cciIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class go{calculateKDJ(t,e=9,i=3){if(t.length<e)return{K:[],D:[],J:[]};const r={K:[],D:[],J:[]},a=[],s=[];for(let n=e-1;n<t.length;n++){const o=t.slice(n-e+1,n+1),l=Math.max(...o.map(P=>P.high)),h=Math.min(...o.map(P=>P.low)),d=t[n].close,g=l===h?50:(d-h)/(l-h)*100;let c;a.length===0?c=50+(g-50)*2/3:c=(a[a.length-1]*(i-1)+g)/i,a.push(c);let u;s.length===0?u=50+(c-50)*2/3:u=(s[s.length-1]*(i-1)+c)/i,s.push(u);const p=3*c-2*u,M=t[n].isVirtual||!1,k={time:t[n].time,value:c,isVirtual:M};M&&(k.color="transparent"),r.K.push(k),r.D.push({time:t[n].time,value:u,isVirtual:M,...M&&{color:"transparent"}}),r.J.push({time:t[n].time,value:p,isVirtual:M,...M&&{color:"transparent"}})}return r}calculate(t,e){const i=t.find(o=>o.paramName==="K"),r=t.find(o=>o.paramName==="D"),a=i?.paramValue||9,s=r?.paramValue||3,n=this.calculateKDJ(e,a,s);return t.forEach(o=>{const l=n[o.paramName];if(l&&l.length>0){const h=l.filter(d=>!d.isVirtual);o.data=h.map(d=>({time:d.time,value:d.value}))}}),t}}class po extends vt{constructor(){super(...arguments),this.seriesMap={},this.kdjIndicator=null,this.currentValues={},this.kdjIndicatorInfo=[{paramName:"K",paramValue:9,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"D",paramValue:3,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"J",paramValue:3,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.kdjIndicator=new go,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.kdjIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.kdjIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.kdjIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.kdjIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
152
152
  margin-left: 10px;
153
153
  color: ${e.lineColor};
154
154
  font-size: 11px;
155
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.kdjIndicator)return;this.kdjIndicator.calculate(this.kdjIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.kdjIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class fo{calculateMACD(t,e,i,r){const a=(M,k)=>{if(M.length<k)return[];const P=2/(k+1),S=[M[0]];for(let _=1;_<M.length;_++)S.push((M[_]-S[_-1])*P+S[_-1]);return S},s=t.map(M=>M.close);if(s.length<i)return[];const n=a(s,e),o=a(s,i),l=[],h=Math.max(e,i)-1;for(let M=h;M<s.length;M++)l.push(n[M]-o[M]);if(l.length<r)return[];const d=a(l,r),g=[],c=r-1;for(let M=c;M<l.length;M++)g.push(l[M]-d[M-c]);const u=[],p=h+c;for(let M=0;M<g.length;M++)if(t[p+M]){const k=t[p+M].time,P=typeof k=="string"?new Date(k).getTime()/1e3:k,S=t[p+M].isVirtual||!1;u.push({time:P,macd:l[c+M],signal:d[M],histogram:g[M],isVirtual:S,...S&&{color:"transparent"}})}return u}calculate(t,e){let i=12,r=26,a=9;t.forEach(n=>{n.paramName==="DIF"&&typeof n.paramValue=="number"?i=n.paramValue:n.paramName==="DEA"&&typeof n.paramValue=="number"?r=n.paramValue:n.paramName==="MACD"&&typeof n.paramValue=="number"&&(a=n.paramValue)});const s=this.calculateMACD(e,i,r,a);return s.length===0?t.map(n=>({...n,data:[]})):t.map(n=>{const o={...n},l=s.filter(h=>!h.isVirtual);return n.paramName==="DIF"?o.data=l.map(h=>({time:h.time,value:h.macd||0})):n.paramName==="DEA"?o.data=l.map(h=>({time:h.time,value:h.signal||0})):n.paramName==="MACD"&&(o.data=l.map(h=>({time:h.time,value:h.histogram||0}))),o})}}class Mo extends vt{constructor(){super(...arguments),this.seriesMap={},this.macdIndicator=null,this.currentValues={},this.macdIndicatorInfo=[{paramName:"DIF",paramValue:12,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"DEA",paramValue:26,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"MACD",paramValue:9,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.macdIndicator=new fo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.macdIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.macdIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.macdIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.macdIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
155
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.kdjIndicator)return;const e=this.kdjIndicator.calculate(this.kdjIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.kdjIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class fo{calculateMACD(t,e,i,r){const a=(M,k)=>{if(M.length<k)return[];const P=2/(k+1),S=[M[0]];for(let _=1;_<M.length;_++)S.push((M[_]-S[_-1])*P+S[_-1]);return S},s=t.map(M=>M.close);if(s.length<i)return[];const n=a(s,e),o=a(s,i),l=[],h=Math.max(e,i)-1;for(let M=h;M<s.length;M++)l.push(n[M]-o[M]);if(l.length<r)return[];const d=a(l,r),g=[],c=r-1;for(let M=c;M<l.length;M++)g.push(l[M]-d[M-c]);const u=[],p=h+c;for(let M=0;M<g.length;M++)if(t[p+M]){const k=t[p+M].time,P=typeof k=="string"?new Date(k).getTime()/1e3:k,S=t[p+M].isVirtual||!1;u.push({time:P,macd:l[c+M],signal:d[M],histogram:g[M],isVirtual:S,...S&&{color:"transparent"}})}return u}calculate(t,e){let i=12,r=26,a=9;t.forEach(n=>{n.paramName==="DIF"&&typeof n.paramValue=="number"?i=n.paramValue:n.paramName==="DEA"&&typeof n.paramValue=="number"?r=n.paramValue:n.paramName==="MACD"&&typeof n.paramValue=="number"&&(a=n.paramValue)});const s=this.calculateMACD(e,i,r,a);return s.length===0?t.map(n=>({...n,data:[]})):t.map(n=>{const o={...n},l=s.filter(h=>!h.isVirtual);return n.paramName==="DIF"?o.data=l.map(h=>({time:h.time,value:h.macd||0})):n.paramName==="DEA"?o.data=l.map(h=>({time:h.time,value:h.signal||0})):n.paramName==="MACD"&&(o.data=l.map(h=>({time:h.time,value:h.histogram||0}))),o})}}class Mo extends vt{constructor(){super(...arguments),this.seriesMap={},this.macdIndicator=null,this.currentValues={},this.macdIndicatorInfo=[{paramName:"DIF",paramValue:12,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"DEA",paramValue:26,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"MACD",paramValue:9,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.macdIndicator=new fo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.macdIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.macdIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.macdIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.macdIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
156
156
  margin-left: 10px;
157
157
  color: ${e.lineColor};
158
158
  font-size: 11px;
159
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(4):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.macdIndicator)return;this.macdIndicator.calculate(this.macdIndicatorInfo,t).forEach(i=>{if(i.data.length>0)if(i.paramName==="MACD"){const r=this.paneInstance.addSeries(rt.HistogramSeries,{upColor:i.lineColor,downColor:"#FF6B6B",lineWidth:1,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()}),a=i.data.map(s=>({time:s.time,value:s.value,color:s.value>=0?i.lineColor:"#FF6B6B"}));r.setData(a),this.seriesMap[i.paramName]=r}else{const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.macdIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class mo{calculateOBV(t){if(t.length===0)return[];const e=[];let i=0;e.push({time:t[0].time,value:i,...t[0].isVirtual&&{color:"transparent"}});for(let r=1;r<t.length;r++){const a=t[r].close,s=t[r-1].close,n=t[r].volume;a>s?i+=n:a<s&&(i-=n),e.push({time:t[r].time,value:i,...t[r].isVirtual&&{color:"transparent"}})}return e}calculate(t,e){return t.forEach(i=>{const r=this.calculateOBV(e);r.length>0&&(i.data=r)}),t}}class ko extends vt{constructor(){super(...arguments),this.seriesMap={},this.obvIndicator=null,this.currentValues={},this.obvIndicatorInfo=[{paramName:"OBV",paramValue:0,lineColor:"#2962FF",lineWidth:1,data:[]}]}init(t,e){this.obvIndicator=new mo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.obvIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.obvIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.obvIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.obvIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
159
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(4):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.macdIndicator)return;const e=this.macdIndicator.calculate(this.macdIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0)if(i.paramName==="MACD"){const r=this.paneInstance.addSeries(rt.HistogramSeries,{upColor:i.lineColor,downColor:"#FF6B6B",lineWidth:1,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()}),a=i.data.map(s=>({time:s.time,value:s.value,color:s.value>=0?i.lineColor:"#FF6B6B"}));r.setData(a),this.seriesMap[i.paramName]=r}else{const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.macdIndicatorInfo}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class mo{calculateOBV(t){if(t.length===0)return[];const e=[];let i=0;e.push({time:t[0].time,value:i,...t[0].isVirtual&&{color:"transparent"}});for(let r=1;r<t.length;r++){const a=t[r].close,s=t[r-1].close,n=t[r].volume;a>s?i+=n:a<s&&(i-=n),e.push({time:t[r].time,value:i,...t[r].isVirtual&&{color:"transparent"}})}return e}calculate(t,e){return t.forEach(i=>{const r=this.calculateOBV(e);r.length>0&&(i.data=r)}),t}}class ko extends vt{constructor(){super(...arguments),this.seriesMap={},this.obvIndicator=null,this.currentValues={},this.obvIndicatorInfo=[{paramName:"OBV",paramValue:0,lineColor:"#2962FF",lineWidth:1,data:[]}]}init(t,e){this.obvIndicator=new mo,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.obvIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.obvIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.obvIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.obvIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
160
160
  margin-left: 10px;
161
161
  color: ${e.lineColor};
162
162
  font-size: 11px;
163
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName} ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.obvIndicator)return;this.obvIndicator.calculate(this.obvIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.obvIndicatorInfo}getIndicatorSettings(){return this.obvIndicatorInfo.length>0?this.obvIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}calculateIndicatorData(t){return!t||t.length===0?[]:t.map((e,i)=>({time:e.time,value:i*1e3+Math.random()*5e3}))}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class Po{calculateRSI(t,e){if(t.length<e+1)return[];const i=[],r=[],a=[];for(let h=1;h<t.length;h++){const d=t[h].close-t[h-1].close;r.push(d>0?d:0),a.push(d<0?Math.abs(d):0)}let s=r.slice(0,e).reduce((h,d)=>h+d,0)/e,n=a.slice(0,e).reduce((h,d)=>h+d,0)/e;const l=100-100/(1+(n===0?100:s/n));i.push({time:t[e].time,value:l,...t[e].isVirtual&&{color:"transparent"}});for(let h=e;h<r.length;h++){s=(s*(e-1)+r[h])/e,n=(n*(e-1)+a[h])/e;const g=100-100/(1+(n===0?100:s/n));i.push({time:t[h+1].time,value:g,...t[h+1].isVirtual&&{color:"transparent"}})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateRSI(e,i.paramValue);r.length>0&&(i.data=r)}),t}}class Ai extends vt{constructor(){super(...arguments),this.seriesMap={},this.rsiIndicator=null,this.currentValues={},this.rsiIndicatorInfo=[{paramName:"RSI6",paramValue:6,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"RSI12",paramValue:12,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"RSI24",paramValue:24,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.rsiIndicator=new Po,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.rsiIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.rsiIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.rsiIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.rsiIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.rsiIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
163
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName} ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.obvIndicator)return;const e=this.obvIndicator.calculate(this.obvIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.obvIndicatorInfo}getIndicatorSettings(){return this.obvIndicatorInfo.length>0?this.obvIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}calculateIndicatorData(t){return!t||t.length===0?[]:t.map((e,i)=>({time:e.time,value:i*1e3+Math.random()*5e3}))}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class Po{calculateRSI(t,e){if(t.length<e+1)return[];const i=[],r=[],a=[];for(let h=1;h<t.length;h++){const d=t[h].close-t[h-1].close;r.push(d>0?d:0),a.push(d<0?Math.abs(d):0)}let s=r.slice(0,e).reduce((h,d)=>h+d,0)/e,n=a.slice(0,e).reduce((h,d)=>h+d,0)/e;const l=100-100/(1+(n===0?100:s/n));i.push({time:t[e].time,value:l,...t[e].isVirtual&&{color:"transparent"}});for(let h=e;h<r.length;h++){s=(s*(e-1)+r[h])/e,n=(n*(e-1)+a[h])/e;const g=100-100/(1+(n===0?100:s/n));i.push({time:t[h+1].time,value:g,...t[h+1].isVirtual&&{color:"transparent"}})}return i}calculate(t,e){return t.forEach(i=>{const r=this.calculateRSI(e,i.paramValue);r.length>0&&(i.data=r)}),t}}class Ai extends vt{constructor(){super(...arguments),this.seriesMap={},this.rsiIndicator=null,this.currentValues={},this.rsiIndicatorInfo=[{paramName:"RSI6",paramValue:6,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"RSI12",paramValue:12,lineColor:"#4ECDC4",lineWidth:1,data:[]},{paramName:"RSI24",paramValue:24,lineColor:"#45B7D1",lineWidth:1,data:[]}]}init(t,e){this.rsiIndicator=new Po,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.rsiIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.rsiIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.rsiIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.rsiIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.rsiIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
164
164
  margin-left: 10px;
165
165
  color: ${e.lineColor};
166
166
  font-size: 11px;
167
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.rsiIndicator)return;this.rsiIndicator.calculate(this.rsiIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class So{calculateSAR(t,e,i){if(t.length<2)return[];const r=[];let a=t[0].low,s=1,n=e,o=t[0].high;for(let l=1;l<t.length;l++){const{high:h,low:d,time:g,isVirtual:c}=t[l];s===1?(a=a+n*(o-a),d<a?(s=-1,a=o,n=e,o=d):h>o&&(o=h,n=Math.min(n+e,i))):(a=a+n*(o-a),h>a?(s=1,a=o,n=e,o=h):d<o&&(o=d,n=Math.min(n+e,i))),r.push({time:g,value:a,...c&&{color:"transparent"}})}return r}calculate(t,e){return t.forEach(i=>{let r=.02;typeof i.paramValue=="number"?r=i.paramValue:typeof i.paramValue=="string"&&(r=parseFloat(i.paramValue)||.02);const a=r*10,s=this.calculateSAR(e,r,a);s.length>0&&(i.data=s.map(n=>({time:n.time,value:n.value,...n.color&&{color:n.color}})))}),t}}class _o extends vt{constructor(){super(...arguments),this.seriesMap={},this.sarIndicator=null,this.currentValues={},this.sarIndicatorInfo=[{paramName:"SAR",paramValue:.02,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.sarIndicator=new So,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.sarIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.sarIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.sarIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.sarIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
167
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.rsiIndicator)return;const e=this.rsiIndicator.calculate(this.rsiIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class So{calculateSAR(t,e,i){if(t.length<2)return[];const r=[];let a=t[0].low,s=1,n=e,o=t[0].high;for(let l=1;l<t.length;l++){const{high:h,low:d,time:g,isVirtual:c}=t[l];s===1?(a=a+n*(o-a),d<a?(s=-1,a=o,n=e,o=d):h>o&&(o=h,n=Math.min(n+e,i))):(a=a+n*(o-a),h>a?(s=1,a=o,n=e,o=h):d<o&&(o=d,n=Math.min(n+e,i))),r.push({time:g,value:a,...c&&{color:"transparent"}})}return r}calculate(t,e){return t.forEach(i=>{let r=.02;typeof i.paramValue=="number"?r=i.paramValue:typeof i.paramValue=="string"&&(r=parseFloat(i.paramValue)||.02);const a=r*10,s=this.calculateSAR(e,r,a);s.length>0&&(i.data=s.map(n=>({time:n.time,value:n.value,...n.color&&{color:n.color}})))}),t}}class _o extends vt{constructor(){super(...arguments),this.seriesMap={},this.sarIndicator=null,this.currentValues={},this.sarIndicatorInfo=[{paramName:"SAR",paramValue:.02,lineColor:"#FF6B6B",lineWidth:1,data:[]}]}init(t,e){this.sarIndicator=new So,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.sarIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.sarIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.sarIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.sarIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
168
168
  margin-left: 10px;
169
169
  color: ${e.lineColor};
170
170
  font-size: 11px;
171
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName} ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.sarIndicator)return;this.sarIndicator.calculate(this.sarIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.sarIndicatorInfo}getIndicatorSettings(){return this.sarIndicatorInfo.length>0?this.sarIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class Co{calculateStochastic(t,e,i,r){if(t.length<e+r-1)return{k:[],d:[]};const a=[];for(let h=e-1;h<t.length;h++){const d=t.slice(h-e+1,h+1),g=d.map(k=>k.high),c=d.map(k=>k.low),u=Math.max(...g),p=Math.min(...c),M=t[h].close;if(u===p)a.push({time:t[h].time,value:50,...t[h].isVirtual&&{color:"transparent"}});else{const k=(M-p)/(u-p)*100;a.push({time:t[h].time,value:k,...t[h].isVirtual&&{color:"transparent"}})}}const s=[];for(let h=r-1;h<a.length;h++){const g=a.slice(h-r+1,h+1).reduce((c,u)=>c+u.value,0)/r;s.push({time:a[h].time,value:g,...a[h].color&&{color:a[h].color}})}const n=[];for(let h=i-1;h<s.length;h++){const g=s.slice(h-i+1,h+1).reduce((c,u)=>c+u.value,0)/i;n.push({time:s[h].time,value:g,...s[h].color&&{color:s[h].color}})}return{k:s.slice(i-1),d:n}}calculate(t,e){const i=t.find(l=>l.paramName==="K"),r=t.find(l=>l.paramName==="D");if(!i||!r)return t;const a=i.paramValue||14,s=r.paramValue||3,o=this.calculateStochastic(e,a,s,1);return t.forEach(l=>{l.paramName==="K"&&o.k.length>0?l.data=o.k:l.paramName==="D"&&o.d.length>0&&(l.data=o.d)}),t}calculateMultiple(t,e){const i={};return t.forEach(r=>{const a=this.calculateStochastic(e,r.kPeriod,r.dPeriod,r.smooth);a.k.length>0&&a.d.length>0&&(i[r.paramName]=a)}),i}}class bo extends vt{constructor(){super(...arguments),this.seriesMap={},this.stochasticIndicator=null,this.currentValues={},this.stochasticIndicatorInfo=[{paramName:"K",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"D",paramValue:3,lineColor:"#4ECDC4",lineWidth:1,data:[]}]}init(t,e){this.stochasticIndicator=new Co,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.stochasticIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.stochasticIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.stochasticIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.stochasticIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.stochasticIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
171
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName} ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.sarIndicator)return;const e=this.sarIndicator.calculate(this.sarIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getParams(){return this.sarIndicatorInfo}getIndicatorSettings(){return this.sarIndicatorInfo.length>0?this.sarIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class Co{calculateStochastic(t,e,i,r){if(t.length<e+r-1)return{k:[],d:[]};const a=[];for(let h=e-1;h<t.length;h++){const d=t.slice(h-e+1,h+1),g=d.map(k=>k.high),c=d.map(k=>k.low),u=Math.max(...g),p=Math.min(...c),M=t[h].close;if(u===p)a.push({time:t[h].time,value:50,...t[h].isVirtual&&{color:"transparent"}});else{const k=(M-p)/(u-p)*100;a.push({time:t[h].time,value:k,...t[h].isVirtual&&{color:"transparent"}})}}const s=[];for(let h=r-1;h<a.length;h++){const g=a.slice(h-r+1,h+1).reduce((c,u)=>c+u.value,0)/r;s.push({time:a[h].time,value:g,...a[h].color&&{color:a[h].color}})}const n=[];for(let h=i-1;h<s.length;h++){const g=s.slice(h-i+1,h+1).reduce((c,u)=>c+u.value,0)/i;n.push({time:s[h].time,value:g,...s[h].color&&{color:s[h].color}})}return{k:s.slice(i-1),d:n}}calculate(t,e){const i=t.find(l=>l.paramName==="K"),r=t.find(l=>l.paramName==="D");if(!i||!r)return t;const a=i.paramValue||14,s=r.paramValue||3,o=this.calculateStochastic(e,a,s,1);return t.forEach(l=>{l.paramName==="K"&&o.k.length>0?l.data=o.k:l.paramName==="D"&&o.d.length>0&&(l.data=o.d)}),t}calculateMultiple(t,e){const i={};return t.forEach(r=>{const a=this.calculateStochastic(e,r.kPeriod,r.dPeriod,r.smooth);a.k.length>0&&a.d.length>0&&(i[r.paramName]=a)}),i}}class bo extends vt{constructor(){super(...arguments),this.seriesMap={},this.stochasticIndicator=null,this.currentValues={},this.stochasticIndicatorInfo=[{paramName:"K",paramValue:14,lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramName:"D",paramValue:3,lineColor:"#4ECDC4",lineWidth:1,data:[]}]}init(t,e){this.stochasticIndicator=new Co,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.stochasticIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.stochasticIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.stochasticIndicator&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.stochasticIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.stochasticIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
172
172
  margin-left: 10px;
173
173
  color: ${e.lineColor};
174
174
  font-size: 11px;
175
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.stochasticIndicator)return;this.stochasticIndicator.calculate(this.stochasticIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class To{calculateVolume(t,e,i,r){return t.map((a,s)=>{let n;switch(e){case 1:const h=Math.max(0,s-20+1),d=t.slice(h,s+1);n=d.reduce((g,c)=>g+c.volume,0)/d.length;break;case 2:n=a.volume*(.8+Math.random()*.4);break;default:n=a.volume;break}const o=s>0&&a.close>t[s-1].close?i:r;return{time:a.time,value:n,color:a.isVirtual?"transparent":o,isVirtual:a.isVirtual||!1}})}calculate(t,e){return t.forEach(i=>{const r=i.upColor||"#00C087",a=i.downColor||"#FF5B5A",s=this.calculateVolume(e,i.paramValue,r,a);if(s.length>0){const n=s.filter(o=>!o.isVirtual);i.data=n.map(o=>({time:o.time,value:o.value}))}}),t}}let wo=class extends vt{constructor(){super(...arguments),this.seriesMap={},this.volumeIndicator=null,this.currentValues={},this._default="#ff821cff",this.volumeIndicatorInfo=[{paramName:"VOLUME",paramValue:0,lineColor:"",lineWidth:1,data:[]}]}init(t,e){this.volumeIndicator=new To,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.volumeIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.volumeIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.volumeIndicatorInfo&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.volumeIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.volumeIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
175
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(2):"--";i.textContent=`${e.paramName}(${e.paramValue}) ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:2,autoScale:!1,minimum:0,maximum:100,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.stochasticIndicator)return;const e=this.stochasticIndicator.calculate(this.stochasticIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.LineSeries,{color:i.lineColor,lineWidth:i.lineWidth,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}}class To{calculateVolume(t,e,i,r){return t.map((a,s)=>{let n;switch(e){case 1:const h=Math.max(0,s-20+1),d=t.slice(h,s+1);n=d.reduce((g,c)=>g+c.volume,0)/d.length;break;case 2:n=a.volume*(.8+Math.random()*.4);break;default:n=a.volume;break}const o=s>0&&a.close>t[s-1].close?i:r;return{time:a.time,value:n,color:a.isVirtual?"transparent":o,isVirtual:a.isVirtual||!1}})}calculate(t,e){return t.forEach(i=>{const r=i.upColor||"#00C087",a=i.downColor||"#FF5B5A",s=this.calculateVolume(e,i.paramValue,r,a);if(s.length>0){const n=s.filter(o=>!o.isVirtual);i.data=n.map(o=>({time:o.time,value:o.value}))}}),t}}let wo=class extends vt{constructor(){super(...arguments),this.seriesMap={},this.volumeIndicator=null,this.currentValues={},this._default="#ff821cff",this.volumeIndicatorInfo=[{paramName:"VOLUME",paramValue:0,lineColor:"",lineWidth:1,data:[]}]}init(t,e){this.volumeIndicator=new To,setTimeout(()=>{this.createInfoElement(),this.updateSettings(t,e),this.updateData(t)},50)}updateSettings(t,e){this.clearAllSeries(),e&&(this.volumeIndicatorInfo.forEach(i=>{e?.forEach(r=>{i.paramName===r.paramName&&(r.data=i.data)})}),this.volumeIndicatorInfo=e),this.updateInfoParams(),this.chartInstance&&this.volumeIndicatorInfo&&(Object.keys(this.seriesMap).forEach(i=>{this.chartInstance.removeSeries(this.seriesMap[i])}),this.seriesMap={},this.updateData(t))}getParams(){return this.volumeIndicatorInfo}getCurrentValue(t){return this.currentValues[t]||null}updateInfoParams(){if(!this._infoElement)return;const t=this._infoElement.querySelector(".params-container");t&&(t.innerHTML="",this.volumeIndicatorInfo.forEach(e=>{const i=document.createElement("span");i.className="param-item",i.style.cssText=`
176
176
  margin-left: 10px;
177
177
  color: ${e.lineColor||"#666666"};
178
178
  font-size: 11px;
179
- `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(0):"--";i.textContent=`${e.paramName}: ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:1,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.volumeIndicator)return;this.volumeIndicator.calculate(this.volumeIndicatorInfo,t).forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.HistogramSeries,{color:i.lineColor||this._default,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return this.volumeIndicatorInfo.length>0?this.volumeIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}};class vo{static createPane(t,e,i,r,a,s,n,o,l){switch(s){case X.VOLUME:return new wo(i,r,a,s,t,e,n,o,l);case X.RSI:return new Ai(i,r,a,s,t,e,n,o,l);case X.MACD:return new Mo(i,r,a,s,t,e,n,o,l);case X.STOCHASTIC:return new bo(i,r,a,s,t,e,n,o,l);case X.SAR:return new _o(i,r,a,s,t,e,n,o,l);case X.KDJ:return new po(i,r,a,s,t,e,n,o,l);case X.ATR:return new oo(i,r,a,s,t,e,n,o,l);case X.CCI:return new uo(i,r,a,s,t,e,n,o,l);case X.BBWIDTH:return new ho(i,r,a,s,t,e,n,o,l);case X.ADX:return new ao(i,r,a,s,t,e,n,o,l);case X.OBV:return new ko(i,r,a,s,t,e,n,o,l);default:return new Ai(i,r,a,s,t,e,n,o,l)}}}class xo{constructor(){this.panesCache=new Map,this.chartInstance=null}setChartInstance(t){this.chartInstance=t}addSubChart(t,e,i,r){if(!this.chartInstance||this.hasPane(e))return;const a=this.panesCache.size,s=this.calculatePaneSize(a),n=a%2===0?"right":"left",o=this.chartInstance.addPane({vertPosition:n,size:s}),l=this.buildPanesCacheId(e),h=vo.createPane(this.chartInstance,o,l,s,n,e,t.props.currentTheme,i,r);this.panesCache.set(l,h),h.init(t.props.chartData)}updatePaneDataBySubChartIndicatorType(t,e){const i=this.getPaneByIndicatorType(e);i&&i.updateData(t)}updateAllPaneData(t){this.removeAllSeries(),this.panesCache.forEach(e=>{e.updateData(t)})}updatePaneThemeBySubChartIndicatorType(t,e){const i=this.getPaneByIndicatorType(e);i&&i.updateThme(t)}updateAllPaneTheme(t){this.panesCache.forEach(e=>{e.updateThme(t)})}updateSettingsBySubChartIndicatorType(t,e,i){const r=this.getPaneByIndicatorType(i);r&&r.updateSettings(t,e)}removePaneBySubChartIndicatorType(t){if(!this.chartInstance)return;const e=this.getPaneByIndicatorType(t);e&&(this.chartInstance.removePane(e.paneInstance.paneIndex()),this.panesCache.delete(this.buildPanesCacheId(t)))}removeAllPane(){this.chartInstance&&(this.panesCache.forEach((t,e)=>{this.chartInstance.removePane(t.paneInstance.paneIndex())}),this.panesCache.clear())}removeAllSeries(){this.chartInstance&&this.panesCache.forEach((t,e)=>{t.paneInstance.getSeries().forEach((i,r)=>{this.chartInstance.removeSeries(i)})})}getParamsByIndicatorType(t){const e=this.getPaneByIndicatorType(t);return e?e.getParams():[]}getPaneByIndicatorType(t){return Array.from(this.panesCache.values()).find(e=>e.indicatorType===t)}getAllPanes(){return Array.from(this.panesCache.values())}hasPane(t){return Array.from(this.panesCache.values()).some(e=>e.indicatorType===t)}calculatePaneSize(t){const a=.8-t*.3;return Math.min(.4,.3+a/(t+1))}buildPanesCacheId(t){return`pane_${t}`}handleMouseDown(t){this.panesCache.forEach(e=>{e.handleMouseDown(t)})}handleMouseMove(t){this.panesCache.forEach(e=>{e.handleMouseMove(t)})}handleMouseUp(t){this.panesCache.forEach(e=>{e.handleMouseUp(t)})}handleCrosshairMoveEvent(t){this.panesCache.forEach(e=>{e.handleCrosshairMoveEvent(t)})}}const Ao=({isOpen:f,onClose:t,onConfirm:e,initialParams:i,theme:r,parentRef:a,indicatorType:s,i18n:n})=>{const[o,l]=y.useState([]),[h,d]=y.useState({x:0,y:0}),[g,c]=y.useState(!1),[u,p]=y.useState({x:0,y:0}),M=y.useRef(null),k=y.useRef(null),P=()=>{switch(s){case X.RSI:return n.indicators?.rsi||"RSI";case X.MACD:return n.indicators?.macd||"MACD";case X.VOLUME:return n.indicators?.volume||"VOLUME";case X.SAR:return n.indicators?.sar||"SAR";case X.KDJ:return n.indicators?.kdj||"KDJ";case X.ATR:return n.indicators?.atr||"ATR";case X.STOCHASTIC:return n.indicators?.stochastic||"STOCHASTIC";case X.CCI:return n.indicators?.cci||"CCI";case X.BBWIDTH:return n.indicators?.bbwidth||"BBWIDTH";case X.ADX:return n.indicators?.adx||"ADX";case X.OBV:return n.indicators?.obv||"OBV";default:return n.subChartIndicators||"副图指标设置"}};y.useEffect(()=>{f&&i&&l([...i])},[f,i]),y.useEffect(()=>{f&&d((()=>{if(a?.current){const Q=a.current.getBoundingClientRect(),tt=450,bt=500,Ct=Q.left+(Q.width-tt)/2,Dt=Q.top+(Q.height-bt)/2;return{x:Math.max(10,Ct),y:Math.max(10,Dt)}}else{const Q=Math.max(10,(window.innerWidth-450)/2),tt=Math.max(10,(window.innerHeight-500)/2);return{x:Q,y:tt}}})())},[f,a]);const S=()=>{const H=et(s);if(o.length>=H.maxParams||!H.allowAdd)return;const Q=o.map(Bt=>Bt.paramValue),tt=[6,12,14,24,26,9,20].filter(Bt=>!Q.includes(Bt));if(tt.length===0)return;const bt=U(),Ct=tt[0],Dt={paramName:`${n.modal?.parameterName||"Param"}${Ct}`,paramValue:Ct,lineColor:bt,lineWidth:1,data:[]};l([...o,Dt])},_=H=>{const Q=et(s);if(o.length<=Q.minParams||!Q.allowDelete)return;const tt=[...o];tt.splice(H,1),l(tt)},C=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],paramName:Q},l(tt)},v=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],paramValue:Q},l(tt)},A=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],lineColor:Q},l(tt)},R=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],lineWidth:Q},l(tt)},U=()=>{const H=[r?.chart?.lineColor||"#2962FF",r?.chart?.upColor||"#00C087",r?.chart?.downColor||"#FF5B5A","#4ECDC4","#45B7D1","#96CEB4","#FFEAA7","#DDA0DD","#FF6B6B","#556270"];return H[Math.floor(Math.random()*H.length)]},I=()=>{e(o)},N=()=>{l([...i]),t()},L=H=>{if(H.target===k.current||k.current?.contains(H.target)){c(!0);const Q=M.current.getBoundingClientRect();p({x:H.clientX-Q.left,y:H.clientY-Q.top}),H.preventDefault()}},et=H=>{switch(H){case X.RSI:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.MACD:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:12,paramName:n.indicators?.ma||"Fast",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:26,paramName:n.indicators?.ema||"Slow",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:9,paramName:n.indicators?.macd||"Signal",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.VOLUME:return{minParams:0,maxParams:0,allowAdd:!1,allowDelete:!1,defaultParams:[]};case X.SAR:return{minParams:2,maxParams:2,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:.02,paramName:n.indicators?.sar||"Step",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:.2,paramName:n.indicators?.sar||"Max",lineColor:"#FF6B6B",lineWidth:1,data:[]}]};case X.KDJ:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:9,paramName:"K",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:3,paramName:"D",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:3,paramName:"J",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.ATR:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.STOCHASTIC:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:"K",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:3,paramName:"D",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:3,paramName:n.indicators?.stochastic||"Smooth",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.CCI:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:20,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.BBWIDTH:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:20,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.ADX:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.OBV:return{minParams:0,maxParams:0,allowAdd:!1,allowDelete:!1,defaultParams:[]};default:return{minParams:1,maxParams:5,allowAdd:!0,allowDelete:!0,defaultParams:[]}}};y.useEffect(()=>{const H=tt=>{if(g){const bt=tt.clientX-u.x,Ct=tt.clientY-u.y,Dt=window.innerWidth-450,Bt=window.innerHeight-500;d({x:Math.max(10,Math.min(bt,Dt)),y:Math.max(10,Math.min(Ct,Bt))})}},Q=()=>{c(!1)};if(g)return document.addEventListener("mousemove",H),document.addEventListener("mouseup",Q),()=>{document.removeEventListener("mousemove",H),document.removeEventListener("mouseup",Q)}},[g,u]);const at=H=>{H.target===H.currentTarget&&N()},$=H=>{H.stopPropagation(),H.key==="Enter"&&H.ctrlKey?I():H.key==="Escape"&&N()},J={scrollbarWidth:"thin",scrollbarColor:`${r?.toolbar?.border||"#d9d9d9"} ${r?.toolbar?.background||"#fafafa"}`},O=`
179
+ `;const r=this.getCurrentValue(e.paramName),a=r!==null?r.toFixed(0):"--";i.textContent=`${e.paramName}: ${a}`,t.appendChild(i)}))}getPriceScaleOptions(){return{scaleMargins:{top:.1,bottom:.1},mode:1,autoScale:!0,borderVisible:!0,entireTextOnly:!1,crosshairMarkerVisible:!1}}updateData(t){if(!this.paneInstance||!this.volumeIndicator)return;const e=this.volumeIndicator.calculate(this.volumeIndicatorInfo,t);try{e.forEach(i=>{if(i.data.length>0){const r=this.paneInstance.addSeries(rt.HistogramSeries,{color:i.lineColor||this._default,title:i.paramName,priceScaleId:this.getDefaultPriceScaleId(),...this.getPriceScaleOptions()});r.setData(i.data),this.seriesMap[i.paramName]=r}})}catch{}}getSeries(){return this.seriesMap}updateIndicatorSettings(t){}getIndicatorSettings(){return this.volumeIndicatorInfo.length>0?this.volumeIndicatorInfo[0]:null}destroy(){}handleCrosshairMoveEvent(t){!t.time||!this.seriesMap||Object.keys(this.seriesMap).forEach(e=>{const i=this.seriesMap[e],r=t.seriesData?.get(i);if(r&&typeof r=="object"&&"value"in r){const a=r.value;this.currentValues[e]=a,this.updateInfoParams()}})}clearAllSeries(){this.paneInstance.getSeries().forEach((t,e)=>{this.chartInstance.removeSeries(t)}),this.seriesMap={},this.currentValues={}}};class vo{static createPane(t,e,i,r,a,s,n,o,l){switch(s){case X.VOLUME:return new wo(i,r,a,s,t,e,n,o,l);case X.RSI:return new Ai(i,r,a,s,t,e,n,o,l);case X.MACD:return new Mo(i,r,a,s,t,e,n,o,l);case X.STOCHASTIC:return new bo(i,r,a,s,t,e,n,o,l);case X.SAR:return new _o(i,r,a,s,t,e,n,o,l);case X.KDJ:return new po(i,r,a,s,t,e,n,o,l);case X.ATR:return new oo(i,r,a,s,t,e,n,o,l);case X.CCI:return new uo(i,r,a,s,t,e,n,o,l);case X.BBWIDTH:return new ho(i,r,a,s,t,e,n,o,l);case X.ADX:return new ao(i,r,a,s,t,e,n,o,l);case X.OBV:return new ko(i,r,a,s,t,e,n,o,l);default:return new Ai(i,r,a,s,t,e,n,o,l)}}}class xo{constructor(){this.panesCache=new Map,this.chartInstance=null}setChartInstance(t){this.chartInstance=t}addSubChart(t,e,i,r){if(!this.chartInstance||this.hasPane(e))return;const a=this.panesCache.size,s=this.calculatePaneSize(a),n=a%2===0?"right":"left",o=this.chartInstance.addPane({vertPosition:n,size:s}),l=this.buildPanesCacheId(e),h=vo.createPane(this.chartInstance,o,l,s,n,e,t.props.currentTheme,i,r);this.panesCache.set(l,h),h.init(t.props.chartData)}updatePaneDataBySubChartIndicatorType(t,e){const i=this.getPaneByIndicatorType(e);i&&i.updateData(t)}updateAllPaneData(t){this.removeAllSeries(),this.panesCache.forEach(e=>{e.updateData(t)})}updatePaneThemeBySubChartIndicatorType(t,e){const i=this.getPaneByIndicatorType(e);i&&i.updateThme(t)}updateAllPaneTheme(t){this.panesCache.forEach(e=>{e.updateThme(t)})}updateSettingsBySubChartIndicatorType(t,e,i){const r=this.getPaneByIndicatorType(i);r&&r.updateSettings(t,e)}removePaneBySubChartIndicatorType(t){if(!this.chartInstance)return;const e=this.getPaneByIndicatorType(t);e&&(this.chartInstance.removePane(e.paneInstance.paneIndex()),this.panesCache.delete(this.buildPanesCacheId(t)))}removeAllPane(){this.chartInstance&&(this.panesCache.forEach((t,e)=>{this.chartInstance.removePane(t.paneInstance.paneIndex())}),this.panesCache.clear())}removeAllSeries(){this.chartInstance&&this.panesCache.forEach((t,e)=>{t.paneInstance.getSeries().forEach((i,r)=>{this.chartInstance.removeSeries(i)})})}getParamsByIndicatorType(t){const e=this.getPaneByIndicatorType(t);return e?e.getParams():[]}getPaneByIndicatorType(t){return Array.from(this.panesCache.values()).find(e=>e.indicatorType===t)}getAllPanes(){return Array.from(this.panesCache.values())}hasPane(t){return Array.from(this.panesCache.values()).some(e=>e.indicatorType===t)}calculatePaneSize(t){const a=.8-t*.3;return Math.min(.4,.3+a/(t+1))}buildPanesCacheId(t){return`pane_${t}`}handleMouseDown(t){this.panesCache.forEach(e=>{e.handleMouseDown(t)})}handleMouseMove(t){this.panesCache.forEach(e=>{e.handleMouseMove(t)})}handleMouseUp(t){this.panesCache.forEach(e=>{e.handleMouseUp(t)})}handleCrosshairMoveEvent(t){this.panesCache.forEach(e=>{e.handleCrosshairMoveEvent(t)})}}const Ao=({isOpen:f,onClose:t,onConfirm:e,initialParams:i,theme:r,parentRef:a,indicatorType:s,i18n:n})=>{const[o,l]=y.useState([]),[h,d]=y.useState({x:0,y:0}),[g,c]=y.useState(!1),[u,p]=y.useState({x:0,y:0}),M=y.useRef(null),k=y.useRef(null),P=()=>{switch(s){case X.RSI:return n.indicators?.rsi||"RSI";case X.MACD:return n.indicators?.macd||"MACD";case X.VOLUME:return n.indicators?.volume||"VOLUME";case X.SAR:return n.indicators?.sar||"SAR";case X.KDJ:return n.indicators?.kdj||"KDJ";case X.ATR:return n.indicators?.atr||"ATR";case X.STOCHASTIC:return n.indicators?.stochastic||"STOCHASTIC";case X.CCI:return n.indicators?.cci||"CCI";case X.BBWIDTH:return n.indicators?.bbwidth||"BBWIDTH";case X.ADX:return n.indicators?.adx||"ADX";case X.OBV:return n.indicators?.obv||"OBV";default:return n.subChartIndicators||"副图指标设置"}};y.useEffect(()=>{f&&i&&l([...i])},[f,i]),y.useEffect(()=>{f&&d((()=>{if(a?.current){const Q=a.current.getBoundingClientRect(),tt=450,bt=500,Ct=Q.left+(Q.width-tt)/2,Dt=Q.top+(Q.height-bt)/2;return{x:Math.max(10,Ct),y:Math.max(10,Dt)}}else{const Q=Math.max(10,(window.innerWidth-450)/2),tt=Math.max(10,(window.innerHeight-500)/2);return{x:Q,y:tt}}})())},[f,a]);const S=()=>{const H=et(s);if(o.length>=H.maxParams||!H.allowAdd)return;const Q=o.map(Bt=>Bt.paramValue),tt=[6,12,14,24,26,9,20].filter(Bt=>!Q.includes(Bt));if(tt.length===0)return;const bt=U(),Ct=tt[0],Dt={paramName:`${n.modal?.parameterName||"Param"}${Ct}`,paramValue:Ct,lineColor:bt,lineWidth:1,data:[]};l([...o,Dt])},_=H=>{const Q=et(s);if(o.length<=Q.minParams||!Q.allowDelete)return;const tt=[...o];tt.splice(H,1),l(tt)},C=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],paramName:Q},l(tt)},v=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],paramValue:Q},l(tt)},A=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],lineColor:Q},l(tt)},R=(H,Q)=>{const tt=[...o];tt[H]={...tt[H],lineWidth:Q},l(tt)},U=()=>{const H=[r?.chart?.lineColor||"#2962FF",r?.chart?.upColor||"#00C087",r?.chart?.downColor||"#FF5B5A","#4ECDC4","#45B7D1","#96CEB4","#FFEAA7","#DDA0DD","#FF6B6B","#556270"];return H[Math.floor(Math.random()*H.length)]},I=()=>{e(o)},N=()=>{l([...i]),t()},L=H=>{if(H.target===k.current||k.current?.contains(H.target)){c(!0);const Q=M.current.getBoundingClientRect();p({x:H.clientX-Q.left,y:H.clientY-Q.top}),H.preventDefault()}},et=H=>{switch(H){case X.RSI:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.MACD:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:12,paramName:n.indicators?.ma||"Fast",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:26,paramName:n.indicators?.ema||"Slow",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:9,paramName:n.indicators?.macd||"Signal",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.VOLUME:return{minParams:0,maxParams:0,allowAdd:!1,allowDelete:!1,defaultParams:[]};case X.SAR:return{minParams:2,maxParams:2,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:.02,paramName:n.indicators?.sar||"Step",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:.2,paramName:n.indicators?.sar||"Max",lineColor:"#FF6B6B",lineWidth:1,data:[]}]};case X.KDJ:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:9,paramName:"K",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:3,paramName:"D",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:3,paramName:"J",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.ATR:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.STOCHASTIC:return{minParams:3,maxParams:3,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:"K",lineColor:"#2962FF",lineWidth:1,data:[]},{paramValue:3,paramName:"D",lineColor:"#FF6B6B",lineWidth:1,data:[]},{paramValue:3,paramName:n.indicators?.stochastic||"Smooth",lineColor:"#00C087",lineWidth:1,data:[]}]};case X.CCI:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:20,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.BBWIDTH:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:20,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.ADX:return{minParams:1,maxParams:1,allowAdd:!1,allowDelete:!1,defaultParams:[{paramValue:14,paramName:n.modal?.parameterName||"Period",lineColor:"#2962FF",lineWidth:1,data:[]}]};case X.OBV:return{minParams:0,maxParams:0,allowAdd:!1,allowDelete:!1,defaultParams:[]};default:return{minParams:1,maxParams:5,allowAdd:!0,allowDelete:!0,defaultParams:[]}}};y.useEffect(()=>{const H=tt=>{if(g){const bt=tt.clientX-u.x,Ct=tt.clientY-u.y,Dt=window.innerWidth-450,Bt=window.innerHeight-500;d({x:Math.max(10,Math.min(bt,Dt)),y:Math.max(10,Math.min(Ct,Bt))})}},Q=()=>{c(!1)};if(g)return document.addEventListener("mousemove",H),document.addEventListener("mouseup",Q),()=>{document.removeEventListener("mousemove",H),document.removeEventListener("mouseup",Q)}},[g,u]);const at=H=>{H.target===H.currentTarget&&N()},$=H=>{H.stopPropagation(),H.key==="Enter"&&H.ctrlKey?I():H.key==="Escape"&&N()},J={scrollbarWidth:"thin",scrollbarColor:`${r?.toolbar?.border||"#d9d9d9"} ${r?.toolbar?.background||"#fafafa"}`},O=`
180
180
  .subchart-scrollbar::-webkit-scrollbar {
181
181
  width: 6px;
182
182
  }
package/dist/index.mjs CHANGED
@@ -41517,18 +41517,22 @@ class po extends Dt {
41517
41517
  }
41518
41518
  updateData(t) {
41519
41519
  if (!this.paneInstance || !this.adxIndicator) return;
41520
- this.adxIndicator.calculate(this.adxIndicatorInfo, t).forEach((i) => {
41521
- if (i.data.length > 0) {
41522
- const r = this.paneInstance.addSeries(ut, {
41523
- color: i.lineColor,
41524
- lineWidth: i.lineWidth,
41525
- title: i.paramName,
41526
- priceScaleId: this.getDefaultPriceScaleId(),
41527
- ...this.getPriceScaleOptions()
41528
- });
41529
- r.setData(i.data), this.seriesMap[i.paramName] = r;
41530
- }
41531
- });
41520
+ const e = this.adxIndicator.calculate(this.adxIndicatorInfo, t);
41521
+ try {
41522
+ e.forEach((i) => {
41523
+ if (i.data.length > 0) {
41524
+ const r = this.paneInstance.addSeries(ut, {
41525
+ color: i.lineColor,
41526
+ lineWidth: i.lineWidth,
41527
+ title: i.paramName,
41528
+ priceScaleId: this.getDefaultPriceScaleId(),
41529
+ ...this.getPriceScaleOptions()
41530
+ });
41531
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
41532
+ }
41533
+ });
41534
+ } catch {
41535
+ }
41532
41536
  }
41533
41537
  getSeries() {
41534
41538
  return this.seriesMap;
@@ -41664,18 +41668,22 @@ class Mo extends Dt {
41664
41668
  }
41665
41669
  updateData(t) {
41666
41670
  if (!this.paneInstance || !this.atrIndicator) return;
41667
- this.atrIndicator.calculate(this.atrIndicatorInfo, t).forEach((i) => {
41668
- if (i.data.length > 0) {
41669
- const r = this.paneInstance.addSeries(ut, {
41670
- color: i.lineColor,
41671
- lineWidth: i.lineWidth,
41672
- title: i.paramName,
41673
- priceScaleId: this.getDefaultPriceScaleId(),
41674
- ...this.getPriceScaleOptions()
41675
- });
41676
- r.setData(i.data), this.seriesMap[i.paramName] = r;
41677
- }
41678
- });
41671
+ const e = this.atrIndicator.calculate(this.atrIndicatorInfo, t);
41672
+ try {
41673
+ e.forEach((i) => {
41674
+ if (i.data.length > 0) {
41675
+ const r = this.paneInstance.addSeries(ut, {
41676
+ color: i.lineColor,
41677
+ lineWidth: i.lineWidth,
41678
+ title: i.paramName,
41679
+ priceScaleId: this.getDefaultPriceScaleId(),
41680
+ ...this.getPriceScaleOptions()
41681
+ });
41682
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
41683
+ }
41684
+ });
41685
+ } catch {
41686
+ }
41679
41687
  }
41680
41688
  getSeries() {
41681
41689
  return this.seriesMap;
@@ -41784,18 +41792,22 @@ class ko extends Dt {
41784
41792
  }
41785
41793
  updateData(t) {
41786
41794
  if (!this.paneInstance || !this.bbWidthIndicator) return;
41787
- this.bbWidthIndicator.calculate(this.bbWidthIndicatorInfo, t).forEach((i) => {
41788
- if (i.data.length > 0) {
41789
- const r = this.paneInstance.addSeries(ut, {
41790
- color: i.lineColor,
41791
- lineWidth: i.lineWidth,
41792
- title: i.paramName,
41793
- priceScaleId: this.getDefaultPriceScaleId(),
41794
- ...this.getPriceScaleOptions()
41795
- });
41796
- r.setData(i.data), this.seriesMap[i.paramName] = r;
41797
- }
41798
- });
41795
+ const e = this.bbWidthIndicator.calculate(this.bbWidthIndicatorInfo, t);
41796
+ try {
41797
+ e.forEach((i) => {
41798
+ if (i.data.length > 0) {
41799
+ const r = this.paneInstance.addSeries(ut, {
41800
+ color: i.lineColor,
41801
+ lineWidth: i.lineWidth,
41802
+ title: i.paramName,
41803
+ priceScaleId: this.getDefaultPriceScaleId(),
41804
+ ...this.getPriceScaleOptions()
41805
+ });
41806
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
41807
+ }
41808
+ });
41809
+ } catch {
41810
+ }
41799
41811
  }
41800
41812
  getSeries() {
41801
41813
  return this.seriesMap;
@@ -41914,18 +41926,22 @@ class So extends Dt {
41914
41926
  }
41915
41927
  updateData(t) {
41916
41928
  if (!this.paneInstance || !this.cciIndicator) return;
41917
- this.cciIndicator.calculate(this.cciIndicatorInfo, t).forEach((i) => {
41918
- if (i.data.length > 0) {
41919
- const r = this.paneInstance.addSeries(ut, {
41920
- color: i.lineColor,
41921
- lineWidth: i.lineWidth,
41922
- title: i.paramName,
41923
- priceScaleId: this.getDefaultPriceScaleId(),
41924
- ...this.getPriceScaleOptions()
41925
- });
41926
- r.setData(i.data), this.seriesMap[i.paramName] = r;
41927
- }
41928
- });
41929
+ const e = this.cciIndicator.calculate(this.cciIndicatorInfo, t);
41930
+ try {
41931
+ e.forEach((i) => {
41932
+ if (i.data.length > 0) {
41933
+ const r = this.paneInstance.addSeries(ut, {
41934
+ color: i.lineColor,
41935
+ lineWidth: i.lineWidth,
41936
+ title: i.paramName,
41937
+ priceScaleId: this.getDefaultPriceScaleId(),
41938
+ ...this.getPriceScaleOptions()
41939
+ });
41940
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
41941
+ }
41942
+ });
41943
+ } catch {
41944
+ }
41929
41945
  }
41930
41946
  getSeries() {
41931
41947
  return this.seriesMap;
@@ -42073,18 +42089,22 @@ class Co extends Dt {
42073
42089
  }
42074
42090
  updateData(t) {
42075
42091
  if (!this.paneInstance || !this.kdjIndicator) return;
42076
- this.kdjIndicator.calculate(this.kdjIndicatorInfo, t).forEach((i) => {
42077
- if (i.data.length > 0) {
42078
- const r = this.paneInstance.addSeries(ut, {
42079
- color: i.lineColor,
42080
- lineWidth: i.lineWidth,
42081
- title: i.paramName,
42082
- priceScaleId: this.getDefaultPriceScaleId(),
42083
- ...this.getPriceScaleOptions()
42084
- });
42085
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42086
- }
42087
- });
42092
+ const e = this.kdjIndicator.calculate(this.kdjIndicatorInfo, t);
42093
+ try {
42094
+ e.forEach((i) => {
42095
+ if (i.data.length > 0) {
42096
+ const r = this.paneInstance.addSeries(ut, {
42097
+ color: i.lineColor,
42098
+ lineWidth: i.lineWidth,
42099
+ title: i.paramName,
42100
+ priceScaleId: this.getDefaultPriceScaleId(),
42101
+ ...this.getPriceScaleOptions()
42102
+ });
42103
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42104
+ }
42105
+ });
42106
+ } catch {
42107
+ }
42088
42108
  }
42089
42109
  getSeries() {
42090
42110
  return this.seriesMap;
@@ -42242,33 +42262,37 @@ class To extends Dt {
42242
42262
  }
42243
42263
  updateData(t) {
42244
42264
  if (!this.paneInstance || !this.macdIndicator) return;
42245
- this.macdIndicator.calculate(this.macdIndicatorInfo, t).forEach((i) => {
42246
- if (i.data.length > 0)
42247
- if (i.paramName === "MACD") {
42248
- const r = this.paneInstance.addSeries(Gt, {
42249
- upColor: i.lineColor,
42250
- downColor: "#FF6B6B",
42251
- lineWidth: 1,
42252
- title: i.paramName,
42253
- priceScaleId: this.getDefaultPriceScaleId(),
42254
- ...this.getPriceScaleOptions()
42255
- }), a = i.data.map((s) => ({
42256
- time: s.time,
42257
- value: s.value,
42258
- color: s.value >= 0 ? i.lineColor : "#FF6B6B"
42259
- }));
42260
- r.setData(a), this.seriesMap[i.paramName] = r;
42261
- } else {
42262
- const r = this.paneInstance.addSeries(ut, {
42263
- color: i.lineColor,
42264
- lineWidth: i.lineWidth,
42265
- title: i.paramName,
42266
- priceScaleId: this.getDefaultPriceScaleId(),
42267
- ...this.getPriceScaleOptions()
42268
- });
42269
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42270
- }
42271
- });
42265
+ const e = this.macdIndicator.calculate(this.macdIndicatorInfo, t);
42266
+ try {
42267
+ e.forEach((i) => {
42268
+ if (i.data.length > 0)
42269
+ if (i.paramName === "MACD") {
42270
+ const r = this.paneInstance.addSeries(Gt, {
42271
+ upColor: i.lineColor,
42272
+ downColor: "#FF6B6B",
42273
+ lineWidth: 1,
42274
+ title: i.paramName,
42275
+ priceScaleId: this.getDefaultPriceScaleId(),
42276
+ ...this.getPriceScaleOptions()
42277
+ }), a = i.data.map((s) => ({
42278
+ time: s.time,
42279
+ value: s.value,
42280
+ color: s.value >= 0 ? i.lineColor : "#FF6B6B"
42281
+ }));
42282
+ r.setData(a), this.seriesMap[i.paramName] = r;
42283
+ } else {
42284
+ const r = this.paneInstance.addSeries(ut, {
42285
+ color: i.lineColor,
42286
+ lineWidth: i.lineWidth,
42287
+ title: i.paramName,
42288
+ priceScaleId: this.getDefaultPriceScaleId(),
42289
+ ...this.getPriceScaleOptions()
42290
+ });
42291
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42292
+ }
42293
+ });
42294
+ } catch {
42295
+ }
42272
42296
  }
42273
42297
  getSeries() {
42274
42298
  return this.seriesMap;
@@ -42383,18 +42407,22 @@ class vo extends Dt {
42383
42407
  }
42384
42408
  updateData(t) {
42385
42409
  if (!this.paneInstance || !this.obvIndicator) return;
42386
- this.obvIndicator.calculate(this.obvIndicatorInfo, t).forEach((i) => {
42387
- if (i.data.length > 0) {
42388
- const r = this.paneInstance.addSeries(ut, {
42389
- color: i.lineColor,
42390
- lineWidth: i.lineWidth,
42391
- title: i.paramName,
42392
- priceScaleId: this.getDefaultPriceScaleId(),
42393
- ...this.getPriceScaleOptions()
42394
- });
42395
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42396
- }
42397
- });
42410
+ const e = this.obvIndicator.calculate(this.obvIndicatorInfo, t);
42411
+ try {
42412
+ e.forEach((i) => {
42413
+ if (i.data.length > 0) {
42414
+ const r = this.paneInstance.addSeries(ut, {
42415
+ color: i.lineColor,
42416
+ lineWidth: i.lineWidth,
42417
+ title: i.paramName,
42418
+ priceScaleId: this.getDefaultPriceScaleId(),
42419
+ ...this.getPriceScaleOptions()
42420
+ });
42421
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42422
+ }
42423
+ });
42424
+ } catch {
42425
+ }
42398
42426
  }
42399
42427
  getSeries() {
42400
42428
  return this.seriesMap;
@@ -42540,18 +42568,22 @@ class Ui extends Dt {
42540
42568
  }
42541
42569
  updateData(t) {
42542
42570
  if (!this.paneInstance || !this.rsiIndicator) return;
42543
- this.rsiIndicator.calculate(this.rsiIndicatorInfo, t).forEach((i) => {
42544
- if (i.data.length > 0) {
42545
- const r = this.paneInstance.addSeries(ut, {
42546
- color: i.lineColor,
42547
- lineWidth: i.lineWidth,
42548
- title: i.paramName,
42549
- priceScaleId: this.getDefaultPriceScaleId(),
42550
- ...this.getPriceScaleOptions()
42551
- });
42552
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42553
- }
42554
- });
42571
+ const e = this.rsiIndicator.calculate(this.rsiIndicatorInfo, t);
42572
+ try {
42573
+ e.forEach((i) => {
42574
+ if (i.data.length > 0) {
42575
+ const r = this.paneInstance.addSeries(ut, {
42576
+ color: i.lineColor,
42577
+ lineWidth: i.lineWidth,
42578
+ title: i.paramName,
42579
+ priceScaleId: this.getDefaultPriceScaleId(),
42580
+ ...this.getPriceScaleOptions()
42581
+ });
42582
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42583
+ }
42584
+ });
42585
+ } catch {
42586
+ }
42555
42587
  }
42556
42588
  getSeries() {
42557
42589
  return this.seriesMap;
@@ -42664,18 +42696,22 @@ class Do extends Dt {
42664
42696
  }
42665
42697
  updateData(t) {
42666
42698
  if (!this.paneInstance || !this.sarIndicator) return;
42667
- this.sarIndicator.calculate(this.sarIndicatorInfo, t).forEach((i) => {
42668
- if (i.data.length > 0) {
42669
- const r = this.paneInstance.addSeries(ut, {
42670
- color: i.lineColor,
42671
- lineWidth: i.lineWidth,
42672
- title: i.paramName,
42673
- priceScaleId: this.getDefaultPriceScaleId(),
42674
- ...this.getPriceScaleOptions()
42675
- });
42676
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42677
- }
42678
- });
42699
+ const e = this.sarIndicator.calculate(this.sarIndicatorInfo, t);
42700
+ try {
42701
+ e.forEach((i) => {
42702
+ if (i.data.length > 0) {
42703
+ const r = this.paneInstance.addSeries(ut, {
42704
+ color: i.lineColor,
42705
+ lineWidth: i.lineWidth,
42706
+ title: i.paramName,
42707
+ priceScaleId: this.getDefaultPriceScaleId(),
42708
+ ...this.getPriceScaleOptions()
42709
+ });
42710
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42711
+ }
42712
+ });
42713
+ } catch {
42714
+ }
42679
42715
  }
42680
42716
  getSeries() {
42681
42717
  return this.seriesMap;
@@ -42843,18 +42879,22 @@ class Eo extends Dt {
42843
42879
  }
42844
42880
  updateData(t) {
42845
42881
  if (!this.paneInstance || !this.stochasticIndicator) return;
42846
- this.stochasticIndicator.calculate(this.stochasticIndicatorInfo, t).forEach((i) => {
42847
- if (i.data.length > 0) {
42848
- const r = this.paneInstance.addSeries(ut, {
42849
- color: i.lineColor,
42850
- lineWidth: i.lineWidth,
42851
- title: i.paramName,
42852
- priceScaleId: this.getDefaultPriceScaleId(),
42853
- ...this.getPriceScaleOptions()
42854
- });
42855
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42856
- }
42857
- });
42882
+ const e = this.stochasticIndicator.calculate(this.stochasticIndicatorInfo, t);
42883
+ try {
42884
+ e.forEach((i) => {
42885
+ if (i.data.length > 0) {
42886
+ const r = this.paneInstance.addSeries(ut, {
42887
+ color: i.lineColor,
42888
+ lineWidth: i.lineWidth,
42889
+ title: i.paramName,
42890
+ priceScaleId: this.getDefaultPriceScaleId(),
42891
+ ...this.getPriceScaleOptions()
42892
+ });
42893
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
42894
+ }
42895
+ });
42896
+ } catch {
42897
+ }
42858
42898
  }
42859
42899
  getSeries() {
42860
42900
  return this.seriesMap;
@@ -42980,17 +43020,21 @@ let Ro = class extends Dt {
42980
43020
  }
42981
43021
  updateData(t) {
42982
43022
  if (!this.paneInstance || !this.volumeIndicator) return;
42983
- this.volumeIndicator.calculate(this.volumeIndicatorInfo, t).forEach((i) => {
42984
- if (i.data.length > 0) {
42985
- const r = this.paneInstance.addSeries(Gt, {
42986
- color: i.lineColor || this._default,
42987
- title: i.paramName,
42988
- priceScaleId: this.getDefaultPriceScaleId(),
42989
- ...this.getPriceScaleOptions()
42990
- });
42991
- r.setData(i.data), this.seriesMap[i.paramName] = r;
42992
- }
42993
- });
43023
+ const e = this.volumeIndicator.calculate(this.volumeIndicatorInfo, t);
43024
+ try {
43025
+ e.forEach((i) => {
43026
+ if (i.data.length > 0) {
43027
+ const r = this.paneInstance.addSeries(Gt, {
43028
+ color: i.lineColor || this._default,
43029
+ title: i.paramName,
43030
+ priceScaleId: this.getDefaultPriceScaleId(),
43031
+ ...this.getPriceScaleOptions()
43032
+ });
43033
+ r.setData(i.data), this.seriesMap[i.paramName] = r;
43034
+ }
43035
+ });
43036
+ } catch {
43037
+ }
42994
43038
  }
42995
43039
  getSeries() {
42996
43040
  return this.seriesMap;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "candleview",
3
- "version": "2.8.7",
3
+ "version": "2.8.8",
4
4
  "description": "An AI-powered data visualization and charting engine designed for the financial industry.",
5
5
  "keywords": [
6
6
  "Finance",