Свеча обновления подсвечника ApexChart

#updating #apexcharts #candlestick-chart

Вопрос:

Я пытаюсь обновить существующую свечу и пытаюсь установить новую (открыть, максимум, минимум, закрыть). Я перепробовал много кодов, но ни один из них не работает.

Вот мои усилия

 var chart; options = {  series: [{  data: [{  x: new Date(2016, 01, 01),  y: [51.98, 56.29, 51.59, 53.85]  },  {  x: new Date(2016, 02, 01), // This candle I am trying to update.  y: [53.66, 54.99, 51.35, 52.95]  },  {  x: new Date(2016, 08, 01),  y: [52.76, 57.35, 52.15, 57.03]  }] }],  chart: {  type: 'candlestick',  height: 350  },  title: {  text: 'BTC USDT',  align: 'left'  },  xaxis: {  type: 'datetime',  },  yaxis: {  tooltip: {  enabled: true  }  } }; chart = new ApexCharts(document.querySelector("#chart"), options);  chart.render(); chart.appendData({ // not updating existing candle data: [{  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60]  }] });  chart.addPointAnnotation({// not working  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60] });  chart.updateSeries([{ // NOT working data: [{  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60]  }] }]);    /* chart.appendSeries({ // This is not updating same time candle  animation: false,  data: [{  x: new Date(2016, 01, 01),  y: [51.98, 56.29, 51.59, 49.85]  }] }) */ 
 lt;div id="chart"gt;lt;/divgt; lt;script src="https://cdn.jsdelivr.net/npm/apexcharts"gt;lt;/scriptgt; 
 y: [51.98, 56.29, 51.59, 53.85]  },  {  x: new Date(2016, 02, 01),  y: [53.66, 54.99, 51.35, 52.95]  },  {  x: new Date(2016, 08, 01),  y: [52.76, 57.35, 52.15, 57.03]  }] }],  chart: {  type: 'candlestick',  height: 350  },  title: {  text: 'BTC USDT',  align: 'left'  },  xaxis: {  type: 'datetime',  },  yaxis: {  tooltip: {  enabled: true  }  } }; chart = new ApexCharts(document.querySelector("#chart"), options);  chart.render(); chart.appendData({ // not updating existing candle data: [{  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60]  }] });  chart.addPointAnnotation({// not working  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60] });  chart.updateSeries([{ // NOT working data: [{  x: new Date(2016, 02, 01),  y: [51.98, 56.29, 51.59, 60]  }] }]);    /* chart.appendSeries({ // This is not updating same time candle  animation: false,  data: [{  x: new Date(2016, 01, 01),  y: [51.98, 56.29, 51.59, 49.85]  }] }) */  

Ответ №1:

Последние пару дней я возился с диаграммами, пытаясь решить аналогичную проблему.

Я получаю обновления через API WebSocket с помощью веб-работника, поэтому соединение не становится сонным через некоторое время/при бездействии. Я обнаружил, что для обновления свечи работает следующее:

 let candlestick;  let nextTimestamp = getNextTimestamp(initialChartData[initialChartData.length - 1].x);   worker.onmessage = event =gt; {  candlestick = this.transformDataKraken(event.data);  }   // Set up chart update  setInterval(() =gt; {  if (!candlestick) return;   const chartData = options.series[0].data;   if (candlestick.x lt; nextTimestamp) {  // Update candlestick  candlestick.x.setSeconds(0, 0);  chartData[chartData.length - 1] = candlestick;  } else {  // Time's up, add new candlestick  chartData.shift();  chartData.push(candlestick);   nextTimestamp = getNextTimestamp(nextTimestamp);  }   chart.updateSeries([{  data: chartData  }]);  }, 1000);  

getNextTimestamp просто добавляет 60 секунд к переданному значению.

Однако у меня все еще есть некоторые проблемы с тем, что график ведет себя странно и сжимает ширину свечей по прошествии некоторого времени/вкладка была неактивна, как будто размер массива изменился, хотя это явно не так.