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.
- package/dist/index.js +11 -11
- package/dist/index.mjs +190 -146
- 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)
|
|
41521
|
-
|
|
41522
|
-
|
|
41523
|
-
|
|
41524
|
-
|
|
41525
|
-
|
|
41526
|
-
|
|
41527
|
-
|
|
41528
|
-
|
|
41529
|
-
|
|
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)
|
|
41668
|
-
|
|
41669
|
-
|
|
41670
|
-
|
|
41671
|
-
|
|
41672
|
-
|
|
41673
|
-
|
|
41674
|
-
|
|
41675
|
-
|
|
41676
|
-
|
|
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)
|
|
41788
|
-
|
|
41789
|
-
|
|
41790
|
-
|
|
41791
|
-
|
|
41792
|
-
|
|
41793
|
-
|
|
41794
|
-
|
|
41795
|
-
|
|
41796
|
-
|
|
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)
|
|
41918
|
-
|
|
41919
|
-
|
|
41920
|
-
|
|
41921
|
-
|
|
41922
|
-
|
|
41923
|
-
|
|
41924
|
-
|
|
41925
|
-
|
|
41926
|
-
|
|
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)
|
|
42077
|
-
|
|
42078
|
-
|
|
42079
|
-
|
|
42080
|
-
|
|
42081
|
-
|
|
42082
|
-
|
|
42083
|
-
|
|
42084
|
-
|
|
42085
|
-
|
|
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)
|
|
42246
|
-
|
|
42247
|
-
|
|
42248
|
-
|
|
42249
|
-
|
|
42250
|
-
|
|
42251
|
-
|
|
42252
|
-
|
|
42253
|
-
|
|
42254
|
-
|
|
42255
|
-
|
|
42256
|
-
|
|
42257
|
-
|
|
42258
|
-
|
|
42259
|
-
|
|
42260
|
-
|
|
42261
|
-
|
|
42262
|
-
|
|
42263
|
-
|
|
42264
|
-
|
|
42265
|
-
|
|
42266
|
-
|
|
42267
|
-
|
|
42268
|
-
|
|
42269
|
-
|
|
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)
|
|
42387
|
-
|
|
42388
|
-
|
|
42389
|
-
|
|
42390
|
-
|
|
42391
|
-
|
|
42392
|
-
|
|
42393
|
-
|
|
42394
|
-
|
|
42395
|
-
|
|
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)
|
|
42544
|
-
|
|
42545
|
-
|
|
42546
|
-
|
|
42547
|
-
|
|
42548
|
-
|
|
42549
|
-
|
|
42550
|
-
|
|
42551
|
-
|
|
42552
|
-
|
|
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)
|
|
42668
|
-
|
|
42669
|
-
|
|
42670
|
-
|
|
42671
|
-
|
|
42672
|
-
|
|
42673
|
-
|
|
42674
|
-
|
|
42675
|
-
|
|
42676
|
-
|
|
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)
|
|
42847
|
-
|
|
42848
|
-
|
|
42849
|
-
|
|
42850
|
-
|
|
42851
|
-
|
|
42852
|
-
|
|
42853
|
-
|
|
42854
|
-
|
|
42855
|
-
|
|
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)
|
|
42984
|
-
|
|
42985
|
-
|
|
42986
|
-
|
|
42987
|
-
|
|
42988
|
-
|
|
42989
|
-
|
|
42990
|
-
|
|
42991
|
-
|
|
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;
|