diff --git a/docs/source/_ext/styles.py b/docs/source/_ext/styles.py new file mode 100644 index 0000000..b77687b --- /dev/null +++ b/docs/source/_ext/styles.py @@ -0,0 +1,16 @@ +import pygments.styles + + +bulb = pygments.styles.get_style_by_name('lightbulb') +sas = pygments.styles.get_style_by_name('sas') + + +class DarkStyle(bulb): + background_color = '#1e2124ff' + + +class LightStyle(sas): + background_color = '#efeff4ff' + + + diff --git a/docs/source/_static/fonts/MaisonNeue-Demi.otf b/docs/source/_static/fonts/MaisonNeue-Demi.otf new file mode 100644 index 0000000..15dd6eb Binary files /dev/null and b/docs/source/_static/fonts/MaisonNeue-Demi.otf differ diff --git a/docs/source/_static/fonts/MaisonNeue-Medium.otf b/docs/source/_static/fonts/MaisonNeue-Medium.otf new file mode 100644 index 0000000..cb98016 Binary files /dev/null and b/docs/source/_static/fonts/MaisonNeue-Medium.otf differ diff --git a/docs/source/_static/fonts/MaisonNeue-MediumItalic.otf b/docs/source/_static/fonts/MaisonNeue-MediumItalic.otf new file mode 100644 index 0000000..0ad07e7 Binary files /dev/null and b/docs/source/_static/fonts/MaisonNeue-MediumItalic.otf differ diff --git a/docs/source/_static/funcs.js b/docs/source/_static/funcs.js new file mode 100644 index 0000000..b45110b --- /dev/null +++ b/docs/source/_static/funcs.js @@ -0,0 +1,478 @@ +if (!window.Chart) { + class Chart { + constructor(chartId, innerWidth, innerHeight, position, autoSize) { + this.makeCandlestickSeries = this.makeCandlestickSeries.bind(this) + this.reSize = this.reSize.bind(this) + this.id = chartId + this.lines = [] + this.wrapper = document.createElement('div') + this.div = document.createElement('div') + this.scale = { + width: innerWidth, + height: innerHeight, + } + this.container = document.getElementById('wrapper') + this.commandFunctions = [] + this.chart = LightweightCharts.createChart(this.div, { + width: this.container.clientWidth * innerWidth, + height: this.container.clientHeight * innerHeight, + layout: { + textColor: '#d1d4dc', + background: { + color: '#000000', + type: LightweightCharts.ColorType.Solid, + }, + fontSize: 12 + }, + rightPriceScale: { + scaleMargins: {top: 0.3, bottom: 0.25}, + }, + timeScale: {timeVisible: true, secondsVisible: false}, + crosshair: { + mode: LightweightCharts.CrosshairMode.Normal, + vertLine: { + labelBackgroundColor: 'rgb(46, 46, 46)' + }, + horzLine: { + labelBackgroundColor: 'rgb(55, 55, 55)' + } + }, + grid: { + vertLines: {color: 'rgba(29, 30, 38, 5)'}, + horzLines: {color: 'rgba(29, 30, 58, 5)'}, + }, + handleScroll: {vertTouchDrag: true}, + }) + this.wrapper.style.width = `${100 * innerWidth}%` + this.wrapper.style.height = `${100 * innerHeight}%` + this.wrapper.style.display = 'flex' + this.wrapper.style.flexDirection = 'column' + this.wrapper.style.position = 'relative' + this.wrapper.style.display = 'flex' + this.wrapper.style.float = position + + this.div.style.position = 'relative' + this.div.style.display = 'flex' + this.wrapper.appendChild(this.div) + document.getElementById('wrapper').append(this.wrapper) + + document.addEventListener('keydown', (event) => { + for (let i = 0; i < this.commandFunctions.length; i++) { + if (this.commandFunctions[i](event)) break + } + }) + if (!autoSize) return + window.addEventListener('resize', () => this.reSize()) + } + reSize() { + let topBarOffset = 'topBar' in this ? this.topBar.offsetHeight : 0 + this.chart.resize(this.container.clientWidth * this.scale.width, (this.container.clientHeight * this.scale.height) - topBarOffset) + } + makeCandlestickSeries() { + this.markers = [] + this.horizontal_lines = [] + this.candleData = [] + this.precision = 2 + let up = 'rgba(39, 157, 130, 100)' + let down = 'rgba(200, 97, 100, 100)' + this.series = this.chart.addCandlestickSeries({ + color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, + downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, + }) + this.volumeSeries = this.chart.addHistogramSeries({ + color: '#26a69a', + priceFormat: {type: 'volume'}, + priceScaleId: '', + }) + this.series.priceScale().applyOptions({ + scaleMargins: {top: 0.2, bottom: 0.2}, + }); + this.volumeSeries.priceScale().applyOptions({ + scaleMargins: {top: 0.8, bottom: 0}, + }); + } + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + } + window.Chart = Chart + + class HorizontalLine { + constructor(chart, lineId, price, color, width, style, axisLabelVisible, text) { + this.updatePrice = this.updatePrice.bind(this) + this.deleteLine = this.deleteLine.bind(this) + this.chart = chart + this.price = price + this.color = color + this.id = lineId + this.priceLine = { + price: this.price, + color: this.color, + lineWidth: width, + lineStyle: style, + axisLabelVisible: axisLabelVisible, + title: text, + } + this.line = this.chart.series.createPriceLine(this.priceLine) + this.chart.horizontal_lines.push(this) + } + + toJSON() { + // Exclude the chart attribute from serialization + const {chart, line, ...serialized} = this; + return serialized; + } + + updatePrice(price) { + this.chart.series.removePriceLine(this.line) + this.price = price + this.priceLine.price = this.price + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + updateLabel(text) { + this.chart.series.removePriceLine(this.line) + this.priceLine.title = text + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + updateColor(color) { + this.chart.series.removePriceLine(this.line) + this.color = color + this.priceLine.color = this.color + this.line = this.chart.series.createPriceLine(this.priceLine) + } + + deleteLine() { + this.chart.series.removePriceLine(this.line) + this.chart.horizontal_lines.splice(this.chart.horizontal_lines.indexOf(this)) + delete this + } + } + + window.HorizontalLine = HorizontalLine + + class Legend { + constructor(chart, ohlcEnabled, percentEnabled, linesEnabled, + color = 'rgb(191, 195, 203)', fontSize = '11', fontFamily = 'Monaco') { + this.div = document.createElement('div') + this.div.style.position = 'absolute' + this.div.style.zIndex = '3000' + this.div.style.pointerEvents = 'none' + this.div.style.top = '10px' + this.div.style.left = '10px' + this.div.style.display = 'flex' + this.div.style.flexDirection = 'column' + this.div.style.maxWidth = `${(chart.scale.width * 100) - 8}vw` + this.div.style.color = color + this.div.style.fontSize = fontSize + 'px' + this.div.style.fontFamily = fontFamily + this.candle = document.createElement('div') + + this.div.appendChild(this.candle) + chart.div.appendChild(this.div) + + this.color = color + + this.linesEnabled = linesEnabled + this.makeLines(chart) + + let legendItemFormat = (num, decimal) => num.toFixed(decimal).toString().padStart(8, ' ') + + let shorthandFormat = (num) => { + if (num >= 1000000) { + return (num / 1000000).toFixed(1) + 'M'; + } else if (num >= 1000) { + return (num / 1000).toFixed(1) + 'K'; + } + return num.toString().padStart(8, ' '); + } + + chart.chart.subscribeCrosshairMove((param) => { + if (param.time) { + let data = param.seriesData.get(chart.series); + let finalString = '' + if (data) { + this.candle.style.color = '' + let ohlc = `O ${legendItemFormat(data.open, chart.precision)} + | H ${legendItemFormat(data.high, chart.precision)} + | L ${legendItemFormat(data.low, chart.precision)} + | C ${legendItemFormat(data.close, chart.precision)} ` + let percentMove = ((data.close - data.open) / data.open) * 100 + let percent = `| ${percentMove >= 0 ? '+' : ''}${percentMove.toFixed(2)} %` + finalString += ohlcEnabled ? ohlc : '' + finalString += percentEnabled ? percent : '' + + let volumeData = param.seriesData.get(chart.volumeSeries) + if (volumeData) finalString += ohlcEnabled ? `
V ${shorthandFormat(volumeData.value)}` : '' + } + this.candle.innerHTML = finalString + '
' + this.lines.forEach((line) => { + if (!param.seriesData.get(line.line.series)) return + let price = legendItemFormat(param.seriesData.get(line.line.series).value, line.line.precision) + line.div.innerHTML = ` ${line.line.name} : ${price}` + }) + + } else { + this.candle.style.color = 'transparent' + } + }); + } + + makeLines(chart) { + this.lines = [] + if (this.linesEnabled) chart.lines.forEach(line => this.lines.push(this.makeLineRow(line))) + } + + makeLineRow(line) { + let openEye = ` + + \` + ` + let closedEye = ` + + ` + + let row = document.createElement('div') + row.style.display = 'flex' + row.style.alignItems = 'center' + let div = document.createElement('div') + let toggle = document.createElement('div') + toggle.style.borderRadius = '4px' + toggle.style.marginLeft = '10px' + toggle.style.pointerEvents = 'auto' + + + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "22"); + svg.setAttribute("height", "16"); + + let group = document.createElementNS("http://www.w3.org/2000/svg", "g"); + group.innerHTML = openEye + + let on = true + toggle.addEventListener('click', (event) => { + if (on) { + on = false + group.innerHTML = closedEye + line.series.applyOptions({ + visible: false + }) + } else { + on = true + line.series.applyOptions({ + visible: true + }) + group.innerHTML = openEye + } + }) + toggle.addEventListener('mouseover', (event) => { + document.body.style.cursor = 'pointer' + toggle.style.backgroundColor = 'rgba(50, 50, 50, 0.5)' + }) + toggle.addEventListener('mouseleave', (event) => { + document.body.style.cursor = 'default' + toggle.style.backgroundColor = 'transparent' + }) + svg.appendChild(group) + toggle.appendChild(svg); + row.appendChild(div) + row.appendChild(toggle) + this.div.appendChild(row) + return { + div: div, + row: row, + toggle: toggle, + line: line, + solid: line.color.startsWith('rgba') ? line.color.replace(/[^,]+(?=\))/, '1') : line.color + } + } + } + + window.Legend = Legend +} +function syncCrosshairs(childChart, parentChart) { + function crosshairHandler (e, thisChart, otherChart, otherHandler) { + thisChart.applyOptions({crosshair: { horzLine: { + visible: true, + labelVisible: true, + }}}) + otherChart.applyOptions({crosshair: { horzLine: { + visible: false, + labelVisible: false, + }}}) + + otherChart.unsubscribeCrosshairMove(otherHandler) + if (e.time !== undefined) { + let xx = otherChart.timeScale().timeToCoordinate(e.time); + otherChart.setCrosshairXY(xx,300,true); + } else if (e.point !== undefined){ + otherChart.setCrosshairXY(e.point.x,300,false); + } + otherChart.subscribeCrosshairMove(otherHandler) + } + let parent = 0 + let child = 0 + let parentCrosshairHandler = (e) => { + parent ++ + if (parent < 10) return + child = 0 + crosshairHandler(e, parentChart, childChart, childCrosshairHandler) + } + let childCrosshairHandler = (e) => { + child ++ + if (child < 10) return + parent = 0 + crosshairHandler(e, childChart, parentChart, parentCrosshairHandler) + } + parentChart.subscribeCrosshairMove(parentCrosshairHandler) + childChart.subscribeCrosshairMove(childCrosshairHandler) +} + +function stampToDate(stampOrBusiness) { + return new Date(stampOrBusiness*1000) +} +function dateToStamp(date) { + return Math.floor(date.getTime()/1000) +} + +function lastBar(obj) { + return obj[obj.length-1] +} + +function calculateTrendLine(startDate, startValue, endDate, endValue, interval, chart, ray=false) { + let reversed = false + if (stampToDate(endDate).getTime() < stampToDate(startDate).getTime()) { + reversed = true; + [startDate, endDate] = [endDate, startDate]; + } + let startIndex + if (stampToDate(startDate).getTime() < stampToDate(chart.candleData[0].time).getTime()) { + startIndex = 0 + } + else { + startIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(startDate).getTime()) + } + + if (startIndex === -1) { + return [] + } + let endIndex + if (ray) { + endIndex = chart.candleData.length+1000 + startValue = endValue + } + else { + endIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(endDate).getTime()) + if (endIndex === -1) { + let barsBetween = (stampToDate(endDate)-stampToDate(chart.candleData[chart.candleData.length-1].time))/interval + endIndex = chart.candleData.length-1+barsBetween + } + } + + let numBars = endIndex-startIndex + const rate_of_change = (endValue - startValue) / numBars; + const trendData = []; + let currentDate = null + let iPastData = 0 + for (let i = 0; i <= numBars; i++) { + if (chart.candleData[startIndex+i]) { + currentDate = chart.candleData[startIndex+i].time + } + else { + iPastData ++ + currentDate = dateToStamp(new Date(stampToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval))) + } + + const currentValue = reversed ? startValue + rate_of_change * (numBars - i) : startValue + rate_of_change * i; + trendData.push({ time: currentDate, value: currentValue }); + } + return trendData; +} + + +if (!window.ContextMenu) { + class ContextMenu { + constructor() { + this.menu = document.createElement('div') + this.menu.style.position = 'absolute' + this.menu.style.zIndex = '10000' + this.menu.style.background = 'rgb(50, 50, 50)' + this.menu.style.color = '#ececed' + this.menu.style.display = 'none' + this.menu.style.borderRadius = '5px' + this.menu.style.padding = '3px 3px' + this.menu.style.fontSize = '13px' + this.menu.style.cursor = 'default' + document.body.appendChild(this.menu) + this.hoverItem = null + + let closeMenu = (event) => { + if (!this.menu.contains(event.target)) { + this.menu.style.display = 'none'; + this.listen(false) + } + } + + this.onRightClick = (event) => { + event.preventDefault(); + this.menu.style.left = event.clientX + 'px'; + this.menu.style.top = event.clientY + 'px'; + this.menu.style.display = 'block'; + document.removeEventListener('click', closeMenu) + document.addEventListener('click', closeMenu) + } + } + listen(active) { + active ? document.addEventListener('contextmenu', this.onRightClick) : document.removeEventListener('contextmenu', this.onRightClick) + } + menuItem(text, action, hover=false) { + let item = document.createElement('span') + item.style.display = 'flex' + item.style.alignItems = 'center' + item.style.justifyContent = 'space-between' + item.style.padding = '2px 10px' + item.style.margin = '1px 0px' + item.style.borderRadius = '3px' + this.menu.appendChild(item) + + let elem = document.createElement('span') + elem.innerText = text + item.appendChild(elem) + + if (hover) { + let arrow = document.createElement('span') + arrow.innerText = `►` + arrow.style.fontSize = '8px' + item.appendChild(arrow) + } + + elem.addEventListener('mouseover', (event) => { + item.style.backgroundColor = 'rgba(0, 122, 255, 0.3)' + if (this.hoverItem && this.hoverItem.closeAction) this.hoverItem.closeAction() + this.hoverItem = {elem: elem, action: action, closeAction: hover} + }) + elem.addEventListener('mouseout', (event) => item.style.backgroundColor = 'transparent') + if (!hover) elem.addEventListener('click', (event) => {action(event); this.menu.style.display = 'none'}) + else { + let timeout + elem.addEventListener('mouseover', () => timeout = setTimeout(() => action(item.getBoundingClientRect()), 100)) + elem.addEventListener('mouseout', () => clearTimeout(timeout)) + } + } + separator() { + let separator = document.createElement('div') + separator.style.width = '90%' + separator.style.height = '1px' + separator.style.margin = '3px 0px' + separator.style.backgroundColor = '#3C434C' + this.menu.appendChild(separator) + } + + } + window.ContextMenu = ContextMenu +} + +window.callbackFunction = () => undefined; \ No newline at end of file diff --git a/docs/source/_static/ohlcv.json b/docs/source/_static/ohlcv.json new file mode 100644 index 0000000..943f8a4 --- /dev/null +++ b/docs/source/_static/ohlcv.json @@ -0,0 +1,38761 @@ +{ + "volume": [ + + { + "time": 1277769600, + "value": 277519500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1277856000, + "value": 253039500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1277942400, + "value": 121461000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278028800, + "value": 75871500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278374400, + "value": 101664000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278460800, + "value": 102645000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278547200, + "value": 114526500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1278633600, + "value": 60061500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278892800, + "value": 32487000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1278979200, + "value": 39439500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279065600, + "value": 62097000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279152000, + "value": 55222500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279238400, + "value": 37939500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279497600, + "value": 36303000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279584000, + "value": 26229000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1279670400, + "value": 18214500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1279756800, + "value": 13924500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1279843200, + "value": 9603000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280102400, + "value": 13416000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280188800, + "value": 8658000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280275200, + "value": 6801000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280361600, + "value": 8734500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280448000, + "value": 6258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280707200, + "value": 10417500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280793600, + "value": 17827500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1280880000, + "value": 13594500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1280966400, + "value": 11722500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281052800, + "value": 10542000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281312000, + "value": 10684500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1281398400, + "value": 17506500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281484800, + "value": 11340000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281571200, + "value": 10168500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1281657600, + "value": 9385500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1281916800, + "value": 7186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282003200, + "value": 6597000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282089600, + "value": 8905500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1282176000, + "value": 8290500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282262400, + "value": 4381500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282521600, + "value": 16048500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282608000, + "value": 9973500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1282694400, + "value": 7372500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282780800, + "value": 6189000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1282867200, + "value": 5628000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283126400, + "value": 10831500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283212800, + "value": 2956500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283299200, + "value": 7306500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283385600, + "value": 7159500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283472000, + "value": 6402000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283817600, + "value": 3612000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1283904000, + "value": 4281000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1283990400, + "value": 5586000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284076800, + "value": 5706000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284336000, + "value": 5361000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284422400, + "value": 9564000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284508800, + "value": 9990000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1284595200, + "value": 38347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284681600, + "value": 17478000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1284940800, + "value": 13968000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285027200, + "value": 11749500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285113600, + "value": 13227000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285200000, + "value": 9856500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285286400, + "value": 8590500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285545600, + "value": 6181500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285632000, + "value": 17905500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285718400, + "value": 27925500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1285804800, + "value": 31186500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1285891200, + "value": 7783500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286150400, + "value": 9444000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1286236800, + "value": 4914000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286323200, + "value": 4617000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286409600, + "value": 2064000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286496000, + "value": 3973500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286755200, + "value": 2497500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1286841600, + "value": 3405000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1286928000, + "value": 4728000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287014400, + "value": 4314000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287100800, + "value": 4189500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287360000, + "value": 2374500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287446400, + "value": 3601500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1287532800, + "value": 4608000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287619200, + "value": 6166500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287705600, + "value": 2374500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1287964800, + "value": 1737000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1288051200, + "value": 9744000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1288137600, + "value": 0.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294272000, + "value": 28846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294358400, + "value": 33460500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294617600, + "value": 19849500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1294704000, + "value": 25282500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294790400, + "value": 13564500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294876800, + "value": 10503000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1294963200, + "value": 17412000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295308800, + "value": 23950500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295395200, + "value": 35040000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295481600, + "value": 33759000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1295568000, + "value": 18036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1295827200, + "value": 24352500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1295913600, + "value": 18924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296000000, + "value": 16050000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296086400, + "value": 12790500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296172800, + "value": 15490500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296432000, + "value": 11974500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296518400, + "value": 10473000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296604800, + "value": 8454000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1296691200, + "value": 7540500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1296777600, + "value": 8067000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297036800, + "value": 13209000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297123200, + "value": 51768000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297209600, + "value": 37779000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297296000, + "value": 12324000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297382400, + "value": 9424500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297641600, + "value": 18984000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297728000, + "value": 14146500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297814400, + "value": 60928500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1297900800, + "value": 38383500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1297987200, + "value": 35118000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298332800, + "value": 30369000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298419200, + "value": 23451000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298505600, + "value": 15372000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1298592000, + "value": 19941000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1298851200, + "value": 15580500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1298937600, + "value": 16422000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299024000, + "value": 9826500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299110400, + "value": 9478500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299196800, + "value": 22677000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299456000, + "value": 30210000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299542400, + "value": 20715000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299628800, + "value": 13692000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1299715200, + "value": 14049000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1299801600, + "value": 13821000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300060800, + "value": 17205000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300147200, + "value": 19534500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1300233600, + "value": 17208000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300320000, + "value": 12612000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300406400, + "value": 10195500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300665600, + "value": 6057000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300752000, + "value": 8097000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1300838400, + "value": 5943000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1300924800, + "value": 6564000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301011200, + "value": 8416500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301270400, + "value": 15309000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301356800, + "value": 11188500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301443200, + "value": 18003000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301529600, + "value": 163869000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1301616000, + "value": 42078000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301875200, + "value": 38563500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1301961600, + "value": 46600500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302048000, + "value": 18907500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302134400, + "value": 41496000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302220800, + "value": 28378500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302480000, + "value": 20121000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302566400, + "value": 20044500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302652800, + "value": 17970000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1302739200, + "value": 14481000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1302825600, + "value": 13975500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303084800, + "value": 15267000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303171200, + "value": 8127000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303257600, + "value": 12396000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303344000, + "value": 19473000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303689600, + "value": 11760000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1303776000, + "value": 20268000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303862400, + "value": 14770500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1303948800, + "value": 23356500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304035200, + "value": 9780000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304294400, + "value": 11614500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304380800, + "value": 13510500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304467200, + "value": 15252000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304553600, + "value": 17584500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304640000, + "value": 13941000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1304899200, + "value": 13521000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1304985600, + "value": 22632000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305072000, + "value": 14250000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305158400, + "value": 9286500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305244800, + "value": 9783000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305504000, + "value": 11152500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305590400, + "value": 18295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1305676800, + "value": 10804500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305763200, + "value": 38518500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1305849600, + "value": 12024000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306108800, + "value": 12774000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306195200, + "value": 9003000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306281600, + "value": 69592500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306368000, + "value": 48706500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306454400, + "value": 24933000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306800000, + "value": 48790500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1306886400, + "value": 22666500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1306972800, + "value": 14418000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307059200, + "value": 92074500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307318400, + "value": 34503000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307404800, + "value": 17590500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307491200, + "value": 25230000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1307577600, + "value": 23793000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307664000, + "value": 22432500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1307923200, + "value": 25342500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308009600, + "value": 23337000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308096000, + "value": 19891500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308182400, + "value": 26997000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308268800, + "value": 25465500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308528000, + "value": 22590000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308614400, + "value": 22168500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308700800, + "value": 21912000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1308787200, + "value": 17314500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1308873600, + "value": 49531500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309132800, + "value": 16056000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309219200, + "value": 13153500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309305600, + "value": 21499500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309392000, + "value": 13981500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309478400, + "value": 12570000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309824000, + "value": 14746500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1309910400, + "value": 13030500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1309996800, + "value": 19233000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1310083200, + "value": 18363000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310342400, + "value": 14514000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310428800, + "value": 15451500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310515200, + "value": 15813000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1310601600, + "value": 17193000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310688000, + "value": 10407000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1310947200, + "value": 12657000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1311033600, + "value": 14488500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311120000, + "value": 45171000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311206400, + "value": 14995500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311292800, + "value": 8658000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311552000, + "value": 9960000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311638400, + "value": 11218500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311724800, + "value": 13981500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1311811200, + "value": 13846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1311897600, + "value": 13464000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312156800, + "value": 16134000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312243200, + "value": 21258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312329600, + "value": 25755000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312416000, + "value": 44475000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312502400, + "value": 28983000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1312761600, + "value": 38667000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312848000, + "value": 19720500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1312934400, + "value": 22410000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313020800, + "value": 12295500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1313107200, + "value": 14947500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1313366400, + "value": 10935000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313452800, + "value": 7972500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313539200, + "value": 9489000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313625600, + "value": 15598500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313712000, + "value": 18744000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1313971200, + "value": 14208000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314057600, + "value": 12903000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314144000, + "value": 10108500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314230400, + "value": 10123500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314316800, + "value": 11325000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314576000, + "value": 11877000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314662400, + "value": 5392500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314748800, + "value": 12174000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1314835200, + "value": 12555000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1314921600, + "value": 11379000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315267200, + "value": 11688000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315353600, + "value": 6774000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315440000, + "value": 6633000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315526400, + "value": 9963000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1315785600, + "value": 8395500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315872000, + "value": 10750500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1315958400, + "value": 12340500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316044800, + "value": 8277000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1316131200, + "value": 20959500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316390400, + "value": 17196000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316476800, + "value": 16471500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316563200, + "value": 14565000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1316649600, + "value": 11467500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316736000, + "value": 16702500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1316995200, + "value": 13869000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317081600, + "value": 9808500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317168000, + "value": 10636500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317254400, + "value": 12891000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317340800, + "value": 19627500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317600000, + "value": 15189000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1317686400, + "value": 17628000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317772800, + "value": 17782500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317859200, + "value": 24651000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1317945600, + "value": 19497000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318204800, + "value": 12903000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318291200, + "value": 8533500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318377600, + "value": 16698000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318464000, + "value": 15391500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318550400, + "value": 20578500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318809600, + "value": 11227500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1318896000, + "value": 14308500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1318982400, + "value": 11691000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319068800, + "value": 14899500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319155200, + "value": 14001000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319414400, + "value": 13860000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319500800, + "value": 9043500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319587200, + "value": 7510500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1319673600, + "value": 12655500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1319760000, + "value": 18213000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320019200, + "value": 16635000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320105600, + "value": 9394500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320192000, + "value": 12871500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320278400, + "value": 36706500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320364800, + "value": 43872000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320624000, + "value": 18619500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320710400, + "value": 15342000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1320796800, + "value": 14122500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320883200, + "value": 11065500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1320969600, + "value": 56487000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321228800, + "value": 18837000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321315200, + "value": 13186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321401600, + "value": 26086500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1321488000, + "value": 20025000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321574400, + "value": 13359000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321833600, + "value": 15288000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1321920000, + "value": 10806000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322006400, + "value": 6690000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1322179200, + "value": 3430500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322438400, + "value": 10074000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322524800, + "value": 8560500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1322611200, + "value": 11122500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322697600, + "value": 14413500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1322784000, + "value": 10338000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323043200, + "value": 15996000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323129600, + "value": 14083500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323216000, + "value": 9607500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323302400, + "value": 48607500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323388800, + "value": 18294000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323648000, + "value": 11262000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323734400, + "value": 14616000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323820800, + "value": 17221500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1323907200, + "value": 10383000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1323993600, + "value": 14853000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324252800, + "value": 14272500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324339200, + "value": 12039000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1324425600, + "value": 25294500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324512000, + "value": 14973000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1324598400, + "value": 8787000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1324944000, + "value": 10927500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325030400, + "value": 8535000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325116800, + "value": 7056000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325203200, + "value": 4962000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1325548800, + "value": 13644000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325635200, + "value": 9174000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325721600, + "value": 14919000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1325808000, + "value": 14559000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326067200, + "value": 13207500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326153600, + "value": 9924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326240000, + "value": 9738000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326326400, + "value": 9886500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326412800, + "value": 80587500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1326758400, + "value": 68454000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326844800, + "value": 17664000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1326931200, + "value": 18375000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327017600, + "value": 9475500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327276800, + "value": 8737500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327363200, + "value": 12381000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327449600, + "value": 8737500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327536000, + "value": 17626500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1327622400, + "value": 10332000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327881600, + "value": 10779000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1327968000, + "value": 13840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328054400, + "value": 7369500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328140800, + "value": 11790000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328227200, + "value": 11242500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328486400, + "value": 9498000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328572800, + "value": 14199000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328659200, + "value": 9072000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1328745600, + "value": 17317500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1328832000, + "value": 27693000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329091200, + "value": 16954500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329177600, + "value": 26682000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329264000, + "value": 40675500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329350400, + "value": 32883000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1329436800, + "value": 20112000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329782400, + "value": 16618500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329868800, + "value": 23985000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1329955200, + "value": 11665500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330041600, + "value": 14241000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330300800, + "value": 8934000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330387200, + "value": 9070500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330473600, + "value": 7635000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330560000, + "value": 8875500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1330646400, + "value": 7927500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330905600, + "value": 6894000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1330992000, + "value": 7669500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331078400, + "value": 5398500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331164800, + "value": 8953500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331251200, + "value": 22969500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1331510400, + "value": 28791000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1331596800, + "value": 14412000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331683200, + "value": 12595500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331769600, + "value": 8461500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1331856000, + "value": 10819500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332115200, + "value": 14856000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332201600, + "value": 8392500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332288000, + "value": 8650500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332374400, + "value": 7563000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332460800, + "value": 16336500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332720000, + "value": 46437000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332806400, + "value": 36403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1332892800, + "value": 13975500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1332979200, + "value": 10455000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1333065600, + "value": 11152500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333324800, + "value": 13074000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333411200, + "value": 16107000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333497600, + "value": 66337500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333584000, + "value": 21292500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1333929600, + "value": 24487500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334016000, + "value": 25423500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334102400, + "value": 16089000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334188800, + "value": 14713500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334275200, + "value": 9622500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334534400, + "value": 15481500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334620800, + "value": 16413000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1334707200, + "value": 12088500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334793600, + "value": 11424000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1334880000, + "value": 12180000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335139200, + "value": 13161000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335225600, + "value": 9708000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335312000, + "value": 10542000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335398400, + "value": 6229500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335484800, + "value": 8539500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1335744000, + "value": 6088500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335830400, + "value": 9690000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1335916800, + "value": 7291500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336003200, + "value": 12472500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336089600, + "value": 18291000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336348800, + "value": 16948500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336435200, + "value": 45520500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336521600, + "value": 28653000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336608000, + "value": 82389000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1336694400, + "value": 18039000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1336953600, + "value": 20400000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337040000, + "value": 22992000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337126400, + "value": 18601500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337212800, + "value": 16810500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337299200, + "value": 22939500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337558400, + "value": 21505500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1337644800, + "value": 35101500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1337731200, + "value": 18036000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337817600, + "value": 15760500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1337904000, + "value": 11173500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338249600, + "value": 23724000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1338336000, + "value": 19323000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338422400, + "value": 15906000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338508800, + "value": 13029000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338768000, + "value": 15243000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1338854400, + "value": 9331500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1338940800, + "value": 13300500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339027200, + "value": 7242000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339113600, + "value": 12514500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339372800, + "value": 9043500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339459200, + "value": 8221500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339545600, + "value": 12510000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339632000, + "value": 12885000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1339718400, + "value": 8910000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1339977600, + "value": 17913000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340064000, + "value": 13380000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340150400, + "value": 50334000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340236800, + "value": 25275000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340323200, + "value": 44323500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1340582400, + "value": 22111500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340668800, + "value": 37164000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340755200, + "value": 14725500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340841600, + "value": 13173000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1340928000, + "value": 15910500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341187200, + "value": 19246500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341273600, + "value": 13993500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341446400, + "value": 18108000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341532800, + "value": 10950000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341792000, + "value": 13303500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1341878400, + "value": 10500000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1341964800, + "value": 8515500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342051200, + "value": 15897000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342137600, + "value": 19225500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342396800, + "value": 25431000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342483200, + "value": 37756500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342569600, + "value": 42406500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1342656000, + "value": 21282000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1342742400, + "value": 23131500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343001600, + "value": 20463000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343088000, + "value": 21778500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343174400, + "value": 37428000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343260800, + "value": 33084000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343347200, + "value": 24735000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1343606400, + "value": 29761500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343692800, + "value": 20505000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1343779200, + "value": 21585000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343865600, + "value": 19086000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1343952000, + "value": 17092500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344211200, + "value": 17017500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344297600, + "value": 28341000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344384000, + "value": 17298000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344470400, + "value": 9636000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344556800, + "value": 10066500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344816000, + "value": 12691500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1344902400, + "value": 11076000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1344988800, + "value": 7506000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345075200, + "value": 8028000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345161600, + "value": 7033500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345420800, + "value": 13743000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345507200, + "value": 10840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1345593600, + "value": 10396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345680000, + "value": 21502500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1345766400, + "value": 20377500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346025600, + "value": 18559500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346112000, + "value": 20662500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346198400, + "value": 12213000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346284800, + "value": 9609000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346371200, + "value": 7690500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346716800, + "value": 10840500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346803200, + "value": 9276000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1346889600, + "value": 12036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1346976000, + "value": 13315500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347235200, + "value": 20403000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1347321600, + "value": 12136500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1347408000, + "value": 16017000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347494400, + "value": 20878500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347580800, + "value": 21982500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347840000, + "value": 46476000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1347926400, + "value": 26220000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348012800, + "value": 15385500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348099200, + "value": 10585500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348185600, + "value": 24996000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348444800, + "value": 18555000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1348531200, + "value": 78354000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348617600, + "value": 22567500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1348704000, + "value": 26001000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1348790400, + "value": 64419000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349049600, + "value": 12910500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349136000, + "value": 10389000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349222400, + "value": 12870000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349308800, + "value": 18454500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349395200, + "value": 12109500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349654400, + "value": 13128000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349740800, + "value": 17464500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1349827200, + "value": 7413000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1349913600, + "value": 6646500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350000000, + "value": 13588500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350259200, + "value": 20388000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350345600, + "value": 7063500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350432000, + "value": 9720000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350518400, + "value": 9792000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350604800, + "value": 10015500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1350864000, + "value": 5101500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1350950400, + "value": 8620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351036800, + "value": 12669000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351123200, + "value": 8308500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351209600, + "value": 6726000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1351641600, + "value": 11193000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351728000, + "value": 14761500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1351814400, + "value": 14913000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352073600, + "value": 29164500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352160000, + "value": 34033500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352246400, + "value": 25089000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352332800, + "value": 18096000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352419200, + "value": 12726000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352678400, + "value": 8142000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352764800, + "value": 14413500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1352851200, + "value": 12508500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1352937600, + "value": 13594500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353024000, + "value": 12493500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353283200, + "value": 19404000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353369600, + "value": 13012500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353456000, + "value": 12994500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353628800, + "value": 6234000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1353888000, + "value": 6823500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1353974400, + "value": 10090500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354060800, + "value": 22344000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354147200, + "value": 15483000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354233600, + "value": 20268000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354492800, + "value": 26139000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354579200, + "value": 18213000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354665600, + "value": 7434000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1354752000, + "value": 9687000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1354838400, + "value": 9814500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355097600, + "value": 13413000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355184000, + "value": 22396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355270400, + "value": 29326500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355356800, + "value": 31737000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1355443200, + "value": 14131500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355702400, + "value": 12079500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355788800, + "value": 23095500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1355875200, + "value": 18744000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1355961600, + "value": 13641000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356048000, + "value": 21853500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356307200, + "value": 5562000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1356480000, + "value": 8796000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356566400, + "value": 8053500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1356652800, + "value": 6033000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1356912000, + "value": 8590500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1357084800, + "value": 16518000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1357171200, + "value": 10825500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363219200, + "value": 29146500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363305600, + "value": 42304500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363564800, + "value": 17931000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363651200, + "value": 15828000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363737600, + "value": 16198500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1363824000, + "value": 15042000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1363910400, + "value": 6421500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364169600, + "value": 34368000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364256000, + "value": 22050000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364342400, + "value": 18799500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364428800, + "value": 11656500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1364774400, + "value": 201547500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1364860800, + "value": 94021500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1364947200, + "value": 82765500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365033600, + "value": 32724000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365120000, + "value": 20602500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365379200, + "value": 23578500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365465600, + "value": 22929000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1365552000, + "value": 29934000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365638400, + "value": 50419500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365724800, + "value": 43282500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1365984000, + "value": 23191500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366070400, + "value": 41016000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366156800, + "value": 29680500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366243200, + "value": 45765000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366329600, + "value": 43929000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366588800, + "value": 56449500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366675200, + "value": 53149500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366761600, + "value": 36709500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1366848000, + "value": 40113000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1366934400, + "value": 52822500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367193600, + "value": 52944000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367280000, + "value": 79696500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367366400, + "value": 37645500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367452800, + "value": 44152500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367539200, + "value": 49215000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367798400, + "value": 63787500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1367884800, + "value": 145771500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1367971200, + "value": 97968000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368057600, + "value": 416440500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368144000, + "value": 362424000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368403200, + "value": 324441000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368489600, + "value": 540166500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1368576000, + "value": 245694000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368662400, + "value": 314040000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1368748800, + "value": 275742000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369008000, + "value": 116409000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369094400, + "value": 129556500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369180800, + "value": 124705500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369267200, + "value": 173866500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369353600, + "value": 234340500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369699200, + "value": 286362000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1369785600, + "value": 365599500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369872000, + "value": 232486500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1369958400, + "value": 216676500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370217600, + "value": 279295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370304000, + "value": 128937000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370390400, + "value": 178788000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370476800, + "value": 139008000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370563200, + "value": 154503000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1370822400, + "value": 134262000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370908800, + "value": 107361000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1370995200, + "value": 133843500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371081600, + "value": 87330000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371168000, + "value": 95694000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371427200, + "value": 103032000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1371513600, + "value": 129123000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371600000, + "value": 125938500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1371686400, + "value": 148359000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1371772800, + "value": 171208500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372032000, + "value": 104620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372118400, + "value": 85672500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372204800, + "value": 95920500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372291200, + "value": 127455000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372377600, + "value": 84156000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372636800, + "value": 159403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1372723200, + "value": 177274500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372809600, + "value": 70027500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1372982400, + "value": 99724500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373241600, + "value": 113974500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373328000, + "value": 121951500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373414400, + "value": 81409500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373500800, + "value": 107755500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373587200, + "value": 166258500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1373846400, + "value": 144150000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1373932800, + "value": 469743000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374019200, + "value": 379722000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374105600, + "value": 166929000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374192000, + "value": 85578000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374451200, + "value": 143059500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374537600, + "value": 111156000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374624000, + "value": 99454500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1374710400, + "value": 76276500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1374796800, + "value": 139750500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375056000, + "value": 141123000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375142400, + "value": 190620000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1375228800, + "value": 92283000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375315200, + "value": 77371500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375401600, + "value": 90321000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375660800, + "value": 148099500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375747200, + "value": 133714500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1375833600, + "value": 264238500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1375920000, + "value": 387346500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376006400, + "value": 129208500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376265600, + "value": 215790000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376352000, + "value": 124554000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376438400, + "value": 166930500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1376524800, + "value": 147001500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376611200, + "value": 101158500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376870400, + "value": 116574000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1376956800, + "value": 90135000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377043200, + "value": 89446500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377129600, + "value": 151780500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377216000, + "value": 187560000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377475200, + "value": 350391000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377561600, + "value": 248074500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1377648000, + "value": 209382000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377734400, + "value": 134815500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1377820800, + "value": 161145000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378166400, + "value": 174235500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378252800, + "value": 164263500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378339200, + "value": 95404500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378425600, + "value": 122739000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378684800, + "value": 207159000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378771200, + "value": 128748000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1378857600, + "value": 83227500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1378944000, + "value": 90027000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379030400, + "value": 75963000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379289600, + "value": 109735500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379376000, + "value": 78295500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379462400, + "value": 78660000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379548800, + "value": 224395500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379635200, + "value": 194923500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1379894400, + "value": 119229000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1379980800, + "value": 90906000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380067200, + "value": 117744000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380153600, + "value": 95916000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380240000, + "value": 84856500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380499200, + "value": 129867000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1380585600, + "value": 112054500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380672000, + "value": 298063500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380758400, + "value": 342652500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1380844800, + "value": 209007000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381104000, + "value": 166999500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381190400, + "value": 198939000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381276800, + "value": 220770000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381363200, + "value": 129027000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381449600, + "value": 119569500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381708800, + "value": 112860000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381795200, + "value": 159427500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1381881600, + "value": 119692500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1381968000, + "value": 97383000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382054400, + "value": 85054500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382313600, + "value": 165351000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382400000, + "value": 166023000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382486400, + "value": 190072500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382572800, + "value": 158160000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1382659200, + "value": 110428500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1382918400, + "value": 112183500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383004800, + "value": 205161000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383091200, + "value": 121746000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383177600, + "value": 131301000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383264000, + "value": 104220000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383523200, + "value": 188814000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1383609600, + "value": 319066500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383696000, + "value": 442978500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383782400, + "value": 319876500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1383868800, + "value": 316498500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384128000, + "value": 202396500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384214400, + "value": 213652500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384300800, + "value": 175584000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384387200, + "value": 175161000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384473600, + "value": 143160000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384732800, + "value": 333507000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384819200, + "value": 282606000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1384905600, + "value": 199353000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1384992000, + "value": 172042500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1385078400, + "value": 162112500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385337600, + "value": 150082500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385424000, + "value": 201268500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385510400, + "value": 178762500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1385683200, + "value": 142236000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1385942400, + "value": 110358000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386028800, + "value": 374767500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386115200, + "value": 191470500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386201600, + "value": 134154000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386288000, + "value": 115554000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386547200, + "value": 150270000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386633600, + "value": 172441500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386720000, + "value": 111934500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1386806400, + "value": 173362500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1386892800, + "value": 174357000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387152000, + "value": 109501500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387238400, + "value": 174391500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387324800, + "value": 182674500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387411200, + "value": 202656000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1387497600, + "value": 123055500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387756800, + "value": 88005000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1387843200, + "value": 159850500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388016000, + "value": 118942500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388102400, + "value": 93999000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388361600, + "value": 74286000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1388448000, + "value": 72408000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388620800, + "value": 102918000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388707200, + "value": 78061500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1388966400, + "value": 89131500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389052800, + "value": 83844000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389139200, + "value": 101304000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389225600, + "value": 88711500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389312000, + "value": 126364500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389571200, + "value": 84717000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389657600, + "value": 379350000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389744000, + "value": 274327500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1389830400, + "value": 160425000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1389916800, + "value": 124987500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390262400, + "value": 130549500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390348800, + "value": 90628500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390435200, + "value": 104628000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390521600, + "value": 101746500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390780800, + "value": 115896000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1390867200, + "value": 80989500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1390953600, + "value": 77025000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391040000, + "value": 107673000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391126400, + "value": 84319500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391385600, + "value": 89644500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391472000, + "value": 62623500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391558400, + "value": 93388500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1391644800, + "value": 73384500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391731200, + "value": 117148500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1391990400, + "value": 164770500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392076800, + "value": 140068500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392163200, + "value": 66439500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392249600, + "value": 105280500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392336000, + "value": 80040000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392681600, + "value": 117477000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392768000, + "value": 202486500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1392854400, + "value": 231760500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1392940800, + "value": 102037500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393200000, + "value": 108903000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393286400, + "value": 420369000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393372800, + "value": 312486000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393459200, + "value": 223077000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393545600, + "value": 180037500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1393804800, + "value": 165219000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393891200, + "value": 108879000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1393977600, + "value": 72594000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394064000, + "value": 94290000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394150400, + "value": 95437500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394409600, + "value": 97983000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394496000, + "value": 109213500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394582400, + "value": 123525000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1394668800, + "value": 79090500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1394755200, + "value": 103077000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395014400, + "value": 76896000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1395100800, + "value": 78610500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1395187200, + "value": 62955000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395273600, + "value": 47638500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395360000, + "value": 104617500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395619200, + "value": 142279500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395705600, + "value": 99859500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395792000, + "value": 87933000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395878400, + "value": 120972000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1395964800, + "value": 125509500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396224000, + "value": 106504500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396310400, + "value": 93630000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396396800, + "value": 138853500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1396483200, + "value": 140214000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396569600, + "value": 146892000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396828800, + "value": 126373500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1396915200, + "value": 87385500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397001600, + "value": 65019000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397088000, + "value": 89880000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397174400, + "value": 115252500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1397433600, + "value": 96993000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397520000, + "value": 174859500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397606400, + "value": 87391500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1397692800, + "value": 75393000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398038400, + "value": 67105500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398124800, + "value": 123586500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398211200, + "value": 91764000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398297600, + "value": 67018500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398384000, + "value": 88900500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398643200, + "value": 90400500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398729600, + "value": 74610000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398816000, + "value": 55795500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1398902400, + "value": 68469000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1398988800, + "value": 51756000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399248000, + "value": 62872500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399334400, + "value": 71347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399420800, + "value": 127287000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399507200, + "value": 257352000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1399593600, + "value": 109512000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399852800, + "value": 91471500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1399939200, + "value": 91531500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400025600, + "value": 70441500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400112000, + "value": 79266000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1400198400, + "value": 57685500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400457600, + "value": 59709000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400544000, + "value": 72919500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1400630400, + "value": 67347000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400716800, + "value": 77029500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1400803200, + "value": 49992000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401148800, + "value": 68053500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401235200, + "value": 68530500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401321600, + "value": 46740000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401408000, + "value": 72352500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401667200, + "value": 59125500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401753600, + "value": 50698500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1401840000, + "value": 44190000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1401926400, + "value": 50929500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402012800, + "value": 39301500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402272000, + "value": 34545000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402358400, + "value": 43896000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402444800, + "value": 52020000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402531200, + "value": 78660000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1402617600, + "value": 91671000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402876800, + "value": 171028500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1402963200, + "value": 169213500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403049600, + "value": 89343000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403136000, + "value": 114487500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403222400, + "value": 63924000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403481600, + "value": 100888500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403568000, + "value": 104314500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403654400, + "value": 74611500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1403740800, + "value": 65886000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1403827200, + "value": 75367500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404086400, + "value": 61995000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404172800, + "value": 53196000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404259200, + "value": 102298500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404345600, + "value": 66034500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404691200, + "value": 74419500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404777600, + "value": 101098500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1404864000, + "value": 50980500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1404950400, + "value": 63258000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405036800, + "value": 41347500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405296000, + "value": 92257500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405382400, + "value": 71305500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405468800, + "value": 51513000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405555200, + "value": 57648000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1405641600, + "value": 53826000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405900800, + "value": 49165500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1405987200, + "value": 35058000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406073600, + "value": 39615000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406160000, + "value": 39552000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406246400, + "value": 39411000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406505600, + "value": 84943500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406592000, + "value": 41269500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406678400, + "value": 60807000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1406764800, + "value": 96696000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1406851200, + "value": 153400500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407110400, + "value": 75952500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407196800, + "value": 67884000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407283200, + "value": 118677000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407369600, + "value": 95010000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407456000, + "value": 64384500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1407715200, + "value": 101056500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407801600, + "value": 74634000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1407888000, + "value": 88335000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1407974400, + "value": 51877500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408060800, + "value": 47685000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408320000, + "value": 71943000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408406400, + "value": 66840000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408492800, + "value": 38166000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1408579200, + "value": 37018500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1408665600, + "value": 35620500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1408924800, + "value": 55287000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409011200, + "value": 47110500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1409097600, + "value": 38287500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409184000, + "value": 36576000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409270400, + "value": 82822500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409616000, + "value": 122932500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409702400, + "value": 83658000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1409788800, + "value": 104331000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1409875200, + "value": 136144500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410134400, + "value": 69922500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410220800, + "value": 57493500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410307200, + "value": 46741500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410393600, + "value": 48127500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410480000, + "value": 41457000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410739200, + "value": 209746500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410825600, + "value": 106606500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1410912000, + "value": 65944500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1410998400, + "value": 47353500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411084800, + "value": 87552000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411344000, + "value": 104559000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411430400, + "value": 73747500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411516800, + "value": 48142500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1411603200, + "value": 61905000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411689600, + "value": 49257000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1411948800, + "value": 61668000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412035200, + "value": 54453000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412121600, + "value": 75615000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412208000, + "value": 118692000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412294400, + "value": 70530000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412553600, + "value": 102403500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412640000, + "value": 59218500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412726400, + "value": 63711000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1412812800, + "value": 94407000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1412899200, + "value": 167515500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413158400, + "value": 145405500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413244800, + "value": 89052000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413331200, + "value": 116542500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413417600, + "value": 66036000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413504000, + "value": 146335500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1413763200, + "value": 43081500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413849600, + "value": 49818000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1413936000, + "value": 50922000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414022400, + "value": 44418000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414108800, + "value": 44964000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414368000, + "value": 122512500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414454400, + "value": 136755000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414540800, + "value": 64392000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414627200, + "value": 41557500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1414713600, + "value": 95433000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1414972800, + "value": 53284500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415059200, + "value": 45828000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415145600, + "value": 110295000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415232000, + "value": 199843500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415318400, + "value": 66370500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415577600, + "value": 60531000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415664000, + "value": 104346000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415750400, + "value": 74176500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1415836800, + "value": 83121000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1415923200, + "value": 80746500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416182400, + "value": 106527000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416268800, + "value": 59107500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416355200, + "value": 102915000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416441600, + "value": 46186500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416528000, + "value": 98868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1416787200, + "value": 62733000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416873600, + "value": 41280000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1416960000, + "value": 25401000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1417132800, + "value": 26473500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417392000, + "value": 111850500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417478400, + "value": 77887500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417564800, + "value": 68868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417651200, + "value": 50370000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417737600, + "value": 79653000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1417996800, + "value": 121050000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418083200, + "value": 124179000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418169600, + "value": 96352500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418256000, + "value": 86691000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418342400, + "value": 93274500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418601600, + "value": 67555500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418688000, + "value": 109290000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1418774400, + "value": 95917500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418860800, + "value": 95482500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1418947200, + "value": 91818000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419206400, + "value": 63783000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419292800, + "value": 58047000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419379200, + "value": 17316000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419552000, + "value": 43195500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1419811200, + "value": 35398500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419897600, + "value": 38286000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1419984000, + "value": 30895500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420156800, + "value": 60666000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420416000, + "value": 68766000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420502400, + "value": 81739500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1420588800, + "value": 38506500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420675200, + "value": 43804500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1420761600, + "value": 60375000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421020800, + "value": 77257500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421107200, + "value": 56380500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421193600, + "value": 149176500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421280000, + "value": 68364000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421366400, + "value": 46059000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421712000, + "value": 57217500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1421798400, + "value": 54037500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421884800, + "value": 53611500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1421971200, + "value": 43978500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422230400, + "value": 41752500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422316800, + "value": 35581500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422403200, + "value": 40210500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422489600, + "value": 42373500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422576000, + "value": 39295500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1422835200, + "value": 54160500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1422921600, + "value": 62689500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423008000, + "value": 40846500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423094400, + "value": 45030000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423180800, + "value": 41568000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423440000, + "value": 45162000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1423526400, + "value": 70638000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423612800, + "value": 122290500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423699200, + "value": 202587000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1423785600, + "value": 77947500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424131200, + "value": 48615000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424217600, + "value": 66528000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424304000, + "value": 65745000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424390400, + "value": 78301500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424649600, + "value": 112644000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424736000, + "value": 87600000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1424822400, + "value": 52257000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424908800, + "value": 86088000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1424995200, + "value": 50161500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425254400, + "value": 101004000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425340800, + "value": 57592500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1425427200, + "value": 57156000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1425513600, + "value": 65712000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425600000, + "value": 87417000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425859200, + "value": 87274500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1425945600, + "value": 69730500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1426032000, + "value": 64245000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1426118400, + "value": 53023500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1426204800, + "value": 67867500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1432598400, + "value": 43978500.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1432684800, + "value": 43153500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1432771200, + "value": 44253000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1432857600, + "value": 49329570.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433116800, + "value": 31530225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433203200, + "value": 26885745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433289600, + "value": 22884615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433376000, + "value": 30814980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433462400, + "value": 40628865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433721600, + "value": 65460270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1433808000, + "value": 32805165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433894400, + "value": 43567065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1433980800, + "value": 26028345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1434067200, + "value": 18391890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434326400, + "value": 27654165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434412800, + "value": 24904965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434499200, + "value": 70233015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434585600, + "value": 35891805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1434672000, + "value": 32618625.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1434931200, + "value": 60604575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435017600, + "value": 50767455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435104000, + "value": 29859885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435190400, + "value": 37257870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435276800, + "value": 46306020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435536000, + "value": 44892210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435622400, + "value": 40032600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1435708800, + "value": 26522145.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1435795200, + "value": 89596185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436140800, + "value": 51407370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436227200, + "value": 76788555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436313600, + "value": 77151690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436400000, + "value": 42350805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436486400, + "value": 32995410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1436745600, + "value": 37339440.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436832000, + "value": 23937300.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1436918400, + "value": 24810810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437004800, + "value": 19932795.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437091200, + "value": 64817235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437350400, + "value": 62984370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437436800, + "value": 76316850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437523200, + "value": 38555175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1437609600, + "value": 28486500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437696000, + "value": 37048095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1437955200, + "value": 60568065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438041600, + "value": 48846450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438128000, + "value": 34009380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438214400, + "value": 26370390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438300800, + "value": 27594270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438560000, + "value": 32603745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438646400, + "value": 28507875.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1438732800, + "value": 68174265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438819200, + "value": 189249225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1438905600, + "value": 67028235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439164800, + "value": 53537460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439251200, + "value": 52796445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1439337600, + "value": 46502790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439424000, + "value": 58656540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439510400, + "value": 53596260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439769600, + "value": 88423530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439856000, + "value": 53375535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1439942400, + "value": 46379340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440028800, + "value": 62651175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440115200, + "value": 83421645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440374400, + "value": 120938985.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440460800, + "value": 53007090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440547200, + "value": 63997230.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1440633600, + "value": 98315805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440720000, + "value": 71507475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1440979200, + "value": 122503890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441065600, + "value": 71484615.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441152000, + "value": 61671885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441238400, + "value": 53779770.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441324800, + "value": 47893560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441670400, + "value": 40088835.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1441756800, + "value": 43224345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441843200, + "value": 33505485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1441929600, + "value": 30261885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442188800, + "value": 37000215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442275200, + "value": 37735680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442361600, + "value": 53034555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442448000, + "value": 44743740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442534400, + "value": 46208550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1442793600, + "value": 78873465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1442880000, + "value": 47461185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1442966400, + "value": 33568950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1443052800, + "value": 43135980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1443139200, + "value": 49134375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443398400, + "value": 127229130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443484800, + "value": 47435895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443571200, + "value": 62164515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443657600, + "value": 56504925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1443744000, + "value": 54307740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444003200, + "value": 48077100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444089600, + "value": 65567505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444176000, + "value": 89247075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444262400, + "value": 77791965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444348800, + "value": 79845975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444608000, + "value": 49668135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444694400, + "value": 67942260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444780800, + "value": 39930165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1444867200, + "value": 36025155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1444953600, + "value": 56215725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445212800, + "value": 31590870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445299200, + "value": 197281935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445385600, + "value": 53924745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445472000, + "value": 35633430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445558400, + "value": 54594090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445817600, + "value": 42132645.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1445904000, + "value": 45352560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1445990400, + "value": 34321920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446076800, + "value": 23203560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1446163200, + "value": 55364160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1446422400, + "value": 49048695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446508800, + "value": 81725865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446595200, + "value": 164936790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446681600, + "value": 57396345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1446768000, + "value": 62338770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447027200, + "value": 49130655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447113600, + "value": 58650945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447200000, + "value": 42948015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447286400, + "value": 37479450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447372800, + "value": 42982740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447632000, + "value": 37396095.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447718400, + "value": 27685005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447804800, + "value": 36768795.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1447891200, + "value": 30967155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1447977600, + "value": 57603405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448236800, + "value": 31581555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448323200, + "value": 31788765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1448409600, + "value": 51472185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1448582400, + "value": 24905370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448841600, + "value": 33631095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1448928000, + "value": 47844060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449014400, + "value": 37548885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449100800, + "value": 37645980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449187200, + "value": 32882220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449446400, + "value": 40632900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449532800, + "value": 34195545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449619200, + "value": 39684090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1449705600, + "value": 26159520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1449792000, + "value": 42714765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450051200, + "value": 35973795.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450137600, + "value": 28405860.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450224000, + "value": 64146990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1450310400, + "value": 40449015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450396800, + "value": 38668740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450656000, + "value": 24367620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1450742400, + "value": 25559175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450828800, + "value": 18879060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1450915200, + "value": 8807865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451260800, + "value": 22891215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451347200, + "value": 31348185.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451433600, + "value": 47373570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1451520000, + "value": 35687385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451865600, + "value": 84687525.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1451952000, + "value": 39873360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452038400, + "value": 45644085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452124800, + "value": 44442075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452211200, + "value": 42351450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452470400, + "value": 51419670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452556800, + "value": 37346910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452643200, + "value": 45447780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1452729600, + "value": 78481125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1452816000, + "value": 65273250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1453161600, + "value": 49873515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453248000, + "value": 71760615.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453334400, + "value": 39395805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1453420800, + "value": 36423510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453680000, + "value": 32746890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453766400, + "value": 61887765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453852800, + "value": 43610685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1453939200, + "value": 58177335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454025600, + "value": 36289005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1454284800, + "value": 67881600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1454371200, + "value": 72660375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454457600, + "value": 102199185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454544000, + "value": 55556535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454630400, + "value": 121217820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454889600, + "value": 117036630.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1454976000, + "value": 111349140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455062400, + "value": 114878790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455148800, + "value": 187276440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455235200, + "value": 95316150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455580800, + "value": 72728055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455667200, + "value": 76193205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1455753600, + "value": 49621590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1455840000, + "value": 36965385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456099200, + "value": 66003810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456185600, + "value": 69213390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456272000, + "value": 69879090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456358400, + "value": 67942905.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456444800, + "value": 78149805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456704000, + "value": 115657890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456790400, + "value": 87616590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1456876800, + "value": 62262495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1456963200, + "value": 63760695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457049600, + "value": 86046540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457308800, + "value": 67046235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457395200, + "value": 53949945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457481600, + "value": 41877810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1457568000, + "value": 67059180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457654400, + "value": 42624135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1457913600, + "value": 50652270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458000000, + "value": 80336310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458086400, + "value": 45207405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458172800, + "value": 48334365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458259200, + "value": 59588040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458518400, + "value": 66283815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1458604800, + "value": 53471670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1458691200, + "value": 62026500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1458777600, + "value": 64368510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459123200, + "value": 49788900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459209600, + "value": 51507480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459296000, + "value": 52204845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459382400, + "value": 103025805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459468800, + "value": 205378890.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459728000, + "value": 169088775.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1459814400, + "value": 127513170.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459900800, + "value": 143856135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1459987200, + "value": 111640635.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460073600, + "value": 92146575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460332800, + "value": 119938500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460419200, + "value": 73495020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460505600, + "value": 63754965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1460592000, + "value": 53539065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1460678400, + "value": 47150220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1460937600, + "value": 56465895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461024000, + "value": 80956815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461110400, + "value": 67998930.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1461196800, + "value": 36160305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461283200, + "value": 50184240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1461542400, + "value": 46018590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461628800, + "value": 41643750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461715200, + "value": 41368650.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461801600, + "value": 31875060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1461888000, + "value": 67850040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462147200, + "value": 48718935.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1462233600, + "value": 54099555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462320000, + "value": 101952825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462406400, + "value": 140309865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462492800, + "value": 74756025.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1462752000, + "value": 62450460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462838400, + "value": 51794940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1462924800, + "value": 61181340.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463011200, + "value": 46360335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463097600, + "value": 35990505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463356800, + "value": 37083990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463443200, + "value": 34568325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463529600, + "value": 69813285.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463616000, + "value": 86109435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1463702400, + "value": 113611050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1463961600, + "value": 66618810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464048000, + "value": 37793115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464134400, + "value": 37445070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464220800, + "value": 53304360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464307200, + "value": 47011290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464652800, + "value": 31549200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464739200, + "value": 38188845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1464825600, + "value": 24582015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1464912000, + "value": 28329450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465171200, + "value": 28419060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465257600, + "value": 80287470.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465344000, + "value": 76060455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1465430400, + "value": 58262070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465516800, + "value": 78597060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465776000, + "value": 53577120.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465862400, + "value": 44983245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1465948800, + "value": 36963330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466035200, + "value": 31423200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466121600, + "value": 38441865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466380800, + "value": 44990895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1466467200, + "value": 41360595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466553600, + "value": 288062460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466640000, + "value": 122422515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466726400, + "value": 83003595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1466985600, + "value": 90248895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467072000, + "value": 69636630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467158400, + "value": 70308465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467244800, + "value": 56418435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1467331200, + "value": 63605955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467676800, + "value": 64103865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467763200, + "value": 56001630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467849600, + "value": 41651820.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1467936000, + "value": 45595800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468195200, + "value": 66368370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468281600, + "value": 56701455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468368000, + "value": 44640195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468454400, + "value": 32683545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468540800, + "value": 28054815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1468800000, + "value": 43574475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468886400, + "value": 36414315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1468972800, + "value": 31636800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469059200, + "value": 55197015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469145600, + "value": 32939685.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469404800, + "value": 57810465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469491200, + "value": 39602580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469577600, + "value": 35585460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1469664000, + "value": 29429970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1469750400, + "value": 38264985.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470009600, + "value": 51807975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470096000, + "value": 48089565.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470182400, + "value": 49846905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470268800, + "value": 52533225.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470355200, + "value": 38675430.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470614400, + "value": 27615555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470700800, + "value": 26310885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1470787200, + "value": 28483890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470873600, + "value": 24076710.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1470960000, + "value": 20300850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471219200, + "value": 25273980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471305600, + "value": 26379855.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471392000, + "value": 21790455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471478400, + "value": 20870070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471564800, + "value": 19653315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471824000, + "value": 26019900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1471910400, + "value": 63281610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1471996800, + "value": 30888090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472083200, + "value": 21926385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472169600, + "value": 28345545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472428800, + "value": 41806380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472515200, + "value": 39825960.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472601600, + "value": 40418205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1472688000, + "value": 102308160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1472774400, + "value": 74876685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473120000, + "value": 54042450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473206400, + "value": 44694975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473292800, + "value": 41787750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473379200, + "value": 48325905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473638400, + "value": 45839700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473724800, + "value": 44783100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1473811200, + "value": 28667115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473897600, + "value": 36054000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1473984000, + "value": 38842110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474243200, + "value": 28640355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474329600, + "value": 24932340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1474416000, + "value": 31800480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474502400, + "value": 29451975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1474588800, + "value": 33538245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474848000, + "value": 28243755.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1474934400, + "value": 39862860.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475020800, + "value": 27330960.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475107200, + "value": 35370465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475193600, + "value": 33940980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475452800, + "value": 80238360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1475539200, + "value": 45776940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475625600, + "value": 23797215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475712000, + "value": 61862850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1475798400, + "value": 44352930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476057600, + "value": 43733445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476144000, + "value": 30339060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476230400, + "value": 24088650.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476316800, + "value": 28215435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476403200, + "value": 57088020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476662400, + "value": 59920515.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1476748800, + "value": 77545620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476835200, + "value": 94281555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1476921600, + "value": 65298930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477008000, + "value": 37628655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477267200, + "value": 35458005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477353600, + "value": 28966155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477440000, + "value": 75116040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1477526400, + "value": 175683330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477612800, + "value": 57461385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477872000, + "value": 56721510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1477958400, + "value": 89997060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478044800, + "value": 54515745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478131200, + "value": 32900445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478217600, + "value": 65781930.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478476800, + "value": 50097405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478563200, + "value": 42242490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478649600, + "value": 103742010.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1478736000, + "value": 84858330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1478822400, + "value": 51611205.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479081600, + "value": 85608450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479168000, + "value": 50682225.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479254400, + "value": 41321985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479340800, + "value": 57600180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479427200, + "value": 67142955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479686400, + "value": 57124485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1479772800, + "value": 73593240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1479859200, + "value": 62876265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480032000, + "value": 30619665.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480291200, + "value": 58714410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480377600, + "value": 57520620.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480464000, + "value": 45849390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480550400, + "value": 65228070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480636800, + "value": 51604950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1480896000, + "value": 50948565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1480982400, + "value": 44166465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481068800, + "value": 71439045.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481155200, + "value": 40960065.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481241600, + "value": 33890505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481500800, + "value": 31229640.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481587200, + "value": 89130030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481673600, + "value": 54654495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1481760000, + "value": 41365305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1481846400, + "value": 49030395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482105600, + "value": 45378420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482192000, + "value": 62280810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482278400, + "value": 69526095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482364800, + "value": 40609665.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482451200, + "value": 57488535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482796800, + "value": 76603605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1482883200, + "value": 48715005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1482969600, + "value": 53864715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483056000, + "value": 61296165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483401600, + "value": 76751040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1483488000, + "value": 148240920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483574400, + "value": 48295200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483660800, + "value": 72480600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1483920000, + "value": 51153120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484006400, + "value": 47673600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484092800, + "value": 45848955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484179200, + "value": 47768535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484265600, + "value": 80412510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484611200, + "value": 59745210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484697600, + "value": 48709860.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1484784000, + "value": 101214150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1484870400, + "value": 49923165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485129600, + "value": 78557610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485216000, + "value": 62280870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485302400, + "value": 65941140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485388800, + "value": 39469215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485475200, + "value": 39775995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485734400, + "value": 48218610.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485820800, + "value": 52682265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1485907200, + "value": 51352470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1485993600, + "value": 31979490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486080000, + "value": 24938490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486339200, + "value": 45616860.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486425600, + "value": 52628640.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1486512000, + "value": 50357010.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486598400, + "value": 101696130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1486684800, + "value": 46664505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1486944000, + "value": 91768200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487030400, + "value": 94881045.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487116800, + "value": 63557535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487203200, + "value": 89172345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487289600, + "value": 81886155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487635200, + "value": 71768040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1487721600, + "value": 113085195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487808000, + "value": 193472580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1487894400, + "value": 107111355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488153600, + "value": 150069720.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488240000, + "value": 78670740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488326400, + "value": 61044060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488412800, + "value": 44183175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488499200, + "value": 38606160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488758400, + "value": 43940415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1488844800, + "value": 43656195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1488931200, + "value": 47784270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489017600, + "value": 50291415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489104000, + "value": 40420680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489363200, + "value": 38125545.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489449600, + "value": 100832040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489536000, + "value": 69533460.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489622400, + "value": 90819975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1489708800, + "value": 80565870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1489968000, + "value": 46284510.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490054400, + "value": 90363240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490140800, + "value": 50458350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490227200, + "value": 42898545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490313600, + "value": 74085210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490572800, + "value": 80728845.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490659200, + "value": 102388365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490745600, + "value": 46356210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1490832000, + "value": 53993670.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1490918400, + "value": 41612610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491177600, + "value": 180777570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491264000, + "value": 129370695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491350400, + "value": 99987900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1491436800, + "value": 71159910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491523200, + "value": 57513600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491782400, + "value": 97980315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1491868800, + "value": 72841680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1491955200, + "value": 76993785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492041600, + "value": 124106325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492387200, + "value": 53491485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492473600, + "value": 38393445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492560000, + "value": 49679670.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492646400, + "value": 78870705.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1492732800, + "value": 57667530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1492992000, + "value": 65769240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493078400, + "value": 85255320.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493164800, + "value": 54209820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493251200, + "value": 44895480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493337600, + "value": 58899975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493596800, + "value": 108803550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1493683200, + "value": 67132200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493769600, + "value": 88490685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493856000, + "value": 178937325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1493942400, + "value": 103262310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494201600, + "value": 91822080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494288000, + "value": 124801560.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494374400, + "value": 72771405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494460800, + "value": 60381360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494547200, + "value": 52982295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1494806400, + "value": 98139675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494892800, + "value": 53030295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1494979200, + "value": 84943980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495065600, + "value": 73016490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1495152000, + "value": 59414115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495411200, + "value": 53613555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1495497600, + "value": 53430645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1501632000, + "value": 158508465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1501718400, + "value": 169206135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1501804800, + "value": 118611315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502064000, + "value": 76922280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502150400, + "value": 92226420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502236800, + "value": 86519625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502323200, + "value": 88535805.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502409600, + "value": 54039555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502668800, + "value": 55720770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502755200, + "value": 36768285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1502841600, + "value": 39519210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1502928000, + "value": 59729325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503014400, + "value": 64878945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503273600, + "value": 80873040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503360000, + "value": 53835240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503446400, + "value": 59650080.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1503532800, + "value": 53365110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1503619200, + "value": 42063270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503878400, + "value": 43703055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1503964800, + "value": 47693040.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504051200, + "value": 39211260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504137600, + "value": 47533125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504224000, + "value": 36370140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504569600, + "value": 46009875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504656000, + "value": 49117995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1504742400, + "value": 50711130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1504828800, + "value": 38831370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505088000, + "value": 93792450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505174400, + "value": 71484885.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505260800, + "value": 51254190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505347200, + "value": 88268760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505433600, + "value": 65391495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505692800, + "value": 88693770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1505779200, + "value": 77656125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505865600, + "value": 60187995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1505952000, + "value": 58301040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506038400, + "value": 100120800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506297600, + "value": 95209215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506384000, + "value": 89596305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506470400, + "value": 73275165.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506556800, + "value": 63105405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506643200, + "value": 62996130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506902400, + "value": 63673905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1506988800, + "value": 127915005.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507075200, + "value": 102388050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507161600, + "value": 49240515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507248000, + "value": 52458270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507507200, + "value": 91929060.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507593600, + "value": 85714425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507680000, + "value": 54369930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1507766400, + "value": 49478250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1507852800, + "value": 42626325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508112000, + "value": 63696315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508198400, + "value": 39478785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508284800, + "value": 58906215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508371200, + "value": 60596670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508457600, + "value": 58987380.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508716800, + "value": 69079140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508803200, + "value": 54037110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1508889600, + "value": 84060840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1508976000, + "value": 59895495.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509062400, + "value": 82456560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509321600, + "value": 50183595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509408000, + "value": 67143015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1509494400, + "value": 98873415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509580800, + "value": 239871705.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1509667200, + "value": 106874280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1509926400, + "value": 75212505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510012800, + "value": 64488030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510099200, + "value": 58790550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510185600, + "value": 64908075.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510272000, + "value": 55910415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510531200, + "value": 92643630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510617600, + "value": 69989505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510704000, + "value": 74143695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1510790400, + "value": 70739175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1510876800, + "value": 170145555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511136000, + "value": 103487040.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511222400, + "value": 91762275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511308800, + "value": 62022240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1511481600, + "value": 41299770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511740800, + "value": 55527705.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511827200, + "value": 59546580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1511913600, + "value": 101149335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512000000, + "value": 53600970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512086400, + "value": 52615485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512345600, + "value": 73463115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512432000, + "value": 56832825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512518400, + "value": 78075690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512604800, + "value": 56477175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1512691200, + "value": 42380790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1512950400, + "value": 99929295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513036800, + "value": 108343800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513123200, + "value": 74635725.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513209600, + "value": 71098425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513296000, + "value": 85651935.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513555200, + "value": 67302900.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513641600, + "value": 79694640.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513728000, + "value": 72798450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1513814400, + "value": 54460410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1513900800, + "value": 51109455.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514246400, + "value": 52441845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514332800, + "value": 57229200.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514419200, + "value": 53772345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1514505600, + "value": 45971790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1514851200, + "value": 51439980.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1514937600, + "value": 53039445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1515024000, + "value": 119513085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515110400, + "value": 54689490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515369600, + "value": 120026880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515456000, + "value": 85692555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1515542400, + "value": 46271310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515628800, + "value": 80395725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1515715200, + "value": 57715995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516060800, + "value": 79779555.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516147200, + "value": 83660295.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516233600, + "value": 67304595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516320000, + "value": 58015335.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516579200, + "value": 76691625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1516665600, + "value": 66095520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516752000, + "value": 62762115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516838400, + "value": 82199130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1516924800, + "value": 52383270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517184000, + "value": 55837245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517270400, + "value": 51916335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517356800, + "value": 68225850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517443200, + "value": 48808785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517529600, + "value": 42620370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517788800, + "value": 49498560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1517875200, + "value": 58819215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1517961600, + "value": 81471840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518048000, + "value": 122580555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518134400, + "value": 157762590.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518393600, + "value": 74060220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518480000, + "value": 53357370.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518566400, + "value": 46124280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1518652800, + "value": 68946270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1518739200, + "value": 67143360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519084800, + "value": 47355345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519171200, + "value": 37654230.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519257600, + "value": 80854995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519344000, + "value": 69096450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519603200, + "value": 52423515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1519689600, + "value": 55899915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519776000, + "value": 74032890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519862400, + "value": 82409115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1519948800, + "value": 59703135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520208000, + "value": 44503275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520294400, + "value": 51460950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520380800, + "value": 59825250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520467200, + "value": 41452350.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520553600, + "value": 63614580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520812800, + "value": 100808145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1520899200, + "value": 71138010.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1520985600, + "value": 94350375.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521072000, + "value": 76010130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521158400, + "value": 74099280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521417600, + "value": 89344530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521504000, + "value": 53260785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521590400, + "value": 71613060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1521676800, + "value": 52637865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1521763200, + "value": 75360090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522022400, + "value": 97042815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522108800, + "value": 158944560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522195200, + "value": 243796575.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522281600, + "value": 177807180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522627200, + "value": 195963285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1522713600, + "value": 230425485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522800000, + "value": 246546495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522886400, + "value": 226914720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1522972800, + "value": 164396325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523232000, + "value": 124936080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523318400, + "value": 133247355.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523404800, + "value": 84874725.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523491200, + "value": 86663775.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523577600, + "value": 87163425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1523836800, + "value": 76768875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1523923200, + "value": 84747060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524009600, + "value": 79921260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524096000, + "value": 71637165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524182400, + "value": 67236780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524441600, + "value": 57966930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524528000, + "value": 63192825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524614400, + "value": 45042330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1524700800, + "value": 50144700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1524787200, + "value": 49810530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525046400, + "value": 47944485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525132800, + "value": 46620600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525219200, + "value": 100044315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525305600, + "value": 200230050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525392000, + "value": 97219695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525651200, + "value": 100077990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525737600, + "value": 69679140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525824000, + "value": 65864130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1525910400, + "value": 65703270.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1525996800, + "value": 52073175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526256000, + "value": 83199000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526342400, + "value": 109926450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526428800, + "value": 65149395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1526515200, + "value": 50506260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526601600, + "value": 82659480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1526860800, + "value": 110223840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1526947200, + "value": 104515395.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527033600, + "value": 68248245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527120000, + "value": 48098295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527206400, + "value": 43134090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527552000, + "value": 68391420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527638400, + "value": 86829480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1527724800, + "value": 65445975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1527811200, + "value": 60092265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528070400, + "value": 56356245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528156800, + "value": 67469700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1528243200, + "value": 223350765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528329600, + "value": 173810055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1528416000, + "value": 97360800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528675200, + "value": 159962145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528761600, + "value": 268792350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528848000, + "value": 115255125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1528934400, + "value": 133885455.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529020800, + "value": 128061330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529280000, + "value": 145368480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529366400, + "value": 155148825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529452800, + "value": 99665430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529539200, + "value": 94828470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529625600, + "value": 120476655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1529884800, + "value": 80040690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1529971200, + "value": 90073035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530057600, + "value": 101165250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530144000, + "value": 100403235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1530230400, + "value": 79185540.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530489600, + "value": 233595795.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530576000, + "value": 149002155.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530748800, + "value": 213613665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1530835200, + "value": 110289180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531094400, + "value": 89890020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531180800, + "value": 113676510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531267200, + "value": 58766760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531353600, + "value": 67817835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531440000, + "value": 73379730.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531699200, + "value": 96201240.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1531785600, + "value": 84189390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531872000, + "value": 69456900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1531958400, + "value": 72958365.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532044800, + "value": 62980500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532304000, + "value": 129825210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532390400, + "value": 115360290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532476800, + "value": 86301735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1532563200, + "value": 56522880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1532649600, + "value": 52540545.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532908800, + "value": 79959210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1532995200, + "value": 60069180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533081600, + "value": 117020970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533168000, + "value": 279512445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533254400, + "value": 159452790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533513600, + "value": 102678015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533600000, + "value": 381052725.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1533686400, + "value": 280429020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533772800, + "value": 199309800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1533859200, + "value": 137798880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534118400, + "value": 121692615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534204800, + "value": 82835430.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534291200, + "value": 105751815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534377600, + "value": 66955965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534464000, + "value": 224153370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1534723200, + "value": 202795425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534809600, + "value": 156089955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534896000, + "value": 73769700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1534982400, + "value": 63324510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535068800, + "value": 42289110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1535328000, + "value": 164076645.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1535414400, + "value": 94857345.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535500800, + "value": 90330150.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535587200, + "value": 87190275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1535673600, + "value": 64315245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536019200, + "value": 100324125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536105600, + "value": 87707505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536192000, + "value": 88452450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536278400, + "value": 264414765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536537600, + "value": 176956905.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1536624000, + "value": 110538330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536710400, + "value": 118337070.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1536796800, + "value": 73748235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1536883200, + "value": 79030395.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537142400, + "value": 81452700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537228800, + "value": 201292170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537315200, + "value": 96540390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537401600, + "value": 87191865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537488000, + "value": 55254180.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1537747200, + "value": 56511855.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537833600, + "value": 52293330.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1537920000, + "value": 91873710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1538006400, + "value": 95037525.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538092800, + "value": 403081170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538352000, + "value": 260729640.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1538438400, + "value": 139184115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538524800, + "value": 96930465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538611200, + "value": 114758670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538697600, + "value": 208825890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1538956800, + "value": 153828015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539043200, + "value": 141231210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539129600, + "value": 148776810.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539216000, + "value": 94547865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539302400, + "value": 83192580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539561600, + "value": 74660160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539648000, + "value": 107659140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1539734400, + "value": 101049495.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539820800, + "value": 62268090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1539907200, + "value": 110253090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540166400, + "value": 61455330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540252800, + "value": 224905620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540339200, + "value": 235572405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540425600, + "value": 246957480.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540512000, + "value": 331244850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540771200, + "value": 177468000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1540857600, + "value": 111830760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1540944000, + "value": 88997550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541030400, + "value": 98076885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541116800, + "value": 96029265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1541376000, + "value": 93116505.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1541462400, + "value": 83178450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541548800, + "value": 82208655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541635200, + "value": 83512380.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541721600, + "value": 62071020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1541980800, + "value": 85421925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542067200, + "value": 61718760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542153600, + "value": 61075260.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542240000, + "value": 55608810.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542326400, + "value": 83323110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1542585600, + "value": 117911925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542672000, + "value": 96513690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542758400, + "value": 55336395.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1542931200, + "value": 50440110.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1543190400, + "value": 98172615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543276800, + "value": 76446435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543363200, + "value": 50226975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543449600, + "value": 36297450.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1543536000, + "value": 67724880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543795200, + "value": 101594700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1543881600, + "value": 103683075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544054400, + "value": 93603030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544140800, + "value": 135610470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1544400000, + "value": 78864630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544486400, + "value": 76196595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544572800, + "value": 60857985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1544659200, + "value": 87478575.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1544745600, + "value": 75673965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545004800, + "value": 90968295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545091200, + "value": 85943745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545177600, + "value": 91612320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545264000, + "value": 112096500.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545350400, + "value": 97661730.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1545609600, + "value": 66350835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545782400, + "value": 98012415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1545868800, + "value": 104624100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1545955200, + "value": 121384305.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546214400, + "value": 78022320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546387200, + "value": 138488085.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546473600, + "value": 85079760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1546560000, + "value": 89212035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546819200, + "value": 89667855.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546905600, + "value": 86465175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1546992000, + "value": 63893385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547078400, + "value": 72991995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547164800, + "value": 60942345.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547424000, + "value": 63718830.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1547510400, + "value": 73060710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547596800, + "value": 53209815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547683200, + "value": 44328525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1547769600, + "value": 289579830.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548115200, + "value": 146101185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548201600, + "value": 148002600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548288000, + "value": 92497140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548374400, + "value": 83032155.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548633600, + "value": 75093600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548720000, + "value": 55303035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548806400, + "value": 128510025.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1548892800, + "value": 150214920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1548979200, + "value": 88314525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549238400, + "value": 91278885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549324800, + "value": 80787765.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549411200, + "value": 61091385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1549497600, + "value": 79000440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1549584000, + "value": 69815910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549843200, + "value": 88060125.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1549929600, + "value": 65880930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550016000, + "value": 59951655.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550102400, + "value": 61683570.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550188800, + "value": 46719975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1550534400, + "value": 48097965.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550620800, + "value": 84401340.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550707200, + "value": 107646420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1550793600, + "value": 68671965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551052800, + "value": 81461385.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551139200, + "value": 104134410.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551225600, + "value": 137486940.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1551312000, + "value": 128665170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551398400, + "value": 274694670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551657600, + "value": 200186820.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551744000, + "value": 224784825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551830400, + "value": 130688295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1551916800, + "value": 117750495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552003200, + "value": 109426785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552262400, + "value": 91647090.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552348800, + "value": 94183110.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552435200, + "value": 84463050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1552521600, + "value": 87638685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552608000, + "value": 181501410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552867200, + "value": 126356685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1552953600, + "value": 147554025.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553040000, + "value": 87481035.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553126400, + "value": 73793190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553212800, + "value": 107444580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1553472000, + "value": 125519295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1553558400, + "value": 90114720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553644800, + "value": 111765915.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553731200, + "value": 84429480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1553817600, + "value": 74496975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554076800, + "value": 100487535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554163200, + "value": 67021665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554249600, + "value": 98939940.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554336000, + "value": 265556415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554422400, + "value": 155499960.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554681600, + "value": 129487440.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554768000, + "value": 72568875.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1554854400, + "value": 87333435.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1554940800, + "value": 115465245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555027200, + "value": 83273295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555286400, + "value": 121678560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555372800, + "value": 89589750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1555459200, + "value": 61218300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555545600, + "value": 65756700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1555891200, + "value": 150683310.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1555977600, + "value": 131710980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556064000, + "value": 127073520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556150400, + "value": 265586880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556236800, + "value": 272603400.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556496000, + "value": 211597680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1556582400, + "value": 114634905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556668800, + "value": 130472910.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1556755200, + "value": 221207520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1556841600, + "value": 285771600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557100800, + "value": 129715710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557187200, + "value": 121401255.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557273600, + "value": 70776975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557360000, + "value": 79827930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557446400, + "value": 85723890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557705600, + "value": 123465510.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557792000, + "value": 83553315.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1557878400, + "value": 87076290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1557964800, + "value": 85589625.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558051200, + "value": 213667560.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558310400, + "value": 241324890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558396800, + "value": 221423400.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558483200, + "value": 223585785.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1558569600, + "value": 313514490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1558656000, + "value": 172574760.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559001600, + "value": 121369680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559088000, + "value": 147665835.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559174400, + "value": 96234330.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559260800, + "value": 126511080.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559520000, + "value": 162149595.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559606400, + "value": 168287700.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559692800, + "value": 170547300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1559779200, + "value": 239261910.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1559865600, + "value": 185291190.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560124800, + "value": 120507465.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560211200, + "value": 136661955.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560297600, + "value": 182775390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560384000, + "value": 101617290.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560470400, + "value": 88657065.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560729600, + "value": 149330235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560816000, + "value": 152172840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1560902400, + "value": 79817250.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1560988800, + "value": 145668465.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561075200, + "value": 91318920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561334400, + "value": 69803340.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561420800, + "value": 71846805.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561507200, + "value": 101637405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1561593600, + "value": 73779210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561680000, + "value": 76459620.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1561939200, + "value": 102639255.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562025600, + "value": 112517325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562112000, + "value": 171219210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562284800, + "value": 85099530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562544000, + "value": 71488095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562630400, + "value": 74145135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562716800, + "value": 109079265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1562803200, + "value": 87319530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1562889600, + "value": 95006310.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563148800, + "value": 129415845.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563235200, + "value": 94476000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563321600, + "value": 105617190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563408000, + "value": 56868000.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563494400, + "value": 85749975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563753600, + "value": 83095470.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1563840000, + "value": 54661110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1563926400, + "value": 130306335.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564012800, + "value": 270950850.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564099200, + "value": 118829130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564358400, + "value": 113923785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1564444800, + "value": 96458760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1564531200, + "value": 111596460.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1564617600, + "value": 98159715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1570665600, + "value": 71848110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1570752000, + "value": 99881625.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571011200, + "value": 120297450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571097600, + "value": 74867415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571184000, + "value": 76111920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571270400, + "value": 54637350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571356800, + "value": 67372005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571616000, + "value": 59437185.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571702400, + "value": 51015450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571788800, + "value": 126354015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1571875200, + "value": 333785415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1571961600, + "value": 346900110.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572220800, + "value": 217401990.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572307200, + "value": 148391235.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572393600, + "value": 110357760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572480000, + "value": 57293355.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572566400, + "value": 74996490.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572825600, + "value": 107054385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1572912000, + "value": 80141085.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1572998400, + "value": 94473615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573084800, + "value": 170876115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573171200, + "value": 70916190.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573430400, + "value": 115064865.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573516800, + "value": 83768280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573603200, + "value": 95754555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1573689600, + "value": 73642995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1573776000, + "value": 53228490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574035200, + "value": 47569800.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574121600, + "value": 88743975.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574208000, + "value": 73837815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574294400, + "value": 67119255.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574380800, + "value": 185281845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574640000, + "value": 136063125.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574726400, + "value": 85639260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1574812800, + "value": 60248265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1574985600, + "value": 26162310.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1575244800, + "value": 65817750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575331200, + "value": 71516535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575417600, + "value": 52213935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1575504000, + "value": 39315060.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575590400, + "value": 87443550.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575849600, + "value": 97238610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1575936000, + "value": 94475535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576022400, + "value": 75745965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576108800, + "value": 86341350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576195200, + "value": 73028070.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1576454400, + "value": 196900605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576540800, + "value": 88895370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1576627200, + "value": 159076170.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576713600, + "value": 195368595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1576800000, + "value": 162292950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577059200, + "value": 147161505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577145600, + "value": 92001720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577318400, + "value": 118997565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577404800, + "value": 110319030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1577664000, + "value": 140912100.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1577750400, + "value": 115227540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1577923200, + "value": 105742830.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578009600, + "value": 201368895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578268800, + "value": 114317175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578355200, + "value": 200288085.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578441600, + "value": 348554655.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578528000, + "value": 308683530.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1578614400, + "value": 142140990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1578873600, + "value": 296673120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1578960000, + "value": 313603800.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579046400, + "value": 189689685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1579132800, + "value": 234395160.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579219200, + "value": 149312700.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1579564800, + "value": 189698280.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579651200, + "value": 324324630.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579737600, + "value": 203213130.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1579824000, + "value": 148648650.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1580083200, + "value": 139065495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580169600, + "value": 125302140.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580256000, + "value": 183743490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580342400, + "value": 273085440.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580428800, + "value": 158981265.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580688000, + "value": 475263390.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580774400, + "value": 552886995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1580860800, + "value": 464742915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1580947200, + "value": 383700900.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581033600, + "value": 168028710.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581292800, + "value": 240893220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581379200, + "value": 115196955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581465600, + "value": 117541665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581552000, + "value": 259599570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1581638400, + "value": 160881435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1581984000, + "value": 168671805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1582070400, + "value": 249771750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1582156800, + "value": 181159170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582243200, + "value": 149621535.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582502400, + "value": 148606905.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582588800, + "value": 168777675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582675200, + "value": 136474050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582761600, + "value": 249019995.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1582848000, + "value": 257814675.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583107200, + "value": 206093775.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583193600, + "value": 250127055.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583280000, + "value": 154058295.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583366400, + "value": 108482445.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583452800, + "value": 123425130.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583712000, + "value": 175009290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583798400, + "value": 161919360.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1583884800, + "value": 140357565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1583971200, + "value": 197614035.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584057600, + "value": 239295285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584316800, + "value": 221492175.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584403200, + "value": 261417435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584489600, + "value": 265132005.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1584576000, + "value": 328591200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1584662400, + "value": 307001235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1584921600, + "value": 178044150.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585008000, + "value": 237852525.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585094400, + "value": 218541390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585180800, + "value": 179456955.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585267200, + "value": 148377030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585526400, + "value": 119682195.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585612800, + "value": 188997660.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585699200, + "value": 138967425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1585785600, + "value": 203988075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1585872000, + "value": 241104990.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1586131200, + "value": 150877275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586217600, + "value": 187243695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586304000, + "value": 135389595.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586390400, + "value": 140315520.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586736000, + "value": 232627920.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586822400, + "value": 300642825.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1586908800, + "value": 231622050.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1586995200, + "value": 211446420.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587081600, + "value": 132770940.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587340800, + "value": 152149290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587427200, + "value": 202718685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587513600, + "value": 145122495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587600000, + "value": 136673115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1587686400, + "value": 139092495.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1587945600, + "value": 202881945.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588032000, + "value": 155158260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588118400, + "value": 158846565.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588204800, + "value": 272728890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588291200, + "value": 325839930.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588550400, + "value": 191118300.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1588636800, + "value": 175710750.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588723200, + "value": 113329740.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588809600, + "value": 118667010.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1588896000, + "value": 160369815.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589155200, + "value": 171898425.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589241600, + "value": 163140435.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589328000, + "value": 197153685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589414400, + "value": 134271540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589500800, + "value": 107025660.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589760000, + "value": 119931690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1589846400, + "value": 98436405.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1589932800, + "value": 70987260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590019200, + "value": 125158530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590105600, + "value": 102896430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590451200, + "value": 77548890.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590537600, + "value": 115787835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590624000, + "value": 73302210.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1590710400, + "value": 122263095.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1590969600, + "value": 145189200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591056000, + "value": 132256140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591142400, + "value": 80101050.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591228800, + "value": 88832985.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591315200, + "value": 78301965.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591574400, + "value": 141366735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591660800, + "value": 115863015.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591747200, + "value": 174956610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1591833600, + "value": 156858300.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1591920000, + "value": 162138555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592179200, + "value": 155522580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1592265600, + "value": 133777140.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592352000, + "value": 100027320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592438400, + "value": 97189380.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1592524800, + "value": 83171715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592784000, + "value": 64500420.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592870400, + "value": 64613580.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1592956800, + "value": 106925520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1593043200, + "value": 92884695.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593129600, + "value": 83687025.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1593388800, + "value": 85269270.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593475200, + "value": 166442490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593561600, + "value": 123111735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593648000, + "value": 154935240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1593993600, + "value": 175538805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594080000, + "value": 167984835.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594166400, + "value": 137422935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594252800, + "value": 99822150.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594339200, + "value": 196613790.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594598400, + "value": 293325390.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594684800, + "value": 191646180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1594771200, + "value": 128684670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594857600, + "value": 124492275.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1594944000, + "value": 78639675.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595203200, + "value": 137656275.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595289600, + "value": 131882220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595376000, + "value": 106352115.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595462400, + "value": 187476870.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595548800, + "value": 157381425.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595808000, + "value": 129609780.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1595894400, + "value": 135868020.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1595980800, + "value": 81939615.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596067200, + "value": 65301720.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596153600, + "value": 103662660.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1596412800, + "value": 73760145.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596499200, + "value": 72451020.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596585600, + "value": 40635945.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1596672000, + "value": 49976850.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1596758400, + "value": 72015780.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597017600, + "value": 60084135.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597104000, + "value": 67698210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597190400, + "value": 173744580.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597276800, + "value": 165591105.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597363200, + "value": 101037135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597622400, + "value": 156188385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597708800, + "value": 123741405.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597795200, + "value": 94184685.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1597881600, + "value": 159074805.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1597968000, + "value": 166461210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598227200, + "value": 150696765.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1598313600, + "value": 80517750.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598400000, + "value": 105153030.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598486400, + "value": 180878220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598572800, + "value": 145062675.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1598832000, + "value": 248705622.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1598918400, + "value": 177822417.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599004800, + "value": 188849097.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599091200, + "value": 180565761.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599177600, + "value": 231814941.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599523200, + "value": 247260840.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1599609600, + "value": 168193332.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1599696000, + "value": 188312610.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1599782400, + "value": 137663229.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600041600, + "value": 181388055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600128000, + "value": 210951363.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600214400, + "value": 165125403.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600300800, + "value": 170581353.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600387200, + "value": 191458605.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600646400, + "value": 235264287.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600732800, + "value": 168209415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600819200, + "value": 197688879.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1600905600, + "value": 219102480.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1600992000, + "value": 148599174.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601251200, + "value": 102743079.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601337600, + "value": 105701094.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601424000, + "value": 101027403.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601510400, + "value": 108278334.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1601596800, + "value": 153489573.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601856000, + "value": 95763156.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1601942400, + "value": 106731042.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602028800, + "value": 93197385.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602115200, + "value": 87453252.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602201600, + "value": 62810682.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602460800, + "value": 83716995.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602547200, + "value": 73758798.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602633600, + "value": 103619673.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1602720000, + "value": 76002600.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1602806400, + "value": 70403769.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603065600, + "value": 79414086.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603152000, + "value": 66908925.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603238400, + "value": 65343702.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603324800, + "value": 85645152.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603411200, + "value": 68631111.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603670400, + "value": 60391515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603756800, + "value": 47481831.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1603843200, + "value": 50498646.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1603929600, + "value": 46622136.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604016000, + "value": 87711978.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604275200, + "value": 62289972.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604361600, + "value": 74676897.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604448000, + "value": 66091209.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604534400, + "value": 59458839.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604620800, + "value": 47468925.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1604880000, + "value": 72391911.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1604966400, + "value": 62105277.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605052800, + "value": 36576201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605139200, + "value": 39151536.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605225600, + "value": 39364200.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605484800, + "value": 52552809.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605571200, + "value": 126524304.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1605657600, + "value": 163818360.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605744000, + "value": 130075530.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1605830400, + "value": 68026170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1606089600, + "value": 103891680.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606176000, + "value": 111214107.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606262400, + "value": 100834929.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606435200, + "value": 76762173.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606694400, + "value": 131103393.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606780800, + "value": 81546585.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1606867200, + "value": 96274566.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1606953600, + "value": 86454540.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607040000, + "value": 59674344.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607299200, + "value": 116487387.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607385600, + "value": 132180669.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607472000, + "value": 137626977.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607558400, + "value": 139451475.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607644800, + "value": 95785260.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1607904000, + "value": 110166885.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1607990400, + "value": 97244397.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608076800, + "value": 87571866.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608163200, + "value": 117472365.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608249600, + "value": 453121770.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608508800, + "value": 115350915.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608595200, + "value": 104906727.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1608681600, + "value": 67952889.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1608768000, + "value": 46317783.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609113600, + "value": 66460887.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1609200000, + "value": 46040676.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609286400, + "value": 89297991.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609372800, + "value": 103795989.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609718400, + "value": 100289490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609804800, + "value": 63907479.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609891200, + "value": 92182257.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1609977600, + "value": 102648621.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610064000, + "value": 150111201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610323200, + "value": 115961742.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1610409600, + "value": 94456524.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610496000, + "value": 66342027.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1610582400, + "value": 63056748.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1610668800, + "value": 78848139.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611014400, + "value": 46853928.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611100800, + "value": 49166334.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611187200, + "value": 38889873.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611273600, + "value": 37781574.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611532800, + "value": 76459485.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611619200, + "value": 44113677.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611705600, + "value": 44969781.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1611792000, + "value": 43576764.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1611878400, + "value": 59973315.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612137600, + "value": 44447226.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612224000, + "value": 42602496.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612310400, + "value": 32335680.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612396800, + "value": 28538979.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612483200, + "value": 32859015.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612742400, + "value": 36266742.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1612828800, + "value": 25635285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1612915200, + "value": 64580658.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613001600, + "value": 38372664.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613088000, + "value": 40260147.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1613433600, + "value": 34891947.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613520000, + "value": 45436740.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1613606400, + "value": 32746779.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613692800, + "value": 33005790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1613952000, + "value": 66209229.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614038400, + "value": 120777558.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614124800, + "value": 69555915.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614211200, + "value": 69715503.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614297600, + "value": 77062926.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614556800, + "value": 48766533.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1614643200, + "value": 40553202.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614729600, + "value": 52144758.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614816000, + "value": 120709596.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1614902400, + "value": 166008762.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615161600, + "value": 99075645.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615248000, + "value": 126304164.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615334400, + "value": 115159767.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615420800, + "value": 66966033.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615507200, + "value": 60956052.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615766400, + "value": 55377972.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1615852800, + "value": 59068035.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1615939200, + "value": 77101338.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616025600, + "value": 59758062.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616112000, + "value": 81737448.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616371200, + "value": 75553839.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616457600, + "value": 53724156.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616544000, + "value": 63886878.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616630400, + "value": 75643422.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1616716800, + "value": 59529975.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1616976000, + "value": 48334989.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617062400, + "value": 77555175.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617148800, + "value": 64970841.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617235200, + "value": 68217258.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617580800, + "value": 82286721.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617667200, + "value": 57601257.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617753600, + "value": 53050818.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1617840000, + "value": 48333639.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1617926400, + "value": 39606963.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618185600, + "value": 54284880.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618272000, + "value": 86973186.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618358400, + "value": 93136587.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618444800, + "value": 53544411.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618531200, + "value": 53036541.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1618790400, + "value": 75574374.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618876800, + "value": 70814043.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1618963200, + "value": 58436706.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1619049600, + "value": 68573160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619136000, + "value": 55616598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1619395200, + "value": 56943357.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619481600, + "value": 54962673.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619568000, + "value": 40961961.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619654400, + "value": 53380290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1619740800, + "value": 76883430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1620000000, + "value": 51935973.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620086400, + "value": 55854111.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620172800, + "value": 42513225.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620259200, + "value": 54950481.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620345600, + "value": 45285756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1620604800, + "value": 59311011.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620691200, + "value": 89671815.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620777600, + "value": 64890921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620864000, + "value": 83126715.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1620950400, + "value": 65228229.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621209600, + "value": 63467550.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621296000, + "value": 75257196.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621382400, + "value": 77524299.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621468800, + "value": 64313097.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621555200, + "value": 49913517.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621814400, + "value": 72762678.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1621900800, + "value": 57594786.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1621987200, + "value": 59423178.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1622073600, + "value": 53587350.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1622160000, + "value": 45708411.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622505600, + "value": 35538018.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622592000, + "value": 43231854.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622678400, + "value": 57641328.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1622764800, + "value": 47932023.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623024000, + "value": 43852587.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623110400, + "value": 52664493.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623196800, + "value": 34338024.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1623283200, + "value": 49835202.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623369600, + "value": 31935483.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623628800, + "value": 41926515.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623715200, + "value": 36347325.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1623801600, + "value": 44065245.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623888000, + "value": 44940105.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1623974400, + "value": 50973756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624233600, + "value": 50577285.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1624320000, + "value": 39783501.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624406400, + "value": 63081165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624492800, + "value": 95330490.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624579200, + "value": 68989917.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1624838400, + "value": 43411218.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1624924800, + "value": 35486958.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625011200, + "value": 38338683.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625097600, + "value": 35654799.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625184000, + "value": 54561240.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1625529600, + "value": 41297160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625616000, + "value": 37118532.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1625702400, + "value": 44881728.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1625788800, + "value": 34968744.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626048000, + "value": 51243600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626134400, + "value": 42033159.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626220800, + "value": 46162458.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626307200, + "value": 41483562.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626393600, + "value": 31873818.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626652800, + "value": 40264497.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626739200, + "value": 29554182.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1626825600, + "value": 26824704.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626912000, + "value": 29336946.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1626998400, + "value": 27217935.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1627257600, + "value": 50556135.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627344000, + "value": 64392234.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1627430400, + "value": 29813055.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627516800, + "value": 59894136.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627603200, + "value": 55456236.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627862400, + "value": 65648568.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1627948800, + "value": 42860139.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628035200, + "value": 32493825.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628121600, + "value": 24828657.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628208000, + "value": 28781466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628467200, + "value": 29672529.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628553600, + "value": 26595642.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628640000, + "value": 17842452.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1628726400, + "value": 34809909.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1628812800, + "value": 32477205.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629072000, + "value": 42453582.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629158400, + "value": 43246251.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629244800, + "value": 39414696.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629331200, + "value": 27499356.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629417600, + "value": 27058611.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629676800, + "value": 40378269.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629763200, + "value": 24506721.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1629849600, + "value": 24902058.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1629936000, + "value": 24901170.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630022400, + "value": 25801872.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630281600, + "value": 35205261.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630368000, + "value": 41367243.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630454400, + "value": 23279241.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630540800, + "value": 24648756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1630627200, + "value": 29042418.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1630972800, + "value": 38376276.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631059200, + "value": 37344477.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1631145600, + "value": 27285180.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631232000, + "value": 28766106.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1631491200, + "value": 45762033.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631577600, + "value": 35848818.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631664000, + "value": 30442302.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631750400, + "value": 26342049.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1631836800, + "value": 59345472.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632096000, + "value": 44764014.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632182400, + "value": 31419141.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632268800, + "value": 28690833.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632355200, + "value": 21861891.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632441600, + "value": 41849742.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632700800, + "value": 56626173.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1632787200, + "value": 50707452.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632873600, + "value": 42686520.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1632960000, + "value": 36607635.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633046400, + "value": 33948654.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633305600, + "value": 62392521.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633392000, + "value": 36630258.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633478400, + "value": 28747782.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633564800, + "value": 35731074.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633651200, + "value": 31890201.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1633910400, + "value": 27505347.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1633996800, + "value": 40789215.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634083200, + "value": 27633120.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634169600, + "value": 21017235.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634256000, + "value": 37482756.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634515200, + "value": 46397166.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634601600, + "value": 34256370.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1634688000, + "value": 26102676.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1634774400, + "value": 63007014.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1634860800, + "value": 44809167.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635120000, + "value": 120727032.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635206400, + "value": 116972874.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1635292800, + "value": 71864214.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635379200, + "value": 51902868.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635465600, + "value": 58173909.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635724800, + "value": 103645668.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635811200, + "value": 73600182.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1635897600, + "value": 62335545.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1635984000, + "value": 44871267.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636070400, + "value": 38407929.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636329600, + "value": 55734987.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636416000, + "value": 99305115.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636502400, + "value": 72635043.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1636588800, + "value": 37079193.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636675200, + "value": 40773651.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1636934400, + "value": 55007415.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637020800, + "value": 45724431.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637107200, + "value": 54335913.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637193600, + "value": 38152728.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637280000, + "value": 40460397.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637539200, + "value": 61802889.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637625600, + "value": 66676008.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1637712000, + "value": 40844445.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1637884800, + "value": 20116359.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638144000, + "value": 35464650.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638230400, + "value": 49770600.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638316800, + "value": 40769319.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638403200, + "value": 42563499.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638489600, + "value": 52544382.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638748800, + "value": 46148676.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1638835200, + "value": 35199075.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1638921600, + "value": 24624063.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639008000, + "value": 36719553.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639094400, + "value": 34100466.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639353600, + "value": 42878616.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639440000, + "value": 40971606.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639526400, + "value": 42256527.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639612800, + "value": 44465637.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1639699200, + "value": 59531019.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1639958400, + "value": 31028196.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640044800, + "value": 40021422.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640131200, + "value": 53675220.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640217600, + "value": 53221719.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640563200, + "value": 39116811.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1640649600, + "value": 33759246.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640736000, + "value": 33236880.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640822400, + "value": 26776320.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1640908800, + "value": 21442167.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641168000, + "value": 59739450.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1641254400, + "value": 55300041.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641340800, + "value": 45923958.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641427200, + "value": 50920653.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641513600, + "value": 48486174.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641772800, + "value": 50742453.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1641859200, + "value": 37721568.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1641945600, + "value": 47720787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1642032000, + "value": 56243877.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642118400, + "value": 40407246.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1642464000, + "value": 37357950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642550400, + "value": 41641410.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642636800, + "value": 40021428.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642723200, + "value": 54432708.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1642982400, + "value": 83257308.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643068800, + "value": 47386206.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643155200, + "value": 59069976.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643241600, + "value": 78316839.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643328000, + "value": 73422666.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643587200, + "value": 60666141.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643673600, + "value": 40608771.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643760000, + "value": 37054980.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1643846400, + "value": 45404325.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1643932800, + "value": 41669502.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644192000, + "value": 34018512.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644278400, + "value": 28583517.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644364800, + "value": 30368949.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644451200, + "value": 37176897.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644537600, + "value": 44144829.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1644796800, + "value": 38758287.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644883200, + "value": 32850735.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1644969600, + "value": 28010172.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645056000, + "value": 30422382.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645142400, + "value": 40040778.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645488000, + "value": 47556666.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645574400, + "value": 53536245.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1645660800, + "value": 81729354.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1645747200, + "value": 43164210.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646006400, + "value": 59203599.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646092800, + "value": 43701348.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646179200, + "value": 41124426.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646265600, + "value": 34345506.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646352000, + "value": 39490536.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646611200, + "value": 41203665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646697600, + "value": 47495559.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646784000, + "value": 34494873.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1646870400, + "value": 33274095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1646956800, + "value": 37045917.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1647216000, + "value": 39402378.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1647302400, + "value": 37676769.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647388800, + "value": 46220172.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647475200, + "value": 37029492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647561600, + "value": 61952121.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647820800, + "value": 46753863.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647907200, + "value": 62365338.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1647993600, + "value": 68725848.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648080000, + "value": 39163167.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648166400, + "value": 36286704.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648425600, + "value": 56465760.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648512000, + "value": 39172281.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648598400, + "value": 33436668.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1648684800, + "value": 26907888.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1648771200, + "value": 29717751.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649030400, + "value": 46320690.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649116800, + "value": 43596441.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649203200, + "value": 50559519.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649289600, + "value": 44438853.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649376000, + "value": 30800952.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649635200, + "value": 32727522.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1649721600, + "value": 38553336.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649808000, + "value": 31495641.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1649894400, + "value": 32337318.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650240000, + "value": 28905387.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650326400, + "value": 27618669.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650412800, + "value": 37622106.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1650499200, + "value": 57751845.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650585600, + "value": 37934373.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650844800, + "value": 37647819.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1650931200, + "value": 74006871.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651017600, + "value": 38960505.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651104000, + "value": 67646268.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651190400, + "value": 48944871.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651449600, + "value": 42804726.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651536000, + "value": 37183326.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651622400, + "value": 49005195.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1651708800, + "value": 52158030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1651795200, + "value": 41014902.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652054400, + "value": 49423431.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652140800, + "value": 48430737.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652227200, + "value": 53134143.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652313600, + "value": 85963638.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652400000, + "value": 55949757.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652659200, + "value": 52901019.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652745600, + "value": 47844489.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1652832000, + "value": 52252599.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1652918400, + "value": 55037787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653004800, + "value": 85888587.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653264000, + "value": 51265281.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653350400, + "value": 52180665.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1653436800, + "value": 58653768.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653523200, + "value": 66064707.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653609600, + "value": 56435403.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1653955200, + "value": 64379274.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654041600, + "value": 47765442.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654128000, + "value": 59789013.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654214400, + "value": 70047213.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654473600, + "value": 52758504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654560000, + "value": 46067151.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654646400, + "value": 47875032.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1654732800, + "value": 60465090.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1654819200, + "value": 60624126.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655078400, + "value": 61920003.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655164800, + "value": 63877368.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655251200, + "value": 76913121.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655337600, + "value": 65683083.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1655424000, + "value": 61196430.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655769600, + "value": 79742895.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655856000, + "value": 67988037.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1655942400, + "value": 69978438.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656028800, + "value": 62441367.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656288000, + "value": 56900979.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656374400, + "value": 58576794.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656460800, + "value": 53105913.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1656547200, + "value": 61716366.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656633600, + "value": 48110886.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1656979200, + "value": 54336840.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657065600, + "value": 45489657.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1657152000, + "value": 52164897.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657238400, + "value": 66933489.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657497600, + "value": 61863519.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1657584000, + "value": 56026785.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657670400, + "value": 62291388.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657756800, + "value": 50364726.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1657843200, + "value": 40794570.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658102400, + "value": 52663089.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658188800, + "value": 51763212.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658275200, + "value": 54030141.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658361600, + "value": 86439174.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658448000, + "value": 60837000.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658707200, + "value": 39659769.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658793600, + "value": 42541404.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1658880000, + "value": 55620006.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1658966400, + "value": 53337165.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659052800, + "value": 58007934.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659312000, + "value": 71199081.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659398400, + "value": 59609352.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659484800, + "value": 49034241.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659571200, + "value": 44030208.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1659657600, + "value": 67475064.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1659916800, + "value": 59549943.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660003200, + "value": 52285851.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660089600, + "value": 57884541.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660176000, + "value": 43055865.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660262400, + "value": 49332492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660521600, + "value": 54710223.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660608000, + "value": 55540302.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660694400, + "value": 43278504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1660780800, + "value": 28342434.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1660867200, + "value": 37094298.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661126400, + "value": 33285654.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661212800, + "value": 39575148.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661299200, + "value": 11374931.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661385600, + "value": 37975857.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661472000, + "value": 41690512.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661731200, + "value": 31229778.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1661817600, + "value": 36111921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661904000, + "value": 36997072.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1661990400, + "value": 39657641.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662076800, + "value": 36972502.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1662422400, + "value": 39823707.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1662508800, + "value": 36023268.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662595200, + "value": 40320418.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662681600, + "value": 40244272.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1662940800, + "value": 35331535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663027200, + "value": 47611133.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663113600, + "value": 51667238.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663200000, + "value": 48241149.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663286400, + "value": 70185787.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663545600, + "value": 44466573.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1663632000, + "value": 46760937.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663718400, + "value": 46208549.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663804800, + "value": 50406357.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1663891200, + "value": 44530343.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664150400, + "value": 40779663.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664236800, + "value": 45446685.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664323200, + "value": 40051777.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1664409600, + "value": 56781305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664496000, + "value": 49037220.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664755200, + "value": 72670646.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664841600, + "value": 82343604.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1664928000, + "value": 65285626.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665014400, + "value": 51843790.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665100800, + "value": 62463602.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665360000, + "value": 51669555.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665446400, + "value": 59920745.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665532800, + "value": 51834612.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665619200, + "value": 70560950.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1665705600, + "value": 72262028.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1665964800, + "value": 64099875.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666051200, + "value": 61738061.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666137600, + "value": 50898030.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666224000, + "value": 92683950.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666310400, + "value": 58617759.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666569600, + "value": 78968509.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666656000, + "value": 79670683.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666742400, + "value": 68562598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1666828800, + "value": 49680215.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1666915200, + "value": 56109870.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1667174400, + "value": 49891734.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667260800, + "value": 49775576.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667347200, + "value": 49853305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667433600, + "value": 44646949.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667520000, + "value": 80308864.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667779200, + "value": 73397622.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667865600, + "value": 105514188.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1667952000, + "value": 102644299.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668038400, + "value": 110460759.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1668124800, + "value": 95853553.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1668384000, + "value": 77319752.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668470400, + "value": 74960504.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668556800, + "value": 54096082.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668643200, + "value": 52118517.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668729600, + "value": 61891438.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1668988800, + "value": 73810772.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669075200, + "value": 64763513.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669161600, + "value": 90934248.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669334400, + "value": 41660711.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669593600, + "value": 78408629.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669680000, + "value": 68205280.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669766400, + "value": 92743086.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1669852800, + "value": 65844119.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1669939200, + "value": 60902399.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1670198400, + "value": 75912778.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670284800, + "value": 76040783.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670371200, + "value": 69718106.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670457600, + "value": 80762690.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670544000, + "value": 88081017.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1670803200, + "value": 90494485.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670889600, + "value": 135812432.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1670976000, + "value": 113815160.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671062400, + "value": 101035229.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1671148800, + "value": 113741284.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671408000, + "value": 118190710.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671494400, + "value": 131775303.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671580800, + "value": 123736453.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671667200, + "value": 177342265.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1671753600, + "value": 141626063.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672099200, + "value": 175910731.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672185600, + "value": 186100201.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672272000, + "value": 189503721.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672358400, + "value": 136672797.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672704000, + "value": 191557167.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672790400, + "value": 153862552.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1672876800, + "value": 133687246.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1672963200, + "value": 184006970.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673222400, + "value": 162885492.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673308800, + "value": 144503095.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1673395200, + "value": 158558924.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673481600, + "value": 145833294.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1673568000, + "value": 157396482.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1673913600, + "value": 160937377.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674000000, + "value": 169078250.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1674086400, + "value": 152223302.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674172800, + "value": 123571951.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674432000, + "value": 177044569.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674518400, + "value": 140230986.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1674604800, + "value": 166419849.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674691200, + "value": 200431932.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1674777600, + "value": 263157488.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675036800, + "value": 196790466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675123200, + "value": 172099948.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675209600, + "value": 187082506.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675296000, + "value": 186940474.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675382400, + "value": 199115506.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675641600, + "value": 161365866.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675728000, + "value": 162102866.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675814400, + "value": 155395535.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1675900800, + "value": 181049895.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1675987200, + "value": 172846466.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1676246400, + "value": 147807152.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676332800, + "value": 185629204.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676419200, + "value": 152835862.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676505600, + "value": 195125412.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1676592000, + "value": 183119234.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1676937600, + "value": 151695722.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677024000, + "value": 167116119.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1677110400, + "value": 126002008.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677196800, + "value": 121759004.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677456000, + "value": 135811509.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1677542400, + "value": 129887964.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677628800, + "value": 135485305.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677715200, + "value": 154029003.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1677801600, + "value": 132018423.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678060800, + "value": 111186290.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678147200, + "value": 127160413.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678233600, + "value": 130599496.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678320000, + "value": 142783264.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678406400, + "value": 163214327.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678665600, + "value": 141125454.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678752000, + "value": 124651497.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1678838400, + "value": 124829688.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1678924800, + "value": 103701677.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679011200, + "value": 113188518.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679270400, + "value": 111938751.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679356800, + "value": 129806598.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679443200, + "value": 127873104.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679529600, + "value": 122801841.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679616000, + "value": 100588036.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1679875200, + "value": 105008001.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1679961600, + "value": 85183670.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680048000, + "value": 107927597.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680134400, + "value": 94431494.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680220800, + "value": 146669747.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1680480000, + "value": 141493469.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680566400, + "value": 105533822.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680652800, + "value": 112676921.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1680739200, + "value": 105769070.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681084800, + "value": 123177931.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681171200, + "value": 100721415.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681257600, + "value": 131472591.0, + "color": "rgba(200,127,130,0.8)" + }, + { + "time": 1681344000, + "value": 99401779.0, + "color": "rgba(83,141,131,0.8)" + }, + { + "time": 1681430400, + "value": 84119837.0, + "color": "rgba(200,127,130,0.8)" + } + + ], + "candleData": [ + { + "time": 1277769600, + "open": 1.2667, + "high": 1.6667, + "low": 1.1693, + "close": 1.5927, + "volume": 277519500.0 + }, + { + "time": 1277856000, + "open": 1.6713, + "high": 2.028, + "low": 1.5533, + "close": 1.5887, + "volume": 253039500.0 + }, + { + "time": 1277942400, + "open": 1.6627, + "high": 1.728, + "low": 1.3513, + "close": 1.464, + "volume": 121461000.0 + }, + { + "time": 1278028800, + "open": 1.47, + "high": 1.55, + "low": 1.2473, + "close": 1.28, + "volume": 75871500.0 + }, + { + "time": 1278374400, + "open": 1.2867, + "high": 1.3333, + "low": 1.0553, + "close": 1.074, + "volume": 101664000.0 + }, + { + "time": 1278460800, + "open": 1.0933, + "high": 1.1087, + "low": 0.9987, + "close": 1.0533, + "volume": 102645000.0 + }, + { + "time": 1278547200, + "open": 1.0567, + "high": 1.1793, + "low": 1.038, + "close": 1.164, + "volume": 114526500.0 + }, + { + "time": 1278633600, + "open": 1.18, + "high": 1.1933, + "low": 1.1033, + "close": 1.16, + "volume": 60061500.0 + }, + { + "time": 1278892800, + "open": 1.1533, + "high": 1.2047, + "low": 1.1233, + "close": 1.1413, + "volume": 32487000.0 + }, + { + "time": 1278979200, + "open": 1.1533, + "high": 1.2427, + "low": 1.1267, + "close": 1.2093, + "volume": 39439500.0 + }, + { + "time": 1279065600, + "open": 1.2067, + "high": 1.3433, + "low": 1.184, + "close": 1.3227, + "volume": 62097000.0 + }, + { + "time": 1279152000, + "open": 1.32, + "high": 1.4333, + "low": 1.2667, + "close": 1.326, + "volume": 55222500.0 + }, + { + "time": 1279238400, + "open": 1.3267, + "high": 1.42, + "low": 1.326, + "close": 1.376, + "volume": 37939500.0 + }, + { + "time": 1279497600, + "open": 1.4, + "high": 1.4893, + "low": 1.3867, + "close": 1.4367, + "volume": 36303000.0 + }, + { + "time": 1279584000, + "open": 1.466, + "high": 1.4853, + "low": 1.328, + "close": 1.3533, + "volume": 26229000.0 + }, + { + "time": 1279670400, + "open": 1.36, + "high": 1.41, + "low": 1.3, + "close": 1.348, + "volume": 18214500.0 + }, + { + "time": 1279756800, + "open": 1.3507, + "high": 1.4167, + "low": 1.35, + "close": 1.4, + "volume": 13924500.0 + }, + { + "time": 1279843200, + "open": 1.416, + "high": 1.4373, + "low": 1.4013, + "close": 1.4193, + "volume": 9603000.0 + }, + { + "time": 1280102400, + "open": 1.4187, + "high": 1.4513, + "low": 1.3533, + "close": 1.3953, + "volume": 13416000.0 + }, + { + "time": 1280188800, + "open": 1.3973, + "high": 1.412, + "low": 1.3507, + "close": 1.37, + "volume": 8658000.0 + }, + { + "time": 1280275200, + "open": 1.3673, + "high": 1.3933, + "low": 1.3673, + "close": 1.3813, + "volume": 6801000.0 + }, + { + "time": 1280361600, + "open": 1.3847, + "high": 1.392, + "low": 1.3333, + "close": 1.3567, + "volume": 8734500.0 + }, + { + "time": 1280448000, + "open": 1.3567, + "high": 1.3627, + "low": 1.3033, + "close": 1.3293, + "volume": 6258000.0 + }, + { + "time": 1280707200, + "open": 1.338, + "high": 1.4, + "low": 1.338, + "close": 1.3807, + "volume": 10417500.0 + }, + { + "time": 1280793600, + "open": 1.384, + "high": 1.4633, + "low": 1.3593, + "close": 1.4633, + "volume": 17827500.0 + }, + { + "time": 1280880000, + "open": 1.4867, + "high": 1.4867, + "low": 1.3407, + "close": 1.4173, + "volume": 13594500.0 + }, + { + "time": 1280966400, + "open": 1.3967, + "high": 1.442, + "low": 1.3367, + "close": 1.3633, + "volume": 11722500.0 + }, + { + "time": 1281052800, + "open": 1.336, + "high": 1.35, + "low": 1.3013, + "close": 1.306, + "volume": 10542000.0 + }, + { + "time": 1281312000, + "open": 1.302, + "high": 1.3333, + "low": 1.2967, + "close": 1.3053, + "volume": 10684500.0 + }, + { + "time": 1281398400, + "open": 1.3067, + "high": 1.31, + "low": 1.2547, + "close": 1.2687, + "volume": 17506500.0 + }, + { + "time": 1281484800, + "open": 1.2447, + "high": 1.26, + "low": 1.1833, + "close": 1.1933, + "volume": 11340000.0 + }, + { + "time": 1281571200, + "open": 1.1933, + "high": 1.2133, + "low": 1.1593, + "close": 1.1733, + "volume": 10168500.0 + }, + { + "time": 1281657600, + "open": 1.1847, + "high": 1.24, + "low": 1.1773, + "close": 1.2213, + "volume": 9385500.0 + }, + { + "time": 1281916800, + "open": 1.2333, + "high": 1.2533, + "low": 1.2173, + "close": 1.25, + "volume": 7186500.0 + }, + { + "time": 1282003200, + "open": 1.25, + "high": 1.2933, + "low": 1.25, + "close": 1.2767, + "volume": 6597000.0 + }, + { + "time": 1282089600, + "open": 1.28, + "high": 1.306, + "low": 1.2333, + "close": 1.2513, + "volume": 8905500.0 + }, + { + "time": 1282176000, + "open": 1.236, + "high": 1.2833, + "low": 1.222, + "close": 1.2527, + "volume": 8290500.0 + }, + { + "time": 1282262400, + "open": 1.2333, + "high": 1.2787, + "low": 1.2333, + "close": 1.2733, + "volume": 4381500.0 + }, + { + "time": 1282521600, + "open": 1.2727, + "high": 1.3593, + "low": 1.2667, + "close": 1.3467, + "volume": 16048500.0 + }, + { + "time": 1282608000, + "open": 1.3267, + "high": 1.3267, + "low": 1.2633, + "close": 1.28, + "volume": 9973500.0 + }, + { + "time": 1282694400, + "open": 1.2667, + "high": 1.332, + "low": 1.2373, + "close": 1.3267, + "volume": 7372500.0 + }, + { + "time": 1282780800, + "open": 1.316, + "high": 1.3513, + "low": 1.3067, + "close": 1.3167, + "volume": 6189000.0 + }, + { + "time": 1282867200, + "open": 1.3333, + "high": 1.334, + "low": 1.3, + "close": 1.3133, + "volume": 5628000.0 + }, + { + "time": 1283126400, + "open": 1.3133, + "high": 1.346, + "low": 1.3073, + "close": 1.32, + "volume": 10831500.0 + }, + { + "time": 1283212800, + "open": 1.292, + "high": 1.3193, + "low": 1.2887, + "close": 1.2987, + "volume": 2956500.0 + }, + { + "time": 1283299200, + "open": 1.308, + "high": 1.3793, + "low": 1.3067, + "close": 1.3633, + "volume": 7306500.0 + }, + { + "time": 1283385600, + "open": 1.3633, + "high": 1.416, + "low": 1.354, + "close": 1.404, + "volume": 7159500.0 + }, + { + "time": 1283472000, + "open": 1.4067, + "high": 1.4327, + "low": 1.3773, + "close": 1.4033, + "volume": 6402000.0 + }, + { + "time": 1283817600, + "open": 1.388, + "high": 1.4, + "low": 1.3667, + "close": 1.3693, + "volume": 3612000.0 + }, + { + "time": 1283904000, + "open": 1.372, + "high": 1.3967, + "low": 1.372, + "close": 1.3933, + "volume": 4281000.0 + }, + { + "time": 1283990400, + "open": 1.3953, + "high": 1.4033, + "low": 1.3347, + "close": 1.3807, + "volume": 5586000.0 + }, + { + "time": 1284076800, + "open": 1.3833, + "high": 1.3953, + "low": 1.3173, + "close": 1.3447, + "volume": 5706000.0 + }, + { + "time": 1284336000, + "open": 1.3733, + "high": 1.3933, + "low": 1.3667, + "close": 1.386, + "volume": 5361000.0 + }, + { + "time": 1284422400, + "open": 1.3693, + "high": 1.44, + "low": 1.3687, + "close": 1.408, + "volume": 9564000.0 + }, + { + "time": 1284508800, + "open": 1.3987, + "high": 1.4667, + "low": 1.386, + "close": 1.4653, + "volume": 9990000.0 + }, + { + "time": 1284595200, + "open": 1.4867, + "high": 1.544, + "low": 1.3873, + "close": 1.396, + "volume": 38347500.0 + }, + { + "time": 1284681600, + "open": 1.4213, + "high": 1.4233, + "low": 1.32, + "close": 1.3487, + "volume": 17478000.0 + }, + { + "time": 1284940800, + "open": 1.35, + "high": 1.4233, + "low": 1.344, + "close": 1.4, + "volume": 13968000.0 + }, + { + "time": 1285027200, + "open": 1.4193, + "high": 1.4367, + "low": 1.378, + "close": 1.3847, + "volume": 11749500.0 + }, + { + "time": 1285113600, + "open": 1.3913, + "high": 1.3967, + "low": 1.32, + "close": 1.3247, + "volume": 13227000.0 + }, + { + "time": 1285200000, + "open": 1.32, + "high": 1.3427, + "low": 1.3, + "close": 1.304, + "volume": 9856500.0 + }, + { + "time": 1285286400, + "open": 1.33, + "high": 1.346, + "low": 1.31, + "close": 1.34, + "volume": 8590500.0 + }, + { + "time": 1285545600, + "open": 1.3467, + "high": 1.3873, + "low": 1.3333, + "close": 1.386, + "volume": 6181500.0 + }, + { + "time": 1285632000, + "open": 1.398, + "high": 1.4327, + "low": 1.384, + "close": 1.4267, + "volume": 17905500.0 + }, + { + "time": 1285718400, + "open": 1.3667, + "high": 1.4733, + "low": 1.3667, + "close": 1.4653, + "volume": 27925500.0 + }, + { + "time": 1285804800, + "open": 1.466, + "high": 1.4767, + "low": 1.346, + "close": 1.3603, + "volume": 31186500.0 + }, + { + "time": 1285891200, + "open": 1.3867, + "high": 1.4167, + "low": 1.346, + "close": 1.3733, + "volume": 7783500.0 + }, + { + "time": 1286150400, + "open": 1.34, + "high": 1.4113, + "low": 1.34, + "close": 1.4, + "volume": 9444000.0 + }, + { + "time": 1286236800, + "open": 1.41, + "high": 1.4187, + "low": 1.4007, + "close": 1.408, + "volume": 4914000.0 + }, + { + "time": 1286323200, + "open": 1.404, + "high": 1.4173, + "low": 1.3547, + "close": 1.364, + "volume": 4617000.0 + }, + { + "time": 1286409600, + "open": 1.3713, + "high": 1.376, + "low": 1.354, + "close": 1.362, + "volume": 2064000.0 + }, + { + "time": 1286496000, + "open": 1.362, + "high": 1.386, + "low": 1.3573, + "close": 1.362, + "volume": 3973500.0 + }, + { + "time": 1286755200, + "open": 1.3667, + "high": 1.38, + "low": 1.338, + "close": 1.34, + "volume": 2497500.0 + }, + { + "time": 1286841600, + "open": 1.3467, + "high": 1.352, + "low": 1.3353, + "close": 1.3493, + "volume": 3405000.0 + }, + { + "time": 1286928000, + "open": 1.3507, + "high": 1.4233, + "low": 1.3507, + "close": 1.3693, + "volume": 4728000.0 + }, + { + "time": 1287014400, + "open": 1.4333, + "high": 1.4333, + "low": 1.36, + "close": 1.3833, + "volume": 4314000.0 + }, + { + "time": 1287100800, + "open": 1.3927, + "high": 1.3933, + "low": 1.35, + "close": 1.3693, + "volume": 4189500.0 + }, + { + "time": 1287360000, + "open": 1.376, + "high": 1.376, + "low": 1.348, + "close": 1.3487, + "volume": 2374500.0 + }, + { + "time": 1287446400, + "open": 1.3467, + "high": 1.3607, + "low": 1.3333, + "close": 1.3367, + "volume": 3601500.0 + }, + { + "time": 1287532800, + "open": 1.344, + "high": 1.3793, + "low": 1.336, + "close": 1.3767, + "volume": 4608000.0 + }, + { + "time": 1287619200, + "open": 1.374, + "high": 1.3967, + "low": 1.3633, + "close": 1.3833, + "volume": 6166500.0 + }, + { + "time": 1287705600, + "open": 1.3787, + "high": 1.3953, + "low": 1.37, + "close": 1.3813, + "volume": 2374500.0 + }, + { + "time": 1287964800, + "open": 1.3947, + "high": 1.3987, + "low": 1.382, + "close": 1.3987, + "volume": 1737000.0 + }, + { + "time": 1288051200, + "open": 1.3867, + "high": 1.458, + "low": 1.3673, + "close": 1.424, + "volume": 9744000.0 + }, + { + "time": 1288137600, + "open": 1.4, + "high": 1.4, + "low": 1.4, + "close": 1.4, + "volume": 0.0 + }, + { + "time": 1294272000, + "open": 1.7907, + "high": 1.8667, + "low": 1.7873, + "close": 1.8467, + "volume": 28846500.0 + }, + { + "time": 1294358400, + "open": 1.8533, + "high": 1.9053, + "low": 1.8533, + "close": 1.876, + "volume": 33460500.0 + }, + { + "time": 1294617600, + "open": 1.8773, + "high": 1.912, + "low": 1.87, + "close": 1.91, + "volume": 19849500.0 + }, + { + "time": 1294704000, + "open": 1.9073, + "high": 1.914, + "low": 1.782, + "close": 1.7973, + "volume": 25282500.0 + }, + { + "time": 1294790400, + "open": 1.8007, + "high": 1.8267, + "low": 1.768, + "close": 1.7973, + "volume": 13564500.0 + }, + { + "time": 1294876800, + "open": 1.7967, + "high": 1.7993, + "low": 1.744, + "close": 1.7533, + "volume": 10503000.0 + }, + { + "time": 1294963200, + "open": 1.7553, + "high": 1.772, + "low": 1.7073, + "close": 1.7193, + "volume": 17412000.0 + }, + { + "time": 1295308800, + "open": 1.74, + "high": 1.74, + "low": 1.65, + "close": 1.7093, + "volume": 23950500.0 + }, + { + "time": 1295395200, + "open": 1.6847, + "high": 1.698, + "low": 1.5833, + "close": 1.602, + "volume": 35040000.0 + }, + { + "time": 1295481600, + "open": 1.6133, + "high": 1.63, + "low": 1.4913, + "close": 1.5167, + "volume": 33759000.0 + }, + { + "time": 1295568000, + "open": 1.5247, + "high": 1.5727, + "low": 1.514, + "close": 1.5333, + "volume": 18036000.0 + }, + { + "time": 1295827200, + "open": 1.5567, + "high": 1.654, + "low": 1.5487, + "close": 1.6333, + "volume": 24352500.0 + }, + { + "time": 1295913600, + "open": 1.6433, + "high": 1.6593, + "low": 1.6013, + "close": 1.6453, + "volume": 18924000.0 + }, + { + "time": 1296000000, + "open": 1.66, + "high": 1.66, + "low": 1.6067, + "close": 1.65, + "volume": 16050000.0 + }, + { + "time": 1296086400, + "open": 1.6567, + "high": 1.672, + "low": 1.6353, + "close": 1.6647, + "volume": 12790500.0 + }, + { + "time": 1296172800, + "open": 1.6533, + "high": 1.6613, + "low": 1.5833, + "close": 1.6, + "volume": 15490500.0 + }, + { + "time": 1296432000, + "open": 1.6393, + "high": 1.6393, + "low": 1.5667, + "close": 1.6007, + "volume": 11974500.0 + }, + { + "time": 1296518400, + "open": 1.6367, + "high": 1.6487, + "low": 1.5693, + "close": 1.594, + "volume": 10473000.0 + }, + { + "time": 1296604800, + "open": 1.594, + "high": 1.612, + "low": 1.578, + "close": 1.596, + "volume": 8454000.0 + }, + { + "time": 1296691200, + "open": 1.588, + "high": 1.5933, + "low": 1.5433, + "close": 1.5807, + "volume": 7540500.0 + }, + { + "time": 1296777600, + "open": 1.5647, + "high": 1.578, + "low": 1.548, + "close": 1.5753, + "volume": 8067000.0 + }, + { + "time": 1297036800, + "open": 1.556, + "high": 1.5567, + "low": 1.5253, + "close": 1.538, + "volume": 13209000.0 + }, + { + "time": 1297123200, + "open": 1.534, + "high": 1.6833, + "low": 1.5333, + "close": 1.6327, + "volume": 51768000.0 + }, + { + "time": 1297209600, + "open": 1.6173, + "high": 1.6327, + "low": 1.5193, + "close": 1.5473, + "volume": 37779000.0 + }, + { + "time": 1297296000, + "open": 1.5333, + "high": 1.576, + "low": 1.5207, + "close": 1.5513, + "volume": 12324000.0 + }, + { + "time": 1297382400, + "open": 1.55, + "high": 1.5833, + "low": 1.5293, + "close": 1.5333, + "volume": 9424500.0 + }, + { + "time": 1297641600, + "open": 1.5487, + "high": 1.6093, + "low": 1.5367, + "close": 1.546, + "volume": 18984000.0 + }, + { + "time": 1297728000, + "open": 1.546, + "high": 1.5667, + "low": 1.4973, + "close": 1.5227, + "volume": 14146500.0 + }, + { + "time": 1297814400, + "open": 1.5333, + "high": 1.6647, + "low": 1.5273, + "close": 1.6487, + "volume": 60928500.0 + }, + { + "time": 1297900800, + "open": 1.6667, + "high": 1.6993, + "low": 1.558, + "close": 1.5833, + "volume": 38383500.0 + }, + { + "time": 1297987200, + "open": 1.5733, + "high": 1.5733, + "low": 1.5307, + "close": 1.5353, + "volume": 35118000.0 + }, + { + "time": 1298332800, + "open": 1.5807, + "high": 1.5807, + "low": 1.452, + "close": 1.458, + "volume": 30369000.0 + }, + { + "time": 1298419200, + "open": 1.496, + "high": 1.5, + "low": 1.4073, + "close": 1.4553, + "volume": 23451000.0 + }, + { + "time": 1298505600, + "open": 1.4667, + "high": 1.5053, + "low": 1.4333, + "close": 1.4813, + "volume": 15372000.0 + }, + { + "time": 1298592000, + "open": 1.5067, + "high": 1.59, + "low": 1.5053, + "close": 1.5687, + "volume": 19941000.0 + }, + { + "time": 1298851200, + "open": 1.5827, + "high": 1.6067, + "low": 1.5667, + "close": 1.574, + "volume": 15580500.0 + }, + { + "time": 1298937600, + "open": 1.5927, + "high": 1.6213, + "low": 1.58, + "close": 1.596, + "volume": 16422000.0 + }, + { + "time": 1299024000, + "open": 1.596, + "high": 1.6187, + "low": 1.582, + "close": 1.6013, + "volume": 9826500.0 + }, + { + "time": 1299110400, + "open": 1.632, + "high": 1.6527, + "low": 1.604, + "close": 1.6207, + "volume": 9478500.0 + }, + { + "time": 1299196800, + "open": 1.628, + "high": 1.666, + "low": 1.5853, + "close": 1.646, + "volume": 22677000.0 + }, + { + "time": 1299456000, + "open": 1.67, + "high": 1.6933, + "low": 1.6467, + "close": 1.6587, + "volume": 30210000.0 + }, + { + "time": 1299542400, + "open": 1.6587, + "high": 1.664, + "low": 1.6, + "close": 1.644, + "volume": 20715000.0 + }, + { + "time": 1299628800, + "open": 1.644, + "high": 1.666, + "low": 1.618, + "close": 1.648, + "volume": 13692000.0 + }, + { + "time": 1299715200, + "open": 1.6293, + "high": 1.648, + "low": 1.582, + "close": 1.6133, + "volume": 14049000.0 + }, + { + "time": 1299801600, + "open": 1.6047, + "high": 1.6167, + "low": 1.5687, + "close": 1.6033, + "volume": 13821000.0 + }, + { + "time": 1300060800, + "open": 1.5733, + "high": 1.608, + "low": 1.5467, + "close": 1.5507, + "volume": 17205000.0 + }, + { + "time": 1300147200, + "open": 1.4927, + "high": 1.5307, + "low": 1.4533, + "close": 1.53, + "volume": 19534500.0 + }, + { + "time": 1300233600, + "open": 1.524, + "high": 1.55, + "low": 1.5127, + "close": 1.5213, + "volume": 17208000.0 + }, + { + "time": 1300320000, + "open": 1.5433, + "high": 1.562, + "low": 1.5093, + "close": 1.5207, + "volume": 12612000.0 + }, + { + "time": 1300406400, + "open": 1.546, + "high": 1.546, + "low": 1.5007, + "close": 1.522, + "volume": 10195500.0 + }, + { + "time": 1300665600, + "open": 1.5333, + "high": 1.5467, + "low": 1.5027, + "close": 1.516, + "volume": 6057000.0 + }, + { + "time": 1300752000, + "open": 1.5153, + "high": 1.524, + "low": 1.4667, + "close": 1.4793, + "volume": 8097000.0 + }, + { + "time": 1300838400, + "open": 1.4707, + "high": 1.4847, + "low": 1.4513, + "close": 1.4807, + "volume": 5943000.0 + }, + { + "time": 1300924800, + "open": 1.48, + "high": 1.5, + "low": 1.4653, + "close": 1.5, + "volume": 6564000.0 + }, + { + "time": 1301011200, + "open": 1.4953, + "high": 1.5333, + "low": 1.4933, + "close": 1.5167, + "volume": 8416500.0 + }, + { + "time": 1301270400, + "open": 1.5307, + "high": 1.5693, + "low": 1.5033, + "close": 1.528, + "volume": 15309000.0 + }, + { + "time": 1301356800, + "open": 1.5533, + "high": 1.6, + "low": 1.5473, + "close": 1.5947, + "volume": 11188500.0 + }, + { + "time": 1301443200, + "open": 1.5933, + "high": 1.6327, + "low": 1.534, + "close": 1.5807, + "volume": 18003000.0 + }, + { + "time": 1301529600, + "open": 1.6093, + "high": 1.914, + "low": 1.6093, + "close": 1.842, + "volume": 163869000.0 + }, + { + "time": 1301616000, + "open": 1.8667, + "high": 1.8787, + "low": 1.7713, + "close": 1.7793, + "volume": 42078000.0 + }, + { + "time": 1301875200, + "open": 1.7687, + "high": 1.8, + "low": 1.682, + "close": 1.7207, + "volume": 38563500.0 + }, + { + "time": 1301961600, + "open": 1.7567, + "high": 1.8, + "low": 1.7127, + "close": 1.78, + "volume": 46600500.0 + }, + { + "time": 1302048000, + "open": 1.778, + "high": 1.8007, + "low": 1.72, + "close": 1.7633, + "volume": 18907500.0 + }, + { + "time": 1302134400, + "open": 1.772, + "high": 1.8627, + "low": 1.7633, + "close": 1.8273, + "volume": 41496000.0 + }, + { + "time": 1302220800, + "open": 1.846, + "high": 1.846, + "low": 1.7573, + "close": 1.7667, + "volume": 28378500.0 + }, + { + "time": 1302480000, + "open": 1.7833, + "high": 1.7833, + "low": 1.6667, + "close": 1.6667, + "volume": 20121000.0 + }, + { + "time": 1302566400, + "open": 1.6707, + "high": 1.6827, + "low": 1.62, + "close": 1.65, + "volume": 20044500.0 + }, + { + "time": 1302652800, + "open": 1.662, + "high": 1.7127, + "low": 1.6533, + "close": 1.6533, + "volume": 17970000.0 + }, + { + "time": 1302739200, + "open": 1.6527, + "high": 1.6853, + "low": 1.6133, + "close": 1.6767, + "volume": 14481000.0 + }, + { + "time": 1302825600, + "open": 1.7, + "high": 1.7453, + "low": 1.69, + "close": 1.6913, + "volume": 13975500.0 + }, + { + "time": 1303084800, + "open": 1.678, + "high": 1.708, + "low": 1.624, + "close": 1.6653, + "volume": 15267000.0 + }, + { + "time": 1303171200, + "open": 1.668, + "high": 1.684, + "low": 1.6433, + "close": 1.6833, + "volume": 8127000.0 + }, + { + "time": 1303257600, + "open": 1.7013, + "high": 1.7393, + "low": 1.6867, + "close": 1.72, + "volume": 12396000.0 + }, + { + "time": 1303344000, + "open": 1.72, + "high": 1.7987, + "low": 1.706, + "close": 1.7647, + "volume": 19473000.0 + }, + { + "time": 1303689600, + "open": 1.78, + "high": 1.79, + "low": 1.7313, + "close": 1.762, + "volume": 11760000.0 + }, + { + "time": 1303776000, + "open": 1.7647, + "high": 1.8167, + "low": 1.754, + "close": 1.7953, + "volume": 20268000.0 + }, + { + "time": 1303862400, + "open": 1.8007, + "high": 1.824, + "low": 1.7753, + "close": 1.8013, + "volume": 14770500.0 + }, + { + "time": 1303948800, + "open": 1.8167, + "high": 1.846, + "low": 1.7813, + "close": 1.83, + "volume": 23356500.0 + }, + { + "time": 1304035200, + "open": 1.846, + "high": 1.858, + "low": 1.82, + "close": 1.82, + "volume": 9780000.0 + }, + { + "time": 1304294400, + "open": 1.8467, + "high": 1.8533, + "low": 1.804, + "close": 1.816, + "volume": 11614500.0 + }, + { + "time": 1304380800, + "open": 1.8267, + "high": 1.83, + "low": 1.7667, + "close": 1.82, + "volume": 13510500.0 + }, + { + "time": 1304467200, + "open": 1.7853, + "high": 1.9333, + "low": 1.7167, + "close": 1.8467, + "volume": 15252000.0 + }, + { + "time": 1304553600, + "open": 1.8167, + "high": 1.864, + "low": 1.7447, + "close": 1.7987, + "volume": 17584500.0 + }, + { + "time": 1304640000, + "open": 1.7833, + "high": 1.8467, + "low": 1.7747, + "close": 1.808, + "volume": 13941000.0 + }, + { + "time": 1304899200, + "open": 1.8527, + "high": 1.8667, + "low": 1.79, + "close": 1.828, + "volume": 13521000.0 + }, + { + "time": 1304985600, + "open": 1.8733, + "high": 1.93, + "low": 1.8607, + "close": 1.8873, + "volume": 22632000.0 + }, + { + "time": 1305072000, + "open": 1.892, + "high": 1.892, + "low": 1.78, + "close": 1.79, + "volume": 14250000.0 + }, + { + "time": 1305158400, + "open": 1.7833, + "high": 1.85, + "low": 1.7567, + "close": 1.85, + "volume": 9286500.0 + }, + { + "time": 1305244800, + "open": 1.86, + "high": 1.8793, + "low": 1.82, + "close": 1.8333, + "volume": 9783000.0 + }, + { + "time": 1305504000, + "open": 1.85, + "high": 1.866, + "low": 1.77, + "close": 1.7787, + "volume": 11152500.0 + }, + { + "time": 1305590400, + "open": 1.85, + "high": 1.85, + "low": 1.7147, + "close": 1.722, + "volume": 18295500.0 + }, + { + "time": 1305676800, + "open": 1.6967, + "high": 1.7647, + "low": 1.6967, + "close": 1.7567, + "volume": 10804500.0 + }, + { + "time": 1305763200, + "open": 1.7793, + "high": 1.896, + "low": 1.7733, + "close": 1.8533, + "volume": 38518500.0 + }, + { + "time": 1305849600, + "open": 1.8867, + "high": 1.8867, + "low": 1.8233, + "close": 1.8653, + "volume": 12024000.0 + }, + { + "time": 1306108800, + "open": 1.8333, + "high": 1.8413, + "low": 1.7747, + "close": 1.776, + "volume": 12774000.0 + }, + { + "time": 1306195200, + "open": 1.8107, + "high": 1.8333, + "low": 1.77, + "close": 1.77, + "volume": 9003000.0 + }, + { + "time": 1306281600, + "open": 1.7987, + "high": 1.934, + "low": 1.7447, + "close": 1.926, + "volume": 69592500.0 + }, + { + "time": 1306368000, + "open": 1.9307, + "high": 1.984, + "low": 1.8733, + "close": 1.9667, + "volume": 48706500.0 + }, + { + "time": 1306454400, + "open": 1.9707, + "high": 1.978, + "low": 1.9213, + "close": 1.964, + "volume": 24933000.0 + }, + { + "time": 1306800000, + "open": 1.9747, + "high": 2.0187, + "low": 1.9667, + "close": 2.0127, + "volume": 48790500.0 + }, + { + "time": 1306886400, + "open": 2.0093, + "high": 2.0093, + "low": 1.884, + "close": 1.904, + "volume": 22666500.0 + }, + { + "time": 1306972800, + "open": 1.908, + "high": 1.9547, + "low": 1.8893, + "close": 1.95, + "volume": 14418000.0 + }, + { + "time": 1307059200, + "open": 1.9367, + "high": 2.1, + "low": 1.9327, + "close": 2.0, + "volume": 92074500.0 + }, + { + "time": 1307318400, + "open": 2.012, + "high": 2.0253, + "low": 1.884, + "close": 1.9167, + "volume": 34503000.0 + }, + { + "time": 1307404800, + "open": 1.928, + "high": 1.9593, + "low": 1.884, + "close": 1.89, + "volume": 17590500.0 + }, + { + "time": 1307491200, + "open": 1.8813, + "high": 1.9067, + "low": 1.8, + "close": 1.8073, + "volume": 25230000.0 + }, + { + "time": 1307577600, + "open": 1.8313, + "high": 1.8733, + "low": 1.8067, + "close": 1.8553, + "volume": 23793000.0 + }, + { + "time": 1307664000, + "open": 1.8313, + "high": 1.8867, + "low": 1.8233, + "close": 1.868, + "volume": 22432500.0 + }, + { + "time": 1307923200, + "open": 1.8713, + "high": 1.9253, + "low": 1.8587, + "close": 1.8967, + "volume": 25342500.0 + }, + { + "time": 1308009600, + "open": 1.928, + "high": 1.98, + "low": 1.9, + "close": 1.9, + "volume": 23337000.0 + }, + { + "time": 1308096000, + "open": 1.9, + "high": 1.9, + "low": 1.8047, + "close": 1.8533, + "volume": 19891500.0 + }, + { + "time": 1308182400, + "open": 1.8447, + "high": 1.8667, + "low": 1.716, + "close": 1.7487, + "volume": 26997000.0 + }, + { + "time": 1308268800, + "open": 1.778, + "high": 1.8467, + "low": 1.7427, + "close": 1.766, + "volume": 25465500.0 + }, + { + "time": 1308528000, + "open": 1.7733, + "high": 1.7733, + "low": 1.7, + "close": 1.734, + "volume": 22590000.0 + }, + { + "time": 1308614400, + "open": 1.7513, + "high": 1.8487, + "low": 1.7333, + "close": 1.8447, + "volume": 22168500.0 + }, + { + "time": 1308700800, + "open": 1.828, + "high": 1.8833, + "low": 1.802, + "close": 1.802, + "volume": 21912000.0 + }, + { + "time": 1308787200, + "open": 1.8053, + "high": 1.856, + "low": 1.7473, + "close": 1.856, + "volume": 17314500.0 + }, + { + "time": 1308873600, + "open": 1.8427, + "high": 1.8647, + "low": 1.8173, + "close": 1.8373, + "volume": 49531500.0 + }, + { + "time": 1309132800, + "open": 1.8487, + "high": 1.8853, + "low": 1.8207, + "close": 1.8307, + "volume": 16056000.0 + }, + { + "time": 1309219200, + "open": 1.852, + "high": 1.8833, + "low": 1.8447, + "close": 1.874, + "volume": 13153500.0 + }, + { + "time": 1309305600, + "open": 1.8887, + "high": 1.9393, + "low": 1.8713, + "close": 1.8873, + "volume": 21499500.0 + }, + { + "time": 1309392000, + "open": 1.9, + "high": 1.9553, + "low": 1.886, + "close": 1.912, + "volume": 13981500.0 + }, + { + "time": 1309478400, + "open": 1.938, + "high": 1.9733, + "low": 1.92, + "close": 1.9347, + "volume": 12570000.0 + }, + { + "time": 1309824000, + "open": 1.9347, + "high": 1.968, + "low": 1.914, + "close": 1.942, + "volume": 14746500.0 + }, + { + "time": 1309910400, + "open": 1.9633, + "high": 1.9633, + "low": 1.9033, + "close": 1.926, + "volume": 13030500.0 + }, + { + "time": 1309996800, + "open": 1.9427, + "high": 2.0, + "low": 1.934, + "close": 1.982, + "volume": 19233000.0 + }, + { + "time": 1310083200, + "open": 1.9733, + "high": 1.9927, + "low": 1.906, + "close": 1.916, + "volume": 18363000.0 + }, + { + "time": 1310342400, + "open": 1.9073, + "high": 1.9073, + "low": 1.8667, + "close": 1.8893, + "volume": 14514000.0 + }, + { + "time": 1310428800, + "open": 1.8667, + "high": 1.9393, + "low": 1.8667, + "close": 1.8667, + "volume": 15451500.0 + }, + { + "time": 1310515200, + "open": 1.8953, + "high": 1.9353, + "low": 1.86, + "close": 1.9113, + "volume": 15813000.0 + }, + { + "time": 1310601600, + "open": 1.902, + "high": 1.9307, + "low": 1.8167, + "close": 1.8407, + "volume": 17193000.0 + }, + { + "time": 1310688000, + "open": 1.8527, + "high": 1.8553, + "low": 1.8267, + "close": 1.8353, + "volume": 10407000.0 + }, + { + "time": 1310947200, + "open": 1.832, + "high": 1.85, + "low": 1.7753, + "close": 1.7953, + "volume": 12657000.0 + }, + { + "time": 1311033600, + "open": 1.8153, + "high": 1.874, + "low": 1.8153, + "close": 1.86, + "volume": 14488500.0 + }, + { + "time": 1311120000, + "open": 1.8667, + "high": 2.0293, + "low": 1.8533, + "close": 1.9187, + "volume": 45171000.0 + }, + { + "time": 1311206400, + "open": 1.9, + "high": 1.944, + "low": 1.8733, + "close": 1.914, + "volume": 14995500.0 + }, + { + "time": 1311292800, + "open": 1.9133, + "high": 1.9693, + "low": 1.9033, + "close": 1.9507, + "volume": 8658000.0 + }, + { + "time": 1311552000, + "open": 1.8913, + "high": 1.9527, + "low": 1.8733, + "close": 1.9173, + "volume": 9960000.0 + }, + { + "time": 1311638400, + "open": 1.86, + "high": 1.918, + "low": 1.86, + "close": 1.878, + "volume": 11218500.0 + }, + { + "time": 1311724800, + "open": 1.9, + "high": 1.9, + "low": 1.8273, + "close": 1.842, + "volume": 13981500.0 + }, + { + "time": 1311811200, + "open": 1.846, + "high": 1.9033, + "low": 1.836, + "close": 1.8653, + "volume": 13846500.0 + }, + { + "time": 1311897600, + "open": 1.8533, + "high": 1.8933, + "low": 1.8333, + "close": 1.878, + "volume": 13464000.0 + }, + { + "time": 1312156800, + "open": 1.9233, + "high": 1.932, + "low": 1.8807, + "close": 1.918, + "volume": 16134000.0 + }, + { + "time": 1312243200, + "open": 1.9127, + "high": 1.9467, + "low": 1.8, + "close": 1.8, + "volume": 21258000.0 + }, + { + "time": 1312329600, + "open": 1.8333, + "high": 1.9333, + "low": 1.75, + "close": 1.75, + "volume": 25755000.0 + }, + { + "time": 1312416000, + "open": 1.7567, + "high": 1.7927, + "low": 1.6447, + "close": 1.6833, + "volume": 44475000.0 + }, + { + "time": 1312502400, + "open": 1.6433, + "high": 1.692, + "low": 1.522, + "close": 1.6167, + "volume": 28983000.0 + }, + { + "time": 1312761600, + "open": 1.5167, + "high": 1.6293, + "low": 1.496, + "close": 1.572, + "volume": 38667000.0 + }, + { + "time": 1312848000, + "open": 1.5727, + "high": 1.6967, + "low": 1.5667, + "close": 1.6707, + "volume": 19720500.0 + }, + { + "time": 1312934400, + "open": 1.6907, + "high": 1.696, + "low": 1.5753, + "close": 1.6707, + "volume": 22410000.0 + }, + { + "time": 1313020800, + "open": 1.63, + "high": 1.7167, + "low": 1.6, + "close": 1.6867, + "volume": 12295500.0 + }, + { + "time": 1313107200, + "open": 1.7067, + "high": 1.8093, + "low": 1.6907, + "close": 1.754, + "volume": 14947500.0 + }, + { + "time": 1313366400, + "open": 1.77, + "high": 1.7833, + "low": 1.7287, + "close": 1.7493, + "volume": 10935000.0 + }, + { + "time": 1313452800, + "open": 1.7467, + "high": 1.7693, + "low": 1.722, + "close": 1.7393, + "volume": 7972500.0 + }, + { + "time": 1313539200, + "open": 1.7573, + "high": 1.7767, + "low": 1.6847, + "close": 1.6867, + "volume": 9489000.0 + }, + { + "time": 1313625600, + "open": 1.7, + "high": 1.7, + "low": 1.5647, + "close": 1.6173, + "volume": 15598500.0 + }, + { + "time": 1313712000, + "open": 1.564, + "high": 1.6173, + "low": 1.4667, + "close": 1.49, + "volume": 18744000.0 + }, + { + "time": 1313971200, + "open": 1.498, + "high": 1.5867, + "low": 1.4453, + "close": 1.4633, + "volume": 14208000.0 + }, + { + "time": 1314057600, + "open": 1.48, + "high": 1.5407, + "low": 1.4333, + "close": 1.4633, + "volume": 12903000.0 + }, + { + "time": 1314144000, + "open": 1.5333, + "high": 1.5953, + "low": 1.508, + "close": 1.5307, + "volume": 10108500.0 + }, + { + "time": 1314230400, + "open": 1.5913, + "high": 1.5913, + "low": 1.5267, + "close": 1.55, + "volume": 10123500.0 + }, + { + "time": 1314316800, + "open": 1.514, + "high": 1.5967, + "low": 1.4713, + "close": 1.582, + "volume": 11325000.0 + }, + { + "time": 1314576000, + "open": 1.596, + "high": 1.6567, + "low": 1.596, + "close": 1.6473, + "volume": 11877000.0 + }, + { + "time": 1314662400, + "open": 1.6333, + "high": 1.652, + "low": 1.606, + "close": 1.64, + "volume": 5392500.0 + }, + { + "time": 1314748800, + "open": 1.6453, + "high": 1.7, + "low": 1.6187, + "close": 1.646, + "volume": 12174000.0 + }, + { + "time": 1314835200, + "open": 1.644, + "high": 1.658, + "low": 1.5893, + "close": 1.6, + "volume": 12555000.0 + }, + { + "time": 1314921600, + "open": 1.6, + "high": 1.6, + "low": 1.512, + "close": 1.5713, + "volume": 11379000.0 + }, + { + "time": 1315267200, + "open": 1.5067, + "high": 1.5467, + "low": 1.486, + "close": 1.51, + "volume": 11688000.0 + }, + { + "time": 1315353600, + "open": 1.6, + "high": 1.6, + "low": 1.552, + "close": 1.5893, + "volume": 6774000.0 + }, + { + "time": 1315440000, + "open": 1.572, + "high": 1.602, + "low": 1.552, + "close": 1.5893, + "volume": 6633000.0 + }, + { + "time": 1315526400, + "open": 1.558, + "high": 1.574, + "low": 1.5033, + "close": 1.5313, + "volume": 9963000.0 + }, + { + "time": 1315785600, + "open": 1.4987, + "high": 1.554, + "low": 1.4967, + "close": 1.5253, + "volume": 8395500.0 + }, + { + "time": 1315872000, + "open": 1.5527, + "high": 1.6067, + "low": 1.5167, + "close": 1.6053, + "volume": 10750500.0 + }, + { + "time": 1315958400, + "open": 1.6133, + "high": 1.656, + "low": 1.586, + "close": 1.6227, + "volume": 12340500.0 + }, + { + "time": 1316044800, + "open": 1.6387, + "high": 1.662, + "low": 1.622, + "close": 1.6227, + "volume": 8277000.0 + }, + { + "time": 1316131200, + "open": 1.6533, + "high": 1.73, + "low": 1.6327, + "close": 1.73, + "volume": 20959500.0 + }, + { + "time": 1316390400, + "open": 1.7113, + "high": 1.7207, + "low": 1.588, + "close": 1.7173, + "volume": 17196000.0 + }, + { + "time": 1316476800, + "open": 1.7133, + "high": 1.7733, + "low": 1.7113, + "close": 1.7267, + "volume": 16471500.0 + }, + { + "time": 1316563200, + "open": 1.73, + "high": 1.7967, + "low": 1.7133, + "close": 1.7233, + "volume": 14565000.0 + }, + { + "time": 1316649600, + "open": 1.6933, + "high": 1.7407, + "low": 1.6187, + "close": 1.7093, + "volume": 11467500.0 + }, + { + "time": 1316736000, + "open": 1.6993, + "high": 1.7747, + "low": 1.69, + "close": 1.7547, + "volume": 16702500.0 + }, + { + "time": 1316995200, + "open": 1.768, + "high": 1.768, + "low": 1.66, + "close": 1.7133, + "volume": 13869000.0 + }, + { + "time": 1317081600, + "open": 1.7133, + "high": 1.7993, + "low": 1.7013, + "close": 1.746, + "volume": 9808500.0 + }, + { + "time": 1317168000, + "open": 1.75, + "high": 1.7667, + "low": 1.634, + "close": 1.6393, + "volume": 10636500.0 + }, + { + "time": 1317254400, + "open": 1.6667, + "high": 1.7213, + "low": 1.57, + "close": 1.608, + "volume": 12891000.0 + }, + { + "time": 1317340800, + "open": 1.6533, + "high": 1.6593, + "low": 1.566, + "close": 1.6253, + "volume": 19627500.0 + }, + { + "time": 1317600000, + "open": 1.6127, + "high": 1.6667, + "low": 1.55, + "close": 1.582, + "volume": 15189000.0 + }, + { + "time": 1317686400, + "open": 1.5493, + "high": 1.6213, + "low": 1.5287, + "close": 1.5773, + "volume": 17628000.0 + }, + { + "time": 1317772800, + "open": 1.5967, + "high": 1.7227, + "low": 1.5567, + "close": 1.692, + "volume": 17782500.0 + }, + { + "time": 1317859200, + "open": 1.6913, + "high": 1.84, + "low": 1.668, + "close": 1.7973, + "volume": 24651000.0 + }, + { + "time": 1317945600, + "open": 1.7447, + "high": 1.84, + "low": 1.7367, + "close": 1.7993, + "volume": 19497000.0 + }, + { + "time": 1318204800, + "open": 1.816, + "high": 1.8787, + "low": 1.8, + "close": 1.8587, + "volume": 12903000.0 + }, + { + "time": 1318291200, + "open": 1.834, + "high": 1.8513, + "low": 1.8, + "close": 1.8, + "volume": 8533500.0 + }, + { + "time": 1318377600, + "open": 1.8427, + "high": 1.8667, + "low": 1.8133, + "close": 1.8533, + "volume": 16698000.0 + }, + { + "time": 1318464000, + "open": 1.8353, + "high": 1.898, + "low": 1.8293, + "close": 1.8327, + "volume": 15391500.0 + }, + { + "time": 1318550400, + "open": 1.88, + "high": 1.9033, + "low": 1.8173, + "close": 1.87, + "volume": 20578500.0 + }, + { + "time": 1318809600, + "open": 1.8727, + "high": 1.8733, + "low": 1.8173, + "close": 1.828, + "volume": 11227500.0 + }, + { + "time": 1318896000, + "open": 1.82, + "high": 1.8953, + "low": 1.7807, + "close": 1.89, + "volume": 14308500.0 + }, + { + "time": 1318982400, + "open": 1.8667, + "high": 1.872, + "low": 1.82, + "close": 1.838, + "volume": 11691000.0 + }, + { + "time": 1319068800, + "open": 1.8333, + "high": 1.8333, + "low": 1.8, + "close": 1.8133, + "volume": 14899500.0 + }, + { + "time": 1319155200, + "open": 1.718, + "high": 1.8867, + "low": 1.718, + "close": 1.8687, + "volume": 14001000.0 + }, + { + "time": 1319414400, + "open": 1.8593, + "high": 1.926, + "low": 1.85, + "close": 1.904, + "volume": 13860000.0 + }, + { + "time": 1319500800, + "open": 1.882, + "high": 1.924, + "low": 1.8533, + "close": 1.9033, + "volume": 9043500.0 + }, + { + "time": 1319587200, + "open": 1.882, + "high": 1.8913, + "low": 1.8267, + "close": 1.8653, + "volume": 7510500.0 + }, + { + "time": 1319673600, + "open": 1.892, + "high": 1.9333, + "low": 1.8653, + "close": 1.9333, + "volume": 12655500.0 + }, + { + "time": 1319760000, + "open": 1.9473, + "high": 2.0167, + "low": 1.8673, + "close": 2.0167, + "volume": 18213000.0 + }, + { + "time": 1320019200, + "open": 1.9667, + "high": 1.9673, + "low": 1.9167, + "close": 1.958, + "volume": 16635000.0 + }, + { + "time": 1320105600, + "open": 1.9167, + "high": 1.958, + "low": 1.8667, + "close": 1.9033, + "volume": 9394500.0 + }, + { + "time": 1320192000, + "open": 1.948, + "high": 2.0553, + "low": 1.8833, + "close": 2.0167, + "volume": 12871500.0 + }, + { + "time": 1320278400, + "open": 1.9993, + "high": 2.1667, + "low": 1.9687, + "close": 2.1473, + "volume": 36706500.0 + }, + { + "time": 1320364800, + "open": 2.1167, + "high": 2.164, + "low": 2.034, + "close": 2.1533, + "volume": 43872000.0 + }, + { + "time": 1320624000, + "open": 2.1367, + "high": 2.1487, + "low": 2.05, + "close": 2.09, + "volume": 18619500.0 + }, + { + "time": 1320710400, + "open": 2.0867, + "high": 2.1333, + "low": 2.048, + "close": 2.0947, + "volume": 15342000.0 + }, + { + "time": 1320796800, + "open": 2.08, + "high": 2.0993, + "low": 2.02, + "close": 2.0567, + "volume": 14122500.0 + }, + { + "time": 1320883200, + "open": 2.0747, + "high": 2.1, + "low": 2.0433, + "close": 2.074, + "volume": 11065500.0 + }, + { + "time": 1320969600, + "open": 2.16, + "high": 2.3, + "low": 2.038, + "close": 2.2667, + "volume": 56487000.0 + }, + { + "time": 1321228800, + "open": 2.2347, + "high": 2.2427, + "low": 2.1747, + "close": 2.214, + "volume": 18837000.0 + }, + { + "time": 1321315200, + "open": 2.2, + "high": 2.2933, + "low": 2.182, + "close": 2.2547, + "volume": 13186500.0 + }, + { + "time": 1321401600, + "open": 2.2533, + "high": 2.3333, + "low": 2.2267, + "close": 2.318, + "volume": 26086500.0 + }, + { + "time": 1321488000, + "open": 2.318, + "high": 2.3267, + "low": 2.2127, + "close": 2.2453, + "volume": 20025000.0 + }, + { + "time": 1321574400, + "open": 2.2667, + "high": 2.274, + "low": 2.1633, + "close": 2.1633, + "volume": 13359000.0 + }, + { + "time": 1321833600, + "open": 2.1733, + "high": 2.1733, + "low": 2.07, + "close": 2.108, + "volume": 15288000.0 + }, + { + "time": 1321920000, + "open": 2.1173, + "high": 2.186, + "low": 2.07, + "close": 2.138, + "volume": 10806000.0 + }, + { + "time": 1322006400, + "open": 2.1173, + "high": 2.1367, + "low": 2.0833, + "close": 2.0967, + "volume": 6690000.0 + }, + { + "time": 1322179200, + "open": 2.092, + "high": 2.1607, + "low": 2.072, + "close": 2.1333, + "volume": 3430500.0 + }, + { + "time": 1322438400, + "open": 2.1267, + "high": 2.2187, + "low": 2.1207, + "close": 2.1707, + "volume": 10074000.0 + }, + { + "time": 1322524800, + "open": 2.1707, + "high": 2.2047, + "low": 2.1087, + "close": 2.1707, + "volume": 8560500.0 + }, + { + "time": 1322611200, + "open": 2.1333, + "high": 2.1953, + "low": 2.1333, + "close": 2.182, + "volume": 11122500.0 + }, + { + "time": 1322697600, + "open": 2.1713, + "high": 2.266, + "low": 2.132, + "close": 2.194, + "volume": 14413500.0 + }, + { + "time": 1322784000, + "open": 2.1773, + "high": 2.246, + "low": 2.16, + "close": 2.2053, + "volume": 10338000.0 + }, + { + "time": 1323043200, + "open": 2.236, + "high": 2.3333, + "low": 2.2287, + "close": 2.294, + "volume": 15996000.0 + }, + { + "time": 1323129600, + "open": 2.28, + "high": 2.332, + "low": 2.2687, + "close": 2.3173, + "volume": 14083500.0 + }, + { + "time": 1323216000, + "open": 2.3107, + "high": 2.326, + "low": 2.2533, + "close": 2.2793, + "volume": 9607500.0 + }, + { + "time": 1323302400, + "open": 2.236, + "high": 2.236, + "low": 1.974, + "close": 2.0633, + "volume": 48607500.0 + }, + { + "time": 1323388800, + "open": 2.0867, + "high": 2.09, + "low": 2.0187, + "close": 2.07, + "volume": 18294000.0 + }, + { + "time": 1323648000, + "open": 2.03, + "high": 2.0413, + "low": 2.0013, + "close": 2.0273, + "volume": 11262000.0 + }, + { + "time": 1323734400, + "open": 2.0353, + "high": 2.062, + "low": 1.9273, + "close": 2.0273, + "volume": 14616000.0 + }, + { + "time": 1323820800, + "open": 1.9667, + "high": 1.9787, + "low": 1.8667, + "close": 1.9, + "volume": 17221500.0 + }, + { + "time": 1323907200, + "open": 1.9073, + "high": 1.9447, + "low": 1.8747, + "close": 1.908, + "volume": 10383000.0 + }, + { + "time": 1323993600, + "open": 2.0627, + "high": 2.0627, + "low": 1.8653, + "close": 1.8667, + "volume": 14853000.0 + }, + { + "time": 1324252800, + "open": 1.872, + "high": 1.9, + "low": 1.8247, + "close": 1.85, + "volume": 14272500.0 + }, + { + "time": 1324339200, + "open": 1.8667, + "high": 1.8967, + "low": 1.8467, + "close": 1.888, + "volume": 12039000.0 + }, + { + "time": 1324425600, + "open": 1.88, + "high": 1.88, + "low": 1.7353, + "close": 1.8667, + "volume": 25294500.0 + }, + { + "time": 1324512000, + "open": 1.8327, + "high": 1.87, + "low": 1.8, + "close": 1.866, + "volume": 14973000.0 + }, + { + "time": 1324598400, + "open": 1.8653, + "high": 1.8667, + "low": 1.8347, + "close": 1.8633, + "volume": 8787000.0 + }, + { + "time": 1324944000, + "open": 1.86, + "high": 1.918, + "low": 1.8367, + "close": 1.86, + "volume": 10927500.0 + }, + { + "time": 1325030400, + "open": 1.9267, + "high": 1.9493, + "low": 1.8693, + "close": 1.9047, + "volume": 8535000.0 + }, + { + "time": 1325116800, + "open": 1.906, + "high": 1.956, + "low": 1.9007, + "close": 1.9007, + "volume": 7056000.0 + }, + { + "time": 1325203200, + "open": 1.8993, + "high": 1.932, + "low": 1.8833, + "close": 1.904, + "volume": 4962000.0 + }, + { + "time": 1325548800, + "open": 1.9233, + "high": 1.9667, + "low": 1.8433, + "close": 1.872, + "volume": 13644000.0 + }, + { + "time": 1325635200, + "open": 1.9053, + "high": 1.9113, + "low": 1.8333, + "close": 1.8473, + "volume": 9174000.0 + }, + { + "time": 1325721600, + "open": 1.8507, + "high": 1.862, + "low": 1.79, + "close": 1.808, + "volume": 14919000.0 + }, + { + "time": 1325808000, + "open": 1.814, + "high": 1.8527, + "low": 1.7607, + "close": 1.808, + "volume": 14559000.0 + }, + { + "time": 1326067200, + "open": 1.8, + "high": 1.8327, + "low": 1.7413, + "close": 1.8127, + "volume": 13207500.0 + }, + { + "time": 1326153600, + "open": 1.8293, + "high": 1.8507, + "low": 1.8167, + "close": 1.85, + "volume": 9924000.0 + }, + { + "time": 1326240000, + "open": 1.8587, + "high": 1.9113, + "low": 1.82, + "close": 1.9113, + "volume": 9738000.0 + }, + { + "time": 1326326400, + "open": 1.8987, + "high": 1.908, + "low": 1.8533, + "close": 1.8833, + "volume": 9886500.0 + }, + { + "time": 1326412800, + "open": 1.8933, + "high": 1.9, + "low": 1.5093, + "close": 1.6373, + "volume": 80587500.0 + }, + { + "time": 1326758400, + "open": 1.7033, + "high": 1.8227, + "low": 1.6767, + "close": 1.7667, + "volume": 68454000.0 + }, + { + "time": 1326844800, + "open": 1.7667, + "high": 1.7993, + "low": 1.75, + "close": 1.7873, + "volume": 17664000.0 + }, + { + "time": 1326931200, + "open": 1.8, + "high": 1.8493, + "low": 1.774, + "close": 1.7787, + "volume": 18375000.0 + }, + { + "time": 1327017600, + "open": 1.7933, + "high": 1.8, + "low": 1.7507, + "close": 1.7507, + "volume": 9475500.0 + }, + { + "time": 1327276800, + "open": 1.79, + "high": 1.814, + "low": 1.7733, + "close": 1.788, + "volume": 8737500.0 + }, + { + "time": 1327363200, + "open": 1.7753, + "high": 1.8453, + "low": 1.7627, + "close": 1.8133, + "volume": 12381000.0 + }, + { + "time": 1327449600, + "open": 1.8133, + "high": 1.8673, + "low": 1.8033, + "close": 1.8647, + "volume": 8737500.0 + }, + { + "time": 1327536000, + "open": 1.8667, + "high": 1.972, + "low": 1.8647, + "close": 1.8647, + "volume": 17626500.0 + }, + { + "time": 1327622400, + "open": 1.9, + "high": 1.9813, + "low": 1.9, + "close": 1.9487, + "volume": 10332000.0 + }, + { + "time": 1327881600, + "open": 1.966, + "high": 1.974, + "low": 1.902, + "close": 1.974, + "volume": 10779000.0 + }, + { + "time": 1327968000, + "open": 2.0, + "high": 2.0333, + "low": 1.9247, + "close": 1.9387, + "volume": 13840500.0 + }, + { + "time": 1328054400, + "open": 1.9333, + "high": 1.98, + "low": 1.9207, + "close": 1.964, + "volume": 7369500.0 + }, + { + "time": 1328140800, + "open": 1.9813, + "high": 2.0587, + "low": 1.9727, + "close": 1.9727, + "volume": 11790000.0 + }, + { + "time": 1328227200, + "open": 2.032, + "high": 2.0887, + "low": 2.0167, + "close": 2.074, + "volume": 11242500.0 + }, + { + "time": 1328486400, + "open": 2.0667, + "high": 2.1267, + "low": 2.066, + "close": 2.12, + "volume": 9498000.0 + }, + { + "time": 1328572800, + "open": 2.1167, + "high": 2.142, + "low": 2.0547, + "close": 2.1067, + "volume": 14199000.0 + }, + { + "time": 1328659200, + "open": 2.1333, + "high": 2.134, + "low": 2.086, + "close": 2.1207, + "volume": 9072000.0 + }, + { + "time": 1328745600, + "open": 2.1287, + "high": 2.2467, + "low": 2.0953, + "close": 2.1853, + "volume": 17317500.0 + }, + { + "time": 1328832000, + "open": 2.158, + "high": 2.1613, + "low": 1.9893, + "close": 2.0733, + "volume": 27693000.0 + }, + { + "time": 1329091200, + "open": 2.0907, + "high": 2.1373, + "low": 2.06, + "close": 2.094, + "volume": 16954500.0 + }, + { + "time": 1329177600, + "open": 2.13, + "high": 2.2633, + "low": 2.0933, + "close": 2.2633, + "volume": 26682000.0 + }, + { + "time": 1329264000, + "open": 2.2667, + "high": 2.3953, + "low": 2.1513, + "close": 2.29, + "volume": 40675500.0 + }, + { + "time": 1329350400, + "open": 2.2667, + "high": 2.3007, + "low": 2.1693, + "close": 2.3007, + "volume": 32883000.0 + }, + { + "time": 1329436800, + "open": 2.3253, + "high": 2.334, + "low": 2.2333, + "close": 2.316, + "volume": 20112000.0 + }, + { + "time": 1329782400, + "open": 2.32, + "high": 2.3433, + "low": 2.254, + "close": 2.3033, + "volume": 16618500.0 + }, + { + "time": 1329868800, + "open": 2.3, + "high": 2.3147, + "low": 2.1667, + "close": 2.27, + "volume": 23985000.0 + }, + { + "time": 1329955200, + "open": 2.266, + "high": 2.3313, + "low": 2.2373, + "close": 2.3013, + "volume": 11665500.0 + }, + { + "time": 1330041600, + "open": 2.2933, + "high": 2.3013, + "low": 2.218, + "close": 2.2533, + "volume": 14241000.0 + }, + { + "time": 1330300800, + "open": 2.244, + "high": 2.2667, + "low": 2.2, + "close": 2.2413, + "volume": 8934000.0 + }, + { + "time": 1330387200, + "open": 2.2427, + "high": 2.296, + "low": 2.2113, + "close": 2.2607, + "volume": 9070500.0 + }, + { + "time": 1330473600, + "open": 2.254, + "high": 2.2747, + "low": 2.2087, + "close": 2.2087, + "volume": 7635000.0 + }, + { + "time": 1330560000, + "open": 2.2373, + "high": 2.3, + "low": 2.22, + "close": 2.294, + "volume": 8875500.0 + }, + { + "time": 1330646400, + "open": 2.2933, + "high": 2.3, + "low": 2.2473, + "close": 2.2727, + "volume": 7927500.0 + }, + { + "time": 1330905600, + "open": 2.2733, + "high": 2.2933, + "low": 2.2307, + "close": 2.2513, + "volume": 6894000.0 + }, + { + "time": 1330992000, + "open": 2.2267, + "high": 2.2267, + "low": 2.1747, + "close": 2.1987, + "volume": 7669500.0 + }, + { + "time": 1331078400, + "open": 2.208, + "high": 2.2213, + "low": 2.194, + "close": 2.208, + "volume": 5398500.0 + }, + { + "time": 1331164800, + "open": 2.2073, + "high": 2.2327, + "low": 2.2027, + "close": 2.2047, + "volume": 8953500.0 + }, + { + "time": 1331251200, + "open": 2.2133, + "high": 2.354, + "low": 2.2133, + "close": 2.3307, + "volume": 22969500.0 + }, + { + "time": 1331510400, + "open": 2.3127, + "high": 2.4193, + "low": 2.3067, + "close": 2.4067, + "volume": 28791000.0 + }, + { + "time": 1331596800, + "open": 2.4007, + "high": 2.4393, + "low": 2.3667, + "close": 2.3793, + "volume": 14412000.0 + }, + { + "time": 1331683200, + "open": 2.4, + "high": 2.4007, + "low": 2.32, + "close": 2.3553, + "volume": 12595500.0 + }, + { + "time": 1331769600, + "open": 2.352, + "high": 2.3653, + "low": 2.3187, + "close": 2.3387, + "volume": 8461500.0 + }, + { + "time": 1331856000, + "open": 2.3287, + "high": 2.3927, + "low": 2.322, + "close": 2.3533, + "volume": 10819500.0 + }, + { + "time": 1332115200, + "open": 2.3507, + "high": 2.3547, + "low": 2.3027, + "close": 2.332, + "volume": 14856000.0 + }, + { + "time": 1332201600, + "open": 2.332, + "high": 2.3467, + "low": 2.3047, + "close": 2.3307, + "volume": 8392500.0 + }, + { + "time": 1332288000, + "open": 2.3293, + "high": 2.354, + "low": 2.3067, + "close": 2.336, + "volume": 8650500.0 + }, + { + "time": 1332374400, + "open": 2.3467, + "high": 2.3467, + "low": 2.2867, + "close": 2.3173, + "volume": 7563000.0 + }, + { + "time": 1332460800, + "open": 2.2833, + "high": 2.3087, + "low": 2.21, + "close": 2.29, + "volume": 16336500.0 + }, + { + "time": 1332720000, + "open": 2.3333, + "high": 2.5393, + "low": 2.3333, + "close": 2.4833, + "volume": 46437000.0 + }, + { + "time": 1332806400, + "open": 2.4833, + "high": 2.6633, + "low": 2.4687, + "close": 2.588, + "volume": 36403500.0 + }, + { + "time": 1332892800, + "open": 2.5547, + "high": 2.5627, + "low": 2.474, + "close": 2.506, + "volume": 13975500.0 + }, + { + "time": 1332979200, + "open": 2.4707, + "high": 2.546, + "low": 2.4667, + "close": 2.4887, + "volume": 10455000.0 + }, + { + "time": 1333065600, + "open": 2.5013, + "high": 2.5293, + "low": 2.4453, + "close": 2.48, + "volume": 11152500.0 + }, + { + "time": 1333324800, + "open": 2.4733, + "high": 2.5313, + "low": 2.4353, + "close": 2.44, + "volume": 13074000.0 + }, + { + "time": 1333411200, + "open": 2.4433, + "high": 2.5647, + "low": 2.396, + "close": 2.4, + "volume": 16107000.0 + }, + { + "time": 1333497600, + "open": 2.41, + "high": 2.41, + "low": 2.3127, + "close": 2.33, + "volume": 66337500.0 + }, + { + "time": 1333584000, + "open": 2.3507, + "high": 2.3627, + "low": 2.2927, + "close": 2.2927, + "volume": 21292500.0 + }, + { + "time": 1333929600, + "open": 2.2733, + "high": 2.308, + "low": 2.2, + "close": 2.2, + "volume": 24487500.0 + }, + { + "time": 1334016000, + "open": 2.2127, + "high": 2.2567, + "low": 2.14, + "close": 2.1653, + "volume": 25423500.0 + }, + { + "time": 1334102400, + "open": 2.1953, + "high": 2.2193, + "low": 2.134, + "close": 2.2007, + "volume": 16089000.0 + }, + { + "time": 1334188800, + "open": 2.2333, + "high": 2.2987, + "low": 2.1947, + "close": 2.2387, + "volume": 14713500.0 + }, + { + "time": 1334275200, + "open": 2.2267, + "high": 2.2693, + "low": 2.19, + "close": 2.2533, + "volume": 9622500.0 + }, + { + "time": 1334534400, + "open": 2.2273, + "high": 2.2467, + "low": 2.1393, + "close": 2.1633, + "volume": 15481500.0 + }, + { + "time": 1334620800, + "open": 2.15, + "high": 2.2047, + "low": 2.136, + "close": 2.1493, + "volume": 16413000.0 + }, + { + "time": 1334707200, + "open": 2.1407, + "high": 2.188, + "low": 2.102, + "close": 2.1773, + "volume": 12088500.0 + }, + { + "time": 1334793600, + "open": 2.1087, + "high": 2.2287, + "low": 2.1087, + "close": 2.198, + "volume": 11424000.0 + }, + { + "time": 1334880000, + "open": 2.2433, + "high": 2.2567, + "low": 2.196, + "close": 2.2107, + "volume": 12180000.0 + }, + { + "time": 1335139200, + "open": 2.2113, + "high": 2.2113, + "low": 2.114, + "close": 2.1293, + "volume": 13161000.0 + }, + { + "time": 1335225600, + "open": 2.1493, + "high": 2.1493, + "low": 2.0667, + "close": 2.1233, + "volume": 9708000.0 + }, + { + "time": 1335312000, + "open": 2.1267, + "high": 2.1993, + "low": 2.1267, + "close": 2.194, + "volume": 10542000.0 + }, + { + "time": 1335398400, + "open": 2.194, + "high": 2.2367, + "low": 2.194, + "close": 2.2367, + "volume": 6229500.0 + }, + { + "time": 1335484800, + "open": 2.3013, + "high": 2.3013, + "low": 2.194, + "close": 2.2227, + "volume": 8539500.0 + }, + { + "time": 1335744000, + "open": 2.218, + "high": 2.224, + "low": 2.172, + "close": 2.22, + "volume": 6088500.0 + }, + { + "time": 1335830400, + "open": 2.216, + "high": 2.2807, + "low": 2.2087, + "close": 2.252, + "volume": 9690000.0 + }, + { + "time": 1335916800, + "open": 2.2233, + "high": 2.2927, + "low": 2.2233, + "close": 2.2627, + "volume": 7291500.0 + }, + { + "time": 1336003200, + "open": 2.2747, + "high": 2.2747, + "low": 2.14, + "close": 2.14, + "volume": 12472500.0 + }, + { + "time": 1336089600, + "open": 2.1573, + "high": 2.164, + "low": 2.0933, + "close": 2.12, + "volume": 18291000.0 + }, + { + "time": 1336348800, + "open": 2.1233, + "high": 2.172, + "low": 2.1073, + "close": 2.1647, + "volume": 16948500.0 + }, + { + "time": 1336435200, + "open": 2.1647, + "high": 2.186, + "low": 1.958, + "close": 2.038, + "volume": 45520500.0 + }, + { + "time": 1336521600, + "open": 2.004, + "high": 2.1933, + "low": 1.9667, + "close": 2.1173, + "volume": 28653000.0 + }, + { + "time": 1336608000, + "open": 2.12, + "high": 2.312, + "low": 2.1173, + "close": 2.1973, + "volume": 82389000.0 + }, + { + "time": 1336694400, + "open": 2.1867, + "high": 2.2293, + "low": 2.144, + "close": 2.18, + "volume": 18039000.0 + }, + { + "time": 1336953600, + "open": 2.1333, + "high": 2.142, + "low": 2.0007, + "close": 2.0107, + "volume": 20400000.0 + }, + { + "time": 1337040000, + "open": 2.024, + "high": 2.064, + "low": 1.948, + "close": 1.9827, + "volume": 22992000.0 + }, + { + "time": 1337126400, + "open": 1.9933, + "high": 2.012, + "low": 1.9253, + "close": 1.9627, + "volume": 18601500.0 + }, + { + "time": 1337212800, + "open": 1.9613, + "high": 1.986, + "low": 1.8827, + "close": 1.8987, + "volume": 16810500.0 + }, + { + "time": 1337299200, + "open": 1.8933, + "high": 1.8973, + "low": 1.7887, + "close": 1.8487, + "volume": 22939500.0 + }, + { + "time": 1337558400, + "open": 1.856, + "high": 1.9507, + "low": 1.808, + "close": 1.918, + "volume": 21505500.0 + }, + { + "time": 1337644800, + "open": 1.974, + "high": 2.0893, + "low": 1.966, + "close": 2.0527, + "volume": 35101500.0 + }, + { + "time": 1337731200, + "open": 2.0527, + "high": 2.07, + "low": 1.9667, + "close": 2.014, + "volume": 18036000.0 + }, + { + "time": 1337817600, + "open": 2.0833, + "high": 2.0833, + "low": 1.9793, + "close": 2.0053, + "volume": 15760500.0 + }, + { + "time": 1337904000, + "open": 2.0267, + "high": 2.0273, + "low": 1.9467, + "close": 1.9753, + "volume": 11173500.0 + }, + { + "time": 1338249600, + "open": 2.0007, + "high": 2.1287, + "low": 2.0007, + "close": 2.1127, + "volume": 23724000.0 + }, + { + "time": 1338336000, + "open": 2.072, + "high": 2.0947, + "low": 2.016, + "close": 2.0267, + "volume": 19323000.0 + }, + { + "time": 1338422400, + "open": 2.0493, + "high": 2.05, + "low": 1.9167, + "close": 1.9913, + "volume": 15906000.0 + }, + { + "time": 1338508800, + "open": 1.94, + "high": 1.9467, + "low": 1.8507, + "close": 1.886, + "volume": 13029000.0 + }, + { + "time": 1338768000, + "open": 1.8533, + "high": 1.894, + "low": 1.8073, + "close": 1.8567, + "volume": 15243000.0 + }, + { + "time": 1338854400, + "open": 1.8607, + "high": 1.8927, + "low": 1.8373, + "close": 1.8607, + "volume": 9331500.0 + }, + { + "time": 1338940800, + "open": 1.872, + "high": 1.9887, + "low": 1.872, + "close": 1.9887, + "volume": 13300500.0 + }, + { + "time": 1339027200, + "open": 1.9993, + "high": 2.0, + "low": 1.9233, + "close": 1.9293, + "volume": 7242000.0 + }, + { + "time": 1339113600, + "open": 1.9267, + "high": 2.0127, + "low": 1.8767, + "close": 2.0053, + "volume": 12514500.0 + }, + { + "time": 1339372800, + "open": 2.0547, + "high": 2.0667, + "low": 1.9227, + "close": 1.9227, + "volume": 9043500.0 + }, + { + "time": 1339459200, + "open": 1.9413, + "high": 1.9893, + "low": 1.9207, + "close": 1.952, + "volume": 8221500.0 + }, + { + "time": 1339545600, + "open": 1.97, + "high": 2.0427, + "low": 1.9647, + "close": 1.9847, + "volume": 12510000.0 + }, + { + "time": 1339632000, + "open": 2.014, + "high": 2.0433, + "low": 1.908, + "close": 1.9593, + "volume": 12885000.0 + }, + { + "time": 1339718400, + "open": 1.9593, + "high": 1.9967, + "low": 1.9207, + "close": 1.988, + "volume": 8910000.0 + }, + { + "time": 1339977600, + "open": 2.0167, + "high": 2.1553, + "low": 1.9667, + "close": 2.004, + "volume": 17913000.0 + }, + { + "time": 1340064000, + "open": 2.12, + "high": 2.1773, + "low": 2.1, + "close": 2.1507, + "volume": 13380000.0 + }, + { + "time": 1340150400, + "open": 2.1807, + "high": 2.3, + "low": 2.1807, + "close": 2.252, + "volume": 50334000.0 + }, + { + "time": 1340236800, + "open": 2.24, + "high": 2.2853, + "low": 2.1227, + "close": 2.1507, + "volume": 25275000.0 + }, + { + "time": 1340323200, + "open": 2.1733, + "high": 2.2653, + "low": 2.1527, + "close": 2.252, + "volume": 44323500.0 + }, + { + "time": 1340582400, + "open": 2.2927, + "high": 2.2927, + "low": 2.1207, + "close": 2.1267, + "volume": 22111500.0 + }, + { + "time": 1340668800, + "open": 2.138, + "high": 2.1567, + "low": 2.092, + "close": 2.0933, + "volume": 37164000.0 + }, + { + "time": 1340755200, + "open": 2.1307, + "high": 2.1633, + "low": 2.1047, + "close": 2.1307, + "volume": 14725500.0 + }, + { + "time": 1340841600, + "open": 2.1413, + "high": 2.1413, + "low": 2.0413, + "close": 2.094, + "volume": 13173000.0 + }, + { + "time": 1340928000, + "open": 2.1213, + "high": 2.262, + "low": 2.0667, + "close": 2.086, + "volume": 15910500.0 + }, + { + "time": 1341187200, + "open": 2.086, + "high": 2.12, + "low": 2.0127, + "close": 2.0267, + "volume": 19246500.0 + }, + { + "time": 1341273600, + "open": 2.0333, + "high": 2.0667, + "low": 2.0267, + "close": 2.0393, + "volume": 13993500.0 + }, + { + "time": 1341446400, + "open": 2.0733, + "high": 2.1113, + "low": 2.0467, + "close": 2.0833, + "volume": 18108000.0 + }, + { + "time": 1341532800, + "open": 2.088, + "high": 2.1153, + "low": 2.0473, + "close": 2.0473, + "volume": 10950000.0 + }, + { + "time": 1341792000, + "open": 2.0627, + "high": 2.122, + "low": 2.0447, + "close": 2.0993, + "volume": 13303500.0 + }, + { + "time": 1341878400, + "open": 2.094, + "high": 2.1653, + "low": 2.0593, + "close": 2.08, + "volume": 10500000.0 + }, + { + "time": 1341964800, + "open": 2.0907, + "high": 2.112, + "low": 2.0673, + "close": 2.0887, + "volume": 8515500.0 + }, + { + "time": 1342051200, + "open": 2.086, + "high": 2.2007, + "low": 2.0533, + "close": 2.18, + "volume": 15897000.0 + }, + { + "time": 1342137600, + "open": 2.1907, + "high": 2.2933, + "low": 2.18, + "close": 2.2667, + "volume": 19225500.0 + }, + { + "time": 1342396800, + "open": 2.2667, + "high": 2.4, + "low": 2.26, + "close": 2.3973, + "volume": 25431000.0 + }, + { + "time": 1342483200, + "open": 2.354, + "high": 2.3827, + "low": 2.1587, + "close": 2.218, + "volume": 37756500.0 + }, + { + "time": 1342569600, + "open": 2.1967, + "high": 2.2447, + "low": 2.0553, + "close": 2.1333, + "volume": 42406500.0 + }, + { + "time": 1342656000, + "open": 2.1333, + "high": 2.21, + "low": 2.1333, + "close": 2.1433, + "volume": 21282000.0 + }, + { + "time": 1342742400, + "open": 2.1267, + "high": 2.158, + "low": 2.0833, + "close": 2.1207, + "volume": 23131500.0 + }, + { + "time": 1343001600, + "open": 2.1227, + "high": 2.1227, + "low": 2.0413, + "close": 2.1193, + "volume": 20463000.0 + }, + { + "time": 1343088000, + "open": 2.0467, + "high": 2.0693, + "low": 1.9747, + "close": 2.0073, + "volume": 21778500.0 + }, + { + "time": 1343174400, + "open": 1.9733, + "high": 2.0167, + "low": 1.8353, + "close": 1.8827, + "volume": 37428000.0 + }, + { + "time": 1343260800, + "open": 1.932, + "high": 2.004, + "low": 1.8427, + "close": 1.8833, + "volume": 33084000.0 + }, + { + "time": 1343347200, + "open": 1.9107, + "high": 1.9773, + "low": 1.8733, + "close": 1.9673, + "volume": 24735000.0 + }, + { + "time": 1343606400, + "open": 1.9713, + "high": 2.0167, + "low": 1.814, + "close": 1.8367, + "volume": 29761500.0 + }, + { + "time": 1343692800, + "open": 1.8367, + "high": 1.8647, + "low": 1.8233, + "close": 1.8527, + "volume": 20505000.0 + }, + { + "time": 1343779200, + "open": 1.8567, + "high": 1.866, + "low": 1.7327, + "close": 1.7327, + "volume": 21585000.0 + }, + { + "time": 1343865600, + "open": 1.7507, + "high": 1.79, + "low": 1.7013, + "close": 1.74, + "volume": 19086000.0 + }, + { + "time": 1343952000, + "open": 1.7553, + "high": 1.8367, + "low": 1.74, + "close": 1.74, + "volume": 17092500.0 + }, + { + "time": 1344211200, + "open": 1.8227, + "high": 1.9133, + "low": 1.8227, + "close": 1.8873, + "volume": 17017500.0 + }, + { + "time": 1344297600, + "open": 1.8893, + "high": 2.06, + "low": 1.8847, + "close": 2.0167, + "volume": 28341000.0 + }, + { + "time": 1344384000, + "open": 2.0493, + "high": 2.0527, + "low": 1.906, + "close": 1.9393, + "volume": 17298000.0 + }, + { + "time": 1344470400, + "open": 1.9633, + "high": 2.0, + "low": 1.9393, + "close": 1.9533, + "volume": 9636000.0 + }, + { + "time": 1344556800, + "open": 1.9533, + "high": 1.996, + "low": 1.9533, + "close": 1.996, + "volume": 10066500.0 + }, + { + "time": 1344816000, + "open": 1.9827, + "high": 2.0867, + "low": 1.94, + "close": 2.0633, + "volume": 12691500.0 + }, + { + "time": 1344902400, + "open": 2.0667, + "high": 2.078, + "low": 1.9467, + "close": 1.9467, + "volume": 11076000.0 + }, + { + "time": 1344988800, + "open": 1.9593, + "high": 1.98, + "low": 1.9207, + "close": 1.96, + "volume": 7506000.0 + }, + { + "time": 1345075200, + "open": 1.9687, + "high": 2.026, + "low": 1.96, + "close": 1.96, + "volume": 8028000.0 + }, + { + "time": 1345161600, + "open": 2.0, + "high": 2.0473, + "low": 1.9987, + "close": 2.0, + "volume": 7033500.0 + }, + { + "time": 1345420800, + "open": 2.01, + "high": 2.026, + "low": 1.94, + "close": 1.982, + "volume": 13743000.0 + }, + { + "time": 1345507200, + "open": 1.9727, + "high": 2.0, + "low": 1.9333, + "close": 1.9407, + "volume": 10840500.0 + }, + { + "time": 1345593600, + "open": 1.9453, + "high": 2.0167, + "low": 1.93, + "close": 2.0167, + "volume": 10396500.0 + }, + { + "time": 1345680000, + "open": 2.0, + "high": 2.0567, + "low": 1.9767, + "close": 2.034, + "volume": 21502500.0 + }, + { + "time": 1345766400, + "open": 2.018, + "high": 2.0487, + "low": 1.9607, + "close": 1.9727, + "volume": 20377500.0 + }, + { + "time": 1346025600, + "open": 1.972, + "high": 1.98, + "low": 1.878, + "close": 1.8833, + "volume": 18559500.0 + }, + { + "time": 1346112000, + "open": 1.8947, + "high": 1.9587, + "low": 1.8667, + "close": 1.9127, + "volume": 20662500.0 + }, + { + "time": 1346198400, + "open": 1.918, + "high": 1.92, + "low": 1.868, + "close": 1.894, + "volume": 12213000.0 + }, + { + "time": 1346284800, + "open": 1.8673, + "high": 1.916, + "low": 1.8673, + "close": 1.894, + "volume": 9609000.0 + }, + { + "time": 1346371200, + "open": 1.8993, + "high": 1.9227, + "low": 1.88, + "close": 1.9007, + "volume": 7690500.0 + }, + { + "time": 1346716800, + "open": 1.9013, + "high": 1.9327, + "low": 1.86, + "close": 1.876, + "volume": 10840500.0 + }, + { + "time": 1346803200, + "open": 1.8767, + "high": 1.9, + "low": 1.854, + "close": 1.8627, + "volume": 9276000.0 + }, + { + "time": 1346889600, + "open": 1.8673, + "high": 1.9267, + "low": 1.86, + "close": 1.9033, + "volume": 12036000.0 + }, + { + "time": 1346976000, + "open": 1.8933, + "high": 1.9713, + "low": 1.8933, + "close": 1.9567, + "volume": 13315500.0 + }, + { + "time": 1347235200, + "open": 1.9467, + "high": 1.9667, + "low": 1.82, + "close": 1.8233, + "volume": 20403000.0 + }, + { + "time": 1347321600, + "open": 1.874, + "high": 1.8773, + "low": 1.8267, + "close": 1.85, + "volume": 12136500.0 + }, + { + "time": 1347408000, + "open": 1.86, + "high": 1.9053, + "low": 1.8533, + "close": 1.9053, + "volume": 16017000.0 + }, + { + "time": 1347494400, + "open": 1.9053, + "high": 1.9773, + "low": 1.88, + "close": 1.9493, + "volume": 20878500.0 + }, + { + "time": 1347580800, + "open": 1.9667, + "high": 2.0433, + "low": 1.9653, + "close": 2.024, + "volume": 21982500.0 + }, + { + "time": 1347840000, + "open": 2.0453, + "high": 2.2013, + "low": 2.0453, + "close": 2.1667, + "volume": 46476000.0 + }, + { + "time": 1347926400, + "open": 2.134, + "high": 2.1693, + "low": 2.0453, + "close": 2.0893, + "volume": 26220000.0 + }, + { + "time": 1348012800, + "open": 2.09, + "high": 2.116, + "low": 2.0627, + "close": 2.07, + "volume": 15385500.0 + }, + { + "time": 1348099200, + "open": 2.08, + "high": 2.1, + "low": 2.0453, + "close": 2.0613, + "volume": 10585500.0 + }, + { + "time": 1348185600, + "open": 2.06, + "high": 2.1, + "low": 1.9693, + "close": 2.0013, + "volume": 24996000.0 + }, + { + "time": 1348444800, + "open": 2.0, + "high": 2.0687, + "low": 1.96, + "close": 2.044, + "volume": 18555000.0 + }, + { + "time": 1348531200, + "open": 2.0533, + "high": 2.0533, + "low": 1.7133, + "close": 1.8553, + "volume": 78354000.0 + }, + { + "time": 1348617600, + "open": 1.85, + "high": 1.8933, + "low": 1.8, + "close": 1.8427, + "volume": 22567500.0 + }, + { + "time": 1348704000, + "open": 1.85, + "high": 1.9027, + "low": 1.84, + "close": 1.8893, + "volume": 26001000.0 + }, + { + "time": 1348790400, + "open": 1.92, + "high": 1.9927, + "low": 1.8667, + "close": 1.956, + "volume": 64419000.0 + }, + { + "time": 1349049600, + "open": 1.9533, + "high": 1.9927, + "low": 1.9333, + "close": 1.944, + "volume": 12910500.0 + }, + { + "time": 1349136000, + "open": 1.95, + "high": 1.9927, + "low": 1.9333, + "close": 1.9867, + "volume": 10389000.0 + }, + { + "time": 1349222400, + "open": 1.9767, + "high": 2.0, + "low": 1.9493, + "close": 2.0, + "volume": 12870000.0 + }, + { + "time": 1349308800, + "open": 1.9793, + "high": 2.0133, + "low": 1.91, + "close": 1.9567, + "volume": 18454500.0 + }, + { + "time": 1349395200, + "open": 1.9733, + "high": 1.9873, + "low": 1.9067, + "close": 1.9253, + "volume": 12109500.0 + }, + { + "time": 1349654400, + "open": 1.9267, + "high": 1.96, + "low": 1.9073, + "close": 1.9467, + "volume": 13128000.0 + }, + { + "time": 1349740800, + "open": 1.9413, + "high": 1.9413, + "low": 1.8833, + "close": 1.91, + "volume": 17464500.0 + }, + { + "time": 1349827200, + "open": 1.9, + "high": 1.9333, + "low": 1.8673, + "close": 1.9133, + "volume": 7413000.0 + }, + { + "time": 1349913600, + "open": 1.906, + "high": 1.932, + "low": 1.8833, + "close": 1.888, + "volume": 6646500.0 + }, + { + "time": 1350000000, + "open": 1.8953, + "high": 1.9153, + "low": 1.8333, + "close": 1.8433, + "volume": 13588500.0 + }, + { + "time": 1350259200, + "open": 1.8473, + "high": 1.87, + "low": 1.7907, + "close": 1.8067, + "volume": 20388000.0 + }, + { + "time": 1350345600, + "open": 1.8447, + "high": 1.8727, + "low": 1.8227, + "close": 1.8707, + "volume": 7063500.0 + }, + { + "time": 1350432000, + "open": 1.8833, + "high": 1.9227, + "low": 1.8533, + "close": 1.9213, + "volume": 9720000.0 + }, + { + "time": 1350518400, + "open": 1.9327, + "high": 1.9327, + "low": 1.852, + "close": 1.8667, + "volume": 9792000.0 + }, + { + "time": 1350604800, + "open": 1.8527, + "high": 1.88, + "low": 1.82, + "close": 1.8493, + "volume": 10015500.0 + }, + { + "time": 1350864000, + "open": 1.8493, + "high": 1.8667, + "low": 1.824, + "close": 1.866, + "volume": 5101500.0 + }, + { + "time": 1350950400, + "open": 1.8267, + "high": 1.904, + "low": 1.8247, + "close": 1.8833, + "volume": 8620500.0 + }, + { + "time": 1351036800, + "open": 1.9053, + "high": 1.9053, + "low": 1.812, + "close": 1.82, + "volume": 12669000.0 + }, + { + "time": 1351123200, + "open": 1.8573, + "high": 1.8573, + "low": 1.83, + "close": 1.8347, + "volume": 8308500.0 + }, + { + "time": 1351209600, + "open": 1.8333, + "high": 1.8533, + "low": 1.8013, + "close": 1.8253, + "volume": 6726000.0 + }, + { + "time": 1351641600, + "open": 1.8333, + "high": 1.89, + "low": 1.8247, + "close": 1.8753, + "volume": 11193000.0 + }, + { + "time": 1351728000, + "open": 1.8833, + "high": 1.966, + "low": 1.88, + "close": 1.9527, + "volume": 14761500.0 + }, + { + "time": 1351814400, + "open": 1.9513, + "high": 1.97, + "low": 1.9033, + "close": 1.9133, + "volume": 14913000.0 + }, + { + "time": 1352073600, + "open": 1.964, + "high": 2.11, + "low": 1.9553, + "close": 2.1, + "volume": 29164500.0 + }, + { + "time": 1352160000, + "open": 2.1033, + "high": 2.1033, + "low": 1.9967, + "close": 2.0813, + "volume": 34033500.0 + }, + { + "time": 1352246400, + "open": 2.09, + "high": 2.1367, + "low": 2.054, + "close": 2.1033, + "volume": 25089000.0 + }, + { + "time": 1352332800, + "open": 2.0947, + "high": 2.1253, + "low": 2.0627, + "close": 2.0873, + "volume": 18096000.0 + }, + { + "time": 1352419200, + "open": 2.068, + "high": 2.0807, + "low": 1.99, + "close": 2.02, + "volume": 12726000.0 + }, + { + "time": 1352678400, + "open": 2.0193, + "high": 2.1547, + "low": 2.0107, + "close": 2.15, + "volume": 8142000.0 + }, + { + "time": 1352764800, + "open": 2.0987, + "high": 2.1333, + "low": 2.048, + "close": 2.1107, + "volume": 14413500.0 + }, + { + "time": 1352851200, + "open": 2.1307, + "high": 2.1413, + "low": 2.08, + "close": 2.1, + "volume": 12508500.0 + }, + { + "time": 1352937600, + "open": 2.1133, + "high": 2.1133, + "low": 2.0333, + "close": 2.06, + "volume": 13594500.0 + }, + { + "time": 1353024000, + "open": 2.06, + "high": 2.156, + "low": 2.0393, + "close": 2.156, + "volume": 12493500.0 + }, + { + "time": 1353283200, + "open": 2.1333, + "high": 2.2167, + "low": 2.118, + "close": 2.2, + "volume": 19404000.0 + }, + { + "time": 1353369600, + "open": 2.2, + "high": 2.2073, + "low": 2.1273, + "close": 2.2073, + "volume": 13012500.0 + }, + { + "time": 1353456000, + "open": 2.1833, + "high": 2.2313, + "low": 2.1527, + "close": 2.1613, + "volume": 12994500.0 + }, + { + "time": 1353628800, + "open": 2.1733, + "high": 2.1887, + "low": 2.1133, + "close": 2.1413, + "volume": 6234000.0 + }, + { + "time": 1353888000, + "open": 2.1433, + "high": 2.156, + "low": 2.108, + "close": 2.156, + "volume": 6823500.0 + }, + { + "time": 1353974400, + "open": 2.1553, + "high": 2.1773, + "low": 2.1013, + "close": 2.1433, + "volume": 10090500.0 + }, + { + "time": 1354060800, + "open": 2.1533, + "high": 2.286, + "low": 2.1273, + "close": 2.26, + "volume": 22344000.0 + }, + { + "time": 1354147200, + "open": 2.2433, + "high": 2.2667, + "low": 2.1913, + "close": 2.234, + "volume": 15483000.0 + }, + { + "time": 1354233600, + "open": 2.24, + "high": 2.2853, + "low": 2.2007, + "close": 2.2533, + "volume": 20268000.0 + }, + { + "time": 1354492800, + "open": 2.2667, + "high": 2.3333, + "low": 2.2333, + "close": 2.316, + "volume": 26139000.0 + }, + { + "time": 1354579200, + "open": 2.3593, + "high": 2.36, + "low": 2.2367, + "close": 2.2633, + "volume": 18213000.0 + }, + { + "time": 1354665600, + "open": 2.2567, + "high": 2.2793, + "low": 2.2387, + "close": 2.2473, + "volume": 7434000.0 + }, + { + "time": 1354752000, + "open": 2.2667, + "high": 2.32, + "low": 2.2333, + "close": 2.2933, + "volume": 9687000.0 + }, + { + "time": 1354838400, + "open": 2.2667, + "high": 2.2993, + "low": 2.2567, + "close": 2.28, + "volume": 9814500.0 + }, + { + "time": 1355097600, + "open": 2.274, + "high": 2.32, + "low": 2.274, + "close": 2.3047, + "volume": 13413000.0 + }, + { + "time": 1355184000, + "open": 2.3067, + "high": 2.37, + "low": 2.2973, + "close": 2.3667, + "volume": 22396500.0 + }, + { + "time": 1355270400, + "open": 2.3427, + "high": 2.3953, + "low": 2.33, + "close": 2.35, + "volume": 29326500.0 + }, + { + "time": 1355356800, + "open": 2.3487, + "high": 2.3553, + "low": 2.1833, + "close": 2.25, + "volume": 31737000.0 + }, + { + "time": 1355443200, + "open": 2.252, + "high": 2.2933, + "low": 2.2393, + "close": 2.2553, + "volume": 14131500.0 + }, + { + "time": 1355702400, + "open": 2.2667, + "high": 2.3, + "low": 2.25, + "close": 2.2933, + "volume": 12079500.0 + }, + { + "time": 1355788800, + "open": 2.294, + "high": 2.338, + "low": 2.284, + "close": 2.306, + "volume": 23095500.0 + }, + { + "time": 1355875200, + "open": 2.3267, + "high": 2.3507, + "low": 2.3013, + "close": 2.3073, + "volume": 18744000.0 + }, + { + "time": 1355961600, + "open": 2.32, + "high": 2.3207, + "low": 2.27, + "close": 2.2953, + "volume": 13641000.0 + }, + { + "time": 1356048000, + "open": 2.3, + "high": 2.3, + "low": 2.2387, + "close": 2.2667, + "volume": 21853500.0 + }, + { + "time": 1356307200, + "open": 2.2, + "high": 2.29, + "low": 2.2, + "close": 2.2853, + "volume": 5562000.0 + }, + { + "time": 1356480000, + "open": 2.264, + "high": 2.3, + "low": 2.2333, + "close": 2.2333, + "volume": 8796000.0 + }, + { + "time": 1356566400, + "open": 2.234, + "high": 2.2607, + "low": 2.2, + "close": 2.246, + "volume": 8053500.0 + }, + { + "time": 1356652800, + "open": 2.2413, + "high": 2.2433, + "low": 2.2, + "close": 2.2, + "volume": 6033000.0 + }, + { + "time": 1356912000, + "open": 2.2027, + "high": 2.2647, + "low": 2.2, + "close": 2.2567, + "volume": 8590500.0 + }, + { + "time": 1357084800, + "open": 2.3253, + "high": 2.3633, + "low": 2.3067, + "close": 2.3567, + "volume": 16518000.0 + }, + { + "time": 1357171200, + "open": 2.3453, + "high": 2.3633, + "low": 2.3127, + "close": 2.3127, + "volume": 10825500.0 + }, + { + "time": 1363219200, + "open": 2.5673, + "high": 2.6, + "low": 2.4027, + "close": 2.4327, + "volume": 29146500.0 + }, + { + "time": 1363305600, + "open": 2.4333, + "high": 2.4433, + "low": 2.3473, + "close": 2.3607, + "volume": 42304500.0 + }, + { + "time": 1363564800, + "open": 2.36, + "high": 2.404, + "low": 2.322, + "close": 2.3467, + "volume": 17931000.0 + }, + { + "time": 1363651200, + "open": 2.366, + "high": 2.3993, + "low": 2.3293, + "close": 2.3313, + "volume": 15828000.0 + }, + { + "time": 1363737600, + "open": 2.3507, + "high": 2.4167, + "low": 2.344, + "close": 2.4147, + "volume": 16198500.0 + }, + { + "time": 1363824000, + "open": 2.4047, + "high": 2.4707, + "low": 2.3827, + "close": 2.4007, + "volume": 15042000.0 + }, + { + "time": 1363910400, + "open": 2.4133, + "high": 2.4533, + "low": 2.4013, + "close": 2.4413, + "volume": 6421500.0 + }, + { + "time": 1364169600, + "open": 2.4467, + "high": 2.568, + "low": 2.4467, + "close": 2.5313, + "volume": 34368000.0 + }, + { + "time": 1364256000, + "open": 2.5067, + "high": 2.548, + "low": 2.5067, + "close": 2.524, + "volume": 22050000.0 + }, + { + "time": 1364342400, + "open": 2.5133, + "high": 2.5587, + "low": 2.4873, + "close": 2.5467, + "volume": 18799500.0 + }, + { + "time": 1364428800, + "open": 2.534, + "high": 2.5707, + "low": 2.5167, + "close": 2.526, + "volume": 11656500.0 + }, + { + "time": 1364774400, + "open": 2.6067, + "high": 3.112, + "low": 2.6067, + "close": 2.9667, + "volume": 201547500.0 + }, + { + "time": 1364860800, + "open": 2.94, + "high": 3.046, + "low": 2.846, + "close": 2.8733, + "volume": 94021500.0 + }, + { + "time": 1364947200, + "open": 2.88, + "high": 2.9467, + "low": 2.6807, + "close": 2.7253, + "volume": 82765500.0 + }, + { + "time": 1365033600, + "open": 2.7633, + "high": 2.8167, + "low": 2.7207, + "close": 2.8, + "volume": 32724000.0 + }, + { + "time": 1365120000, + "open": 2.8, + "high": 2.816, + "low": 2.7, + "close": 2.758, + "volume": 20602500.0 + }, + { + "time": 1365379200, + "open": 2.77, + "high": 2.8367, + "low": 2.7673, + "close": 2.7887, + "volume": 23578500.0 + }, + { + "time": 1365465600, + "open": 2.7927, + "high": 2.7927, + "low": 2.6887, + "close": 2.6933, + "volume": 22929000.0 + }, + { + "time": 1365552000, + "open": 2.714, + "high": 2.8007, + "low": 2.7013, + "close": 2.7907, + "volume": 29934000.0 + }, + { + "time": 1365638400, + "open": 2.8093, + "high": 2.97, + "low": 2.7833, + "close": 2.8667, + "volume": 50419500.0 + }, + { + "time": 1365724800, + "open": 2.906, + "high": 3.0093, + "low": 2.8673, + "close": 2.9167, + "volume": 43282500.0 + }, + { + "time": 1365984000, + "open": 2.8673, + "high": 2.9213, + "low": 2.834, + "close": 2.92, + "volume": 23191500.0 + }, + { + "time": 1366070400, + "open": 2.942, + "high": 3.076, + "low": 2.9273, + "close": 3.032, + "volume": 41016000.0 + }, + { + "time": 1366156800, + "open": 3.0267, + "high": 3.0633, + "low": 2.9693, + "close": 3.03, + "volume": 29680500.0 + }, + { + "time": 1366243200, + "open": 3.0653, + "high": 3.1733, + "low": 3.026, + "close": 3.1627, + "volume": 45765000.0 + }, + { + "time": 1366329600, + "open": 3.1627, + "high": 3.3253, + "low": 3.138, + "close": 3.1633, + "volume": 43929000.0 + }, + { + "time": 1366588800, + "open": 3.2133, + "high": 3.3467, + "low": 3.1667, + "close": 3.346, + "volume": 56449500.0 + }, + { + "time": 1366675200, + "open": 3.346, + "high": 3.528, + "low": 3.346, + "close": 3.3967, + "volume": 53149500.0 + }, + { + "time": 1366761600, + "open": 3.446, + "high": 3.446, + "low": 3.2653, + "close": 3.38, + "volume": 36709500.0 + }, + { + "time": 1366848000, + "open": 3.4, + "high": 3.4933, + "low": 3.3653, + "close": 3.48, + "volume": 40113000.0 + }, + { + "time": 1366934400, + "open": 3.5, + "high": 3.5827, + "low": 3.3747, + "close": 3.3873, + "volume": 52822500.0 + }, + { + "time": 1367193600, + "open": 3.4, + "high": 3.6667, + "low": 3.3933, + "close": 3.6653, + "volume": 52944000.0 + }, + { + "time": 1367280000, + "open": 3.6667, + "high": 3.8787, + "low": 3.5767, + "close": 3.634, + "volume": 79696500.0 + }, + { + "time": 1367366400, + "open": 3.6447, + "high": 3.7327, + "low": 3.5333, + "close": 3.596, + "volume": 37645500.0 + }, + { + "time": 1367452800, + "open": 3.5933, + "high": 3.6847, + "low": 3.5333, + "close": 3.64, + "volume": 44152500.0 + }, + { + "time": 1367539200, + "open": 3.6833, + "high": 3.7647, + "low": 3.6233, + "close": 3.6387, + "volume": 49215000.0 + }, + { + "time": 1367798400, + "open": 3.6727, + "high": 4.0273, + "low": 3.6727, + "close": 4.0127, + "volume": 63787500.0 + }, + { + "time": 1367884800, + "open": 4.0, + "high": 4.1893, + "low": 3.6747, + "close": 3.7707, + "volume": 145771500.0 + }, + { + "time": 1367971200, + "open": 3.7067, + "high": 4.866, + "low": 3.7, + "close": 4.6, + "volume": 97968000.0 + }, + { + "time": 1368057600, + "open": 4.54, + "high": 5.0513, + "low": 4.246, + "close": 4.59, + "volume": 416440500.0 + }, + { + "time": 1368144000, + "open": 4.6267, + "high": 5.4, + "low": 4.5447, + "close": 5.1267, + "volume": 362424000.0 + }, + { + "time": 1368403200, + "open": 5.104, + "high": 6.0133, + "low": 5.0333, + "close": 6.0007, + "volume": 324441000.0 + }, + { + "time": 1368489600, + "open": 6.0773, + "high": 6.4747, + "low": 5.41, + "close": 5.4667, + "volume": 540166500.0 + }, + { + "time": 1368576000, + "open": 5.4673, + "high": 6.2253, + "low": 5.154, + "close": 6.1333, + "volume": 245694000.0 + }, + { + "time": 1368662400, + "open": 6.1367, + "high": 6.4267, + "low": 5.9107, + "close": 6.14, + "volume": 314040000.0 + }, + { + "time": 1368748800, + "open": 6.2493, + "high": 6.3333, + "low": 5.8333, + "close": 6.0833, + "volume": 275742000.0 + }, + { + "time": 1369008000, + "open": 6.0933, + "high": 6.1967, + "low": 5.9087, + "close": 5.9533, + "volume": 116409000.0 + }, + { + "time": 1369094400, + "open": 5.954, + "high": 6.0533, + "low": 5.6853, + "close": 5.838, + "volume": 129556500.0 + }, + { + "time": 1369180800, + "open": 5.814, + "high": 6.064, + "low": 5.7, + "close": 5.8187, + "volume": 124705500.0 + }, + { + "time": 1369267200, + "open": 5.7673, + "high": 6.212, + "low": 5.5367, + "close": 6.2, + "volume": 173866500.0 + }, + { + "time": 1369353600, + "open": 6.16, + "high": 6.53, + "low": 6.1333, + "close": 6.4967, + "volume": 234340500.0 + }, + { + "time": 1369699200, + "open": 6.53, + "high": 7.4687, + "low": 6.53, + "close": 7.4533, + "volume": 286362000.0 + }, + { + "time": 1369785600, + "open": 7.4667, + "high": 7.7, + "low": 6.6, + "close": 6.9133, + "volume": 365599500.0 + }, + { + "time": 1369872000, + "open": 7.0667, + "high": 7.3027, + "low": 6.7467, + "close": 7.0, + "volume": 232486500.0 + }, + { + "time": 1369958400, + "open": 6.934, + "high": 7.096, + "low": 6.4893, + "close": 6.4893, + "volume": 216676500.0 + }, + { + "time": 1370217600, + "open": 6.4533, + "high": 6.7193, + "low": 5.8833, + "close": 6.16, + "volume": 279295500.0 + }, + { + "time": 1370304000, + "open": 6.1727, + "high": 6.428, + "low": 6.1427, + "close": 6.3227, + "volume": 128937000.0 + }, + { + "time": 1370390400, + "open": 6.2667, + "high": 6.5313, + "low": 5.9407, + "close": 6.3633, + "volume": 178788000.0 + }, + { + "time": 1370476800, + "open": 6.2867, + "high": 6.618, + "low": 6.2867, + "close": 6.446, + "volume": 139008000.0 + }, + { + "time": 1370563200, + "open": 6.4767, + "high": 6.86, + "low": 6.4227, + "close": 6.8, + "volume": 154503000.0 + }, + { + "time": 1370822400, + "open": 6.7227, + "high": 6.8347, + "low": 6.476, + "close": 6.6, + "volume": 134262000.0 + }, + { + "time": 1370908800, + "open": 6.5713, + "high": 6.5787, + "low": 6.27, + "close": 6.2893, + "volume": 107361000.0 + }, + { + "time": 1370995200, + "open": 6.298, + "high": 6.6987, + "low": 6.298, + "close": 6.522, + "volume": 133843500.0 + }, + { + "time": 1371081600, + "open": 6.4073, + "high": 6.6333, + "low": 6.3413, + "close": 6.5733, + "volume": 87330000.0 + }, + { + "time": 1371168000, + "open": 6.6193, + "high": 6.8347, + "low": 6.54, + "close": 6.69, + "volume": 95694000.0 + }, + { + "time": 1371427200, + "open": 6.8467, + "high": 6.9833, + "low": 6.7467, + "close": 6.794, + "volume": 103032000.0 + }, + { + "time": 1371513600, + "open": 6.8273, + "high": 6.932, + "low": 6.6133, + "close": 6.9073, + "volume": 129123000.0 + }, + { + "time": 1371600000, + "open": 6.8547, + "high": 7.1113, + "low": 6.6527, + "close": 6.934, + "volume": 125938500.0 + }, + { + "time": 1371686400, + "open": 6.9667, + "high": 7.142, + "low": 6.63, + "close": 6.7333, + "volume": 148359000.0 + }, + { + "time": 1371772800, + "open": 6.8667, + "high": 6.9293, + "low": 6.5, + "close": 6.58, + "volume": 171208500.0 + }, + { + "time": 1372032000, + "open": 6.5533, + "high": 6.858, + "low": 6.3533, + "close": 6.8033, + "volume": 104620500.0 + }, + { + "time": 1372118400, + "open": 6.784, + "high": 6.9467, + "low": 6.7033, + "close": 6.7967, + "volume": 85672500.0 + }, + { + "time": 1372204800, + "open": 6.8567, + "high": 7.0993, + "low": 6.844, + "close": 7.0667, + "volume": 95920500.0 + }, + { + "time": 1372291200, + "open": 7.08, + "high": 7.35, + "low": 7.0587, + "close": 7.2833, + "volume": 127455000.0 + }, + { + "time": 1372377600, + "open": 7.3333, + "high": 7.372, + "low": 7.114, + "close": 7.1707, + "volume": 84156000.0 + }, + { + "time": 1372636800, + "open": 7.1973, + "high": 7.8667, + "low": 7.1973, + "close": 7.85, + "volume": 159403500.0 + }, + { + "time": 1372723200, + "open": 7.9, + "high": 8.126, + "low": 7.7, + "close": 7.8667, + "volume": 177274500.0 + }, + { + "time": 1372809600, + "open": 7.834, + "high": 7.95, + "low": 7.618, + "close": 7.6733, + "volume": 70027500.0 + }, + { + "time": 1372982400, + "open": 7.8, + "high": 8.03, + "low": 7.6913, + "close": 8.03, + "volume": 99724500.0 + }, + { + "time": 1373241600, + "open": 7.9847, + "high": 8.1827, + "low": 7.9213, + "close": 8.13, + "volume": 113974500.0 + }, + { + "time": 1373328000, + "open": 8.1587, + "high": 8.432, + "low": 8.1273, + "close": 8.2453, + "volume": 121951500.0 + }, + { + "time": 1373414400, + "open": 8.22, + "high": 8.3033, + "low": 8.0527, + "close": 8.2733, + "volume": 81409500.0 + }, + { + "time": 1373500800, + "open": 8.3333, + "high": 8.406, + "low": 8.1567, + "close": 8.3787, + "volume": 107755500.0 + }, + { + "time": 1373587200, + "open": 8.3127, + "high": 8.6653, + "low": 8.3007, + "close": 8.6547, + "volume": 166258500.0 + }, + { + "time": 1373846400, + "open": 8.6667, + "high": 8.92, + "low": 8.4547, + "close": 8.5153, + "volume": 144150000.0 + }, + { + "time": 1373932800, + "open": 8.5153, + "high": 8.5833, + "low": 7.096, + "close": 7.1133, + "volume": 469743000.0 + }, + { + "time": 1374019200, + "open": 7.1833, + "high": 8.1493, + "low": 6.9667, + "close": 8.1, + "volume": 379722000.0 + }, + { + "time": 1374105600, + "open": 8.114, + "high": 8.22, + "low": 7.7453, + "close": 7.8707, + "volume": 166929000.0 + }, + { + "time": 1374192000, + "open": 8.0, + "high": 8.0367, + "low": 7.7673, + "close": 7.9813, + "volume": 85578000.0 + }, + { + "time": 1374451200, + "open": 8.0453, + "high": 8.4453, + "low": 7.986, + "close": 8.14, + "volume": 143059500.0 + }, + { + "time": 1374537600, + "open": 8.2133, + "high": 8.3707, + "low": 8.1213, + "close": 8.1867, + "volume": 111156000.0 + }, + { + "time": 1374624000, + "open": 8.2667, + "high": 8.316, + "low": 7.9707, + "close": 8.126, + "volume": 99454500.0 + }, + { + "time": 1374710400, + "open": 8.1, + "high": 8.3167, + "low": 8.0127, + "close": 8.2847, + "volume": 76276500.0 + }, + { + "time": 1374796800, + "open": 8.424, + "high": 8.8633, + "low": 8.3, + "close": 8.6273, + "volume": 139750500.0 + }, + { + "time": 1375056000, + "open": 8.7013, + "high": 9.0247, + "low": 8.5273, + "close": 8.9773, + "volume": 141123000.0 + }, + { + "time": 1375142400, + "open": 9.0133, + "high": 9.166, + "low": 8.5453, + "close": 8.8, + "volume": 190620000.0 + }, + { + "time": 1375228800, + "open": 8.8593, + "high": 8.998, + "low": 8.7633, + "close": 8.9793, + "volume": 92283000.0 + }, + { + "time": 1375315200, + "open": 9.0, + "high": 9.1087, + "low": 8.842, + "close": 9.0673, + "volume": 77371500.0 + }, + { + "time": 1375401600, + "open": 9.1, + "high": 9.26, + "low": 8.9073, + "close": 9.2467, + "volume": 90321000.0 + }, + { + "time": 1375660800, + "open": 9.2587, + "high": 9.666, + "low": 9.1533, + "close": 9.6467, + "volume": 148099500.0 + }, + { + "time": 1375747200, + "open": 9.71, + "high": 9.78, + "low": 9.4067, + "close": 9.4833, + "volume": 133714500.0 + }, + { + "time": 1375833600, + "open": 9.5167, + "high": 10.3667, + "low": 8.824, + "close": 10.2133, + "volume": 264238500.0 + }, + { + "time": 1375920000, + "open": 10.2953, + "high": 10.592, + "low": 9.9467, + "close": 10.2167, + "volume": 387346500.0 + }, + { + "time": 1376006400, + "open": 10.26, + "high": 10.3967, + "low": 10.0833, + "close": 10.2, + "volume": 129208500.0 + }, + { + "time": 1376265600, + "open": 10.21, + "high": 10.21, + "low": 9.47, + "close": 9.8633, + "volume": 215790000.0 + }, + { + "time": 1376352000, + "open": 9.916, + "high": 10.0, + "low": 9.614, + "close": 9.62, + "volume": 124554000.0 + }, + { + "time": 1376438400, + "open": 9.65, + "high": 9.6953, + "low": 9.2033, + "close": 9.2347, + "volume": 166930500.0 + }, + { + "time": 1376524800, + "open": 9.3333, + "high": 9.5733, + "low": 9.0, + "close": 9.3533, + "volume": 147001500.0 + }, + { + "time": 1376611200, + "open": 9.3333, + "high": 9.594, + "low": 9.3067, + "close": 9.462, + "volume": 101158500.0 + }, + { + "time": 1376870400, + "open": 9.4667, + "high": 9.8253, + "low": 9.4667, + "close": 9.7133, + "volume": 116574000.0 + }, + { + "time": 1376956800, + "open": 9.7667, + "high": 10.01, + "low": 9.7667, + "close": 9.9873, + "volume": 90135000.0 + }, + { + "time": 1377043200, + "open": 9.998, + "high": 10.0727, + "low": 9.75, + "close": 9.7867, + "volume": 89446500.0 + }, + { + "time": 1377129600, + "open": 9.8267, + "high": 10.4987, + "low": 9.8267, + "close": 10.496, + "volume": 151780500.0 + }, + { + "time": 1377216000, + "open": 10.4947, + "high": 10.82, + "low": 10.3333, + "close": 10.7833, + "volume": 187560000.0 + }, + { + "time": 1377475200, + "open": 10.7867, + "high": 11.5333, + "low": 10.6833, + "close": 11.0707, + "volume": 350391000.0 + }, + { + "time": 1377561600, + "open": 11.0967, + "high": 11.2533, + "low": 10.712, + "close": 11.1873, + "volume": 248074500.0 + }, + { + "time": 1377648000, + "open": 11.1867, + "high": 11.4333, + "low": 10.8833, + "close": 11.0173, + "volume": 209382000.0 + }, + { + "time": 1377734400, + "open": 11.1573, + "high": 11.1867, + "low": 10.834, + "close": 11.0333, + "volume": 134815500.0 + }, + { + "time": 1377820800, + "open": 11.1167, + "high": 11.2967, + "low": 10.9307, + "close": 11.2893, + "volume": 161145000.0 + }, + { + "time": 1378166400, + "open": 11.3333, + "high": 11.6587, + "low": 11.0933, + "close": 11.272, + "volume": 174235500.0 + }, + { + "time": 1378252800, + "open": 11.3333, + "high": 11.4413, + "low": 11.0373, + "close": 11.3987, + "volume": 164263500.0 + }, + { + "time": 1378339200, + "open": 11.458, + "high": 11.4993, + "low": 11.2167, + "close": 11.3333, + "volume": 95404500.0 + }, + { + "time": 1378425600, + "open": 11.3267, + "high": 11.3333, + "low": 11.01, + "close": 11.0933, + "volume": 122739000.0 + }, + { + "time": 1378684800, + "open": 11.1333, + "high": 11.1333, + "low": 10.5673, + "close": 10.6113, + "volume": 207159000.0 + }, + { + "time": 1378771200, + "open": 10.6487, + "high": 11.1667, + "low": 10.632, + "close": 11.1053, + "volume": 128748000.0 + }, + { + "time": 1378857600, + "open": 11.1367, + "high": 11.2073, + "low": 10.8087, + "close": 10.9247, + "volume": 83227500.0 + }, + { + "time": 1378944000, + "open": 10.934, + "high": 11.1173, + "low": 10.5273, + "close": 10.8267, + "volume": 90027000.0 + }, + { + "time": 1379030400, + "open": 10.9267, + "high": 11.0913, + "low": 10.8107, + "close": 11.0393, + "volume": 75963000.0 + }, + { + "time": 1379289600, + "open": 11.2, + "high": 11.39, + "low": 11.036, + "close": 11.06, + "volume": 109735500.0 + }, + { + "time": 1379376000, + "open": 11.066, + "high": 11.228, + "low": 10.8907, + "close": 11.0933, + "volume": 78295500.0 + }, + { + "time": 1379462400, + "open": 11.094, + "high": 11.3233, + "low": 10.9467, + "close": 11.3, + "volume": 78660000.0 + }, + { + "time": 1379548800, + "open": 11.31, + "high": 12.0313, + "low": 11.1, + "close": 11.8793, + "volume": 224395500.0 + }, + { + "time": 1379635200, + "open": 11.8333, + "high": 12.3887, + "low": 11.7947, + "close": 12.2593, + "volume": 194923500.0 + }, + { + "time": 1379894400, + "open": 12.33, + "high": 12.3653, + "low": 11.8073, + "close": 12.0073, + "volume": 119229000.0 + }, + { + "time": 1379980800, + "open": 12.074, + "high": 12.3307, + "low": 11.8433, + "close": 12.144, + "volume": 90906000.0 + }, + { + "time": 1380067200, + "open": 12.1067, + "high": 12.42, + "low": 12.02, + "close": 12.3727, + "volume": 117744000.0 + }, + { + "time": 1380153600, + "open": 12.4087, + "high": 12.6453, + "low": 12.3333, + "close": 12.5647, + "volume": 95916000.0 + }, + { + "time": 1380240000, + "open": 12.5867, + "high": 12.7533, + "low": 12.4287, + "close": 12.7467, + "volume": 84856500.0 + }, + { + "time": 1380499200, + "open": 12.6933, + "high": 12.9667, + "low": 12.5207, + "close": 12.87, + "volume": 129867000.0 + }, + { + "time": 1380585600, + "open": 12.9067, + "high": 12.9933, + "low": 12.558, + "close": 12.8713, + "volume": 112054500.0 + }, + { + "time": 1380672000, + "open": 12.8167, + "high": 12.8733, + "low": 11.6933, + "close": 11.9033, + "volume": 298063500.0 + }, + { + "time": 1380758400, + "open": 11.7913, + "high": 11.9793, + "low": 11.2, + "close": 11.5193, + "volume": 342652500.0 + }, + { + "time": 1380844800, + "open": 11.5333, + "high": 12.2333, + "low": 11.51, + "close": 12.2307, + "volume": 209007000.0 + }, + { + "time": 1381104000, + "open": 12.3107, + "high": 12.4487, + "low": 12.0173, + "close": 12.1927, + "volume": 166999500.0 + }, + { + "time": 1381190400, + "open": 12.2667, + "high": 12.3953, + "low": 11.5333, + "close": 11.6833, + "volume": 198939000.0 + }, + { + "time": 1381276800, + "open": 11.7, + "high": 11.8, + "low": 10.7667, + "close": 11.2533, + "volume": 220770000.0 + }, + { + "time": 1381363200, + "open": 11.2533, + "high": 11.7167, + "low": 11.22, + "close": 11.5327, + "volume": 129027000.0 + }, + { + "time": 1381449600, + "open": 11.578, + "high": 11.9993, + "low": 11.4, + "close": 11.98, + "volume": 119569500.0 + }, + { + "time": 1381708800, + "open": 11.8033, + "high": 12.1667, + "low": 11.61, + "close": 12.022, + "volume": 112860000.0 + }, + { + "time": 1381795200, + "open": 12.022, + "high": 12.586, + "low": 12.022, + "close": 12.3133, + "volume": 159427500.0 + }, + { + "time": 1381881600, + "open": 12.3333, + "high": 12.4867, + "low": 12.1393, + "close": 12.2133, + "volume": 119692500.0 + }, + { + "time": 1381968000, + "open": 12.2667, + "high": 12.3333, + "low": 12.066, + "close": 12.24, + "volume": 97383000.0 + }, + { + "time": 1382054400, + "open": 12.2873, + "high": 12.3973, + "low": 12.0733, + "close": 12.1627, + "volume": 85054500.0 + }, + { + "time": 1382313600, + "open": 12.2933, + "high": 12.3127, + "low": 11.4, + "close": 11.5593, + "volume": 165351000.0 + }, + { + "time": 1382400000, + "open": 11.6, + "high": 11.852, + "low": 11.074, + "close": 11.396, + "volume": 166023000.0 + }, + { + "time": 1382486400, + "open": 11.38, + "high": 11.454, + "low": 10.6767, + "close": 10.8887, + "volume": 190072500.0 + }, + { + "time": 1382572800, + "open": 10.92, + "high": 11.8307, + "low": 10.8553, + "close": 11.8167, + "volume": 158160000.0 + }, + { + "time": 1382659200, + "open": 11.5407, + "high": 11.814, + "low": 11.12, + "close": 11.2833, + "volume": 110428500.0 + }, + { + "time": 1382918400, + "open": 11.3107, + "high": 11.4967, + "low": 10.8073, + "close": 10.84, + "volume": 112183500.0 + }, + { + "time": 1383004800, + "open": 10.84, + "high": 11.06, + "low": 10.2, + "close": 10.934, + "volume": 205161000.0 + }, + { + "time": 1383091200, + "open": 11.0467, + "high": 11.1787, + "low": 10.5333, + "close": 10.5333, + "volume": 121746000.0 + }, + { + "time": 1383177600, + "open": 10.52, + "high": 10.8293, + "low": 10.22, + "close": 10.71, + "volume": 131301000.0 + }, + { + "time": 1383264000, + "open": 10.75, + "high": 11.06, + "low": 10.6627, + "close": 10.8667, + "volume": 104220000.0 + }, + { + "time": 1383523200, + "open": 10.8667, + "high": 11.7987, + "low": 10.8667, + "close": 11.7533, + "volume": 188814000.0 + }, + { + "time": 1383609600, + "open": 11.68, + "high": 12.1313, + "low": 10.2667, + "close": 10.3333, + "volume": 319066500.0 + }, + { + "time": 1383696000, + "open": 10.44, + "high": 10.7153, + "low": 9.7573, + "close": 10.0, + "volume": 442978500.0 + }, + { + "time": 1383782400, + "open": 9.8667, + "high": 10.1333, + "low": 9.1747, + "close": 9.2007, + "volume": 319876500.0 + }, + { + "time": 1383868800, + "open": 9.1667, + "high": 9.3833, + "low": 8.8213, + "close": 9.2553, + "volume": 316498500.0 + }, + { + "time": 1384128000, + "open": 9.1, + "high": 9.6947, + "low": 9.1, + "close": 9.66, + "volume": 202396500.0 + }, + { + "time": 1384214400, + "open": 9.7667, + "high": 9.8, + "low": 9.0787, + "close": 9.3933, + "volume": 213652500.0 + }, + { + "time": 1384300800, + "open": 9.39, + "high": 9.4913, + "low": 9.0893, + "close": 9.2707, + "volume": 175584000.0 + }, + { + "time": 1384387200, + "open": 9.3333, + "high": 9.3847, + "low": 8.9407, + "close": 9.1573, + "volume": 175161000.0 + }, + { + "time": 1384473600, + "open": 9.2, + "high": 9.2627, + "low": 8.9567, + "close": 9.0013, + "volume": 143160000.0 + }, + { + "time": 1384732800, + "open": 9.0327, + "high": 9.1, + "low": 7.974, + "close": 7.9893, + "volume": 333507000.0 + }, + { + "time": 1384819200, + "open": 8.0293, + "high": 8.6, + "low": 7.7033, + "close": 8.52, + "volume": 282606000.0 + }, + { + "time": 1384905600, + "open": 8.5, + "high": 8.5067, + "low": 7.9373, + "close": 8.0567, + "volume": 199353000.0 + }, + { + "time": 1384992000, + "open": 8.0727, + "high": 8.3253, + "low": 8.0067, + "close": 8.11, + "volume": 172042500.0 + }, + { + "time": 1385078400, + "open": 8.1533, + "high": 8.1833, + "low": 7.862, + "close": 8.1, + "volume": 162112500.0 + }, + { + "time": 1385337600, + "open": 8.0893, + "high": 8.3893, + "low": 8.02, + "close": 8.046, + "volume": 150082500.0 + }, + { + "time": 1385424000, + "open": 8.098, + "high": 8.1813, + "low": 7.74, + "close": 8.066, + "volume": 201268500.0 + }, + { + "time": 1385510400, + "open": 8.1313, + "high": 8.5327, + "low": 7.968, + "close": 8.5253, + "volume": 178762500.0 + }, + { + "time": 1385683200, + "open": 8.6207, + "high": 8.706, + "low": 8.4333, + "close": 8.4413, + "volume": 142236000.0 + }, + { + "time": 1385942400, + "open": 8.48, + "high": 8.57, + "low": 8.258, + "close": 8.43, + "volume": 110358000.0 + }, + { + "time": 1386028800, + "open": 8.4447, + "high": 9.6627, + "low": 8.2867, + "close": 9.62, + "volume": 374767500.0 + }, + { + "time": 1386115200, + "open": 9.7673, + "high": 9.7993, + "low": 9.142, + "close": 9.2567, + "volume": 191470500.0 + }, + { + "time": 1386201600, + "open": 9.3773, + "high": 9.5567, + "low": 9.3, + "close": 9.334, + "volume": 134154000.0 + }, + { + "time": 1386288000, + "open": 9.412, + "high": 9.5293, + "low": 9.0867, + "close": 9.1387, + "volume": 115554000.0 + }, + { + "time": 1386547200, + "open": 9.2067, + "high": 9.4947, + "low": 8.9473, + "close": 9.45, + "volume": 150270000.0 + }, + { + "time": 1386633600, + "open": 9.3993, + "high": 9.7247, + "low": 9.2413, + "close": 9.4973, + "volume": 172441500.0 + }, + { + "time": 1386720000, + "open": 9.4807, + "high": 9.5767, + "low": 9.298, + "close": 9.32, + "volume": 111934500.0 + }, + { + "time": 1386806400, + "open": 9.37, + "high": 9.8827, + "low": 9.2353, + "close": 9.8133, + "volume": 173362500.0 + }, + { + "time": 1386892800, + "open": 9.8553, + "high": 10.12, + "low": 9.8, + "close": 9.816, + "volume": 174357000.0 + }, + { + "time": 1387152000, + "open": 9.8433, + "high": 10.03, + "low": 9.74, + "close": 9.8227, + "volume": 109501500.0 + }, + { + "time": 1387238400, + "open": 9.822, + "high": 10.3087, + "low": 9.7533, + "close": 10.18, + "volume": 174391500.0 + }, + { + "time": 1387324800, + "open": 10.18, + "high": 10.3267, + "low": 9.73, + "close": 9.8633, + "volume": 182674500.0 + }, + { + "time": 1387411200, + "open": 9.8667, + "high": 9.9993, + "low": 9.2733, + "close": 9.3733, + "volume": 202656000.0 + }, + { + "time": 1387497600, + "open": 9.4007, + "high": 9.624, + "low": 9.3767, + "close": 9.516, + "volume": 123055500.0 + }, + { + "time": 1387756800, + "open": 9.6327, + "high": 9.7493, + "low": 9.5067, + "close": 9.6433, + "volume": 88005000.0 + }, + { + "time": 1387843200, + "open": 9.7567, + "high": 10.3327, + "low": 9.686, + "close": 10.068, + "volume": 159850500.0 + }, + { + "time": 1388016000, + "open": 10.21, + "high": 10.5333, + "low": 10.1767, + "close": 10.4067, + "volume": 118942500.0 + }, + { + "time": 1388102400, + "open": 10.368, + "high": 10.4527, + "low": 10.0333, + "close": 10.0333, + "volume": 93999000.0 + }, + { + "time": 1388361600, + "open": 10.0747, + "high": 10.3207, + "low": 10.0333, + "close": 10.1533, + "volume": 74286000.0 + }, + { + "time": 1388448000, + "open": 10.1993, + "high": 10.2627, + "low": 9.9107, + "close": 10.0327, + "volume": 72408000.0 + }, + { + "time": 1388620800, + "open": 10.04, + "high": 10.1653, + "low": 9.77, + "close": 10.0093, + "volume": 102918000.0 + }, + { + "time": 1388707200, + "open": 10.0067, + "high": 10.1467, + "low": 9.9067, + "close": 9.932, + "volume": 78061500.0 + }, + { + "time": 1388966400, + "open": 10.0, + "high": 10.032, + "low": 9.682, + "close": 9.776, + "volume": 89131500.0 + }, + { + "time": 1389052800, + "open": 9.8, + "high": 10.0267, + "low": 9.6833, + "close": 9.9207, + "volume": 83844000.0 + }, + { + "time": 1389139200, + "open": 9.9573, + "high": 10.2467, + "low": 9.8673, + "close": 10.1, + "volume": 101304000.0 + }, + { + "time": 1389225600, + "open": 10.0933, + "high": 10.2287, + "low": 9.79, + "close": 9.8567, + "volume": 88711500.0 + }, + { + "time": 1389312000, + "open": 9.874, + "high": 9.9667, + "low": 9.4833, + "close": 9.73, + "volume": 126364500.0 + }, + { + "time": 1389571200, + "open": 9.76, + "high": 9.8, + "low": 9.188, + "close": 9.3167, + "volume": 84717000.0 + }, + { + "time": 1389657600, + "open": 9.2933, + "high": 11.172, + "low": 9.1113, + "close": 11.0167, + "volume": 379350000.0 + }, + { + "time": 1389744000, + "open": 10.98, + "high": 11.4907, + "low": 10.8067, + "close": 10.942, + "volume": 274327500.0 + }, + { + "time": 1389830400, + "open": 11.026, + "high": 11.5133, + "low": 10.7773, + "close": 11.452, + "volume": 160425000.0 + }, + { + "time": 1389916800, + "open": 11.4147, + "high": 11.5467, + "low": 11.1967, + "close": 11.36, + "volume": 124987500.0 + }, + { + "time": 1390262400, + "open": 11.3333, + "high": 11.8193, + "low": 11.3, + "close": 11.7867, + "volume": 130549500.0 + }, + { + "time": 1390348800, + "open": 11.9833, + "high": 12.0213, + "low": 11.6507, + "close": 11.904, + "volume": 90628500.0 + }, + { + "time": 1390435200, + "open": 11.8133, + "high": 12.1587, + "low": 11.5613, + "close": 12.0, + "volume": 104628000.0 + }, + { + "time": 1390521600, + "open": 11.862, + "high": 12.0333, + "low": 11.554, + "close": 11.5667, + "volume": 101746500.0 + }, + { + "time": 1390780800, + "open": 11.7, + "high": 11.8613, + "low": 10.9807, + "close": 11.1867, + "volume": 115896000.0 + }, + { + "time": 1390867200, + "open": 11.308, + "high": 11.9593, + "low": 11.2927, + "close": 11.9593, + "volume": 80989500.0 + }, + { + "time": 1390953600, + "open": 11.9287, + "high": 11.9393, + "low": 11.542, + "close": 11.7867, + "volume": 77025000.0 + }, + { + "time": 1391040000, + "open": 11.6833, + "high": 12.3187, + "low": 11.6833, + "close": 12.2333, + "volume": 107673000.0 + }, + { + "time": 1391126400, + "open": 12.3333, + "high": 12.4, + "low": 11.9007, + "close": 12.0773, + "volume": 84319500.0 + }, + { + "time": 1391385600, + "open": 11.6667, + "high": 12.3253, + "low": 11.6667, + "close": 11.8187, + "volume": 89644500.0 + }, + { + "time": 1391472000, + "open": 11.8, + "high": 12.1067, + "low": 11.7467, + "close": 11.922, + "volume": 62623500.0 + }, + { + "time": 1391558400, + "open": 11.87, + "high": 12.0393, + "low": 11.2907, + "close": 11.6533, + "volume": 93388500.0 + }, + { + "time": 1391644800, + "open": 11.668, + "high": 12.0073, + "low": 11.628, + "close": 11.8953, + "volume": 73384500.0 + }, + { + "time": 1391731200, + "open": 12.032, + "high": 12.488, + "low": 11.9, + "close": 12.4733, + "volume": 117148500.0 + }, + { + "time": 1391990400, + "open": 12.5627, + "high": 13.2867, + "low": 12.42, + "close": 13.1027, + "volume": 164770500.0 + }, + { + "time": 1392076800, + "open": 13.2, + "high": 13.48, + "low": 12.8467, + "close": 12.9733, + "volume": 140068500.0 + }, + { + "time": 1392163200, + "open": 13.1067, + "high": 13.218, + "low": 12.9547, + "close": 13.0007, + "volume": 66439500.0 + }, + { + "time": 1392249600, + "open": 12.9333, + "high": 13.5147, + "low": 12.684, + "close": 13.1313, + "volume": 105280500.0 + }, + { + "time": 1392336000, + "open": 13.2073, + "high": 13.4587, + "low": 13.1273, + "close": 13.1933, + "volume": 80040000.0 + }, + { + "time": 1392681600, + "open": 13.1333, + "high": 13.8833, + "low": 13.1333, + "close": 13.5567, + "volume": 117477000.0 + }, + { + "time": 1392768000, + "open": 13.6893, + "high": 15.0, + "low": 12.8867, + "close": 14.5393, + "volume": 202486500.0 + }, + { + "time": 1392854400, + "open": 14.446, + "high": 14.5667, + "low": 13.7513, + "close": 13.968, + "volume": 231760500.0 + }, + { + "time": 1392940800, + "open": 14.0327, + "high": 14.2653, + "low": 13.946, + "close": 13.9947, + "volume": 102037500.0 + }, + { + "time": 1393200000, + "open": 13.98, + "high": 14.5573, + "low": 13.876, + "close": 14.4867, + "volume": 108903000.0 + }, + { + "time": 1393286400, + "open": 14.6533, + "high": 17.28, + "low": 14.6533, + "close": 16.8467, + "volume": 420369000.0 + }, + { + "time": 1393372800, + "open": 16.9333, + "high": 17.6667, + "low": 16.3693, + "close": 17.44, + "volume": 312486000.0 + }, + { + "time": 1393459200, + "open": 17.5333, + "high": 17.83, + "low": 16.5553, + "close": 16.804, + "volume": 223077000.0 + }, + { + "time": 1393545600, + "open": 16.9333, + "high": 16.94, + "low": 16.17, + "close": 16.2567, + "volume": 180037500.0 + }, + { + "time": 1393804800, + "open": 15.4667, + "high": 16.7767, + "low": 15.4667, + "close": 16.6667, + "volume": 165219000.0 + }, + { + "time": 1393891200, + "open": 16.91, + "high": 17.386, + "low": 16.8553, + "close": 16.964, + "volume": 108879000.0 + }, + { + "time": 1393977600, + "open": 17.2, + "high": 17.2653, + "low": 16.7867, + "close": 16.82, + "volume": 72594000.0 + }, + { + "time": 1394064000, + "open": 16.9333, + "high": 17.1667, + "low": 16.63, + "close": 16.86, + "volume": 94290000.0 + }, + { + "time": 1394150400, + "open": 16.8667, + "high": 16.99, + "low": 16.294, + "close": 16.3767, + "volume": 95437500.0 + }, + { + "time": 1394409600, + "open": 16.27, + "high": 16.4387, + "low": 15.7373, + "close": 15.8193, + "volume": 97983000.0 + }, + { + "time": 1394496000, + "open": 15.8333, + "high": 16.3067, + "low": 15.4953, + "close": 15.5033, + "volume": 109213500.0 + }, + { + "time": 1394582400, + "open": 15.4733, + "high": 16.2993, + "low": 15.2647, + "close": 16.1927, + "volume": 123525000.0 + }, + { + "time": 1394668800, + "open": 16.248, + "high": 16.33, + "low": 15.6, + "close": 15.7667, + "volume": 79090500.0 + }, + { + "time": 1394755200, + "open": 15.6467, + "high": 15.8527, + "low": 15.2213, + "close": 15.3333, + "volume": 103077000.0 + }, + { + "time": 1395014400, + "open": 15.51, + "high": 15.862, + "low": 15.3667, + "close": 15.7067, + "volume": 76896000.0 + }, + { + "time": 1395100800, + "open": 15.7047, + "high": 16.1, + "low": 15.6, + "close": 16.0467, + "volume": 78610500.0 + }, + { + "time": 1395187200, + "open": 16.1613, + "high": 16.2133, + "low": 15.5673, + "close": 15.72, + "volume": 62955000.0 + }, + { + "time": 1395273600, + "open": 15.7333, + "high": 15.95, + "low": 15.5573, + "close": 15.6133, + "volume": 47638500.0 + }, + { + "time": 1395360000, + "open": 15.7333, + "high": 15.76, + "low": 15.1667, + "close": 15.18, + "volume": 104617500.0 + }, + { + "time": 1395619200, + "open": 15.3867, + "high": 15.4173, + "low": 14.018, + "close": 14.7233, + "volume": 142279500.0 + }, + { + "time": 1395705600, + "open": 14.746, + "high": 15.1367, + "low": 14.5267, + "close": 14.7193, + "volume": 99859500.0 + }, + { + "time": 1395792000, + "open": 14.8113, + "high": 14.9333, + "low": 14.09, + "close": 14.1793, + "volume": 87933000.0 + }, + { + "time": 1395878400, + "open": 14.1347, + "high": 14.252, + "low": 13.5333, + "close": 13.7153, + "volume": 120972000.0 + }, + { + "time": 1395964800, + "open": 13.7367, + "high": 14.448, + "low": 13.734, + "close": 14.294, + "volume": 125509500.0 + }, + { + "time": 1396224000, + "open": 14.3267, + "high": 14.4513, + "low": 13.7593, + "close": 13.8533, + "volume": 106504500.0 + }, + { + "time": 1396310400, + "open": 13.88, + "high": 14.544, + "low": 13.8667, + "close": 14.528, + "volume": 93630000.0 + }, + { + "time": 1396396800, + "open": 14.5847, + "high": 15.4787, + "low": 14.5367, + "close": 15.4727, + "volume": 138853500.0 + }, + { + "time": 1396483200, + "open": 15.5253, + "high": 15.7153, + "low": 14.8, + "close": 15.0153, + "volume": 140214000.0 + }, + { + "time": 1396569600, + "open": 15.14, + "high": 15.218, + "low": 14.0493, + "close": 14.0867, + "volume": 146892000.0 + }, + { + "time": 1396828800, + "open": 13.954, + "high": 14.4133, + "low": 13.5673, + "close": 13.8593, + "volume": 126373500.0 + }, + { + "time": 1396915200, + "open": 13.9667, + "high": 14.4327, + "low": 13.708, + "close": 14.3327, + "volume": 87385500.0 + }, + { + "time": 1397001600, + "open": 14.4667, + "high": 14.5633, + "low": 14.0593, + "close": 14.5033, + "volume": 65019000.0 + }, + { + "time": 1397088000, + "open": 14.4747, + "high": 14.5333, + "low": 13.5067, + "close": 13.546, + "volume": 89880000.0 + }, + { + "time": 1397174400, + "open": 13.546, + "high": 13.8, + "low": 13.24, + "close": 13.6067, + "volume": 115252500.0 + }, + { + "time": 1397433600, + "open": 13.56, + "high": 13.9667, + "low": 12.9607, + "close": 13.2233, + "volume": 96993000.0 + }, + { + "time": 1397520000, + "open": 13.2067, + "high": 13.4, + "low": 12.288, + "close": 13.0127, + "volume": 174859500.0 + }, + { + "time": 1397606400, + "open": 13.182, + "high": 13.3327, + "low": 12.7213, + "close": 13.1333, + "volume": 87391500.0 + }, + { + "time": 1397692800, + "open": 13.1667, + "high": 13.486, + "low": 12.9387, + "close": 13.2, + "volume": 75393000.0 + }, + { + "time": 1398038400, + "open": 13.234, + "high": 13.7467, + "low": 12.9333, + "close": 13.6933, + "volume": 67105500.0 + }, + { + "time": 1398124800, + "open": 13.7687, + "high": 14.622, + "low": 13.6067, + "close": 14.5073, + "volume": 123586500.0 + }, + { + "time": 1398211200, + "open": 14.6, + "high": 14.6653, + "low": 13.8, + "close": 14.04, + "volume": 91764000.0 + }, + { + "time": 1398297600, + "open": 14.0333, + "high": 14.1867, + "low": 13.5467, + "close": 13.8333, + "volume": 67018500.0 + }, + { + "time": 1398384000, + "open": 13.8507, + "high": 13.8867, + "low": 13.1767, + "close": 13.3027, + "volume": 88900500.0 + }, + { + "time": 1398643200, + "open": 13.2667, + "high": 13.586, + "low": 12.7, + "close": 13.28, + "volume": 90400500.0 + }, + { + "time": 1398729600, + "open": 13.3387, + "high": 13.81, + "low": 13.0353, + "close": 13.7, + "volume": 74610000.0 + }, + { + "time": 1398816000, + "open": 13.666, + "high": 13.924, + "low": 13.4187, + "close": 13.9067, + "volume": 55795500.0 + }, + { + "time": 1398902400, + "open": 13.878, + "high": 14.268, + "low": 13.7127, + "close": 13.8167, + "volume": 68469000.0 + }, + { + "time": 1398988800, + "open": 13.9727, + "high": 14.1033, + "low": 13.768, + "close": 14.0867, + "volume": 51756000.0 + }, + { + "time": 1399248000, + "open": 14.1327, + "high": 14.5127, + "low": 13.8673, + "close": 14.4467, + "volume": 62872500.0 + }, + { + "time": 1399334400, + "open": 14.5333, + "high": 14.5773, + "low": 13.7867, + "close": 13.8173, + "volume": 71347500.0 + }, + { + "time": 1399420800, + "open": 13.8867, + "high": 14.05, + "low": 12.254, + "close": 12.406, + "volume": 127287000.0 + }, + { + "time": 1399507200, + "open": 12.53, + "high": 12.96, + "low": 11.8147, + "close": 11.8427, + "volume": 257352000.0 + }, + { + "time": 1399593600, + "open": 11.95, + "high": 12.2267, + "low": 11.8147, + "close": 12.1333, + "volume": 109512000.0 + }, + { + "time": 1399852800, + "open": 12.1333, + "high": 12.4793, + "low": 11.992, + "close": 12.332, + "volume": 91471500.0 + }, + { + "time": 1399939200, + "open": 12.3873, + "high": 12.756, + "low": 12.16, + "close": 12.6793, + "volume": 91531500.0 + }, + { + "time": 1400025600, + "open": 12.7007, + "high": 12.8987, + "low": 12.4733, + "close": 12.73, + "volume": 70441500.0 + }, + { + "time": 1400112000, + "open": 12.6207, + "high": 12.844, + "low": 12.3533, + "close": 12.5787, + "volume": 79266000.0 + }, + { + "time": 1400198400, + "open": 12.5333, + "high": 12.8027, + "low": 12.474, + "close": 12.77, + "volume": 57685500.0 + }, + { + "time": 1400457600, + "open": 12.7707, + "high": 13.1333, + "low": 12.6667, + "close": 13.1333, + "volume": 59709000.0 + }, + { + "time": 1400544000, + "open": 13.08, + "high": 13.2887, + "low": 12.8713, + "close": 12.9793, + "volume": 72919500.0 + }, + { + "time": 1400630400, + "open": 13.0, + "high": 13.3333, + "low": 12.986, + "close": 13.326, + "volume": 67347000.0 + }, + { + "time": 1400716800, + "open": 13.348, + "high": 13.792, + "low": 13.3033, + "close": 13.6507, + "volume": 77029500.0 + }, + { + "time": 1400803200, + "open": 13.6867, + "high": 13.8507, + "low": 13.5, + "close": 13.826, + "volume": 49992000.0 + }, + { + "time": 1401148800, + "open": 13.9333, + "high": 14.258, + "low": 13.8, + "close": 14.078, + "volume": 68053500.0 + }, + { + "time": 1401235200, + "open": 14.0387, + "high": 14.1847, + "low": 13.684, + "close": 14.0, + "volume": 68530500.0 + }, + { + "time": 1401321600, + "open": 14.0133, + "high": 14.166, + "low": 13.848, + "close": 14.0, + "volume": 46740000.0 + }, + { + "time": 1401408000, + "open": 14.0213, + "high": 14.32, + "low": 13.7833, + "close": 13.8227, + "volume": 72352500.0 + }, + { + "time": 1401667200, + "open": 13.8213, + "high": 13.9567, + "low": 13.4447, + "close": 13.5667, + "volume": 59125500.0 + }, + { + "time": 1401753600, + "open": 13.59, + "high": 13.8667, + "low": 13.506, + "close": 13.64, + "volume": 50698500.0 + }, + { + "time": 1401840000, + "open": 13.6473, + "high": 13.7507, + "low": 13.36, + "close": 13.5433, + "volume": 44190000.0 + }, + { + "time": 1401926400, + "open": 13.5827, + "high": 13.9467, + "low": 13.5507, + "close": 13.8, + "volume": 50929500.0 + }, + { + "time": 1402012800, + "open": 13.9267, + "high": 14.054, + "low": 13.812, + "close": 13.858, + "volume": 39301500.0 + }, + { + "time": 1402272000, + "open": 13.8993, + "high": 13.9993, + "low": 13.5867, + "close": 13.602, + "volume": 34545000.0 + }, + { + "time": 1402358400, + "open": 13.5853, + "high": 13.798, + "low": 13.4367, + "close": 13.484, + "volume": 43896000.0 + }, + { + "time": 1402444800, + "open": 13.44, + "high": 13.6667, + "low": 13.2833, + "close": 13.6333, + "volume": 52020000.0 + }, + { + "time": 1402531200, + "open": 13.6493, + "high": 13.992, + "low": 13.514, + "close": 13.5627, + "volume": 78660000.0 + }, + { + "time": 1402617600, + "open": 13.596, + "high": 13.816, + "low": 13.4387, + "close": 13.7227, + "volume": 91671000.0 + }, + { + "time": 1402876800, + "open": 13.8, + "high": 15.0327, + "low": 13.694, + "close": 15.0, + "volume": 171028500.0 + }, + { + "time": 1402963200, + "open": 14.9767, + "high": 15.7027, + "low": 14.8567, + "close": 15.3667, + "volume": 169213500.0 + }, + { + "time": 1403049600, + "open": 15.3713, + "high": 15.4993, + "low": 15.0747, + "close": 15.12, + "volume": 89343000.0 + }, + { + "time": 1403136000, + "open": 15.1547, + "high": 15.6873, + "low": 15.0667, + "close": 15.0687, + "volume": 114487500.0 + }, + { + "time": 1403222400, + "open": 15.202, + "high": 15.4193, + "low": 15.08, + "close": 15.2667, + "volume": 63924000.0 + }, + { + "time": 1403481600, + "open": 15.264, + "high": 15.9327, + "low": 15.2147, + "close": 15.846, + "volume": 100888500.0 + }, + { + "time": 1403568000, + "open": 15.82, + "high": 16.1253, + "low": 15.442, + "close": 15.5133, + "volume": 104314500.0 + }, + { + "time": 1403654400, + "open": 15.472, + "high": 15.8367, + "low": 15.3493, + "close": 15.7833, + "volume": 74611500.0 + }, + { + "time": 1403740800, + "open": 15.7853, + "high": 16.0267, + "low": 15.614, + "close": 15.6733, + "volume": 65886000.0 + }, + { + "time": 1403827200, + "open": 15.6667, + "high": 16.0, + "low": 15.5667, + "close": 15.9573, + "volume": 75367500.0 + }, + { + "time": 1404086400, + "open": 15.868, + "high": 16.2993, + "low": 15.868, + "close": 16.0233, + "volume": 61995000.0 + }, + { + "time": 1404172800, + "open": 16.066, + "high": 16.2293, + "low": 15.9133, + "close": 15.9633, + "volume": 53196000.0 + }, + { + "time": 1404259200, + "open": 15.9667, + "high": 16.1553, + "low": 15.138, + "close": 15.32, + "volume": 102298500.0 + }, + { + "time": 1404345600, + "open": 15.3333, + "high": 15.5933, + "low": 14.9333, + "close": 15.2327, + "volume": 66034500.0 + }, + { + "time": 1404691200, + "open": 15.2113, + "high": 15.3333, + "low": 14.6933, + "close": 14.7833, + "volume": 74419500.0 + }, + { + "time": 1404777600, + "open": 14.8667, + "high": 14.8667, + "low": 14.2847, + "close": 14.598, + "volume": 101098500.0 + }, + { + "time": 1404864000, + "open": 14.6107, + "high": 14.948, + "low": 14.5993, + "close": 14.8667, + "volume": 50980500.0 + }, + { + "time": 1404950400, + "open": 14.8347, + "high": 14.8667, + "low": 14.4027, + "close": 14.62, + "volume": 63258000.0 + }, + { + "time": 1405036800, + "open": 14.6587, + "high": 14.7927, + "low": 14.4667, + "close": 14.502, + "volume": 41347500.0 + }, + { + "time": 1405296000, + "open": 14.6827, + "high": 15.2527, + "low": 14.3633, + "close": 15.1333, + "volume": 92257500.0 + }, + { + "time": 1405382400, + "open": 15.1707, + "high": 15.2, + "low": 14.54, + "close": 14.62, + "volume": 71305500.0 + }, + { + "time": 1405468800, + "open": 14.6533, + "high": 14.9867, + "low": 14.4273, + "close": 14.4387, + "volume": 51513000.0 + }, + { + "time": 1405555200, + "open": 14.4467, + "high": 14.7033, + "low": 14.2333, + "close": 14.3247, + "volume": 57648000.0 + }, + { + "time": 1405641600, + "open": 14.35, + "high": 14.7473, + "low": 14.3333, + "close": 14.68, + "volume": 53826000.0 + }, + { + "time": 1405900800, + "open": 14.6813, + "high": 14.8807, + "low": 14.448, + "close": 14.6993, + "volume": 49165500.0 + }, + { + "time": 1405987200, + "open": 14.836, + "high": 14.8867, + "low": 14.6073, + "close": 14.6407, + "volume": 35058000.0 + }, + { + "time": 1406073600, + "open": 14.628, + "high": 14.9833, + "low": 14.628, + "close": 14.906, + "volume": 39615000.0 + }, + { + "time": 1406160000, + "open": 14.9053, + "high": 15.0067, + "low": 14.72, + "close": 14.8347, + "volume": 39552000.0 + }, + { + "time": 1406246400, + "open": 14.824, + "high": 15.1313, + "low": 14.77, + "close": 14.914, + "volume": 39411000.0 + }, + { + "time": 1406505600, + "open": 14.894, + "high": 15.4667, + "low": 14.76, + "close": 14.9767, + "volume": 84943500.0 + }, + { + "time": 1406592000, + "open": 15.024, + "high": 15.22, + "low": 14.944, + "close": 15.0533, + "volume": 41269500.0 + }, + { + "time": 1406678400, + "open": 15.0333, + "high": 15.3067, + "low": 14.6833, + "close": 15.2867, + "volume": 60807000.0 + }, + { + "time": 1406764800, + "open": 15.3573, + "high": 15.4713, + "low": 13.9147, + "close": 14.8727, + "volume": 96696000.0 + }, + { + "time": 1406851200, + "open": 14.8333, + "high": 15.8333, + "low": 14.388, + "close": 15.54, + "volume": 153400500.0 + }, + { + "time": 1407110400, + "open": 15.6653, + "high": 16.0333, + "low": 15.4667, + "close": 15.8867, + "volume": 75952500.0 + }, + { + "time": 1407196800, + "open": 15.9087, + "high": 16.1993, + "low": 15.7127, + "close": 15.9287, + "volume": 67884000.0 + }, + { + "time": 1407283200, + "open": 15.9467, + "high": 16.7613, + "low": 15.8167, + "close": 16.536, + "volume": 118677000.0 + }, + { + "time": 1407369600, + "open": 16.5667, + "high": 17.1127, + "low": 16.5067, + "close": 16.8033, + "volume": 95010000.0 + }, + { + "time": 1407456000, + "open": 16.752, + "high": 16.826, + "low": 16.4333, + "close": 16.5473, + "volume": 64384500.0 + }, + { + "time": 1407715200, + "open": 16.8327, + "high": 17.5827, + "low": 16.5333, + "close": 17.2627, + "volume": 101056500.0 + }, + { + "time": 1407801600, + "open": 17.3587, + "high": 17.3813, + "low": 16.972, + "close": 17.3333, + "volume": 74634000.0 + }, + { + "time": 1407888000, + "open": 17.39, + "high": 17.7093, + "low": 17.3073, + "close": 17.532, + "volume": 88335000.0 + }, + { + "time": 1407974400, + "open": 17.5867, + "high": 17.5927, + "low": 17.236, + "close": 17.41, + "volume": 51877500.0 + }, + { + "time": 1408060800, + "open": 17.4953, + "high": 17.5193, + "low": 17.2333, + "close": 17.4667, + "volume": 47685000.0 + }, + { + "time": 1408320000, + "open": 17.5333, + "high": 17.8173, + "low": 17.2833, + "close": 17.2833, + "volume": 71943000.0 + }, + { + "time": 1408406400, + "open": 17.3313, + "high": 17.4, + "low": 16.7747, + "close": 17.0787, + "volume": 66840000.0 + }, + { + "time": 1408492800, + "open": 17.0153, + "high": 17.2493, + "low": 16.8667, + "close": 17.0167, + "volume": 38166000.0 + }, + { + "time": 1408579200, + "open": 17.0667, + "high": 17.2533, + "low": 16.884, + "close": 16.96, + "volume": 37018500.0 + }, + { + "time": 1408665600, + "open": 16.9267, + "high": 17.1413, + "low": 16.8407, + "close": 17.116, + "volume": 35620500.0 + }, + { + "time": 1408924800, + "open": 17.2, + "high": 17.5787, + "low": 17.1333, + "close": 17.51, + "volume": 55287000.0 + }, + { + "time": 1409011200, + "open": 17.5333, + "high": 17.706, + "low": 17.44, + "close": 17.468, + "volume": 47110500.0 + }, + { + "time": 1409097600, + "open": 17.5, + "high": 17.616, + "low": 17.3527, + "close": 17.55, + "volume": 38287500.0 + }, + { + "time": 1409184000, + "open": 17.4273, + "high": 17.632, + "low": 17.41, + "close": 17.606, + "volume": 36576000.0 + }, + { + "time": 1409270400, + "open": 17.666, + "high": 18.1333, + "low": 17.666, + "close": 17.9833, + "volume": 82822500.0 + }, + { + "time": 1409616000, + "open": 18.0067, + "high": 18.9927, + "low": 18.0067, + "close": 18.9733, + "volume": 122932500.0 + }, + { + "time": 1409702400, + "open": 18.9967, + "high": 19.2513, + "low": 18.6733, + "close": 18.7067, + "volume": 83658000.0 + }, + { + "time": 1409788800, + "open": 18.8133, + "high": 19.428, + "low": 18.62, + "close": 19.1133, + "volume": 104331000.0 + }, + { + "time": 1409875200, + "open": 19.198, + "high": 19.2607, + "low": 18.1673, + "close": 18.442, + "volume": 136144500.0 + }, + { + "time": 1410134400, + "open": 18.5433, + "high": 18.992, + "low": 18.4927, + "close": 18.8, + "volume": 69922500.0 + }, + { + "time": 1410220800, + "open": 18.8313, + "high": 19.0327, + "low": 18.4667, + "close": 18.5933, + "volume": 57493500.0 + }, + { + "time": 1410307200, + "open": 18.6, + "high": 18.7647, + "low": 18.244, + "close": 18.7533, + "volume": 46741500.0 + }, + { + "time": 1410393600, + "open": 18.8, + "high": 18.986, + "low": 18.5753, + "close": 18.6767, + "volume": 48127500.0 + }, + { + "time": 1410480000, + "open": 18.7193, + "high": 18.826, + "low": 18.4667, + "close": 18.59, + "volume": 41457000.0 + }, + { + "time": 1410739200, + "open": 18.5413, + "high": 18.5413, + "low": 16.6087, + "close": 17.0, + "volume": 209746500.0 + }, + { + "time": 1410825600, + "open": 17.1153, + "high": 17.4973, + "low": 16.828, + "close": 17.38, + "volume": 106606500.0 + }, + { + "time": 1410912000, + "open": 17.4967, + "high": 17.6467, + "low": 17.3, + "close": 17.434, + "volume": 65944500.0 + }, + { + "time": 1410998400, + "open": 17.5413, + "high": 17.7067, + "low": 17.4253, + "close": 17.55, + "volume": 47353500.0 + }, + { + "time": 1411084800, + "open": 17.6, + "high": 17.6333, + "low": 17.0087, + "close": 17.2307, + "volume": 87552000.0 + }, + { + "time": 1411344000, + "open": 17.2187, + "high": 17.3133, + "low": 16.314, + "close": 16.5333, + "volume": 104559000.0 + }, + { + "time": 1411430400, + "open": 16.4327, + "high": 16.92, + "low": 16.2333, + "close": 16.66, + "volume": 73747500.0 + }, + { + "time": 1411516800, + "open": 16.63, + "high": 16.856, + "low": 16.4693, + "close": 16.7967, + "volume": 48142500.0 + }, + { + "time": 1411603200, + "open": 16.918, + "high": 16.9973, + "low": 16.4067, + "close": 16.48, + "volume": 61905000.0 + }, + { + "time": 1411689600, + "open": 16.4707, + "high": 16.6487, + "low": 16.4047, + "close": 16.4367, + "volume": 49257000.0 + }, + { + "time": 1411948800, + "open": 16.3587, + "high": 16.576, + "low": 16.0467, + "close": 16.3133, + "volume": 61668000.0 + }, + { + "time": 1412035200, + "open": 16.3673, + "high": 16.51, + "low": 16.008, + "close": 16.1933, + "volume": 54453000.0 + }, + { + "time": 1412121600, + "open": 16.1667, + "high": 16.2333, + "low": 15.71, + "close": 16.0573, + "volume": 75615000.0 + }, + { + "time": 1412208000, + "open": 16.0973, + "high": 16.9867, + "low": 16.0413, + "close": 16.724, + "volume": 118692000.0 + }, + { + "time": 1412294400, + "open": 16.8667, + "high": 17.1, + "low": 16.7353, + "close": 17.0667, + "volume": 70530000.0 + }, + { + "time": 1412553600, + "open": 17.0767, + "high": 17.4993, + "low": 17.014, + "close": 17.35, + "volume": 102403500.0 + }, + { + "time": 1412640000, + "open": 17.3547, + "high": 17.4307, + "low": 17.0487, + "close": 17.3267, + "volume": 59218500.0 + }, + { + "time": 1412726400, + "open": 17.3267, + "high": 17.5253, + "low": 16.8427, + "close": 17.352, + "volume": 63711000.0 + }, + { + "time": 1412812800, + "open": 17.466, + "high": 17.7027, + "low": 16.96, + "close": 17.2373, + "volume": 94407000.0 + }, + { + "time": 1412899200, + "open": 16.7993, + "high": 16.8667, + "low": 15.68, + "close": 15.8133, + "volume": 167515500.0 + }, + { + "time": 1413158400, + "open": 15.8067, + "high": 16.0193, + "low": 14.6667, + "close": 14.87, + "volume": 145405500.0 + }, + { + "time": 1413244800, + "open": 15.0, + "high": 15.498, + "low": 14.8667, + "close": 15.2493, + "volume": 89052000.0 + }, + { + "time": 1413331200, + "open": 15.2013, + "high": 15.3993, + "low": 14.488, + "close": 14.8993, + "volume": 116542500.0 + }, + { + "time": 1413417600, + "open": 14.8667, + "high": 15.328, + "low": 14.5, + "close": 15.1053, + "volume": 66036000.0 + }, + { + "time": 1413504000, + "open": 15.286, + "high": 15.6513, + "low": 15.09, + "close": 15.1633, + "volume": 146335500.0 + }, + { + "time": 1413763200, + "open": 15.2693, + "high": 15.4933, + "low": 14.8747, + "close": 15.388, + "volume": 43081500.0 + }, + { + "time": 1413849600, + "open": 15.4667, + "high": 15.7167, + "low": 15.226, + "close": 15.6333, + "volume": 49818000.0 + }, + { + "time": 1413936000, + "open": 15.6107, + "high": 15.826, + "low": 15.3707, + "close": 15.4567, + "volume": 50922000.0 + }, + { + "time": 1414022400, + "open": 15.554, + "high": 15.752, + "low": 15.4067, + "close": 15.69, + "volume": 44418000.0 + }, + { + "time": 1414108800, + "open": 15.6573, + "high": 15.8533, + "low": 15.4133, + "close": 15.7067, + "volume": 44964000.0 + }, + { + "time": 1414368000, + "open": 15.7107, + "high": 15.7333, + "low": 14.6873, + "close": 14.792, + "volume": 122512500.0 + }, + { + "time": 1414454400, + "open": 14.9333, + "high": 16.3067, + "low": 14.9333, + "close": 16.0307, + "volume": 136755000.0 + }, + { + "time": 1414540800, + "open": 16.1653, + "high": 16.2667, + "low": 15.7093, + "close": 15.8607, + "volume": 64392000.0 + }, + { + "time": 1414627200, + "open": 15.8667, + "high": 16.0333, + "low": 15.6407, + "close": 15.9107, + "volume": 41557500.0 + }, + { + "time": 1414713600, + "open": 16.1267, + "high": 16.2333, + "low": 15.9167, + "close": 16.1127, + "volume": 95433000.0 + }, + { + "time": 1414972800, + "open": 16.1533, + "high": 16.504, + "low": 16.088, + "close": 16.152, + "volume": 53284500.0 + }, + { + "time": 1415059200, + "open": 16.2013, + "high": 16.2267, + "low": 15.7687, + "close": 15.9993, + "volume": 45828000.0 + }, + { + "time": 1415145600, + "open": 16.0967, + "high": 16.6267, + "low": 14.4667, + "close": 16.46, + "volume": 110295000.0 + }, + { + "time": 1415232000, + "open": 16.4, + "high": 16.446, + "low": 15.2333, + "close": 16.12, + "volume": 199843500.0 + }, + { + "time": 1415318400, + "open": 16.332, + "high": 16.332, + "low": 15.8133, + "close": 15.9907, + "volume": 66370500.0 + }, + { + "time": 1415577600, + "open": 16.036, + "high": 16.192, + "low": 15.7867, + "close": 16.152, + "volume": 60531000.0 + }, + { + "time": 1415664000, + "open": 16.1347, + "high": 16.788, + "low": 16.0973, + "close": 16.74, + "volume": 104346000.0 + }, + { + "time": 1415750400, + "open": 16.7467, + "high": 16.8227, + "low": 16.372, + "close": 16.6593, + "volume": 74176500.0 + }, + { + "time": 1415836800, + "open": 16.6767, + "high": 17.05, + "low": 16.6067, + "close": 16.8, + "volume": 83121000.0 + }, + { + "time": 1415923200, + "open": 16.7813, + "high": 17.2567, + "low": 16.4467, + "close": 17.2233, + "volume": 80746500.0 + }, + { + "time": 1416182400, + "open": 17.1833, + "high": 17.2667, + "low": 16.8013, + "close": 16.93, + "volume": 106527000.0 + }, + { + "time": 1416268800, + "open": 16.9573, + "high": 17.3327, + "low": 16.8667, + "close": 17.1733, + "volume": 59107500.0 + }, + { + "time": 1416355200, + "open": 17.1833, + "high": 17.1973, + "low": 16.3733, + "close": 16.5687, + "volume": 102915000.0 + }, + { + "time": 1416441600, + "open": 16.4367, + "high": 16.7287, + "low": 16.4, + "close": 16.6327, + "volume": 46186500.0 + }, + { + "time": 1416528000, + "open": 16.656, + "high": 16.8667, + "low": 16.12, + "close": 16.1513, + "volume": 98868000.0 + }, + { + "time": 1416787200, + "open": 16.3153, + "high": 16.5567, + "low": 16.0427, + "close": 16.4253, + "volume": 62733000.0 + }, + { + "time": 1416873600, + "open": 16.5053, + "high": 16.648, + "low": 16.4, + "close": 16.566, + "volume": 41280000.0 + }, + { + "time": 1416960000, + "open": 16.582, + "high": 16.6, + "low": 16.44, + "close": 16.592, + "volume": 25401000.0 + }, + { + "time": 1417132800, + "open": 16.486, + "high": 16.6433, + "low": 16.168, + "close": 16.2733, + "volume": 26473500.0 + }, + { + "time": 1417392000, + "open": 16.162, + "high": 16.3647, + "low": 15.2673, + "close": 15.4993, + "volume": 111850500.0 + }, + { + "time": 1417478400, + "open": 15.5733, + "high": 15.8127, + "low": 15.2, + "close": 15.4653, + "volume": 77887500.0 + }, + { + "time": 1417564800, + "open": 15.4933, + "high": 15.512, + "low": 15.0333, + "close": 15.3327, + "volume": 68868000.0 + }, + { + "time": 1417651200, + "open": 15.3327, + "high": 15.5033, + "low": 15.154, + "close": 15.1913, + "volume": 50370000.0 + }, + { + "time": 1417737600, + "open": 15.234, + "high": 15.3653, + "low": 14.7893, + "close": 14.9667, + "volume": 79653000.0 + }, + { + "time": 1417996800, + "open": 14.9193, + "high": 14.9907, + "low": 14.1333, + "close": 14.3193, + "volume": 121050000.0 + }, + { + "time": 1418083200, + "open": 14.1333, + "high": 14.5153, + "low": 13.618, + "close": 14.4167, + "volume": 124179000.0 + }, + { + "time": 1418169600, + "open": 14.4833, + "high": 14.5233, + "low": 13.8467, + "close": 13.9407, + "volume": 96352500.0 + }, + { + "time": 1418256000, + "open": 13.9833, + "high": 14.362, + "low": 13.8193, + "close": 13.8667, + "volume": 86691000.0 + }, + { + "time": 1418342400, + "open": 13.8387, + "high": 14.112, + "low": 13.602, + "close": 13.86, + "volume": 93274500.0 + }, + { + "time": 1418601600, + "open": 14.05, + "high": 14.05, + "low": 13.5113, + "close": 13.5667, + "volume": 67555500.0 + }, + { + "time": 1418688000, + "open": 13.6, + "high": 13.6, + "low": 13.0247, + "close": 13.1667, + "volume": 109290000.0 + }, + { + "time": 1418774400, + "open": 13.1873, + "high": 13.7793, + "low": 12.8333, + "close": 13.77, + "volume": 95917500.0 + }, + { + "time": 1418860800, + "open": 13.9627, + "high": 14.5913, + "low": 13.9627, + "close": 14.5507, + "volume": 95482500.0 + }, + { + "time": 1418947200, + "open": 14.7273, + "high": 14.8113, + "low": 14.3, + "close": 14.6127, + "volume": 91818000.0 + }, + { + "time": 1419206400, + "open": 14.6667, + "high": 14.9373, + "low": 14.5507, + "close": 14.8367, + "volume": 63783000.0 + }, + { + "time": 1419292800, + "open": 14.8653, + "high": 14.9667, + "low": 14.6347, + "close": 14.7, + "volume": 58047000.0 + }, + { + "time": 1419379200, + "open": 14.7313, + "high": 14.8333, + "low": 14.6167, + "close": 14.8307, + "volume": 17316000.0 + }, + { + "time": 1419552000, + "open": 14.8267, + "high": 15.2333, + "low": 14.7647, + "close": 15.1893, + "volume": 43195500.0 + }, + { + "time": 1419811200, + "open": 15.1433, + "high": 15.194, + "low": 14.9347, + "close": 15.046, + "volume": 35398500.0 + }, + { + "time": 1419897600, + "open": 14.9247, + "high": 15.0667, + "low": 14.76, + "close": 14.838, + "volume": 38286000.0 + }, + { + "time": 1419984000, + "open": 14.838, + "high": 15.0453, + "low": 14.8153, + "close": 14.8267, + "volume": 30895500.0 + }, + { + "time": 1420156800, + "open": 14.886, + "high": 14.9333, + "low": 14.2173, + "close": 14.62, + "volume": 60666000.0 + }, + { + "time": 1420416000, + "open": 14.57, + "high": 14.57, + "low": 13.8107, + "close": 13.908, + "volume": 68766000.0 + }, + { + "time": 1420502400, + "open": 13.9333, + "high": 14.28, + "low": 13.614, + "close": 14.0933, + "volume": 81739500.0 + }, + { + "time": 1420588800, + "open": 14.1867, + "high": 14.3187, + "low": 13.9853, + "close": 14.0733, + "volume": 38506500.0 + }, + { + "time": 1420675200, + "open": 14.1613, + "high": 14.3213, + "low": 14.0007, + "close": 14.0633, + "volume": 43804500.0 + }, + { + "time": 1420761600, + "open": 13.8607, + "high": 14.0533, + "low": 13.664, + "close": 13.75, + "volume": 60375000.0 + }, + { + "time": 1421020800, + "open": 13.7047, + "high": 13.7047, + "low": 13.2833, + "close": 13.4873, + "volume": 77257500.0 + }, + { + "time": 1421107200, + "open": 13.4267, + "high": 13.8407, + "low": 12.5333, + "close": 12.7967, + "volume": 56380500.0 + }, + { + "time": 1421193600, + "open": 12.8013, + "high": 13.0133, + "low": 12.2333, + "close": 12.8533, + "volume": 149176500.0 + }, + { + "time": 1421280000, + "open": 12.936, + "high": 13.05, + "low": 12.6367, + "close": 12.74, + "volume": 68364000.0 + }, + { + "time": 1421366400, + "open": 12.7047, + "high": 12.966, + "low": 12.3367, + "close": 12.8953, + "volume": 46059000.0 + }, + { + "time": 1421712000, + "open": 12.89, + "high": 13.0193, + "low": 12.4693, + "close": 12.84, + "volume": 57217500.0 + }, + { + "time": 1421798400, + "open": 12.652, + "high": 13.2453, + "low": 12.3333, + "close": 13.104, + "volume": 54037500.0 + }, + { + "time": 1421884800, + "open": 13.2387, + "high": 13.5493, + "low": 13.0133, + "close": 13.5167, + "volume": 53611500.0 + }, + { + "time": 1421971200, + "open": 13.4833, + "high": 13.5667, + "low": 13.222, + "close": 13.4093, + "volume": 43978500.0 + }, + { + "time": 1422230400, + "open": 13.3913, + "high": 13.908, + "low": 13.3667, + "close": 13.782, + "volume": 41752500.0 + }, + { + "time": 1422316800, + "open": 13.8, + "high": 13.8687, + "low": 13.48, + "close": 13.7933, + "volume": 35581500.0 + }, + { + "time": 1422403200, + "open": 13.8253, + "high": 13.8633, + "low": 13.228, + "close": 13.3333, + "volume": 40210500.0 + }, + { + "time": 1422489600, + "open": 13.2673, + "high": 13.732, + "low": 13.1, + "close": 13.6907, + "volume": 42373500.0 + }, + { + "time": 1422576000, + "open": 13.7333, + "high": 13.8313, + "low": 13.5333, + "close": 13.5667, + "volume": 39295500.0 + }, + { + "time": 1422835200, + "open": 13.574, + "high": 14.13, + "low": 13.5533, + "close": 14.0007, + "volume": 54160500.0 + }, + { + "time": 1422921600, + "open": 14.2, + "high": 14.6913, + "low": 14.0333, + "close": 14.5733, + "volume": 62689500.0 + }, + { + "time": 1423008000, + "open": 14.4907, + "high": 14.7653, + "low": 14.4533, + "close": 14.5167, + "volume": 40846500.0 + }, + { + "time": 1423094400, + "open": 14.5853, + "high": 15.032, + "low": 14.57, + "close": 14.73, + "volume": 45030000.0 + }, + { + "time": 1423180800, + "open": 14.6673, + "high": 14.8933, + "low": 14.4333, + "close": 14.45, + "volume": 41568000.0 + }, + { + "time": 1423440000, + "open": 14.4333, + "high": 14.5533, + "low": 14.1327, + "close": 14.5007, + "volume": 45162000.0 + }, + { + "time": 1423526400, + "open": 14.4747, + "high": 14.7, + "low": 14.268, + "close": 14.32, + "volume": 70638000.0 + }, + { + "time": 1423612800, + "open": 14.3267, + "high": 14.5227, + "low": 13.4, + "close": 13.6333, + "volume": 122290500.0 + }, + { + "time": 1423699200, + "open": 13.6327, + "high": 13.6327, + "low": 12.8747, + "close": 13.5233, + "volume": 202587000.0 + }, + { + "time": 1423785600, + "open": 13.6667, + "high": 13.7327, + "low": 13.394, + "close": 13.5213, + "volume": 77947500.0 + }, + { + "time": 1424131200, + "open": 13.7333, + "high": 13.8087, + "low": 13.4333, + "close": 13.6567, + "volume": 48615000.0 + }, + { + "time": 1424217600, + "open": 13.6627, + "high": 13.7447, + "low": 13.5067, + "close": 13.6, + "volume": 66528000.0 + }, + { + "time": 1424304000, + "open": 13.626, + "high": 14.1627, + "low": 13.5833, + "close": 14.1067, + "volume": 65745000.0 + }, + { + "time": 1424390400, + "open": 14.106, + "high": 14.5067, + "low": 13.98, + "close": 14.4767, + "volume": 78301500.0 + }, + { + "time": 1424649600, + "open": 14.4, + "high": 14.5467, + "low": 13.7553, + "close": 13.7767, + "volume": 112644000.0 + }, + { + "time": 1424736000, + "open": 13.792, + "high": 13.8573, + "low": 13.4467, + "close": 13.5633, + "volume": 87600000.0 + }, + { + "time": 1424822400, + "open": 13.5667, + "high": 13.8093, + "low": 13.5053, + "close": 13.59, + "volume": 52257000.0 + }, + { + "time": 1424908800, + "open": 13.6147, + "high": 14.0727, + "low": 13.4813, + "close": 13.824, + "volume": 86088000.0 + }, + { + "time": 1424995200, + "open": 13.8267, + "high": 13.9033, + "low": 13.52, + "close": 13.5567, + "volume": 50161500.0 + }, + { + "time": 1425254400, + "open": 13.5333, + "high": 13.5733, + "low": 13.0547, + "close": 13.1533, + "volume": 101004000.0 + }, + { + "time": 1425340800, + "open": 13.1867, + "high": 13.35, + "low": 13.0213, + "close": 13.2933, + "volume": 57592500.0 + }, + { + "time": 1425427200, + "open": 13.2447, + "high": 13.5013, + "low": 13.1473, + "close": 13.45, + "volume": 57156000.0 + }, + { + "time": 1425513600, + "open": 13.5353, + "high": 13.746, + "low": 13.3407, + "close": 13.3573, + "volume": 65712000.0 + }, + { + "time": 1425600000, + "open": 13.3347, + "high": 13.4, + "low": 12.81, + "close": 12.978, + "volume": 87417000.0 + }, + { + "time": 1425859200, + "open": 12.898, + "high": 12.974, + "low": 12.55, + "close": 12.75, + "volume": 87274500.0 + }, + { + "time": 1425945600, + "open": 12.6667, + "high": 12.9, + "low": 12.5067, + "close": 12.688, + "volume": 69730500.0 + }, + { + "time": 1426032000, + "open": 12.7, + "high": 13.0787, + "low": 12.6953, + "close": 12.9007, + "volume": 64245000.0 + }, + { + "time": 1426118400, + "open": 12.9167, + "high": 12.9633, + "low": 12.65, + "close": 12.7573, + "volume": 53023500.0 + }, + { + "time": 1426204800, + "open": 12.7573, + "high": 12.7867, + "low": 12.4733, + "close": 12.58, + "volume": 67867500.0 + }, + { + "time": 1432598400, + "open": 16.4667, + "high": 16.8, + "low": 16.4333, + "close": 16.5, + "volume": 43978500.0 + }, + { + "time": 1432684800, + "open": 16.5733, + "high": 16.6593, + "low": 16.37, + "close": 16.5013, + "volume": 43153500.0 + }, + { + "time": 1432771200, + "open": 16.4907, + "high": 16.79, + "low": 16.3367, + "close": 16.7773, + "volume": 44253000.0 + }, + { + "time": 1432857600, + "open": 16.7587, + "high": 16.858, + "low": 16.6287, + "close": 16.7167, + "volume": 49329570.0 + }, + { + "time": 1433116800, + "open": 16.7987, + "high": 16.8, + "low": 16.498, + "close": 16.63, + "volume": 31530225.0 + }, + { + "time": 1433203200, + "open": 16.616, + "high": 16.6667, + "low": 16.42, + "close": 16.5467, + "volume": 26885745.0 + }, + { + "time": 1433289600, + "open": 16.6, + "high": 16.7147, + "low": 16.4673, + "close": 16.6033, + "volume": 22884615.0 + }, + { + "time": 1433376000, + "open": 16.4807, + "high": 16.62, + "low": 16.3667, + "close": 16.3667, + "volume": 30814980.0 + }, + { + "time": 1433462400, + "open": 16.384, + "high": 16.6467, + "low": 16.3533, + "close": 16.61, + "volume": 40628865.0 + }, + { + "time": 1433721600, + "open": 16.6873, + "high": 17.25, + "low": 16.58, + "close": 17.1233, + "volume": 65460270.0 + }, + { + "time": 1433808000, + "open": 17.0333, + "high": 17.1827, + "low": 16.9427, + "close": 16.9807, + "volume": 32805165.0 + }, + { + "time": 1433894400, + "open": 17.0667, + "high": 17.1033, + "low": 16.5487, + "close": 16.7133, + "volume": 43567065.0 + }, + { + "time": 1433980800, + "open": 16.8333, + "high": 16.9793, + "low": 16.6953, + "close": 16.7167, + "volume": 26028345.0 + }, + { + "time": 1434067200, + "open": 16.7073, + "high": 16.8973, + "low": 16.6767, + "close": 16.7307, + "volume": 18391890.0 + }, + { + "time": 1434326400, + "open": 16.6947, + "high": 16.752, + "low": 16.4007, + "close": 16.6973, + "volume": 27654165.0 + }, + { + "time": 1434412800, + "open": 16.6287, + "high": 16.896, + "low": 16.606, + "close": 16.882, + "volume": 24904965.0 + }, + { + "time": 1434499200, + "open": 16.8833, + "high": 17.624, + "low": 16.8, + "close": 17.4207, + "volume": 70233015.0 + }, + { + "time": 1434585600, + "open": 17.3647, + "high": 17.564, + "low": 17.3333, + "close": 17.46, + "volume": 35891805.0 + }, + { + "time": 1434672000, + "open": 17.5147, + "high": 17.5867, + "low": 17.34, + "close": 17.5, + "volume": 32618625.0 + }, + { + "time": 1434931200, + "open": 17.7, + "high": 17.7313, + "low": 17.046, + "close": 17.3233, + "volume": 60604575.0 + }, + { + "time": 1435017600, + "open": 17.3713, + "high": 17.8667, + "low": 17.238, + "close": 17.84, + "volume": 50767455.0 + }, + { + "time": 1435104000, + "open": 17.8547, + "high": 17.8547, + "low": 17.5813, + "close": 17.66, + "volume": 29859885.0 + }, + { + "time": 1435190400, + "open": 17.732, + "high": 18.094, + "low": 17.68, + "close": 17.9133, + "volume": 37257870.0 + }, + { + "time": 1435276800, + "open": 17.9067, + "high": 17.9673, + "low": 17.7333, + "close": 17.8173, + "volume": 46306020.0 + }, + { + "time": 1435536000, + "open": 17.6, + "high": 17.73, + "low": 17.3267, + "close": 17.4833, + "volume": 44892210.0 + }, + { + "time": 1435622400, + "open": 17.482, + "high": 18.0613, + "low": 17.482, + "close": 17.9167, + "volume": 40032600.0 + }, + { + "time": 1435708800, + "open": 17.9667, + "high": 18.2333, + "low": 17.8567, + "close": 17.9567, + "volume": 26522145.0 + }, + { + "time": 1435795200, + "open": 17.956, + "high": 18.8453, + "low": 17.9067, + "close": 18.6507, + "volume": 89596185.0 + }, + { + "time": 1436140800, + "open": 18.5993, + "high": 18.7913, + "low": 18.42, + "close": 18.6867, + "volume": 51407370.0 + }, + { + "time": 1436227200, + "open": 18.4233, + "high": 18.4933, + "low": 17.3847, + "close": 17.71, + "volume": 76788555.0 + }, + { + "time": 1436313600, + "open": 17.5673, + "high": 17.5993, + "low": 16.954, + "close": 17.0147, + "volume": 77151690.0 + }, + { + "time": 1436400000, + "open": 17.24, + "high": 17.532, + "low": 17.1193, + "close": 17.2667, + "volume": 42350805.0 + }, + { + "time": 1436486400, + "open": 17.294, + "high": 17.6467, + "low": 17.188, + "close": 17.2787, + "volume": 32995410.0 + }, + { + "time": 1436745600, + "open": 17.4133, + "high": 17.5227, + "low": 17.07, + "close": 17.46, + "volume": 37339440.0 + }, + { + "time": 1436832000, + "open": 17.536, + "high": 17.7867, + "low": 17.3673, + "close": 17.6833, + "volume": 23937300.0 + }, + { + "time": 1436918400, + "open": 17.7853, + "high": 17.9033, + "low": 17.4067, + "close": 17.5213, + "volume": 24810810.0 + }, + { + "time": 1437004800, + "open": 17.6873, + "high": 18.0587, + "low": 17.544, + "close": 17.9667, + "volume": 19932795.0 + }, + { + "time": 1437091200, + "open": 18.0193, + "high": 18.3693, + "low": 17.8833, + "close": 18.31, + "volume": 64817235.0 + }, + { + "time": 1437350400, + "open": 18.4333, + "high": 19.11, + "low": 18.1693, + "close": 18.8267, + "volume": 62984370.0 + }, + { + "time": 1437436800, + "open": 18.8313, + "high": 18.8313, + "low": 17.608, + "close": 17.6667, + "volume": 76316850.0 + }, + { + "time": 1437523200, + "open": 17.6333, + "high": 17.9627, + "low": 17.3333, + "close": 17.858, + "volume": 38555175.0 + }, + { + "time": 1437609600, + "open": 18.0067, + "high": 18.0067, + "low": 17.6847, + "close": 17.8533, + "volume": 28486500.0 + }, + { + "time": 1437696000, + "open": 17.9267, + "high": 18.0727, + "low": 17.5947, + "close": 17.7067, + "volume": 37048095.0 + }, + { + "time": 1437955200, + "open": 17.682, + "high": 17.682, + "low": 16.7193, + "close": 16.88, + "volume": 60568065.0 + }, + { + "time": 1438041600, + "open": 17.0113, + "high": 17.6933, + "low": 16.7887, + "close": 17.6933, + "volume": 48846450.0 + }, + { + "time": 1438128000, + "open": 17.7187, + "high": 17.8593, + "low": 17.4667, + "close": 17.5753, + "volume": 34009380.0 + }, + { + "time": 1438214400, + "open": 17.6133, + "high": 17.8293, + "low": 17.474, + "close": 17.7987, + "volume": 26370390.0 + }, + { + "time": 1438300800, + "open": 17.8767, + "high": 17.9573, + "low": 17.674, + "close": 17.6933, + "volume": 27594270.0 + }, + { + "time": 1438560000, + "open": 17.7333, + "high": 17.842, + "low": 17.138, + "close": 17.3433, + "volume": 32603745.0 + }, + { + "time": 1438646400, + "open": 17.338, + "high": 17.7813, + "low": 17.2227, + "close": 17.6833, + "volume": 28507875.0 + }, + { + "time": 1438732800, + "open": 17.7933, + "high": 18.4667, + "low": 16.3333, + "close": 17.0, + "volume": 68174265.0 + }, + { + "time": 1438819200, + "open": 17.0133, + "high": 17.0493, + "low": 15.7413, + "close": 16.3833, + "volume": 189249225.0 + }, + { + "time": 1438905600, + "open": 16.3533, + "high": 16.4087, + "low": 15.8927, + "close": 16.1673, + "volume": 67028235.0 + }, + { + "time": 1439164800, + "open": 16.1333, + "high": 16.198, + "low": 15.7367, + "close": 16.04, + "volume": 53537460.0 + }, + { + "time": 1439251200, + "open": 15.9033, + "high": 15.9533, + "low": 15.6293, + "close": 15.8247, + "volume": 52796445.0 + }, + { + "time": 1439337600, + "open": 15.7073, + "high": 15.9847, + "low": 15.4913, + "close": 15.9347, + "volume": 46502790.0 + }, + { + "time": 1439424000, + "open": 16.0133, + "high": 16.432, + "low": 15.9267, + "close": 16.208, + "volume": 58656540.0 + }, + { + "time": 1439510400, + "open": 16.1967, + "high": 16.6147, + "low": 16.118, + "close": 16.2567, + "volume": 53596260.0 + }, + { + "time": 1439769600, + "open": 16.3333, + "high": 17.2587, + "low": 16.3333, + "close": 17.02, + "volume": 88423530.0 + }, + { + "time": 1439856000, + "open": 17.1, + "high": 17.4, + "low": 16.904, + "close": 17.3733, + "volume": 53375535.0 + }, + { + "time": 1439942400, + "open": 17.4673, + "high": 17.4673, + "low": 16.964, + "close": 16.9867, + "volume": 46379340.0 + }, + { + "time": 1440028800, + "open": 16.8687, + "high": 16.9707, + "low": 16.0007, + "close": 16.034, + "volume": 62651175.0 + }, + { + "time": 1440115200, + "open": 16.044, + "high": 16.2533, + "low": 15.314, + "close": 15.3433, + "volume": 83421645.0 + }, + { + "time": 1440374400, + "open": 14.5667, + "high": 15.4267, + "low": 13.0, + "close": 14.6667, + "volume": 120938985.0 + }, + { + "time": 1440460800, + "open": 15.2667, + "high": 15.5333, + "low": 14.5667, + "close": 14.5667, + "volume": 53007090.0 + }, + { + "time": 1440547200, + "open": 15.1493, + "high": 15.3333, + "low": 14.3673, + "close": 15.02, + "volume": 63997230.0 + }, + { + "time": 1440633600, + "open": 15.318, + "high": 16.3167, + "low": 15.2593, + "close": 16.2173, + "volume": 98315805.0 + }, + { + "time": 1440720000, + "open": 16.1307, + "high": 16.7633, + "low": 15.9333, + "close": 16.592, + "volume": 71507475.0 + }, + { + "time": 1440979200, + "open": 16.2647, + "high": 16.9967, + "low": 16.236, + "close": 16.474, + "volume": 122503890.0 + }, + { + "time": 1441065600, + "open": 16.3333, + "high": 16.4, + "low": 15.798, + "close": 15.9733, + "volume": 71484615.0 + }, + { + "time": 1441152000, + "open": 15.9453, + "high": 17.0327, + "low": 15.9453, + "close": 16.9333, + "volume": 61671885.0 + }, + { + "time": 1441238400, + "open": 16.9167, + "high": 17.0033, + "low": 16.2067, + "close": 16.2333, + "volume": 53779770.0 + }, + { + "time": 1441324800, + "open": 16.1453, + "high": 16.2727, + "low": 15.88, + "close": 16.1287, + "volume": 47893560.0 + }, + { + "time": 1441670400, + "open": 16.53, + "high": 16.75, + "low": 16.27, + "close": 16.686, + "volume": 40088835.0 + }, + { + "time": 1441756800, + "open": 16.6867, + "high": 16.9627, + "low": 16.5333, + "close": 16.6053, + "volume": 43224345.0 + }, + { + "time": 1441843200, + "open": 16.7107, + "high": 16.8007, + "low": 16.3553, + "close": 16.5933, + "volume": 33505485.0 + }, + { + "time": 1441929600, + "open": 16.4667, + "high": 16.6927, + "low": 16.3153, + "close": 16.69, + "volume": 30261885.0 + }, + { + "time": 1442188800, + "open": 16.7313, + "high": 16.95, + "low": 16.6033, + "close": 16.876, + "volume": 37000215.0 + }, + { + "time": 1442275200, + "open": 16.82, + "high": 16.9733, + "low": 16.6333, + "close": 16.93, + "volume": 37735680.0 + }, + { + "time": 1442361600, + "open": 16.9453, + "high": 17.5253, + "low": 16.8587, + "close": 17.4993, + "volume": 53034555.0 + }, + { + "time": 1442448000, + "open": 17.4547, + "high": 17.7, + "low": 17.3793, + "close": 17.4607, + "volume": 44743740.0 + }, + { + "time": 1442534400, + "open": 17.4533, + "high": 17.588, + "low": 17.16, + "close": 17.3327, + "volume": 46208550.0 + }, + { + "time": 1442793600, + "open": 17.3153, + "high": 18.1047, + "low": 17.0533, + "close": 17.6667, + "volume": 78873465.0 + }, + { + "time": 1442880000, + "open": 17.5853, + "high": 17.5853, + "low": 17.058, + "close": 17.3973, + "volume": 47461185.0 + }, + { + "time": 1442966400, + "open": 17.2933, + "high": 17.5313, + "low": 17.172, + "close": 17.3973, + "volume": 33568950.0 + }, + { + "time": 1443052800, + "open": 17.3867, + "high": 17.5667, + "low": 17.0807, + "close": 17.5667, + "volume": 43135980.0 + }, + { + "time": 1443139200, + "open": 17.6, + "high": 17.8167, + "low": 17.0767, + "close": 17.13, + "volume": 49134375.0 + }, + { + "time": 1443398400, + "open": 17.1893, + "high": 17.3193, + "low": 16.4407, + "close": 16.6053, + "volume": 127229130.0 + }, + { + "time": 1443484800, + "open": 16.7333, + "high": 16.982, + "low": 16.364, + "close": 16.4467, + "volume": 47435895.0 + }, + { + "time": 1443571200, + "open": 16.6247, + "high": 16.926, + "low": 16.156, + "close": 16.5633, + "volume": 62164515.0 + }, + { + "time": 1443657600, + "open": 16.6433, + "high": 16.6433, + "low": 15.8087, + "close": 15.9667, + "volume": 56504925.0 + }, + { + "time": 1443744000, + "open": 16.038, + "high": 16.7333, + "low": 15.5333, + "close": 16.5667, + "volume": 54307740.0 + }, + { + "time": 1444003200, + "open": 16.6673, + "high": 16.7333, + "low": 16.2753, + "close": 16.354, + "volume": 48077100.0 + }, + { + "time": 1444089600, + "open": 16.3327, + "high": 16.3327, + "low": 15.7053, + "close": 15.95, + "volume": 65567505.0 + }, + { + "time": 1444176000, + "open": 15.7947, + "high": 15.8667, + "low": 15.2747, + "close": 15.46, + "volume": 89247075.0 + }, + { + "time": 1444262400, + "open": 15.378, + "high": 15.424, + "low": 14.754, + "close": 15.0, + "volume": 77791965.0 + }, + { + "time": 1444348800, + "open": 14.7333, + "high": 14.958, + "low": 14.5333, + "close": 14.6933, + "volume": 79845975.0 + }, + { + "time": 1444608000, + "open": 14.8, + "high": 14.9067, + "low": 14.2793, + "close": 14.3, + "volume": 49668135.0 + }, + { + "time": 1444694400, + "open": 14.3067, + "high": 14.8353, + "low": 14.0753, + "close": 14.6, + "volume": 67942260.0 + }, + { + "time": 1444780800, + "open": 14.6173, + "high": 14.7433, + "low": 14.362, + "close": 14.4933, + "volume": 39930165.0 + }, + { + "time": 1444867200, + "open": 14.59, + "high": 14.8627, + "low": 14.2467, + "close": 14.8627, + "volume": 36025155.0 + }, + { + "time": 1444953600, + "open": 14.788, + "high": 15.366, + "low": 14.788, + "close": 15.11, + "volume": 56215725.0 + }, + { + "time": 1445212800, + "open": 15.2293, + "high": 15.41, + "low": 14.996, + "close": 15.15, + "volume": 31590870.0 + }, + { + "time": 1445299200, + "open": 15.1667, + "high": 15.24, + "low": 13.4667, + "close": 14.1107, + "volume": 197281935.0 + }, + { + "time": 1445385600, + "open": 14.2267, + "high": 14.3207, + "low": 13.92, + "close": 14.0667, + "volume": 53924745.0 + }, + { + "time": 1445472000, + "open": 14.134, + "high": 14.3833, + "low": 13.96, + "close": 14.2, + "volume": 35633430.0 + }, + { + "time": 1445558400, + "open": 14.4527, + "high": 14.5333, + "low": 13.846, + "close": 14.0, + "volume": 54594090.0 + }, + { + "time": 1445817600, + "open": 14.0327, + "high": 14.4667, + "low": 13.9267, + "close": 14.38, + "volume": 42132645.0 + }, + { + "time": 1445904000, + "open": 14.372, + "high": 14.4733, + "low": 13.834, + "close": 14.0233, + "volume": 45352560.0 + }, + { + "time": 1445990400, + "open": 14.0473, + "high": 14.23, + "low": 13.8867, + "close": 14.1867, + "volume": 34321920.0 + }, + { + "time": 1446076800, + "open": 14.1333, + "high": 14.25, + "low": 13.94, + "close": 14.0007, + "volume": 23203560.0 + }, + { + "time": 1446163200, + "open": 14.0933, + "high": 14.1087, + "low": 13.5927, + "close": 13.7927, + "volume": 55364160.0 + }, + { + "time": 1446422400, + "open": 13.7933, + "high": 14.3867, + "low": 13.7933, + "close": 14.2633, + "volume": 49048695.0 + }, + { + "time": 1446508800, + "open": 14.26, + "high": 15.5967, + "low": 13.5, + "close": 15.1713, + "volume": 81725865.0 + }, + { + "time": 1446595200, + "open": 14.998, + "high": 15.516, + "low": 14.8, + "close": 15.4233, + "volume": 164936790.0 + }, + { + "time": 1446681600, + "open": 15.442, + "high": 15.6393, + "low": 15.2793, + "close": 15.46, + "volume": 57396345.0 + }, + { + "time": 1446768000, + "open": 15.4333, + "high": 15.5573, + "low": 15.3, + "close": 15.5, + "volume": 62338770.0 + }, + { + "time": 1447027200, + "open": 15.4507, + "high": 15.5327, + "low": 14.954, + "close": 14.9993, + "volume": 49130655.0 + }, + { + "time": 1447113600, + "open": 14.99, + "high": 15.0, + "low": 14.4053, + "close": 14.44, + "volume": 58650945.0 + }, + { + "time": 1447200000, + "open": 14.5527, + "high": 14.632, + "low": 14.242, + "close": 14.6267, + "volume": 42948015.0 + }, + { + "time": 1447286400, + "open": 14.5953, + "high": 14.6, + "low": 14.16, + "close": 14.1667, + "volume": 37479450.0 + }, + { + "time": 1447372800, + "open": 14.16, + "high": 14.22, + "low": 13.6947, + "close": 13.702, + "volume": 42982740.0 + }, + { + "time": 1447632000, + "open": 13.7667, + "high": 14.332, + "low": 13.7, + "close": 14.28, + "volume": 37396095.0 + }, + { + "time": 1447718400, + "open": 14.3447, + "high": 14.4, + "low": 14.0933, + "close": 14.2667, + "volume": 27685005.0 + }, + { + "time": 1447804800, + "open": 14.3267, + "high": 14.7587, + "low": 14.168, + "close": 14.68, + "volume": 36768795.0 + }, + { + "time": 1447891200, + "open": 14.864, + "high": 15.0793, + "low": 14.6867, + "close": 14.74, + "volume": 30967155.0 + }, + { + "time": 1447977600, + "open": 14.7867, + "high": 15.0, + "low": 14.2387, + "close": 14.664, + "volume": 57603405.0 + }, + { + "time": 1448236800, + "open": 14.6673, + "high": 14.6673, + "low": 14.3113, + "close": 14.4933, + "volume": 31581555.0 + }, + { + "time": 1448323200, + "open": 14.4, + "high": 14.7333, + "low": 14.3333, + "close": 14.4733, + "volume": 31788765.0 + }, + { + "time": 1448409600, + "open": 14.5667, + "high": 15.3887, + "low": 14.5667, + "close": 15.3533, + "volume": 51472185.0 + }, + { + "time": 1448582400, + "open": 15.3913, + "high": 15.4833, + "low": 15.134, + "close": 15.3353, + "volume": 24905370.0 + }, + { + "time": 1448841600, + "open": 15.4367, + "high": 15.6187, + "low": 15.272, + "close": 15.3667, + "volume": 33631095.0 + }, + { + "time": 1448928000, + "open": 15.404, + "high": 15.8667, + "low": 15.32, + "close": 15.82, + "volume": 47844060.0 + }, + { + "time": 1449014400, + "open": 15.81, + "high": 15.9067, + "low": 15.4153, + "close": 15.532, + "volume": 37548885.0 + }, + { + "time": 1449100800, + "open": 15.56, + "high": 15.83, + "low": 15.3333, + "close": 15.5667, + "volume": 37645980.0 + }, + { + "time": 1449187200, + "open": 15.6, + "high": 15.63, + "low": 15.1773, + "close": 15.3933, + "volume": 32882220.0 + }, + { + "time": 1449446400, + "open": 15.3587, + "high": 15.7087, + "low": 15.0767, + "close": 15.3933, + "volume": 40632900.0 + }, + { + "time": 1449532800, + "open": 15.2667, + "high": 15.2667, + "low": 14.9467, + "close": 15.18, + "volume": 34195545.0 + }, + { + "time": 1449619200, + "open": 15.0667, + "high": 15.1667, + "low": 14.7147, + "close": 14.9873, + "volume": 39684090.0 + }, + { + "time": 1449705600, + "open": 14.9993, + "high": 15.2327, + "low": 14.9093, + "close": 15.1653, + "volume": 26159520.0 + }, + { + "time": 1449792000, + "open": 15.0053, + "high": 15.05, + "low": 14.36, + "close": 14.432, + "volume": 42714765.0 + }, + { + "time": 1450051200, + "open": 14.6587, + "high": 14.728, + "low": 14.3247, + "close": 14.572, + "volume": 35973795.0 + }, + { + "time": 1450137600, + "open": 14.7333, + "high": 14.8287, + "low": 14.5333, + "close": 14.7267, + "volume": 28405860.0 + }, + { + "time": 1450224000, + "open": 14.8333, + "high": 15.6587, + "low": 14.7153, + "close": 15.5833, + "volume": 64146990.0 + }, + { + "time": 1450310400, + "open": 15.69, + "high": 15.8507, + "low": 15.3207, + "close": 15.4733, + "volume": 40449015.0 + }, + { + "time": 1450396800, + "open": 15.4, + "high": 15.7267, + "low": 15.286, + "close": 15.3833, + "volume": 38668740.0 + }, + { + "time": 1450656000, + "open": 15.4667, + "high": 15.722, + "low": 15.4, + "close": 15.5333, + "volume": 24367620.0 + }, + { + "time": 1450742400, + "open": 15.5333, + "high": 15.77, + "low": 15.3087, + "close": 15.3467, + "volume": 25559175.0 + }, + { + "time": 1450828800, + "open": 15.4667, + "high": 15.5633, + "low": 15.2087, + "close": 15.3133, + "volume": 18879060.0 + }, + { + "time": 1450915200, + "open": 15.3133, + "high": 15.4587, + "low": 15.2187, + "close": 15.3713, + "volume": 8807865.0 + }, + { + "time": 1451260800, + "open": 15.3573, + "high": 15.4653, + "low": 15.036, + "close": 15.2667, + "volume": 22891215.0 + }, + { + "time": 1451347200, + "open": 15.3167, + "high": 15.86, + "low": 15.3027, + "close": 15.86, + "volume": 31348185.0 + }, + { + "time": 1451433600, + "open": 15.7387, + "high": 16.2427, + "low": 15.7113, + "close": 15.9133, + "volume": 47373570.0 + }, + { + "time": 1451520000, + "open": 16.0, + "high": 16.23, + "low": 15.8913, + "close": 16.0, + "volume": 35687385.0 + }, + { + "time": 1451865600, + "open": 15.5733, + "high": 15.9667, + "low": 14.6, + "close": 14.9727, + "volume": 84687525.0 + }, + { + "time": 1451952000, + "open": 14.934, + "high": 15.126, + "low": 14.6667, + "close": 14.85, + "volume": 39873360.0 + }, + { + "time": 1452038400, + "open": 14.6047, + "high": 14.7167, + "low": 14.3987, + "close": 14.7167, + "volume": 45644085.0 + }, + { + "time": 1452124800, + "open": 14.5333, + "high": 14.5627, + "low": 14.144, + "close": 14.334, + "volume": 44442075.0 + }, + { + "time": 1452211200, + "open": 14.4133, + "high": 14.696, + "low": 14.03, + "close": 14.0753, + "volume": 42351450.0 + }, + { + "time": 1452470400, + "open": 14.0633, + "high": 14.2967, + "low": 13.5333, + "close": 13.8287, + "volume": 51419670.0 + }, + { + "time": 1452556800, + "open": 13.9893, + "high": 14.2493, + "low": 13.6873, + "close": 14.066, + "volume": 37346910.0 + }, + { + "time": 1452643200, + "open": 14.17, + "high": 14.1767, + "low": 13.3333, + "close": 13.4, + "volume": 45447780.0 + }, + { + "time": 1452729600, + "open": 13.3667, + "high": 14.0, + "low": 12.892, + "close": 13.8033, + "volume": 78481125.0 + }, + { + "time": 1452816000, + "open": 13.4667, + "high": 13.6793, + "low": 13.1333, + "close": 13.65, + "volume": 65273250.0 + }, + { + "time": 1453161600, + "open": 13.992, + "high": 14.0313, + "low": 13.3853, + "close": 13.6647, + "volume": 49873515.0 + }, + { + "time": 1453248000, + "open": 13.5, + "high": 13.5, + "low": 12.75, + "close": 13.346, + "volume": 71760615.0 + }, + { + "time": 1453334400, + "open": 13.2, + "high": 13.5487, + "low": 13.0013, + "close": 13.2733, + "volume": 39395805.0 + }, + { + "time": 1453420800, + "open": 13.56, + "high": 13.7667, + "low": 13.2687, + "close": 13.5033, + "volume": 36423510.0 + }, + { + "time": 1453680000, + "open": 13.5033, + "high": 13.5713, + "low": 13.034, + "close": 13.0667, + "volume": 32746890.0 + }, + { + "time": 1453766400, + "open": 13.0767, + "high": 13.2187, + "low": 12.592, + "close": 12.79, + "volume": 61887765.0 + }, + { + "time": 1453852800, + "open": 12.8007, + "high": 12.884, + "low": 12.3847, + "close": 12.6033, + "volume": 43610685.0 + }, + { + "time": 1453939200, + "open": 12.6333, + "high": 12.7933, + "low": 12.1607, + "close": 12.4327, + "volume": 58177335.0 + }, + { + "time": 1454025600, + "open": 12.5853, + "high": 12.916, + "low": 12.5193, + "close": 12.7787, + "volume": 36289005.0 + }, + { + "time": 1454284800, + "open": 12.7167, + "high": 13.3013, + "low": 12.1833, + "close": 13.088, + "volume": 67881600.0 + }, + { + "time": 1454371200, + "open": 13.09, + "high": 13.09, + "low": 12.0153, + "close": 12.18, + "volume": 72660375.0 + }, + { + "time": 1454457600, + "open": 12.2467, + "high": 12.3267, + "low": 11.3453, + "close": 11.572, + "volume": 102199185.0 + }, + { + "time": 1454544000, + "open": 11.6373, + "high": 11.732, + "low": 11.1327, + "close": 11.37, + "volume": 55556535.0 + }, + { + "time": 1454630400, + "open": 11.4867, + "high": 11.5627, + "low": 10.516, + "close": 10.8333, + "volume": 121217820.0 + }, + { + "time": 1454889600, + "open": 10.6, + "high": 10.6, + "low": 9.7333, + "close": 9.75, + "volume": 117036630.0 + }, + { + "time": 1454976000, + "open": 9.798, + "high": 10.6527, + "low": 9.34, + "close": 9.6667, + "volume": 111349140.0 + }, + { + "time": 1455062400, + "open": 9.7533, + "high": 10.9933, + "low": 9.0, + "close": 10.502, + "volume": 114878790.0 + }, + { + "time": 1455148800, + "open": 10.2, + "high": 10.884, + "low": 9.6013, + "close": 10.1333, + "volume": 187276440.0 + }, + { + "time": 1455235200, + "open": 10.1333, + "high": 10.4673, + "low": 9.58, + "close": 9.9967, + "volume": 95316150.0 + }, + { + "time": 1455580800, + "open": 10.0993, + "high": 10.8633, + "low": 10.0993, + "close": 10.3307, + "volume": 72728055.0 + }, + { + "time": 1455667200, + "open": 10.4987, + "high": 11.3447, + "low": 10.4453, + "close": 11.3447, + "volume": 76193205.0 + }, + { + "time": 1455753600, + "open": 11.3533, + "high": 11.5833, + "low": 10.9847, + "close": 11.1333, + "volume": 49621590.0 + }, + { + "time": 1455840000, + "open": 11.0333, + "high": 11.166, + "low": 10.8333, + "close": 11.1233, + "volume": 36965385.0 + }, + { + "time": 1456099200, + "open": 11.3, + "high": 11.9273, + "low": 11.3, + "close": 11.7967, + "volume": 66003810.0 + }, + { + "time": 1456185600, + "open": 11.648, + "high": 12.1153, + "low": 11.5787, + "close": 11.7667, + "volume": 69213390.0 + }, + { + "time": 1456272000, + "open": 11.6733, + "high": 12.0, + "low": 11.1893, + "close": 11.9993, + "volume": 69879090.0 + }, + { + "time": 1456358400, + "open": 11.8887, + "high": 12.568, + "low": 11.68, + "close": 12.4907, + "volume": 67942905.0 + }, + { + "time": 1456444800, + "open": 12.6067, + "high": 12.8, + "low": 12.3333, + "close": 12.6507, + "volume": 78149805.0 + }, + { + "time": 1456704000, + "open": 12.6, + "high": 13.09, + "low": 12.6, + "close": 12.7533, + "volume": 115657890.0 + }, + { + "time": 1456790400, + "open": 12.9527, + "high": 13.0633, + "low": 12.18, + "close": 12.3167, + "volume": 87616590.0 + }, + { + "time": 1456876800, + "open": 12.3953, + "high": 12.568, + "low": 12.1, + "close": 12.458, + "volume": 62262495.0 + }, + { + "time": 1456963200, + "open": 12.556, + "high": 13.1613, + "low": 12.2813, + "close": 13.0267, + "volume": 63760695.0 + }, + { + "time": 1457049600, + "open": 13.04, + "high": 13.602, + "low": 13.04, + "close": 13.3833, + "volume": 86046540.0 + }, + { + "time": 1457308800, + "open": 13.3333, + "high": 13.98, + "low": 13.16, + "close": 13.7, + "volume": 67046235.0 + }, + { + "time": 1457395200, + "open": 13.6667, + "high": 13.8333, + "low": 13.48, + "close": 13.5233, + "volume": 53949945.0 + }, + { + "time": 1457481600, + "open": 13.5667, + "high": 13.9587, + "low": 13.5193, + "close": 13.93, + "volume": 41877810.0 + }, + { + "time": 1457568000, + "open": 13.93, + "high": 14.2333, + "low": 13.378, + "close": 13.6787, + "volume": 67059180.0 + }, + { + "time": 1457654400, + "open": 13.918, + "high": 13.9613, + "low": 13.6887, + "close": 13.8347, + "volume": 42624135.0 + }, + { + "time": 1457913600, + "open": 13.88, + "high": 14.448, + "low": 13.88, + "close": 14.3667, + "volume": 50652270.0 + }, + { + "time": 1458000000, + "open": 14.2667, + "high": 14.598, + "low": 14.1, + "close": 14.5333, + "volume": 80336310.0 + }, + { + "time": 1458086400, + "open": 14.556, + "high": 14.8387, + "low": 14.4533, + "close": 14.8113, + "volume": 45207405.0 + }, + { + "time": 1458172800, + "open": 14.8, + "high": 15.2333, + "low": 14.6267, + "close": 15.21, + "volume": 48334365.0 + }, + { + "time": 1458259200, + "open": 15.1333, + "high": 15.632, + "low": 15.1067, + "close": 15.4733, + "volume": 59588040.0 + }, + { + "time": 1458518400, + "open": 15.5333, + "high": 15.992, + "low": 15.516, + "close": 15.9, + "volume": 66283815.0 + }, + { + "time": 1458604800, + "open": 15.9, + "high": 15.9327, + "low": 15.5033, + "close": 15.5333, + "volume": 53471670.0 + }, + { + "time": 1458691200, + "open": 15.6333, + "high": 15.68, + "low": 14.6867, + "close": 14.6893, + "volume": 62026500.0 + }, + { + "time": 1458777600, + "open": 14.5127, + "high": 15.2593, + "low": 14.2987, + "close": 15.22, + "volume": 64368510.0 + }, + { + "time": 1459123200, + "open": 15.226, + "high": 15.654, + "low": 15.0, + "close": 15.3333, + "volume": 49788900.0 + }, + { + "time": 1459209600, + "open": 15.4333, + "high": 15.492, + "low": 15.022, + "close": 15.3533, + "volume": 51507480.0 + }, + { + "time": 1459296000, + "open": 15.46, + "high": 15.7, + "low": 15.1, + "close": 15.1, + "volume": 52204845.0 + }, + { + "time": 1459382400, + "open": 15.1333, + "high": 15.828, + "low": 15.0007, + "close": 15.54, + "volume": 103025805.0 + }, + { + "time": 1459468800, + "open": 15.6667, + "high": 16.7493, + "low": 15.318, + "close": 15.83, + "volume": 205378890.0 + }, + { + "time": 1459728000, + "open": 16.3333, + "high": 16.808, + "low": 15.7133, + "close": 15.76, + "volume": 169088775.0 + }, + { + "time": 1459814400, + "open": 15.8567, + "high": 17.1667, + "low": 15.7767, + "close": 17.1667, + "volume": 127513170.0 + }, + { + "time": 1459900800, + "open": 16.86, + "high": 17.8493, + "low": 16.8533, + "close": 17.7533, + "volume": 143856135.0 + }, + { + "time": 1459987200, + "open": 17.8667, + "high": 17.956, + "low": 16.9673, + "close": 17.0647, + "volume": 111640635.0 + }, + { + "time": 1460073600, + "open": 17.04, + "high": 17.434, + "low": 16.5347, + "close": 16.6333, + "volume": 92146575.0 + }, + { + "time": 1460332800, + "open": 16.7847, + "high": 17.266, + "low": 16.3533, + "close": 16.62, + "volume": 119938500.0 + }, + { + "time": 1460419200, + "open": 16.6333, + "high": 16.8, + "low": 16.242, + "close": 16.49, + "volume": 73495020.0 + }, + { + "time": 1460505600, + "open": 16.5667, + "high": 17.0333, + "low": 16.4887, + "close": 16.9913, + "volume": 63754965.0 + }, + { + "time": 1460592000, + "open": 16.8747, + "high": 17.1227, + "low": 16.7367, + "close": 16.788, + "volume": 53539065.0 + }, + { + "time": 1460678400, + "open": 16.8007, + "high": 17.004, + "low": 16.608, + "close": 16.9267, + "volume": 47150220.0 + }, + { + "time": 1460937600, + "open": 16.9, + "high": 17.2207, + "low": 16.7773, + "close": 16.848, + "volume": 56465895.0 + }, + { + "time": 1461024000, + "open": 17.0267, + "high": 17.0393, + "low": 16.0833, + "close": 16.3333, + "volume": 80956815.0 + }, + { + "time": 1461110400, + "open": 16.5193, + "high": 16.9107, + "low": 16.1, + "close": 16.66, + "volume": 67998930.0 + }, + { + "time": 1461196800, + "open": 16.6553, + "high": 16.7313, + "low": 16.4, + "close": 16.4887, + "volume": 36160305.0 + }, + { + "time": 1461283200, + "open": 16.5133, + "high": 16.9333, + "low": 16.3807, + "close": 16.9233, + "volume": 50184240.0 + }, + { + "time": 1461542400, + "open": 17.02, + "high": 17.1587, + "low": 16.7173, + "close": 16.7667, + "volume": 46018590.0 + }, + { + "time": 1461628800, + "open": 16.8007, + "high": 17.0487, + "low": 16.626, + "close": 16.772, + "volume": 41643750.0 + }, + { + "time": 1461715200, + "open": 16.83, + "high": 17.0, + "low": 16.6267, + "close": 16.7853, + "volume": 41368650.0 + }, + { + "time": 1461801600, + "open": 16.696, + "high": 16.8953, + "low": 16.496, + "close": 16.5433, + "volume": 31875060.0 + }, + { + "time": 1461888000, + "open": 16.5167, + "high": 16.666, + "low": 15.854, + "close": 15.9533, + "volume": 67850040.0 + }, + { + "time": 1462147200, + "open": 16.1167, + "high": 16.2127, + "low": 15.6547, + "close": 16.12, + "volume": 48718935.0 + }, + { + "time": 1462233600, + "open": 15.9907, + "high": 16.12, + "low": 15.4207, + "close": 15.4387, + "volume": 54099555.0 + }, + { + "time": 1462320000, + "open": 15.3467, + "high": 16.1753, + "low": 14.6933, + "close": 15.2333, + "volume": 101952825.0 + }, + { + "time": 1462406400, + "open": 15.3647, + "high": 15.6, + "low": 13.986, + "close": 14.0347, + "volume": 140309865.0 + }, + { + "time": 1462492800, + "open": 14.0667, + "high": 14.4247, + "low": 13.874, + "close": 14.3267, + "volume": 74756025.0 + }, + { + "time": 1462752000, + "open": 14.4333, + "high": 14.534, + "low": 13.7867, + "close": 13.8167, + "volume": 62450460.0 + }, + { + "time": 1462838400, + "open": 14.026, + "high": 14.0413, + "low": 13.6667, + "close": 13.88, + "volume": 51794940.0 + }, + { + "time": 1462924800, + "open": 13.874, + "high": 14.3653, + "low": 13.7367, + "close": 13.894, + "volume": 61181340.0 + }, + { + "time": 1463011200, + "open": 13.9933, + "high": 14.1533, + "low": 13.5767, + "close": 13.7767, + "volume": 46360335.0 + }, + { + "time": 1463097600, + "open": 13.7793, + "high": 14.08, + "low": 13.7473, + "close": 13.82, + "volume": 35990505.0 + }, + { + "time": 1463356800, + "open": 13.9327, + "high": 14.21, + "low": 13.8587, + "close": 13.888, + "volume": 37083990.0 + }, + { + "time": 1463443200, + "open": 13.9327, + "high": 13.988, + "low": 13.6013, + "close": 13.6867, + "volume": 34568325.0 + }, + { + "time": 1463529600, + "open": 13.902, + "high": 14.354, + "low": 13.2007, + "close": 14.0333, + "volume": 69813285.0 + }, + { + "time": 1463616000, + "open": 14.0467, + "high": 14.7333, + "low": 13.82, + "close": 14.574, + "volume": 86109435.0 + }, + { + "time": 1463702400, + "open": 14.7313, + "high": 14.7313, + "low": 14.194, + "close": 14.6547, + "volume": 113611050.0 + }, + { + "time": 1463961600, + "open": 14.726, + "high": 14.84, + "low": 14.38, + "close": 14.38, + "volume": 66618810.0 + }, + { + "time": 1464048000, + "open": 14.4993, + "high": 14.5827, + "low": 14.3453, + "close": 14.53, + "volume": 37793115.0 + }, + { + "time": 1464134400, + "open": 14.6327, + "high": 14.7573, + "low": 14.41, + "close": 14.5933, + "volume": 37445070.0 + }, + { + "time": 1464220800, + "open": 14.666, + "high": 15.0327, + "low": 14.6033, + "close": 15.0327, + "volume": 53304360.0 + }, + { + "time": 1464307200, + "open": 15.0667, + "high": 15.0667, + "low": 14.7167, + "close": 14.8433, + "volume": 47011290.0 + }, + { + "time": 1464652800, + "open": 14.926, + "high": 14.9833, + "low": 14.7667, + "close": 14.8733, + "volume": 31549200.0 + }, + { + "time": 1464739200, + "open": 14.8267, + "high": 14.8267, + "low": 14.4593, + "close": 14.6, + "volume": 38188845.0 + }, + { + "time": 1464825600, + "open": 14.632, + "high": 14.7327, + "low": 14.474, + "close": 14.702, + "volume": 24582015.0 + }, + { + "time": 1464912000, + "open": 14.7, + "high": 14.796, + "low": 14.534, + "close": 14.5673, + "volume": 28329450.0 + }, + { + "time": 1465171200, + "open": 14.6047, + "high": 14.7267, + "low": 14.3633, + "close": 14.7053, + "volume": 28419060.0 + }, + { + "time": 1465257600, + "open": 14.748, + "high": 15.6293, + "low": 14.7327, + "close": 15.5127, + "volume": 80287470.0 + }, + { + "time": 1465344000, + "open": 15.5333, + "high": 16.0567, + "low": 15.4567, + "close": 15.7233, + "volume": 76060455.0 + }, + { + "time": 1465430400, + "open": 15.6467, + "high": 15.6887, + "low": 15.07, + "close": 15.09, + "volume": 58262070.0 + }, + { + "time": 1465516800, + "open": 14.8733, + "high": 15.2667, + "low": 14.4787, + "close": 14.674, + "volume": 78597060.0 + }, + { + "time": 1465776000, + "open": 14.5533, + "high": 15.0513, + "low": 14.4653, + "close": 14.5133, + "volume": 53577120.0 + }, + { + "time": 1465862400, + "open": 14.582, + "high": 14.8133, + "low": 14.1687, + "close": 14.28, + "volume": 44983245.0 + }, + { + "time": 1465948800, + "open": 14.4333, + "high": 14.7933, + "low": 14.342, + "close": 14.532, + "volume": 36963330.0 + }, + { + "time": 1466035200, + "open": 14.51, + "high": 14.658, + "low": 14.2333, + "close": 14.5333, + "volume": 31423200.0 + }, + { + "time": 1466121600, + "open": 14.5353, + "high": 14.666, + "low": 14.3, + "close": 14.33, + "volume": 38441865.0 + }, + { + "time": 1466380800, + "open": 14.5, + "high": 14.9167, + "low": 14.5, + "close": 14.696, + "volume": 44990895.0 + }, + { + "time": 1466467200, + "open": 14.7667, + "high": 14.838, + "low": 12.608, + "close": 12.8533, + "volume": 41360595.0 + }, + { + "time": 1466553600, + "open": 14.0, + "high": 14.0, + "low": 12.8807, + "close": 13.1867, + "volume": 288062460.0 + }, + { + "time": 1466640000, + "open": 13.196, + "high": 13.196, + "low": 12.8087, + "close": 13.0, + "volume": 122422515.0 + }, + { + "time": 1466726400, + "open": 12.96, + "high": 13.008, + "low": 12.476, + "close": 12.7333, + "volume": 83003595.0 + }, + { + "time": 1466985600, + "open": 12.9067, + "high": 13.254, + "low": 12.5247, + "close": 13.22, + "volume": 90248895.0 + }, + { + "time": 1467072000, + "open": 13.27, + "high": 13.6033, + "low": 13.2633, + "close": 13.4527, + "volume": 69636630.0 + }, + { + "time": 1467158400, + "open": 13.5467, + "high": 14.1187, + "low": 13.5333, + "close": 14.0167, + "volume": 70308465.0 + }, + { + "time": 1467244800, + "open": 14.0827, + "high": 14.2373, + "low": 13.668, + "close": 13.7333, + "volume": 56418435.0 + }, + { + "time": 1467331200, + "open": 13.6393, + "high": 14.5493, + "low": 13.5967, + "close": 14.4133, + "volume": 63605955.0 + }, + { + "time": 1467676800, + "open": 14.0367, + "high": 14.3033, + "low": 13.7, + "close": 14.0933, + "volume": 64103865.0 + }, + { + "time": 1467763200, + "open": 13.9587, + "high": 14.3487, + "low": 13.9327, + "close": 14.2433, + "volume": 56001630.0 + }, + { + "time": 1467849600, + "open": 14.2867, + "high": 14.5413, + "low": 14.1667, + "close": 14.4, + "volume": 41651820.0 + }, + { + "time": 1467936000, + "open": 14.3667, + "high": 14.654, + "low": 14.3, + "close": 14.4, + "volume": 45595800.0 + }, + { + "time": 1468195200, + "open": 14.5633, + "high": 15.1187, + "low": 14.5633, + "close": 14.82, + "volume": 66368370.0 + }, + { + "time": 1468281600, + "open": 14.792, + "high": 15.1667, + "low": 14.7667, + "close": 14.9667, + "volume": 56701455.0 + }, + { + "time": 1468368000, + "open": 15.0, + "high": 15.0667, + "low": 14.686, + "close": 14.8667, + "volume": 44640195.0 + }, + { + "time": 1468454400, + "open": 14.9, + "high": 15.0667, + "low": 14.7367, + "close": 14.7687, + "volume": 32683545.0 + }, + { + "time": 1468540800, + "open": 14.8333, + "high": 14.85, + "low": 14.6067, + "close": 14.6067, + "volume": 28054815.0 + }, + { + "time": 1468800000, + "open": 14.6667, + "high": 15.1393, + "low": 14.5533, + "close": 15.0433, + "volume": 43574475.0 + }, + { + "time": 1468886400, + "open": 15.034, + "high": 15.2733, + "low": 14.9833, + "close": 15.08, + "volume": 36414315.0 + }, + { + "time": 1468972800, + "open": 15.1347, + "high": 15.32, + "low": 15.0, + "close": 15.28, + "volume": 31636800.0 + }, + { + "time": 1469059200, + "open": 15.342, + "high": 15.3667, + "low": 14.6067, + "close": 14.6667, + "volume": 55197015.0 + }, + { + "time": 1469145600, + "open": 14.714, + "high": 14.9667, + "low": 14.592, + "close": 14.7933, + "volume": 32939685.0 + }, + { + "time": 1469404800, + "open": 14.8333, + "high": 15.426, + "low": 14.758, + "close": 15.3333, + "volume": 57810465.0 + }, + { + "time": 1469491200, + "open": 15.4, + "high": 15.4, + "low": 15.02, + "close": 15.2833, + "volume": 39602580.0 + }, + { + "time": 1469577600, + "open": 15.31, + "high": 15.5573, + "low": 15.128, + "close": 15.22, + "volume": 35585460.0 + }, + { + "time": 1469664000, + "open": 15.2607, + "high": 15.3853, + "low": 15.1067, + "close": 15.3853, + "volume": 29429970.0 + }, + { + "time": 1469750400, + "open": 15.3507, + "high": 15.6853, + "low": 15.3333, + "close": 15.6147, + "volume": 38264985.0 + }, + { + "time": 1470009600, + "open": 15.6907, + "high": 15.7753, + "low": 15.276, + "close": 15.4113, + "volume": 51807975.0 + }, + { + "time": 1470096000, + "open": 15.3453, + "high": 15.3453, + "low": 14.76, + "close": 15.1333, + "volume": 48089565.0 + }, + { + "time": 1470182400, + "open": 15.1167, + "high": 15.5333, + "low": 14.4333, + "close": 14.94, + "volume": 49846905.0 + }, + { + "time": 1470268800, + "open": 15.2, + "high": 15.3907, + "low": 14.8033, + "close": 15.3367, + "volume": 52533225.0 + }, + { + "time": 1470355200, + "open": 15.3187, + "high": 15.4667, + "low": 15.15, + "close": 15.1653, + "volume": 38675430.0 + }, + { + "time": 1470614400, + "open": 15.1653, + "high": 15.3067, + "low": 15.0667, + "close": 15.1, + "volume": 27615555.0 + }, + { + "time": 1470700800, + "open": 15.02, + "high": 15.436, + "low": 15.0, + "close": 15.2333, + "volume": 26310885.0 + }, + { + "time": 1470787200, + "open": 15.2953, + "high": 15.3247, + "low": 14.9747, + "close": 15.0667, + "volume": 28483890.0 + }, + { + "time": 1470873600, + "open": 15.0727, + "high": 15.1713, + "low": 14.894, + "close": 15.0, + "volume": 24076710.0 + }, + { + "time": 1470960000, + "open": 14.9993, + "high": 15.11, + "low": 14.936, + "close": 15.0393, + "volume": 20300850.0 + }, + { + "time": 1471219200, + "open": 15.0667, + "high": 15.3, + "low": 14.9867, + "close": 15.0007, + "volume": 25273980.0 + }, + { + "time": 1471305600, + "open": 14.9813, + "high": 15.146, + "low": 14.8887, + "close": 14.9067, + "volume": 26379855.0 + }, + { + "time": 1471392000, + "open": 14.7053, + "high": 14.9887, + "low": 14.7053, + "close": 14.892, + "volume": 21790455.0 + }, + { + "time": 1471478400, + "open": 14.8827, + "high": 15.044, + "low": 14.8193, + "close": 14.8667, + "volume": 20870070.0 + }, + { + "time": 1471564800, + "open": 14.8667, + "high": 15.0133, + "low": 14.8353, + "close": 15.0, + "volume": 19653315.0 + }, + { + "time": 1471824000, + "open": 15.0067, + "high": 15.0527, + "low": 14.8453, + "close": 14.87, + "volume": 26019900.0 + }, + { + "time": 1471910400, + "open": 14.9067, + "high": 15.2327, + "low": 14.8533, + "close": 15.1087, + "volume": 63281610.0 + }, + { + "time": 1471996800, + "open": 15.1067, + "high": 15.1433, + "low": 14.8147, + "close": 14.8147, + "volume": 30888090.0 + }, + { + "time": 1472083200, + "open": 14.802, + "high": 14.9327, + "low": 14.7167, + "close": 14.7327, + "volume": 21926385.0 + }, + { + "time": 1472169600, + "open": 14.7567, + "high": 14.8633, + "low": 14.588, + "close": 14.634, + "volume": 28345545.0 + }, + { + "time": 1472428800, + "open": 14.6, + "high": 14.6933, + "low": 14.3333, + "close": 14.3413, + "volume": 41806380.0 + }, + { + "time": 1472515200, + "open": 14.3667, + "high": 14.4073, + "low": 14.0347, + "close": 14.064, + "volume": 39825960.0 + }, + { + "time": 1472601600, + "open": 14.066, + "high": 14.1733, + "low": 13.91, + "close": 14.1, + "volume": 40418205.0 + }, + { + "time": 1472688000, + "open": 14.1647, + "high": 14.206, + "low": 13.35, + "close": 13.4167, + "volume": 102308160.0 + }, + { + "time": 1472774400, + "open": 13.5233, + "high": 13.5467, + "low": 13.08, + "close": 13.22, + "volume": 74876685.0 + }, + { + "time": 1473120000, + "open": 13.3333, + "high": 13.5667, + "low": 13.2513, + "close": 13.5493, + "volume": 54042450.0 + }, + { + "time": 1473206400, + "open": 13.5627, + "high": 13.7667, + "low": 13.3807, + "close": 13.4633, + "volume": 44694975.0 + }, + { + "time": 1473292800, + "open": 13.4953, + "high": 13.4993, + "low": 13.0907, + "close": 13.1767, + "volume": 41787750.0 + }, + { + "time": 1473379200, + "open": 13.144, + "high": 13.3487, + "low": 12.9133, + "close": 12.95, + "volume": 48325905.0 + }, + { + "time": 1473638400, + "open": 12.8667, + "high": 13.4247, + "low": 12.812, + "close": 13.2567, + "volume": 45839700.0 + }, + { + "time": 1473724800, + "open": 13.2113, + "high": 13.25, + "low": 12.8967, + "close": 12.9807, + "volume": 44783100.0 + }, + { + "time": 1473811200, + "open": 13.0233, + "high": 13.1953, + "low": 12.99, + "close": 13.0667, + "volume": 28667115.0 + }, + { + "time": 1473897600, + "open": 13.1247, + "high": 13.5013, + "low": 13.0333, + "close": 13.3507, + "volume": 36054000.0 + }, + { + "time": 1473984000, + "open": 13.354, + "high": 13.7167, + "low": 13.258, + "close": 13.694, + "volume": 38842110.0 + }, + { + "time": 1474243200, + "open": 13.7007, + "high": 13.962, + "low": 13.6667, + "close": 13.766, + "volume": 28640355.0 + }, + { + "time": 1474329600, + "open": 13.756, + "high": 13.85, + "low": 13.594, + "close": 13.6233, + "volume": 24932340.0 + }, + { + "time": 1474416000, + "open": 13.6667, + "high": 13.8, + "low": 13.4373, + "close": 13.712, + "volume": 31800480.0 + }, + { + "time": 1474502400, + "open": 13.7093, + "high": 13.8187, + "low": 13.5333, + "close": 13.6733, + "volume": 29451975.0 + }, + { + "time": 1474588800, + "open": 13.716, + "high": 14.012, + "low": 13.6667, + "close": 13.8667, + "volume": 33538245.0 + }, + { + "time": 1474848000, + "open": 13.7833, + "high": 14.0667, + "low": 13.7047, + "close": 13.93, + "volume": 28243755.0 + }, + { + "time": 1474934400, + "open": 13.9533, + "high": 14.0133, + "low": 13.64, + "close": 13.7253, + "volume": 39862860.0 + }, + { + "time": 1475020800, + "open": 13.7553, + "high": 13.8833, + "low": 13.6333, + "close": 13.76, + "volume": 27330960.0 + }, + { + "time": 1475107200, + "open": 13.7353, + "high": 13.822, + "low": 13.35, + "close": 13.3767, + "volume": 35370465.0 + }, + { + "time": 1475193600, + "open": 13.38, + "high": 13.6653, + "low": 13.3033, + "close": 13.6, + "volume": 33940980.0 + }, + { + "time": 1475452800, + "open": 13.7933, + "high": 14.378, + "low": 13.602, + "close": 14.2333, + "volume": 80238360.0 + }, + { + "time": 1475539200, + "open": 14.232, + "high": 14.3, + "low": 13.9213, + "close": 14.1333, + "volume": 45776940.0 + }, + { + "time": 1475625600, + "open": 14.0927, + "high": 14.21, + "low": 13.8747, + "close": 13.94, + "volume": 23797215.0 + }, + { + "time": 1475712000, + "open": 13.9107, + "high": 13.9107, + "low": 13.3473, + "close": 13.3773, + "volume": 61862850.0 + }, + { + "time": 1475798400, + "open": 13.3973, + "high": 13.4633, + "low": 13.0533, + "close": 13.1133, + "volume": 44352930.0 + }, + { + "time": 1476057600, + "open": 13.4067, + "high": 13.6093, + "low": 13.1073, + "close": 13.4133, + "volume": 43733445.0 + }, + { + "time": 1476144000, + "open": 13.4133, + "high": 13.48, + "low": 13.2207, + "close": 13.35, + "volume": 30339060.0 + }, + { + "time": 1476230400, + "open": 13.3367, + "high": 13.592, + "low": 13.32, + "close": 13.426, + "volume": 24088650.0 + }, + { + "time": 1476316800, + "open": 13.334, + "high": 13.3933, + "low": 13.1367, + "close": 13.3653, + "volume": 28215435.0 + }, + { + "time": 1476403200, + "open": 13.4013, + "high": 13.4333, + "low": 13.0867, + "close": 13.1327, + "volume": 57088020.0 + }, + { + "time": 1476662400, + "open": 13.114, + "high": 13.2307, + "low": 12.8, + "close": 12.9833, + "volume": 59920515.0 + }, + { + "time": 1476748800, + "open": 13.0513, + "high": 13.298, + "low": 12.884, + "close": 13.2867, + "volume": 77545620.0 + }, + { + "time": 1476835200, + "open": 13.2867, + "high": 13.7773, + "low": 13.178, + "close": 13.6333, + "volume": 94281555.0 + }, + { + "time": 1476921600, + "open": 13.4667, + "high": 13.5493, + "low": 13.1367, + "close": 13.2367, + "volume": 65298930.0 + }, + { + "time": 1477008000, + "open": 13.2487, + "high": 13.438, + "low": 13.1493, + "close": 13.3507, + "volume": 37628655.0 + }, + { + "time": 1477267200, + "open": 13.3667, + "high": 13.5967, + "low": 13.35, + "close": 13.4673, + "volume": 35458005.0 + }, + { + "time": 1477353600, + "open": 13.522, + "high": 13.646, + "low": 13.4047, + "close": 13.42, + "volume": 28966155.0 + }, + { + "time": 1477440000, + "open": 13.4707, + "high": 14.432, + "low": 13.3333, + "close": 14.0667, + "volume": 75116040.0 + }, + { + "time": 1477526400, + "open": 14.0367, + "high": 14.2467, + "low": 13.4433, + "close": 13.5533, + "volume": 175683330.0 + }, + { + "time": 1477612800, + "open": 13.6007, + "high": 13.688, + "low": 13.322, + "close": 13.366, + "volume": 57461385.0 + }, + { + "time": 1477872000, + "open": 13.3333, + "high": 13.556, + "low": 13.054, + "close": 13.1667, + "volume": 56721510.0 + }, + { + "time": 1477958400, + "open": 13.192, + "high": 13.2667, + "low": 12.5007, + "close": 12.5893, + "volume": 89997060.0 + }, + { + "time": 1478044800, + "open": 12.6487, + "high": 12.8467, + "low": 12.4147, + "close": 12.4827, + "volume": 54515745.0 + }, + { + "time": 1478131200, + "open": 12.5307, + "high": 12.7647, + "low": 12.4693, + "close": 12.5, + "volume": 32900445.0 + }, + { + "time": 1478217600, + "open": 12.4747, + "high": 12.8973, + "low": 12.3973, + "close": 12.7467, + "volume": 65781930.0 + }, + { + "time": 1478476800, + "open": 12.93, + "high": 12.996, + "low": 12.67, + "close": 12.89, + "volume": 50097405.0 + }, + { + "time": 1478563200, + "open": 12.8893, + "high": 13.166, + "low": 12.7507, + "close": 13.0333, + "volume": 42242490.0 + }, + { + "time": 1478649600, + "open": 12.232, + "high": 12.8, + "low": 12.1333, + "close": 12.678, + "volume": 103742010.0 + }, + { + "time": 1478736000, + "open": 12.8, + "high": 12.8733, + "low": 12.028, + "close": 12.3667, + "volume": 84858330.0 + }, + { + "time": 1478822400, + "open": 12.306, + "high": 12.592, + "low": 12.2, + "close": 12.57, + "volume": 51611205.0 + }, + { + "time": 1479081600, + "open": 12.648, + "high": 12.648, + "low": 11.8793, + "close": 12.1233, + "volume": 85608450.0 + }, + { + "time": 1479168000, + "open": 12.2167, + "high": 12.4287, + "low": 12.1253, + "close": 12.2787, + "volume": 50682225.0 + }, + { + "time": 1479254400, + "open": 12.2433, + "high": 12.3153, + "low": 12.0807, + "close": 12.2167, + "volume": 41321985.0 + }, + { + "time": 1479340800, + "open": 12.2773, + "high": 12.9, + "low": 12.1407, + "close": 12.6467, + "volume": 57600180.0 + }, + { + "time": 1479427200, + "open": 12.634, + "high": 12.8667, + "low": 12.3273, + "close": 12.3273, + "volume": 67142955.0 + }, + { + "time": 1479686400, + "open": 12.3467, + "high": 12.5927, + "low": 12.294, + "close": 12.312, + "volume": 57124485.0 + }, + { + "time": 1479772800, + "open": 12.3853, + "high": 12.7647, + "low": 12.2473, + "close": 12.7633, + "volume": 73593240.0 + }, + { + "time": 1479859200, + "open": 12.74, + "high": 13.0433, + "low": 12.6, + "close": 12.8667, + "volume": 62876265.0 + }, + { + "time": 1480032000, + "open": 12.9, + "high": 13.1493, + "low": 12.9, + "close": 13.11, + "volume": 30619665.0 + }, + { + "time": 1480291200, + "open": 13.0233, + "high": 13.29, + "low": 12.97, + "close": 13.0847, + "volume": 58714410.0 + }, + { + "time": 1480377600, + "open": 13.068, + "high": 13.1333, + "low": 12.6333, + "close": 12.6347, + "volume": 57520620.0 + }, + { + "time": 1480464000, + "open": 12.7273, + "high": 12.8, + "low": 12.5, + "close": 12.6233, + "volume": 45849390.0 + }, + { + "time": 1480550400, + "open": 12.5927, + "high": 12.6307, + "low": 12.0667, + "close": 12.1533, + "volume": 65228070.0 + }, + { + "time": 1480636800, + "open": 12.1407, + "high": 12.3253, + "low": 12.0, + "close": 12.1, + "volume": 51604950.0 + }, + { + "time": 1480896000, + "open": 12.1673, + "high": 12.5927, + "low": 12.1667, + "close": 12.4667, + "volume": 50948565.0 + }, + { + "time": 1480982400, + "open": 12.4993, + "high": 12.5067, + "low": 12.1787, + "close": 12.3833, + "volume": 44166465.0 + }, + { + "time": 1481068800, + "open": 12.43, + "high": 12.8933, + "low": 12.3333, + "close": 12.8167, + "volume": 71439045.0 + }, + { + "time": 1481155200, + "open": 12.8427, + "high": 12.8667, + "low": 12.636, + "close": 12.8, + "volume": 40960065.0 + }, + { + "time": 1481241600, + "open": 12.7807, + "high": 12.9227, + "low": 12.6833, + "close": 12.7833, + "volume": 33890505.0 + }, + { + "time": 1481500800, + "open": 12.7867, + "high": 12.9613, + "low": 12.686, + "close": 12.8287, + "volume": 31229640.0 + }, + { + "time": 1481587200, + "open": 12.87, + "high": 13.4187, + "low": 12.8667, + "close": 13.2133, + "volume": 89130030.0 + }, + { + "time": 1481673600, + "open": 13.23, + "high": 13.5333, + "low": 13.1173, + "close": 13.3, + "volume": 54654495.0 + }, + { + "time": 1481760000, + "open": 13.2493, + "high": 13.3827, + "low": 13.1593, + "close": 13.1653, + "volume": 41365305.0 + }, + { + "time": 1481846400, + "open": 13.2027, + "high": 13.506, + "low": 13.1733, + "close": 13.4933, + "volume": 49030395.0 + }, + { + "time": 1482105600, + "open": 13.51, + "high": 13.63, + "low": 13.3227, + "close": 13.4967, + "volume": 45378420.0 + }, + { + "time": 1482192000, + "open": 13.5593, + "high": 13.9333, + "low": 13.5, + "close": 13.9193, + "volume": 62280810.0 + }, + { + "time": 1482278400, + "open": 13.8893, + "high": 14.1487, + "low": 13.8273, + "close": 13.852, + "volume": 69526095.0 + }, + { + "time": 1482364800, + "open": 13.8093, + "high": 13.9993, + "low": 13.7667, + "close": 13.91, + "volume": 40609665.0 + }, + { + "time": 1482451200, + "open": 13.8667, + "high": 14.2667, + "low": 13.8473, + "close": 14.2533, + "volume": 57488535.0 + }, + { + "time": 1482796800, + "open": 14.2033, + "high": 14.8167, + "low": 14.1867, + "close": 14.6533, + "volume": 76603605.0 + }, + { + "time": 1482883200, + "open": 14.6667, + "high": 14.92, + "low": 14.48, + "close": 14.616, + "volume": 48715005.0 + }, + { + "time": 1482969600, + "open": 14.65, + "high": 14.6667, + "low": 14.2747, + "close": 14.3107, + "volume": 53864715.0 + }, + { + "time": 1483056000, + "open": 14.338, + "high": 14.5, + "low": 14.112, + "close": 14.236, + "volume": 61296165.0 + }, + { + "time": 1483401600, + "open": 14.2507, + "high": 14.6887, + "low": 13.8, + "close": 14.1893, + "volume": 76751040.0 + }, + { + "time": 1483488000, + "open": 14.2, + "high": 15.2, + "low": 14.0747, + "close": 15.1067, + "volume": 148240920.0 + }, + { + "time": 1483574400, + "open": 14.9253, + "high": 15.1653, + "low": 14.7967, + "close": 15.13, + "volume": 48295200.0 + }, + { + "time": 1483660800, + "open": 15.1167, + "high": 15.354, + "low": 15.03, + "close": 15.264, + "volume": 72480600.0 + }, + { + "time": 1483920000, + "open": 15.2667, + "high": 15.4613, + "low": 15.2, + "close": 15.4187, + "volume": 51153120.0 + }, + { + "time": 1484006400, + "open": 15.4007, + "high": 15.4667, + "low": 15.126, + "close": 15.3, + "volume": 47673600.0 + }, + { + "time": 1484092800, + "open": 15.2667, + "high": 15.334, + "low": 15.112, + "close": 15.31, + "volume": 45848955.0 + }, + { + "time": 1484179200, + "open": 15.2687, + "high": 15.38, + "low": 15.0387, + "close": 15.2933, + "volume": 47768535.0 + }, + { + "time": 1484265600, + "open": 15.3333, + "high": 15.8567, + "low": 15.2733, + "close": 15.85, + "volume": 80412510.0 + }, + { + "time": 1484611200, + "open": 15.7607, + "high": 15.9973, + "low": 15.6247, + "close": 15.7053, + "volume": 59745210.0 + }, + { + "time": 1484697600, + "open": 15.7027, + "high": 15.9807, + "low": 15.7027, + "close": 15.9147, + "volume": 48709860.0 + }, + { + "time": 1484784000, + "open": 16.4073, + "high": 16.5787, + "low": 16.05, + "close": 16.1767, + "volume": 101214150.0 + }, + { + "time": 1484870400, + "open": 16.3167, + "high": 16.4, + "low": 16.2007, + "close": 16.32, + "volume": 49923165.0 + }, + { + "time": 1485129600, + "open": 16.31, + "high": 16.726, + "low": 16.2733, + "close": 16.598, + "volume": 78557610.0 + }, + { + "time": 1485216000, + "open": 16.5553, + "high": 16.9993, + "low": 16.5553, + "close": 16.9993, + "volume": 62280870.0 + }, + { + "time": 1485302400, + "open": 17.0667, + "high": 17.2307, + "low": 16.7867, + "close": 16.96, + "volume": 65941140.0 + }, + { + "time": 1485388800, + "open": 16.9887, + "high": 17.0493, + "low": 16.7167, + "close": 16.742, + "volume": 39469215.0 + }, + { + "time": 1485475200, + "open": 16.798, + "high": 16.9853, + "low": 16.568, + "close": 16.9267, + "volume": 39775995.0 + }, + { + "time": 1485734400, + "open": 16.8633, + "high": 17.0193, + "low": 16.4733, + "close": 16.688, + "volume": 48218610.0 + }, + { + "time": 1485820800, + "open": 16.67, + "high": 17.0593, + "low": 16.5133, + "close": 16.8133, + "volume": 52682265.0 + }, + { + "time": 1485907200, + "open": 16.8767, + "high": 16.9327, + "low": 16.6033, + "close": 16.6167, + "volume": 51352470.0 + }, + { + "time": 1485993600, + "open": 16.5333, + "high": 16.828, + "low": 16.4993, + "close": 16.684, + "volume": 31979490.0 + }, + { + "time": 1486080000, + "open": 16.7533, + "high": 16.8527, + "low": 16.6453, + "close": 16.764, + "volume": 24938490.0 + }, + { + "time": 1486339200, + "open": 16.7907, + "high": 17.2027, + "low": 16.6807, + "close": 17.2027, + "volume": 45616860.0 + }, + { + "time": 1486425600, + "open": 17.1667, + "high": 17.3333, + "low": 17.0947, + "close": 17.1653, + "volume": 52628640.0 + }, + { + "time": 1486512000, + "open": 17.1833, + "high": 17.666, + "low": 17.08, + "close": 17.6493, + "volume": 50357010.0 + }, + { + "time": 1486598400, + "open": 17.638, + "high": 18.3333, + "low": 17.472, + "close": 17.95, + "volume": 101696130.0 + }, + { + "time": 1486684800, + "open": 18.0, + "high": 18.0887, + "low": 17.7407, + "close": 17.934, + "volume": 46664505.0 + }, + { + "time": 1486944000, + "open": 18.0067, + "high": 18.7333, + "low": 17.9807, + "close": 18.73, + "volume": 91768200.0 + }, + { + "time": 1487030400, + "open": 18.7333, + "high": 19.1593, + "low": 18.574, + "close": 18.732, + "volume": 94881045.0 + }, + { + "time": 1487116800, + "open": 18.6747, + "high": 18.816, + "low": 18.4293, + "close": 18.6467, + "volume": 63557535.0 + }, + { + "time": 1487203200, + "open": 18.5707, + "high": 18.6667, + "low": 17.734, + "close": 17.8333, + "volume": 89172345.0 + }, + { + "time": 1487289600, + "open": 17.5933, + "high": 18.1927, + "low": 17.51, + "close": 18.124, + "volume": 81886155.0 + }, + { + "time": 1487635200, + "open": 18.22, + "high": 18.76, + "low": 18.1487, + "close": 18.6, + "volume": 71768040.0 + }, + { + "time": 1487721600, + "open": 18.5333, + "high": 18.8967, + "low": 18.1733, + "close": 18.5113, + "volume": 113085195.0 + }, + { + "time": 1487808000, + "open": 18.6067, + "high": 18.6467, + "low": 17.0, + "close": 17.0, + "volume": 193472580.0 + }, + { + "time": 1487894400, + "open": 17.0, + "high": 17.2167, + "low": 16.68, + "close": 17.1133, + "volume": 107111355.0 + }, + { + "time": 1488153600, + "open": 17.4007, + "high": 17.4333, + "low": 16.134, + "close": 16.3867, + "volume": 150069720.0 + }, + { + "time": 1488240000, + "open": 16.2933, + "high": 16.7333, + "low": 16.26, + "close": 16.692, + "volume": 78670740.0 + }, + { + "time": 1488326400, + "open": 16.7927, + "high": 17.0, + "low": 16.6073, + "close": 16.6553, + "volume": 61044060.0 + }, + { + "time": 1488412800, + "open": 16.7, + "high": 16.8853, + "low": 16.5513, + "close": 16.6707, + "volume": 44183175.0 + }, + { + "time": 1488499200, + "open": 16.62, + "high": 16.8, + "low": 16.6, + "close": 16.75, + "volume": 38606160.0 + }, + { + "time": 1488758400, + "open": 16.7033, + "high": 16.78, + "low": 16.3593, + "close": 16.7567, + "volume": 43940415.0 + }, + { + "time": 1488844800, + "open": 16.726, + "high": 16.926, + "low": 16.4807, + "close": 16.5333, + "volume": 43656195.0 + }, + { + "time": 1488931200, + "open": 16.5793, + "high": 16.6713, + "low": 16.3547, + "close": 16.4593, + "volume": 47784270.0 + }, + { + "time": 1489017600, + "open": 16.4833, + "high": 16.5773, + "low": 16.2, + "close": 16.3533, + "volume": 50291415.0 + }, + { + "time": 1489104000, + "open": 16.4, + "high": 16.4933, + "low": 16.2, + "close": 16.2473, + "volume": 40420680.0 + }, + { + "time": 1489363200, + "open": 16.1907, + "high": 16.506, + "low": 16.1853, + "close": 16.4533, + "volume": 38125545.0 + }, + { + "time": 1489449600, + "open": 16.4373, + "high": 17.2867, + "low": 16.38, + "close": 17.2667, + "volume": 100832040.0 + }, + { + "time": 1489536000, + "open": 17.2533, + "high": 17.6467, + "low": 16.7073, + "close": 17.402, + "volume": 69533460.0 + }, + { + "time": 1489622400, + "open": 17.4067, + "high": 17.7167, + "low": 17.2707, + "close": 17.4667, + "volume": 90819975.0 + }, + { + "time": 1489708800, + "open": 17.48, + "high": 17.6887, + "low": 17.4053, + "close": 17.41, + "volume": 80565870.0 + }, + { + "time": 1489968000, + "open": 17.4167, + "high": 17.6367, + "low": 17.2547, + "close": 17.4633, + "volume": 46284510.0 + }, + { + "time": 1490054400, + "open": 17.4867, + "high": 17.6533, + "low": 16.6827, + "close": 16.7253, + "volume": 90363240.0 + }, + { + "time": 1490140800, + "open": 16.6667, + "high": 17.0327, + "low": 16.6333, + "close": 16.9853, + "volume": 50458350.0 + }, + { + "time": 1490227200, + "open": 17.0367, + "high": 17.1787, + "low": 16.8867, + "close": 16.972, + "volume": 42898545.0 + }, + { + "time": 1490313600, + "open": 17.0067, + "high": 17.5927, + "low": 17.0007, + "close": 17.5913, + "volume": 74085210.0 + }, + { + "time": 1490572800, + "open": 17.5333, + "high": 18.1267, + "low": 17.3167, + "close": 18.1, + "volume": 80728845.0 + }, + { + "time": 1490659200, + "open": 18.0667, + "high": 18.712, + "low": 17.8667, + "close": 18.5833, + "volume": 102388365.0 + }, + { + "time": 1490745600, + "open": 18.5947, + "high": 18.64, + "low": 18.3693, + "close": 18.4833, + "volume": 46356210.0 + }, + { + "time": 1490832000, + "open": 18.484, + "high": 18.8, + "low": 18.4807, + "close": 18.5333, + "volume": 53993670.0 + }, + { + "time": 1490918400, + "open": 18.512, + "high": 18.6593, + "low": 18.4207, + "close": 18.542, + "volume": 41612610.0 + }, + { + "time": 1491177600, + "open": 18.75, + "high": 19.9333, + "low": 18.5533, + "close": 19.9013, + "volume": 180777570.0 + }, + { + "time": 1491264000, + "open": 19.9333, + "high": 20.3207, + "low": 19.6353, + "close": 20.1333, + "volume": 129370695.0 + }, + { + "time": 1491350400, + "open": 20.2467, + "high": 20.3253, + "low": 19.6133, + "close": 19.6833, + "volume": 99987900.0 + }, + { + "time": 1491436800, + "open": 19.5933, + "high": 20.1293, + "low": 19.534, + "close": 19.9247, + "volume": 71159910.0 + }, + { + "time": 1491523200, + "open": 19.9233, + "high": 20.1967, + "low": 19.674, + "close": 20.1753, + "volume": 57513600.0 + }, + { + "time": 1491782400, + "open": 20.3067, + "high": 20.9153, + "low": 20.3067, + "close": 20.8147, + "volume": 97980315.0 + }, + { + "time": 1491868800, + "open": 20.8907, + "high": 20.902, + "low": 20.3667, + "close": 20.5533, + "volume": 72841680.0 + }, + { + "time": 1491955200, + "open": 20.6, + "high": 20.6433, + "low": 19.744, + "close": 19.8187, + "volume": 76993785.0 + }, + { + "time": 1492041600, + "open": 19.6587, + "high": 20.4927, + "low": 19.5667, + "close": 20.2713, + "volume": 124106325.0 + }, + { + "time": 1492387200, + "open": 20.2833, + "high": 20.2833, + "low": 19.912, + "close": 20.008, + "volume": 53491485.0 + }, + { + "time": 1492473600, + "open": 20.0327, + "high": 20.056, + "low": 19.8393, + "close": 20.0, + "volume": 38393445.0 + }, + { + "time": 1492560000, + "open": 20.0133, + "high": 20.4413, + "low": 20.0133, + "close": 20.3373, + "volume": 49679670.0 + }, + { + "time": 1492646400, + "open": 20.4, + "high": 20.61, + "low": 20.0153, + "close": 20.15, + "volume": 78870705.0 + }, + { + "time": 1492732800, + "open": 20.1867, + "high": 20.4593, + "low": 20.028, + "close": 20.4447, + "volume": 57667530.0 + }, + { + "time": 1492992000, + "open": 20.6667, + "high": 20.7033, + "low": 20.4013, + "close": 20.5153, + "volume": 65769240.0 + }, + { + "time": 1493078400, + "open": 20.5667, + "high": 20.932, + "low": 20.3907, + "close": 20.9167, + "volume": 85255320.0 + }, + { + "time": 1493164800, + "open": 20.876, + "high": 20.9667, + "low": 20.6, + "close": 20.6673, + "volume": 54209820.0 + }, + { + "time": 1493251200, + "open": 20.66, + "high": 20.8727, + "low": 20.5, + "close": 20.6067, + "volume": 44895480.0 + }, + { + "time": 1493337600, + "open": 20.6527, + "high": 21.0073, + "low": 20.5333, + "close": 20.9733, + "volume": 58899975.0 + }, + { + "time": 1493596800, + "open": 20.9993, + "high": 21.8167, + "low": 20.938, + "close": 21.5967, + "volume": 108803550.0 + }, + { + "time": 1493683200, + "open": 21.492, + "high": 21.844, + "low": 21.1, + "close": 21.1667, + "volume": 67132200.0 + }, + { + "time": 1493769600, + "open": 21.2167, + "high": 21.4353, + "low": 20.0733, + "close": 20.2467, + "volume": 88490685.0 + }, + { + "time": 1493856000, + "open": 20.34, + "high": 20.56, + "low": 19.384, + "close": 19.7253, + "volume": 178937325.0 + }, + { + "time": 1493942400, + "open": 19.7907, + "high": 20.6, + "low": 19.7373, + "close": 20.6, + "volume": 103262310.0 + }, + { + "time": 1494201600, + "open": 20.6433, + "high": 20.9193, + "low": 20.388, + "close": 20.5053, + "volume": 91822080.0 + }, + { + "time": 1494288000, + "open": 20.55, + "high": 21.466, + "low": 20.55, + "close": 21.3467, + "volume": 124801560.0 + }, + { + "time": 1494374400, + "open": 21.6, + "high": 21.7067, + "low": 21.208, + "close": 21.6807, + "volume": 72771405.0 + }, + { + "time": 1494460800, + "open": 21.7533, + "high": 21.7533, + "low": 21.23, + "close": 21.5327, + "volume": 60381360.0 + }, + { + "time": 1494547200, + "open": 21.54, + "high": 21.8, + "low": 21.4353, + "close": 21.6653, + "volume": 52982295.0 + }, + { + "time": 1494806400, + "open": 21.2587, + "high": 21.3467, + "low": 20.8353, + "close": 21.06, + "volume": 98139675.0 + }, + { + "time": 1494892800, + "open": 21.1133, + "high": 21.3373, + "low": 21.0027, + "close": 21.0333, + "volume": 53030295.0 + }, + { + "time": 1494979200, + "open": 21.0267, + "high": 21.0267, + "low": 20.352, + "close": 20.4133, + "volume": 84943980.0 + }, + { + "time": 1495065600, + "open": 20.396, + "high": 20.9293, + "low": 20.1667, + "close": 20.8233, + "volume": 73016490.0 + }, + { + "time": 1495152000, + "open": 20.8733, + "high": 21.1167, + "low": 20.6587, + "close": 20.6913, + "volume": 59414115.0 + }, + { + "time": 1495411200, + "open": 20.71, + "high": 20.958, + "low": 20.4533, + "close": 20.6473, + "volume": 53613555.0 + }, + { + "time": 1495497600, + "open": 20.732, + "high": 20.732, + "low": 20.232, + "close": 20.262, + "volume": 53430645.0 + }, + { + "time": 1501632000, + "open": 21.4, + "high": 23.736, + "low": 20.748, + "close": 23.334, + "volume": 158508465.0 + }, + { + "time": 1501718400, + "open": 23.114, + "high": 23.34, + "low": 22.8667, + "close": 23.18, + "volume": 169206135.0 + }, + { + "time": 1501804800, + "open": 23.1873, + "high": 23.84, + "low": 22.8867, + "close": 23.8187, + "volume": 118611315.0 + }, + { + "time": 1502064000, + "open": 24.0, + "high": 24.0, + "low": 23.5167, + "close": 23.6667, + "volume": 76922280.0 + }, + { + "time": 1502150400, + "open": 23.6333, + "high": 24.572, + "low": 23.6207, + "close": 24.2547, + "volume": 92226420.0 + }, + { + "time": 1502236800, + "open": 24.208, + "high": 24.6667, + "low": 23.8747, + "close": 24.2773, + "volume": 86519625.0 + }, + { + "time": 1502323200, + "open": 24.22, + "high": 24.444, + "low": 23.5533, + "close": 23.5667, + "volume": 88535805.0 + }, + { + "time": 1502409600, + "open": 23.5447, + "high": 24.084, + "low": 23.3333, + "close": 23.8667, + "volume": 54039555.0 + }, + { + "time": 1502668800, + "open": 24.0667, + "high": 24.5107, + "low": 24.0667, + "close": 24.28, + "volume": 55720770.0 + }, + { + "time": 1502755200, + "open": 24.3433, + "high": 24.38, + "low": 23.958, + "close": 24.1307, + "volume": 36768285.0 + }, + { + "time": 1502841600, + "open": 24.1533, + "high": 24.4333, + "low": 24.068, + "close": 24.2067, + "volume": 39519210.0 + }, + { + "time": 1502928000, + "open": 24.258, + "high": 24.26, + "low": 23.4267, + "close": 23.4333, + "volume": 59729325.0 + }, + { + "time": 1503014400, + "open": 23.3333, + "high": 23.6167, + "low": 23.0007, + "close": 23.0707, + "volume": 64878945.0 + }, + { + "time": 1503273600, + "open": 23.144, + "high": 23.1867, + "low": 22.1233, + "close": 22.4547, + "volume": 80873040.0 + }, + { + "time": 1503360000, + "open": 22.7793, + "high": 22.816, + "low": 22.4913, + "close": 22.7707, + "volume": 53835240.0 + }, + { + "time": 1503446400, + "open": 22.72, + "high": 23.566, + "low": 22.5413, + "close": 23.46, + "volume": 59650080.0 + }, + { + "time": 1503532800, + "open": 23.5327, + "high": 23.7773, + "low": 23.316, + "close": 23.5467, + "volume": 53365110.0 + }, + { + "time": 1503619200, + "open": 23.6, + "high": 23.7127, + "low": 23.1533, + "close": 23.1813, + "volume": 42063270.0 + }, + { + "time": 1503878400, + "open": 23.1707, + "high": 23.2267, + "low": 22.648, + "close": 22.8873, + "volume": 43703055.0 + }, + { + "time": 1503964800, + "open": 22.7333, + "high": 23.27, + "low": 22.5627, + "close": 23.1987, + "volume": 47693040.0 + }, + { + "time": 1504051200, + "open": 23.2707, + "high": 23.5653, + "low": 23.1093, + "close": 23.5653, + "volume": 39211260.0 + }, + { + "time": 1504137600, + "open": 23.5733, + "high": 23.896, + "low": 23.5213, + "close": 23.68, + "volume": 47533125.0 + }, + { + "time": 1504224000, + "open": 23.7333, + "high": 23.8393, + "low": 23.5793, + "close": 23.6673, + "volume": 36370140.0 + }, + { + "time": 1504569600, + "open": 23.6433, + "high": 23.6993, + "low": 23.0593, + "close": 23.3267, + "volume": 46009875.0 + }, + { + "time": 1504656000, + "open": 23.3707, + "high": 23.5, + "low": 22.7707, + "close": 22.9773, + "volume": 49117995.0 + }, + { + "time": 1504742400, + "open": 23.0727, + "high": 23.4987, + "low": 22.8967, + "close": 23.3787, + "volume": 50711130.0 + }, + { + "time": 1504828800, + "open": 23.3093, + "high": 23.3187, + "low": 22.82, + "close": 22.8953, + "volume": 38831370.0 + }, + { + "time": 1505088000, + "open": 23.2, + "high": 24.266, + "low": 23.2, + "close": 24.234, + "volume": 93792450.0 + }, + { + "time": 1505174400, + "open": 24.2733, + "high": 24.584, + "low": 24.0267, + "close": 24.1667, + "volume": 71484885.0 + }, + { + "time": 1505260800, + "open": 24.19, + "high": 24.538, + "low": 23.9727, + "close": 24.4, + "volume": 51254190.0 + }, + { + "time": 1505347200, + "open": 24.3333, + "high": 25.1973, + "low": 24.1753, + "close": 24.8987, + "volume": 88268760.0 + }, + { + "time": 1505433600, + "open": 24.9793, + "high": 25.36, + "low": 24.8467, + "close": 25.3553, + "volume": 65391495.0 + }, + { + "time": 1505692800, + "open": 25.4, + "high": 25.974, + "low": 25.1787, + "close": 25.6533, + "volume": 88693770.0 + }, + { + "time": 1505779200, + "open": 25.48, + "high": 25.4927, + "low": 24.9047, + "close": 24.9547, + "volume": 77656125.0 + }, + { + "time": 1505865600, + "open": 25.0133, + "high": 25.2167, + "low": 24.738, + "close": 24.944, + "volume": 60187995.0 + }, + { + "time": 1505952000, + "open": 24.928, + "high": 25.122, + "low": 24.3007, + "close": 24.432, + "volume": 58301040.0 + }, + { + "time": 1506038400, + "open": 24.4, + "high": 24.66, + "low": 23.37, + "close": 23.38, + "volume": 100120800.0 + }, + { + "time": 1506297600, + "open": 23.378, + "high": 23.8313, + "low": 22.8587, + "close": 23.002, + "volume": 95209215.0 + }, + { + "time": 1506384000, + "open": 23.08, + "high": 23.416, + "low": 22.7267, + "close": 23.0267, + "volume": 89596305.0 + }, + { + "time": 1506470400, + "open": 23.2633, + "high": 23.4327, + "low": 22.7, + "close": 22.74, + "volume": 73275165.0 + }, + { + "time": 1506556800, + "open": 22.7333, + "high": 22.85, + "low": 22.36, + "close": 22.7133, + "volume": 63105405.0 + }, + { + "time": 1506643200, + "open": 22.768, + "high": 22.9787, + "low": 22.5733, + "close": 22.72, + "volume": 62996130.0 + }, + { + "time": 1506902400, + "open": 22.872, + "high": 23.2067, + "low": 22.34, + "close": 22.4, + "volume": 63673905.0 + }, + { + "time": 1506988800, + "open": 22.4667, + "high": 23.476, + "low": 22.0853, + "close": 23.422, + "volume": 127915005.0 + }, + { + "time": 1507075200, + "open": 23.4, + "high": 23.908, + "low": 23.282, + "close": 23.7253, + "volume": 102388050.0 + }, + { + "time": 1507161600, + "open": 23.6327, + "high": 23.8293, + "low": 23.4233, + "close": 23.6967, + "volume": 49240515.0 + }, + { + "time": 1507248000, + "open": 23.6973, + "high": 24.0067, + "low": 23.4833, + "close": 23.5867, + "volume": 52458270.0 + }, + { + "time": 1507507200, + "open": 23.5587, + "high": 23.6, + "low": 22.8407, + "close": 23.0467, + "volume": 91929060.0 + }, + { + "time": 1507593600, + "open": 23.086, + "high": 23.744, + "low": 23.0353, + "close": 23.7167, + "volume": 85714425.0 + }, + { + "time": 1507680000, + "open": 23.7, + "high": 23.84, + "low": 23.41, + "close": 23.6333, + "volume": 54369930.0 + }, + { + "time": 1507766400, + "open": 23.5793, + "high": 23.9853, + "low": 23.4667, + "close": 23.6633, + "volume": 49478250.0 + }, + { + "time": 1507852800, + "open": 23.7033, + "high": 23.8993, + "low": 23.5787, + "close": 23.7467, + "volume": 42626325.0 + }, + { + "time": 1508112000, + "open": 23.5833, + "high": 23.6667, + "low": 23.144, + "close": 23.3833, + "volume": 63696315.0 + }, + { + "time": 1508198400, + "open": 23.4167, + "high": 23.748, + "low": 23.3333, + "close": 23.69, + "volume": 39478785.0 + }, + { + "time": 1508284800, + "open": 23.6267, + "high": 24.2, + "low": 23.6087, + "close": 23.9767, + "volume": 58906215.0 + }, + { + "time": 1508371200, + "open": 23.8, + "high": 23.8533, + "low": 23.2133, + "close": 23.416, + "volume": 60596670.0 + }, + { + "time": 1508457600, + "open": 23.45, + "high": 23.6367, + "low": 22.956, + "close": 22.9933, + "volume": 58987380.0 + }, + { + "time": 1508716800, + "open": 23.3133, + "high": 23.4833, + "low": 22.4167, + "close": 22.534, + "volume": 69079140.0 + }, + { + "time": 1508803200, + "open": 22.4667, + "high": 22.8533, + "low": 22.4107, + "close": 22.5, + "volume": 54037110.0 + }, + { + "time": 1508889600, + "open": 22.5013, + "high": 22.53, + "low": 21.5707, + "close": 21.75, + "volume": 84060840.0 + }, + { + "time": 1508976000, + "open": 22.1, + "high": 22.1, + "low": 21.5467, + "close": 21.886, + "volume": 59895495.0 + }, + { + "time": 1509062400, + "open": 21.6667, + "high": 21.8893, + "low": 21.1107, + "close": 21.3667, + "volume": 82456560.0 + }, + { + "time": 1509321600, + "open": 21.4073, + "high": 21.5853, + "low": 21.15, + "close": 21.2733, + "volume": 50183595.0 + }, + { + "time": 1509408000, + "open": 21.3667, + "high": 22.2, + "low": 21.3453, + "close": 22.2, + "volume": 67143015.0 + }, + { + "time": 1509494400, + "open": 22.2633, + "high": 22.2667, + "low": 20.14, + "close": 20.3267, + "volume": 98873415.0 + }, + { + "time": 1509580800, + "open": 20.3, + "high": 21.4053, + "low": 19.5087, + "close": 19.9627, + "volume": 239871705.0 + }, + { + "time": 1509667200, + "open": 19.8573, + "high": 20.434, + "low": 19.6753, + "close": 20.4133, + "volume": 106874280.0 + }, + { + "time": 1509926400, + "open": 20.4533, + "high": 20.626, + "low": 19.934, + "close": 20.1333, + "volume": 75212505.0 + }, + { + "time": 1510012800, + "open": 20.1667, + "high": 20.4333, + "low": 19.634, + "close": 20.378, + "volume": 64488030.0 + }, + { + "time": 1510099200, + "open": 20.334, + "high": 20.4593, + "low": 20.0867, + "close": 20.31, + "volume": 58790550.0 + }, + { + "time": 1510185600, + "open": 20.2873, + "high": 20.326, + "low": 19.7533, + "close": 20.14, + "volume": 64908075.0 + }, + { + "time": 1510272000, + "open": 20.1227, + "high": 20.5573, + "low": 20.1227, + "close": 20.1867, + "volume": 55910415.0 + }, + { + "time": 1510531200, + "open": 20.2667, + "high": 21.12, + "low": 19.9067, + "close": 21.0533, + "volume": 92643630.0 + }, + { + "time": 1510617600, + "open": 21.08, + "high": 21.0933, + "low": 20.46, + "close": 20.5933, + "volume": 69989505.0 + }, + { + "time": 1510704000, + "open": 20.548, + "high": 20.8327, + "low": 20.1, + "close": 20.78, + "volume": 74143695.0 + }, + { + "time": 1510790400, + "open": 20.8833, + "high": 21.2093, + "low": 20.7533, + "close": 20.8373, + "volume": 70739175.0 + }, + { + "time": 1510876800, + "open": 21.1, + "high": 21.8333, + "low": 20.8767, + "close": 21.0167, + "volume": 170145555.0 + }, + { + "time": 1511136000, + "open": 21.0333, + "high": 21.0333, + "low": 20.3167, + "close": 20.5567, + "volume": 103487040.0 + }, + { + "time": 1511222400, + "open": 20.6133, + "high": 21.2153, + "low": 20.534, + "close": 21.1733, + "volume": 91762275.0 + }, + { + "time": 1511308800, + "open": 21.2067, + "high": 21.266, + "low": 20.7893, + "close": 20.812, + "volume": 62022240.0 + }, + { + "time": 1511481600, + "open": 20.9, + "high": 21.094, + "low": 20.7333, + "close": 21.0013, + "volume": 41299770.0 + }, + { + "time": 1511740800, + "open": 21.0367, + "high": 21.1567, + "low": 20.634, + "close": 21.0747, + "volume": 55527705.0 + }, + { + "time": 1511827200, + "open": 21.0747, + "high": 21.3333, + "low": 20.928, + "close": 21.1227, + "volume": 59546580.0 + }, + { + "time": 1511913600, + "open": 21.0907, + "high": 21.2133, + "low": 20.082, + "close": 20.4633, + "volume": 101149335.0 + }, + { + "time": 1512000000, + "open": 20.5033, + "high": 20.7133, + "low": 20.3027, + "close": 20.5333, + "volume": 53600970.0 + }, + { + "time": 1512086400, + "open": 20.4667, + "high": 20.688, + "low": 20.2, + "close": 20.43, + "volume": 52615485.0 + }, + { + "time": 1512345600, + "open": 20.52, + "high": 20.618, + "low": 20.0407, + "close": 20.3107, + "volume": 73463115.0 + }, + { + "time": 1512432000, + "open": 20.2667, + "high": 20.5333, + "low": 20.0667, + "close": 20.22, + "volume": 56832825.0 + }, + { + "time": 1512518400, + "open": 20.196, + "high": 20.8927, + "low": 20.0, + "close": 20.8867, + "volume": 78075690.0 + }, + { + "time": 1512604800, + "open": 20.9, + "high": 21.2427, + "low": 20.7333, + "close": 20.75, + "volume": 56477175.0 + }, + { + "time": 1512691200, + "open": 20.8, + "high": 21.132, + "low": 20.7507, + "close": 21.0093, + "volume": 42380790.0 + }, + { + "time": 1512950400, + "open": 20.9067, + "high": 22.0067, + "low": 20.8993, + "close": 22.0067, + "volume": 99929295.0 + }, + { + "time": 1513036800, + "open": 21.9933, + "high": 22.7627, + "low": 21.84, + "close": 22.746, + "volume": 108343800.0 + }, + { + "time": 1513123200, + "open": 22.6833, + "high": 22.948, + "low": 22.4333, + "close": 22.6, + "volume": 74635725.0 + }, + { + "time": 1513209600, + "open": 22.54, + "high": 23.1627, + "low": 22.46, + "close": 22.5113, + "volume": 71098425.0 + }, + { + "time": 1513296000, + "open": 22.5333, + "high": 22.9333, + "low": 22.384, + "close": 22.8673, + "volume": 85651935.0 + }, + { + "time": 1513555200, + "open": 22.9667, + "high": 23.1333, + "low": 22.5053, + "close": 22.5933, + "volume": 67302900.0 + }, + { + "time": 1513641600, + "open": 22.6333, + "high": 22.7933, + "low": 22.02, + "close": 22.0773, + "volume": 79694640.0 + }, + { + "time": 1513728000, + "open": 22.2067, + "high": 22.34, + "low": 21.6693, + "close": 21.9767, + "volume": 72798450.0 + }, + { + "time": 1513814400, + "open": 21.924, + "high": 22.2493, + "low": 21.814, + "close": 22.11, + "volume": 54460410.0 + }, + { + "time": 1513900800, + "open": 22.1333, + "high": 22.1333, + "low": 21.6547, + "close": 21.6573, + "volume": 51109455.0 + }, + { + "time": 1514246400, + "open": 21.6807, + "high": 21.6807, + "low": 21.1053, + "close": 21.154, + "volume": 52441845.0 + }, + { + "time": 1514332800, + "open": 21.1867, + "high": 21.2, + "low": 20.7167, + "close": 20.7367, + "volume": 57229200.0 + }, + { + "time": 1514419200, + "open": 20.7507, + "high": 21.0547, + "low": 20.636, + "close": 21.032, + "volume": 53772345.0 + }, + { + "time": 1514505600, + "open": 20.9667, + "high": 21.1333, + "low": 20.6667, + "close": 20.7033, + "volume": 45971790.0 + }, + { + "time": 1514851200, + "open": 20.8, + "high": 21.474, + "low": 20.7167, + "close": 21.37, + "volume": 51439980.0 + }, + { + "time": 1514937600, + "open": 21.4333, + "high": 21.6833, + "low": 20.6, + "close": 20.7127, + "volume": 53039445.0 + }, + { + "time": 1515024000, + "open": 20.6827, + "high": 21.2367, + "low": 20.34, + "close": 21.0, + "volume": 119513085.0 + }, + { + "time": 1515110400, + "open": 21.04, + "high": 21.1493, + "low": 20.8, + "close": 21.1167, + "volume": 54689490.0 + }, + { + "time": 1515369600, + "open": 21.1667, + "high": 22.4907, + "low": 21.026, + "close": 22.4173, + "volume": 120026880.0 + }, + { + "time": 1515456000, + "open": 22.4333, + "high": 22.5867, + "low": 21.8267, + "close": 22.1627, + "volume": 85692555.0 + }, + { + "time": 1515542400, + "open": 22.0667, + "high": 22.4667, + "low": 21.9333, + "close": 22.3333, + "volume": 46271310.0 + }, + { + "time": 1515628800, + "open": 22.33, + "high": 22.9873, + "low": 22.2173, + "close": 22.54, + "volume": 80395725.0 + }, + { + "time": 1515715200, + "open": 22.6627, + "high": 22.694, + "low": 22.2447, + "close": 22.3533, + "volume": 57715995.0 + }, + { + "time": 1516060800, + "open": 22.3533, + "high": 23.0, + "low": 22.32, + "close": 22.6333, + "volume": 79779555.0 + }, + { + "time": 1516147200, + "open": 22.6867, + "high": 23.2667, + "low": 22.65, + "close": 23.1333, + "volume": 83660295.0 + }, + { + "time": 1516233600, + "open": 23.2, + "high": 23.4867, + "low": 22.916, + "close": 22.9767, + "volume": 67304595.0 + }, + { + "time": 1516320000, + "open": 23.008, + "high": 23.4, + "low": 22.84, + "close": 23.4, + "volume": 58015335.0 + }, + { + "time": 1516579200, + "open": 23.3347, + "high": 23.8553, + "low": 23.2333, + "close": 23.4647, + "volume": 76691625.0 + }, + { + "time": 1516665600, + "open": 23.68, + "high": 24.1867, + "low": 23.4, + "close": 23.5787, + "volume": 66095520.0 + }, + { + "time": 1516752000, + "open": 23.56, + "high": 23.7333, + "low": 22.9013, + "close": 23.17, + "volume": 62762115.0 + }, + { + "time": 1516838400, + "open": 23.17, + "high": 23.324, + "low": 22.4267, + "close": 22.7, + "volume": 82199130.0 + }, + { + "time": 1516924800, + "open": 22.7993, + "high": 22.9333, + "low": 22.3807, + "close": 22.8567, + "volume": 52383270.0 + }, + { + "time": 1517184000, + "open": 22.76, + "high": 23.39, + "low": 22.552, + "close": 23.2667, + "volume": 55837245.0 + }, + { + "time": 1517270400, + "open": 23.2167, + "high": 23.35, + "low": 22.8113, + "close": 23.052, + "volume": 51916335.0 + }, + { + "time": 1517356800, + "open": 23.1653, + "high": 23.746, + "low": 23.0127, + "close": 23.7, + "volume": 68225850.0 + }, + { + "time": 1517443200, + "open": 23.72, + "high": 23.9773, + "low": 23.242, + "close": 23.3667, + "volume": 48808785.0 + }, + { + "time": 1517529600, + "open": 23.2467, + "high": 23.4633, + "low": 22.7007, + "close": 22.84, + "volume": 42620370.0 + }, + { + "time": 1517788800, + "open": 22.6, + "high": 22.9647, + "low": 22.0, + "close": 22.0333, + "volume": 49498560.0 + }, + { + "time": 1517875200, + "open": 22.0367, + "high": 22.4147, + "low": 21.542, + "close": 22.3953, + "volume": 58819215.0 + }, + { + "time": 1517961600, + "open": 22.3327, + "high": 23.778, + "low": 22.1893, + "close": 22.9, + "volume": 81471840.0 + }, + { + "time": 1518048000, + "open": 22.896, + "high": 23.2413, + "low": 20.8667, + "close": 21.0667, + "volume": 122580555.0 + }, + { + "time": 1518134400, + "open": 21.4, + "high": 21.5933, + "low": 19.6507, + "close": 20.75, + "volume": 157762590.0 + }, + { + "time": 1518393600, + "open": 21.066, + "high": 21.2747, + "low": 20.4167, + "close": 21.0487, + "volume": 74060220.0 + }, + { + "time": 1518480000, + "open": 21.128, + "high": 21.7327, + "low": 20.834, + "close": 21.6333, + "volume": 53357370.0 + }, + { + "time": 1518566400, + "open": 21.612, + "high": 21.7447, + "low": 21.2347, + "close": 21.5333, + "volume": 46124280.0 + }, + { + "time": 1518652800, + "open": 21.64, + "high": 22.324, + "low": 21.4933, + "close": 22.3, + "volume": 68946270.0 + }, + { + "time": 1518739200, + "open": 22.3333, + "high": 22.8747, + "low": 22.0867, + "close": 22.3667, + "volume": 67143360.0 + }, + { + "time": 1519084800, + "open": 22.3073, + "high": 22.7227, + "low": 22.1, + "close": 22.34, + "volume": 47355345.0 + }, + { + "time": 1519171200, + "open": 22.3407, + "high": 22.6427, + "low": 22.1767, + "close": 22.1813, + "volume": 37654230.0 + }, + { + "time": 1519257600, + "open": 22.138, + "high": 23.1627, + "low": 22.1333, + "close": 23.1033, + "volume": 80854995.0 + }, + { + "time": 1519344000, + "open": 23.2, + "high": 23.666, + "low": 23.14, + "close": 23.4627, + "volume": 69096450.0 + }, + { + "time": 1519603200, + "open": 23.62, + "high": 23.9333, + "low": 23.49, + "close": 23.8667, + "volume": 52423515.0 + }, + { + "time": 1519689600, + "open": 23.7893, + "high": 23.9993, + "low": 23.334, + "close": 23.4067, + "volume": 55899915.0 + }, + { + "time": 1519776000, + "open": 23.4, + "high": 23.6827, + "low": 22.8147, + "close": 22.9467, + "volume": 74032890.0 + }, + { + "time": 1519862400, + "open": 22.8867, + "high": 23.2447, + "low": 22.0047, + "close": 22.1, + "volume": 82409115.0 + }, + { + "time": 1519948800, + "open": 22.1333, + "high": 22.348, + "low": 21.5313, + "close": 22.34, + "volume": 59703135.0 + }, + { + "time": 1520208000, + "open": 22.2813, + "high": 22.5167, + "low": 21.9527, + "close": 22.2633, + "volume": 44503275.0 + }, + { + "time": 1520294400, + "open": 22.28, + "high": 22.4247, + "low": 21.5333, + "close": 21.5333, + "volume": 51460950.0 + }, + { + "time": 1520380800, + "open": 21.6133, + "high": 22.1667, + "low": 21.4493, + "close": 22.0967, + "volume": 59825250.0 + }, + { + "time": 1520467200, + "open": 22.1333, + "high": 22.3, + "low": 21.5267, + "close": 21.7067, + "volume": 41452350.0 + }, + { + "time": 1520553600, + "open": 21.7673, + "high": 21.8993, + "low": 21.4913, + "close": 21.8053, + "volume": 63614580.0 + }, + { + "time": 1520812800, + "open": 21.92, + "high": 23.1473, + "low": 21.7667, + "close": 22.9967, + "volume": 100808145.0 + }, + { + "time": 1520899200, + "open": 22.886, + "high": 23.0987, + "low": 22.4173, + "close": 22.6833, + "volume": 71138010.0 + }, + { + "time": 1520985600, + "open": 22.758, + "high": 22.7813, + "low": 21.5953, + "close": 21.8333, + "volume": 94350375.0 + }, + { + "time": 1521072000, + "open": 21.8333, + "high": 22.19, + "low": 21.4067, + "close": 21.6653, + "volume": 76010130.0 + }, + { + "time": 1521158400, + "open": 21.6973, + "high": 21.8267, + "low": 21.2713, + "close": 21.4367, + "volume": 74099280.0 + }, + { + "time": 1521417600, + "open": 21.3533, + "high": 21.3833, + "low": 20.6447, + "close": 20.9107, + "volume": 89344530.0 + }, + { + "time": 1521504000, + "open": 20.9733, + "high": 21.0833, + "low": 20.584, + "close": 20.734, + "volume": 53260785.0 + }, + { + "time": 1521590400, + "open": 20.73, + "high": 21.496, + "low": 20.6127, + "close": 21.1333, + "volume": 71613060.0 + }, + { + "time": 1521676800, + "open": 21.05, + "high": 21.2547, + "low": 20.5333, + "close": 20.5333, + "volume": 52637865.0 + }, + { + "time": 1521763200, + "open": 20.5393, + "high": 20.8667, + "low": 20.03, + "close": 20.15, + "volume": 75360090.0 + }, + { + "time": 1522022400, + "open": 20.268, + "high": 20.6, + "low": 19.424, + "close": 20.3267, + "volume": 97042815.0 + }, + { + "time": 1522108800, + "open": 20.3333, + "high": 20.5, + "low": 18.074, + "close": 18.3, + "volume": 158944560.0 + }, + { + "time": 1522195200, + "open": 18.264, + "high": 18.5933, + "low": 16.8067, + "close": 16.9667, + "volume": 243796575.0 + }, + { + "time": 1522281600, + "open": 17.0807, + "high": 18.064, + "low": 16.5473, + "close": 17.3, + "volume": 177807180.0 + }, + { + "time": 1522627200, + "open": 17.0, + "high": 17.742, + "low": 16.306, + "close": 16.8067, + "volume": 195963285.0 + }, + { + "time": 1522713600, + "open": 17.0133, + "high": 18.2233, + "low": 16.9067, + "close": 17.88, + "volume": 230425485.0 + }, + { + "time": 1522800000, + "open": 17.7733, + "high": 19.2247, + "low": 16.8, + "close": 19.2133, + "volume": 246546495.0 + }, + { + "time": 1522886400, + "open": 19.26, + "high": 20.4173, + "low": 19.1333, + "close": 19.8667, + "volume": 226914720.0 + }, + { + "time": 1522972800, + "open": 19.8667, + "high": 20.6187, + "low": 19.7, + "close": 19.88, + "volume": 164396325.0 + }, + { + "time": 1523232000, + "open": 19.9927, + "high": 20.6333, + "low": 19.2267, + "close": 19.4267, + "volume": 124936080.0 + }, + { + "time": 1523318400, + "open": 19.8933, + "high": 20.4733, + "low": 19.5787, + "close": 20.22, + "volume": 133247355.0 + }, + { + "time": 1523404800, + "open": 20.1833, + "high": 20.5987, + "low": 19.9333, + "close": 20.1133, + "volume": 84874725.0 + }, + { + "time": 1523491200, + "open": 19.9853, + "high": 20.3333, + "low": 19.5787, + "close": 19.6667, + "volume": 86663775.0 + }, + { + "time": 1523577600, + "open": 19.68, + "high": 20.2653, + "low": 19.68, + "close": 19.98, + "volume": 87163425.0 + }, + { + "time": 1523836800, + "open": 20.0, + "high": 20.1, + "low": 19.2547, + "close": 19.3667, + "volume": 76768875.0 + }, + { + "time": 1523923200, + "open": 19.2467, + "high": 19.6933, + "low": 18.834, + "close": 19.584, + "volume": 84747060.0 + }, + { + "time": 1524009600, + "open": 19.574, + "high": 20.016, + "low": 19.2107, + "close": 19.6413, + "volume": 79921260.0 + }, + { + "time": 1524096000, + "open": 19.5767, + "high": 20.0673, + "low": 19.2367, + "close": 19.93, + "volume": 71637165.0 + }, + { + "time": 1524182400, + "open": 19.8667, + "high": 19.9987, + "low": 19.3073, + "close": 19.3167, + "volume": 67236780.0 + }, + { + "time": 1524441600, + "open": 19.38, + "high": 19.5533, + "low": 18.822, + "close": 18.9333, + "volume": 57966930.0 + }, + { + "time": 1524528000, + "open": 19.1, + "high": 19.1927, + "low": 18.564, + "close": 18.8667, + "volume": 63192825.0 + }, + { + "time": 1524614400, + "open": 18.9, + "high": 19.0107, + "low": 18.4833, + "close": 18.8527, + "volume": 45042330.0 + }, + { + "time": 1524700800, + "open": 18.8253, + "high": 19.1333, + "low": 18.4333, + "close": 19.0853, + "volume": 50144700.0 + }, + { + "time": 1524787200, + "open": 19.0333, + "high": 19.6313, + "low": 18.7867, + "close": 19.5, + "volume": 49810530.0 + }, + { + "time": 1525046400, + "open": 19.5513, + "high": 19.9153, + "low": 19.454, + "close": 19.5893, + "volume": 47944485.0 + }, + { + "time": 1525132800, + "open": 19.5967, + "high": 20.0767, + "low": 19.548, + "close": 20.0667, + "volume": 46620600.0 + }, + { + "time": 1525219200, + "open": 20.0267, + "high": 20.7733, + "low": 18.8147, + "close": 19.164, + "volume": 100044315.0 + }, + { + "time": 1525305600, + "open": 19.2667, + "high": 19.3667, + "low": 18.3487, + "close": 18.8667, + "volume": 200230050.0 + }, + { + "time": 1525392000, + "open": 18.9333, + "high": 19.7907, + "low": 18.6347, + "close": 19.55, + "volume": 97219695.0 + }, + { + "time": 1525651200, + "open": 19.6107, + "high": 20.3973, + "low": 19.55, + "close": 20.2653, + "volume": 100077990.0 + }, + { + "time": 1525737600, + "open": 20.2033, + "high": 20.5167, + "low": 19.9333, + "close": 20.12, + "volume": 69679140.0 + }, + { + "time": 1525824000, + "open": 20.1333, + "high": 20.4673, + "low": 19.9533, + "close": 20.3987, + "volume": 65864130.0 + }, + { + "time": 1525910400, + "open": 20.4567, + "high": 20.866, + "low": 20.2367, + "close": 20.2367, + "volume": 65703270.0 + }, + { + "time": 1525996800, + "open": 20.3213, + "high": 20.592, + "low": 19.9387, + "close": 20.04, + "volume": 52073175.0 + }, + { + "time": 1526256000, + "open": 20.3333, + "high": 20.4667, + "low": 19.4, + "close": 19.4, + "volume": 83199000.0 + }, + { + "time": 1526342400, + "open": 19.3333, + "high": 19.3333, + "low": 18.7, + "close": 18.8667, + "volume": 109926450.0 + }, + { + "time": 1526428800, + "open": 18.9153, + "high": 19.254, + "low": 18.7707, + "close": 19.0933, + "volume": 65149395.0 + }, + { + "time": 1526515200, + "open": 19.0527, + "high": 19.2793, + "low": 18.92, + "close": 19.0367, + "volume": 50506260.0 + }, + { + "time": 1526601600, + "open": 19.0073, + "high": 19.0633, + "low": 18.2667, + "close": 18.4533, + "volume": 82659480.0 + }, + { + "time": 1526860800, + "open": 18.7, + "high": 19.4327, + "low": 18.6467, + "close": 18.9333, + "volume": 110223840.0 + }, + { + "time": 1526947200, + "open": 19.0267, + "high": 19.2333, + "low": 18.228, + "close": 18.342, + "volume": 104515395.0 + }, + { + "time": 1527033600, + "open": 18.3333, + "high": 18.6607, + "low": 18.1653, + "close": 18.56, + "volume": 68248245.0 + }, + { + "time": 1527120000, + "open": 18.6047, + "high": 18.7407, + "low": 18.326, + "close": 18.5653, + "volume": 48098295.0 + }, + { + "time": 1527206400, + "open": 18.5667, + "high": 18.6427, + "low": 18.374, + "close": 18.6, + "volume": 43134090.0 + }, + { + "time": 1527552000, + "open": 18.6, + "high": 19.1, + "low": 18.41, + "close": 18.8333, + "volume": 68391420.0 + }, + { + "time": 1527638400, + "open": 18.8667, + "high": 19.6673, + "low": 18.7407, + "close": 19.4133, + "volume": 86829480.0 + }, + { + "time": 1527724800, + "open": 19.4007, + "high": 19.4267, + "low": 18.862, + "close": 18.9667, + "volume": 65445975.0 + }, + { + "time": 1527811200, + "open": 18.9873, + "high": 19.4667, + "low": 18.922, + "close": 19.4667, + "volume": 60092265.0 + }, + { + "time": 1528070400, + "open": 19.47, + "high": 19.9333, + "low": 19.466, + "close": 19.7167, + "volume": 56356245.0 + }, + { + "time": 1528156800, + "open": 19.7, + "high": 19.8667, + "low": 19.116, + "close": 19.6, + "volume": 67469700.0 + }, + { + "time": 1528243200, + "open": 19.6067, + "high": 21.478, + "low": 19.574, + "close": 21.2667, + "volume": 223350765.0 + }, + { + "time": 1528329600, + "open": 21.22, + "high": 22.0, + "low": 20.9053, + "close": 21.12, + "volume": 173810055.0 + }, + { + "time": 1528416000, + "open": 21.0407, + "high": 21.632, + "low": 20.9, + "close": 21.1773, + "volume": 97360800.0 + }, + { + "time": 1528675200, + "open": 21.1773, + "high": 22.3107, + "low": 21.1773, + "close": 22.2153, + "volume": 159962145.0 + }, + { + "time": 1528761600, + "open": 22.238, + "high": 23.6647, + "low": 22.238, + "close": 22.8413, + "volume": 268792350.0 + }, + { + "time": 1528848000, + "open": 23.0, + "high": 23.3387, + "low": 22.6, + "close": 23.1987, + "volume": 115255125.0 + }, + { + "time": 1528934400, + "open": 23.06, + "high": 23.9167, + "low": 22.9993, + "close": 23.8, + "volume": 133885455.0 + }, + { + "time": 1529020800, + "open": 23.7167, + "high": 24.3113, + "low": 23.4167, + "close": 23.9, + "volume": 128061330.0 + }, + { + "time": 1529280000, + "open": 23.7087, + "high": 24.9153, + "low": 23.4, + "close": 24.494, + "volume": 145368480.0 + }, + { + "time": 1529366400, + "open": 24.3333, + "high": 24.6667, + "low": 23.0833, + "close": 23.414, + "volume": 155148825.0 + }, + { + "time": 1529452800, + "open": 23.6, + "high": 24.292, + "low": 23.4667, + "close": 24.1833, + "volume": 99665430.0 + }, + { + "time": 1529539200, + "open": 24.1733, + "high": 24.4147, + "low": 23.0673, + "close": 23.0673, + "volume": 94828470.0 + }, + { + "time": 1529625600, + "open": 23.0667, + "high": 23.6807, + "low": 22.1333, + "close": 22.2167, + "volume": 120476655.0 + }, + { + "time": 1529884800, + "open": 22.17, + "high": 22.5647, + "low": 21.8333, + "close": 22.2287, + "volume": 80040690.0 + }, + { + "time": 1529971200, + "open": 22.15, + "high": 22.9033, + "low": 21.7193, + "close": 22.82, + "volume": 90073035.0 + }, + { + "time": 1530057600, + "open": 22.6667, + "high": 23.386, + "low": 22.4507, + "close": 23.026, + "volume": 101165250.0 + }, + { + "time": 1530144000, + "open": 23.16, + "high": 23.8013, + "low": 22.932, + "close": 23.35, + "volume": 100403235.0 + }, + { + "time": 1530230400, + "open": 23.4467, + "high": 23.728, + "low": 22.8207, + "close": 22.9333, + "volume": 79185540.0 + }, + { + "time": 1530489600, + "open": 23.8067, + "high": 24.4467, + "low": 21.99, + "close": 22.456, + "volume": 233595795.0 + }, + { + "time": 1530576000, + "open": 22.4567, + "high": 22.4667, + "low": 20.62, + "close": 20.654, + "volume": 149002155.0 + }, + { + "time": 1530748800, + "open": 20.7333, + "high": 21.0, + "low": 19.748, + "close": 20.5007, + "volume": 213613665.0 + }, + { + "time": 1530835200, + "open": 20.6, + "high": 20.8047, + "low": 20.1333, + "close": 20.6, + "volume": 110289180.0 + }, + { + "time": 1531094400, + "open": 20.7933, + "high": 21.2347, + "low": 20.5333, + "close": 21.2193, + "volume": 89890020.0 + }, + { + "time": 1531180800, + "open": 21.2667, + "high": 21.9653, + "low": 21.0707, + "close": 21.1267, + "volume": 113676510.0 + }, + { + "time": 1531267200, + "open": 21.1733, + "high": 21.4627, + "low": 20.9427, + "close": 21.2333, + "volume": 58766760.0 + }, + { + "time": 1531353600, + "open": 21.3667, + "high": 21.562, + "low": 20.8513, + "close": 21.076, + "volume": 67817835.0 + }, + { + "time": 1531440000, + "open": 21.1733, + "high": 21.306, + "low": 20.6167, + "close": 21.2267, + "volume": 73379730.0 + }, + { + "time": 1531699200, + "open": 21.124, + "high": 21.1433, + "low": 20.4167, + "close": 20.48, + "volume": 96201240.0 + }, + { + "time": 1531785600, + "open": 20.5733, + "high": 21.6493, + "low": 20.4667, + "close": 21.49, + "volume": 84189390.0 + }, + { + "time": 1531872000, + "open": 21.5067, + "high": 21.7267, + "low": 21.0833, + "close": 21.612, + "volume": 69456900.0 + }, + { + "time": 1531958400, + "open": 21.4667, + "high": 21.5693, + "low": 20.934, + "close": 21.3667, + "volume": 72958365.0 + }, + { + "time": 1532044800, + "open": 21.408, + "high": 21.5493, + "low": 20.78, + "close": 20.904, + "volume": 62980500.0 + }, + { + "time": 1532304000, + "open": 20.666, + "high": 20.666, + "low": 19.524, + "close": 20.2667, + "volume": 129825210.0 + }, + { + "time": 1532390400, + "open": 20.266, + "high": 20.5147, + "low": 19.5027, + "close": 19.7987, + "volume": 115360290.0 + }, + { + "time": 1532476800, + "open": 19.8287, + "high": 20.6413, + "low": 19.5333, + "close": 20.1333, + "volume": 86301735.0 + }, + { + "time": 1532563200, + "open": 20.214, + "high": 20.7133, + "low": 20.214, + "close": 20.5, + "volume": 56522880.0 + }, + { + "time": 1532649600, + "open": 20.5667, + "high": 20.5667, + "low": 19.6893, + "close": 19.7993, + "volume": 52540545.0 + }, + { + "time": 1532908800, + "open": 19.6667, + "high": 19.8013, + "low": 19.0753, + "close": 19.3333, + "volume": 79959210.0 + }, + { + "time": 1532995200, + "open": 19.27, + "high": 19.9907, + "low": 19.27, + "close": 19.854, + "volume": 60069180.0 + }, + { + "time": 1533081600, + "open": 19.9567, + "high": 22.3833, + "low": 19.3333, + "close": 21.9327, + "volume": 117020970.0 + }, + { + "time": 1533168000, + "open": 21.77, + "high": 23.3333, + "low": 21.544, + "close": 23.3213, + "volume": 279512445.0 + }, + { + "time": 1533254400, + "open": 23.0667, + "high": 23.6667, + "low": 22.8353, + "close": 23.1367, + "volume": 159452790.0 + }, + { + "time": 1533513600, + "open": 23.0567, + "high": 23.6653, + "low": 22.6013, + "close": 22.6667, + "volume": 102678015.0 + }, + { + "time": 1533600000, + "open": 22.7373, + "high": 25.8307, + "low": 22.61, + "close": 25.1333, + "volume": 381052725.0 + }, + { + "time": 1533686400, + "open": 25.266, + "high": 25.5093, + "low": 24.4347, + "close": 24.6333, + "volume": 280429020.0 + }, + { + "time": 1533772800, + "open": 24.5067, + "high": 24.5867, + "low": 23.0487, + "close": 23.874, + "volume": 199309800.0 + }, + { + "time": 1533859200, + "open": 23.7333, + "high": 24.1933, + "low": 23.0667, + "close": 23.48, + "volume": 137798880.0 + }, + { + "time": 1534118400, + "open": 23.54, + "high": 24.5327, + "low": 23.268, + "close": 23.6393, + "volume": 121692615.0 + }, + { + "time": 1534204800, + "open": 23.8253, + "high": 23.9467, + "low": 23.1133, + "close": 23.1333, + "volume": 82835430.0 + }, + { + "time": 1534291200, + "open": 23.246, + "high": 23.3227, + "low": 22.1427, + "close": 22.3733, + "volume": 105751815.0 + }, + { + "time": 1534377600, + "open": 22.5533, + "high": 22.9567, + "low": 22.2547, + "close": 22.34, + "volume": 66955965.0 + }, + { + "time": 1534464000, + "open": 22.2067, + "high": 22.2667, + "low": 20.2033, + "close": 20.2033, + "volume": 224153370.0 + }, + { + "time": 1534723200, + "open": 20.2333, + "high": 20.5993, + "low": 18.8193, + "close": 20.4933, + "volume": 202795425.0 + }, + { + "time": 1534809600, + "open": 20.56, + "high": 21.6527, + "low": 20.534, + "close": 21.2, + "volume": 156089955.0 + }, + { + "time": 1534896000, + "open": 21.372, + "high": 21.592, + "low": 20.978, + "close": 21.4867, + "volume": 73769700.0 + }, + { + "time": 1534982400, + "open": 21.4867, + "high": 21.8213, + "low": 21.2067, + "close": 21.3587, + "volume": 63324510.0 + }, + { + "time": 1535068800, + "open": 21.3593, + "high": 21.59, + "low": 21.2933, + "close": 21.4793, + "volume": 42289110.0 + }, + { + "time": 1535328000, + "open": 20.6667, + "high": 21.496, + "low": 20.2347, + "close": 21.2273, + "volume": 164076645.0 + }, + { + "time": 1535414400, + "open": 21.3067, + "high": 21.3067, + "low": 20.746, + "close": 20.8333, + "volume": 94857345.0 + }, + { + "time": 1535500800, + "open": 20.776, + "high": 20.8233, + "low": 20.2333, + "close": 20.2413, + "volume": 90330150.0 + }, + { + "time": 1535587200, + "open": 20.2333, + "high": 20.38, + "low": 19.848, + "close": 20.1533, + "volume": 87190275.0 + }, + { + "time": 1535673600, + "open": 20.1667, + "high": 20.354, + "low": 19.9067, + "close": 20.09, + "volume": 64315245.0 + }, + { + "time": 1536019200, + "open": 20.0, + "high": 20.0, + "low": 19.1507, + "close": 19.1507, + "volume": 100324125.0 + }, + { + "time": 1536105600, + "open": 19.2, + "high": 19.2213, + "low": 18.4787, + "close": 18.8167, + "volume": 87707505.0 + }, + { + "time": 1536192000, + "open": 18.83, + "high": 19.4113, + "low": 18.592, + "close": 18.7667, + "volume": 88452450.0 + }, + { + "time": 1536278400, + "open": 18.7333, + "high": 18.7333, + "low": 16.8167, + "close": 17.6353, + "volume": 264414765.0 + }, + { + "time": 1536537600, + "open": 17.8667, + "high": 19.1333, + "low": 17.866, + "close": 18.9793, + "volume": 176956905.0 + }, + { + "time": 1536624000, + "open": 19.0, + "high": 19.0327, + "low": 18.2367, + "close": 18.62, + "volume": 110538330.0 + }, + { + "time": 1536710400, + "open": 18.7333, + "high": 19.5, + "low": 18.576, + "close": 19.35, + "volume": 118337070.0 + }, + { + "time": 1536796800, + "open": 19.3567, + "high": 19.6667, + "low": 19.012, + "close": 19.3167, + "volume": 73748235.0 + }, + { + "time": 1536883200, + "open": 19.4233, + "high": 19.822, + "low": 19.1013, + "close": 19.6587, + "volume": 79030395.0 + }, + { + "time": 1537142400, + "open": 19.6467, + "high": 20.058, + "low": 19.0813, + "close": 19.5267, + "volume": 81452700.0 + }, + { + "time": 1537228800, + "open": 19.8527, + "high": 20.176, + "low": 18.3667, + "close": 18.8067, + "volume": 201292170.0 + }, + { + "time": 1537315200, + "open": 18.954, + "high": 20.0, + "low": 18.56, + "close": 19.8833, + "volume": 96540390.0 + }, + { + "time": 1537401600, + "open": 19.9647, + "high": 20.3987, + "low": 19.5553, + "close": 19.9187, + "volume": 87191865.0 + }, + { + "time": 1537488000, + "open": 19.8653, + "high": 20.0387, + "low": 19.6913, + "close": 19.828, + "volume": 55254180.0 + }, + { + "time": 1537747200, + "open": 19.6667, + "high": 20.2, + "low": 19.572, + "close": 19.912, + "volume": 56511855.0 + }, + { + "time": 1537833600, + "open": 19.9333, + "high": 20.3067, + "low": 19.7667, + "close": 20.0, + "volume": 52293330.0 + }, + { + "time": 1537920000, + "open": 20.1333, + "high": 20.926, + "low": 20.0667, + "close": 20.7, + "volume": 91873710.0 + }, + { + "time": 1538006400, + "open": 20.6333, + "high": 21.0, + "low": 17.6667, + "close": 18.06, + "volume": 95037525.0 + }, + { + "time": 1538092800, + "open": 18.2007, + "high": 18.5333, + "low": 17.37, + "close": 17.7333, + "volume": 403081170.0 + }, + { + "time": 1538352000, + "open": 19.726, + "high": 21.03, + "low": 19.4333, + "close": 20.3333, + "volume": 260729640.0 + }, + { + "time": 1538438400, + "open": 20.5847, + "high": 21.166, + "low": 19.9433, + "close": 20.2733, + "volume": 139184115.0 + }, + { + "time": 1538524800, + "open": 20.3333, + "high": 20.4333, + "low": 19.438, + "close": 19.654, + "volume": 96930465.0 + }, + { + "time": 1538611200, + "open": 19.68, + "high": 19.68, + "low": 18.1333, + "close": 18.35, + "volume": 114758670.0 + }, + { + "time": 1538697600, + "open": 18.2673, + "high": 18.35, + "low": 17.3333, + "close": 17.53, + "volume": 208825890.0 + }, + { + "time": 1538956800, + "open": 17.5333, + "high": 17.8507, + "low": 16.6, + "close": 17.03, + "volume": 153828015.0 + }, + { + "time": 1539043200, + "open": 17.0, + "high": 17.7847, + "low": 16.8347, + "close": 17.6507, + "volume": 141231210.0 + }, + { + "time": 1539129600, + "open": 17.6507, + "high": 17.766, + "low": 16.518, + "close": 16.8133, + "volume": 148776810.0 + }, + { + "time": 1539216000, + "open": 17.0, + "high": 17.4833, + "low": 16.602, + "close": 17.0, + "volume": 94547865.0 + }, + { + "time": 1539302400, + "open": 17.0667, + "high": 17.466, + "low": 16.8007, + "close": 17.2333, + "volume": 83192580.0 + }, + { + "time": 1539561600, + "open": 17.148, + "high": 17.552, + "low": 16.9687, + "close": 17.3, + "volume": 74660160.0 + }, + { + "time": 1539648000, + "open": 17.3333, + "high": 18.6, + "low": 17.2747, + "close": 18.6, + "volume": 107659140.0 + }, + { + "time": 1539734400, + "open": 18.5833, + "high": 18.8667, + "low": 17.72, + "close": 17.9347, + "volume": 101049495.0 + }, + { + "time": 1539820800, + "open": 18.0, + "high": 18.0667, + "low": 17.5333, + "close": 17.7213, + "volume": 62268090.0 + }, + { + "time": 1539907200, + "open": 17.8333, + "high": 17.99, + "low": 16.9, + "close": 17.304, + "volume": 110253090.0 + }, + { + "time": 1540166400, + "open": 17.3993, + "high": 17.5133, + "low": 16.8393, + "close": 17.3533, + "volume": 61455330.0 + }, + { + "time": 1540252800, + "open": 17.2667, + "high": 19.9, + "low": 17.108, + "close": 19.8467, + "volume": 224905620.0 + }, + { + "time": 1540339200, + "open": 19.8, + "high": 22.1333, + "low": 19.0, + "close": 21.12, + "volume": 235572405.0 + }, + { + "time": 1540425600, + "open": 21.1333, + "high": 21.666, + "low": 20.0673, + "close": 20.748, + "volume": 246957480.0 + }, + { + "time": 1540512000, + "open": 20.4867, + "high": 22.66, + "low": 20.1247, + "close": 21.7993, + "volume": 331244850.0 + }, + { + "time": 1540771200, + "open": 21.6667, + "high": 23.144, + "low": 21.596, + "close": 22.1013, + "volume": 177468000.0 + }, + { + "time": 1540857600, + "open": 22.1013, + "high": 22.5267, + "low": 21.484, + "close": 22.0333, + "volume": 111830760.0 + }, + { + "time": 1540944000, + "open": 22.12, + "high": 22.8, + "low": 21.94, + "close": 22.486, + "volume": 88997550.0 + }, + { + "time": 1541030400, + "open": 22.6433, + "high": 23.1893, + "low": 22.3147, + "close": 22.8, + "volume": 98076885.0 + }, + { + "time": 1541116800, + "open": 23.1333, + "high": 23.28, + "low": 22.7273, + "close": 23.034, + "volume": 96029265.0 + }, + { + "time": 1541376000, + "open": 23.0, + "high": 23.0, + "low": 22.0093, + "close": 22.7793, + "volume": 93116505.0 + }, + { + "time": 1541462400, + "open": 22.6733, + "high": 23.2533, + "low": 22.406, + "close": 22.8753, + "volume": 83178450.0 + }, + { + "time": 1541548800, + "open": 22.9333, + "high": 23.412, + "low": 22.72, + "close": 23.2053, + "volume": 82208655.0 + }, + { + "time": 1541635200, + "open": 23.2667, + "high": 23.8387, + "low": 23.134, + "close": 23.426, + "volume": 83512380.0 + }, + { + "time": 1541721600, + "open": 23.2453, + "high": 23.6, + "low": 23.0153, + "close": 23.3667, + "volume": 62071020.0 + }, + { + "time": 1541980800, + "open": 23.3333, + "high": 23.372, + "low": 21.9, + "close": 21.9, + "volume": 85421925.0 + }, + { + "time": 1542067200, + "open": 22.1667, + "high": 22.98, + "low": 22.1467, + "close": 22.7167, + "volume": 61718760.0 + }, + { + "time": 1542153600, + "open": 22.52, + "high": 23.1407, + "low": 22.4733, + "close": 22.8947, + "volume": 61075260.0 + }, + { + "time": 1542240000, + "open": 23.0, + "high": 23.2387, + "low": 22.6027, + "close": 23.1333, + "volume": 55608810.0 + }, + { + "time": 1542326400, + "open": 23.0767, + "high": 23.7133, + "low": 22.9333, + "close": 23.6267, + "volume": 83323110.0 + }, + { + "time": 1542585600, + "open": 23.6833, + "high": 24.45, + "low": 23.4867, + "close": 23.5933, + "volume": 117911925.0 + }, + { + "time": 1542672000, + "open": 23.5, + "high": 23.5, + "low": 22.2367, + "close": 23.1653, + "volume": 96513690.0 + }, + { + "time": 1542758400, + "open": 23.3333, + "high": 23.6, + "low": 22.4767, + "close": 22.56, + "volume": 55336395.0 + }, + { + "time": 1542931200, + "open": 22.3333, + "high": 22.5, + "low": 21.6, + "close": 21.6, + "volume": 50440110.0 + }, + { + "time": 1543190400, + "open": 21.7333, + "high": 23.0813, + "low": 21.6533, + "close": 22.8867, + "volume": 98172615.0 + }, + { + "time": 1543276800, + "open": 22.8333, + "high": 23.1307, + "low": 22.3667, + "close": 23.03, + "volume": 76446435.0 + }, + { + "time": 1543363200, + "open": 23.0, + "high": 23.2187, + "low": 22.814, + "close": 23.1327, + "volume": 50226975.0 + }, + { + "time": 1543449600, + "open": 23.0333, + "high": 23.1667, + "low": 22.6367, + "close": 22.7333, + "volume": 36297450.0 + }, + { + "time": 1543536000, + "open": 22.6667, + "high": 23.44, + "low": 22.5507, + "close": 23.38, + "volume": 67724880.0 + }, + { + "time": 1543795200, + "open": 23.8, + "high": 24.4, + "low": 23.4667, + "close": 23.8133, + "volume": 101594700.0 + }, + { + "time": 1543881600, + "open": 23.7333, + "high": 24.5787, + "low": 23.4667, + "close": 24.168, + "volume": 103683075.0 + }, + { + "time": 1544054400, + "open": 23.8333, + "high": 24.492, + "low": 23.384, + "close": 24.22, + "volume": 93603030.0 + }, + { + "time": 1544140800, + "open": 24.522, + "high": 25.2993, + "low": 23.8333, + "close": 24.0667, + "volume": 135610470.0 + }, + { + "time": 1544400000, + "open": 23.9993, + "high": 24.4, + "low": 23.5413, + "close": 24.2333, + "volume": 78864630.0 + }, + { + "time": 1544486400, + "open": 24.3133, + "high": 24.84, + "low": 24.0153, + "close": 24.5667, + "volume": 76196595.0 + }, + { + "time": 1544572800, + "open": 24.638, + "high": 24.794, + "low": 24.344, + "close": 24.526, + "volume": 60857985.0 + }, + { + "time": 1544659200, + "open": 24.5333, + "high": 25.1807, + "low": 24.45, + "close": 25.03, + "volume": 87478575.0 + }, + { + "time": 1544745600, + "open": 24.96, + "high": 25.1913, + "low": 24.2887, + "close": 24.4333, + "volume": 75673965.0 + }, + { + "time": 1545004800, + "open": 24.4733, + "high": 24.59, + "low": 22.9253, + "close": 23.3333, + "volume": 90968295.0 + }, + { + "time": 1545091200, + "open": 23.5253, + "high": 23.554, + "low": 22.246, + "close": 22.452, + "volume": 85943745.0 + }, + { + "time": 1545177600, + "open": 22.4707, + "high": 23.134, + "low": 21.9827, + "close": 22.0927, + "volume": 91612320.0 + }, + { + "time": 1545264000, + "open": 22.08, + "high": 22.2873, + "low": 20.7907, + "close": 20.97, + "volume": 112096500.0 + }, + { + "time": 1545350400, + "open": 21.1033, + "high": 21.5647, + "low": 20.8293, + "close": 21.1333, + "volume": 97661730.0 + }, + { + "time": 1545609600, + "open": 21.5333, + "high": 21.6, + "low": 19.5333, + "close": 19.5407, + "volume": 66350835.0 + }, + { + "time": 1545782400, + "open": 19.4667, + "high": 21.798, + "low": 19.4667, + "close": 21.6233, + "volume": 98012415.0 + }, + { + "time": 1545868800, + "open": 21.478, + "high": 21.5967, + "low": 20.1, + "close": 20.9, + "volume": 104624100.0 + }, + { + "time": 1545955200, + "open": 20.9333, + "high": 22.416, + "low": 20.9333, + "close": 22.2, + "volume": 121384305.0 + }, + { + "time": 1546214400, + "open": 22.3067, + "high": 22.706, + "low": 21.684, + "close": 22.2, + "volume": 78022320.0 + }, + { + "time": 1546387200, + "open": 21.7333, + "high": 22.1867, + "low": 19.92, + "close": 20.3767, + "volume": 138488085.0 + }, + { + "time": 1546473600, + "open": 20.4327, + "high": 20.6267, + "low": 19.8253, + "close": 19.9333, + "volume": 85079760.0 + }, + { + "time": 1546560000, + "open": 20.3, + "high": 21.2, + "low": 20.182, + "close": 21.2, + "volume": 89212035.0 + }, + { + "time": 1546819200, + "open": 21.3333, + "high": 22.4493, + "low": 21.1833, + "close": 22.3267, + "volume": 89667855.0 + }, + { + "time": 1546905600, + "open": 22.3333, + "high": 23.0, + "low": 21.8013, + "close": 22.3793, + "volume": 86465175.0 + }, + { + "time": 1546992000, + "open": 22.344, + "high": 22.9007, + "low": 22.0667, + "close": 22.5333, + "volume": 63893385.0 + }, + { + "time": 1547078400, + "open": 22.386, + "high": 23.026, + "low": 22.1193, + "close": 22.9333, + "volume": 72991995.0 + }, + { + "time": 1547164800, + "open": 22.9333, + "high": 23.2273, + "low": 22.5847, + "close": 23.1167, + "volume": 60942345.0 + }, + { + "time": 1547424000, + "open": 22.9, + "high": 22.9, + "low": 22.228, + "close": 22.316, + "volume": 63718830.0 + }, + { + "time": 1547510400, + "open": 22.4267, + "high": 23.2533, + "low": 22.3, + "close": 23.04, + "volume": 73060710.0 + }, + { + "time": 1547596800, + "open": 22.9927, + "high": 23.4667, + "low": 22.9, + "close": 23.0067, + "volume": 53209815.0 + }, + { + "time": 1547683200, + "open": 22.95, + "high": 23.4333, + "low": 22.92, + "close": 23.2133, + "volume": 44328525.0 + }, + { + "time": 1547769600, + "open": 23.3333, + "high": 23.3333, + "low": 19.982, + "close": 20.3133, + "volume": 289579830.0 + }, + { + "time": 1548115200, + "open": 20.2667, + "high": 20.5667, + "low": 19.7, + "close": 19.9407, + "volume": 146101185.0 + }, + { + "time": 1548201600, + "open": 19.6267, + "high": 19.7193, + "low": 18.7793, + "close": 19.1713, + "volume": 148002600.0 + }, + { + "time": 1548288000, + "open": 19.1833, + "high": 19.5787, + "low": 18.6187, + "close": 19.2667, + "volume": 92497140.0 + }, + { + "time": 1548374400, + "open": 19.4653, + "high": 19.9013, + "low": 19.3033, + "close": 19.7413, + "volume": 83032155.0 + }, + { + "time": 1548633600, + "open": 19.6867, + "high": 19.85, + "low": 19.1833, + "close": 19.6407, + "volume": 75093600.0 + }, + { + "time": 1548720000, + "open": 19.6, + "high": 19.9293, + "low": 19.4533, + "close": 19.8727, + "volume": 55303035.0 + }, + { + "time": 1548806400, + "open": 19.9527, + "high": 21.2, + "low": 19.3673, + "close": 19.6, + "volume": 128510025.0 + }, + { + "time": 1548892800, + "open": 19.7407, + "high": 20.7713, + "low": 19.4767, + "close": 20.3073, + "volume": 150214920.0 + }, + { + "time": 1548979200, + "open": 20.396, + "high": 21.0733, + "low": 20.2333, + "close": 20.8, + "volume": 88314525.0 + }, + { + "time": 1549238400, + "open": 20.7327, + "high": 21.02, + "low": 20.1253, + "close": 20.8213, + "volume": 91278885.0 + }, + { + "time": 1549324800, + "open": 20.8327, + "high": 21.496, + "low": 20.7707, + "close": 21.4327, + "volume": 80787765.0 + }, + { + "time": 1549411200, + "open": 21.4233, + "high": 21.616, + "low": 21.0413, + "close": 21.1333, + "volume": 61091385.0 + }, + { + "time": 1549497600, + "open": 21.0667, + "high": 21.0807, + "low": 20.2, + "close": 20.4027, + "volume": 79000440.0 + }, + { + "time": 1549584000, + "open": 20.308, + "high": 20.53, + "low": 19.9, + "close": 20.3433, + "volume": 69815910.0 + }, + { + "time": 1549843200, + "open": 20.3887, + "high": 21.24, + "low": 20.3887, + "close": 20.8333, + "volume": 88060125.0 + }, + { + "time": 1549929600, + "open": 21.0667, + "high": 21.2127, + "low": 20.6413, + "close": 20.7, + "volume": 65880930.0 + }, + { + "time": 1550016000, + "open": 20.8147, + "high": 20.9, + "low": 20.3713, + "close": 20.48, + "volume": 59951655.0 + }, + { + "time": 1550102400, + "open": 20.5147, + "high": 20.58, + "low": 20.0667, + "close": 20.2333, + "volume": 61683570.0 + }, + { + "time": 1550188800, + "open": 20.3, + "high": 20.5587, + "low": 20.26, + "close": 20.5293, + "volume": 46719975.0 + }, + { + "time": 1550534400, + "open": 20.4667, + "high": 20.77, + "low": 20.3007, + "close": 20.44, + "volume": 48097965.0 + }, + { + "time": 1550620800, + "open": 20.4833, + "high": 20.614, + "low": 19.9167, + "close": 20.1467, + "volume": 84401340.0 + }, + { + "time": 1550707200, + "open": 20.1927, + "high": 20.24, + "low": 19.3667, + "close": 19.4933, + "volume": 107646420.0 + }, + { + "time": 1550793600, + "open": 19.6, + "high": 19.7667, + "low": 19.4153, + "close": 19.6667, + "volume": 68671965.0 + }, + { + "time": 1551052800, + "open": 19.7793, + "high": 20.194, + "low": 18.8327, + "close": 19.2, + "volume": 81461385.0 + }, + { + "time": 1551139200, + "open": 19.2333, + "high": 20.134, + "low": 19.164, + "close": 19.868, + "volume": 104134410.0 + }, + { + "time": 1551225600, + "open": 19.8307, + "high": 21.0867, + "low": 19.8307, + "close": 21.0307, + "volume": 137486940.0 + }, + { + "time": 1551312000, + "open": 21.0307, + "high": 21.578, + "low": 20.4533, + "close": 20.6267, + "volume": 128665170.0 + }, + { + "time": 1551398400, + "open": 20.6667, + "high": 20.6667, + "low": 19.46, + "close": 19.6027, + "volume": 274694670.0 + }, + { + "time": 1551657600, + "open": 19.8, + "high": 20.0513, + "low": 18.852, + "close": 19.062, + "volume": 200186820.0 + }, + { + "time": 1551744000, + "open": 19.1587, + "high": 19.2333, + "low": 18.0067, + "close": 18.4833, + "volume": 224784825.0 + }, + { + "time": 1551830400, + "open": 18.5333, + "high": 18.7673, + "low": 18.2927, + "close": 18.4533, + "volume": 130688295.0 + }, + { + "time": 1551916800, + "open": 18.4, + "high": 18.98, + "low": 18.2833, + "close": 18.6333, + "volume": 117750495.0 + }, + { + "time": 1552003200, + "open": 18.5867, + "high": 19.0393, + "low": 18.222, + "close": 18.96, + "volume": 109426785.0 + }, + { + "time": 1552262400, + "open": 19.0667, + "high": 19.4187, + "low": 18.64, + "close": 19.35, + "volume": 91647090.0 + }, + { + "time": 1552348800, + "open": 19.35, + "high": 19.4433, + "low": 18.7373, + "close": 18.8567, + "volume": 94183110.0 + }, + { + "time": 1552435200, + "open": 18.7673, + "high": 19.466, + "low": 18.74, + "close": 19.29, + "volume": 84463050.0 + }, + { + "time": 1552521600, + "open": 19.3327, + "high": 19.6927, + "low": 19.076, + "close": 19.2467, + "volume": 87638685.0 + }, + { + "time": 1552608000, + "open": 19.1333, + "high": 19.1333, + "low": 18.2933, + "close": 18.358, + "volume": 181501410.0 + }, + { + "time": 1552867200, + "open": 18.5, + "high": 18.5367, + "low": 17.82, + "close": 17.9, + "volume": 126356685.0 + }, + { + "time": 1552953600, + "open": 17.8733, + "high": 18.22, + "low": 17.564, + "close": 17.8767, + "volume": 147554025.0 + }, + { + "time": 1553040000, + "open": 17.926, + "high": 18.3313, + "low": 17.7533, + "close": 18.2633, + "volume": 87481035.0 + }, + { + "time": 1553126400, + "open": 18.2607, + "high": 18.43, + "low": 17.8967, + "close": 18.3267, + "volume": 73793190.0 + }, + { + "time": 1553212800, + "open": 18.324, + "high": 18.3933, + "low": 17.6, + "close": 17.6233, + "volume": 107444580.0 + }, + { + "time": 1553472000, + "open": 17.5753, + "high": 17.6, + "low": 16.964, + "close": 17.424, + "volume": 125519295.0 + }, + { + "time": 1553558400, + "open": 17.5153, + "high": 18.0173, + "low": 17.5153, + "close": 17.8833, + "volume": 90114720.0 + }, + { + "time": 1553644800, + "open": 17.9, + "high": 18.358, + "low": 17.764, + "close": 18.3173, + "volume": 111765915.0 + }, + { + "time": 1553731200, + "open": 18.322, + "high": 18.6887, + "low": 18.2753, + "close": 18.6267, + "volume": 84429480.0 + }, + { + "time": 1553817600, + "open": 18.608, + "high": 18.6773, + "low": 18.3, + "close": 18.6533, + "volume": 74496975.0 + }, + { + "time": 1554076800, + "open": 18.8133, + "high": 19.28, + "low": 18.7333, + "close": 19.2133, + "volume": 100487535.0 + }, + { + "time": 1554163200, + "open": 19.2067, + "high": 19.296, + "low": 18.9253, + "close": 19.1567, + "volume": 67021665.0 + }, + { + "time": 1554249600, + "open": 19.252, + "high": 19.7447, + "low": 19.0733, + "close": 19.428, + "volume": 98939940.0 + }, + { + "time": 1554336000, + "open": 18.322, + "high": 18.4, + "low": 17.34, + "close": 17.8667, + "volume": 265556415.0 + }, + { + "time": 1554422400, + "open": 17.9733, + "high": 18.4067, + "low": 17.7407, + "close": 18.3267, + "volume": 155499960.0 + }, + { + "time": 1554681600, + "open": 18.4333, + "high": 18.744, + "low": 18.0293, + "close": 18.2667, + "volume": 129487440.0 + }, + { + "time": 1554768000, + "open": 18.314, + "high": 18.3333, + "low": 17.974, + "close": 18.154, + "volume": 72568875.0 + }, + { + "time": 1554854400, + "open": 18.2333, + "high": 18.65, + "low": 18.184, + "close": 18.44, + "volume": 87333435.0 + }, + { + "time": 1554940800, + "open": 18.3953, + "high": 18.45, + "low": 17.5467, + "close": 17.9267, + "volume": 115465245.0 + }, + { + "time": 1555027200, + "open": 17.9467, + "high": 18.13, + "low": 17.7887, + "close": 17.8347, + "volume": 83273295.0 + }, + { + "time": 1555286400, + "open": 17.8333, + "high": 17.93, + "low": 17.242, + "close": 17.7667, + "volume": 121678560.0 + }, + { + "time": 1555372800, + "open": 17.7973, + "high": 18.3333, + "low": 17.648, + "close": 18.1867, + "volume": 89589750.0 + }, + { + "time": 1555459200, + "open": 18.3133, + "high": 18.3267, + "low": 17.902, + "close": 18.08, + "volume": 61218300.0 + }, + { + "time": 1555545600, + "open": 18.0, + "high": 18.3227, + "low": 17.8993, + "close": 18.1987, + "volume": 65756700.0 + }, + { + "time": 1555891200, + "open": 17.9933, + "high": 17.9933, + "low": 17.4813, + "close": 17.5033, + "volume": 150683310.0 + }, + { + "time": 1555977600, + "open": 17.5867, + "high": 17.7067, + "low": 17.05, + "close": 17.5867, + "volume": 131710980.0 + }, + { + "time": 1556064000, + "open": 17.5733, + "high": 17.7333, + "low": 16.7027, + "close": 17.2167, + "volume": 127073520.0 + }, + { + "time": 1556150400, + "open": 17.0467, + "high": 17.2667, + "low": 16.4047, + "close": 16.486, + "volume": 265586880.0 + }, + { + "time": 1556236800, + "open": 16.5467, + "high": 16.636, + "low": 15.4087, + "close": 15.866, + "volume": 272603400.0 + }, + { + "time": 1556496000, + "open": 15.9127, + "high": 16.2653, + "low": 15.478, + "close": 16.0313, + "volume": 211597680.0 + }, + { + "time": 1556582400, + "open": 16.0487, + "high": 16.2807, + "low": 15.8, + "close": 15.9233, + "volume": 114634905.0 + }, + { + "time": 1556668800, + "open": 15.9133, + "high": 16.0, + "low": 15.4333, + "close": 15.5833, + "volume": 130472910.0 + }, + { + "time": 1556755200, + "open": 15.596, + "high": 16.6367, + "low": 15.3667, + "close": 16.3667, + "volume": 221207520.0 + }, + { + "time": 1556841600, + "open": 16.4653, + "high": 17.1073, + "low": 16.0667, + "close": 17.0, + "volume": 285771600.0 + }, + { + "time": 1557100800, + "open": 16.6667, + "high": 17.2233, + "low": 16.4913, + "close": 16.9407, + "volume": 129715710.0 + }, + { + "time": 1557187200, + "open": 17.022, + "high": 17.2833, + "low": 16.34, + "close": 16.4733, + "volume": 121401255.0 + }, + { + "time": 1557273600, + "open": 16.6487, + "high": 16.7067, + "low": 16.208, + "close": 16.2207, + "volume": 70776975.0 + }, + { + "time": 1557360000, + "open": 16.1733, + "high": 16.2453, + "low": 15.796, + "close": 16.0773, + "volume": 79827930.0 + }, + { + "time": 1557446400, + "open": 16.132, + "high": 16.1973, + "low": 15.7347, + "close": 15.9333, + "volume": 85723890.0 + }, + { + "time": 1557705600, + "open": 15.8213, + "high": 16.0073, + "low": 14.9667, + "close": 15.0833, + "volume": 123465510.0 + }, + { + "time": 1557792000, + "open": 15.1833, + "high": 15.6333, + "low": 15.1653, + "close": 15.4833, + "volume": 83553315.0 + }, + { + "time": 1557878400, + "open": 15.5333, + "high": 15.5727, + "low": 15.0167, + "close": 15.4067, + "volume": 87076290.0 + }, + { + "time": 1557964800, + "open": 15.39, + "high": 15.5327, + "low": 15.1, + "close": 15.18, + "volume": 85589625.0 + }, + { + "time": 1558051200, + "open": 15.1333, + "high": 15.1467, + "low": 13.928, + "close": 14.0007, + "volume": 213667560.0 + }, + { + "time": 1558310400, + "open": 14.0, + "high": 14.1187, + "low": 13.0167, + "close": 13.622, + "volume": 241324890.0 + }, + { + "time": 1558396800, + "open": 13.5987, + "high": 13.8267, + "low": 13.0693, + "close": 13.4467, + "volume": 221423400.0 + }, + { + "time": 1558483200, + "open": 13.3867, + "high": 13.6667, + "low": 12.7073, + "close": 12.71, + "volume": 223585785.0 + }, + { + "time": 1558569600, + "open": 12.6533, + "high": 13.3067, + "low": 12.1253, + "close": 13.0633, + "volume": 313514490.0 + }, + { + "time": 1558656000, + "open": 13.1993, + "high": 13.5807, + "low": 12.5833, + "close": 12.6467, + "volume": 172574760.0 + }, + { + "time": 1559001600, + "open": 12.7907, + "high": 13.0, + "low": 12.5233, + "close": 12.6327, + "volume": 121369680.0 + }, + { + "time": 1559088000, + "open": 12.5573, + "high": 12.826, + "low": 12.336, + "close": 12.6773, + "volume": 147665835.0 + }, + { + "time": 1559174400, + "open": 12.6, + "high": 12.8173, + "low": 12.468, + "close": 12.484, + "volume": 96234330.0 + }, + { + "time": 1559260800, + "open": 12.4533, + "high": 12.662, + "low": 12.2, + "close": 12.396, + "volume": 126511080.0 + }, + { + "time": 1559520000, + "open": 12.2773, + "high": 12.4453, + "low": 11.7993, + "close": 11.9633, + "volume": 162149595.0 + }, + { + "time": 1559606400, + "open": 11.9933, + "high": 12.9867, + "low": 11.974, + "close": 12.9473, + "volume": 168287700.0 + }, + { + "time": 1559692800, + "open": 13.0773, + "high": 13.4187, + "low": 12.7893, + "close": 13.0387, + "volume": 170547300.0 + }, + { + "time": 1559779200, + "open": 13.2133, + "high": 14.0667, + "low": 13.106, + "close": 13.76, + "volume": 239261910.0 + }, + { + "time": 1559865600, + "open": 13.8293, + "high": 14.0567, + "low": 13.566, + "close": 13.6107, + "volume": 185291190.0 + }, + { + "time": 1560124800, + "open": 13.6753, + "high": 14.4627, + "low": 13.6753, + "close": 14.35, + "volume": 120507465.0 + }, + { + "time": 1560211200, + "open": 14.4333, + "high": 15.2493, + "low": 14.2333, + "close": 15.0207, + "volume": 136661955.0 + }, + { + "time": 1560297600, + "open": 15.0207, + "high": 15.0967, + "low": 13.9067, + "close": 13.9867, + "volume": 182775390.0 + }, + { + "time": 1560384000, + "open": 14.0, + "high": 14.3267, + "low": 13.834, + "close": 14.1653, + "volume": 101617290.0 + }, + { + "time": 1560470400, + "open": 14.2147, + "high": 14.4433, + "low": 13.9413, + "close": 14.3327, + "volume": 88657065.0 + }, + { + "time": 1560729600, + "open": 14.4193, + "high": 15.1333, + "low": 14.2733, + "close": 15.0333, + "volume": 149330235.0 + }, + { + "time": 1560816000, + "open": 15.0833, + "high": 15.6493, + "low": 14.8373, + "close": 15.0133, + "volume": 152172840.0 + }, + { + "time": 1560902400, + "open": 15.0887, + "high": 15.1847, + "low": 14.7373, + "close": 15.1307, + "volume": 79817250.0 + }, + { + "time": 1560988800, + "open": 15.2, + "high": 15.3493, + "low": 14.4233, + "close": 14.6333, + "volume": 145668465.0 + }, + { + "time": 1561075200, + "open": 14.6267, + "high": 14.812, + "low": 14.3667, + "close": 14.7667, + "volume": 91318920.0 + }, + { + "time": 1561334400, + "open": 14.7667, + "high": 15.0573, + "low": 14.7347, + "close": 14.9533, + "volume": 69803340.0 + }, + { + "time": 1561420800, + "open": 14.9007, + "high": 15.0227, + "low": 14.6327, + "close": 14.6733, + "volume": 71846805.0 + }, + { + "time": 1561507200, + "open": 14.7993, + "high": 15.1487, + "low": 14.4353, + "close": 14.5587, + "volume": 101637405.0 + }, + { + "time": 1561593600, + "open": 14.5593, + "high": 14.8793, + "low": 14.4747, + "close": 14.8533, + "volume": 73779210.0 + }, + { + "time": 1561680000, + "open": 14.814, + "high": 15.0113, + "low": 14.6753, + "close": 14.93, + "volume": 76459620.0 + }, + { + "time": 1561939200, + "open": 15.1133, + "high": 15.54, + "low": 15.0853, + "close": 15.2, + "volume": 102639255.0 + }, + { + "time": 1562025600, + "open": 15.2, + "high": 16.3327, + "low": 14.8147, + "close": 16.0333, + "volume": 112517325.0 + }, + { + "time": 1562112000, + "open": 15.9333, + "high": 16.1333, + "low": 15.6, + "close": 15.6233, + "volume": 171219210.0 + }, + { + "time": 1562284800, + "open": 15.6913, + "high": 15.7147, + "low": 15.3867, + "close": 15.5167, + "volume": 85099530.0 + }, + { + "time": 1562544000, + "open": 15.5333, + "high": 15.5333, + "low": 15.244, + "close": 15.35, + "volume": 71488095.0 + }, + { + "time": 1562630400, + "open": 15.28, + "high": 15.4, + "low": 15.152, + "close": 15.35, + "volume": 74145135.0 + }, + { + "time": 1562716800, + "open": 15.4, + "high": 15.9333, + "low": 15.3753, + "close": 15.92, + "volume": 109079265.0 + }, + { + "time": 1562803200, + "open": 15.9393, + "high": 16.1, + "low": 15.72, + "close": 15.8733, + "volume": 87319530.0 + }, + { + "time": 1562889600, + "open": 15.902, + "high": 16.4127, + "low": 15.902, + "close": 16.4127, + "volume": 95006310.0 + }, + { + "time": 1563148800, + "open": 16.4667, + "high": 16.9613, + "low": 16.324, + "close": 16.8533, + "volume": 129415845.0 + }, + { + "time": 1563235200, + "open": 16.8333, + "high": 16.902, + "low": 16.5287, + "close": 16.7833, + "volume": 94476000.0 + }, + { + "time": 1563321600, + "open": 16.8253, + "high": 17.2207, + "low": 16.8253, + "close": 16.96, + "volume": 105617190.0 + }, + { + "time": 1563408000, + "open": 16.972, + "high": 17.05, + "low": 16.792, + "close": 16.9667, + "volume": 56868000.0 + }, + { + "time": 1563494400, + "open": 16.9973, + "high": 17.3307, + "low": 16.9747, + "close": 17.1913, + "volume": 85749975.0 + }, + { + "time": 1563753600, + "open": 17.2, + "high": 17.48, + "low": 16.946, + "close": 17.0667, + "volume": 83095470.0 + }, + { + "time": 1563840000, + "open": 17.1, + "high": 17.3653, + "low": 16.9667, + "close": 17.3127, + "volume": 54661110.0 + }, + { + "time": 1563926400, + "open": 17.3167, + "high": 17.88, + "low": 15.5333, + "close": 15.7133, + "volume": 130306335.0 + }, + { + "time": 1564012800, + "open": 15.72, + "high": 15.8, + "low": 15.0367, + "close": 15.1693, + "volume": 270950850.0 + }, + { + "time": 1564099200, + "open": 15.2453, + "high": 15.3507, + "low": 14.8167, + "close": 15.1407, + "volume": 118829130.0 + }, + { + "time": 1564358400, + "open": 15.1667, + "high": 15.7293, + "low": 15.0, + "close": 15.6747, + "volume": 113923785.0 + }, + { + "time": 1564444800, + "open": 15.6747, + "high": 16.224, + "low": 15.4467, + "close": 16.102, + "volume": 96458760.0 + }, + { + "time": 1564531200, + "open": 16.1347, + "high": 16.4453, + "low": 15.7767, + "close": 16.0727, + "volume": 111596460.0 + }, + { + "time": 1564617600, + "open": 16.154, + "high": 16.3007, + "low": 15.4513, + "close": 15.5467, + "volume": 98159715.0 + }, + { + "time": 1570665600, + "open": 16.2667, + "high": 16.6187, + "low": 16.1053, + "close": 16.3933, + "volume": 71848110.0 + }, + { + "time": 1570752000, + "open": 16.438, + "high": 16.7387, + "low": 16.316, + "close": 16.5667, + "volume": 99881625.0 + }, + { + "time": 1571011200, + "open": 16.4853, + "high": 17.2367, + "low": 16.4667, + "close": 17.1507, + "volume": 120297450.0 + }, + { + "time": 1571097600, + "open": 17.1433, + "high": 17.3333, + "low": 16.9413, + "close": 17.1667, + "volume": 74867415.0 + }, + { + "time": 1571184000, + "open": 17.1333, + "high": 17.4733, + "low": 17.0667, + "close": 17.32, + "volume": 76111920.0 + }, + { + "time": 1571270400, + "open": 17.3587, + "high": 17.652, + "low": 17.2667, + "close": 17.46, + "volume": 54637350.0 + }, + { + "time": 1571356800, + "open": 17.42, + "high": 17.52, + "low": 17.0067, + "close": 17.1067, + "volume": 67372005.0 + }, + { + "time": 1571616000, + "open": 17.2, + "high": 17.3, + "low": 16.6787, + "close": 16.964, + "volume": 59437185.0 + }, + { + "time": 1571702400, + "open": 16.9133, + "high": 17.222, + "low": 16.7233, + "close": 17.0, + "volume": 51015450.0 + }, + { + "time": 1571788800, + "open": 16.928, + "high": 20.5667, + "low": 16.7567, + "close": 20.4, + "volume": 126354015.0 + }, + { + "time": 1571875200, + "open": 20.074, + "high": 20.3287, + "low": 19.28, + "close": 19.9333, + "volume": 333785415.0 + }, + { + "time": 1571961600, + "open": 19.816, + "high": 22.0, + "low": 19.7407, + "close": 21.828, + "volume": 346900110.0 + }, + { + "time": 1572220800, + "open": 21.82, + "high": 22.7227, + "low": 21.5067, + "close": 21.8533, + "volume": 217401990.0 + }, + { + "time": 1572307200, + "open": 21.8, + "high": 21.8, + "low": 20.9333, + "close": 20.972, + "volume": 148391235.0 + }, + { + "time": 1572393600, + "open": 20.8, + "high": 21.2527, + "low": 20.6647, + "close": 21.0267, + "volume": 110357760.0 + }, + { + "time": 1572480000, + "open": 21.0, + "high": 21.2667, + "low": 20.85, + "close": 20.968, + "volume": 57293355.0 + }, + { + "time": 1572566400, + "open": 21.01, + "high": 21.158, + "low": 20.6533, + "close": 20.87, + "volume": 74996490.0 + }, + { + "time": 1572825600, + "open": 20.9333, + "high": 21.4627, + "low": 20.6173, + "close": 21.19, + "volume": 107054385.0 + }, + { + "time": 1572912000, + "open": 21.268, + "high": 21.5673, + "low": 21.074, + "close": 21.1407, + "volume": 80141085.0 + }, + { + "time": 1572998400, + "open": 21.1267, + "high": 21.8033, + "low": 20.9667, + "close": 21.742, + "volume": 94473615.0 + }, + { + "time": 1573084800, + "open": 21.8373, + "high": 22.7667, + "low": 21.8373, + "close": 22.412, + "volume": 170876115.0 + }, + { + "time": 1573171200, + "open": 22.3333, + "high": 22.4973, + "low": 22.1667, + "close": 22.45, + "volume": 70916190.0 + }, + { + "time": 1573430400, + "open": 22.3873, + "high": 23.2793, + "low": 22.3667, + "close": 23.0087, + "volume": 115064865.0 + }, + { + "time": 1573516800, + "open": 23.0333, + "high": 23.358, + "low": 22.936, + "close": 23.3133, + "volume": 83768280.0 + }, + { + "time": 1573603200, + "open": 23.4, + "high": 23.7867, + "low": 23.012, + "close": 23.0667, + "volume": 95754555.0 + }, + { + "time": 1573689600, + "open": 23.0073, + "high": 23.5893, + "low": 22.8607, + "close": 23.28, + "volume": 73642995.0 + }, + { + "time": 1573776000, + "open": 23.3467, + "high": 23.52, + "low": 23.224, + "close": 23.4547, + "volume": 53228490.0 + }, + { + "time": 1574035200, + "open": 23.4547, + "high": 23.6467, + "low": 23.0733, + "close": 23.3327, + "volume": 47569800.0 + }, + { + "time": 1574121600, + "open": 23.3373, + "high": 23.9993, + "low": 23.1867, + "close": 23.934, + "volume": 88743975.0 + }, + { + "time": 1574208000, + "open": 23.8533, + "high": 24.1807, + "low": 23.3047, + "close": 23.4733, + "volume": 73837815.0 + }, + { + "time": 1574294400, + "open": 23.4813, + "high": 24.056, + "low": 23.4813, + "close": 23.8067, + "volume": 67119255.0 + }, + { + "time": 1574380800, + "open": 23.3933, + "high": 23.6553, + "low": 22.0, + "close": 22.2067, + "volume": 185281845.0 + }, + { + "time": 1574640000, + "open": 22.84, + "high": 23.3073, + "low": 22.2973, + "close": 22.4293, + "volume": 136063125.0 + }, + { + "time": 1574726400, + "open": 22.4613, + "high": 22.4613, + "low": 21.8067, + "close": 21.9867, + "volume": 85639260.0 + }, + { + "time": 1574812800, + "open": 21.9867, + "high": 22.262, + "low": 21.9047, + "close": 22.0, + "volume": 60248265.0 + }, + { + "time": 1574985600, + "open": 22.0713, + "high": 22.2, + "low": 21.8333, + "close": 22.0027, + "volume": 26162310.0 + }, + { + "time": 1575244800, + "open": 22.0933, + "high": 22.426, + "low": 21.9, + "close": 22.25, + "volume": 65817750.0 + }, + { + "time": 1575331200, + "open": 22.4087, + "high": 22.5667, + "low": 22.0333, + "close": 22.4253, + "volume": 71516535.0 + }, + { + "time": 1575417600, + "open": 22.4327, + "high": 22.5747, + "low": 22.186, + "close": 22.2187, + "volume": 52213935.0 + }, + { + "time": 1575504000, + "open": 22.2347, + "high": 22.3333, + "low": 21.8167, + "close": 22.26, + "volume": 39315060.0 + }, + { + "time": 1575590400, + "open": 22.2667, + "high": 22.5907, + "low": 22.2667, + "close": 22.3927, + "volume": 87443550.0 + }, + { + "time": 1575849600, + "open": 22.4, + "high": 22.9633, + "low": 22.3387, + "close": 22.6527, + "volume": 97238610.0 + }, + { + "time": 1575936000, + "open": 22.6353, + "high": 23.382, + "low": 22.4667, + "close": 23.2667, + "volume": 94475535.0 + }, + { + "time": 1576022400, + "open": 23.276, + "high": 23.8127, + "low": 23.276, + "close": 23.6387, + "volume": 75745965.0 + }, + { + "time": 1576108800, + "open": 23.6667, + "high": 24.1827, + "low": 23.5487, + "close": 24.04, + "volume": 86341350.0 + }, + { + "time": 1576195200, + "open": 24.08, + "high": 24.3473, + "low": 23.6427, + "close": 23.9187, + "volume": 73028070.0 + }, + { + "time": 1576454400, + "open": 23.9333, + "high": 25.574, + "low": 23.9333, + "close": 25.204, + "volume": 196900605.0 + }, + { + "time": 1576540800, + "open": 25.3127, + "high": 25.7, + "low": 25.06, + "close": 25.268, + "volume": 88895370.0 + }, + { + "time": 1576627200, + "open": 25.1333, + "high": 26.348, + "low": 25.1333, + "close": 26.24, + "volume": 159076170.0 + }, + { + "time": 1576713600, + "open": 26.1447, + "high": 27.1233, + "low": 26.12, + "close": 26.992, + "volume": 195368595.0 + }, + { + "time": 1576800000, + "open": 27.0, + "high": 27.5333, + "low": 26.6787, + "close": 27.0667, + "volume": 162292950.0 + }, + { + "time": 1577059200, + "open": 27.2007, + "high": 28.134, + "low": 27.2007, + "close": 27.9793, + "volume": 147161505.0 + }, + { + "time": 1577145600, + "open": 28.0653, + "high": 28.392, + "low": 27.512, + "close": 28.3533, + "volume": 92001720.0 + }, + { + "time": 1577318400, + "open": 28.3533, + "high": 28.8987, + "low": 28.3533, + "close": 28.7667, + "volume": 118997565.0 + }, + { + "time": 1577404800, + "open": 28.772, + "high": 29.1453, + "low": 28.4073, + "close": 28.7167, + "volume": 110319030.0 + }, + { + "time": 1577664000, + "open": 28.7847, + "high": 28.89, + "low": 27.2833, + "close": 27.4833, + "volume": 140912100.0 + }, + { + "time": 1577750400, + "open": 27.6, + "high": 28.086, + "low": 26.8053, + "close": 27.9, + "volume": 115227540.0 + }, + { + "time": 1577923200, + "open": 28.0607, + "high": 28.7993, + "low": 27.8887, + "close": 28.7867, + "volume": 105742830.0 + }, + { + "time": 1578009600, + "open": 28.4267, + "high": 30.2667, + "low": 28.1007, + "close": 29.4607, + "volume": 201368895.0 + }, + { + "time": 1578268800, + "open": 29.2007, + "high": 30.1333, + "low": 29.1667, + "close": 30.1333, + "volume": 114317175.0 + }, + { + "time": 1578355200, + "open": 30.2633, + "high": 31.442, + "low": 30.1673, + "close": 30.5, + "volume": 200288085.0 + }, + { + "time": 1578441600, + "open": 31.06, + "high": 33.2327, + "low": 30.9187, + "close": 33.07, + "volume": 348554655.0 + }, + { + "time": 1578528000, + "open": 32.68, + "high": 33.2867, + "low": 31.5247, + "close": 32.008, + "volume": 308683530.0 + }, + { + "time": 1578614400, + "open": 32.2667, + "high": 32.6167, + "low": 31.58, + "close": 31.866, + "volume": 142140990.0 + }, + { + "time": 1578873600, + "open": 32.206, + "high": 35.496, + "low": 32.206, + "close": 35.4413, + "volume": 296673120.0 + }, + { + "time": 1578960000, + "open": 35.428, + "high": 36.5, + "low": 34.9933, + "close": 35.7653, + "volume": 313603800.0 + }, + { + "time": 1579046400, + "open": 35.8667, + "high": 35.8667, + "low": 34.452, + "close": 34.65, + "volume": 189689685.0 + }, + { + "time": 1579132800, + "open": 33.5533, + "high": 34.2973, + "low": 32.8113, + "close": 34.174, + "volume": 234395160.0 + }, + { + "time": 1579219200, + "open": 34.2687, + "high": 34.5533, + "low": 33.2587, + "close": 33.6067, + "volume": 149312700.0 + }, + { + "time": 1579564800, + "open": 33.8733, + "high": 37.0067, + "low": 33.7733, + "close": 36.95, + "volume": 189698280.0 + }, + { + "time": 1579651200, + "open": 37.134, + "high": 39.6333, + "low": 37.134, + "close": 38.1333, + "volume": 324324630.0 + }, + { + "time": 1579737600, + "open": 37.97, + "high": 38.8, + "low": 37.0367, + "close": 38.0407, + "volume": 203213130.0 + }, + { + "time": 1579824000, + "open": 38.296, + "high": 38.6533, + "low": 36.9507, + "close": 37.2667, + "volume": 148648650.0 + }, + { + "time": 1580083200, + "open": 36.92, + "high": 37.6293, + "low": 35.9207, + "close": 37.3333, + "volume": 139065495.0 + }, + { + "time": 1580169600, + "open": 37.442, + "high": 38.454, + "low": 37.2053, + "close": 38.1, + "volume": 125302140.0 + }, + { + "time": 1580256000, + "open": 38.148, + "high": 43.9867, + "low": 37.8287, + "close": 43.2333, + "volume": 183743490.0 + }, + { + "time": 1580342400, + "open": 42.74, + "high": 43.392, + "low": 41.2, + "close": 42.9407, + "volume": 273085440.0 + }, + { + "time": 1580428800, + "open": 42.6667, + "high": 43.5333, + "low": 42.0013, + "close": 43.05, + "volume": 158981265.0 + }, + { + "time": 1580688000, + "open": 43.2667, + "high": 52.4533, + "low": 43.0067, + "close": 51.0667, + "volume": 475263390.0 + }, + { + "time": 1580774400, + "open": 52.3667, + "high": 64.5993, + "low": 52.3667, + "close": 60.2667, + "volume": 552886995.0 + }, + { + "time": 1580860800, + "open": 56.6667, + "high": 58.9333, + "low": 46.9407, + "close": 48.5, + "volume": 464742915.0 + }, + { + "time": 1580947200, + "open": 49.0, + "high": 53.0553, + "low": 45.8, + "close": 49.4, + "volume": 383700900.0 + }, + { + "time": 1581033600, + "open": 49.2, + "high": 51.3167, + "low": 48.2, + "close": 49.7073, + "volume": 168028710.0 + }, + { + "time": 1581292800, + "open": 50.3333, + "high": 54.666, + "low": 50.16, + "close": 51.5733, + "volume": 240893220.0 + }, + { + "time": 1581379200, + "open": 52.2, + "high": 52.432, + "low": 50.5333, + "close": 51.3333, + "volume": 115196955.0 + }, + { + "time": 1581465600, + "open": 51.9993, + "high": 52.65, + "low": 49.55, + "close": 50.1333, + "volume": 117541665.0 + }, + { + "time": 1581552000, + "open": 50.0667, + "high": 54.5333, + "low": 47.4667, + "close": 53.3333, + "volume": 259599570.0 + }, + { + "time": 1581638400, + "open": 53.6, + "high": 54.2, + "low": 51.6667, + "close": 53.5, + "volume": 160881435.0 + }, + { + "time": 1581984000, + "open": 52.5333, + "high": 59.3193, + "low": 51.6673, + "close": 58.8007, + "volume": 168671805.0 + }, + { + "time": 1582070400, + "open": 59.3333, + "high": 62.9853, + "low": 59.3333, + "close": 60.47, + "volume": 249771750.0 + }, + { + "time": 1582156800, + "open": 60.6333, + "high": 61.08, + "low": 57.3287, + "close": 59.3333, + "volume": 181159170.0 + }, + { + "time": 1582243200, + "open": 60.3133, + "high": 61.2, + "low": 58.6, + "close": 59.9213, + "volume": 149621535.0 + }, + { + "time": 1582502400, + "open": 58.2327, + "high": 58.234, + "low": 54.8133, + "close": 56.2667, + "volume": 148606905.0 + }, + { + "time": 1582588800, + "open": 56.3333, + "high": 57.1067, + "low": 52.4667, + "close": 52.7333, + "volume": 168777675.0 + }, + { + "time": 1582675200, + "open": 52.1707, + "high": 54.2207, + "low": 50.6467, + "close": 51.2667, + "volume": 136474050.0 + }, + { + "time": 1582761600, + "open": 51.2, + "high": 51.532, + "low": 42.8333, + "close": 43.668, + "volume": 249019995.0 + }, + { + "time": 1582848000, + "open": 43.0, + "high": 46.0347, + "low": 40.768, + "close": 44.9987, + "volume": 257814675.0 + }, + { + "time": 1583107200, + "open": 47.1507, + "high": 51.3333, + "low": 44.1333, + "close": 51.2667, + "volume": 206093775.0 + }, + { + "time": 1583193600, + "open": 51.8447, + "high": 54.6793, + "low": 47.7407, + "close": 48.7333, + "volume": 250127055.0 + }, + { + "time": 1583280000, + "open": 50.3333, + "high": 52.734, + "low": 48.3153, + "close": 49.62, + "volume": 154058295.0 + }, + { + "time": 1583366400, + "open": 49.0733, + "high": 49.7167, + "low": 47.4673, + "close": 48.0, + "volume": 108482445.0 + }, + { + "time": 1583452800, + "open": 47.2, + "high": 47.4667, + "low": 45.1327, + "close": 46.05, + "volume": 123425130.0 + }, + { + "time": 1583712000, + "open": 43.6447, + "high": 44.2, + "low": 40.0, + "close": 42.3867, + "volume": 175009290.0 + }, + { + "time": 1583798400, + "open": 42.8873, + "high": 45.4, + "low": 40.5333, + "close": 41.6867, + "volume": 161919360.0 + }, + { + "time": 1583884800, + "open": 41.6, + "high": 43.572, + "low": 40.8667, + "close": 42.2067, + "volume": 140357565.0 + }, + { + "time": 1583971200, + "open": 40.566, + "high": 40.7433, + "low": 34.08, + "close": 34.6, + "volume": 197614035.0 + }, + { + "time": 1584057600, + "open": 37.4667, + "high": 40.5307, + "low": 33.4667, + "close": 35.6, + "volume": 239295285.0 + }, + { + "time": 1584316800, + "open": 33.7667, + "high": 33.7667, + "low": 28.6667, + "close": 30.2, + "volume": 221492175.0 + }, + { + "time": 1584403200, + "open": 31.4667, + "high": 32.1333, + "low": 26.4, + "close": 27.1707, + "volume": 261417435.0 + }, + { + "time": 1584489600, + "open": 26.8667, + "high": 26.9907, + "low": 23.3673, + "close": 24.8667, + "volume": 265132005.0 + }, + { + "time": 1584576000, + "open": 24.3333, + "high": 30.1333, + "low": 23.4, + "close": 26.2667, + "volume": 328591200.0 + }, + { + "time": 1584662400, + "open": 28.0, + "high": 31.8, + "low": 27.8387, + "close": 28.252, + "volume": 307001235.0 + }, + { + "time": 1584921600, + "open": 27.66, + "high": 30.2, + "low": 27.0667, + "close": 29.692, + "volume": 178044150.0 + }, + { + "time": 1585008000, + "open": 30.3333, + "high": 35.6, + "low": 30.1467, + "close": 33.9987, + "volume": 237852525.0 + }, + { + "time": 1585094400, + "open": 36.5333, + "high": 37.9333, + "low": 33.9933, + "close": 36.0007, + "volume": 218541390.0 + }, + { + "time": 1585180800, + "open": 35.2433, + "high": 37.3333, + "low": 34.15, + "close": 35.1333, + "volume": 179456955.0 + }, + { + "time": 1585267200, + "open": 34.5307, + "high": 35.0533, + "low": 32.9353, + "close": 33.9333, + "volume": 148377030.0 + }, + { + "time": 1585526400, + "open": 33.6667, + "high": 34.76, + "low": 32.7487, + "close": 33.5333, + "volume": 119682195.0 + }, + { + "time": 1585612800, + "open": 33.9333, + "high": 36.1973, + "low": 33.0067, + "close": 34.3667, + "volume": 188997660.0 + }, + { + "time": 1585699200, + "open": 33.7253, + "high": 34.264, + "low": 31.6733, + "close": 32.3727, + "volume": 138967425.0 + }, + { + "time": 1585785600, + "open": 32.6, + "high": 36.5313, + "low": 29.76, + "close": 35.6667, + "volume": 203988075.0 + }, + { + "time": 1585872000, + "open": 35.2, + "high": 35.4, + "low": 31.226, + "close": 31.6667, + "volume": 241104990.0 + }, + { + "time": 1586131200, + "open": 33.6667, + "high": 34.7333, + "low": 33.1973, + "close": 34.2, + "volume": 150877275.0 + }, + { + "time": 1586217600, + "open": 35.3333, + "high": 37.6667, + "low": 35.2227, + "close": 36.658, + "volume": 187243695.0 + }, + { + "time": 1586304000, + "open": 36.5847, + "high": 37.7333, + "low": 35.5553, + "close": 36.7293, + "volume": 135389595.0 + }, + { + "time": 1586390400, + "open": 37.036, + "high": 39.8, + "low": 36.094, + "close": 39.6333, + "volume": 140315520.0 + }, + { + "time": 1586736000, + "open": 39.2, + "high": 45.22, + "low": 38.414, + "close": 44.8987, + "volume": 232627920.0 + }, + { + "time": 1586822400, + "open": 45.3433, + "high": 49.9993, + "low": 45.0733, + "close": 49.7667, + "volume": 300642825.0 + }, + { + "time": 1586908800, + "open": 49.3993, + "high": 50.8, + "low": 47.3333, + "close": 47.5667, + "volume": 231622050.0 + }, + { + "time": 1586995200, + "open": 48.7773, + "high": 52.7333, + "low": 47.114, + "close": 51.6667, + "volume": 211446420.0 + }, + { + "time": 1587081600, + "open": 51.8, + "high": 52.3587, + "low": 49.844, + "close": 50.102, + "volume": 132770940.0 + }, + { + "time": 1587340800, + "open": 50.08, + "high": 51.038, + "low": 47.4807, + "close": 49.8667, + "volume": 152149290.0 + }, + { + "time": 1587427200, + "open": 49.2, + "high": 50.222, + "low": 44.9193, + "close": 46.0007, + "volume": 202718685.0 + }, + { + "time": 1587513600, + "open": 46.8, + "high": 49.344, + "low": 45.2327, + "close": 48.2533, + "volume": 145122495.0 + }, + { + "time": 1587600000, + "open": 48.4, + "high": 49.1267, + "low": 46.4, + "close": 46.4613, + "volume": 136673115.0 + }, + { + "time": 1587686400, + "open": 46.4667, + "high": 48.7153, + "low": 46.4667, + "close": 48.3333, + "volume": 139092495.0 + }, + { + "time": 1587945600, + "open": 49.07, + "high": 53.7787, + "low": 48.9673, + "close": 52.1373, + "volume": 202881945.0 + }, + { + "time": 1588032000, + "open": 52.4733, + "high": 53.6667, + "low": 50.446, + "close": 51.786, + "volume": 155158260.0 + }, + { + "time": 1588118400, + "open": 52.1333, + "high": 59.126, + "low": 51.0067, + "close": 58.0667, + "volume": 158846565.0 + }, + { + "time": 1588204800, + "open": 57.6333, + "high": 58.4, + "low": 50.6667, + "close": 51.0, + "volume": 272728890.0 + }, + { + "time": 1588291200, + "open": 50.9733, + "high": 51.518, + "low": 45.536, + "close": 47.2, + "volume": 325839930.0 + }, + { + "time": 1588550400, + "open": 47.2, + "high": 51.2667, + "low": 45.4667, + "close": 51.2667, + "volume": 191118300.0 + }, + { + "time": 1588636800, + "open": 52.1333, + "high": 53.2613, + "low": 50.812, + "close": 51.6333, + "volume": 175710750.0 + }, + { + "time": 1588723200, + "open": 51.9967, + "high": 52.6533, + "low": 50.7407, + "close": 51.9667, + "volume": 113329740.0 + }, + { + "time": 1588809600, + "open": 52.3407, + "high": 53.0933, + "low": 51.1333, + "close": 52.2333, + "volume": 118667010.0 + }, + { + "time": 1588896000, + "open": 52.4333, + "high": 55.0667, + "low": 52.4327, + "close": 54.6, + "volume": 160369815.0 + }, + { + "time": 1589155200, + "open": 54.0333, + "high": 54.9333, + "low": 52.3333, + "close": 54.0807, + "volume": 171898425.0 + }, + { + "time": 1589241600, + "open": 53.8573, + "high": 56.2193, + "low": 52.9933, + "close": 53.0267, + "volume": 163140435.0 + }, + { + "time": 1589328000, + "open": 53.5773, + "high": 55.1733, + "low": 50.8867, + "close": 53.3193, + "volume": 197153685.0 + }, + { + "time": 1589414400, + "open": 53.3333, + "high": 53.9333, + "low": 50.9333, + "close": 53.5333, + "volume": 134271540.0 + }, + { + "time": 1589500800, + "open": 53.7333, + "high": 53.7333, + "low": 52.1633, + "close": 53.24, + "volume": 107025660.0 + }, + { + "time": 1589760000, + "open": 54.018, + "high": 55.6487, + "low": 53.592, + "close": 54.1, + "volume": 119931690.0 + }, + { + "time": 1589846400, + "open": 54.5333, + "high": 54.8047, + "low": 53.6667, + "close": 54.0733, + "volume": 98436405.0 + }, + { + "time": 1589932800, + "open": 54.4, + "high": 55.0667, + "low": 54.12, + "close": 54.3007, + "volume": 70987260.0 + }, + { + "time": 1590019200, + "open": 54.078, + "high": 55.5, + "low": 53.0667, + "close": 55.0333, + "volume": 125158530.0 + }, + { + "time": 1590105600, + "open": 54.4667, + "high": 55.452, + "low": 54.1333, + "close": 54.5067, + "volume": 102896430.0 + }, + { + "time": 1590451200, + "open": 55.6293, + "high": 55.92, + "low": 54.38, + "close": 54.6653, + "volume": 77548890.0 + }, + { + "time": 1590537600, + "open": 54.4667, + "high": 55.1807, + "low": 52.3333, + "close": 54.2933, + "volume": 115787835.0 + }, + { + "time": 1590624000, + "open": 54.2833, + "high": 54.9833, + "low": 53.446, + "close": 53.8, + "volume": 73302210.0 + }, + { + "time": 1590710400, + "open": 54.1587, + "high": 56.1833, + "low": 53.614, + "close": 56.1833, + "volume": 122263095.0 + }, + { + "time": 1590969600, + "open": 56.6667, + "high": 60.2, + "low": 56.6, + "close": 59.1333, + "volume": 145189200.0 + }, + { + "time": 1591056000, + "open": 59.2333, + "high": 60.5773, + "low": 58.0667, + "close": 58.8, + "volume": 132256140.0 + }, + { + "time": 1591142400, + "open": 58.8, + "high": 59.8627, + "low": 58.6733, + "close": 58.8747, + "volume": 80101050.0 + }, + { + "time": 1591228800, + "open": 59.0513, + "high": 59.7167, + "low": 57.2293, + "close": 57.7333, + "volume": 88832985.0 + }, + { + "time": 1591315200, + "open": 58.2907, + "high": 59.1227, + "low": 57.7467, + "close": 58.99, + "volume": 78301965.0 + }, + { + "time": 1591574400, + "open": 58.6667, + "high": 63.8327, + "low": 58.6, + "close": 62.9667, + "volume": 141366735.0 + }, + { + "time": 1591660800, + "open": 62.6667, + "high": 63.6293, + "low": 61.5953, + "close": 62.466, + "volume": 115863015.0 + }, + { + "time": 1591747200, + "open": 62.6, + "high": 68.8, + "low": 62.3333, + "close": 67.3, + "volume": 174956610.0 + }, + { + "time": 1591833600, + "open": 66.6667, + "high": 67.9307, + "low": 64.276, + "close": 65.0, + "volume": 156858300.0 + }, + { + "time": 1591920000, + "open": 63.8627, + "high": 66.134, + "low": 60.8373, + "close": 61.2367, + "volume": 162138555.0 + }, + { + "time": 1592179200, + "open": 60.2, + "high": 66.5893, + "low": 59.7607, + "close": 66.2707, + "volume": 155522580.0 + }, + { + "time": 1592265600, + "open": 66.6, + "high": 67.99, + "low": 64.1593, + "close": 65.2667, + "volume": 133777140.0 + }, + { + "time": 1592352000, + "open": 65.8667, + "high": 67.0, + "low": 65.134, + "close": 65.7667, + "volume": 100027320.0 + }, + { + "time": 1592438400, + "open": 66.4, + "high": 67.9467, + "low": 66.298, + "close": 67.466, + "volume": 97189380.0 + }, + { + "time": 1592524800, + "open": 67.5653, + "high": 67.9833, + "low": 66.0667, + "close": 66.1267, + "volume": 83171715.0 + }, + { + "time": 1592784000, + "open": 66.7827, + "high": 67.2587, + "low": 66.0013, + "close": 66.6, + "volume": 64500420.0 + }, + { + "time": 1592870400, + "open": 66.846, + "high": 67.4667, + "low": 66.2673, + "close": 66.4667, + "volume": 64613580.0 + }, + { + "time": 1592956800, + "open": 66.2673, + "high": 66.726, + "low": 63.4, + "close": 63.4, + "volume": 106925520.0 + }, + { + "time": 1593043200, + "open": 63.3333, + "high": 66.1867, + "low": 62.4767, + "close": 66.1333, + "volume": 92884695.0 + }, + { + "time": 1593129600, + "open": 65.7753, + "high": 66.5333, + "low": 63.658, + "close": 63.7267, + "volume": 83687025.0 + }, + { + "time": 1593388800, + "open": 64.2667, + "high": 67.4267, + "low": 63.2347, + "close": 67.1667, + "volume": 85269270.0 + }, + { + "time": 1593475200, + "open": 66.9087, + "high": 72.5127, + "low": 66.7333, + "close": 71.6867, + "volume": 166442490.0 + }, + { + "time": 1593561600, + "open": 72.194, + "high": 75.95, + "low": 71.0667, + "close": 75.866, + "volume": 123111735.0 + }, + { + "time": 1593648000, + "open": 76.3847, + "high": 82.1333, + "low": 76.3847, + "close": 80.88, + "volume": 154935240.0 + }, + { + "time": 1593993600, + "open": 83.34, + "high": 95.7967, + "low": 82.8673, + "close": 95.484, + "volume": 175538805.0 + }, + { + "time": 1594080000, + "open": 95.1933, + "high": 95.3, + "low": 89.114, + "close": 92.0667, + "volume": 167984835.0 + }, + { + "time": 1594166400, + "open": 92.0773, + "high": 94.484, + "low": 87.4227, + "close": 90.7353, + "volume": 137422935.0 + }, + { + "time": 1594252800, + "open": 91.6667, + "high": 93.9047, + "low": 90.0853, + "close": 92.9, + "volume": 99822150.0 + }, + { + "time": 1594339200, + "open": 92.5333, + "high": 103.5327, + "low": 91.734, + "close": 102.8, + "volume": 196613790.0 + }, + { + "time": 1594598400, + "open": 105.6433, + "high": 119.666, + "low": 96.6667, + "close": 101.9333, + "volume": 293325390.0 + }, + { + "time": 1594684800, + "open": 102.5353, + "high": 107.5247, + "low": 95.4, + "close": 104.402, + "volume": 191646180.0 + }, + { + "time": 1594771200, + "open": 105.0667, + "high": 106.332, + "low": 97.1327, + "close": 100.7333, + "volume": 128684670.0 + }, + { + "time": 1594857600, + "open": 100.32, + "high": 102.114, + "low": 96.2673, + "close": 99.2027, + "volume": 124492275.0 + }, + { + "time": 1594944000, + "open": 99.8593, + "high": 102.5007, + "low": 99.3333, + "close": 100.452, + "volume": 78639675.0 + }, + { + "time": 1595203200, + "open": 99.8293, + "high": 111.7267, + "low": 99.2, + "close": 110.8667, + "volume": 137656275.0 + }, + { + "time": 1595289600, + "open": 112.0, + "high": 113.2, + "low": 103.8667, + "close": 105.3333, + "volume": 131882220.0 + }, + { + "time": 1595376000, + "open": 105.6667, + "high": 114.4313, + "low": 103.5933, + "close": 110.4667, + "volume": 106352115.0 + }, + { + "time": 1595462400, + "open": 112.0013, + "high": 112.6, + "low": 98.706, + "close": 98.966, + "volume": 187476870.0 + }, + { + "time": 1595548800, + "open": 98.0973, + "high": 98.132, + "low": 91.1027, + "close": 93.4667, + "volume": 157381425.0 + }, + { + "time": 1595808000, + "open": 94.7667, + "high": 103.2667, + "low": 91.6667, + "close": 102.8667, + "volume": 129609780.0 + }, + { + "time": 1595894400, + "open": 101.0667, + "high": 104.314, + "low": 98.0053, + "close": 98.084, + "volume": 135868020.0 + }, + { + "time": 1595980800, + "open": 99.2013, + "high": 102.3207, + "low": 98.4327, + "close": 100.0767, + "volume": 81939615.0 + }, + { + "time": 1596067200, + "open": 99.52, + "high": 100.8833, + "low": 98.008, + "close": 100.4, + "volume": 65301720.0 + }, + { + "time": 1596153600, + "open": 99.9733, + "high": 101.8667, + "low": 94.732, + "close": 95.0333, + "volume": 103662660.0 + }, + { + "time": 1596412800, + "open": 96.6667, + "high": 100.6547, + "low": 96.2, + "close": 99.0, + "volume": 73760145.0 + }, + { + "time": 1596499200, + "open": 99.01, + "high": 101.8273, + "low": 97.4667, + "close": 99.4667, + "volume": 72451020.0 + }, + { + "time": 1596585600, + "open": 100.0, + "high": 100.5333, + "low": 97.8873, + "close": 98.8, + "volume": 40635945.0 + }, + { + "time": 1596672000, + "open": 98.5333, + "high": 101.154, + "low": 98.1727, + "close": 99.4933, + "volume": 49976850.0 + }, + { + "time": 1596758400, + "open": 99.0, + "high": 100.1987, + "low": 94.334, + "close": 96.7333, + "volume": 72015780.0 + }, + { + "time": 1597017600, + "open": 96.9987, + "high": 97.2653, + "low": 92.3893, + "close": 94.2, + "volume": 60084135.0 + }, + { + "time": 1597104000, + "open": 95.1993, + "high": 99.3333, + "low": 90.9993, + "close": 97.5487, + "volume": 67698210.0 + }, + { + "time": 1597190400, + "open": 97.7433, + "high": 105.6667, + "low": 95.6667, + "close": 104.3333, + "volume": 173744580.0 + }, + { + "time": 1597276800, + "open": 104.7333, + "high": 110.0, + "low": 104.132, + "close": 109.0, + "volume": 165591105.0 + }, + { + "time": 1597363200, + "open": 108.8667, + "high": 112.2667, + "low": 108.4427, + "close": 109.754, + "volume": 101037135.0 + }, + { + "time": 1597622400, + "open": 110.82, + "high": 123.0573, + "low": 110.82, + "close": 122.4, + "volume": 156188385.0 + }, + { + "time": 1597708800, + "open": 123.9253, + "high": 129.2673, + "low": 122.376, + "close": 126.3333, + "volume": 123741405.0 + }, + { + "time": 1597795200, + "open": 127.2, + "high": 127.8, + "low": 122.7473, + "close": 124.6667, + "volume": 94184685.0 + }, + { + "time": 1597881600, + "open": 124.6, + "high": 134.7993, + "low": 123.7333, + "close": 133.9993, + "volume": 159074805.0 + }, + { + "time": 1597968000, + "open": 135.9967, + "high": 139.6993, + "low": 134.2013, + "close": 136.1667, + "volume": 166461210.0 + }, + { + "time": 1598227200, + "open": 138.6673, + "high": 142.6667, + "low": 128.5313, + "close": 133.3347, + "volume": 150696765.0 + }, + { + "time": 1598313600, + "open": 135.4667, + "high": 136.6, + "low": 130.9333, + "close": 136.5333, + "volume": 80517750.0 + }, + { + "time": 1598400000, + "open": 136.9333, + "high": 144.8833, + "low": 135.7333, + "close": 142.8, + "volume": 105153030.0 + }, + { + "time": 1598486400, + "open": 143.6, + "high": 153.04, + "low": 142.5333, + "close": 149.8, + "volume": 180878220.0 + }, + { + "time": 1598572800, + "open": 150.666, + "high": 154.566, + "low": 145.8373, + "close": 147.7993, + "volume": 145062675.0 + }, + { + "time": 1598832000, + "open": 156.0333, + "high": 172.6667, + "low": 146.0333, + "close": 171.5833, + "volume": 248705622.0 + }, + { + "time": 1598918400, + "open": 176.68, + "high": 179.5833, + "low": 156.8367, + "close": 160.33, + "volume": 177822417.0 + }, + { + "time": 1599004800, + "open": 162.0067, + "high": 164.2667, + "low": 135.04, + "close": 145.7533, + "volume": 188849097.0 + }, + { + "time": 1599091200, + "open": 146.0, + "high": 146.1, + "low": 126.6667, + "close": 126.8, + "volume": 180565761.0 + }, + { + "time": 1599177600, + "open": 131.5, + "high": 142.6667, + "low": 124.0067, + "close": 130.5, + "volume": 231814941.0 + }, + { + "time": 1599523200, + "open": 130.3333, + "high": 131.6667, + "low": 102.6667, + "close": 108.05, + "volume": 247260840.0 + }, + { + "time": 1599609600, + "open": 113.3, + "high": 125.2667, + "low": 112.5767, + "close": 124.9933, + "volume": 168193332.0 + }, + { + "time": 1599696000, + "open": 122.0, + "high": 132.9967, + "low": 120.1667, + "close": 125.2, + "volume": 188312610.0 + }, + { + "time": 1599782400, + "open": 127.3333, + "high": 129.52, + "low": 120.1667, + "close": 124.5833, + "volume": 137663229.0 + }, + { + "time": 1600041600, + "open": 127.7333, + "high": 142.9167, + "low": 124.4333, + "close": 141.15, + "volume": 181388055.0 + }, + { + "time": 1600128000, + "open": 142.7733, + "high": 153.98, + "low": 141.75, + "close": 148.6667, + "volume": 210951363.0 + }, + { + "time": 1600214400, + "open": 151.6667, + "high": 152.6167, + "low": 144.4467, + "close": 148.2467, + "volume": 165125403.0 + }, + { + "time": 1600300800, + "open": 142.88, + "high": 147.2533, + "low": 136.0, + "close": 141.2333, + "volume": 170581353.0 + }, + { + "time": 1600387200, + "open": 142.6667, + "high": 150.3333, + "low": 142.1533, + "close": 149.8333, + "volume": 191458605.0 + }, + { + "time": 1600646400, + "open": 148.2333, + "high": 151.9, + "low": 135.69, + "close": 141.0133, + "volume": 235264287.0 + }, + { + "time": 1600732800, + "open": 143.5767, + "high": 149.3333, + "low": 130.5033, + "close": 131.6933, + "volume": 168209415.0 + }, + { + "time": 1600819200, + "open": 132.9267, + "high": 141.3767, + "low": 121.67, + "close": 122.61, + "volume": 197688879.0 + }, + { + "time": 1600905600, + "open": 124.62, + "high": 133.1667, + "low": 117.1, + "close": 131.25, + "volume": 219102480.0 + }, + { + "time": 1600992000, + "open": 130.5, + "high": 136.4733, + "low": 128.3667, + "close": 135.2667, + "volume": 148599174.0 + }, + { + "time": 1601251200, + "open": 138.68, + "high": 142.7567, + "low": 138.3333, + "close": 139.9333, + "volume": 102743079.0 + }, + { + "time": 1601337600, + "open": 139.6967, + "high": 142.8167, + "low": 135.3333, + "close": 139.4033, + "volume": 105701094.0 + }, + { + "time": 1601424000, + "open": 138.0, + "high": 144.6433, + "low": 137.0033, + "close": 143.9, + "volume": 101027403.0 + }, + { + "time": 1601510400, + "open": 144.6667, + "high": 149.6267, + "low": 144.4467, + "close": 147.6, + "volume": 108278334.0 + }, + { + "time": 1601596800, + "open": 143.3233, + "high": 146.3767, + "low": 135.8333, + "close": 137.0667, + "volume": 153489573.0 + }, + { + "time": 1601856000, + "open": 141.41, + "high": 144.5467, + "low": 138.7067, + "close": 140.7267, + "volume": 95763156.0 + }, + { + "time": 1601942400, + "open": 140.6667, + "high": 142.9267, + "low": 135.35, + "close": 137.74, + "volume": 106731042.0 + }, + { + "time": 1602028800, + "open": 139.65, + "high": 143.3, + "low": 137.95, + "close": 142.45, + "volume": 93197385.0 + }, + { + "time": 1602115200, + "open": 143.5, + "high": 146.3967, + "low": 141.7667, + "close": 143.25, + "volume": 87453252.0 + }, + { + "time": 1602201600, + "open": 143.25, + "high": 144.8633, + "low": 142.1533, + "close": 144.8233, + "volume": 62810682.0 + }, + { + "time": 1602460800, + "open": 145.49, + "high": 149.58, + "low": 145.0267, + "close": 147.3967, + "volume": 83716995.0 + }, + { + "time": 1602547200, + "open": 147.1667, + "high": 149.63, + "low": 145.5333, + "close": 149.3067, + "volume": 73758798.0 + }, + { + "time": 1602633600, + "open": 149.3333, + "high": 155.3, + "low": 148.5, + "close": 153.45, + "volume": 103619673.0 + }, + { + "time": 1602720000, + "open": 150.9833, + "high": 153.3333, + "low": 147.34, + "close": 148.9167, + "volume": 76002600.0 + }, + { + "time": 1602806400, + "open": 149.6267, + "high": 151.9833, + "low": 145.6667, + "close": 146.0667, + "volume": 70403769.0 + }, + { + "time": 1603065600, + "open": 148.6667, + "high": 149.5833, + "low": 142.9567, + "close": 144.4833, + "volume": 79414086.0 + }, + { + "time": 1603152000, + "open": 145.3, + "high": 146.2767, + "low": 139.6833, + "close": 141.5333, + "volume": 66908925.0 + }, + { + "time": 1603238400, + "open": 141.6, + "high": 147.2833, + "low": 140.0033, + "close": 145.4367, + "volume": 65343702.0 + }, + { + "time": 1603324800, + "open": 145.65, + "high": 148.6667, + "low": 141.5033, + "close": 142.1633, + "volume": 85645152.0 + }, + { + "time": 1603411200, + "open": 142.28, + "high": 142.28, + "low": 135.7933, + "close": 140.1667, + "volume": 68631111.0 + }, + { + "time": 1603670400, + "open": 137.6667, + "high": 141.92, + "low": 136.6667, + "close": 138.8333, + "volume": 60391515.0 + }, + { + "time": 1603756800, + "open": 139.0, + "high": 143.5, + "low": 139.0, + "close": 140.55, + "volume": 47481831.0 + }, + { + "time": 1603843200, + "open": 140.0, + "high": 140.4, + "low": 134.3733, + "close": 135.8367, + "volume": 50498646.0 + }, + { + "time": 1603929600, + "open": 137.1333, + "high": 139.3533, + "low": 135.1, + "close": 135.5333, + "volume": 46622136.0 + }, + { + "time": 1604016000, + "open": 134.3433, + "high": 136.9433, + "low": 126.37, + "close": 129.0, + "volume": 87711978.0 + }, + { + "time": 1604275200, + "open": 130.2667, + "high": 135.66, + "low": 129.0, + "close": 133.6667, + "volume": 62289972.0 + }, + { + "time": 1604361600, + "open": 134.1033, + "high": 142.59, + "low": 134.1033, + "close": 141.5333, + "volume": 74676897.0 + }, + { + "time": 1604448000, + "open": 141.3, + "high": 145.8833, + "low": 139.0333, + "close": 140.8, + "volume": 66091209.0 + }, + { + "time": 1604534400, + "open": 143.0333, + "high": 146.6667, + "low": 141.3333, + "close": 144.1333, + "volume": 59458839.0 + }, + { + "time": 1604620800, + "open": 142.7867, + "high": 146.03, + "low": 141.4267, + "close": 143.3, + "volume": 47468925.0 + }, + { + "time": 1604880000, + "open": 146.47, + "high": 150.8333, + "low": 140.3333, + "close": 141.3333, + "volume": 72391911.0 + }, + { + "time": 1604966400, + "open": 141.3333, + "high": 141.3433, + "low": 132.01, + "close": 136.3333, + "volume": 62105277.0 + }, + { + "time": 1605052800, + "open": 138.3333, + "high": 139.5667, + "low": 136.7833, + "close": 138.9367, + "volume": 36576201.0 + }, + { + "time": 1605139200, + "open": 138.8333, + "high": 141.0, + "low": 136.5067, + "close": 137.0, + "volume": 39151536.0 + }, + { + "time": 1605225600, + "open": 136.0233, + "high": 137.9833, + "low": 133.8867, + "close": 136.04, + "volume": 39364200.0 + }, + { + "time": 1605484800, + "open": 136.6667, + "high": 155.8333, + "low": 134.6933, + "close": 153.9733, + "volume": 52552809.0 + }, + { + "time": 1605571200, + "open": 150.5667, + "high": 155.5667, + "low": 144.3367, + "close": 146.1, + "volume": 126524304.0 + }, + { + "time": 1605657600, + "open": 150.4033, + "high": 165.3333, + "low": 147.26, + "close": 160.6633, + "volume": 163818360.0 + }, + { + "time": 1605744000, + "open": 160.0233, + "high": 169.54, + "low": 159.3367, + "close": 164.3333, + "volume": 130075530.0 + }, + { + "time": 1605830400, + "open": 166.1167, + "high": 167.5, + "low": 163.0033, + "close": 163.5333, + "volume": 68026170.0 + }, + { + "time": 1606089600, + "open": 165.16, + "high": 177.4467, + "low": 165.16, + "close": 176.6667, + "volume": 103891680.0 + }, + { + "time": 1606176000, + "open": 178.0, + "high": 188.27, + "low": 173.7333, + "close": 187.4667, + "volume": 111214107.0 + }, + { + "time": 1606262400, + "open": 189.3333, + "high": 192.1533, + "low": 181.0, + "close": 191.6667, + "volume": 100834929.0 + }, + { + "time": 1606435200, + "open": 191.3333, + "high": 199.5933, + "low": 187.27, + "close": 194.9233, + "volume": 76762173.0 + }, + { + "time": 1606694400, + "open": 196.3333, + "high": 202.6, + "low": 184.8367, + "close": 197.3667, + "volume": 131103393.0 + }, + { + "time": 1606780800, + "open": 197.3667, + "high": 199.7667, + "low": 190.6833, + "close": 191.8267, + "volume": 81546585.0 + }, + { + "time": 1606867200, + "open": 191.6667, + "high": 196.8367, + "low": 180.4033, + "close": 194.31, + "volume": 96274566.0 + }, + { + "time": 1606953600, + "open": 195.0, + "high": 199.6567, + "low": 189.6067, + "close": 197.7233, + "volume": 86454540.0 + }, + { + "time": 1607040000, + "open": 198.72, + "high": 200.8967, + "low": 195.1667, + "close": 199.5667, + "volume": 59674344.0 + }, + { + "time": 1607299200, + "open": 199.0, + "high": 216.4833, + "low": 198.3333, + "close": 216.4133, + "volume": 116487387.0 + }, + { + "time": 1607385600, + "open": 218.2533, + "high": 223.0, + "low": 204.93, + "close": 215.4, + "volume": 132180669.0 + }, + { + "time": 1607472000, + "open": 215.3967, + "high": 219.64, + "low": 196.0, + "close": 197.0067, + "volume": 137626977.0 + }, + { + "time": 1607558400, + "open": 199.0333, + "high": 212.0367, + "low": 188.78, + "close": 208.3, + "volume": 139451475.0 + }, + { + "time": 1607644800, + "open": 205.4333, + "high": 208.0, + "low": 198.9333, + "close": 202.5467, + "volume": 95785260.0 + }, + { + "time": 1607904000, + "open": 203.3333, + "high": 214.25, + "low": 203.3333, + "close": 212.0, + "volume": 110166885.0 + }, + { + "time": 1607990400, + "open": 213.1, + "high": 216.0667, + "low": 207.9333, + "close": 209.1333, + "volume": 97244397.0 + }, + { + "time": 1608076800, + "open": 211.6667, + "high": 211.6667, + "low": 201.6667, + "close": 206.8667, + "volume": 87571866.0 + }, + { + "time": 1608163200, + "open": 206.9, + "high": 219.6067, + "low": 205.8333, + "close": 216.0, + "volume": 117472365.0 + }, + { + "time": 1608249600, + "open": 217.1, + "high": 231.6667, + "low": 209.5667, + "close": 225.6667, + "volume": 453121770.0 + }, + { + "time": 1608508800, + "open": 218.3333, + "high": 231.6667, + "low": 215.2033, + "close": 216.6, + "volume": 115350915.0 + }, + { + "time": 1608595200, + "open": 217.45, + "high": 219.5, + "low": 204.7433, + "close": 211.4433, + "volume": 104906727.0 + }, + { + "time": 1608681600, + "open": 212.55, + "high": 217.1667, + "low": 207.5233, + "close": 214.1667, + "volume": 67952889.0 + }, + { + "time": 1608768000, + "open": 214.1667, + "high": 222.03, + "low": 213.6667, + "close": 220.0, + "volume": 46317783.0 + }, + { + "time": 1609113600, + "open": 220.6667, + "high": 227.1333, + "low": 219.9, + "close": 220.0, + "volume": 66460887.0 + }, + { + "time": 1609200000, + "open": 221.6667, + "high": 223.3, + "low": 218.3333, + "close": 221.7967, + "volume": 46040676.0 + }, + { + "time": 1609286400, + "open": 221.7933, + "high": 232.2, + "low": 221.3333, + "close": 231.1333, + "volume": 89297991.0 + }, + { + "time": 1609372800, + "open": 231.1667, + "high": 239.5733, + "low": 230.1633, + "close": 234.8333, + "volume": 103795989.0 + }, + { + "time": 1609718400, + "open": 236.3333, + "high": 248.1633, + "low": 236.3333, + "close": 244.5333, + "volume": 100289490.0 + }, + { + "time": 1609804800, + "open": 243.3767, + "high": 251.4667, + "low": 239.7333, + "close": 250.9667, + "volume": 63907479.0 + }, + { + "time": 1609891200, + "open": 249.3333, + "high": 258.0, + "low": 248.8867, + "close": 254.5333, + "volume": 92182257.0 + }, + { + "time": 1609977600, + "open": 256.3333, + "high": 278.24, + "low": 255.7333, + "close": 276.5, + "volume": 102648621.0 + }, + { + "time": 1610064000, + "open": 281.6667, + "high": 294.9633, + "low": 279.4633, + "close": 289.1667, + "volume": 150111201.0 + }, + { + "time": 1610323200, + "open": 288.7933, + "high": 290.1667, + "low": 267.8733, + "close": 272.8333, + "volume": 115961742.0 + }, + { + "time": 1610409600, + "open": 274.0, + "high": 289.3333, + "low": 274.0, + "close": 284.0, + "volume": 94456524.0 + }, + { + "time": 1610496000, + "open": 285.0, + "high": 287.0, + "low": 277.3333, + "close": 281.0333, + "volume": 66342027.0 + }, + { + "time": 1610582400, + "open": 280.0, + "high": 287.6667, + "low": 279.22, + "close": 282.65, + "volume": 63056748.0 + }, + { + "time": 1610668800, + "open": 283.23, + "high": 286.6333, + "low": 273.0333, + "close": 274.59, + "volume": 78848139.0 + }, + { + "time": 1611014400, + "open": 279.0, + "high": 283.3333, + "low": 277.6667, + "close": 281.0833, + "volume": 46853928.0 + }, + { + "time": 1611100800, + "open": 280.9967, + "high": 286.7267, + "low": 279.0933, + "close": 283.9567, + "volume": 49166334.0 + }, + { + "time": 1611187200, + "open": 286.0, + "high": 286.33, + "low": 280.3333, + "close": 280.6633, + "volume": 38889873.0 + }, + { + "time": 1611273600, + "open": 280.2733, + "high": 282.6667, + "low": 276.2067, + "close": 282.5, + "volume": 37781574.0 + }, + { + "time": 1611532800, + "open": 283.9633, + "high": 300.1333, + "low": 279.6067, + "close": 291.5, + "volume": 76459485.0 + }, + { + "time": 1611619200, + "open": 293.16, + "high": 298.6333, + "low": 290.5333, + "close": 295.97, + "volume": 44113677.0 + }, + { + "time": 1611705600, + "open": 296.11, + "high": 297.17, + "low": 266.1433, + "close": 273.4633, + "volume": 44969781.0 + }, + { + "time": 1611792000, + "open": 272.8333, + "high": 282.6667, + "low": 264.6667, + "close": 276.4833, + "volume": 43576764.0 + }, + { + "time": 1611878400, + "open": 274.55, + "high": 280.8033, + "low": 260.0333, + "close": 262.6333, + "volume": 59973315.0 + }, + { + "time": 1612137600, + "open": 270.6967, + "high": 280.6667, + "low": 265.1867, + "close": 280.0, + "volume": 44447226.0 + }, + { + "time": 1612224000, + "open": 281.6667, + "high": 293.4067, + "low": 277.3333, + "close": 292.6667, + "volume": 42602496.0 + }, + { + "time": 1612310400, + "open": 292.6667, + "high": 293.2133, + "low": 283.3333, + "close": 283.6667, + "volume": 32335680.0 + }, + { + "time": 1612396800, + "open": 286.2333, + "high": 286.7433, + "low": 277.8067, + "close": 282.1667, + "volume": 28538979.0 + }, + { + "time": 1612483200, + "open": 283.6133, + "high": 288.2567, + "low": 279.6567, + "close": 284.4967, + "volume": 32859015.0 + }, + { + "time": 1612742400, + "open": 285.73, + "high": 292.6267, + "low": 280.18, + "close": 286.2067, + "volume": 36266742.0 + }, + { + "time": 1612828800, + "open": 287.7933, + "high": 287.8067, + "low": 280.6667, + "close": 281.83, + "volume": 25635285.0 + }, + { + "time": 1612915200, + "open": 283.3333, + "high": 283.6267, + "low": 266.6733, + "close": 269.9633, + "volume": 64580658.0 + }, + { + "time": 1613001600, + "open": 272.82, + "high": 276.6267, + "low": 267.2633, + "close": 270.3333, + "volume": 38372664.0 + }, + { + "time": 1613088000, + "open": 269.8767, + "high": 272.8333, + "low": 261.7767, + "close": 272.5167, + "volume": 40260147.0 + }, + { + "time": 1613433600, + "open": 273.6667, + "high": 275.0, + "low": 263.7333, + "close": 263.8067, + "volume": 34891947.0 + }, + { + "time": 1613520000, + "open": 263.3333, + "high": 266.6133, + "low": 254.0033, + "close": 264.55, + "volume": 45436740.0 + }, + { + "time": 1613606400, + "open": 263.57, + "high": 264.8967, + "low": 258.6667, + "close": 261.0333, + "volume": 32746779.0 + }, + { + "time": 1613692800, + "open": 260.9267, + "high": 267.5567, + "low": 259.1233, + "close": 260.8333, + "volume": 33005790.0 + }, + { + "time": 1613952000, + "open": 254.5, + "high": 256.1667, + "low": 236.3333, + "close": 236.87, + "volume": 66209229.0 + }, + { + "time": 1614038400, + "open": 231.7333, + "high": 240.0, + "low": 206.3333, + "close": 238.8333, + "volume": 120777558.0 + }, + { + "time": 1614124800, + "open": 240.0, + "high": 248.3333, + "low": 231.39, + "close": 246.0667, + "volume": 69555915.0 + }, + { + "time": 1614211200, + "open": 247.1667, + "high": 247.34, + "low": 218.3333, + "close": 222.6667, + "volume": 69715503.0 + }, + { + "time": 1614297600, + "open": 226.0067, + "high": 235.5667, + "low": 219.8367, + "close": 223.6, + "volume": 77062926.0 + }, + { + "time": 1614556800, + "open": 230.8367, + "high": 241.8133, + "low": 228.35, + "close": 241.75, + "volume": 48766533.0 + }, + { + "time": 1614643200, + "open": 238.8333, + "high": 241.1167, + "low": 228.3333, + "close": 229.5967, + "volume": 40553202.0 + }, + { + "time": 1614729600, + "open": 233.0, + "high": 234.1667, + "low": 216.3733, + "close": 217.9767, + "volume": 52144758.0 + }, + { + "time": 1614816000, + "open": 218.27, + "high": 222.8167, + "low": 200.0, + "close": 200.0333, + "volume": 120709596.0 + }, + { + "time": 1614902400, + "open": 203.5, + "high": 210.74, + "low": 179.83, + "close": 198.75, + "volume": 166008762.0 + }, + { + "time": 1615161600, + "open": 194.4, + "high": 206.71, + "low": 184.6667, + "close": 189.0, + "volume": 99075645.0 + }, + { + "time": 1615248000, + "open": 193.72, + "high": 231.3, + "low": 192.3333, + "close": 229.7367, + "volume": 126304164.0 + }, + { + "time": 1615334400, + "open": 230.5233, + "high": 239.2833, + "low": 218.6067, + "close": 221.52, + "volume": 115159767.0 + }, + { + "time": 1615420800, + "open": 229.0, + "high": 235.2633, + "low": 225.7267, + "close": 232.8333, + "volume": 66966033.0 + }, + { + "time": 1615507200, + "open": 225.0, + "high": 232.0, + "low": 222.0433, + "close": 230.9967, + "volume": 60956052.0 + }, + { + "time": 1615766400, + "open": 229.9667, + "high": 237.7267, + "low": 228.0133, + "close": 234.0, + "volume": 55377972.0 + }, + { + "time": 1615852800, + "open": 236.9233, + "high": 237.0, + "low": 223.6667, + "close": 224.7, + "volume": 59068035.0 + }, + { + "time": 1615939200, + "open": 224.8667, + "high": 234.5767, + "low": 216.67, + "close": 233.2467, + "volume": 77101338.0 + }, + { + "time": 1616025600, + "open": 229.2567, + "high": 230.93, + "low": 216.8333, + "close": 216.8533, + "volume": 59758062.0 + }, + { + "time": 1616112000, + "open": 216.6667, + "high": 222.8333, + "low": 208.2067, + "close": 217.4, + "volume": 81737448.0 + }, + { + "time": 1616371200, + "open": 220.6667, + "high": 233.2067, + "low": 218.29, + "close": 223.1167, + "volume": 75553839.0 + }, + { + "time": 1616457600, + "open": 223.0, + "high": 227.2, + "low": 219.17, + "close": 221.0, + "volume": 53724156.0 + }, + { + "time": 1616544000, + "open": 221.3333, + "high": 225.3333, + "low": 210.0, + "close": 211.3, + "volume": 63886878.0 + }, + { + "time": 1616630400, + "open": 211.3667, + "high": 215.1667, + "low": 201.48, + "close": 214.2, + "volume": 75643422.0 + }, + { + "time": 1616716800, + "open": 214.0167, + "high": 217.0767, + "low": 200.0, + "close": 207.1, + "volume": 59529975.0 + }, + { + "time": 1616976000, + "open": 203.15, + "high": 207.36, + "low": 198.6733, + "close": 202.6, + "volume": 48334989.0 + }, + { + "time": 1617062400, + "open": 202.0, + "high": 213.3333, + "low": 197.0033, + "close": 213.0033, + "volume": 77555175.0 + }, + { + "time": 1617148800, + "open": 211.5667, + "high": 224.0, + "low": 209.1667, + "close": 221.1033, + "volume": 64970841.0 + }, + { + "time": 1617235200, + "open": 225.1833, + "high": 230.81, + "low": 219.3333, + "close": 219.3333, + "volume": 68217258.0 + }, + { + "time": 1617580800, + "open": 233.3333, + "high": 238.9, + "low": 228.2333, + "close": 230.9, + "volume": 82286721.0 + }, + { + "time": 1617667200, + "open": 230.1667, + "high": 232.1833, + "low": 227.1233, + "close": 230.8333, + "volume": 57601257.0 + }, + { + "time": 1617753600, + "open": 230.9567, + "high": 231.1167, + "low": 222.6133, + "close": 224.1333, + "volume": 53050818.0 + }, + { + "time": 1617840000, + "open": 226.33, + "high": 229.85, + "low": 223.88, + "close": 228.9233, + "volume": 48333639.0 + }, + { + "time": 1617926400, + "open": 228.2433, + "high": 229.1667, + "low": 223.1433, + "close": 225.6667, + "volume": 39606963.0 + }, + { + "time": 1618185600, + "open": 228.5667, + "high": 234.9333, + "low": 226.2367, + "close": 233.8367, + "volume": 54284880.0 + }, + { + "time": 1618272000, + "open": 234.6667, + "high": 254.5, + "low": 234.5767, + "close": 252.5667, + "volume": 86973186.0 + }, + { + "time": 1618358400, + "open": 254.9067, + "high": 262.23, + "low": 242.6767, + "close": 244.2933, + "volume": 93136587.0 + }, + { + "time": 1618444800, + "open": 248.3333, + "high": 249.1133, + "low": 240.4367, + "close": 246.0833, + "volume": 53544411.0 + }, + { + "time": 1618531200, + "open": 245.8767, + "high": 249.8033, + "low": 241.5333, + "close": 246.4167, + "volume": 53036541.0 + }, + { + "time": 1618790400, + "open": 244.6667, + "high": 247.21, + "low": 230.6, + "close": 240.5333, + "volume": 75574374.0 + }, + { + "time": 1618876800, + "open": 240.07, + "high": 245.75, + "low": 233.9, + "close": 237.4633, + "volume": 70814043.0 + }, + { + "time": 1618963200, + "open": 237.2067, + "high": 248.28, + "low": 232.6667, + "close": 246.8667, + "volume": 58436706.0 + }, + { + "time": 1619049600, + "open": 247.24, + "high": 251.2567, + "low": 237.6667, + "close": 239.5, + "volume": 68573160.0 + }, + { + "time": 1619136000, + "open": 239.04, + "high": 245.7867, + "low": 237.51, + "close": 243.3667, + "volume": 55616598.0 + }, + { + "time": 1619395200, + "open": 244.6667, + "high": 249.7667, + "low": 238.39, + "close": 239.9533, + "volume": 56943357.0 + }, + { + "time": 1619481600, + "open": 240.0, + "high": 241.9467, + "low": 233.63, + "close": 233.86, + "volume": 54962673.0 + }, + { + "time": 1619568000, + "open": 233.3333, + "high": 236.1667, + "low": 230.5133, + "close": 231.5, + "volume": 40961961.0 + }, + { + "time": 1619654400, + "open": 233.84, + "high": 234.6, + "low": 222.8667, + "close": 223.6267, + "volume": 53380290.0 + }, + { + "time": 1619740800, + "open": 224.3367, + "high": 238.49, + "low": 221.0467, + "close": 236.6667, + "volume": 76883430.0 + }, + { + "time": 1620000000, + "open": 236.0067, + "high": 236.21, + "low": 226.8333, + "close": 227.1, + "volume": 51935973.0 + }, + { + "time": 1620086400, + "open": 227.0633, + "high": 229.5, + "low": 219.2333, + "close": 225.1, + "volume": 55854111.0 + }, + { + "time": 1620172800, + "open": 225.7667, + "high": 228.4333, + "low": 222.1667, + "close": 222.17, + "volume": 42513225.0 + }, + { + "time": 1620259200, + "open": 224.4567, + "high": 230.0767, + "low": 216.6667, + "close": 221.6667, + "volume": 54950481.0 + }, + { + "time": 1620345600, + "open": 222.1667, + "high": 227.84, + "low": 218.5433, + "close": 223.1667, + "volume": 45285756.0 + }, + { + "time": 1620604800, + "open": 223.0, + "high": 223.3333, + "low": 206.7033, + "close": 206.7033, + "volume": 59311011.0 + }, + { + "time": 1620691200, + "open": 206.67, + "high": 209.0333, + "low": 192.6667, + "close": 205.25, + "volume": 89671815.0 + }, + { + "time": 1620777600, + "open": 206.1, + "high": 206.8033, + "low": 193.3333, + "close": 194.1667, + "volume": 64890921.0 + }, + { + "time": 1620864000, + "open": 193.6667, + "high": 202.1533, + "low": 186.6667, + "close": 191.1667, + "volume": 83126715.0 + }, + { + "time": 1620950400, + "open": 193.67, + "high": 199.6267, + "low": 190.1533, + "close": 199.3333, + "volume": 65228229.0 + }, + { + "time": 1621209600, + "open": 196.58, + "high": 197.6667, + "low": 187.0667, + "close": 190.6467, + "volume": 63467550.0 + }, + { + "time": 1621296000, + "open": 193.0467, + "high": 198.75, + "low": 187.7933, + "close": 190.3333, + "volume": 75257196.0 + }, + { + "time": 1621382400, + "open": 188.56, + "high": 189.2833, + "low": 181.6667, + "close": 186.0033, + "volume": 77524299.0 + }, + { + "time": 1621468800, + "open": 187.6667, + "high": 196.3333, + "low": 186.6333, + "close": 196.3, + "volume": 64313097.0 + }, + { + "time": 1621555200, + "open": 196.7667, + "high": 201.57, + "low": 192.7933, + "close": 192.8333, + "volume": 49913517.0 + }, + { + "time": 1621814400, + "open": 195.0333, + "high": 204.8267, + "low": 191.2167, + "close": 202.5, + "volume": 72762678.0 + }, + { + "time": 1621900800, + "open": 203.5, + "high": 204.6633, + "low": 198.57, + "close": 202.4267, + "volume": 57594786.0 + }, + { + "time": 1621987200, + "open": 203.0, + "high": 208.7233, + "low": 200.5, + "close": 206.3367, + "volume": 59423178.0 + }, + { + "time": 1622073600, + "open": 205.5433, + "high": 210.3767, + "low": 204.47, + "close": 209.7433, + "volume": 53587350.0 + }, + { + "time": 1622160000, + "open": 210.0, + "high": 211.8633, + "low": 207.46, + "close": 208.1667, + "volume": 45708411.0 + }, + { + "time": 1622505600, + "open": 208.73, + "high": 211.2667, + "low": 206.85, + "close": 207.2333, + "volume": 35538018.0 + }, + { + "time": 1622592000, + "open": 206.9967, + "high": 207.9667, + "low": 199.7133, + "close": 200.6733, + "volume": 43231854.0 + }, + { + "time": 1622678400, + "open": 200.3367, + "high": 201.5167, + "low": 190.0, + "close": 190.7167, + "volume": 57641328.0 + }, + { + "time": 1622764800, + "open": 191.9333, + "high": 200.2033, + "low": 190.4667, + "close": 200.0, + "volume": 47932023.0 + }, + { + "time": 1623024000, + "open": 199.4967, + "high": 203.3333, + "low": 194.2933, + "close": 200.0, + "volume": 43852587.0 + }, + { + "time": 1623110400, + "open": 198.6833, + "high": 209.0, + "low": 198.5, + "close": 200.4833, + "volume": 52664493.0 + }, + { + "time": 1623196800, + "open": 201.24, + "high": 203.93, + "low": 199.0067, + "close": 199.3333, + "volume": 34338024.0 + }, + { + "time": 1623283200, + "open": 199.2733, + "high": 205.53, + "low": 197.3333, + "close": 202.6667, + "volume": 49835202.0 + }, + { + "time": 1623369600, + "open": 203.0, + "high": 205.3333, + "low": 200.5067, + "close": 203.5, + "volume": 31935483.0 + }, + { + "time": 1623628800, + "open": 203.9967, + "high": 208.42, + "low": 203.06, + "close": 205.3333, + "volume": 41926515.0 + }, + { + "time": 1623715200, + "open": 205.81, + "high": 206.3367, + "low": 198.6667, + "close": 198.7667, + "volume": 36347325.0 + }, + { + "time": 1623801600, + "open": 199.6267, + "high": 202.8333, + "low": 197.67, + "close": 200.8333, + "volume": 44065245.0 + }, + { + "time": 1623888000, + "open": 200.3033, + "high": 207.1567, + "low": 199.6567, + "close": 205.53, + "volume": 44940105.0 + }, + { + "time": 1623974400, + "open": 205.6367, + "high": 209.45, + "low": 203.5433, + "close": 206.9833, + "volume": 50973756.0 + }, + { + "time": 1624233600, + "open": 207.33, + "high": 210.4633, + "low": 202.96, + "close": 207.0833, + "volume": 50577285.0 + }, + { + "time": 1624320000, + "open": 206.1333, + "high": 209.5233, + "low": 205.1667, + "close": 208.0167, + "volume": 39783501.0 + }, + { + "time": 1624406400, + "open": 208.3333, + "high": 221.5467, + "low": 208.3333, + "close": 221.0, + "volume": 63081165.0 + }, + { + "time": 1624492800, + "open": 221.6667, + "high": 232.54, + "low": 219.4033, + "close": 227.3333, + "volume": 95330490.0 + }, + { + "time": 1624579200, + "open": 227.3333, + "high": 231.27, + "low": 222.6767, + "close": 223.0, + "volume": 68989917.0 + }, + { + "time": 1624838400, + "open": 222.9, + "high": 231.5667, + "low": 222.4333, + "close": 228.8, + "volume": 43411218.0 + }, + { + "time": 1624924800, + "open": 229.33, + "high": 229.3333, + "low": 225.2967, + "close": 226.67, + "volume": 35486958.0 + }, + { + "time": 1625011200, + "open": 227.0, + "high": 230.9367, + "low": 224.6667, + "close": 226.4667, + "volume": 38338683.0 + }, + { + "time": 1625097600, + "open": 227.1667, + "high": 229.5733, + "low": 224.2667, + "close": 225.3, + "volume": 35654799.0 + }, + { + "time": 1625184000, + "open": 225.3, + "high": 233.3333, + "low": 224.09, + "close": 225.7, + "volume": 54561240.0 + }, + { + "time": 1625529600, + "open": 225.4867, + "high": 228.0, + "low": 217.1333, + "close": 218.7, + "volume": 41297160.0 + }, + { + "time": 1625616000, + "open": 220.0, + "high": 221.9, + "low": 212.7733, + "close": 214.6333, + "volume": 37118532.0 + }, + { + "time": 1625702400, + "open": 210.0, + "high": 218.3333, + "low": 206.82, + "close": 216.8667, + "volume": 44881728.0 + }, + { + "time": 1625788800, + "open": 217.5967, + "high": 220.0, + "low": 214.8967, + "close": 218.5933, + "volume": 34968744.0 + }, + { + "time": 1626048000, + "open": 219.0, + "high": 229.1667, + "low": 218.9833, + "close": 229.0033, + "volume": 51243600.0 + }, + { + "time": 1626134400, + "open": 228.1333, + "high": 231.58, + "low": 220.5067, + "close": 220.8, + "volume": 42033159.0 + }, + { + "time": 1626220800, + "open": 223.3333, + "high": 226.2033, + "low": 217.6, + "close": 218.2833, + "volume": 46162458.0 + }, + { + "time": 1626307200, + "open": 219.0633, + "high": 222.0467, + "low": 212.6267, + "close": 216.4, + "volume": 41483562.0 + }, + { + "time": 1626393600, + "open": 217.5, + "high": 218.92, + "low": 213.66, + "close": 214.0667, + "volume": 31873818.0 + }, + { + "time": 1626652800, + "open": 213.6467, + "high": 216.33, + "low": 207.0967, + "close": 215.9267, + "volume": 40264497.0 + }, + { + "time": 1626739200, + "open": 216.6667, + "high": 220.8, + "low": 213.5, + "close": 220.6667, + "volume": 29554182.0 + }, + { + "time": 1626825600, + "open": 220.6667, + "high": 221.62, + "low": 216.7633, + "close": 218.2333, + "volume": 26824704.0 + }, + { + "time": 1626912000, + "open": 219.6333, + "high": 220.7233, + "low": 214.8667, + "close": 216.1667, + "volume": 29336946.0 + }, + { + "time": 1626998400, + "open": 217.3333, + "high": 217.3367, + "low": 212.4333, + "close": 214.44, + "volume": 27217935.0 + }, + { + "time": 1627257600, + "open": 215.2, + "high": 226.1167, + "low": 213.21, + "close": 221.3867, + "volume": 50556135.0 + }, + { + "time": 1627344000, + "open": 222.4967, + "high": 224.7967, + "low": 209.08, + "close": 213.0033, + "volume": 64392234.0 + }, + { + "time": 1627430400, + "open": 214.3, + "high": 218.3233, + "low": 213.1333, + "close": 215.3333, + "volume": 29813055.0 + }, + { + "time": 1627516800, + "open": 215.66, + "high": 227.8967, + "low": 215.66, + "close": 222.9967, + "volume": 59894136.0 + }, + { + "time": 1627603200, + "open": 221.8333, + "high": 232.51, + "low": 220.99, + "close": 229.1933, + "volume": 55456236.0 + }, + { + "time": 1627862400, + "open": 230.7333, + "high": 242.3133, + "low": 230.6667, + "close": 238.33, + "volume": 65648568.0 + }, + { + "time": 1627948800, + "open": 238.3333, + "high": 240.8833, + "low": 233.67, + "close": 235.6667, + "volume": 42860139.0 + }, + { + "time": 1628035200, + "open": 237.0, + "high": 241.6333, + "low": 235.5167, + "close": 237.0, + "volume": 32493825.0 + }, + { + "time": 1628121600, + "open": 237.6667, + "high": 240.3167, + "low": 236.94, + "close": 238.2, + "volume": 24828657.0 + }, + { + "time": 1628208000, + "open": 238.3367, + "high": 239.0, + "low": 232.2833, + "close": 232.3333, + "volume": 28781466.0 + }, + { + "time": 1628467200, + "open": 236.0, + "high": 239.6767, + "low": 234.9633, + "close": 237.9, + "volume": 29672529.0 + }, + { + "time": 1628553600, + "open": 238.1, + "high": 238.8633, + "low": 233.96, + "close": 236.1667, + "volume": 26595642.0 + }, + { + "time": 1628640000, + "open": 236.2167, + "high": 238.3933, + "low": 234.7367, + "close": 235.8033, + "volume": 17842452.0 + }, + { + "time": 1628726400, + "open": 235.3333, + "high": 242.0033, + "low": 233.1333, + "close": 240.1133, + "volume": 34809909.0 + }, + { + "time": 1628812800, + "open": 239.97, + "high": 243.3, + "low": 238.18, + "close": 238.9067, + "volume": 32477205.0 + }, + { + "time": 1629072000, + "open": 238.7267, + "high": 238.7267, + "low": 226.02, + "close": 227.2333, + "volume": 42453582.0 + }, + { + "time": 1629158400, + "open": 226.8, + "high": 226.8, + "low": 216.28, + "close": 221.0, + "volume": 43246251.0 + }, + { + "time": 1629244800, + "open": 223.0033, + "high": 231.9233, + "low": 222.7767, + "close": 228.3333, + "volume": 39414696.0 + }, + { + "time": 1629331200, + "open": 227.0, + "high": 228.85, + "low": 222.53, + "close": 224.3333, + "volume": 27499356.0 + }, + { + "time": 1629417600, + "open": 224.6667, + "high": 230.71, + "low": 223.6667, + "close": 226.7667, + "volume": 27058611.0 + }, + { + "time": 1629676800, + "open": 228.0, + "high": 237.3767, + "low": 226.9167, + "close": 236.1, + "volume": 40378269.0 + }, + { + "time": 1629763200, + "open": 236.8, + "high": 238.4033, + "low": 234.2133, + "close": 235.4333, + "volume": 24506721.0 + }, + { + "time": 1629849600, + "open": 235.5967, + "high": 238.99, + "low": 234.6667, + "close": 237.0, + "volume": 24902058.0 + }, + { + "time": 1629936000, + "open": 236.3367, + "high": 238.4667, + "low": 232.54, + "close": 233.3, + "volume": 24901170.0 + }, + { + "time": 1630022400, + "open": 235.0, + "high": 238.3333, + "low": 234.0333, + "close": 237.4667, + "volume": 25801872.0 + }, + { + "time": 1630281600, + "open": 238.0, + "high": 245.7833, + "low": 237.44, + "close": 244.6667, + "volume": 35205261.0 + }, + { + "time": 1630368000, + "open": 244.6667, + "high": 246.78, + "low": 242.1467, + "close": 244.6667, + "volume": 41367243.0 + }, + { + "time": 1630454400, + "open": 245.5667, + "high": 247.33, + "low": 243.3333, + "close": 243.7333, + "volume": 23279241.0 + }, + { + "time": 1630540800, + "open": 244.33, + "high": 246.99, + "low": 242.0033, + "close": 244.4333, + "volume": 24648756.0 + }, + { + "time": 1630627200, + "open": 245.7, + "high": 245.8333, + "low": 241.4, + "close": 244.8333, + "volume": 29042418.0 + }, + { + "time": 1630972800, + "open": 245.12, + "high": 253.4, + "low": 245.0, + "close": 250.4367, + "volume": 38376276.0 + }, + { + "time": 1631059200, + "open": 252.0, + "high": 254.8167, + "low": 246.9233, + "close": 250.5167, + "volume": 37344477.0 + }, + { + "time": 1631145600, + "open": 250.0, + "high": 254.0333, + "low": 249.0067, + "close": 251.2833, + "volume": 27285180.0 + }, + { + "time": 1631232000, + "open": 251.8533, + "high": 254.2033, + "low": 243.7233, + "close": 244.1667, + "volume": 28766106.0 + }, + { + "time": 1631491200, + "open": 245.4233, + "high": 248.26, + "low": 236.3933, + "close": 247.6667, + "volume": 45762033.0 + }, + { + "time": 1631577600, + "open": 246.3333, + "high": 251.49, + "low": 245.4067, + "close": 248.5, + "volume": 35848818.0 + }, + { + "time": 1631664000, + "open": 248.48, + "high": 252.2867, + "low": 246.12, + "close": 251.93, + "volume": 30442302.0 + }, + { + "time": 1631750400, + "open": 250.6667, + "high": 252.97, + "low": 249.2033, + "close": 251.8333, + "volume": 26342049.0 + }, + { + "time": 1631836800, + "open": 252.0033, + "high": 253.68, + "low": 250.0, + "close": 253.04, + "volume": 59345472.0 + }, + { + "time": 1632096000, + "open": 250.0, + "high": 250.0, + "low": 239.54, + "close": 242.9867, + "volume": 44764014.0 + }, + { + "time": 1632182400, + "open": 247.3333, + "high": 248.2467, + "low": 243.48, + "close": 245.6667, + "volume": 31419141.0 + }, + { + "time": 1632268800, + "open": 246.37, + "high": 251.5333, + "low": 246.3167, + "close": 251.5333, + "volume": 28690833.0 + }, + { + "time": 1632355200, + "open": 252.0133, + "high": 253.2667, + "low": 249.3067, + "close": 250.9333, + "volume": 21861891.0 + }, + { + "time": 1632441600, + "open": 250.0, + "high": 258.3333, + "low": 248.01, + "close": 257.9167, + "volume": 41849742.0 + }, + { + "time": 1632700800, + "open": 258.0, + "high": 266.3333, + "low": 256.1633, + "close": 262.3267, + "volume": 56626173.0 + }, + { + "time": 1632787200, + "open": 260.48, + "high": 265.2133, + "low": 255.3933, + "close": 258.0, + "volume": 50707452.0 + }, + { + "time": 1632873600, + "open": 261.6667, + "high": 264.5, + "low": 256.8933, + "close": 259.9667, + "volume": 42686520.0 + }, + { + "time": 1632960000, + "open": 261.6667, + "high": 263.0467, + "low": 258.0, + "close": 258.3767, + "volume": 36607635.0 + }, + { + "time": 1633046400, + "open": 256.6667, + "high": 260.6667, + "low": 254.53, + "close": 258.3333, + "volume": 33948654.0 + }, + { + "time": 1633305600, + "open": 261.6833, + "high": 268.99, + "low": 257.76, + "close": 260.5, + "volume": 62392521.0 + }, + { + "time": 1633392000, + "open": 261.1233, + "high": 265.77, + "low": 258.17, + "close": 260.0, + "volume": 36630258.0 + }, + { + "time": 1633478400, + "open": 257.1267, + "high": 262.22, + "low": 255.0533, + "close": 261.2467, + "volume": 28747782.0 + }, + { + "time": 1633564800, + "open": 262.75, + "high": 268.3333, + "low": 260.2633, + "close": 263.3333, + "volume": 35731074.0 + }, + { + "time": 1633651200, + "open": 264.5033, + "high": 266.1133, + "low": 260.3033, + "close": 261.7, + "volume": 31890201.0 + }, + { + "time": 1633910400, + "open": 261.92, + "high": 267.08, + "low": 261.0, + "close": 264.2, + "volume": 27505347.0 + }, + { + "time": 1633996800, + "open": 263.68, + "high": 270.7733, + "low": 263.32, + "close": 268.5, + "volume": 40789215.0 + }, + { + "time": 1634083200, + "open": 270.0067, + "high": 271.8033, + "low": 267.9, + "close": 271.1667, + "volume": 27633120.0 + }, + { + "time": 1634169600, + "open": 272.3867, + "high": 273.4167, + "low": 269.6833, + "close": 273.2333, + "volume": 21017235.0 + }, + { + "time": 1634256000, + "open": 273.3333, + "high": 283.2633, + "low": 272.09, + "close": 283.0, + "volume": 37482756.0 + }, + { + "time": 1634515200, + "open": 281.15, + "high": 291.6767, + "low": 280.3067, + "close": 290.6667, + "volume": 46397166.0 + }, + { + "time": 1634601600, + "open": 291.5667, + "high": 293.3333, + "low": 287.5033, + "close": 287.5533, + "volume": 34256370.0 + }, + { + "time": 1634688000, + "open": 286.7067, + "high": 291.8, + "low": 283.8633, + "close": 283.9333, + "volume": 26102676.0 + }, + { + "time": 1634774400, + "open": 285.53, + "high": 300.0, + "low": 283.4333, + "close": 296.2933, + "volume": 63007014.0 + }, + { + "time": 1634860800, + "open": 297.1667, + "high": 303.4067, + "low": 296.9867, + "close": 303.0833, + "volume": 44809167.0 + }, + { + "time": 1635120000, + "open": 304.66, + "high": 348.34, + "low": 303.3367, + "close": 343.3333, + "volume": 120727032.0 + }, + { + "time": 1635206400, + "open": 342.99, + "high": 364.98, + "low": 333.8133, + "close": 337.9667, + "volume": 116972874.0 + }, + { + "time": 1635292800, + "open": 340.0667, + "high": 356.96, + "low": 336.55, + "close": 353.67, + "volume": 71864214.0 + }, + { + "time": 1635379200, + "open": 353.6, + "high": 362.9333, + "low": 345.9533, + "close": 360.0, + "volume": 51902868.0 + }, + { + "time": 1635465600, + "open": 360.0, + "high": 376.5833, + "low": 357.7333, + "close": 376.05, + "volume": 58173909.0 + }, + { + "time": 1635724800, + "open": 377.4, + "high": 408.2967, + "low": 372.26, + "close": 406.4, + "volume": 103645668.0 + }, + { + "time": 1635811200, + "open": 397.0367, + "high": 402.8633, + "low": 375.1033, + "close": 387.0, + "volume": 73600182.0 + }, + { + "time": 1635897600, + "open": 388.5433, + "high": 406.33, + "low": 383.55, + "close": 405.83, + "volume": 62335545.0 + }, + { + "time": 1635984000, + "open": 407.7333, + "high": 416.6667, + "low": 405.6667, + "close": 407.4, + "volume": 44871267.0 + }, + { + "time": 1636070400, + "open": 407.41, + "high": 413.29, + "low": 402.6667, + "close": 405.5, + "volume": 38407929.0 + }, + { + "time": 1636329600, + "open": 383.6667, + "high": 399.0, + "low": 376.8333, + "close": 383.3367, + "volume": 55734987.0 + }, + { + "time": 1636416000, + "open": 388.2333, + "high": 395.9267, + "low": 337.1733, + "close": 341.3333, + "volume": 99305115.0 + }, + { + "time": 1636502400, + "open": 345.1667, + "high": 366.3333, + "low": 329.1033, + "close": 365.3333, + "volume": 72635043.0 + }, + { + "time": 1636588800, + "open": 364.5733, + "high": 373.2433, + "low": 351.56, + "close": 353.3333, + "volume": 37079193.0 + }, + { + "time": 1636675200, + "open": 355.11, + "high": 357.3333, + "low": 339.88, + "close": 343.1667, + "volume": 40773651.0 + }, + { + "time": 1636934400, + "open": 340.0, + "high": 345.3367, + "low": 326.2, + "close": 334.0, + "volume": 55007415.0 + }, + { + "time": 1637020800, + "open": 334.3333, + "high": 353.0, + "low": 332.0033, + "close": 352.7333, + "volume": 45724431.0 + }, + { + "time": 1637107200, + "open": 354.47, + "high": 373.2133, + "low": 351.8333, + "close": 362.6667, + "volume": 54335913.0 + }, + { + "time": 1637193600, + "open": 366.2567, + "high": 371.6667, + "low": 358.34, + "close": 362.4167, + "volume": 38152728.0 + }, + { + "time": 1637280000, + "open": 367.07, + "high": 381.4133, + "low": 363.3333, + "close": 380.0, + "volume": 40460397.0 + }, + { + "time": 1637539200, + "open": 382.8367, + "high": 400.65, + "low": 377.4767, + "close": 387.02, + "volume": 61802889.0 + }, + { + "time": 1637625600, + "open": 384.9233, + "high": 393.5, + "low": 354.2333, + "close": 366.9333, + "volume": 66676008.0 + }, + { + "time": 1637712000, + "open": 371.0833, + "high": 377.59, + "low": 354.0, + "close": 372.5, + "volume": 40844445.0 + }, + { + "time": 1637884800, + "open": 363.1667, + "high": 369.5967, + "low": 357.05, + "close": 360.0, + "volume": 20116359.0 + }, + { + "time": 1638144000, + "open": 368.3333, + "high": 380.89, + "low": 364.3367, + "close": 380.6567, + "volume": 35464650.0 + }, + { + "time": 1638230400, + "open": 375.9, + "high": 389.3333, + "low": 372.3333, + "close": 381.67, + "volume": 49770600.0 + }, + { + "time": 1638316800, + "open": 384.6633, + "high": 390.9467, + "low": 361.2567, + "close": 365.9167, + "volume": 40769319.0 + }, + { + "time": 1638403200, + "open": 369.79, + "high": 371.9967, + "low": 352.2167, + "close": 357.9967, + "volume": 42563499.0 + }, + { + "time": 1638489600, + "open": 359.9833, + "high": 366.0, + "low": 333.4033, + "close": 336.0, + "volume": 52544382.0 + }, + { + "time": 1638748800, + "open": 342.3267, + "high": 343.4633, + "low": 316.8333, + "close": 336.6667, + "volume": 46148676.0 + }, + { + "time": 1638835200, + "open": 345.1267, + "high": 352.9333, + "low": 336.3367, + "close": 352.6633, + "volume": 35199075.0 + }, + { + "time": 1638921600, + "open": 349.8333, + "high": 357.46, + "low": 344.3333, + "close": 354.2433, + "volume": 24624063.0 + }, + { + "time": 1639008000, + "open": 352.67, + "high": 357.2133, + "low": 332.3333, + "close": 332.5167, + "volume": 36719553.0 + }, + { + "time": 1639094400, + "open": 333.03, + "high": 340.6, + "low": 324.3333, + "close": 337.5067, + "volume": 34100466.0 + }, + { + "time": 1639353600, + "open": 339.6767, + "high": 341.15, + "low": 317.17, + "close": 318.3333, + "volume": 42878616.0 + }, + { + "time": 1639440000, + "open": 320.4233, + "high": 322.9433, + "low": 310.0, + "close": 317.78, + "volume": 40971606.0 + }, + { + "time": 1639526400, + "open": 318.4067, + "high": 331.6333, + "low": 309.4167, + "close": 329.6667, + "volume": 42256527.0 + }, + { + "time": 1639612800, + "open": 331.9233, + "high": 334.6067, + "low": 305.5, + "close": 306.6, + "volume": 44465637.0 + }, + { + "time": 1639699200, + "open": 306.4933, + "high": 320.22, + "low": 301.6667, + "close": 310.5, + "volume": 59531019.0 + }, + { + "time": 1639958400, + "open": 303.6667, + "high": 307.23, + "low": 297.81, + "close": 301.0133, + "volume": 31028196.0 + }, + { + "time": 1640044800, + "open": 304.3567, + "high": 313.1667, + "low": 295.3733, + "close": 310.1333, + "volume": 40021422.0 + }, + { + "time": 1640131200, + "open": 314.3333, + "high": 338.5533, + "low": 312.1333, + "close": 334.3333, + "volume": 53675220.0 + }, + { + "time": 1640217600, + "open": 336.4933, + "high": 357.66, + "low": 332.52, + "close": 356.4333, + "volume": 53221719.0 + }, + { + "time": 1640563200, + "open": 356.9333, + "high": 372.3333, + "low": 356.9033, + "close": 364.0, + "volume": 39116811.0 + }, + { + "time": 1640649600, + "open": 368.6033, + "high": 373.0, + "low": 359.4733, + "close": 364.5, + "volume": 33759246.0 + }, + { + "time": 1640736000, + "open": 367.6667, + "high": 371.8733, + "low": 354.7133, + "close": 360.6667, + "volume": 33236880.0 + }, + { + "time": 1640822400, + "open": 362.9967, + "high": 365.1833, + "low": 351.05, + "close": 355.3333, + "volume": 26776320.0 + }, + { + "time": 1640908800, + "open": 355.3333, + "high": 360.6667, + "low": 351.53, + "close": 354.3, + "volume": 21442167.0 + }, + { + "time": 1641168000, + "open": 369.9133, + "high": 403.3333, + "low": 368.6667, + "close": 403.3333, + "volume": 59739450.0 + }, + { + "time": 1641254400, + "open": 400.3267, + "high": 403.4033, + "low": 374.35, + "close": 380.0, + "volume": 55300041.0 + }, + { + "time": 1641340800, + "open": 377.3833, + "high": 390.1133, + "low": 357.9333, + "close": 361.1667, + "volume": 45923958.0 + }, + { + "time": 1641427200, + "open": 362.0, + "high": 362.6667, + "low": 340.1667, + "close": 358.67, + "volume": 50920653.0 + }, + { + "time": 1641513600, + "open": 355.57, + "high": 367.0, + "low": 336.6667, + "close": 342.3, + "volume": 48486174.0 + }, + { + "time": 1641772800, + "open": 341.0533, + "high": 357.7833, + "low": 326.6667, + "close": 355.93, + "volume": 50742453.0 + }, + { + "time": 1641859200, + "open": 356.2667, + "high": 359.7533, + "low": 346.2733, + "close": 353.0, + "volume": 37721568.0 + }, + { + "time": 1641945600, + "open": 352.9667, + "high": 371.6133, + "low": 352.6667, + "close": 369.6667, + "volume": 47720787.0 + }, + { + "time": 1642032000, + "open": 368.0867, + "high": 371.8667, + "low": 341.9633, + "close": 341.9633, + "volume": 56243877.0 + }, + { + "time": 1642118400, + "open": 346.7333, + "high": 350.6667, + "low": 332.53, + "close": 348.6667, + "volume": 40407246.0 + }, + { + "time": 1642464000, + "open": 344.0, + "high": 356.93, + "low": 338.6867, + "close": 341.67, + "volume": 37357950.0 + }, + { + "time": 1642550400, + "open": 341.57, + "high": 351.5567, + "low": 329.7, + "close": 333.0, + "volume": 41641410.0 + }, + { + "time": 1642636800, + "open": 337.0, + "high": 347.22, + "low": 327.4, + "close": 329.9667, + "volume": 40021428.0 + }, + { + "time": 1642723200, + "open": 331.9567, + "high": 334.85, + "low": 311.6667, + "close": 312.0, + "volume": 54432708.0 + }, + { + "time": 1642982400, + "open": 317.2233, + "high": 317.45, + "low": 283.8233, + "close": 303.3333, + "volume": 83257308.0 + }, + { + "time": 1643068800, + "open": 301.6667, + "high": 317.0, + "low": 298.1067, + "close": 307.28, + "volume": 47386206.0 + }, + { + "time": 1643155200, + "open": 313.4, + "high": 329.23, + "low": 293.29, + "close": 309.9667, + "volume": 59069976.0 + }, + { + "time": 1643241600, + "open": 310.4333, + "high": 316.46, + "low": 273.5967, + "close": 279.0, + "volume": 78316839.0 + }, + { + "time": 1643328000, + "open": 279.3033, + "high": 285.8333, + "low": 264.0033, + "close": 284.0, + "volume": 73422666.0 + }, + { + "time": 1643587200, + "open": 286.8633, + "high": 313.3333, + "low": 283.7, + "close": 312.6667, + "volume": 60666141.0 + }, + { + "time": 1643673600, + "open": 315.01, + "high": 315.6667, + "low": 301.6667, + "close": 312.8333, + "volume": 40608771.0 + }, + { + "time": 1643760000, + "open": 313.3333, + "high": 315.0, + "low": 293.5333, + "close": 293.6667, + "volume": 37054980.0 + }, + { + "time": 1643846400, + "open": 296.6733, + "high": 312.3333, + "low": 291.76, + "close": 302.6, + "volume": 45404325.0 + }, + { + "time": 1643932800, + "open": 302.7033, + "high": 312.1667, + "low": 293.7233, + "close": 308.6667, + "volume": 41669502.0 + }, + { + "time": 1644192000, + "open": 308.5967, + "high": 315.9233, + "low": 300.9, + "close": 303.17, + "volume": 34018512.0 + }, + { + "time": 1644278400, + "open": 303.6667, + "high": 308.7633, + "low": 298.2667, + "close": 308.0, + "volume": 28583517.0 + }, + { + "time": 1644364800, + "open": 309.3367, + "high": 315.4233, + "low": 306.6667, + "close": 310.0, + "volume": 30368949.0 + }, + { + "time": 1644451200, + "open": 309.48, + "high": 314.6033, + "low": 298.9, + "close": 300.0667, + "volume": 37176897.0 + }, + { + "time": 1644537600, + "open": 299.9967, + "high": 305.32, + "low": 283.5667, + "close": 285.6667, + "volume": 44144829.0 + }, + { + "time": 1644796800, + "open": 281.3333, + "high": 299.6267, + "low": 277.8867, + "close": 293.3333, + "volume": 38758287.0 + }, + { + "time": 1644883200, + "open": 299.33, + "high": 307.6667, + "low": 297.79, + "close": 306.0, + "volume": 32850735.0 + }, + { + "time": 1644969600, + "open": 306.0, + "high": 309.4967, + "low": 300.4033, + "close": 306.2667, + "volume": 28010172.0 + }, + { + "time": 1645056000, + "open": 304.6667, + "high": 307.03, + "low": 290.33, + "close": 290.4033, + "volume": 30422382.0 + }, + { + "time": 1645142400, + "open": 294.7067, + "high": 296.0633, + "low": 279.2033, + "close": 284.0, + "volume": 40040778.0 + }, + { + "time": 1645488000, + "open": 276.5133, + "high": 285.58, + "low": 267.0333, + "close": 277.0, + "volume": 47556666.0 + }, + { + "time": 1645574400, + "open": 280.0, + "high": 281.5967, + "low": 249.3333, + "close": 249.3333, + "volume": 53536245.0 + }, + { + "time": 1645660800, + "open": 241.2133, + "high": 267.6667, + "low": 230.54, + "close": 263.8333, + "volume": 81729354.0 + }, + { + "time": 1645747200, + "open": 266.0633, + "high": 275.5, + "low": 260.8, + "close": 270.3667, + "volume": 43164210.0 + }, + { + "time": 1646006400, + "open": 263.49, + "high": 292.2867, + "low": 262.33, + "close": 290.8867, + "volume": 59203599.0 + }, + { + "time": 1646092800, + "open": 289.3333, + "high": 296.6267, + "low": 283.6667, + "close": 288.1967, + "volume": 43701348.0 + }, + { + "time": 1646179200, + "open": 286.6667, + "high": 295.4933, + "low": 281.4233, + "close": 290.2, + "volume": 41124426.0 + }, + { + "time": 1646265600, + "open": 290.0, + "high": 295.4933, + "low": 272.8333, + "close": 273.1833, + "volume": 34345506.0 + }, + { + "time": 1646352000, + "open": 277.0667, + "high": 285.2167, + "low": 275.0533, + "close": 281.3333, + "volume": 39490536.0 + }, + { + "time": 1646611200, + "open": 276.0, + "high": 288.7133, + "low": 264.4067, + "close": 266.6633, + "volume": 41203665.0 + }, + { + "time": 1646697600, + "open": 268.3333, + "high": 283.33, + "low": 260.7233, + "close": 275.5833, + "volume": 47495559.0 + }, + { + "time": 1646784000, + "open": 278.7133, + "high": 288.2133, + "low": 274.8, + "close": 285.3333, + "volume": 34494873.0 + }, + { + "time": 1646870400, + "open": 283.3333, + "high": 284.8167, + "low": 270.12, + "close": 277.33, + "volume": 33274095.0 + }, + { + "time": 1646956800, + "open": 279.6667, + "high": 285.3333, + "low": 264.12, + "close": 264.6433, + "volume": 37045917.0 + }, + { + "time": 1647216000, + "open": 265.1167, + "high": 267.69, + "low": 252.0133, + "close": 259.8333, + "volume": 39402378.0 + }, + { + "time": 1647302400, + "open": 256.0667, + "high": 268.5233, + "low": 251.6667, + "close": 267.2833, + "volume": 37676769.0 + }, + { + "time": 1647388800, + "open": 268.6667, + "high": 282.6667, + "low": 267.2967, + "close": 279.6667, + "volume": 46220172.0 + }, + { + "time": 1647475200, + "open": 281.0, + "high": 291.6667, + "low": 275.2367, + "close": 288.5, + "volume": 37029492.0 + }, + { + "time": 1647561600, + "open": 288.0267, + "high": 302.6167, + "low": 287.5033, + "close": 302.5433, + "volume": 61952121.0 + }, + { + "time": 1647820800, + "open": 302.3333, + "high": 314.2833, + "low": 299.2233, + "close": 306.09, + "volume": 46753863.0 + }, + { + "time": 1647907200, + "open": 306.2967, + "high": 332.62, + "low": 306.2967, + "close": 330.7433, + "volume": 62365338.0 + }, + { + "time": 1647993600, + "open": 331.0, + "high": 346.9, + "low": 325.37, + "close": 332.85, + "volume": 68725848.0 + }, + { + "time": 1648080000, + "open": 334.34, + "high": 341.4967, + "low": 329.6, + "close": 336.5067, + "volume": 39163167.0 + }, + { + "time": 1648166400, + "open": 337.3333, + "high": 340.6, + "low": 332.44, + "close": 337.05, + "volume": 36286704.0 + }, + { + "time": 1648425600, + "open": 335.3333, + "high": 365.96, + "low": 334.0733, + "close": 365.2667, + "volume": 56465760.0 + }, + { + "time": 1648512000, + "open": 366.6133, + "high": 374.8667, + "low": 357.7033, + "close": 364.6867, + "volume": 39172281.0 + }, + { + "time": 1648598400, + "open": 364.3233, + "high": 371.3167, + "low": 361.3333, + "close": 365.2933, + "volume": 33436668.0 + }, + { + "time": 1648684800, + "open": 367.1933, + "high": 368.3333, + "low": 358.3333, + "close": 358.5, + "volume": 26907888.0 + }, + { + "time": 1648771200, + "open": 360.0333, + "high": 364.9167, + "low": 355.5467, + "close": 363.6667, + "volume": 29717751.0 + }, + { + "time": 1649030400, + "open": 364.3333, + "high": 383.3033, + "low": 357.51, + "close": 380.0, + "volume": 46320690.0 + }, + { + "time": 1649116800, + "open": 380.5367, + "high": 384.29, + "low": 361.45, + "close": 362.6667, + "volume": 43596441.0 + }, + { + "time": 1649203200, + "open": 362.0, + "high": 364.6633, + "low": 342.5667, + "close": 347.6667, + "volume": 50559519.0 + }, + { + "time": 1649289600, + "open": 351.8133, + "high": 358.8633, + "low": 340.5133, + "close": 355.5, + "volume": 44438853.0 + }, + { + "time": 1649376000, + "open": 357.67, + "high": 359.05, + "low": 340.3433, + "close": 340.6667, + "volume": 30800952.0 + }, + { + "time": 1649635200, + "open": 336.51, + "high": 337.0, + "low": 320.6667, + "close": 320.6667, + "volume": 32727522.0 + }, + { + "time": 1649721600, + "open": 322.7767, + "high": 340.4, + "low": 320.9667, + "close": 330.5933, + "volume": 38553336.0 + }, + { + "time": 1649808000, + "open": 333.2267, + "high": 342.08, + "low": 324.3633, + "close": 341.0, + "volume": 31495641.0 + }, + { + "time": 1649894400, + "open": 342.0667, + "high": 343.3433, + "low": 327.3967, + "close": 329.8167, + "volume": 32337318.0 + }, + { + "time": 1650240000, + "open": 329.0833, + "high": 338.3067, + "low": 324.47, + "close": 337.6733, + "volume": 28905387.0 + }, + { + "time": 1650326400, + "open": 336.06, + "high": 344.98, + "low": 331.7733, + "close": 339.3333, + "volume": 27618669.0 + }, + { + "time": 1650412800, + "open": 338.4133, + "high": 348.9967, + "low": 324.4967, + "close": 343.7267, + "volume": 37622106.0 + }, + { + "time": 1650499200, + "open": 343.87, + "high": 364.0733, + "low": 332.1367, + "close": 337.1333, + "volume": 57751845.0 + }, + { + "time": 1650585600, + "open": 337.1333, + "high": 344.95, + "low": 331.3333, + "close": 333.4333, + "volume": 37934373.0 + }, + { + "time": 1650844800, + "open": 333.4, + "high": 336.2067, + "low": 320.3333, + "close": 332.7667, + "volume": 37647819.0 + }, + { + "time": 1650931200, + "open": 330.0, + "high": 334.3333, + "low": 287.1667, + "close": 291.67, + "volume": 74006871.0 + }, + { + "time": 1651017600, + "open": 298.3333, + "high": 306.0, + "low": 292.4533, + "close": 298.6667, + "volume": 38960505.0 + }, + { + "time": 1651104000, + "open": 300.4967, + "high": 305.0, + "low": 273.9, + "close": 284.8333, + "volume": 67646268.0 + }, + { + "time": 1651190400, + "open": 299.6667, + "high": 311.4667, + "low": 289.3333, + "close": 292.5, + "volume": 48944871.0 + }, + { + "time": 1651449600, + "open": 296.1567, + "high": 303.25, + "low": 281.3333, + "close": 302.3333, + "volume": 42804726.0 + }, + { + "time": 1651536000, + "open": 301.0067, + "high": 308.0267, + "low": 296.1967, + "close": 302.3333, + "volume": 37183326.0 + }, + { + "time": 1651622400, + "open": 302.3333, + "high": 318.5, + "low": 295.0933, + "close": 316.02, + "volume": 49005195.0 + }, + { + "time": 1651708800, + "open": 314.3, + "high": 316.91, + "low": 285.9, + "close": 292.6667, + "volume": 52158030.0 + }, + { + "time": 1651795200, + "open": 291.9667, + "high": 296.6267, + "low": 281.0333, + "close": 288.0, + "volume": 41014902.0 + }, + { + "time": 1652054400, + "open": 284.4133, + "high": 284.4133, + "low": 260.3833, + "close": 262.2333, + "volume": 49423431.0 + }, + { + "time": 1652140800, + "open": 269.3333, + "high": 275.12, + "low": 258.0833, + "close": 265.9167, + "volume": 48430737.0 + }, + { + "time": 1652227200, + "open": 271.0133, + "high": 272.6667, + "low": 242.4, + "close": 244.7, + "volume": 53134143.0 + }, + { + "time": 1652313600, + "open": 243.8633, + "high": 253.22, + "low": 226.6667, + "close": 247.0, + "volume": 85963638.0 + }, + { + "time": 1652400000, + "open": 249.6667, + "high": 262.45, + "low": 249.6667, + "close": 258.5667, + "volume": 55949757.0 + }, + { + "time": 1652659200, + "open": 255.0, + "high": 258.09, + "low": 239.6933, + "close": 240.74, + "volume": 52901019.0 + }, + { + "time": 1652745600, + "open": 248.49, + "high": 254.8267, + "low": 242.95, + "close": 253.6833, + "volume": 47844489.0 + }, + { + "time": 1652832000, + "open": 250.54, + "high": 253.5, + "low": 233.3333, + "close": 233.3333, + "volume": 52252599.0 + }, + { + "time": 1652918400, + "open": 232.9367, + "high": 244.6667, + "low": 229.8333, + "close": 238.3333, + "volume": 55037787.0 + }, + { + "time": 1653004800, + "open": 242.5967, + "high": 243.52, + "low": 211.0, + "close": 221.8333, + "volume": 85888587.0 + }, + { + "time": 1653264000, + "open": 227.5267, + "high": 228.0, + "low": 212.6867, + "close": 219.0, + "volume": 51265281.0 + }, + { + "time": 1653350400, + "open": 217.8867, + "high": 219.6667, + "low": 206.8567, + "close": 211.3333, + "volume": 52180665.0 + }, + { + "time": 1653436800, + "open": 212.2567, + "high": 223.1067, + "low": 205.81, + "close": 218.4333, + "volume": 58653768.0 + }, + { + "time": 1653523200, + "open": 221.76, + "high": 239.5567, + "low": 217.8867, + "close": 237.6667, + "volume": 66064707.0 + }, + { + "time": 1653609600, + "open": 236.93, + "high": 255.9667, + "low": 235.81, + "close": 255.0833, + "volume": 56435403.0 + }, + { + "time": 1653955200, + "open": 253.9067, + "high": 259.6, + "low": 244.7433, + "close": 253.23, + "volume": 64379274.0 + }, + { + "time": 1654041600, + "open": 253.2533, + "high": 257.3267, + "low": 243.64, + "close": 244.6667, + "volume": 47765442.0 + }, + { + "time": 1654128000, + "open": 248.4833, + "high": 264.21, + "low": 242.0667, + "close": 261.0667, + "volume": 59789013.0 + }, + { + "time": 1654214400, + "open": 251.3333, + "high": 260.3333, + "low": 233.3333, + "close": 233.43, + "volume": 70047213.0 + }, + { + "time": 1654473600, + "open": 241.6667, + "high": 245.0, + "low": 234.35, + "close": 237.8367, + "volume": 52758504.0 + }, + { + "time": 1654560000, + "open": 236.7667, + "high": 239.9967, + "low": 230.0933, + "close": 238.3333, + "volume": 46067151.0 + }, + { + "time": 1654646400, + "open": 237.6, + "high": 249.9633, + "low": 237.6, + "close": 242.7667, + "volume": 47875032.0 + }, + { + "time": 1654732800, + "open": 248.1567, + "high": 255.5467, + "low": 239.3267, + "close": 239.5033, + "volume": 60465090.0 + }, + { + "time": 1654819200, + "open": 241.3333, + "high": 244.1833, + "low": 227.9133, + "close": 236.4167, + "volume": 60624126.0 + }, + { + "time": 1655078400, + "open": 229.63, + "high": 232.33, + "low": 214.2167, + "close": 214.4333, + "volume": 61920003.0 + }, + { + "time": 1655164800, + "open": 221.0, + "high": 226.33, + "low": 211.7367, + "close": 223.1167, + "volume": 63877368.0 + }, + { + "time": 1655251200, + "open": 222.6667, + "high": 235.6633, + "low": 218.15, + "close": 235.4133, + "volume": 76913121.0 + }, + { + "time": 1655337600, + "open": 227.64, + "high": 231.9967, + "low": 208.6933, + "close": 211.8333, + "volume": 65683083.0 + }, + { + "time": 1655424000, + "open": 215.3333, + "high": 220.97, + "low": 211.48, + "close": 216.1, + "volume": 61196430.0 + }, + { + "time": 1655769600, + "open": 222.3333, + "high": 243.58, + "low": 219.6833, + "close": 237.5167, + "volume": 79742895.0 + }, + { + "time": 1655856000, + "open": 229.8633, + "high": 246.8233, + "low": 228.3733, + "close": 234.1833, + "volume": 67988037.0 + }, + { + "time": 1655942400, + "open": 234.3333, + "high": 241.1667, + "low": 228.6367, + "close": 234.2333, + "volume": 69978438.0 + }, + { + "time": 1656028800, + "open": 238.25, + "high": 246.0667, + "low": 235.5533, + "close": 245.4667, + "volume": 62441367.0 + }, + { + "time": 1656288000, + "open": 248.9433, + "high": 252.07, + "low": 242.5633, + "close": 245.27, + "volume": 56900979.0 + }, + { + "time": 1656374400, + "open": 245.3333, + "high": 249.97, + "low": 231.0067, + "close": 232.3, + "volume": 58576794.0 + }, + { + "time": 1656460800, + "open": 232.3333, + "high": 233.3333, + "low": 222.2733, + "close": 227.4667, + "volume": 53105913.0 + }, + { + "time": 1656547200, + "open": 223.3, + "high": 229.4567, + "low": 218.8633, + "close": 224.3333, + "volume": 61716366.0 + }, + { + "time": 1656633600, + "open": 222.0, + "high": 230.23, + "low": 220.8367, + "close": 226.4867, + "volume": 48110886.0 + }, + { + "time": 1656979200, + "open": 228.3, + "high": 233.9933, + "low": 216.1667, + "close": 232.9733, + "volume": 54336840.0 + }, + { + "time": 1657065600, + "open": 232.9333, + "high": 234.5633, + "low": 227.1867, + "close": 231.6667, + "volume": 45489657.0 + }, + { + "time": 1657152000, + "open": 233.6333, + "high": 245.3633, + "low": 232.21, + "close": 243.6667, + "volume": 52164897.0 + }, + { + "time": 1657238400, + "open": 242.7667, + "high": 259.3333, + "low": 240.73, + "close": 256.4667, + "volume": 66933489.0 + }, + { + "time": 1657497600, + "open": 250.97, + "high": 254.6, + "low": 233.6267, + "close": 234.0, + "volume": 61863519.0 + }, + { + "time": 1657584000, + "open": 231.8467, + "high": 239.7733, + "low": 228.3667, + "close": 232.1, + "volume": 56026785.0 + }, + { + "time": 1657670400, + "open": 232.9, + "high": 242.06, + "low": 223.9033, + "close": 234.6833, + "volume": 62291388.0 + }, + { + "time": 1657756800, + "open": 236.0467, + "high": 239.48, + "low": 229.3333, + "close": 239.48, + "volume": 50364726.0 + }, + { + "time": 1657843200, + "open": 237.3333, + "high": 243.6233, + "low": 236.4667, + "close": 239.6633, + "volume": 40794570.0 + }, + { + "time": 1658102400, + "open": 244.0033, + "high": 250.5167, + "low": 239.6033, + "close": 241.3367, + "volume": 52663089.0 + }, + { + "time": 1658188800, + "open": 242.1333, + "high": 247.8967, + "low": 236.9767, + "close": 247.1467, + "volume": 51763212.0 + }, + { + "time": 1658275200, + "open": 247.0633, + "high": 259.3333, + "low": 243.48, + "close": 251.1, + "volume": 54030141.0 + }, + { + "time": 1658361600, + "open": 251.87, + "high": 273.2667, + "low": 249.3333, + "close": 269.75, + "volume": 86439174.0 + }, + { + "time": 1658448000, + "open": 269.2767, + "high": 280.7867, + "low": 268.6733, + "close": 271.6667, + "volume": 60837000.0 + }, + { + "time": 1658707200, + "open": 272.3167, + "high": 276.5433, + "low": 266.67, + "close": 266.8333, + "volume": 39659769.0 + }, + { + "time": 1658793600, + "open": 267.0967, + "high": 268.0, + "low": 256.2633, + "close": 262.3333, + "volume": 42541404.0 + }, + { + "time": 1658880000, + "open": 263.3333, + "high": 275.9267, + "low": 258.86, + "close": 273.58, + "volume": 55620006.0 + }, + { + "time": 1658966400, + "open": 273.3333, + "high": 284.5633, + "low": 271.6667, + "close": 284.3333, + "volume": 53337165.0 + }, + { + "time": 1659052800, + "open": 284.1767, + "high": 298.32, + "low": 279.1, + "close": 296.6, + "volume": 58007934.0 + }, + { + "time": 1659312000, + "open": 296.6667, + "high": 311.88, + "low": 293.3333, + "close": 298.0, + "volume": 71199081.0 + }, + { + "time": 1659398400, + "open": 294.1133, + "high": 307.8333, + "low": 291.46, + "close": 301.3333, + "volume": 59609352.0 + }, + { + "time": 1659484800, + "open": 301.3667, + "high": 309.55, + "low": 301.15, + "close": 307.7467, + "volume": 49034241.0 + }, + { + "time": 1659571200, + "open": 308.8467, + "high": 313.6067, + "low": 305.0, + "close": 309.1667, + "volume": 44030208.0 + }, + { + "time": 1659657600, + "open": 312.2233, + "high": 312.2233, + "low": 285.5433, + "close": 287.3333, + "volume": 67475064.0 + }, + { + "time": 1659916800, + "open": 294.3333, + "high": 305.19, + "low": 289.0833, + "close": 292.8, + "volume": 59549943.0 + }, + { + "time": 1660003200, + "open": 295.2467, + "high": 295.7233, + "low": 279.3533, + "close": 283.8, + "volume": 52285851.0 + }, + { + "time": 1660089600, + "open": 286.2033, + "high": 297.9867, + "low": 283.3333, + "close": 293.3333, + "volume": 57884541.0 + }, + { + "time": 1660176000, + "open": 295.1367, + "high": 298.2367, + "low": 285.8333, + "close": 288.1, + "volume": 43055865.0 + }, + { + "time": 1660262400, + "open": 290.3333, + "high": 301.5667, + "low": 285.0333, + "close": 301.3333, + "volume": 49332492.0 + }, + { + "time": 1660521600, + "open": 298.39, + "high": 313.1333, + "low": 297.7367, + "close": 309.6667, + "volume": 54710223.0 + }, + { + "time": 1660608000, + "open": 308.5233, + "high": 314.6667, + "low": 302.8833, + "close": 306.4, + "volume": 55540302.0 + }, + { + "time": 1660694400, + "open": 306.0, + "high": 309.6567, + "low": 300.0333, + "close": 303.0, + "volume": 43278504.0 + }, + { + "time": 1660780800, + "open": 303.0267, + "high": 307.5033, + "low": 301.8533, + "close": 303.1033, + "volume": 28342434.0 + }, + { + "time": 1660867200, + "open": 301.9767, + "high": 303.63, + "low": 292.5, + "close": 295.2667, + "volume": 37094298.0 + }, + { + "time": 1661126400, + "open": 291.6667, + "high": 294.8333, + "low": 286.2967, + "close": 290.5833, + "volume": 33285654.0 + }, + { + "time": 1661212800, + "open": 290.0, + "high": 298.8267, + "low": 287.9233, + "close": 296.5333, + "volume": 39575148.0 + }, + { + "time": 1661299200, + "open": 295.76, + "high": 308.94, + "low": 295.5, + "close": 306.6, + "volume": 11374931.0 + }, + { + "time": 1661385600, + "open": 307.95, + "high": 307.95, + "low": 291.6, + "close": 295.7, + "volume": 37975857.0 + }, + { + "time": 1661472000, + "open": 296.77, + "high": 302.0, + "low": 284.3, + "close": 284.5, + "volume": 41690512.0 + }, + { + "time": 1661731200, + "open": 281.91, + "high": 288.09, + "low": 280.0, + "close": 285.7, + "volume": 31229778.0 + }, + { + "time": 1661817600, + "open": 289.38, + "high": 292.5, + "low": 272.65, + "close": 278.12, + "volume": 36111921.0 + }, + { + "time": 1661904000, + "open": 279.44, + "high": 281.25, + "low": 271.81, + "close": 272.01, + "volume": 36997072.0 + }, + { + "time": 1661990400, + "open": 271.57, + "high": 280.34, + "low": 266.15, + "close": 279.7, + "volume": 39657641.0 + }, + { + "time": 1662076800, + "open": 279.1, + "high": 282.57, + "low": 269.08, + "close": 269.3, + "volume": 36972502.0 + }, + { + "time": 1662422400, + "open": 276.14, + "high": 276.14, + "low": 265.74, + "close": 273.81, + "volume": 39823707.0 + }, + { + "time": 1662508800, + "open": 274.75, + "high": 283.95, + "low": 272.21, + "close": 283.45, + "volume": 36023268.0 + }, + { + "time": 1662595200, + "open": 282.87, + "high": 290.0, + "low": 279.78, + "close": 290.0, + "volume": 40320418.0 + }, + { + "time": 1662681600, + "open": 291.82, + "high": 299.95, + "low": 289.98, + "close": 298.4, + "volume": 40244272.0 + }, + { + "time": 1662940800, + "open": 300.0, + "high": 305.49, + "low": 298.01, + "close": 304.65, + "volume": 35331535.0 + }, + { + "time": 1663027200, + "open": 305.04, + "high": 307.0, + "low": 290.4, + "close": 291.6, + "volume": 47611133.0 + }, + { + "time": 1663113600, + "open": 292.6, + "high": 306.0, + "low": 289.3, + "close": 304.25, + "volume": 51667238.0 + }, + { + "time": 1663200000, + "open": 304.53, + "high": 309.12, + "low": 299.5, + "close": 300.19, + "volume": 48241149.0 + }, + { + "time": 1663286400, + "open": 299.65, + "high": 304.01, + "low": 295.6, + "close": 303.9, + "volume": 70185787.0 + }, + { + "time": 1663545600, + "open": 301.23, + "high": 309.84, + "low": 297.8, + "close": 309.44, + "volume": 44466573.0 + }, + { + "time": 1663632000, + "open": 308.4, + "high": 313.33, + "low": 305.58, + "close": 307.4, + "volume": 46760937.0 + }, + { + "time": 1663718400, + "open": 306.21, + "high": 313.8, + "low": 299.0, + "close": 299.3, + "volume": 46208549.0 + }, + { + "time": 1663804800, + "open": 301.03, + "high": 304.5, + "low": 285.82, + "close": 288.02, + "volume": 50406357.0 + }, + { + "time": 1663891200, + "open": 287.78, + "high": 288.03, + "low": 272.82, + "close": 275.75, + "volume": 44530343.0 + }, + { + "time": 1664150400, + "open": 275.33, + "high": 284.09, + "low": 269.8, + "close": 276.4, + "volume": 40779663.0 + }, + { + "time": 1664236800, + "open": 282.78, + "high": 288.67, + "low": 276.7, + "close": 287.1, + "volume": 45446685.0 + }, + { + "time": 1664323200, + "open": 281.45, + "high": 289.0, + "low": 274.77, + "close": 286.3, + "volume": 40051777.0 + }, + { + "time": 1664409600, + "open": 283.0, + "high": 288.53, + "low": 265.81, + "close": 269.21, + "volume": 56781305.0 + }, + { + "time": 1664496000, + "open": 273.8, + "high": 275.57, + "low": 262.47, + "close": 266.05, + "volume": 49037220.0 + }, + { + "time": 1664755200, + "open": 256.68, + "high": 260.0, + "low": 241.01, + "close": 243.7, + "volume": 72670646.0 + }, + { + "time": 1664841600, + "open": 249.43, + "high": 257.5, + "low": 242.01, + "close": 247.7, + "volume": 82343604.0 + }, + { + "time": 1664928000, + "open": 247.24, + "high": 248.09, + "low": 233.27, + "close": 240.99, + "volume": 65285626.0 + }, + { + "time": 1665014400, + "open": 241.8, + "high": 244.58, + "low": 235.35, + "close": 236.7, + "volume": 51843790.0 + }, + { + "time": 1665100800, + "open": 237.83, + "high": 239.7, + "low": 221.75, + "close": 223.8, + "volume": 62463602.0 + }, + { + "time": 1665360000, + "open": 223.46, + "high": 226.99, + "low": 218.0, + "close": 223.0, + "volume": 51669555.0 + }, + { + "time": 1665446400, + "open": 221.36, + "high": 225.75, + "low": 215.0, + "close": 215.2, + "volume": 59920745.0 + }, + { + "time": 1665532800, + "open": 218.4, + "high": 219.69, + "low": 211.51, + "close": 216.8, + "volume": 51834612.0 + }, + { + "time": 1665619200, + "open": 216.43, + "high": 222.99, + "low": 206.22, + "close": 220.51, + "volume": 70560950.0 + }, + { + "time": 1665705600, + "open": 223.4, + "high": 226.26, + "low": 203.5, + "close": 204.43, + "volume": 72262028.0 + }, + { + "time": 1665964800, + "open": 210.32, + "high": 222.87, + "low": 204.99, + "close": 222.75, + "volume": 64099875.0 + }, + { + "time": 1666051200, + "open": 225.9, + "high": 229.82, + "low": 217.25, + "close": 224.25, + "volume": 61738061.0 + }, + { + "time": 1666137600, + "open": 222.09, + "high": 228.29, + "low": 206.23, + "close": 208.16, + "volume": 50898030.0 + }, + { + "time": 1666224000, + "open": 209.74, + "high": 215.55, + "low": 202.0, + "close": 206.6, + "volume": 92683950.0 + }, + { + "time": 1666310400, + "open": 206.08, + "high": 215.0, + "low": 203.0, + "close": 214.55, + "volume": 58617759.0 + }, + { + "time": 1666569600, + "open": 213.4, + "high": 216.66, + "low": 198.58, + "close": 208.8, + "volume": 78968509.0 + }, + { + "time": 1666656000, + "open": 209.5, + "high": 224.35, + "low": 208.0, + "close": 217.12, + "volume": 79670683.0 + }, + { + "time": 1666742400, + "open": 219.56, + "high": 230.6, + "low": 218.2, + "close": 226.5, + "volume": 68562598.0 + }, + { + "time": 1666828800, + "open": 226.5, + "high": 233.81, + "low": 217.55, + "close": 223.38, + "volume": 49680215.0 + }, + { + "time": 1666915200, + "open": 221.0, + "high": 228.86, + "low": 215.0, + "close": 228.35, + "volume": 56109870.0 + }, + { + "time": 1667174400, + "open": 228.79, + "high": 229.85, + "low": 221.94, + "close": 227.59, + "volume": 49891734.0 + }, + { + "time": 1667260800, + "open": 229.19, + "high": 237.4, + "low": 226.51, + "close": 227.0, + "volume": 49775576.0 + }, + { + "time": 1667347200, + "open": 229.0, + "high": 229.37, + "low": 213.44, + "close": 215.87, + "volume": 49853305.0 + }, + { + "time": 1667433600, + "open": 216.74, + "high": 221.2, + "low": 210.14, + "close": 214.48, + "volume": 44646949.0 + }, + { + "time": 1667520000, + "open": 220.79, + "high": 223.8, + "low": 203.08, + "close": 209.05, + "volume": 80308864.0 + }, + { + "time": 1667779200, + "open": 210.6, + "high": 210.6, + "low": 196.5, + "close": 197.3, + "volume": 73397622.0 + }, + { + "time": 1667865600, + "open": 198.58, + "high": 198.93, + "low": 186.75, + "close": 190.0, + "volume": 105514188.0 + }, + { + "time": 1667952000, + "open": 194.0, + "high": 195.89, + "low": 175.51, + "close": 176.5, + "volume": 102644299.0 + }, + { + "time": 1668038400, + "open": 178.69, + "high": 193.64, + "low": 172.01, + "close": 191.47, + "volume": 110460759.0 + }, + { + "time": 1668124800, + "open": 194.48, + "high": 196.52, + "low": 182.59, + "close": 195.65, + "volume": 95853553.0 + }, + { + "time": 1668384000, + "open": 195.04, + "high": 195.95, + "low": 186.34, + "close": 191.25, + "volume": 77319752.0 + }, + { + "time": 1668470400, + "open": 194.53, + "high": 200.83, + "low": 191.42, + "close": 193.3, + "volume": 74960504.0 + }, + { + "time": 1668556800, + "open": 196.22, + "high": 196.67, + "low": 184.05, + "close": 187.8, + "volume": 54096082.0 + }, + { + "time": 1668643200, + "open": 189.18, + "high": 189.18, + "low": 180.9, + "close": 183.62, + "volume": 52118517.0 + }, + { + "time": 1668729600, + "open": 183.0, + "high": 185.83, + "low": 176.55, + "close": 179.3, + "volume": 61891438.0 + }, + { + "time": 1668988800, + "open": 178.6, + "high": 179.66, + "low": 167.54, + "close": 167.83, + "volume": 73810772.0 + }, + { + "time": 1669075200, + "open": 167.67, + "high": 171.35, + "low": 165.38, + "close": 170.42, + "volume": 64763513.0 + }, + { + "time": 1669161600, + "open": 173.11, + "high": 184.88, + "low": 170.51, + "close": 184.8, + "volume": 90934248.0 + }, + { + "time": 1669334400, + "open": 186.07, + "high": 188.5, + "low": 180.63, + "close": 182.89, + "volume": 41660711.0 + }, + { + "time": 1669593600, + "open": 181.59, + "high": 188.5, + "low": 178.0, + "close": 183.9, + "volume": 78408629.0 + }, + { + "time": 1669680000, + "open": 185.11, + "high": 186.88, + "low": 178.75, + "close": 180.4, + "volume": 68205280.0 + }, + { + "time": 1669766400, + "open": 182.42, + "high": 196.6, + "low": 180.63, + "close": 195.9, + "volume": 92743086.0 + }, + { + "time": 1669852800, + "open": 194.24, + "high": 198.92, + "low": 191.8, + "close": 193.93, + "volume": 65844119.0 + }, + { + "time": 1669939200, + "open": 194.07, + "high": 196.9, + "low": 189.55, + "close": 194.2, + "volume": 60902399.0 + }, + { + "time": 1670198400, + "open": 192.95, + "high": 194.3, + "low": 180.55, + "close": 182.55, + "volume": 75912778.0 + }, + { + "time": 1670284800, + "open": 182.89, + "high": 183.82, + "low": 175.33, + "close": 179.05, + "volume": 76040783.0 + }, + { + "time": 1670371200, + "open": 179.33, + "high": 179.69, + "low": 172.21, + "close": 173.42, + "volume": 69718106.0 + }, + { + "time": 1670457600, + "open": 174.14, + "high": 175.7, + "low": 169.06, + "close": 173.45, + "volume": 80762690.0 + }, + { + "time": 1670544000, + "open": 174.92, + "high": 182.5, + "low": 172.3, + "close": 178.5, + "volume": 88081017.0 + }, + { + "time": 1670803200, + "open": 178.45, + "high": 179.56, + "low": 167.52, + "close": 168.02, + "volume": 90494485.0 + }, + { + "time": 1670889600, + "open": 169.66, + "high": 179.14, + "low": 156.91, + "close": 161.3, + "volume": 135812432.0 + }, + { + "time": 1670976000, + "open": 161.75, + "high": 162.25, + "low": 155.31, + "close": 156.9, + "volume": 113815160.0 + }, + { + "time": 1671062400, + "open": 155.75, + "high": 160.93, + "low": 151.33, + "close": 158.72, + "volume": 101035229.0 + }, + { + "time": 1671148800, + "open": 156.46, + "high": 160.99, + "low": 149.0, + "close": 149.06, + "volume": 113741284.0 + }, + { + "time": 1671408000, + "open": 156.57, + "high": 158.2, + "low": 145.82, + "close": 150.53, + "volume": 118190710.0 + }, + { + "time": 1671494400, + "open": 148.0, + "high": 151.57, + "low": 137.37, + "close": 139.07, + "volume": 131775303.0 + }, + { + "time": 1671580800, + "open": 141.0, + "high": 141.5, + "low": 135.91, + "close": 138.37, + "volume": 123736453.0 + }, + { + "time": 1671667200, + "open": 138.5, + "high": 139.48, + "low": 122.26, + "close": 126.85, + "volume": 177342265.0 + }, + { + "time": 1671753600, + "open": 127.07, + "high": 128.62, + "low": 121.02, + "close": 122.2, + "volume": 141626063.0 + }, + { + "time": 1672099200, + "open": 123.88, + "high": 125.0, + "low": 106.6, + "close": 106.69, + "volume": 175910731.0 + }, + { + "time": 1672185600, + "open": 107.84, + "high": 116.27, + "low": 104.22, + "close": 114.0, + "volume": 186100201.0 + }, + { + "time": 1672272000, + "open": 115.0, + "high": 123.57, + "low": 114.47, + "close": 122.84, + "volume": 189503721.0 + }, + { + "time": 1672358400, + "open": 122.46, + "high": 124.48, + "low": 118.51, + "close": 123.5, + "volume": 136672797.0 + }, + { + "time": 1672704000, + "open": 120.02, + "high": 121.9, + "low": 104.64, + "close": 107.0, + "volume": 191557167.0 + }, + { + "time": 1672790400, + "open": 108.88, + "high": 114.59, + "low": 107.28, + "close": 113.66, + "volume": 153862552.0 + }, + { + "time": 1672876800, + "open": 112.5, + "high": 114.87, + "low": 107.16, + "close": 110.35, + "volume": 133687246.0 + }, + { + "time": 1672963200, + "open": 107.69, + "high": 114.39, + "low": 101.2, + "close": 113.68, + "volume": 184006970.0 + }, + { + "time": 1673222400, + "open": 114.03, + "high": 123.52, + "low": 113.75, + "close": 119.55, + "volume": 162885492.0 + }, + { + "time": 1673308800, + "open": 120.6, + "high": 122.76, + "low": 115.0, + "close": 118.66, + "volume": 144503095.0 + }, + { + "time": 1673395200, + "open": 118.63, + "high": 125.95, + "low": 118.23, + "close": 123.19, + "volume": 158558924.0 + }, + { + "time": 1673481600, + "open": 123.22, + "high": 124.6, + "low": 117.0, + "close": 123.0, + "volume": 145833294.0 + }, + { + "time": 1673568000, + "open": 118.0, + "high": 123.0, + "low": 115.6, + "close": 122.03, + "volume": 157396482.0 + }, + { + "time": 1673913600, + "open": 122.0, + "high": 132.3, + "low": 120.6, + "close": 131.3, + "volume": 160937377.0 + }, + { + "time": 1674000000, + "open": 132.16, + "high": 137.5, + "low": 126.6, + "close": 126.72, + "volume": 169078250.0 + }, + { + "time": 1674086400, + "open": 127.47, + "high": 129.99, + "low": 124.3, + "close": 128.36, + "volume": 152223302.0 + }, + { + "time": 1674172800, + "open": 128.36, + "high": 133.85, + "low": 127.34, + "close": 133.85, + "volume": 123571951.0 + }, + { + "time": 1674432000, + "open": 133.87, + "high": 145.39, + "low": 133.5, + "close": 144.8, + "volume": 177044569.0 + }, + { + "time": 1674518400, + "open": 146.0, + "high": 146.5, + "low": 140.64, + "close": 140.97, + "volume": 140230986.0 + }, + { + "time": 1674604800, + "open": 142.47, + "high": 153.0, + "low": 138.07, + "close": 152.35, + "volume": 166419849.0 + }, + { + "time": 1674691200, + "open": 153.43, + "high": 161.42, + "low": 152.35, + "close": 158.95, + "volume": 200431932.0 + }, + { + "time": 1674777600, + "open": 159.89, + "high": 180.68, + "low": 158.0, + "close": 178.99, + "volume": 263157488.0 + }, + { + "time": 1675036800, + "open": 178.5, + "high": 180.0, + "low": 165.77, + "close": 165.77, + "volume": 196790466.0 + }, + { + "time": 1675123200, + "open": 165.89, + "high": 174.3, + "low": 162.78, + "close": 171.82, + "volume": 172099948.0 + }, + { + "time": 1675209600, + "open": 173.22, + "high": 184.84, + "low": 169.97, + "close": 184.33, + "volume": 187082506.0 + }, + { + "time": 1675296000, + "open": 185.11, + "high": 196.76, + "low": 182.61, + "close": 184.06, + "volume": 186940474.0 + }, + { + "time": 1675382400, + "open": 183.47, + "high": 199.0, + "low": 182.0, + "close": 192.77, + "volume": 199115506.0 + }, + { + "time": 1675641600, + "open": 192.91, + "high": 198.17, + "low": 189.1, + "close": 195.14, + "volume": 161365866.0 + }, + { + "time": 1675728000, + "open": 195.38, + "high": 197.8, + "low": 189.55, + "close": 196.19, + "volume": 162102866.0 + }, + { + "time": 1675814400, + "open": 196.2, + "high": 203.0, + "low": 194.31, + "close": 202.49, + "volume": 155395535.0 + }, + { + "time": 1675900800, + "open": 205.0, + "high": 214.0, + "low": 201.29, + "close": 204.0, + "volume": 181049895.0 + }, + { + "time": 1675987200, + "open": 206.01, + "high": 206.73, + "low": 192.92, + "close": 194.58, + "volume": 172846466.0 + }, + { + "time": 1676246400, + "open": 194.54, + "high": 199.5, + "low": 187.61, + "close": 195.62, + "volume": 147807152.0 + }, + { + "time": 1676332800, + "open": 195.5, + "high": 212.0, + "low": 189.44, + "close": 211.5, + "volume": 185629204.0 + }, + { + "time": 1676419200, + "open": 209.0, + "high": 216.21, + "low": 206.11, + "close": 215.91, + "volume": 152835862.0 + }, + { + "time": 1676505600, + "open": 216.6, + "high": 217.82, + "low": 196.74, + "close": 198.23, + "volume": 195125412.0 + }, + { + "time": 1676592000, + "open": 199.0, + "high": 209.77, + "low": 197.5, + "close": 209.0, + "volume": 183119234.0 + }, + { + "time": 1676937600, + "open": 205.95, + "high": 209.71, + "low": 195.8, + "close": 197.35, + "volume": 151695722.0 + }, + { + "time": 1677024000, + "open": 198.94, + "high": 203.0, + "low": 191.83, + "close": 202.4, + "volume": 167116119.0 + }, + { + "time": 1677110400, + "open": 203.45, + "high": 205.13, + "low": 196.33, + "close": 200.43, + "volume": 126002008.0 + }, + { + "time": 1677196800, + "open": 198.1, + "high": 201.33, + "low": 192.8, + "close": 196.48, + "volume": 121759004.0 + }, + { + "time": 1677456000, + "open": 198.0, + "high": 209.42, + "low": 195.68, + "close": 209.09, + "volume": 135811509.0 + }, + { + "time": 1677542400, + "open": 208.08, + "high": 212.6, + "low": 203.75, + "close": 204.7, + "volume": 129887964.0 + }, + { + "time": 1677628800, + "open": 207.66, + "high": 209.05, + "low": 189.0, + "close": 191.3, + "volume": 135485305.0 + }, + { + "time": 1677715200, + "open": 191.4, + "high": 193.75, + "low": 185.42, + "close": 190.85, + "volume": 154029003.0 + }, + { + "time": 1677801600, + "open": 191.96, + "high": 200.48, + "low": 190.8, + "close": 198.3, + "volume": 132018423.0 + }, + { + "time": 1678060800, + "open": 198.45, + "high": 199.6, + "low": 192.3, + "close": 193.03, + "volume": 111186290.0 + }, + { + "time": 1678147200, + "open": 194.11, + "high": 194.68, + "low": 186.1, + "close": 188.12, + "volume": 127160413.0 + }, + { + "time": 1678233600, + "open": 187.45, + "high": 188.2, + "low": 180.0, + "close": 180.62, + "volume": 130599496.0 + }, + { + "time": 1678320000, + "open": 179.28, + "high": 185.18, + "low": 169.65, + "close": 169.9, + "volume": 142783264.0 + }, + { + "time": 1678406400, + "open": 171.84, + "high": 178.29, + "low": 168.44, + "close": 174.47, + "volume": 163214327.0 + }, + { + "time": 1678665600, + "open": 178.0, + "high": 179.25, + "low": 164.0, + "close": 174.4, + "volume": 141125454.0 + }, + { + "time": 1678752000, + "open": 174.72, + "high": 184.49, + "low": 173.8, + "close": 184.15, + "volume": 124651497.0 + }, + { + "time": 1678838400, + "open": 184.5, + "high": 185.66, + "low": 176.03, + "close": 180.54, + "volume": 124829688.0 + }, + { + "time": 1678924800, + "open": 180.99, + "high": 185.81, + "low": 178.84, + "close": 183.86, + "volume": 103701677.0 + }, + { + "time": 1679011200, + "open": 184.14, + "high": 186.22, + "low": 177.33, + "close": 179.05, + "volume": 113188518.0 + }, + { + "time": 1679270400, + "open": 176.45, + "high": 186.44, + "low": 176.29, + "close": 183.31, + "volume": 111938751.0 + }, + { + "time": 1679356800, + "open": 184.56, + "high": 198.0, + "low": 183.42, + "close": 197.5, + "volume": 129806598.0 + }, + { + "time": 1679443200, + "open": 197.6, + "high": 200.66, + "low": 189.8, + "close": 192.36, + "volume": 127873104.0 + }, + { + "time": 1679529600, + "open": 194.3, + "high": 199.31, + "low": 188.65, + "close": 192.9, + "volume": 122801841.0 + }, + { + "time": 1679616000, + "open": 194.0, + "high": 194.28, + "low": 187.15, + "close": 190.23, + "volume": 100588036.0 + }, + { + "time": 1679875200, + "open": 190.23, + "high": 197.39, + "low": 189.6, + "close": 192.96, + "volume": 105008001.0 + }, + { + "time": 1679961600, + "open": 192.36, + "high": 193.95, + "low": 185.43, + "close": 189.65, + "volume": 85183670.0 + }, + { + "time": 1680048000, + "open": 191.27, + "high": 195.29, + "low": 189.44, + "close": 192.78, + "volume": 107927597.0 + }, + { + "time": 1680134400, + "open": 194.66, + "high": 197.33, + "low": 193.12, + "close": 195.35, + "volume": 94431494.0 + }, + { + "time": 1680220800, + "open": 195.35, + "high": 208.0, + "low": 195.15, + "close": 207.65, + "volume": 146669747.0 + }, + { + "time": 1680480000, + "open": 204.0, + "high": 206.8, + "low": 192.2, + "close": 193.2, + "volume": 141493469.0 + }, + { + "time": 1680566400, + "open": 194.51, + "high": 198.75, + "low": 190.32, + "close": 192.75, + "volume": 105533822.0 + }, + { + "time": 1680652800, + "open": 192.35, + "high": 194.0, + "low": 183.76, + "close": 184.19, + "volume": 112676921.0 + }, + { + "time": 1680739200, + "open": 184.81, + "high": 187.2, + "low": 179.83, + "close": 185.0, + "volume": 105769070.0 + }, + { + "time": 1681084800, + "open": 183.56, + "high": 185.9, + "low": 176.11, + "close": 184.4, + "volume": 123177931.0 + }, + { + "time": 1681171200, + "open": 184.51, + "high": 189.19, + "low": 184.15, + "close": 186.6, + "volume": 100721415.0 + }, + { + "time": 1681257600, + "open": 186.29, + "high": 191.59, + "low": 179.75, + "close": 179.9, + "volume": 131472591.0 + }, + { + "time": 1681344000, + "open": 181.25, + "high": 186.5, + "low": 180.33, + "close": 185.95, + "volume": 99401779.0 + }, + { + "time": 1681430400, + "open": 185.36, + "high": 186.57, + "low": 182.01, + "close": 185.0, + "volume": 84119837.0 + } + ] +} \ No newline at end of file diff --git a/docs/source/_static/pkg.js b/docs/source/_static/pkg.js new file mode 100644 index 0000000..39207a2 --- /dev/null +++ b/docs/source/_static/pkg.js @@ -0,0 +1,7 @@ +/*! + * @license + * TradingView Lightweight Charts™ v4.1.0-dev+202306102016 + * Copyright (c) 2023 TradingView, Inc. + * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0 + */ +!function(){"use strict";var t,i;function s(t,i){const s={0:[],1:[t.lineWidth,t.lineWidth],2:[2*t.lineWidth,2*t.lineWidth],3:[6*t.lineWidth,6*t.lineWidth],4:[t.lineWidth,4*t.lineWidth]}[i];t.setLineDash(s)}function e(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(s,i+h),t.lineTo(e,i+h),t.stroke()}function h(t,i){if(!t)throw new Error("Assertion failed"+(i?": "+i:""))}function n(t){if(void 0===t)throw new Error("Value is undefined");return t}function r(t){if(null===t)throw new Error("Value is null");return t}function o(t){return r(n(t))}!function(t){t[t.Simple=0]="Simple",t[t.WithSteps=1]="WithSteps",t[t.Curved=2]="Curved"}(t||(t={})),function(t){t[t.Solid=0]="Solid",t[t.Dotted=1]="Dotted",t[t.Dashed=2]="Dashed",t[t.LargeDashed=3]="LargeDashed",t[t.SparseDotted=4]="SparseDotted"}(i||(i={}));const l={khaki:"#f0e68c",azure:"#f0ffff",aliceblue:"#f0f8ff",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",gray:"#808080",green:"#008000",honeydew:"#f0fff0",floralwhite:"#fffaf0",lightblue:"#add8e6",lightcoral:"#f08080",lemonchiffon:"#fffacd",hotpink:"#ff69b4",lightyellow:"#ffffe0",greenyellow:"#adff2f",lightgoldenrodyellow:"#fafad2",limegreen:"#32cd32",linen:"#faf0e6",lightcyan:"#e0ffff",magenta:"#f0f",maroon:"#800000",olive:"#808000",orange:"#ffa500",oldlace:"#fdf5e6",mediumblue:"#0000cd",transparent:"#0000",lime:"#0f0",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",midnightblue:"#191970",orchid:"#da70d6",mediumorchid:"#ba55d3",mediumturquoise:"#48d1cc",orangered:"#ff4500",royalblue:"#4169e1",powderblue:"#b0e0e6",red:"#f00",coral:"#ff7f50",turquoise:"#40e0d0",white:"#fff",whitesmoke:"#f5f5f5",wheat:"#f5deb3",teal:"#008080",steelblue:"#4682b4",bisque:"#ffe4c4",aquamarine:"#7fffd4",aqua:"#0ff",sienna:"#a0522d",silver:"#c0c0c0",springgreen:"#00ff7f",antiquewhite:"#faebd7",burlywood:"#deb887",brown:"#a52a2a",beige:"#f5f5dc",chocolate:"#d2691e",chartreuse:"#7fff00",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cadetblue:"#5f9ea0",tomato:"#ff6347",fuchsia:"#f0f",blue:"#00f",salmon:"#fa8072",blanchedalmond:"#ffebcd",slateblue:"#6a5acd",slategray:"#708090",thistle:"#d8bfd8",tan:"#d2b48c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",blueviolet:"#8a2be2",black:"#000",darkmagenta:"#8b008b",darkslateblue:"#483d8b",darkkhaki:"#bdb76b",darkorchid:"#9932cc",darkorange:"#ff8c00",darkgreen:"#006400",darkred:"#8b0000",dodgerblue:"#1e90ff",darkslategray:"#2f4f4f",dimgray:"#696969",deepskyblue:"#00bfff",firebrick:"#b22222",forestgreen:"#228b22",indigo:"#4b0082",ivory:"#fffff0",lavenderblush:"#fff0f5",feldspar:"#d19275",indianred:"#cd5c5c",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightskyblue:"#87cefa",lightslategray:"#789",lightslateblue:"#8470ff",snow:"#fffafa",lightseagreen:"#20b2aa",lightsalmon:"#ffa07a",darksalmon:"#e9967a",darkviolet:"#9400d3",mediumpurple:"#9370d8",mediumaquamarine:"#66cdaa",skyblue:"#87ceeb",lavender:"#e6e6fa",lightsteelblue:"#b0c4de",mediumvioletred:"#c71585",mintcream:"#f5fffa",navajowhite:"#ffdead",navy:"#000080",olivedrab:"#6b8e23",palevioletred:"#d87093",violetred:"#d02090",yellow:"#ff0",yellowgreen:"#9acd32",lawngreen:"#7cfc00",pink:"#ffc0cb",paleturquoise:"#afeeee",palegoldenrod:"#eee8aa",darkolivegreen:"#556b2f",darkseagreen:"#8fbc8f",darkturquoise:"#00ced1",peachpuff:"#ffdab9",deeppink:"#ff1493",violet:"#ee82ee",palegreen:"#98fb98",mediumseagreen:"#3cb371",peru:"#cd853f",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",purple:"#800080",seagreen:"#2e8b57",seashell:"#fff5ee",papayawhip:"#ffefd5",mediumslateblue:"#7b68ee",plum:"#dda0dd",mediumspringgreen:"#00fa9a"};function a(t){return t<0?0:t>255?255:Math.round(t)||0}function u(t){return t<=0||t>0?t<0?0:t>1?1:Math.round(1e4*t)/1e4:0}const c=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,d=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,f=/^rgb\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*\)$/,p=/^rgba\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?[\d]{0,10}(?:\.\d+)?)\s*\)$/;function m(t){(t=t.toLowerCase())in l&&(t=l[t]);{const i=p.exec(t)||f.exec(t);if(i)return[a(parseInt(i[1],10)),a(parseInt(i[2],10)),a(parseInt(i[3],10)),u(i.length<5?1:parseFloat(i[4]))]}{const i=d.exec(t);if(i)return[a(parseInt(i[1],16)),a(parseInt(i[2],16)),a(parseInt(i[3],16)),1]}{const i=c.exec(t);if(i)return[a(17*parseInt(i[1],16)),a(17*parseInt(i[2],16)),a(17*parseInt(i[3],16)),1]}throw new Error(`Cannot parse color: ${t}`)}function v(t){const i=m(t);return{background:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,foreground:(s=i,.199*s[0]+.687*s[1]+.114*s[2]>160?"black":"white")};var s}class b{constructor(){this._listeners=[]}subscribe(t,i,s){const e={callback:t,linkedObject:i,singleshot:!0===s};this._listeners.push(e)}unsubscribe(t){const i=this._listeners.findIndex((i=>t===i.callback));i>-1&&this._listeners.splice(i,1)}unsubscribeAll(t){this._listeners=this._listeners.filter((i=>i.linkedObject!==t))}fire(t,i,s){const e=[...this._listeners];this._listeners=this._listeners.filter((t=>!t.singleshot)),e.forEach((e=>e.callback(t,i,s)))}hasListeners(){return this._listeners.length>0}destroy(){this._listeners=[]}}function g(t,...i){for(const s of i)for(const i in s)void 0!==s[i]&&("object"!=typeof s[i]||void 0===t[i]?t[i]=s[i]:g(t[i],s[i]));return t}function w(t){return"number"==typeof t&&isFinite(t)}function M(t){return"number"==typeof t&&t%1==0}function S(t){return"string"==typeof t}function x(t){return"boolean"==typeof t}function _(t){const i=t;if(!i||"object"!=typeof i)return i;let s,e,h;for(e in s=Array.isArray(i)?[]:{},i)i.hasOwnProperty(e)&&(h=i[e],s[e]=h&&"object"==typeof h?_(h):h);return s}function y(t){return null!==t}function k(t){return null===t?void 0:t}const C="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif";function T(t,i,s){return void 0===i&&(i=C),`${s=void 0!==s?`${s} `:""}${t}px ${i}`}var P;!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(P||(P={}));class R{constructor(t){this._rendererOptions={borderSize:1,tickLength:5,fontSize:NaN,font:"",fontFamily:"",color:"",paneBackgroundColor:"",paddingBottom:0,paddingInner:0,paddingOuter:0,paddingTop:0,baselineOffset:0},this._chartModel=t}options(){const t=this._rendererOptions,i=this._fontSize(),s=this._fontFamily();return t.fontSize===i&&t.fontFamily===s||(t.fontSize=i,t.fontFamily=s,t.font=T(i,s),t.paddingTop=2.5/12*i,t.paddingBottom=t.paddingTop,t.paddingInner=i/12*t.tickLength,t.paddingOuter=i/12*t.tickLength,t.baselineOffset=0),t.color=this._textColor(),t.paneBackgroundColor=this._paneBackgroundColor(),this._rendererOptions}_textColor(){return this._chartModel.options().layout.textColor}_paneBackgroundColor(){return this._chartModel.backgroundTopColor()}_fontSize(){return this._chartModel.options().layout.fontSize}_fontFamily(){return this._chartModel.options().layout.fontFamily}}class D{constructor(){this._renderers=[]}setRenderers(t){this._renderers=t}draw(t,i,s){this._renderers.forEach((e=>{e.draw(t,i,s)}))}}class A{draw(t,i,s){t.useMediaCoordinateSpace((t=>this._drawImpl(t,i,s)))}drawBackground(t,i,s){t.useMediaCoordinateSpace((t=>this._drawBackgroundImpl(t,i,s)))}_drawBackgroundImpl(t,i,s){}}class E extends A{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t}){if(null===this._data||null===this._data.visibleRange)return;const i=this._data.visibleRange,s=this._data,e=e=>{t.beginPath();for(let h=i.to-1;h>=i.from;--h){const i=s.items[h];t.moveTo(i.x,i.y),t.arc(i.x,i.y,e,0,2*Math.PI)}t.fill()};s.lineWidth>0&&(t.fillStyle=s.backColor,e(s.radius+s.lineWidth)),t.fillStyle=s.lineColor,e(s.radius)}}function O(){return{items:[{x:0,y:0,time:0,price:0}],lineColor:"",backColor:"",radius:0,lineWidth:0,visibleRange:null}}const B={from:0,to:1};class L{constructor(t,i){this._compositeRenderer=new D,this._markersRenderers=[],this._markersData=[],this._invalidated=!0,this._chartModel=t,this._crosshair=i,this._compositeRenderer.setRenderers(this._markersRenderers)}update(t){const i=this._chartModel.serieses();i.length!==this._markersRenderers.length&&(this._markersData=i.map(O),this._markersRenderers=this._markersData.map((t=>{const i=new E;return i.setData(t),i})),this._compositeRenderer.setRenderers(this._markersRenderers)),this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._compositeRenderer}_updateImpl(){const t=this._chartModel.serieses(),i=this._crosshair.appliedIndex(),s=this._chartModel.timeScale();t.forEach(((t,e)=>{var h;const n=this._markersData[e],o=t.markerDataAtIndex(i);if(null===o||!t.visible())return void(n.visibleRange=null);const l=r(t.firstValue());n.lineColor=o.backgroundColor,n.radius=o.radius,n.lineWidth=o.borderWidth,n.items[0].price=o.price,n.items[0].y=t.priceScale().priceToCoordinate(o.price,l.value),n.backColor=null!==(h=o.borderColor)&&void 0!==h?h:this._chartModel.backgroundColorAtYPercentFromTop(n.items[0].y/t.priceScale().height()),n.items[0].time=i,n.items[0].x=s.indexToCoordinate(i),n.visibleRange=B}))}}class z{draw(t,i,s){t.useBitmapCoordinateSpace((t=>this._drawImpl(t,i,s)))}}class I extends z{constructor(t){super(),this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;const r=this._data.vertLine.visible,o=this._data.horzLine.visible;if(!r&&!o)return;const l=Math.round(this._data.x*h),a=Math.round(this._data.y*n);t.lineCap="butt",r&&l>=0&&(t.lineWidth=Math.floor(this._data.vertLine.lineWidth*h),t.strokeStyle=this._data.vertLine.color,t.fillStyle=this._data.vertLine.color,s(t,this._data.vertLine.lineStyle),function(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(i+h,s),t.lineTo(i+h,e),t.stroke()}(t,l,0,i.height)),o&&a>=0&&(t.lineWidth=Math.floor(this._data.horzLine.lineWidth*n),t.strokeStyle=this._data.horzLine.color,t.fillStyle=this._data.horzLine.color,s(t,this._data.horzLine.lineStyle),e(t,a,0,i.width))}}class N{constructor(t){this._invalidated=!0,this._rendererData={vertLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},horzLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},x:0,y:0},this._renderer=new I(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.visible(),i=r(this._source.pane()),s=i.model().options().crosshair,e=this._rendererData;e.horzLine.visible=t&&this._source.horzLineVisible(i),e.vertLine.visible=t&&this._source.vertLineVisible(),e.horzLine.lineWidth=s.horzLine.width,e.horzLine.lineStyle=s.horzLine.style,e.horzLine.color=s.horzLine.color,e.vertLine.lineWidth=s.vertLine.width,e.vertLine.lineStyle=s.vertLine.style,e.vertLine.color=s.vertLine.color,e.x=this._source.appliedX(),e.y=this._source.appliedY()}}function V(t,i,s,e,h,n){t.fillRect(i+n,s,e-2*n,n),t.fillRect(i+n,s+h-n,e-2*n,n),t.fillRect(i,s,n,h),t.fillRect(i+e-n,s,n,h)}function F(t,i,s,e,h,n){t.save(),t.globalCompositeOperation="copy",t.fillStyle=n,t.fillRect(i,s,e,h),t.restore()}function W(t,i){return Array.isArray(t)?t.map((t=>0===t?t:t+i)):t+i}function j(t,i,s,e,h,n){let r,o,l,a;if(Array.isArray(n))if(2===n.length){const t=Math.max(0,n[0]),i=Math.max(0,n[1]);r=t,o=t,l=i,a=i}else{if(4!==n.length)throw new Error("Wrong border radius - it should be like css border radius");r=Math.max(0,n[0]),o=Math.max(0,n[1]),l=Math.max(0,n[2]),a=Math.max(0,n[3])}else{const t=Math.max(0,n);r=t,o=t,l=t,a=t}t.beginPath(),t.moveTo(i+r,s),t.lineTo(i+e-o,s),0!==o&&t.arcTo(i+e,s,i+e,s+o,o),t.lineTo(i+e,s+h-l),0!==l&&t.arcTo(i+e,s+h,i+e-l,s+h,l),t.lineTo(i+a,s+h),0!==a&&t.arcTo(i,s+h,i,s+h-a,a),t.lineTo(i,s+r),0!==r&&t.arcTo(i,s,i+r,s,r)}function H(t,i,s,e,h,n,r=0,o=0,l=""){if(t.save(),!r||!l||l===n)return j(t,i,s,e,h,o),t.fillStyle=n,t.fill(),void t.restore();const a=r/2;if("transparent"!==n){j(t,i+r,s+r,e-2*r,h-2*r,W(o,-r)),t.fillStyle=n,t.fill()}if("transparent"!==l){j(t,i+a,s+a,e-r,h-r,W(o,-a)),t.lineWidth=r,t.strokeStyle=l,t.closePath(),t.stroke()}t.restore()}function $(t,i,s,e,h,n,r){t.save(),t.globalCompositeOperation="copy";const o=t.createLinearGradient(0,0,0,h);o.addColorStop(0,n),o.addColorStop(1,r),t.fillStyle=o,t.fillRect(i,s,e,h),t.restore()}class U{constructor(t,i){this.setData(t,i)}setData(t,i){this._data=t,this._commonData=i}height(t,i){return this._data.visible?t.fontSize+t.paddingTop+t.paddingBottom:0}draw(t,i,s,e){if(!this._data.visible||0===this._data.text.length)return;const h=this._data.color,n=this._commonData.background,r=t.useBitmapCoordinateSpace((t=>{const r=t.context;r.font=i.font;const o=this._calculateGeometry(t,i,s,e),l=o.bitmap,a=(t,i)=>{o.alignRight?H(r,l.xOutside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[l.radius,0,0,l.radius],i):H(r,l.xInside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[0,l.radius,l.radius,0],i)};return a(n,"transparent"),this._data.tickVisible&&(r.fillStyle=h,r.fillRect(l.xInside,l.yMid,l.xTick-l.xInside,l.tickHeight)),a("transparent",n),this._data.borderVisible&&(r.fillStyle=i.paneBackgroundColor,r.fillRect(o.alignRight?l.right-l.horzBorder:0,l.yTop,l.horzBorder,l.yBottom-l.yTop)),o}));t.useMediaCoordinateSpace((({context:t})=>{const s=r.media;t.font=i.font,t.textAlign=r.alignRight?"right":"left",t.textBaseline="middle",t.fillStyle=h,t.fillText(this._data.text,s.xText,(s.yTop+s.yBottom)/2+s.textMidCorrection)}))}_calculateGeometry(t,i,s,e){var h;const{context:n,bitmapSize:r,mediaSize:o,horizontalPixelRatio:l,verticalPixelRatio:a}=t,u=this._data.tickVisible||!this._data.moveTextToInvisibleTick?i.tickLength:0,c=this._data.separatorVisible?i.borderSize:0,d=i.paddingTop+this._commonData.additionalPaddingTop,f=i.paddingBottom+this._commonData.additionalPaddingBottom,p=i.paddingInner,m=i.paddingOuter,v=this._data.text,b=i.fontSize,g=s.yMidCorrection(n,v),w=Math.ceil(s.measureText(n,v)),M=b+d+f,S=i.borderSize+p+m+w+u,x=Math.max(1,Math.floor(a));let _=Math.round(M*a);_%2!=x%2&&(_+=1);const y=c>0?Math.max(1,Math.floor(c*l)):0,k=Math.round(S*l),C=Math.round(u*l),T=null!==(h=this._commonData.fixedCoordinate)&&void 0!==h?h:this._commonData.coordinate,P=Math.round(T*a)-Math.floor(.5*a),R=Math.floor(P+x/2-_/2),D=R+_,A="right"===e,E=A?o.width-c:c,O=A?r.width-y:y;let B,L,z;return A?(B=O-k,L=O-C,z=E-u-p-c):(B=O+k,L=O+C,z=E+u+p),{alignRight:A,bitmap:{yTop:R,yMid:P,yBottom:D,totalWidth:k,totalHeight:_,radius:2*l,horzBorder:y,xOutside:B,xInside:O,xTick:L,tickHeight:x,right:r.width},media:{yTop:R/a,yBottom:D/a,xText:z,textMidCorrection:g}}}}class q{constructor(t){this._commonRendererData={coordinate:0,background:"#000",additionalPaddingBottom:0,additionalPaddingTop:0},this._axisRendererData={text:"",visible:!1,tickVisible:!0,moveTextToInvisibleTick:!1,borderColor:"",color:"#FFF",borderVisible:!1,separatorVisible:!1},this._paneRendererData={text:"",visible:!1,tickVisible:!1,moveTextToInvisibleTick:!0,borderColor:"",color:"#FFF",borderVisible:!0,separatorVisible:!0},this._invalidated=!0,this._axisRenderer=new(t||U)(this._axisRendererData,this._commonRendererData),this._paneRenderer=new(t||U)(this._paneRendererData,this._commonRendererData)}text(){return this._updateRendererDataIfNeeded(),this._axisRendererData.text}coordinate(){return this._updateRendererDataIfNeeded(),this._commonRendererData.coordinate}update(){this._invalidated=!0}height(t,i=!1){return Math.max(this._axisRenderer.height(t,i),this._paneRenderer.height(t,i))}getFixedCoordinate(){return this._commonRendererData.fixedCoordinate||0}setFixedCoordinate(t){this._commonRendererData.fixedCoordinate=t}isVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible||this._paneRendererData.visible}isAxisLabelVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible}renderer(t){return this._updateRendererDataIfNeeded(),this._axisRendererData.tickVisible=this._axisRendererData.tickVisible&&t.options().ticksVisible,this._paneRendererData.tickVisible=this._paneRendererData.tickVisible&&t.options().ticksVisible,this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._axisRenderer}paneRenderer(){return this._updateRendererDataIfNeeded(),this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._paneRenderer}_updateRendererDataIfNeeded(){this._invalidated&&(this._axisRendererData.tickVisible=!0,this._paneRendererData.tickVisible=!1,this._updateRendererData(this._axisRendererData,this._paneRendererData,this._commonRendererData))}}class Y extends q{constructor(t,i,s){super(),this._source=t,this._priceScale=i,this._valueProvider=s}_updateRendererData(t,i,s){t.visible=!1;const e=this._source.options().horzLine;if(!e.labelVisible)return;const h=this._priceScale.firstValue();if(!this._source.visible()||this._priceScale.isEmpty()||null===h)return;const n=v(e.labelBackgroundColor);s.background=n.background,t.color=n.foreground;const r=2/12*this._priceScale.fontSize();s.additionalPaddingTop=r,s.additionalPaddingBottom=r;const o=this._valueProvider(this._priceScale);s.coordinate=o.coordinate,t.text=this._priceScale.formatPrice(o.price,h),t.visible=!0}}const X=/[1-9]/g;class Z{constructor(){this._data=null}setData(t){this._data=t}draw(t,i){if(null===this._data||!1===this._data.visible||0===this._data.text.length)return;const s=t.useMediaCoordinateSpace((({context:t})=>(t.font=i.font,Math.round(i.widthCache.measureText(t,r(this._data).text,X)))));if(s<=0)return;const e=i.paddingHorizontal,h=s+2*e,n=h/2,o=this._data.width;let l=this._data.coordinate,a=Math.floor(l-n)+.5;a<0?(l+=Math.abs(0-a),a=Math.floor(l-n)+.5):a+h>o&&(l-=Math.abs(o-(a+h)),a=Math.floor(l-n)+.5);const u=a+h,c=Math.ceil(0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize+i.paddingBottom);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:s,verticalPixelRatio:e})=>{const h=r(this._data);t.fillStyle=h.background;const n=Math.round(a*s),o=Math.round(0*e),l=Math.round(u*s),d=Math.round(c*e),f=Math.round(2*s);if(t.beginPath(),t.moveTo(n,o),t.lineTo(n,d-f),t.arcTo(n,d,n+f,d,f),t.lineTo(l-f,d),t.arcTo(l,d,l,d-f,f),t.lineTo(l,o),t.fill(),h.tickVisible){const n=Math.round(h.coordinate*s),r=o,l=Math.round((r+i.tickLength)*e);t.fillStyle=h.color;const a=Math.max(1,Math.floor(s)),u=Math.floor(.5*s);t.fillRect(n-u,r,a,l-r)}})),t.useMediaCoordinateSpace((({context:t})=>{const s=r(this._data),h=0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize/2;t.font=i.font,t.textAlign="left",t.textBaseline="middle",t.fillStyle=s.color;const n=i.widthCache.yMidCorrection(t,"Apr0");t.translate(a+e,h+n),t.fillText(s.text,0,0)}))}}class K{constructor(t,i,s){this._invalidated=!0,this._renderer=new Z,this._rendererData={visible:!1,background:"#4c525e",color:"white",text:"",width:0,coordinate:NaN,tickVisible:!0},this._crosshair=t,this._model=i,this._valueProvider=s}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer.setData(this._rendererData),this._renderer}_updateImpl(){const t=this._rendererData;t.visible=!1;const i=this._crosshair.options().vertLine;if(!i.labelVisible)return;const s=this._model.timeScale();if(s.isEmpty())return;t.width=s.width();const e=this._valueProvider();if(null===e)return;t.coordinate=e.coordinate;const h=s.indexToTimeScalePoint(this._crosshair.appliedIndex());t.text=s.formatDateTime(r(h)),t.visible=!0;const n=v(i.labelBackgroundColor);t.background=n.background,t.color=n.foreground,t.tickVisible=s.options().ticksVisible}}class G{constructor(){this._priceScale=null,this._zorder=0}zorder(){return this._zorder}setZorder(t){this._zorder=t}priceScale(){return this._priceScale}setPriceScale(t){this._priceScale=t}labelPaneViews(t){return[]}timeAxisViews(){return[]}visible(){return!0}}var J,Q,tt,it;!function(t){t[t.Normal=0]="Normal",t[t.Magnet=1]="Magnet"}(J||(J={}));class st extends G{constructor(t,i){super(),this._pane=null,this._price=NaN,this._index=0,this._visible=!0,this._priceAxisViews=new Map,this._subscribed=!1,this._x=NaN,this._y=NaN,this._originX=NaN,this._originY=NaN,this._model=t,this._options=i,this._markersPaneView=new L(t,this);this._currentPosPriceProvider=((t,i)=>s=>{const e=i(),h=t();if(s===r(this._pane).defaultPriceScale())return{price:h,coordinate:e};{const t=r(s.firstValue());return{price:s.coordinateToPrice(e,t),coordinate:e}}})((()=>this._price),(()=>this._y));const s=((t,i)=>()=>{const s=this._model.timeScale().indexToTime(t()),e=i();return s&&Number.isFinite(e)?{time:s,coordinate:e}:null})((()=>this._index),(()=>this.appliedX()));this._timeAxisView=new K(this,t,s),this._paneView=new N(this)}options(){return this._options}saveOriginCoord(t,i){this._originX=t,this._originY=i}clearOriginCoord(){this._originX=NaN,this._originY=NaN}originCoordX(){return this._originX}originCoordY(){return this._originY}setPosition(t,i,s){this._subscribed||(this._subscribed=!0),this._visible=!0,this._tryToUpdateViews(t,i,s)}appliedIndex(){return this._index}appliedX(){return this._x}appliedY(){return this._y}visible(){return this._visible}clearPosition(){this._visible=!1,this._setIndexToLastSeriesBarIndex(),this._price=NaN,this._x=NaN,this._y=NaN,this._pane=null,this.clearOriginCoord()}paneViews(t){return null!==this._pane?[this._paneView,this._markersPaneView]:[]}horzLineVisible(t){return t===this._pane&&this._options.horzLine.visible}vertLineVisible(){return this._options.vertLine.visible}priceAxisViews(t,i){this._visible&&this._pane===t||this._priceAxisViews.clear();const s=[];return this._pane===t&&s.push(this._createPriceAxisViewOnDemand(this._priceAxisViews,i,this._currentPosPriceProvider)),s}timeAxisViews(){return this._visible?[this._timeAxisView]:[]}pane(){return this._pane}updateAllViews(){this._paneView.update(),this._priceAxisViews.forEach((t=>t.update())),this._timeAxisView.update(),this._markersPaneView.update()}_priceScaleByPane(t){return t&&!t.defaultPriceScale().isEmpty()?t.defaultPriceScale():null}_tryToUpdateViews(t,i,s){this._tryToUpdateData(t,i,s)&&this.updateAllViews()}_tryToUpdateData(t,i,s){const e=this._x,h=this._y,n=this._price,r=this._index,o=this._pane,l=this._priceScaleByPane(s);this._index=t,this._x=isNaN(t)?NaN:this._model.timeScale().indexToCoordinate(t),this._pane=s;const a=null!==l?l.firstValue():null;return null!==l&&null!==a?(this._price=i,this._y=l.priceToCoordinate(i,a)):(this._price=NaN,this._y=NaN),e!==this._x||h!==this._y||r!==this._index||n!==this._price||o!==this._pane}_setIndexToLastSeriesBarIndex(){const t=this._model.serieses().map((t=>t.bars().lastIndex())).filter(y),i=0===t.length?null:Math.max(...t);this._index=null!==i?i:NaN}_createPriceAxisViewOnDemand(t,i,s){let e=t.get(i);return void 0===e&&(e=new Y(this,i,s),t.set(i,e)),e}}function et(t){return"left"===t||"right"===t}!function(t){t.Left="left",t.Right="right"}(Q||(Q={})),function(t){t[t.None=0]="None",t[t.Cursor=1]="Cursor",t[t.Light=2]="Light",t[t.Full=3]="Full"}(tt||(tt={})),function(t){t[t.FitContent=0]="FitContent",t[t.ApplyRange=1]="ApplyRange",t[t.ApplyBarSpacing=2]="ApplyBarSpacing",t[t.ApplyRightOffset=3]="ApplyRightOffset",t[t.Reset=4]="Reset",t[t.Animation=5]="Animation",t[t.StopAnimation=6]="StopAnimation"}(it||(it={}));class ht{constructor(t){this._invalidatedPanes=new Map,this._timeScaleInvalidations=[],this._globalLevel=t}invalidatePane(t,i){const s=function(t,i){return void 0===t?i:{level:Math.max(t.level,i.level),autoScale:t.autoScale||i.autoScale}}(this._invalidatedPanes.get(t),i);this._invalidatedPanes.set(t,s)}fullInvalidation(){return this._globalLevel}invalidateForPane(t){const i=this._invalidatedPanes.get(t);return void 0===i?{level:this._globalLevel}:{level:Math.max(this._globalLevel,i.level),autoScale:i.autoScale}}setFitContent(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:0}]}applyRange(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:1,value:t}]}setTimeScaleAnimation(t){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:5,value:t})}stopTimeScaleAnimation(){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:6})}resetTimeScale(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:4}]}setBarSpacing(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:2,value:t})}setRightOffset(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:3,value:t})}timeScaleInvalidations(){return this._timeScaleInvalidations}merge(t){for(const i of t._timeScaleInvalidations)this._applyTimeScaleInvalidation(i);this._globalLevel=Math.max(this._globalLevel,t._globalLevel),t._invalidatedPanes.forEach(((t,i)=>{this.invalidatePane(i,t)}))}static light(){return new ht(2)}static full(){return new ht(3)}_applyTimeScaleInvalidation(t){switch(t.type){case 0:this.setFitContent();break;case 1:this.applyRange(t.value);break;case 2:this.setBarSpacing(t.value);break;case 3:this.setRightOffset(t.value);break;case 4:this.resetTimeScale();break;case 5:this.setTimeScaleAnimation(t.value);break;case 6:this._removeTimeScaleAnimation()}}_removeTimeScaleAnimation(){const t=this._timeScaleInvalidations.findIndex((t=>5===t.type));-1!==t&&this._timeScaleInvalidations.splice(t,1)}}const nt=".";function rt(t,i){if(!w(t))return"n/a";if(!M(i))throw new TypeError("invalid length");if(i<0||i>16)throw new TypeError("invalid length");if(0===i)return t.toString();return("0000000000000000"+t.toString()).slice(-i)}class ot{constructor(t,i){if(i||(i=1),w(t)&&M(t)||(t=100),t<0)throw new TypeError("invalid base");this._priceScale=t,this._minMove=i,this._calculateDecimal()}format(t){const i=t<0?"−":"";return t=Math.abs(t),i+this._formatAsDecimal(t)}_calculateDecimal(){if(this._fractionalLength=0,this._priceScale>0&&this._minMove>0){let t=this._priceScale;for(;t>1;)t/=10,this._fractionalLength++}}_formatAsDecimal(t){const i=this._priceScale/this._minMove;let s=Math.floor(t),e="";const h=void 0!==this._fractionalLength?this._fractionalLength:NaN;if(i>1){let n=+(Math.round(t*i)-s*i).toFixed(this._fractionalLength);n>=i&&(n-=i,s+=1),e=nt+rt(+n.toFixed(this._fractionalLength)*this._minMove,h)}else s=Math.round(s*i)/i,h>0&&(e=nt+rt(0,h));return s.toFixed(0)+e}}class lt extends ot{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class at{constructor(t){this._precision=t}format(t){let i="";return t<0&&(i="-",t=-t),t<995?i+this._formatNumber(t):t<999995?i+this._formatNumber(t/1e3)+"K":t<999999995?(t=1e3*Math.round(t/1e3),i+this._formatNumber(t/1e6)+"M"):(t=1e6*Math.round(t/1e6),i+this._formatNumber(t/1e9)+"B")}_formatNumber(t){let i;const s=Math.pow(10,this._precision);return i=(t=Math.round(t*s)/s)>=1e-15&&t<1?t.toFixed(this._precision).replace(/\.?0+$/,""):String(t),i.replace(/(\.[1-9]*)0+$/,((t,i)=>i))}}function ut(t,i,s,e,h,n,r){if(0===i.length||e.from>=i.length||e.to<=0)return;const o=t.context,l=i[e.from];let a=n(t,l),u=l;if(e.to-e.from<2){const t=h/2;o.beginPath();const i={x:l.x-t,y:l.y},s={x:l.x+t,y:l.y};return o.moveTo(i.x,i.y),o.lineTo(s.x,s.y),void r(o,a,i,s)}const c=(t,i)=>{r(o,a,u,i),o.beginPath(),a=t,u=i};let d=u;o.beginPath(),o.moveTo(l.x,l.y);for(let h=e.from+1;h>1,r=e+h;s(t[r],i)?(e=r+1,n-=h+1):n=h}return e}function xt(t,i,s,e=0,h=t.length){let n=h-e;for(;0>1,r=e+h;s(i,t[r])?n=h:(e=r+1,n-=h+1)}return e}var _t,yt;function kt(t,i){return t.time0&&n=e&&(o=n-1),r>0&&rObject.assign(Object.assign({},t),this._series.barColorer().barStyle(t.time))))}_clearVisibleRange(){this._itemsVisibleRange=null}_makeValid(){this._dataInvalidated&&(this._fillRawPoints(),this._dataInvalidated=!1),this._optionsInvalidated&&(this._updateOptions(),this._optionsInvalidated=!1),this._invalidated&&(this._makeValidImpl(),this._invalidated=!1)}_makeValidImpl(){const t=this._series.priceScale(),i=this._model.timeScale();if(this._clearVisibleRange(),i.isEmpty()||t.isEmpty())return;const s=i.visibleStrictRange();if(null===s)return;if(0===this._series.bars().size())return;const e=this._series.firstValue();null!==e&&(this._itemsVisibleRange=Tt(this._items,s,this._extendedVisibleRange),this._convertToCoordinates(t,i,e.value),this._prepareRendererData())}}class Rt extends Pt{constructor(t,i){super(t,i,!0)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.pointsArrayToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createRawItemBase(t,i){return{time:t,price:i,x:NaN,y:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>{const s=i.value[3];return this._createRawItem(i.index,s,t)}))}}class Dt extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._areaRenderer=new bt,this._lineRenderer=new Mt,this._renderer.setRenderers([this._areaRenderer,this._lineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._areaRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,baseLevelCoordinate:null,invertFilledArea:t.invertFilledArea,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()}),this._lineRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()})}}class At extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0,this._barLineWidth=0}setData(t){this._data=t}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;if(this._barWidth=this._calcBarWidth(i),this._barWidth>=2){Math.max(1,Math.floor(i))%2!=this._barWidth%2&&this._barWidth--}this._barLineWidth=this._data.thinBars?Math.min(this._barWidth,Math.floor(i)):this._barWidth;let e=null;const h=this._barLineWidth<=this._barWidth&&this._data.barSpacing>=Math.floor(1.5*i);for(let n=this._data.visibleRange.from;np+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(i,e,a-i,h-e+1)}const i=l+b;let e=Math.max(p,Math.round(r.closeY*s)-o),h=e+u-1;h>p+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(c+1,e,i-c,h-e+1)}}}_calcBarWidth(t){const i=Math.floor(t);return Math.max(i,Math.floor(function(t,i){return Math.floor(.3*t*i)}(r(this._data).barSpacing,t)))}}class Et extends Pt{constructor(t,i){super(t,i,!1)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.barPricesToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createDefaultItem(t,i,s){return{time:t,open:i.value[0],high:i.value[1],low:i.value[2],close:i.value[3],x:NaN,openY:NaN,highY:NaN,lowY:NaN,closeY:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>this._createRawItem(i.index,i,t)))}}class Ot extends Et{constructor(){super(...arguments),this._renderer=new At}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),openVisible:t.openVisible,thinBars:t.thinBars,visibleRange:this._itemsVisibleRange})}}function Bt(t,i,s){return Math.min(Math.max(t,i),s)}function Lt(t,i,s){return i-t<=s}function zt(t){return t<=0?NaN:Math.log(t)/Math.log(10)}function It(t){const i=Math.ceil(t);return i%2==0?i-1:i}class Nt extends vt{constructor(){super(...arguments),this._fillCache=null}_fillStyle(t,i){var s;const{context:e,mediaSize:h}=t,n=this._data,{topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a}=i,u=null!==(s=n.baseLevelCoordinate)&&void 0!==s?s:h.height,c=h.height;if(null!==this._fillCache&&this._fillCache.topFillColor1===r&&this._fillCache.topFillColor2===o&&this._fillCache.bottomFillColor1===l&&this._fillCache.bottomFillColor2===a&&this._fillCache.baseLevelCoordinate===u&&this._fillCache.bottom===c)return this._fillCache.fillStyle;const d=e.createLinearGradient(0,0,0,c),f=Bt(u/c,0,1);return d.addColorStop(0,r),d.addColorStop(f,o),d.addColorStop(f,l),d.addColorStop(1,a),this._fillCache={topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a,fillStyle:d,baseLevelCoordinate:u,bottom:c},d}}class Vt extends wt{constructor(){super(...arguments),this._strokeCache=null}_strokeStyle(t,i){const{context:s,mediaSize:e}=t,h=this._data,{topLineColor:n,bottomLineColor:r}=i,{baseLevelCoordinate:o}=h,l=e.height;if(null!==this._strokeCache&&this._strokeCache.topLineColor===n&&this._strokeCache.bottomLineColor===r&&this._strokeCache.baseLevelCoordinate===o&&this._strokeCache.bottom===l)return this._strokeCache.strokeStyle;const a=s.createLinearGradient(0,0,0,l),u=Bt(o/l,0,1);return a.addColorStop(0,n),a.addColorStop(u,n),a.addColorStop(u,r),a.addColorStop(1,r),this._strokeCache={topLineColor:n,bottomLineColor:r,strokeStyle:a,baseLevelCoordinate:o,bottom:l},a}}class Ft extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._baselineAreaRenderer=new Nt,this._baselineLineRenderer=new Vt,this._renderer.setRenderers([this._baselineAreaRenderer,this._baselineLineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.firstValue();if(null===t)return;const i=this._series.options(),s=this._series.priceScale().priceToCoordinate(i.baseValue.price,t.value),e=this._model.timeScale().barSpacing();this._baselineAreaRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,invertFilledArea:!1,visibleRange:this._itemsVisibleRange,barWidth:e}),this._baselineLineRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,visibleRange:this._itemsVisibleRange,barWidth:e})}}!function(t){t[t.BarBorderWidth=1]="BarBorderWidth"}(yt||(yt={}));class Wt extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0}setData(t){this._data=t}_drawImpl(t){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;const{horizontalPixelRatio:i}=t;if(this._barWidth=function(t,i){if(t>=2.5&&t<=4)return Math.floor(3*i);const s=1-.2*Math.atan(Math.max(4,t)-4)/(.5*Math.PI),e=Math.floor(t*s*i),h=Math.floor(t*i),n=Math.min(e,h);return Math.max(Math.floor(i),n)}(this._data.barSpacing,i),this._barWidth>=2){Math.floor(i)%2!=this._barWidth%2&&this._barWidth--}const s=this._data.bars;this._data.wickVisible&&this._drawWicks(t,s,this._data.visibleRange),this._data.borderVisible&&this._drawBorder(t,s,this._data.visibleRange);const e=this._calculateBorderWidth(i);(!this._data.borderVisible||this._barWidth>2*e)&&this._drawCandles(t,s,this._data.visibleRange)}_drawWicks(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="",o=Math.min(Math.floor(h),Math.floor(this._data.barSpacing*h));o=Math.max(Math.floor(h),Math.min(o,this._barWidth));const l=Math.floor(.5*o);let a=null;for(let t=s.from;t2*o)V(e,a,c,u-a+1,d-c+1,o);else{const t=u-a+1;e.fillRect(a,c,t,d-c+1)}l=u}}_drawCandles(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="";const o=this._calculateBorderWidth(h);for(let t=s.from;ta||e.fillRect(u,l,c-u+1,a-l+1)}}}class jt extends Et{constructor(){super(...arguments),this._renderer=new Wt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),wickVisible:t.wickVisible,borderVisible:t.borderVisible,visibleRange:this._itemsVisibleRange})}}class Ht extends z{constructor(){super(...arguments),this._data=null,this._precalculatedCache=[]}setData(t){this._data=t,this._precalculatedCache=[]}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.items.length||null===this._data.visibleRange)return;this._precalculatedCache.length||this._fillPrecalculatedCache(i);const e=Math.max(1,Math.floor(s)),h=Math.round(this._data.histogramBase*s)-Math.floor(e/2),n=h+e;for(let i=this._data.visibleRange.from;ie.center?e.right=s.left-i-1:s.left=e.right+i+1))}let e=Math.ceil(this._data.barSpacing*t);for(let t=this._data.visibleRange.from;t0&&e<4)for(let t=this._data.visibleRange.from;te&&(i.roundedCenter>i.center?i.right-=1:i.left+=1)}}}class $t extends Rt{constructor(){super(...arguments),this._renderer=new Ht}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t={items:this._items,barSpacing:this._model.timeScale().barSpacing(),visibleRange:this._itemsVisibleRange,histogramBase:this._series.priceScale().priceToCoordinate(this._series.options().base,r(this._series.firstValue()).value)};this._renderer.setData(t)}}class Ut extends Rt{constructor(){super(...arguments),this._renderer=new Mt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options(),i={items:this._items,lineStyle:t.lineStyle,lineType:t.lineType,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()};this._renderer.setData(i)}}const qt=/[2-9]/g;class Yt{constructor(t=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._tick2Labels={},this._cache=new Map,this._maxSize=t}reset(){this._actualSize=0,this._cache.clear(),this._usageTick=1,this._oldestTick=1,this._tick2Labels={}}measureText(t,i,s){return this._getMetrics(t,i,s).width}yMidCorrection(t,i,s){const e=this._getMetrics(t,i,s);return((e.actualBoundingBoxAscent||0)-(e.actualBoundingBoxDescent||0))/2}_getMetrics(t,i,s){const e=s||qt,h=String(i).replace(e,"0");if(this._cache.has(h))return n(this._cache.get(h)).metrics;if(this._actualSize===this._maxSize){const t=this._tick2Labels[this._oldestTick];delete this._tick2Labels[this._oldestTick],this._cache.delete(t),this._oldestTick++,this._actualSize--}t.save(),t.textBaseline="middle";const r=t.measureText(h);return t.restore(),0===r.width&&i.length||(this._cache.set(h,{metrics:r,tick:this._usageTick}),this._tick2Labels[this._usageTick]=h,this._actualSize++,this._usageTick++),r}}class Xt{constructor(t){this._priceAxisViewRenderer=null,this._rendererOptions=null,this._align="right",this._textWidthCache=t}setParams(t,i,s){this._priceAxisViewRenderer=t,this._rendererOptions=i,this._align=s}draw(t){null!==this._rendererOptions&&null!==this._priceAxisViewRenderer&&this._priceAxisViewRenderer.draw(t,this._rendererOptions,this._textWidthCache,this._align)}}class Zt{constructor(t,i,s){this._priceAxisView=t,this._textWidthCache=new Yt(50),this._dataSource=i,this._chartModel=s,this._fontSize=-1,this._renderer=new Xt(this._textWidthCache)}renderer(){const t=this._chartModel.paneForSource(this._dataSource);if(null===t)return null;const i=t.isOverlay(this._dataSource)?t.defaultVisiblePriceScale():this._dataSource.priceScale();if(null===i)return null;const s=t.priceScalePosition(i);if("overlay"===s)return null;const e=this._chartModel.priceAxisRendererOptions();return e.fontSize!==this._fontSize&&(this._fontSize=e.fontSize,this._textWidthCache.reset()),this._renderer.setParams(this._priceAxisView.paneRenderer(),e,s),this._renderer}}var Kt,Gt;!function(t){t[t.HitTestThreshold=7]="HitTestThreshold"}(Kt||(Kt={}));class Jt extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}hitTest(t,i){var s;if(!(null===(s=this._data)||void 0===s?void 0:s.visible))return null;const{y:e,lineWidth:h,externalId:n}=this._data;return i>=e-h-7&&i<=e+h+7?{hitTestData:this._data,externalId:n}:null}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;if(!1===this._data.visible)return;const r=Math.round(this._data.y*n);r<0||r>i.height||(t.lineCap="butt",t.strokeStyle=this._data.color,t.lineWidth=Math.floor(this._data.lineWidth*h),s(t,this._data.lineStyle),e(t,r,0,i.width))}}class Qt{constructor(t){this._lineRendererData={y:0,color:"rgba(0, 0, 0, 0)",lineWidth:1,lineStyle:0,visible:!1},this._lineRenderer=new Jt,this._invalidated=!0,this._series=t,this._model=t.model(),this._lineRenderer.setData(this._lineRendererData)}update(){this._invalidated=!0}renderer(){return this._series.visible()?(this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._lineRenderer):null}}class ti extends Qt{constructor(t){super(t)}_updateImpl(){this._lineRendererData.visible=!1;const t=this._series.priceScale(),i=t.mode().mode;if(2!==i&&3!==i)return;const s=this._series.options();if(!s.baseLineVisible||!this._series.visible())return;const e=this._series.firstValue();null!==e&&(this._lineRendererData.visible=!0,this._lineRendererData.y=t.priceToCoordinate(e.value,e.value),this._lineRendererData.color=s.baseLineColor,this._lineRendererData.lineWidth=s.baseLineWidth,this._lineRendererData.lineStyle=s.baseLineStyle)}}class ii extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}data(){return this._data}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){const e=this._data;if(null===e)return;const h=Math.max(1,Math.floor(i)),n=h%2/2,r=Math.round(e.center.x*i)+n,o=e.center.y*s;t.fillStyle=e.seriesLineColor,t.beginPath();const l=Math.max(2,1.5*e.seriesLineWidth)*i;t.arc(r,o,l,0,2*Math.PI,!1),t.fill(),t.fillStyle=e.fillColor,t.beginPath(),t.arc(r,o,e.radius*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=h,t.strokeStyle=e.strokeColor,t.beginPath(),t.arc(r,o,e.radius*i+h/2,0,2*Math.PI,!1),t.stroke()}}!function(t){t[t.AnimationPeriod=2600]="AnimationPeriod",t[t.Stage1Period=.25]="Stage1Period",t[t.Stage2Period=.275]="Stage2Period",t[t.Stage3Period=.475]="Stage3Period",t[t.Stage1StartCircleRadius=4]="Stage1StartCircleRadius",t[t.Stage1EndCircleRadius=10]="Stage1EndCircleRadius",t[t.Stage1StartFillAlpha=.25]="Stage1StartFillAlpha",t[t.Stage1EndFillAlpha=0]="Stage1EndFillAlpha",t[t.Stage1StartStrokeAlpha=.4]="Stage1StartStrokeAlpha",t[t.Stage1EndStrokeAlpha=.8]="Stage1EndStrokeAlpha",t[t.Stage2StartCircleRadius=10]="Stage2StartCircleRadius",t[t.Stage2EndCircleRadius=14]="Stage2EndCircleRadius",t[t.Stage2StartFillAlpha=0]="Stage2StartFillAlpha",t[t.Stage2EndFillAlpha=0]="Stage2EndFillAlpha",t[t.Stage2StartStrokeAlpha=.8]="Stage2StartStrokeAlpha",t[t.Stage2EndStrokeAlpha=0]="Stage2EndStrokeAlpha",t[t.Stage3StartCircleRadius=14]="Stage3StartCircleRadius",t[t.Stage3EndCircleRadius=14]="Stage3EndCircleRadius",t[t.Stage3StartFillAlpha=0]="Stage3StartFillAlpha",t[t.Stage3EndFillAlpha=0]="Stage3EndFillAlpha",t[t.Stage3StartStrokeAlpha=0]="Stage3StartStrokeAlpha",t[t.Stage3EndStrokeAlpha=0]="Stage3EndStrokeAlpha"}(Gt||(Gt={}));const si=[{start:0,end:.25,startRadius:4,endRadius:10,startFillAlpha:.25,endFillAlpha:0,startStrokeAlpha:.4,endStrokeAlpha:.8},{start:.25,end:.525,startRadius:10,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:.8,endStrokeAlpha:0},{start:.525,end:1,startRadius:14,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:0,endStrokeAlpha:0}];function ei(t,i,s,e){return function(t,i){if("transparent"===t)return t;const s=m(t),e=s[3];return`rgba(${s[0]}, ${s[1]}, ${s[2]}, ${i*e})`}(t,s+(e-s)*i)}function hi(t,i){const s=t%2600/2600;let e;for(const t of si)if(s>=t.start&&s<=t.end){e=t;break}h(void 0!==e,"Last price animation internal logic error");const n=(s-e.start)/(e.end-e.start);return{fillColor:ei(i,n,e.startFillAlpha,e.endFillAlpha),strokeColor:ei(i,n,e.startStrokeAlpha,e.endStrokeAlpha),radius:(r=n,o=e.startRadius,l=e.endRadius,o+(l-o)*r)};var r,o,l}class ni{constructor(t){this._renderer=new ii,this._invalidated=!0,this._stageInvalidated=!0,this._startTime=performance.now(),this._endTime=this._startTime-1,this._series=t}onDataCleared(){this._endTime=this._startTime-1,this.update()}onNewRealtimeDataReceived(){if(this.update(),2===this._series.options().lastPriceAnimation){const t=performance.now(),i=this._endTime-t;if(i>0)return void(i<650&&(this._endTime+=2600));this._startTime=t,this._endTime=t+2600}}update(){this._invalidated=!0}invalidateStage(){this._stageInvalidated=!0}visible(){return 0!==this._series.options().lastPriceAnimation}animationActive(){switch(this._series.options().lastPriceAnimation){case 0:return!1;case 1:return!0;case 2:return performance.now()<=this._endTime}}renderer(){return this._invalidated?(this._updateImpl(),this._invalidated=!1,this._stageInvalidated=!1):this._stageInvalidated&&(this._updateRendererDataStage(),this._stageInvalidated=!1),this._renderer}_updateImpl(){this._renderer.setData(null);const t=this._series.model().timeScale(),i=t.visibleStrictRange(),s=this._series.firstValue();if(null===i||null===s)return;const e=this._series.lastValueData(!0);if(e.noData||!i.contains(e.index))return;const h={x:t.indexToCoordinate(e.index),y:this._series.priceScale().priceToCoordinate(e.price,s.value)},n=e.color,r=this._series.options().lineWidth,o=hi(this._duration(),n);this._renderer.setData({seriesLineColor:n,seriesLineWidth:r,fillColor:o.fillColor,strokeColor:o.strokeColor,radius:o.radius,center:h})}_updateRendererDataStage(){const t=this._renderer.data();if(null!==t){const i=hi(this._duration(),t.seriesLineColor);t.fillColor=i.fillColor,t.strokeColor=i.strokeColor,t.radius=i.radius}}_duration(){return this.animationActive()?performance.now()-this._startTime:2599}}var ri,oi;function li(t,i){return It(Math.min(Math.max(t,12),30)*i)}function ai(t,i){switch(t){case"arrowDown":case"arrowUp":return li(i,1);case"circle":return li(i,.8);case"square":return li(i,.7)}}function ui(t){return function(t){const i=Math.ceil(t);return i%2!=0?i-1:i}(li(t,1))}function ci(t){return Math.max(li(t,.1),3)}function di(t,i,s,e,h){const n=ai("square",s),r=(n-1)/2,o=t-r,l=i-r;return e>=o&&e<=o+n&&h>=l&&h<=l+n}function fi(t,i,s,e,h){const n=(ai("arrowUp",h)-1)/2,r=(It(h/2)-1)/2;i.beginPath(),t?(i.moveTo(s-n,e),i.lineTo(s,e-n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e+n),i.lineTo(s-r,e+n),i.lineTo(s-r,e)):(i.moveTo(s-n,e),i.lineTo(s,e+n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e-n),i.lineTo(s-r,e-n),i.lineTo(s-r,e)),i.fill()}function pi(t,i,s,e,h,n){return di(i,s,e,h,n)}!function(t){t[t.MinShapeSize=12]="MinShapeSize",t[t.MaxShapeSize=30]="MaxShapeSize",t[t.MinShapeMargin=3]="MinShapeMargin"}(ri||(ri={}));class mi extends A{constructor(){super(...arguments),this._data=null,this._textWidthCache=new Yt,this._fontSize=-1,this._fontFamily="",this._font=""}setData(t){this._data=t}setParams(t,i){this._fontSize===t&&this._fontFamily===i||(this._fontSize=t,this._fontFamily=i,this._font=T(t,i),this._textWidthCache.reset())}hitTest(t,i){if(null===this._data||null===this._data.visibleRange)return null;for(let s=this._data.visibleRange.from;s=t&&h<=t+s&&n>=i-r&&n<=i+r}(t.text.x,t.text.y,t.text.width,t.text.height,i,s))||function(t,i,s){if(0===t.size)return!1;switch(t.shape){case"arrowDown":case"arrowUp":return pi(0,t.x,t.y,t.size,i,s);case"circle":return function(t,i,s,e,h){const n=2+ai("circle",s)/2,r=t-e,o=i-h;return Math.sqrt(r*r+o*o)<=n}(t.x,t.y,t.size,i,s);case"square":return di(t.x,t.y,t.size,i,s)}}(t,i,s)}function gi(t,i,s,e,h,n,r,o,l){const a=w(s)?s:s.close,u=w(s)?s:s.high,c=w(s)?s:s.low,d=w(i.size)?Math.max(i.size,0):1,f=ui(o.barSpacing())*d,p=f/2;switch(t.size=f,i.position){case"inBar":return t.y=r.priceToCoordinate(a,l),void(void 0!==t.text&&(t.text.y=t.y+p+n+.6*h));case"aboveBar":return t.y=r.priceToCoordinate(u,l)-p-e.aboveBar,void 0!==t.text&&(t.text.y=t.y-p-.6*h,e.aboveBar+=1.2*h),void(e.aboveBar+=f+n);case"belowBar":return t.y=r.priceToCoordinate(c,l)+p+e.belowBar,void 0!==t.text&&(t.text.y=t.y+p+n+.6*h,e.belowBar+=1.2*h),void(e.belowBar+=f+n)}i.position}!function(t){t[t.TextMargin=.1]="TextMargin"}(oi||(oi={}));class wi{constructor(t,i){this._invalidated=!0,this._dataInvalidated=!0,this._autoScaleMarginsInvalidated=!0,this._autoScaleMargins=null,this._renderer=new mi,this._series=t,this._model=i,this._data={items:[],visibleRange:null}}update(t){this._invalidated=!0,this._autoScaleMarginsInvalidated=!0,"data"===t&&(this._dataInvalidated=!0)}renderer(t){if(!this._series.visible())return null;this._invalidated&&this._makeValid();const i=this._model.options().layout;return this._renderer.setParams(i.fontSize,i.fontFamily),this._renderer.setData(this._data),this._renderer}autoScaleMargins(){if(this._autoScaleMarginsInvalidated){if(this._series.indexedMarkers().length>0){const t=this._model.timeScale().barSpacing(),i=ci(t),s=1.5*ui(t)+2*i;this._autoScaleMargins={above:s,below:s}}else this._autoScaleMargins=null;this._autoScaleMarginsInvalidated=!1}return this._autoScaleMargins}_makeValid(){const t=this._series.priceScale(),i=this._model.timeScale(),s=this._series.indexedMarkers();this._dataInvalidated&&(this._data.items=s.map((t=>({time:t.time,x:0,y:0,size:0,shape:t.shape,color:t.color,internalId:t.internalId,externalId:t.id,text:void 0}))),this._dataInvalidated=!1);const e=this._model.options().layout;this._data.visibleRange=null;const h=i.visibleStrictRange();if(null===h)return;const n=this._series.firstValue();if(null===n)return;if(0===this._data.items.length)return;let r=NaN;const o=ci(i.barSpacing()),l={aboveBar:o,belowBar:o};this._data.visibleRange=Tt(this._data.items,h,!0);for(let h=this._data.visibleRange.from;h0&&(u.text={content:a.text,x:0,y:0,width:0,height:0});const c=this._series.dataAt(a.time);null!==c&&gi(u,a,c,l,e.fontSize,o,t,i,n.value)}this._invalidated=!1}}class Mi extends Qt{constructor(t){super(t)}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._series.options();if(!i.priceLineVisible||!this._series.visible())return;const s=this._series.lastValueData(0===i.priceLineSource);s.noData||(t.visible=!0,t.y=s.coordinate,t.color=this._series.priceLineColor(s.color),t.lineWidth=i.priceLineWidth,t.lineStyle=i.priceLineStyle)}}class Si extends q{constructor(t){super(),this._source=t}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._source;if(!e.visible())return;const h=e.options(),n=h.lastValueVisible,r=""!==e.title(),o=0===h.seriesLastValueMode,l=e.lastValueData(!1);if(l.noData)return;n&&(t.text=this._axisText(l,n,o),t.visible=0!==t.text.length),(r||o)&&(i.text=this._paneText(l,n,r,o),i.visible=i.text.length>0);const a=e.priceLineColor(l.color),u=v(a);s.background=u.background,s.coordinate=l.coordinate,i.borderColor=e.model().backgroundColorAtYPercentFromTop(l.coordinate/e.priceScale().height()),t.borderColor=a,t.color=u.foreground,i.color=u.foreground}_paneText(t,i,s,e){let h="";const n=this._source.title();return s&&0!==n.length&&(h+=`${n} `),i&&e&&(h+=this._source.priceScale().isPercentage()?t.formattedPriceAbsolute:t.formattedPricePercentage),h.trim()}_axisText(t,i,s){return i?s?this._source.priceScale().isPercentage()?t.formattedPricePercentage:t.formattedPriceAbsolute:t.text:""}}class xi{constructor(t,i){this._minValue=t,this._maxValue=i}equals(t){return null!==t&&(this._minValue===t._minValue&&this._maxValue===t._maxValue)}clone(){return new xi(this._minValue,this._maxValue)}minValue(){return this._minValue}maxValue(){return this._maxValue}length(){return this._maxValue-this._minValue}isEmpty(){return this._maxValue===this._minValue||Number.isNaN(this._maxValue)||Number.isNaN(this._minValue)}merge(t){return null===t?this:new xi(Math.min(this.minValue(),t.minValue()),Math.max(this.maxValue(),t.maxValue()))}scaleAroundCenter(t){if(!w(t))return;if(0===this._maxValue-this._minValue)return;const i=.5*(this._maxValue+this._minValue);let s=this._maxValue-i,e=this._minValue-i;s*=t,e*=t,this._maxValue=i+s,this._minValue=i+e}shift(t){w(t)&&(this._maxValue+=t,this._minValue+=t)}toRaw(){return{minValue:this._minValue,maxValue:this._maxValue}}static fromRaw(t){return null===t?null:new xi(t.minValue,t.maxValue)}}class _i{constructor(t,i){this._priceRange=t,this._margins=i||null}priceRange(){return this._priceRange}margins(){return this._margins}toRaw(){return null===this._priceRange?null:{priceRange:this._priceRange.toRaw(),margins:this._margins||void 0}}static fromRaw(t){return null===t?null:new _i(xi.fromRaw(t.priceRange),t.margins)}}class yi extends Qt{constructor(t,i){super(t),this._priceLine=i}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._priceLine.options();if(!this._series.visible()||!i.lineVisible)return;const s=this._priceLine.yCoord();null!==s&&(t.visible=!0,t.y=s,t.color=i.color,t.lineWidth=i.lineWidth,t.lineStyle=i.lineStyle,t.externalId=this._priceLine.options().id)}}class ki extends q{constructor(t,i){super(),this._series=t,this._priceLine=i}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._priceLine.options(),h=e.axisLabelVisible,n=""!==e.title,r=this._series;if(!h||!r.visible())return;const o=this._priceLine.yCoord();if(null===o)return;n&&(i.text=e.title,i.visible=!0),i.borderColor=r.model().backgroundColorAtYPercentFromTop(o/r.priceScale().height()),t.text=this._formatPrice(e.price),t.visible=!0;const l=v(e.axisLabelColor||e.color);s.background=l.background;const a=e.axisLabelTextColor||l.foreground;t.color=a,i.color=a,s.coordinate=o}_formatPrice(t){const i=this._series.firstValue();return null===i?"":this._series.priceScale().formatPrice(t,i.value)}}class Ci{constructor(t,i){this._series=t,this._options=i,this._priceLineView=new yi(t,this),this._priceAxisView=new ki(t,this),this._panePriceAxisView=new Zt(this._priceAxisView,t,t.model())}applyOptions(t){g(this._options,t),this.update(),this._series.model().lightUpdate()}options(){return this._options}paneView(){return this._priceLineView}labelPaneView(){return this._panePriceAxisView}priceAxisView(){return this._priceAxisView}update(){this._priceLineView.update(),this._priceAxisView.update()}yCoord(){const t=this._series,i=t.priceScale();if(t.model().timeScale().isEmpty()||i.isEmpty())return null;const s=t.firstValue();return null===s?null:i.priceToCoordinate(this._options.price,s.value)}}class Ti extends G{constructor(t){super(),this._model=t}model(){return this._model}}const Pi={Bar:(t,i,s,e)=>{var h;const n=i.upColor,l=i.downColor,a=r(t(s,e)),u=o(a.value[0])<=o(a.value[3]);return{barColor:null!==(h=a.color)&&void 0!==h?h:u?n:l}},Candlestick:(t,i,s,e)=>{var h,n,l;const a=i.upColor,u=i.downColor,c=i.borderUpColor,d=i.borderDownColor,f=i.wickUpColor,p=i.wickDownColor,m=r(t(s,e)),v=o(m.value[0])<=o(m.value[3]);return{barColor:null!==(h=m.color)&&void 0!==h?h:v?a:u,barBorderColor:null!==(n=m.borderColor)&&void 0!==n?n:v?c:d,barWickColor:null!==(l=m.wickColor)&&void 0!==l?l:v?f:p}},Area:(t,i,s,e)=>{var h,n,o,l;const a=r(t(s,e));return{barColor:null!==(h=a.lineColor)&&void 0!==h?h:i.lineColor,lineColor:null!==(n=a.lineColor)&&void 0!==n?n:i.lineColor,topColor:null!==(o=a.topColor)&&void 0!==o?o:i.topColor,bottomColor:null!==(l=a.bottomColor)&&void 0!==l?l:i.bottomColor}},Baseline:(t,i,s,e)=>{var h,n,o,l,a,u;const c=r(t(s,e));return{barColor:c.value[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,topLineColor:null!==(h=c.topLineColor)&&void 0!==h?h:i.topLineColor,bottomLineColor:null!==(n=c.bottomLineColor)&&void 0!==n?n:i.bottomLineColor,topFillColor1:null!==(o=c.topFillColor1)&&void 0!==o?o:i.topFillColor1,topFillColor2:null!==(l=c.topFillColor2)&&void 0!==l?l:i.topFillColor2,bottomFillColor1:null!==(a=c.bottomFillColor1)&&void 0!==a?a:i.bottomFillColor1,bottomFillColor2:null!==(u=c.bottomFillColor2)&&void 0!==u?u:i.bottomFillColor2}},Line:(t,i,s,e)=>{var h,n;const o=r(t(s,e));return{barColor:null!==(h=o.color)&&void 0!==h?h:i.color,lineColor:null!==(n=o.color)&&void 0!==n?n:i.color}},Histogram:(t,i,s,e)=>{var h;return{barColor:null!==(h=r(t(s,e)).color)&&void 0!==h?h:i.color}}};class Ri{constructor(t){this._findBar=(t,i)=>void 0!==i?i.value:this._series.bars().valueAt(t),this._series=t,this._styleGetter=Pi[t.seriesType()]}barStyle(t,i){return this._styleGetter(this._findBar,this._series.options(),t,i)}}var Di;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(Di||(Di={}));const Ai=30;class Ei{constructor(){this._items=[],this._minMaxCache=new Map,this._rowSearchCache=new Map}last(){return this.size()>0?this._items[this._items.length-1]:null}firstIndex(){return this.size()>0?this._indexAt(0):null}lastIndex(){return this.size()>0?this._indexAt(this._items.length-1):null}size(){return this._items.length}isEmpty(){return 0===this.size()}contains(t){return null!==this._search(t,0)}valueAt(t){return this.search(t)}search(t,i=0){const s=this._search(t,i);return null===s?null:Object.assign(Object.assign({},this._valueAt(s)),{index:this._indexAt(s)})}rows(){return this._items}minMaxOnRangeCached(t,i,s){if(this.isEmpty())return null;let e=null;for(const h of s){e=Oi(e,this._minMaxOnRangeCachedImpl(t,i,h))}return e}setData(t){this._rowSearchCache.clear(),this._minMaxCache.clear(),this._items=t}_indexAt(t){return this._items[t].index}_valueAt(t){return this._items[t]}_search(t,i){const s=this._bsearch(t);if(null===s&&0!==i)switch(i){case-1:return this._searchNearestLeft(t);case 1:return this._searchNearestRight(t);default:throw new TypeError("Unknown search mode")}return s}_searchNearestLeft(t){let i=this._lowerbound(t);return i>0&&(i-=1),i!==this._items.length&&this._indexAt(i)t.indexi.index>t))}_plotMinMax(t,i,s){let e=null;for(let h=t;he.max&&(e.max=t)))}return e}_minMaxOnRangeCachedImpl(t,i,s){if(this.isEmpty())return null;let e=null;const h=r(this.firstIndex()),n=r(this.lastIndex()),o=Math.max(t,h),l=Math.min(i,n),a=Math.ceil(o/Ai)*Ai,u=Math.max(a,Math.floor(l/Ai)*Ai);{const t=this._lowerbound(o),h=this._upperbound(Math.min(l,a,i));e=Oi(e,this._plotMinMax(t,h,s))}let c=this._minMaxCache.get(s);void 0===c&&(c=new Map,this._minMaxCache.set(s,c));for(let t=Math.max(a+1,o);t{this._animationTimeoutId=null,this.model().cursorUpdate()}),0)),i.invalidateStage(),[i]):[]}paneViews(){const t=[];this._isOverlay()||t.push(this._baseHorizontalLineView),t.push(this._paneView,this._priceLineView,this._markersPaneView);const i=this._customPriceLines.map((t=>t.paneView()));return t.push(...i),t}labelPaneViews(t){return[this._panePriceAxisView,...this._customPriceLines.map((t=>t.labelPaneView()))]}priceAxisViews(t,i){if(i!==this._priceScale&&!this._isOverlay())return[];const s=[...this._priceAxisViews];for(const t of this._customPriceLines)s.push(t.priceAxisView());return s}autoscaleInfo(t,i){if(void 0!==this._options.autoscaleInfoProvider){const s=this._options.autoscaleInfoProvider((()=>{const s=this._autoscaleInfoImpl(t,i);return null===s?null:s.toRaw()}));return _i.fromRaw(s)}return this._autoscaleInfoImpl(t,i)}minMove(){return this._options.priceFormat.minMove}formatter(){return this._formatter}updateAllViews(){var t;this._paneView.update(),this._markersPaneView.update();for(const t of this._priceAxisViews)t.update();for(const t of this._customPriceLines)t.update();this._priceLineView.update(),this._baseHorizontalLineView.update(),null===(t=this._lastPriceAnimationPaneView)||void 0===t||t.update()}priceScale(){return r(super.priceScale())}markerDataAtIndex(t){if(!(("Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType)&&this._options.crosshairMarkerVisible))return null;const i=this._data.valueAt(t);if(null===i)return null;return{price:i.value[3],radius:this._markerRadius(),borderColor:this._markerBorderColor(),borderWidth:this._markerBorderWidth(),backgroundColor:this._markerBackgroundColor(t)}}title(){return this._options.title}visible(){return this._options.visible}_isOverlay(){return!et(this.priceScale().id())}_autoscaleInfoImpl(t,i){if(!M(t)||!M(i)||this._data.isEmpty())return null;const s="Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType||"Histogram"===this._seriesType?[3]:[2,1],e=this._data.minMaxOnRangeCached(t,i,s);let h=null!==e?new xi(e.min,e.max):null;if("Histogram"===this.seriesType()){const t=this._options.base,i=new xi(t,t);h=null!==h?h.merge(i):i}return new _i(h,this._markersPaneView.autoScaleMargins())}_markerRadius(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerRadius}return 0}_markerBorderColor(){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBorderColor;if(0!==t.length)return t}}return null}_markerBorderWidth(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerBorderWidth}return 0}_markerBackgroundColor(t){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBackgroundColor;if(0!==t.length)return t}}return this.barColorer().barStyle(t).barColor}_recreateFormatter(){switch(this._options.priceFormat.type){case"custom":this._formatter={format:this._options.priceFormat.formatter};break;case"volume":this._formatter=new at(this._options.priceFormat.precision);break;case"percent":this._formatter=new lt(this._options.priceFormat.precision);break;default:{const t=Math.pow(10,this._options.priceFormat.precision);this._formatter=new ot(t,this._options.priceFormat.minMove*t)}}null!==this._priceScale&&this._priceScale.updateFormatter()}_recalculateMarkers(){const t=this.model().timeScale();if(!t.hasPoints()||this._data.isEmpty())return void(this._indexedMarkers=[]);const i=r(this._data.firstIndex());this._indexedMarkers=this._markers.map(((s,e)=>{const h=r(t.timeToIndex(s.time,!0)),n=ht instanceof Bi)).reduce(((t,e)=>{if(s.isOverlay(e)||!e.visible())return t;const h=e.priceScale(),n=e.bars();if(h.isEmpty()||!n.contains(i))return t;const r=n.valueAt(i);if(null===r)return t;const l=o(e.firstValue());return t.concat([h.priceToCoordinate(r.value[3],l.value)])}),[]);if(0===l.length)return e;l.sort(((t,i)=>Math.abs(t-r)-Math.abs(i-r)));const a=l[0];return e=h.coordinateToPrice(a,n),e}}class zi extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:e,verticalPixelRatio:h}){if(null===this._data)return;const n=Math.max(1,Math.floor(e));t.lineWidth=n,function(t,i){t.save(),t.lineWidth%2&&t.translate(.5,.5),i(),t.restore()}(t,(()=>{const o=r(this._data);if(o.vertLinesVisible){t.strokeStyle=o.vertLinesColor,s(t,o.vertLineStyle),t.beginPath();for(const s of o.timeMarks){const h=Math.round(s.coord*e);t.moveTo(h,-n),t.lineTo(h,i.height+n)}t.stroke()}if(o.horzLinesVisible){t.strokeStyle=o.horzLinesColor,s(t,o.horzLineStyle),t.beginPath();for(const s of o.priceMarks){const e=Math.round(s.coord*h);t.moveTo(-n,e),t.lineTo(i.width+n,e)}t.stroke()}}))}}class Ii{constructor(t){this._renderer=new zi,this._invalidated=!0,this._pane=t}update(){this._invalidated=!0}renderer(){if(this._invalidated){const t=this._pane.model().options().grid,i={horzLinesVisible:t.horzLines.visible,vertLinesVisible:t.vertLines.visible,horzLinesColor:t.horzLines.color,vertLinesColor:t.vertLines.color,horzLineStyle:t.horzLines.style,vertLineStyle:t.vertLines.style,priceMarks:this._pane.defaultPriceScale().marks(),timeMarks:this._pane.model().timeScale().marks()||[]};this._renderer.setData(i),this._invalidated=!1}return this._renderer}}class Ni{constructor(t){this._paneView=new Ii(t)}paneView(){return this._paneView}}const Vi={logicalOffset:4,coordOffset:1e-4};function Fi(t,i){const s=100*(t-i)/i;return i<0?-s:s}function Wi(t,i){const s=Fi(t.minValue(),i),e=Fi(t.maxValue(),i);return new xi(s,e)}function ji(t,i){const s=100*(t-i)/i+100;return i<0?-s:s}function Hi(t,i){const s=ji(t.minValue(),i),e=ji(t.maxValue(),i);return new xi(s,e)}function $i(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=zt(s+i.coordOffset)+i.logicalOffset;return t<0?-e:e}function Ui(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=Math.pow(10,s-i.logicalOffset)-i.coordOffset;return t<0?-e:e}function qi(t,i){if(null===t)return null;const s=$i(t.minValue(),i),e=$i(t.maxValue(),i);return new xi(s,e)}function Yi(t,i){if(null===t)return null;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return new xi(s,e)}function Xi(t){if(null===t)return Vi;const i=Math.abs(t.maxValue()-t.minValue());if(i>=1||i<1e-15)return Vi;const s=Math.ceil(Math.abs(Math.log10(i))),e=Vi.logicalOffset+s;return{logicalOffset:e,coordOffset:1/Math.pow(10,e)}}var Zi;!function(t){t[t.TickSpanEpsilon=1e-14]="TickSpanEpsilon"}(Zi||(Zi={}));class Ki{constructor(t,i){if(this._base=t,this._integralDividers=i,function(t){if(t<0)return!1;for(let i=t;i>1;i/=10)if(i%10!=0)return!1;return!0}(this._base))this._fractionalDividers=[2,2.5,2];else{this._fractionalDividers=[];for(let t=this._base;1!==t;){if(t%2==0)this._fractionalDividers.push(2),t/=2;else{if(t%5!=0)throw new Error("unexpected base");this._fractionalDividers.push(2,2.5),t/=5}if(this._fractionalDividers.length>100)throw new Error("something wrong with base")}}}tickSpan(t,i,s){const e=0===this._base?0:1/this._base;let h=Math.pow(10,Math.max(0,Math.ceil(zt(t-i)))),n=0,r=this._integralDividers[0];for(;;){const t=Lt(h,e,1e-14)&&h>e+1e-14,i=Lt(h,s*r,1e-14),o=Lt(h,1,1e-14);if(!(t&&i&&o))break;h/=r,r=this._integralDividers[++n%this._integralDividers.length]}if(h<=e+1e-14&&(h=e),h=Math.max(1,h),this._fractionalDividers.length>0&&(o=h,l=1,a=1e-14,Math.abs(o-l)e+1e-14;)h/=r,r=this._fractionalDividers[++n%this._fractionalDividers.length];var o,l,a;return h}}class Gi{constructor(t,i,s,e){this._marks=[],this._priceScale=t,this._base=i,this._coordinateToLogicalFunc=s,this._logicalToCoordinateFunc=e}tickSpan(t,i){if(t=a?1:-1;let f=null,p=0;for(let s=l-c;s>a;s-=u){const e=this._logicalToCoordinateFunc(s,i,!0);null!==f&&Math.abs(e-f)o||(pr(t.zorder())-r(i.zorder())))}var Qi;!function(t){t[t.Normal=0]="Normal",t[t.Logarithmic=1]="Logarithmic",t[t.Percentage=2]="Percentage",t[t.IndexedTo100=3]="IndexedTo100"}(Qi||(Qi={}));const ts=new lt,is=new ot(100,1);class ss{constructor(t,i,s,e){this._height=0,this._internalHeightCache=null,this._priceRange=null,this._priceRangeSnapshot=null,this._invalidatedForRange={isValid:!1,visibleBars:null},this._marginAbove=0,this._marginBelow=0,this._onMarksChanged=new b,this._modeChanged=new b,this._dataSources=[],this._cachedOrderedSources=null,this._marksCache=null,this._scaleStartPoint=null,this._scrollStartPoint=null,this._formatter=is,this._logFormula=Xi(null),this._id=t,this._options=i,this._layoutOptions=s,this._localizationOptions=e,this._markBuilder=new Gi(this,100,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this))}id(){return this._id}options(){return this._options}applyOptions(t){if(g(this._options,t),this.updateFormatter(),void 0!==t.mode&&this.setMode({mode:t.mode}),void 0!==t.scaleMargins){const i=n(t.scaleMargins.top),s=n(t.scaleMargins.bottom);if(i<0||i>1)throw new Error(`Invalid top margin - expect value between 0 and 1, given=${i}`);if(s<0||s>1||i+s>1)throw new Error(`Invalid bottom margin - expect value between 0 and 1, given=${s}`);if(i+s>1)throw new Error(`Invalid margins - sum of margins must be less than 1, given=${i+s}`);this._invalidateInternalHeightCache(),this._marksCache=null}}isAutoScale(){return this._options.autoScale}isLog(){return 1===this._options.mode}isPercentage(){return 2===this._options.mode}isIndexedTo100(){return 3===this._options.mode}mode(){return{autoScale:this._options.autoScale,isInverted:this._options.invertScale,mode:this._options.mode}}setMode(t){const i=this.mode();let s=null;void 0!==t.autoScale&&(this._options.autoScale=t.autoScale),void 0!==t.mode&&(this._options.mode=t.mode,2!==t.mode&&3!==t.mode||(this._options.autoScale=!0),this._invalidatedForRange.isValid=!1),1===i.mode&&t.mode!==i.mode&&(!function(t,i){if(null===t)return!1;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return isFinite(s)&&isFinite(e)}(this._priceRange,this._logFormula)?this._options.autoScale=!0:(s=Yi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s))),1===t.mode&&t.mode!==i.mode&&(s=qi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s));const e=i.mode!==this._options.mode;e&&(2===i.mode||this.isPercentage())&&this.updateFormatter(),e&&(3===i.mode||this.isIndexedTo100())&&this.updateFormatter(),void 0!==t.isInverted&&i.isInverted!==t.isInverted&&(this._options.invertScale=t.isInverted,this._onIsInvertedChanged()),this._modeChanged.fire(i,this.mode())}modeChanged(){return this._modeChanged}fontSize(){return this._layoutOptions.fontSize}height(){return this._height}setHeight(t){this._height!==t&&(this._height=t,this._invalidateInternalHeightCache(),this._marksCache=null)}internalHeight(){if(this._internalHeightCache)return this._internalHeightCache;const t=this.height()-this._topMarginPx()-this._bottomMarginPx();return this._internalHeightCache=t,t}priceRange(){return this._makeSureItIsValid(),this._priceRange}setPriceRange(t,i){const s=this._priceRange;(i||null===s&&null!==t||null!==s&&!s.equals(t))&&(this._marksCache=null,this._priceRange=t)}isEmpty(){return this._makeSureItIsValid(),0===this._height||!this._priceRange||this._priceRange.isEmpty()}invertedCoordinate(t){return this.isInverted()?t:this.height()-1-t}priceToCoordinate(t,i){return this.isPercentage()?t=Fi(t,i):this.isIndexedTo100()&&(t=ji(t,i)),this._logicalToCoordinate(t,i)}pointsArrayToCoordinates(t,i,s){this._makeSureItIsValid();const e=this._bottomMarginPx(),h=r(this.priceRange()),n=h.minValue(),o=h.maxValue(),l=this.internalHeight()-1,a=this.isInverted(),u=l/(o-n),c=void 0===s?0:s.from,d=void 0===s?t.length:s.to,f=this._getCoordinateTransformer();for(let s=c;st.updateAllViews()))}updateFormatter(){this._marksCache=null;const t=this._formatterSource();let i=100;null!==t&&(i=Math.round(1/t.minMove())),this._formatter=is,this.isPercentage()?(this._formatter=ts,i=100):this.isIndexedTo100()?(this._formatter=new ot(100,1),i=100):null!==t&&(this._formatter=t.formatter()),this._markBuilder=new Gi(this,i,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this)),this._markBuilder.rebuildTickMarks()}invalidateSourcesCache(){this._cachedOrderedSources=null}_formatterSource(){return this._dataSources[0]||null}_topMarginPx(){return this.isInverted()?this._options.scaleMargins.bottom*this.height()+this._marginBelow:this._options.scaleMargins.top*this.height()+this._marginAbove}_bottomMarginPx(){return this.isInverted()?this._options.scaleMargins.top*this.height()+this._marginAbove:this._options.scaleMargins.bottom*this.height()+this._marginBelow}_makeSureItIsValid(){this._invalidatedForRange.isValid||(this._invalidatedForRange.isValid=!0,this._recalculatePriceRangeImpl())}_invalidateInternalHeightCache(){this._internalHeightCache=null}_logicalToCoordinate(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;t=this.isLog()&&t?$i(t,this._logFormula):t;const s=r(this.priceRange()),e=this._bottomMarginPx()+(this.internalHeight()-1)*(t-s.minValue())/s.length();return this.invertedCoordinate(e)}_coordinateToLogical(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;const s=this.invertedCoordinate(t),e=r(this.priceRange()),h=e.minValue()+e.length()*((s-this._bottomMarginPx())/(this.internalHeight()-1));return this.isLog()?Ui(h,this._logFormula):h}_onIsInvertedChanged(){this._marksCache=null,this._markBuilder.rebuildTickMarks()}_recalculatePriceRangeImpl(){const t=this._invalidatedForRange.visibleBars;if(null===t)return;let i=null;const s=this.sourcesForAutoScale();let e=0,h=0;for(const n of s){if(!n.visible())continue;const s=n.firstValue();if(null===s)continue;const o=n.autoscaleInfo(t.left(),t.right());let l=o&&o.priceRange();if(null!==l){switch(this._options.mode){case 1:l=qi(l,this._logFormula);break;case 2:l=Wi(l,s.value);break;case 3:l=Hi(l,s.value)}if(i=null===i?l:i.merge(r(l)),null!==o){const t=o.margins();null!==t&&(e=Math.max(e,t.above),h=Math.max(e,t.below))}}}if(e===this._marginAbove&&h===this._marginBelow||(this._marginAbove=e,this._marginBelow=h,this._marksCache=null,this._invalidateInternalHeightCache()),null!==i){if(i.minValue()===i.maxValue()){const t=this._formatterSource(),s=5*(null===t||this.isPercentage()||this.isIndexedTo100()?1:t.minMove());this.isLog()&&(i=Yi(i,this._logFormula)),i=new xi(i.minValue()-s,i.maxValue()+s),this.isLog()&&(i=qi(i,this._logFormula))}if(this.isLog()){const t=Yi(i,this._logFormula),s=Xi(t);if(n=s,o=this._logFormula,n.logicalOffset!==o.logicalOffset||n.coordOffset!==o.coordOffset){const e=null!==this._priceRangeSnapshot?Yi(this._priceRangeSnapshot,this._logFormula):null;this._logFormula=s,i=qi(t,s),null!==e&&(this._priceRangeSnapshot=qi(e,s))}}this.setPriceRange(i)}else null===this._priceRange&&(this.setPriceRange(new xi(-.5,.5)),this._logFormula=Xi(null));var n,o;this._invalidatedForRange.isValid=!0}_getCoordinateTransformer(){return this.isPercentage()?Fi:this.isIndexedTo100()?ji:this.isLog()?t=>$i(t,this._logFormula):null}_formatValue(t,i,s){return void 0===i?(void 0===s&&(s=this.formatter()),s.format(t)):i(t)}_formatPrice(t,i){return this._formatValue(t,this._localizationOptions.priceFormatter,i)}_formatPercentage(t,i){return this._formatValue(t,this._localizationOptions.percentageFormatter,i)}}class es{constructor(t,i){this._dataSources=[],this._overlaySourcesByScaleId=new Map,this._height=0,this._width=0,this._stretchFactor=1e3,this._cachedOrderedSources=null,this._destroyed=new b,this._timeScale=t,this._model=i,this._grid=new Ni(this);const s=i.options();this._leftPriceScale=this._createPriceScale("left",s.leftPriceScale),this._rightPriceScale=this._createPriceScale("right",s.rightPriceScale),this._leftPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._leftPriceScale),this),this._rightPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._rightPriceScale),this),this.applyScaleOptions(s)}applyScaleOptions(t){if(t.leftPriceScale&&this._leftPriceScale.applyOptions(t.leftPriceScale),t.rightPriceScale&&this._rightPriceScale.applyOptions(t.rightPriceScale),t.localization&&(this._leftPriceScale.updateFormatter(),this._rightPriceScale.updateFormatter()),t.overlayPriceScales){const i=Array.from(this._overlaySourcesByScaleId.values());for(const s of i){const i=r(s[0].priceScale());i.applyOptions(t.overlayPriceScales),t.localization&&i.updateFormatter()}}}priceScaleById(t){switch(t){case"left":return this._leftPriceScale;case"right":return this._rightPriceScale}return this._overlaySourcesByScaleId.has(t)?n(this._overlaySourcesByScaleId.get(t))[0].priceScale():null}destroy(){this.model().priceScalesOptionsChanged().unsubscribeAll(this),this._leftPriceScale.modeChanged().unsubscribeAll(this),this._rightPriceScale.modeChanged().unsubscribeAll(this),this._dataSources.forEach((t=>{t.destroy&&t.destroy()})),this._destroyed.fire()}stretchFactor(){return this._stretchFactor}setStretchFactor(t){this._stretchFactor=t}model(){return this._model}width(){return this._width}height(){return this._height}setWidth(t){this._width=t,this.updateAllSources()}setHeight(t){this._height=t,this._leftPriceScale.setHeight(t),this._rightPriceScale.setHeight(t),this._dataSources.forEach((i=>{if(this.isOverlay(i)){const s=i.priceScale();null!==s&&s.setHeight(t)}})),this.updateAllSources()}dataSources(){return this._dataSources}isOverlay(t){const i=t.priceScale();return null===i||this._leftPriceScale!==i&&this._rightPriceScale!==i}addDataSource(t,i,s){const e=void 0!==s?s:this._getZOrderMinMax().maxZOrder+1;this._insertDataSource(t,i,e)}removeDataSource(t){const i=this._dataSources.indexOf(t);h(-1!==i,"removeDataSource: invalid data source"),this._dataSources.splice(i,1);const s=r(t.priceScale()).id();if(this._overlaySourcesByScaleId.has(s)){const i=n(this._overlaySourcesByScaleId.get(s)),e=i.indexOf(t);-1!==e&&(i.splice(e,1),0===i.length&&this._overlaySourcesByScaleId.delete(s))}const e=t.priceScale();e&&e.dataSources().indexOf(t)>=0&&e.removeDataSource(t),null!==e&&(e.invalidateSourcesCache(),this.recalculatePriceScale(e)),this._cachedOrderedSources=null}priceScalePosition(t){return t===this._leftPriceScale?"left":t===this._rightPriceScale?"right":"overlay"}leftPriceScale(){return this._leftPriceScale}rightPriceScale(){return this._rightPriceScale}startScalePrice(t,i){t.startScale(i)}scalePriceTo(t,i){t.scaleTo(i),this.updateAllSources()}endScalePrice(t){t.endScale()}startScrollPrice(t,i){t.startScroll(i)}scrollPriceTo(t,i){t.scrollTo(i),this.updateAllSources()}endScrollPrice(t){t.endScroll()}updateAllSources(){this._dataSources.forEach((t=>{t.updateAllViews()}))}defaultPriceScale(){let t=null;return this._model.options().rightPriceScale.visible&&0!==this._rightPriceScale.dataSources().length?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&0!==this._leftPriceScale.dataSources().length?t=this._leftPriceScale:0!==this._dataSources.length&&(t=this._dataSources[0].priceScale()),null===t&&(t=this._rightPriceScale),t}defaultVisiblePriceScale(){let t=null;return this._model.options().rightPriceScale.visible?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&(t=this._leftPriceScale),t}recalculatePriceScale(t){null!==t&&t.isAutoScale()&&this._recalculatePriceScaleImpl(t)}resetPriceScale(t){const i=this._timeScale.visibleStrictRange();t.setMode({autoScale:!0}),null!==i&&t.recalculatePriceRange(i),this.updateAllSources()}momentaryAutoScale(){this._recalculatePriceScaleImpl(this._leftPriceScale),this._recalculatePriceScaleImpl(this._rightPriceScale)}recalculate(){this.recalculatePriceScale(this._leftPriceScale),this.recalculatePriceScale(this._rightPriceScale),this._dataSources.forEach((t=>{this.isOverlay(t)&&this.recalculatePriceScale(t.priceScale())})),this.updateAllSources(),this._model.lightUpdate()}orderedSources(){return null===this._cachedOrderedSources&&(this._cachedOrderedSources=Ji(this._dataSources)),this._cachedOrderedSources}onDestroyed(){return this._destroyed}grid(){return this._grid}_recalculatePriceScaleImpl(t){const i=t.sourcesForAutoScale();if(i&&i.length>0&&!this._timeScale.isEmpty()){const i=this._timeScale.visibleStrictRange();null!==i&&t.recalculatePriceRange(i)}t.updateAllViews()}_getZOrderMinMax(){const t=this.orderedSources();if(0===t.length)return{minZOrder:0,maxZOrder:0};let i=0,s=0;for(let e=0;es&&(s=h))}return{minZOrder:i,maxZOrder:s}}_insertDataSource(t,i,s){let e=this.priceScaleById(i);if(null===e&&(e=this._createPriceScale(i,this._model.options().overlayPriceScales)),this._dataSources.push(t),!et(i)){const s=this._overlaySourcesByScaleId.get(i)||[];s.push(t),this._overlaySourcesByScaleId.set(i,s)}e.addDataSource(t),t.setPriceScale(e),t.setZorder(s),this.recalculatePriceScale(e),this._cachedOrderedSources=null}_onPriceScaleModeChanged(t,i,s){i.mode!==s.mode&&this._recalculatePriceScaleImpl(t)}_createPriceScale(t,i){const s=Object.assign({visible:!0,autoScale:!0},_(i)),e=new ss(t,s,this._model.options().layout,this._model.options().localization);return e.setHeight(this.height()),e}}const hs=t=>t.getUTCFullYear();function ns(t,i,s){return i.replace(/yyyy/g,(t=>rt(hs(t),4))(t)).replace(/yy/g,(t=>rt(hs(t)%100,2))(t)).replace(/MMMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"long"}))(t,s)).replace(/MMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"short"}))(t,s)).replace(/MM/g,(t=>rt((t=>t.getUTCMonth()+1)(t),2))(t)).replace(/dd/g,(t=>rt((t=>t.getUTCDate())(t),2))(t))}class rs{constructor(t="yyyy-MM-dd",i="default"){this._dateFormat=t,this._locale=i}format(t){return ns(t,this._dateFormat,this._locale)}}class os{constructor(t){this._formatStr=t||"%h:%m:%s"}format(t){return this._formatStr.replace("%h",rt(t.getUTCHours(),2)).replace("%m",rt(t.getUTCMinutes(),2)).replace("%s",rt(t.getUTCSeconds(),2))}}const ls={dateFormat:"yyyy-MM-dd",timeFormat:"%h:%m:%s",dateTimeSeparator:" ",locale:"default"};class as{constructor(t={}){const i=Object.assign(Object.assign({},ls),t);this._dateFormatter=new rs(i.dateFormat,i.locale),this._timeFormatter=new os(i.timeFormat),this._separator=i.dateTimeSeparator}format(t){return`${this._dateFormatter.format(t)}${this._separator}${this._timeFormatter.format(t)}`}}class us{constructor(t,i=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._cache=new Map,this._tick2Labels=new Map,this._format=t,this._maxSize=i}format(t){const i=t.time,s=void 0===i.businessDay?new Date(1e3*i.timestamp).getTime():new Date(Date.UTC(i.businessDay.year,i.businessDay.month-1,i.businessDay.day)).getTime(),e=this._cache.get(s);if(void 0!==e)return e.string;if(this._actualSize===this._maxSize){const t=this._tick2Labels.get(this._oldestTick);this._tick2Labels.delete(this._oldestTick),this._cache.delete(n(t)),this._oldestTick++,this._actualSize--}const h=this._format(t);return this._cache.set(s,{string:h,tick:this._usageTick}),this._tick2Labels.set(this._usageTick,s),this._actualSize++,this._usageTick++,h}}class cs{constructor(t,i){h(t<=i,"right should be >= left"),this._left=t,this._right=i}left(){return this._left}right(){return this._right}count(){return this._right-this._left+1}contains(t){return this._left<=t&&t<=this._right}equals(t){return this._left===t.left()&&this._right===t.right()}}function ds(t,i){return null===t||null===i?t===i:t.equals(i)}class fs{constructor(){this._marksByWeight=new Map,this._cache=null}setTimeScalePoints(t,i){this._removeMarksSinceIndex(i),this._cache=null;for(let s=i;s{t<=s[0].index?i.push(e):s.splice(St(s,t,(i=>i.indexi-t))){if(!this._marksByWeight.get(s))continue;const e=i;i=[];const h=e.length;let r=0;const o=n(this._marksByWeight.get(s)),l=o.length;let a=1/0,u=-1/0;for(let s=0;s=t&&l-u>=t&&(i.push(n),u=l)}for(;rthis._points[this._points.length-1].time.timestamp)return i?this._points.length-1:null;const s=St(this._points,t.timestamp,((t,i)=>t.time.timestamp0}visibleStrictRange(){return this._updateVisibleRange(),this._visibleRange.strictRange()}visibleLogicalRange(){return this._updateVisibleRange(),this._visibleRange.logicalRange()}visibleTimeRange(){const t=this.visibleStrictRange();if(null===t)return null;const i={from:t.left(),to:t.right()};return this.timeRangeForLogicalRange(i)}timeRangeForLogicalRange(t){const i=Math.round(t.from),s=Math.round(t.to),e=r(this._firstIndex()),h=r(this._lastIndex());return{from:r(this.indexToTime(Math.max(e,i))),to:r(this.indexToTime(Math.min(h,s)))}}logicalRangeForTimeRange(t){return{from:r(this.timeToIndex(t.from,!0)),to:r(this.timeToIndex(t.to,!0))}}width(){return this._width}setWidth(t){if(!isFinite(t)||t<=0)return;if(this._width===t)return;const i=this.visibleLogicalRange(),s=this._width;if(this._width=t,this._visibleRangeInvalidated=!0,this._options.lockVisibleTimeRangeOnResize&&0!==s){const i=this._barSpacing*t/s;this._barSpacing=i}if(this._options.fixLeftEdge&&null!==i&&i.left()<=0){const i=s-t;this._rightOffset-=Math.round(i/this._barSpacing)+1,this._visibleRangeInvalidated=!0}this._correctBarSpacing(),this._correctOffset()}indexToCoordinate(t){if(this.isEmpty()||!M(t))return 0;const i=this.baseIndex()+this._rightOffset-t;return this._width-(i+.5)*this._barSpacing-1}indexesToCoordinates(t,i){const s=this.baseIndex(),e=void 0===i?0:i.from,h=void 0===i?t.length:i.to;for(let i=e;ii/2&&!u?s.needAlignCoordinate=!1:s.needAlignCoordinate=c&&t.index<=l||d&&t.index>=a,f++}return this._labels.length=f,this._timeMarksCache=this._labels,this._labels}restoreDefault(){this._visibleRangeInvalidated=!0,this.setBarSpacing(this._options.barSpacing),this.setRightOffset(this._options.rightOffset)}setBaseIndex(t){this._visibleRangeInvalidated=!0,this._baseIndexOrNull=t,this._correctOffset(),this._doFixLeftEdge()}zoom(t,i){const s=this._coordinateToFloatIndex(t),e=this.barSpacing(),h=e+i*(e/10);this.setBarSpacing(h),this._options.rightBarStaysOnScroll||this.setRightOffset(this.rightOffset()+(s-this._coordinateToFloatIndex(t)))}startScale(t){this._scrollStartPoint&&this.endScroll(),null===this._scaleStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scaleStartPoint=t,this._saveCommonTransitionsStartState()))}scaleTo(t){if(null===this._commonTransitionStartState)return;const i=Bt(this._width-t,0,this._width),s=Bt(this._width-r(this._scaleStartPoint),0,this._width);0!==i&&0!==s&&this.setBarSpacing(this._commonTransitionStartState.barSpacing*i/s)}endScale(){null!==this._scaleStartPoint&&(this._scaleStartPoint=null,this._clearCommonTransitionsStartState())}startScroll(t){null===this._scrollStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scrollStartPoint=t,this._saveCommonTransitionsStartState()))}scrollTo(t){if(null===this._scrollStartPoint)return;const i=(this._scrollStartPoint-t)/this.barSpacing();this._rightOffset=r(this._commonTransitionStartState).rightOffset+i,this._visibleRangeInvalidated=!0,this._correctOffset()}endScroll(){null!==this._scrollStartPoint&&(this._scrollStartPoint=null,this._clearCommonTransitionsStartState())}scrollToRealTime(){this.scrollToOffsetAnimated(this._options.rightOffset)}scrollToOffsetAnimated(t,i=400){if(!isFinite(t))throw new RangeError("offset is required and must be finite number");if(!isFinite(i)||i<=0)throw new RangeError("animationDuration (optional) must be finite positive number");const s=this._rightOffset,e=performance.now();this._model.setTimeScaleAnimation({finished:t=>(t-e)/i>=1,getPosition:h=>{const n=(h-e)/i;return n>=1?t:s+(t-s)*n}})}update(t,i){this._visibleRangeInvalidated=!0,this._points=t,this._tickMarks.setTimeScalePoints(t,i),this._correctOffset()}visibleBarsChanged(){return this._visibleBarsChanged}logicalRangeChanged(){return this._logicalRangeChanged}optionsApplied(){return this._optionsApplied}baseIndex(){return this._baseIndexOrNull||0}setVisibleRange(t){const i=t.count();this._setBarSpacing(this._width/i),this._rightOffset=t.right()-this.baseIndex(),this._correctOffset(),this._visibleRangeInvalidated=!0,this._model.recalculateAllPanes(),this._model.lightUpdate()}fitContent(){const t=this._firstIndex(),i=this._lastIndex();null!==t&&null!==i&&this.setVisibleRange(new cs(t,i+this._options.rightOffset))}setLogicalRange(t){const i=new cs(t.from,t.to);this.setVisibleRange(i)}formatDateTime(t){return void 0!==this._localizationOptions.timeFormatter?this._localizationOptions.timeFormatter(t.originalTime):this._dateTimeFormatter.format(new Date(1e3*t.time.timestamp))}_isAllScalingAndScrollingDisabled(){const{handleScroll:t,handleScale:i}=this._model.options();return!(t.horzTouchDrag||t.mouseWheel||t.pressedMouseMove||t.vertTouchDrag||i.axisDoubleClickReset.time||i.axisPressedMouseMove.time||i.mouseWheel||i.pinch)}_firstIndex(){return 0===this._points.length?null:0}_lastIndex(){return 0===this._points.length?null:this._points.length-1}_rightOffsetForCoordinate(t){return(this._width-1-t)/this._barSpacing}_coordinateToFloatIndex(t){const i=this._rightOffsetForCoordinate(t),s=this.baseIndex()+this._rightOffset-i;return Math.round(1e6*s)/1e6}_setBarSpacing(t){const i=this._barSpacing;this._barSpacing=t,this._correctBarSpacing(),i!==this._barSpacing&&(this._visibleRangeInvalidated=!0,this._resetTimeMarksCache())}_updateVisibleRange(){if(!this._visibleRangeInvalidated)return;if(this._visibleRangeInvalidated=!1,this.isEmpty())return void this._setVisibleRange(ps.invalid());const t=this.baseIndex(),i=this._width/this._barSpacing,s=this._rightOffset+t,e=new cs(s-i+1,s);this._setVisibleRange(new ps(e))}_correctBarSpacing(){const t=this._minBarSpacing();if(this._barSpacingt&&(this._barSpacing=t,this._visibleRangeInvalidated=!0)}}_minBarSpacing(){return this._options.fixLeftEdge&&this._options.fixRightEdge&&0!==this._points.length?this._width/this._points.length:this._options.minBarSpacing}_correctOffset(){const t=this._maxRightOffset();this._rightOffset>t&&(this._rightOffset=t,this._visibleRangeInvalidated=!0);const i=this._minRightOffset();null!==i&&this._rightOffsetthis._formatLabelImpl(t))),this._formattedByWeight.set(t.weight,i)),i.format(t)}_formatLabelImpl(t){const i=function(t,i,s){switch(t){case 0:case 10:return i?s?4:3:2;case 20:case 21:case 22:case 30:case 31:case 32:case 33:return i?3:2;case 50:return 2;case 60:return 1;case 70:return 0}}(t.weight,this._options.timeVisible,this._options.secondsVisible);if(void 0!==this._options.tickMarkFormatter){const s=this._options.tickMarkFormatter(t.originalTime,i,this._localizationOptions.locale);if(null!==s)return s}return function(t,i,s){const e={};switch(i){case 0:e.year="numeric";break;case 1:e.month="short";break;case 2:e.day="numeric";break;case 3:e.hour12=!1,e.hour="2-digit",e.minute="2-digit";break;case 4:e.hour12=!1,e.hour="2-digit",e.minute="2-digit",e.second="2-digit"}const h=void 0===t.businessDay?new Date(1e3*t.timestamp):new Date(Date.UTC(t.businessDay.year,t.businessDay.month-1,t.businessDay.day));return new Date(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate(),h.getUTCHours(),h.getUTCMinutes(),h.getUTCSeconds(),h.getUTCMilliseconds()).toLocaleString(s,e)}(t.time,i,this._localizationOptions.locale)}_setVisibleRange(t){const i=this._visibleRange;this._visibleRange=t,ds(i.strictRange(),this._visibleRange.strictRange())||this._visibleBarsChanged.fire(),ds(i.logicalRange(),this._visibleRange.logicalRange())||this._logicalRangeChanged.fire(),this._resetTimeMarksCache()}_resetTimeMarksCache(){this._timeMarksCache=null}_invalidateTickMarks(){this._resetTimeMarksCache(),this._formattedByWeight.clear()}_updateDateTimeFormatter(){const t=this._localizationOptions.dateFormat;this._options.timeVisible?this._dateTimeFormatter=new as({dateFormat:t,timeFormat:this._options.secondsVisible?"%h:%m:%s":"%h:%m",dateTimeSeparator:" ",locale:this._localizationOptions.locale}):this._dateTimeFormatter=new rs(t,this._localizationOptions.locale)}_doFixLeftEdge(){if(!this._options.fixLeftEdge)return;const t=this._firstIndex();if(null===t)return;const i=this.visibleStrictRange();if(null===i)return;const s=i.left()-t;if(s<0){const t=this._rightOffset-s-1;this.setRightOffset(t)}this._correctBarSpacing()}_doFixRightEdge(){this._correctOffset(),this._correctBarSpacing()}}class ys extends A{constructor(t){super(),this._metricsCache=new Map,this._data=t}_drawImpl(t){}_drawBackgroundImpl(t){if(!this._data.visible)return;const{context:i,mediaSize:s}=t;let e=0;for(const t of this._data.lines){if(0===t.text.length)continue;i.font=t.font;const h=this._metrics(i,t.text);h>s.width?t.zoom=s.width/h:t.zoom=1,e+=t.lineHeight*t.zoom}let h=0;switch(this._data.vertAlign){case"top":h=0;break;case"center":h=Math.max((s.height-e)/2,0);break;case"bottom":h=Math.max(s.height-e,0)}i.fillStyle=this._data.color;for(const t of this._data.lines){i.save();let e=0;switch(this._data.horzAlign){case"left":i.textAlign="left",e=t.lineHeight/2;break;case"center":i.textAlign="center",e=s.width/2;break;case"right":i.textAlign="right",e=s.width-1-t.lineHeight/2}i.translate(e,h),i.textBaseline="top",i.font=t.font,i.scale(t.zoom,t.zoom),i.fillText(t.text,0,t.vertOffset),i.restore(),h+=t.lineHeight*t.zoom}}_metrics(t,i){const s=this._fontCache(t.font);let e=s.get(i);return void 0===e&&(e=t.measureText(i).width,s.set(i,e)),e}_fontCache(t){let i=this._metricsCache.get(t);return void 0===i&&(i=new Map,this._metricsCache.set(t,i)),i}}class ks{constructor(t){this._invalidated=!0,this._rendererData={visible:!1,color:"",lines:[],vertAlign:"center",horzAlign:"center"},this._renderer=new ys(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.options(),i=this._rendererData;i.visible=t.visible,i.visible&&(i.color=t.color,i.horzAlign=t.horzAlign,i.vertAlign=t.vertAlign,i.lines=[{text:t.text,font:T(t.fontSize,t.fontFamily,t.fontStyle),lineHeight:1.2*t.fontSize,vertOffset:0,zoom:0}])}}class Cs extends G{constructor(t,i){super(),this._options=i,this._paneView=new ks(this)}priceAxisViews(){return[]}paneViews(){return[this._paneView]}options(){return this._options}updateAllViews(){this._paneView.update()}}!function(t){t[t.Top=0]="Top",t[t.Bottom=1]="Bottom"}(bs||(bs={})),function(t){t[t.OnTouchEnd=0]="OnTouchEnd",t[t.OnNextTap=1]="OnNextTap"}(gs||(gs={}));class Ts{constructor(t,i){this._panes=[],this._serieses=[],this._width=0,this._hoveredSource=null,this._priceScalesOptionsChanged=new b,this._crosshairMoved=new b,this._gradientColorsCache=null,this._invalidateHandler=t,this._options=i,this._rendererOptionsProvider=new R(this),this._timeScale=new _s(this,i.timeScale,this._options.localization),this._crosshair=new st(this,i.crosshair),this._magnet=new Li(i.crosshair),this._watermark=new Cs(this,i.watermark),this.createPane(),this._panes[0].setStretchFactor(2e3),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1)}fullUpdate(){this._invalidate(ht.full())}lightUpdate(){this._invalidate(ht.light())}cursorUpdate(){this._invalidate(new ht(1))}updateSource(t){const i=this._invalidationMaskForSource(t);this._invalidate(i)}hoveredSource(){return this._hoveredSource}setHoveredSource(t){const i=this._hoveredSource;this._hoveredSource=t,null!==i&&this.updateSource(i.source),null!==t&&this.updateSource(t.source)}options(){return this._options}applyOptions(t){g(this._options,t),this._panes.forEach((i=>i.applyScaleOptions(t))),void 0!==t.timeScale&&this._timeScale.applyOptions(t.timeScale),void 0!==t.localization&&this._timeScale.applyLocalizationOptions(t.localization),(t.leftPriceScale||t.rightPriceScale)&&this._priceScalesOptionsChanged.fire(),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1),this.fullUpdate()}applyPriceScaleOptions(t,i){if("left"===t)return void this.applyOptions({leftPriceScale:i});if("right"===t)return void this.applyOptions({rightPriceScale:i});const s=this.findPriceScale(t);null!==s&&(s.priceScale.applyOptions(i),this._priceScalesOptionsChanged.fire())}findPriceScale(t){for(const i of this._panes){const s=i.priceScaleById(t);if(null!==s)return{pane:i,priceScale:s}}return null}timeScale(){return this._timeScale}panes(){return this._panes}watermarkSource(){return this._watermark}crosshairSource(){return this._crosshair}crosshairMoved(){return this._crosshairMoved}setPaneHeight(t,i){t.setHeight(i),this.recalculateAllPanes()}setWidth(t){this._width=t,this._timeScale.setWidth(this._width),this._panes.forEach((i=>i.setWidth(t))),this.recalculateAllPanes()}createPane(t){const i=new es(this._timeScale,this);void 0!==t?this._panes.splice(t,0,i):this._panes.push(i);const s=void 0===t?this._panes.length-1:t,e=ht.full();return e.invalidatePane(s,{level:0,autoScale:!0}),this._invalidate(e),i}startScalePrice(t,i,s){t.startScalePrice(i,s)}scalePriceTo(t,i,s){t.scalePriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2))}endScalePrice(t,i){t.endScalePrice(i),this._invalidate(this._paneInvalidationMask(t,2))}startScrollPrice(t,i,s){i.isAutoScale()||t.startScrollPrice(i,s)}scrollPriceTo(t,i,s){i.isAutoScale()||(t.scrollPriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2)))}endScrollPrice(t,i){i.isAutoScale()||(t.endScrollPrice(i),this._invalidate(this._paneInvalidationMask(t,2)))}resetPriceScale(t,i){t.resetPriceScale(i),this._invalidate(this._paneInvalidationMask(t,2))}startScaleTime(t){this._timeScale.startScale(t)}zoomTime(t,i){const s=this.timeScale();if(s.isEmpty()||0===i)return;const e=s.width();t=Math.max(1,Math.min(t,e)),s.zoom(t,i),this.recalculateAllPanes()}scrollChart(t){this.startScrollTime(0),this.scrollTimeTo(t),this.endScrollTime()}scaleTimeTo(t){this._timeScale.scaleTo(t),this.recalculateAllPanes()}endScaleTime(){this._timeScale.endScale(),this.lightUpdate()}startScrollTime(t){this._timeScale.startScroll(t)}scrollTimeTo(t){this._timeScale.scrollTo(t),this.recalculateAllPanes()}endScrollTime(){this._timeScale.endScroll(),this.lightUpdate()}serieses(){return this._serieses}setAndSaveCurrentPosition(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},s)}setAndSaveCurrentPositionFire(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),s&&this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},null)}clearCurrentPosition(){this.crosshairSource().clearPosition(),this.cursorUpdate(),this._crosshairMoved.fire(null,null,null)}updateCrosshair(){const t=this._crosshair.pane();if(null!==t){const i=this._crosshair.originCoordX(),s=this._crosshair.originCoordY();this.setAndSaveCurrentPosition(i,s,null,t)}this._crosshair.updateAllViews()}updateTimeScale(t,i,s){const e=this._timeScale.indexToTime(0);void 0!==i&&void 0!==s&&this._timeScale.update(i,s);const h=this._timeScale.indexToTime(0),n=this._timeScale.baseIndex(),r=this._timeScale.visibleStrictRange();if(null!==r&&null!==e&&null!==h){const i=r.contains(n),s=e.timestamp>h.timestamp,o=null!==t&&t>n&&!s,l=i&&this._timeScale.options().shiftVisibleRangeOnNewBar;if(o&&!l){const i=t-n;this._timeScale.setRightOffset(this._timeScale.rightOffset()-i)}}this._timeScale.setBaseIndex(t)}recalculatePane(t){null!==t&&t.recalculate()}paneForSource(t){const i=this._panes.find((i=>i.orderedSources().includes(t)));return void 0===i?null:i}recalculateAllPanes(){this._watermark.updateAllViews(),this._panes.forEach((t=>t.recalculate())),this.updateCrosshair()}destroy(){this._panes.forEach((t=>t.destroy())),this._panes.length=0,this._options.localization.priceFormatter=void 0,this._options.localization.percentageFormatter=void 0,this._options.localization.timeFormatter=void 0}rendererOptionsProvider(){return this._rendererOptionsProvider}priceAxisRendererOptions(){return this._rendererOptionsProvider.options()}priceScalesOptionsChanged(){return this._priceScalesOptionsChanged}createSeries(t,i){const s=this._panes[0],e=this._createSeries(i,t,s);return this._serieses.push(e),1===this._serieses.length?this.fullUpdate():this.lightUpdate(),e}removeSeries(t){const i=this.paneForSource(t),s=this._serieses.indexOf(t);h(-1!==s,"Series not found"),this._serieses.splice(s,1),r(i).removeDataSource(t),t.destroy&&t.destroy()}moveSeriesToScale(t,i){const s=r(this.paneForSource(t));s.removeDataSource(t);const e=this.findPriceScale(i);if(null===e){const e=t.zorder();s.addDataSource(t,i,e)}else{const h=e.pane===s?t.zorder():void 0;e.pane.addDataSource(t,i,h)}}fitContent(){const t=ht.light();t.setFitContent(),this._invalidate(t)}setTargetLogicalRange(t){const i=ht.light();i.applyRange(t),this._invalidate(i)}resetTimeScale(){const t=ht.light();t.resetTimeScale(),this._invalidate(t)}setBarSpacing(t){const i=ht.light();i.setBarSpacing(t),this._invalidate(i)}setRightOffset(t){const i=ht.light();i.setRightOffset(t),this._invalidate(i)}setTimeScaleAnimation(t){const i=ht.light();i.setTimeScaleAnimation(t),this._invalidate(i)}stopTimeScaleAnimation(){const t=ht.light();t.stopTimeScaleAnimation(),this._invalidate(t)}defaultVisiblePriceScaleId(){return this._options.rightPriceScale.visible?"right":"left"}backgroundBottomColor(){return this._backgroundBottomColor}backgroundTopColor(){return this._backgroundTopColor}backgroundColorAtYPercentFromTop(t){const i=this._backgroundBottomColor,s=this._backgroundTopColor;if(i===s)return i;if(t=Math.max(0,Math.min(100,Math.round(100*t))),null===this._gradientColorsCache||this._gradientColorsCache.topColor!==s||this._gradientColorsCache.bottomColor!==i)this._gradientColorsCache={topColor:s,bottomColor:i,colors:new Map};else{const i=this._gradientColorsCache.colors.get(t);if(void 0!==i)return i}const e=function(t,i,s){const[e,h,n,r]=m(t),[o,l,c,d]=m(i),f=[a(e+s*(o-e)),a(h+s*(l-h)),a(n+s*(c-n)),u(r+s*(d-r))];return`rgba(${f[0]}, ${f[1]}, ${f[2]}, ${f[3]})`}(s,i,t/100);return this._gradientColorsCache.colors.set(t,e),e}_paneInvalidationMask(t,i){const s=new ht(i);if(null!==t){const e=this._panes.indexOf(t);s.invalidatePane(e,{level:i})}return s}_invalidationMaskForSource(t,i){return void 0===i&&(i=2),this._paneInvalidationMask(this.paneForSource(t),i)}_invalidate(t){this._invalidateHandler&&this._invalidateHandler(t),this._panes.forEach((t=>t.grid().paneView().update()))}_createSeries(t,i,s){const e=new Bi(this,t,i),h=void 0!==t.priceScaleId?t.priceScaleId:this.defaultVisiblePriceScaleId();return s.addDataSource(e,h),et(h)||e.applyOptions(t),e}_getBackgroundColor(t){const i=this._options.layout;return"gradient"===i.background.type?0===t?i.background.topColor:i.background.bottomColor:i.background.color}}function Ps(t){return!w(t)&&!S(t)}function Rs(t){return w(t)}function Ds(t){var i=t.width,s=t.height;if(i<0)throw new Error("Negative width is not allowed for Size");if(s<0)throw new Error("Negative height is not allowed for Size");return{width:i,height:s}}function As(t,i){return t.width===i.width&&t.height===i.height}!function(t){t[t.Disabled=0]="Disabled",t[t.Continuous=1]="Continuous",t[t.OnDataUpdate=2]="OnDataUpdate"}(ws||(ws={})),function(t){t[t.LastPriceAndPercentageValue=0]="LastPriceAndPercentageValue",t[t.LastValueAccordingToScale=1]="LastValueAccordingToScale"}(Ms||(Ms={})),function(t){t[t.LastBar=0]="LastBar",t[t.LastVisible=1]="LastVisible"}(Ss||(Ss={})),function(t){t.Solid="solid",t.VerticalGradient="gradient"}(xs||(xs={}));var Es=function(){function t(t){var i=this;this._resolutionListener=function(){return i._onResolutionChanged()},this._resolutionMediaQueryList=null,this._observers=[],this._window=t,this._installResolutionListener()}return t.prototype.dispose=function(){this._uninstallResolutionListener(),this._window=null},Object.defineProperty(t.prototype,"value",{get:function(){return this._window.devicePixelRatio},enumerable:!1,configurable:!0}),t.prototype.subscribe=function(t){var i=this,s={next:t};return this._observers.push(s),{unsubscribe:function(){i._observers=i._observers.filter((function(t){return t!==s}))}}},t.prototype._installResolutionListener=function(){if(null!==this._resolutionMediaQueryList)throw new Error("Resolution listener is already installed");var t=this._window.devicePixelRatio;this._resolutionMediaQueryList=this._window.matchMedia("all and (resolution: ".concat(t,"dppx)")),this._resolutionMediaQueryList.addListener(this._resolutionListener)},t.prototype._uninstallResolutionListener=function(){null!==this._resolutionMediaQueryList&&(this._resolutionMediaQueryList.removeListener(this._resolutionListener),this._resolutionMediaQueryList=null)},t.prototype._reinstallResolutionListener=function(){this._uninstallResolutionListener(),this._installResolutionListener()},t.prototype._onResolutionChanged=function(){var t=this;this._observers.forEach((function(i){return i.next(t._window.devicePixelRatio)})),this._reinstallResolutionListener()},t}();var Os=function(){function t(t,i,s){var e;this._canvasElement=null,this._bitmapSizeChangedListeners=[],this._suggestedBitmapSize=null,this._suggestedBitmapSizeChangedListeners=[],this._devicePixelRatioObservable=null,this._canvasElementResizeObserver=null,this._canvasElement=t,this._canvasElementClientSize=Ds({width:this._canvasElement.clientWidth,height:this._canvasElement.clientHeight}),this._transformBitmapSize=null!=i?i:function(t){return t},this._allowResizeObserver=null===(e=null==s?void 0:s.allowResizeObserver)||void 0===e||e,this._chooseAndInitObserver()}return t.prototype.dispose=function(){var t,i;if(null===this._canvasElement)throw new Error("Object is disposed");null===(t=this._canvasElementResizeObserver)||void 0===t||t.disconnect(),this._canvasElementResizeObserver=null,null===(i=this._devicePixelRatioObservable)||void 0===i||i.dispose(),this._devicePixelRatioObservable=null,this._suggestedBitmapSizeChangedListeners.length=0,this._bitmapSizeChangedListeners.length=0,this._canvasElement=null},Object.defineProperty(t.prototype,"canvasElement",{get:function(){if(null===this._canvasElement)throw new Error("Object is disposed");return this._canvasElement},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"canvasElementClientSize",{get:function(){return this._canvasElementClientSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bitmapSize",{get:function(){return Ds({width:this.canvasElement.width,height:this.canvasElement.height})},enumerable:!1,configurable:!0}),t.prototype.resizeCanvasElement=function(t){this._canvasElementClientSize=Ds(t),this.canvasElement.style.width="".concat(this._canvasElementClientSize.width,"px"),this.canvasElement.style.height="".concat(this._canvasElementClientSize.height,"px"),this._invalidateBitmapSize()},t.prototype.subscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners=this._bitmapSizeChangedListeners.filter((function(i){return i!==t}))},Object.defineProperty(t.prototype,"suggestedBitmapSize",{get:function(){return this._suggestedBitmapSize},enumerable:!1,configurable:!0}),t.prototype.subscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners=this._suggestedBitmapSizeChangedListeners.filter((function(i){return i!==t}))},t.prototype.applySuggestedBitmapSize=function(){if(null!==this._suggestedBitmapSize){var t=this._suggestedBitmapSize;this._suggestedBitmapSize=null,this._resizeBitmap(t),this._emitSuggestedBitmapSizeChanged(t,this._suggestedBitmapSize)}},t.prototype._resizeBitmap=function(t){var i=this.bitmapSize;As(i,t)||(this.canvasElement.width=t.width,this.canvasElement.height=t.height,this._emitBitmapSizeChanged(i,t))},t.prototype._emitBitmapSizeChanged=function(t,i){var s=this;this._bitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._suggestNewBitmapSize=function(t){var i=this._suggestedBitmapSize,s=Ds(this._transformBitmapSize(t,this._canvasElementClientSize)),e=As(this.bitmapSize,s)?null:s;null===i&&null===e||null!==i&&null!==e&&As(i,e)||(this._suggestedBitmapSize=e,this._emitSuggestedBitmapSizeChanged(i,e))},t.prototype._emitSuggestedBitmapSizeChanged=function(t,i){var s=this;this._suggestedBitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._chooseAndInitObserver=function(){var t=this;this._allowResizeObserver?new Promise((function(t){var i=new ResizeObserver((function(s){t(s.every((function(t){return"devicePixelContentBoxSize"in t}))),i.disconnect()}));i.observe(document.body,{box:"device-pixel-content-box"})})).catch((function(){return!1})).then((function(i){return i?t._initResizeObserver():t._initDevicePixelRatioObservable()})):this._initDevicePixelRatioObservable()},t.prototype._initDevicePixelRatioObservable=function(){var t=this;if(null!==this._canvasElement){var i=Bs(this._canvasElement);if(null===i)throw new Error("No window is associated with the canvas");this._devicePixelRatioObservable=function(t){return new Es(t)}(i),this._devicePixelRatioObservable.subscribe((function(){return t._invalidateBitmapSize()})),this._invalidateBitmapSize()}},t.prototype._invalidateBitmapSize=function(){var t,i;if(null!==this._canvasElement){var s=Bs(this._canvasElement);if(null!==s){var e=null!==(i=null===(t=this._devicePixelRatioObservable)||void 0===t?void 0:t.value)&&void 0!==i?i:s.devicePixelRatio,h=this._canvasElement.getClientRects(),n=void 0!==h[0]?function(t,i){return Ds({width:Math.round(t.left*i+t.width*i)-Math.round(t.left*i),height:Math.round(t.top*i+t.height*i)-Math.round(t.top*i)})}(h[0],e):Ds({width:this._canvasElementClientSize.width*e,height:this._canvasElementClientSize.height*e});this._suggestNewBitmapSize(n)}}},t.prototype._initResizeObserver=function(){var t=this;null!==this._canvasElement&&(this._canvasElementResizeObserver=new ResizeObserver((function(i){var s=i.find((function(i){return i.target===t._canvasElement}));if(s&&s.devicePixelContentBoxSize&&s.devicePixelContentBoxSize[0]){var e=s.devicePixelContentBoxSize[0],h=Ds({width:e.inlineSize,height:e.blockSize});t._suggestNewBitmapSize(h)}})),this._canvasElementResizeObserver.observe(this._canvasElement,{box:"device-pixel-content-box"}))},t}();function Bs(t){return t.ownerDocument.defaultView}var Ls=function(){function t(t,i,s){if(0===i.width||0===i.height)throw new TypeError("Rendering target could only be created on a media with positive width and height");if(this._mediaSize=i,0===s.width||0===s.height)throw new TypeError("Rendering target could only be created using a bitmap with positive integer width and height");this._bitmapSize=s,this._context=t}return t.prototype.useMediaCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),this._context.scale(this._horizontalPixelRatio,this._verticalPixelRatio),t({context:this._context,mediaSize:this._mediaSize})}finally{this._context.restore()}},t.prototype.useBitmapCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),t({context:this._context,mediaSize:this._mediaSize,bitmapSize:this._bitmapSize,horizontalPixelRatio:this._horizontalPixelRatio,verticalPixelRatio:this._verticalPixelRatio})}finally{this._context.restore()}},Object.defineProperty(t.prototype,"_horizontalPixelRatio",{get:function(){return this._bitmapSize.width/this._mediaSize.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"_verticalPixelRatio",{get:function(){return this._bitmapSize.height/this._mediaSize.height},enumerable:!1,configurable:!0}),t}();function zs(t,i){var s=t.canvasElementClientSize;if(0===s.width||0===s.height)return null;var e=t.bitmapSize;if(0===e.width||0===e.height)return null;var h=t.canvasElement.getContext("2d",i);return null===h?null:new Ls(h,s,e)}const Is="undefined"!=typeof window;function Ns(){return!!Is&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1}function Vs(){return!!Is&&/iPhone|iPad|iPod/.test(window.navigator.platform)}function Fs(t){return t+t%2}var Ws,js,Hs,$s,Us,qs,Ys,Xs;function Zs(t,i){return t.position-i.position}function Ks(t,i,s){const e=(t.position-i.position)/(t.time-i.time);return Math.sign(e)*Math.min(Math.abs(e),s)}!function(t){t[t.MaxStartDelay=50]="MaxStartDelay",t[t.EpsilonDistance=1]="EpsilonDistance"}(Ws||(Ws={}));class Gs{constructor(t,i,s,e){this._position1=null,this._position2=null,this._position3=null,this._position4=null,this._animationStartPosition=null,this._durationMsecs=0,this._speedPxPerMsec=0,this._minSpeed=t,this._maxSpeed=i,this._dumpingCoeff=s,this._minMove=e}addPosition(t,i){if(null!==this._position1){if(this._position1.time===i)return void(this._position1.position=t);if(Math.abs(this._position1.position-t)50)return;let s=0;const e=Ks(this._position1,this._position2,this._maxSpeed),h=Zs(this._position1,this._position2),n=[e],r=[h];if(s+=h,null!==this._position3){const t=Ks(this._position2,this._position3,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position2,this._position3);if(n.push(t),r.push(i),s+=i,null!==this._position4){const t=Ks(this._position3,this._position4,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position3,this._position4);n.push(t),r.push(i),s+=i}}}}let o=0;for(let t=0;t({width:Math.max(t.width,i.width),height:Math.max(t.height,i.height)})});return e.resizeCanvasElement(i),e}function Qs(t){Is&&void 0!==window.chrome&&t.addEventListener("mousedown",(t=>{if(1===t.button)return t.preventDefault(),!1}))}!function(t){t[t.ResetClick=500]="ResetClick",t[t.LongTap=240]="LongTap",t[t.PreventFiresTouchEvents=500]="PreventFiresTouchEvents"}(js||(js={})),function(t){t[t.CancelClickManhattanDistance=5]="CancelClickManhattanDistance",t[t.CancelTapManhattanDistance=5]="CancelTapManhattanDistance",t[t.DoubleClickManhattanDistance=5]="DoubleClickManhattanDistance",t[t.DoubleTapManhattanDistance=30]="DoubleTapManhattanDistance"}(Hs||(Hs={}));class te{constructor(t,i,s){this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartPosition=null,this._touchMoveStartPosition=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddlePoint=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!Vs(),this._onFirefoxOutsideMouseUp=t=>{this._mouseUpHandler(t)},this._onMobileSafariDoubleClick=t=>{if(this._firesTouchEvents(t)){const i=this._makeCompatEvent(t);if(++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._tapPosition);s<30&&!this._cancelTap&&this._processTouchEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}}else{const i=this._makeCompatEvent(t);if(++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}}},this._target=t,this._handler=i,this._options=s,this._init()}destroy(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()}_mouseEnterHandler(t){this._unsubscribeMousemove&&this._unsubscribeMousemove();const i=this._mouseMoveHandler.bind(this);if(this._unsubscribeMousemove=()=>{this._target.removeEventListener("mousemove",i)},this._target.addEventListener("mousemove",i),this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseEnterEvent),this._acceptMouseLeave=!0}_resetClickTimeout(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_resetTapTimeout(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_mouseMoveHandler(t){if(this._mousePressed||null!==this._touchMoveStartPosition)return;if(this._firesTouchEvents(t))return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseMoveEvent),this._acceptMouseLeave=!0}_touchMoveHandler(t){const i=ne(t.changedTouches,r(this._activeTouchId));if(null===i)return;if(this._lastTouchEventTimeStamp=he(t),null!==this._startPinchMiddlePoint)return;if(this._preventTouchDragProcess)return;this._pinchPrevented=!0;const s=this._touchMouseMoveWithDownInfo(ee(i),r(this._touchMoveStartPosition)),{xOffset:e,yOffset:h,manhattanDistance:n}=s;if(this._touchMoveExceededManhattanDistance||!(n<5)){if(!this._touchMoveExceededManhattanDistance){const t=.5*e,i=h>=t&&!this._options.treatVertTouchDragAsPageScroll(),s=t>h&&!this._options.treatHorzTouchDragAsPageScroll();i||s||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}if(!this._preventTouchDragProcess){const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.touchMoveEvent),se(t)}}}_mouseMoveWithDownHandler(t){if(0!==t.button)return;const i=this._touchMouseMoveWithDownInfo(ee(t),r(this._mouseMoveStartPosition)),{manhattanDistance:s}=i;if(s>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick){const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.pressedMouseMoveEvent)}}_touchMouseMoveWithDownInfo(t,i){const s=Math.abs(i.x-t.x),e=Math.abs(i.y-t.y);return{xOffset:s,yOffset:e,manhattanDistance:s+e}}_touchEndHandler(t){let i=ne(t.changedTouches,r(this._activeTouchId));if(null===i&&0===t.touches.length&&(i=t.changedTouches[0]),null===i)return;this._activeTouchId=null,this._lastTouchEventTimeStamp=he(t),this._clearLongTapTimeout(),this._touchMoveStartPosition=null,this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);const s=this._makeCompatEvent(t,i);if(this._processTouchEvent(s,this._handler.touchEndEvent),++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:t}=this._touchMouseMoveWithDownInfo(ee(i),this._tapPosition);t<30&&!this._cancelTap&&this._processTouchEvent(s,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processTouchEvent(s,this._handler.tapEvent),this._handler.tapEvent&&se(t));0===this._tapCount&&se(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,se(t))}_mouseUpHandler(t){if(0!==t.button)return;const i=this._makeCompatEvent(t);if(this._mouseMoveStartPosition=null,this._mousePressed=!1,this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),Ns()){this._target.ownerDocument.documentElement.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processMouseEvent(i,this._handler.mouseUpEvent),++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processMouseEvent(i,this._handler.mouseClickEvent)}_clearLongTapTimeout(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)}_touchStartHandler(t){if(null!==this._activeTouchId)return;const i=t.changedTouches[0];this._activeTouchId=i.identifier,this._lastTouchEventTimeStamp=he(t);const s=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartPosition=ee(i),this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);{const i=this._touchMoveHandler.bind(this),e=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=()=>{s.removeEventListener("touchmove",i),s.removeEventListener("touchend",e)},s.addEventListener("touchmove",i,{passive:!1}),s.addEventListener("touchend",e,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),240)}const e=this._makeCompatEvent(t,i);this._processTouchEvent(e,this._handler.touchStartEvent),this._tapTimeoutId||(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapPosition=ee(i))}_mouseDownHandler(t){if(0!==t.button)return;const i=this._target.ownerDocument.documentElement;Ns()&&i.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartPosition=ee(t),this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);{const t=this._mouseMoveWithDownHandler.bind(this),s=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=()=>{i.removeEventListener("mousemove",t),i.removeEventListener("mouseup",s)},i.addEventListener("mousemove",t),i.addEventListener("mouseup",s)}if(this._mousePressed=!0,this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseDownEvent),this._clickTimeoutId||(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickPosition=ee(t))}_init(){this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));{const t=this._target.ownerDocument,i=t=>{this._handler.mouseDownOutsideEvent&&(t.composed&&this._target.contains(t.composedPath()[0])||t.target&&this._target.contains(t.target)||this._handler.mouseDownOutsideEvent())};this._unsubscribeOutsideTouchEvents=()=>{t.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=()=>{t.removeEventListener("mousedown",i)},t.addEventListener("mousedown",i),t.addEventListener("touchstart",i,{passive:!0})}Vs()&&(this._unsubscribeMobileSafariEvents=()=>{this._target.removeEventListener("dblclick",this._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),Qs(this._target),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",(()=>{}),{passive:!1})}_initPinch(){void 0===this._handler.pinchStartEvent&&void 0===this._handler.pinchEvent&&void 0===this._handler.pinchEndEvent||(this._target.addEventListener("touchstart",(t=>this._checkPinchState(t.touches)),{passive:!0}),this._target.addEventListener("touchmove",(t=>{if(2===t.touches.length&&null!==this._startPinchMiddlePoint&&void 0!==this._handler.pinchEvent){const i=ie(t.touches[0],t.touches[1])/this._startPinchDistance;this._handler.pinchEvent(this._startPinchMiddlePoint,i),se(t)}}),{passive:!1}),this._target.addEventListener("touchend",(t=>{this._checkPinchState(t.touches)})))}_checkPinchState(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)}_startPinch(t){const i=this._target.getBoundingClientRect()||{left:0,top:0};this._startPinchMiddlePoint={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=ie(t[0],t[1]),void 0!==this._handler.pinchStartEvent&&this._handler.pinchStartEvent(),this._clearLongTapTimeout()}_stopPinch(){null!==this._startPinchMiddlePoint&&(this._startPinchMiddlePoint=null,void 0!==this._handler.pinchEndEvent&&this._handler.pinchEndEvent())}_mouseLeaveHandler(t){if(this._unsubscribeMousemove&&this._unsubscribeMousemove(),this._firesTouchEvents(t))return;if(!this._acceptMouseLeave)return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseLeaveEvent),this._acceptMouseLeave=!Vs()}_longTapHandler(t){const i=ne(t.touches,r(this._activeTouchId));if(null===i)return;const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0}_firesTouchEvents(t){return t.sourceCapabilities&&void 0!==t.sourceCapabilities.firesTouchEvents?t.sourceCapabilities.firesTouchEvents:he(t){"touchstart"!==t.type&&se(t)}}}}function ie(t,i){const s=t.clientX-i.clientX,e=t.clientY-i.clientY;return Math.sqrt(s*s+e*e)}function se(t){t.cancelable&&t.preventDefault()}function ee(t){return{x:t.pageX,y:t.pageY}}function he(t){return t.timeStamp||performance.now()}function ne(t,i){for(let s=0;s{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._pane=t,this._options=i,this._layoutOptions=i.layout,this._rendererOptionsProvider=s,this._isLeft="left"===e,this._cell=document.createElement("div"),this._cell.style.height="100%",this._cell.style.overflow="hidden",this._cell.style.width="25px",this._cell.style.left="0",this._cell.style.position="relative",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const h=this._canvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="1",h.style.left="0",h.style.top="0",this._topCanvasBinding=Js(this._cell,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const n=this._topCanvasBinding.canvasElement;n.style.position="absolute",n.style.zIndex="2",n.style.left="0",n.style.top="0";const r={mouseDownEvent:this._mouseDownEvent.bind(this),touchStartEvent:this._mouseDownEvent.bind(this),pressedMouseMoveEvent:this._pressedMouseMoveEvent.bind(this),touchMoveEvent:this._pressedMouseMoveEvent.bind(this),mouseDownOutsideEvent:this._mouseDownOutsideEvent.bind(this),mouseUpEvent:this._mouseUpEvent.bind(this),touchEndEvent:this._mouseUpEvent.bind(this),mouseDoubleClickEvent:this._mouseDoubleClickEvent.bind(this),doubleTapEvent:this._mouseDoubleClickEvent.bind(this),mouseEnterEvent:this._mouseEnterEvent.bind(this),mouseLeaveEvent:this._mouseLeaveEvent.bind(this)};this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,r,{treatVertTouchDragAsPageScroll:()=>!1,treatHorzTouchDragAsPageScroll:()=>!0})}destroy(){this._mouseEventHandler.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=null}getElement(){return this._cell}fontSize(){return this._layoutOptions.fontSize}rendererOptions(){const t=this._rendererOptionsProvider.options();return this._font!==t.font&&(this._widthCache.reset(),this._font=t.font),t}optimalWidth(){if(null===this._priceScale)return 0;let t=0;const i=this.rendererOptions(),s=r(this._canvasBinding.canvasElement.getContext("2d"));s.save();const e=this._priceScale.marks();s.font=this._baseFont(),e.length>0&&(t=Math.max(this._widthCache.measureText(s,e[0].label),this._widthCache.measureText(s,e[e.length-1].label)));const h=this._backLabels();for(let i=h.length;i--;){const e=this._widthCache.measureText(s,h[i].text());e>t&&(t=e)}const n=this._priceScale.firstValue();if(null!==n&&null!==this._size){const i=this._priceScale.coordinateToPrice(1,n),e=this._priceScale.coordinateToPrice(this._size.height-2,n);t=Math.max(t,this._widthCache.measureText(s,this._priceScale.formatPrice(Math.floor(Math.min(i,e))+.11111111111111,n)),this._widthCache.measureText(s,this._priceScale.formatPrice(Math.ceil(Math.max(i,e))-.11111111111111,n)))}s.restore();const o=t||34;return Fs(Math.ceil(i.borderSize+i.tickLength+i.paddingInner+i.paddingOuter+5+o))}setSize(t){null!==this._size&&As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`)}getWidth(){return r(this._size).width}setPriceScale(t){this._priceScale!==t&&(null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=t,t.onMarksChanged().subscribe(this._onMarksChanged.bind(this),this))}priceScale(){return this._priceScale}reset(){const t=this._pane.state();this._pane.chart().model().resetPriceScale(t,r(this.priceScale()))}paint(t){if(null===this._size)return;if(1!==t){this._alignLabels(),this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(t),this._drawBackLabels(t))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawCrosshairLabel(i))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}update(){var t;null===(t=this._priceScale)||void 0===t||t.marks()}_mouseDownEvent(t){if(null===this._priceScale||this._priceScale.isEmpty()||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!0,i.startScalePrice(s,this._priceScale,t.localY)}_pressedMouseMoveEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state(),e=this._priceScale;i.scalePriceTo(s,e,t.localY)}_mouseDownOutsideEvent(){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const t=this._pane.chart().model(),i=this._pane.state(),s=this._priceScale;this._mousedown&&(this._mousedown=!1,t.endScalePrice(i,s))}_mouseUpEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!1,i.endScalePrice(s,this._priceScale)}_mouseDoubleClickEvent(t){this._options.handleScale.axisDoubleClickReset.price&&this.reset()}_mouseEnterEvent(t){if(null===this._priceScale)return;!this._pane.chart().model().options().handleScale.axisPressedMouseMove.price||this._priceScale.isPercentage()||this._priceScale.isIndexedTo100()||this._setCursor(1)}_mouseLeaveEvent(t){this._setCursor(0)}_backLabels(){const t=[],i=null===this._priceScale?void 0:this._priceScale;return(s=>{for(let e=0;e{t.fillStyle=s.borderColor;const o=Math.max(1,Math.floor(r)),l=Math.floor(.5*r),a=Math.round(e.tickLength*n);t.beginPath();for(const s of i)t.rect(Math.floor(h*n),Math.round(s.coord*r)-l,a,o);t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{var n;t.font=this._baseFont(),t.fillStyle=null!==(n=s.textColor)&&void 0!==n?n:this._layoutOptions.textColor,t.textAlign=this._isLeft?"right":"left",t.textBaseline="middle";const r=this._isLeft?Math.round(h-e.paddingInner):Math.round(h+e.tickLength+e.paddingInner),o=i.map((i=>this._widthCache.yMidCorrection(t,i.label)));for(let s=i.length;s--;){const e=i[s];t.fillText(e.label,r,e.coord+o[s])}}))}_alignLabels(){if(null===this._size||null===this._priceScale)return;let t=this._size.height/2;const i=[],s=this._priceScale.orderedSources().slice(),e=this._pane.state(),h=this.rendererOptions();this._priceScale===e.defaultVisiblePriceScale()&&this._pane.state().orderedSources().forEach((t=>{e.isOverlay(t)&&s.push(t)}));const n=this._priceScale.dataSources()[0],r=this._priceScale;s.forEach((s=>{const h=s.priceAxisViews(e,r);h.forEach((t=>{t.setFixedCoordinate(null),t.isVisible()&&i.push(t)})),n===s&&h.length>0&&(t=h[0].coordinate())})),i.forEach((t=>t.setFixedCoordinate(t.coordinate())));this._priceScale.options().alignLabels&&this._fixLabelOverlap(i,h,t)}_fixLabelOverlap(t,i,s){if(null===this._size)return;const e=t.filter((t=>t.coordinate()<=s)),h=t.filter((t=>t.coordinate()>s));e.sort(((t,i)=>i.coordinate()-t.coordinate())),e.length&&h.length&&h.push(e[0]),h.sort(((t,i)=>t.coordinate()-i.coordinate()));for(const s of t){const t=Math.floor(s.height(i)/2),e=s.coordinate();e>-t&&ethis._size.height-t&&eo-n&&s.setFixedCoordinate(o-n)}for(let t=1;t{if(i.isAxisLabelVisible()){i.renderer(r(this._priceScale)).draw(t,s,this._widthCache,e)}}))}_drawCrosshairLabel(t){if(null===this._size||null===this._priceScale)return;const i=this._pane.chart().model(),s=[],e=this._pane.state(),h=i.crosshairSource().priceAxisViews(e,this._priceScale);h.length&&s.push(h);const n=this.rendererOptions(),o=this._isLeft?"right":"left";s.forEach((i=>{i.forEach((i=>{i.renderer(r(this._priceScale)).draw(t,n,this._widthCache,o)}))}))}_setCursor(t){this._cell.style.cursor=1===t?"ns-resize":"default"}_onMarksChanged(){const t=this.optimalWidth();this._prevOptimalWidth{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._chart=t,this._state=i,this._state.onDestroyed().subscribe(this._onStateDestroyed.bind(this),this,!0),this._paneCell=document.createElement("td"),this._paneCell.style.padding="0",this._paneCell.style.position="relative";const s=document.createElement("div");s.style.width="100%",s.style.height="100%",s.style.position="relative",s.style.overflow="hidden",this._leftAxisCell=document.createElement("td"),this._leftAxisCell.style.padding="0",this._rightAxisCell=document.createElement("td"),this._rightAxisCell.style.padding="0",this._paneCell.appendChild(s),this._canvasBinding=Js(s,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const e=this._canvasBinding.canvasElement;e.style.position="absolute",e.style.zIndex="1",e.style.left="0",e.style.top="0",this._topCanvasBinding=Js(s,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const h=this._topCanvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="2",h.style.left="0",h.style.top="0",this._rowElement=document.createElement("tr"),this._rowElement.appendChild(this._leftAxisCell),this._rowElement.appendChild(this._paneCell),this._rowElement.appendChild(this._rightAxisCell),this.updatePriceAxisWidgetsStates(),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.vertTouchDrag,treatHorzTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.horzTouchDrag})}destroy(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.destroy(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._mouseEventHandler.destroy()}state(){return r(this._state)}setState(t){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=t,null!==this._state&&this._state.onDestroyed().subscribe(de.prototype._onStateDestroyed.bind(this),this,!0),this.updatePriceAxisWidgetsStates()}chart(){return this._chart}getElement(){return this._rowElement}updatePriceAxisWidgetsStates(){if(null!==this._state&&(this._recreatePriceAxisWidgets(),0!==this._model().serieses().length)){if(null!==this._leftPriceAxisWidget){const t=this._state.leftPriceScale();this._leftPriceAxisWidget.setPriceScale(r(t))}if(null!==this._rightPriceAxisWidget){const t=this._state.rightPriceScale();this._rightPriceAxisWidget.setPriceScale(r(t))}}}updatePriceAxisWidgets(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.update(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.update()}stretchFactor(){return null!==this._state?this._state.stretchFactor():0}setStretchFactor(t){this._state&&this._state.setStretchFactor(t)}mouseEnterEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t)}mouseDownEvent(t){this._onMouseEvent(),this._mouseTouchDownEvent(),this._setCrosshairPosition(t.localX,t.localY,t)}mouseMoveEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t);const e=this.hitTest(i,s);this._model().setHoveredSource(e&&{source:e.source,object:e.object})}mouseClickEvent(t){null!==this._state&&(this._onMouseEvent(),this._fireClickedDelegate(t))}pressedMouseMoveEvent(t){this._onMouseEvent(),this._pressedMouseTouchMoveEvent(t),this._setCrosshairPosition(t.localX,t.localY,t)}mouseUpEvent(t){null!==this._state&&(this._onMouseEvent(),this._longTap=!1,this._endScroll(t))}tapEvent(t){null!==this._state&&this._fireClickedDelegate(t)}longTapEvent(t){if(this._longTap=!0,null===this._startTrackPoint){const i={x:t.localX,y:t.localY};this._startTrackingMode(i,i,t)}}mouseLeaveEvent(t){null!==this._state&&(this._onMouseEvent(),this._state.model().setHoveredSource(null),this._clearCrosshairPosition())}clicked(){return this._clicked}pinchStartEvent(){this._prevPinchScale=1,this._model().stopTimeScaleAnimation()}pinchEvent(t,i){if(!this._chart.options().handleScale.pinch)return;const s=5*(i-this._prevPinchScale);this._prevPinchScale=i,this._model().zoomTime(t.x,s)}touchStartEvent(t){if(this._longTap=!1,this._exitTrackingModeOnNextTry=null!==this._startTrackPoint,this._mouseTouchDownEvent(),null!==this._startTrackPoint){const i=this._model().crosshairSource();this._initCrosshairPosition={x:i.appliedX(),y:i.appliedY()},this._startTrackPoint={x:t.localX,y:t.localY}}}touchMoveEvent(t){if(null===this._state)return;const i=t.localX,s=t.localY;if(null===this._startTrackPoint)this._pressedMouseTouchMoveEvent(t);else{this._exitTrackingModeOnNextTry=!1;const e=r(this._initCrosshairPosition),h=e.x+(i-this._startTrackPoint.x),n=e.y+(s-this._startTrackPoint.y);this._setCrosshairPosition(h,n,t)}}touchEndEvent(t){0===this.chart().options().trackingMode.exitMode&&(this._exitTrackingModeOnNextTry=!0),this._tryExitTrackingMode(),this._endScroll(t)}hitTest(t,i){const s=this._state;if(null===s)return null;const e=s.orderedSources();for(const h of e){const e=this._hitTestPaneView(h.paneViews(s),t,i);if(null!==e)return{source:h,view:e.view,object:e.object}}return null}setPriceAxisSize(t,i){r("left"===i?this._leftPriceAxisWidget:this._rightPriceAxisWidget).setSize(Ds({width:t,height:this._size.height}))}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._paneCell.style.width=t.width+"px",this._paneCell.style.height=t.height+"px")}recalculatePriceScales(){const t=r(this._state);t.recalculatePriceScale(t.leftPriceScale()),t.recalculatePriceScale(t.rightPriceScale());for(const i of t.dataSources())if(t.isOverlay(i)){const s=i.priceScale();null!==s&&t.recalculatePriceScale(s),i.updateAllViews()}}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(null===this._state)return;if(t>1&&this.recalculatePriceScales(),null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.paint(t),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.paint(t),1!==t){this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t)})),this._state&&(this._drawGrid(t),this._drawWatermark(t),this._drawSources(t,ae),this._drawSources(t,ue)))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawSources(i,ce),this._drawCrosshair(i))}leftPriceAxisWidget(){return this._leftPriceAxisWidget}rightPriceAxisWidget(){return this._rightPriceAxisWidget}setCrosshair(t,i,s){if(this._state)if(s){const s=t,e=i;this._setCrosshairPositionNoFire(s,e)}else this._state.model().setHoveredSource(null),this._clearCrosshairPosition()}_onStateDestroyed(){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=null}_fireClickedDelegate(t){const i=t.localX,s=t.localY;this._clicked.hasListeners()&&this._clicked.fire(this._model().timeScale().coordinateToIndex(i),{x:i,y:s},t)}_drawBackground({context:t,bitmapSize:i}){const{width:s,height:e}=i,h=this._model(),n=h.backgroundTopColor(),r=h.backgroundBottomColor();n===r?F(t,0,0,s,e,r):$(t,0,0,s,e,n,r)}_drawGrid(t){const i=r(this._state).grid().paneView().renderer();null!==i&&i.draw(t,!1)}_drawWatermark(t){const i=this._model().watermarkSource();this._drawSourceImpl(t,ae,oe,i),this._drawSourceImpl(t,ae,le,i)}_drawCrosshair(t){this._drawSourceImpl(t,ae,le,this._model().crosshairSource())}_drawSources(t,i){const s=r(this._state).orderedSources();for(const e of s)this._drawSourceImpl(t,i,oe,e);for(const e of s)this._drawSourceImpl(t,i,le,e)}_drawSourceImpl(t,i,s,e){const h=r(this._state),n=i(e,h),o=h.model().hoveredSource(),l=null!==o&&o.source===e,a=null!==o&&l&&void 0!==o.object?o.object.hitTestData:void 0;for(const i of n){const e=i.renderer();null!==e&&s(e,t,l,a)}}_hitTestPaneView(t,i,s){for(const e of t){const t=e.renderer();if(null!==t&&t.hitTest){const h=t.hitTest(i,s);if(null!==h)return{view:e,object:h}}}return null}_recreatePriceAxisWidgets(){if(null===this._state)return;const t=this._chart,i=this._state.leftPriceScale().options().visible,s=this._state.rightPriceScale().options().visible;i||null===this._leftPriceAxisWidget||(this._leftAxisCell.removeChild(this._leftPriceAxisWidget.getElement()),this._leftPriceAxisWidget.destroy(),this._leftPriceAxisWidget=null),s||null===this._rightPriceAxisWidget||(this._rightAxisCell.removeChild(this._rightPriceAxisWidget.getElement()),this._rightPriceAxisWidget.destroy(),this._rightPriceAxisWidget=null);const e=t.model().rendererOptionsProvider();i&&null===this._leftPriceAxisWidget&&(this._leftPriceAxisWidget=new re(this,t.options(),e,"left"),this._leftAxisCell.appendChild(this._leftPriceAxisWidget.getElement())),s&&null===this._rightPriceAxisWidget&&(this._rightPriceAxisWidget=new re(this,t.options(),e,"right"),this._rightAxisCell.appendChild(this._rightPriceAxisWidget.getElement()))}_preventScroll(t){return t.isTouch&&this._longTap||null!==this._startTrackPoint}_correctXCoord(t){return Math.max(0,Math.min(t,this._size.width-1))}_correctYCoord(t){return Math.max(0,Math.min(t,this._size.height-1))}_setCrosshairPosition(t,i,s){this._model().setAndSaveCurrentPosition(this._correctXCoord(t),this._correctYCoord(i),s,r(this._state))}_setCrosshairPositionNoFire(t,i){this._model().setAndSaveCurrentPositionFire(this._correctXCoord(t),this._correctYCoord(i),!1,r(this._state))}_clearCrosshairPosition(){this._model().clearCurrentPosition()}_tryExitTrackingMode(){this._exitTrackingModeOnNextTry&&(this._startTrackPoint=null,this._clearCrosshairPosition())}_startTrackingMode(t,i,s){this._startTrackPoint=t,this._exitTrackingModeOnNextTry=!1,this._setCrosshairPosition(i.x,i.y,s);const e=this._model().crosshairSource();this._initCrosshairPosition={x:e.appliedX(),y:e.appliedY()}}_model(){return this._chart.model()}_endScroll(t){if(!this._isScrolling)return;const i=this._model(),s=this.state();if(i.endScrollPrice(s,s.defaultPriceScale()),this._startScrollingPos=null,this._isScrolling=!1,i.endScrollTime(),null!==this._scrollXAnimation){const t=performance.now(),s=i.timeScale();this._scrollXAnimation.start(s.rightOffset(),t),this._scrollXAnimation.finished(t)||i.setTimeScaleAnimation(this._scrollXAnimation)}}_onMouseEvent(){this._startTrackPoint=null}_mouseTouchDownEvent(){if(!this._state)return;if(this._model().stopTimeScaleAnimation(),document.activeElement!==document.body&&document.activeElement!==document.documentElement)r(document.activeElement).blur();else{const t=document.getSelection();null!==t&&t.removeAllRanges()}!this._state.defaultPriceScale().isEmpty()&&this._model().timeScale().isEmpty()}_pressedMouseTouchMoveEvent(t){if(null===this._state)return;const i=this._model(),s=i.timeScale();if(s.isEmpty())return;const e=this._chart.options(),h=e.handleScroll,n=e.kineticScroll;if((!h.pressedMouseMove||t.isTouch)&&(!h.horzTouchDrag&&!h.vertTouchDrag||!t.isTouch))return;const r=this._state.defaultPriceScale(),o=performance.now();if(null!==this._startScrollingPos||this._preventScroll(t)||(this._startScrollingPos={x:t.clientX,y:t.clientY,timestamp:o,localX:t.localX,localY:t.localY}),null!==this._startScrollingPos&&!this._isScrolling&&(this._startScrollingPos.x!==t.clientX||this._startScrollingPos.y!==t.clientY)){if(t.isTouch&&n.touch||!t.isTouch&&n.mouse){const t=s.barSpacing();this._scrollXAnimation=new Gs(.2/t,7/t,.997,15/t),this._scrollXAnimation.addPosition(s.rightOffset(),this._startScrollingPos.timestamp)}else this._scrollXAnimation=null;r.isEmpty()||i.startScrollPrice(this._state,r,t.localY),i.startScrollTime(t.localX),this._isScrolling=!0}this._isScrolling&&(r.isEmpty()||i.scrollPriceTo(this._state,r,t.localY),i.scrollTimeTo(t.localX),null!==this._scrollXAnimation&&this._scrollXAnimation.addPosition(s.rightOffset(),o))}}class fe{constructor(t,i,s,e,h){this._invalidated=!0,this._size=Ds({width:0,height:0}),this._canvasSuggestedBitmapSizeChangedHandler=()=>this.paint(3),this._isLeft="left"===t,this._rendererOptionsProvider=s.rendererOptionsProvider,this._options=i,this._borderVisible=e,this._bottomColor=h,this._cell=document.createElement("div"),this._cell.style.width="25px",this._cell.style.height="100%",this._cell.style.overflow="hidden",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler)}destroy(){this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._cell}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._canvasBinding.resizeCanvasElement(t),this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._invalidated=!0)}paint(t){if(t<3&&!this._invalidated)return;if(0===this._size.width||0===this._size.height)return;this._invalidated=!1,this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)}))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}_drawBorder({context:t,bitmapSize:i,horizontalPixelRatio:s,verticalPixelRatio:e}){if(!this._borderVisible())return;t.fillStyle=this._options.timeScale.borderColor;const h=Math.floor(this._rendererOptionsProvider.options().borderSize*s),n=Math.floor(this._rendererOptionsProvider.options().borderSize*e),r=this._isLeft?i.width-h:0;t.fillRect(r,0,h,n)}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._bottomColor())}}function pe(t,i){return t.weight>i.weight?t:i}!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(Ys||(Ys={})),function(t){t[t.Default=0]="Default",t[t.EwResize=1]="EwResize"}(Xs||(Xs={}));class me{constructor(t){this._leftStub=null,this._rightStub=null,this._rendererOptions=null,this._mouseDown=!1,this._size=Ds({width:0,height:0}),this._sizeChanged=new b,this._widthCache=new Yt(5),this._isSettingSize=!1,this._canvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._chart=t,this._options=t.options().layout,this._element=document.createElement("tr"),this._leftStubCell=document.createElement("td"),this._leftStubCell.style.padding="0",this._rightStubCell=document.createElement("td"),this._rightStubCell.style.padding="0",this._cell=document.createElement("td"),this._cell.style.height="25px",this._cell.style.padding="0",this._dv=document.createElement("div"),this._dv.style.width="100%",this._dv.style.height="100%",this._dv.style.position="relative",this._dv.style.overflow="hidden",this._cell.appendChild(this._dv),this._canvasBinding=Js(this._dv,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const i=this._canvasBinding.canvasElement;i.style.position="absolute",i.style.zIndex="1",i.style.left="0",i.style.top="0",this._topCanvasBinding=Js(this._dv,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const s=this._topCanvasBinding.canvasElement;s.style.position="absolute",s.style.zIndex="2",s.style.left="0",s.style.top="0",this._element.appendChild(this._leftStubCell),this._element.appendChild(this._cell),this._element.appendChild(this._rightStubCell),this._recreateStubs(),this._chart.model().priceScalesOptionsChanged().subscribe(this._recreateStubs.bind(this),this),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>!0,treatHorzTouchDragAsPageScroll:()=>!1})}destroy(){this._mouseEventHandler.destroy(),null!==this._leftStub&&this._leftStub.destroy(),null!==this._rightStub&&this._rightStub.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._element}leftStub(){return this._leftStub}rightStub(){return this._rightStub}mouseDownEvent(t){if(this._mouseDown)return;this._mouseDown=!0;const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.startScaleTime(t.localX)}touchStartEvent(t){this.mouseDownEvent(t)}mouseDownOutsideEvent(){const t=this._chart.model();!t.timeScale().isEmpty()&&this._mouseDown&&(this._mouseDown=!1,this._chart.options().handleScale.axisPressedMouseMove.time&&t.endScaleTime())}pressedMouseMoveEvent(t){const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.scaleTimeTo(t.localX)}touchMoveEvent(t){this.pressedMouseMoveEvent(t)}mouseUpEvent(){this._mouseDown=!1;const t=this._chart.model();t.timeScale().isEmpty()&&!this._chart.options().handleScale.axisPressedMouseMove.time||t.endScaleTime()}touchEndEvent(){this.mouseUpEvent()}mouseDoubleClickEvent(){this._chart.options().handleScale.axisDoubleClickReset.time&&this._chart.model().resetTimeScale()}doubleTapEvent(){this.mouseDoubleClickEvent()}mouseEnterEvent(){this._chart.model().options().handleScale.axisPressedMouseMove.time&&this._setCursor(1)}mouseLeaveEvent(){this._setCursor(0)}getSize(){return this._size}sizeChanged(){return this._sizeChanged}setSizes(t,i,s){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._sizeChanged.fire(t)),null!==this._leftStub&&this._leftStub.setSize(Ds({width:i,height:t.height})),null!==this._rightStub&&this._rightStub.setSize(Ds({width:s,height:t.height}))}optimalHeight(){const t=this._getRendererOptions();return Math.ceil(t.borderSize+t.tickLength+t.fontSize+t.paddingTop+t.paddingBottom+t.labelBottomOffset)}update(){this._chart.model().timeScale().marks()}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(1!==t){this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&(i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(i)),null!==this._leftStub&&this._leftStub.paint(t),null!==this._rightStub&&this._rightStub.paint(t)}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawLabels([this._chart.model().crosshairSource()],i))}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._chart.model().backgroundBottomColor())}_drawBorder({context:t,bitmapSize:i,verticalPixelRatio:s}){if(this._chart.options().timeScale.borderVisible){t.fillStyle=this._lineColor();const e=Math.max(1,Math.floor(this._getRendererOptions().borderSize*s));t.fillRect(0,0,i.width,e)}}_drawTickMarks(t){const i=this._chart.model().timeScale(),s=i.marks();if(!s||0===s.length)return;let e=s.reduce(pe,s[0]).weight;e>30&&e<50&&(e=30);const h=this._getRendererOptions(),n=i.options();n.borderVisible&&n.ticksVisible&&t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:i,verticalPixelRatio:e})=>{t.strokeStyle=this._lineColor(),t.fillStyle=this._lineColor();const n=Math.max(1,Math.floor(i)),r=Math.floor(.5*i);t.beginPath();const o=Math.round(h.tickLength*e);for(let e=s.length;e--;){const h=Math.round(s[e].coord*i);t.rect(h-r,0,n,o)}t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{const i=h.borderSize+h.tickLength+h.paddingTop+h.fontSize/2;t.textAlign="center",t.textBaseline="middle",t.fillStyle=this._textColor(),t.font=this._baseFont();for(const h of s)if(h.weight=e){const s=h.needAlignCoordinate?this._alignTickMarkLabelCoordinate(t,h.coord,h.label):h.coord;t.fillText(h.label,s,i)}}))}_alignTickMarkLabelCoordinate(t,i,s){const e=this._widthCache.measureText(t,s),h=e/2,n=Math.floor(i-h)+.5;return n<0?i+=Math.abs(0-n):n+e>this._size.width&&(i-=Math.abs(this._size.width-(n+e))),i}_drawLabels(t,i){const s=this._getRendererOptions();for(const e of t)for(const t of e.timeAxisViews())t.renderer().draw(i,s)}_lineColor(){return this._chart.options().timeScale.borderColor}_textColor(){return this._options.textColor}_fontSize(){return this._options.fontSize}_baseFont(){return T(this._fontSize(),this._options.fontFamily)}_baseBoldFont(){return T(this._fontSize(),this._options.fontFamily,"bold")}_getRendererOptions(){null===this._rendererOptions&&(this._rendererOptions={borderSize:1,baselineOffset:NaN,paddingTop:NaN,paddingBottom:NaN,paddingHorizontal:NaN,tickLength:5,fontSize:NaN,font:"",widthCache:new Yt,labelBottomOffset:0});const t=this._rendererOptions,i=this._baseFont();if(t.font!==i){const s=this._fontSize();t.fontSize=s,t.font=i,t.paddingTop=3*s/12,t.paddingBottom=3*s/12,t.paddingHorizontal=9*s/12,t.baselineOffset=0,t.labelBottomOffset=4*s/12,t.widthCache.reset()}return this._rendererOptions}_setCursor(t){this._cell.style.cursor=1===t?"ew-resize":"default"}_recreateStubs(){const t=this._chart.model(),i=t.options();i.leftPriceScale.visible||null===this._leftStub||(this._leftStubCell.removeChild(this._leftStub.getElement()),this._leftStub.destroy(),this._leftStub=null),i.rightPriceScale.visible||null===this._rightStub||(this._rightStubCell.removeChild(this._rightStub.getElement()),this._rightStub.destroy(),this._rightStub=null);const s={rendererOptionsProvider:this._chart.model().rendererOptionsProvider()},e=()=>i.leftPriceScale.borderVisible&&t.timeScale().options().borderVisible,h=()=>t.backgroundBottomColor();i.leftPriceScale.visible&&null===this._leftStub&&(this._leftStub=new fe("left",i,s,e,h),this._leftStubCell.appendChild(this._leftStub.getElement())),i.rightPriceScale.visible&&null===this._rightStub&&(this._rightStub=new fe("right",i,s,e,h),this._rightStubCell.appendChild(this._rightStub.getElement()))}}const ve=!!Is&&!!navigator.userAgentData&&navigator.userAgentData.brands.some((t=>t.brand.includes("Chromium")))&&!!Is&&((null===(be=null===navigator||void 0===navigator?void 0:navigator.userAgentData)||void 0===be?void 0:be.platform)?"Windows"===navigator.userAgentData.platform:navigator.userAgent.toLowerCase().indexOf("win")>=0);var be;class ge{constructor(t,i){var s;this._paneWidgets=[],this._drawRafId=0,this._height=0,this._width=0,this._leftPriceAxisWidth=0,this._rightPriceAxisWidth=0,this._invalidateMask=null,this._drawPlanned=!1,this._clicked=new b,this._crosshairMoved=new b,this._observer=null,this._container=t,this._options=i,this._element=document.createElement("div"),this._element.classList.add("tv-lightweight-charts"),this._element.style.overflow="hidden",this._element.style.direction="ltr",this._element.style.width="100%",this._element.style.height="100%",(s=this._element).style.userSelect="none",s.style.webkitUserSelect="none",s.style.msUserSelect="none",s.style.MozUserSelect="none",s.style.webkitTapHighlightColor="transparent",this._tableElement=document.createElement("table"),this._tableElement.setAttribute("cellspacing","0"),this._element.appendChild(this._tableElement),this._onWheelBound=this._onMousewheel.bind(this),we(this._options)&&this._setMouseWheelEventListener(!0),this._model=new Ts(this._invalidateHandler.bind(this),this._options),this.model().crosshairMoved().subscribe(this._onPaneWidgetCrosshairMoved.bind(this),this),this._timeAxisWidget=new me(this),this._tableElement.appendChild(this._timeAxisWidget.getElement());const e=i.autoSize&&this._installObserver();let h=this._options.width,n=this._options.height;if(e||0===h||0===n){const i=t.getBoundingClientRect();h=h||i.width,n=n||i.height}this.resize(h,n),this._syncGuiWithModel(),t.appendChild(this._element),this._updateTimeAxisVisibility(),this._model.timeScale().optionsApplied().subscribe(this._model.fullUpdate.bind(this._model),this),this._model.priceScalesOptionsChanged().subscribe(this._model.fullUpdate.bind(this._model),this)}model(){return this._model}options(){return this._options}paneWidgets(){return this._paneWidgets}timeAxisWidget(){return this._timeAxisWidget}destroy(){this._setMouseWheelEventListener(!1),0!==this._drawRafId&&window.cancelAnimationFrame(this._drawRafId),this._model.crosshairMoved().unsubscribeAll(this),this._model.timeScale().optionsApplied().unsubscribeAll(this),this._model.priceScalesOptionsChanged().unsubscribeAll(this),this._model.destroy();for(const t of this._paneWidgets)this._tableElement.removeChild(t.getElement()),t.clicked().unsubscribeAll(this),t.destroy();this._paneWidgets=[],r(this._timeAxisWidget).destroy(),null!==this._element.parentElement&&this._element.parentElement.removeChild(this._element),this._crosshairMoved.destroy(),this._clicked.destroy(),this._uninstallObserver()}resize(t,i,s=!1){if(this._height===i&&this._width===t)return;const e=function(t){const i=Math.floor(t.width),s=Math.floor(t.height);return Ds({width:i-i%2,height:s-s%2})}(Ds({width:t,height:i}));this._height=e.height,this._width=e.width;const h=this._height+"px",n=this._width+"px";r(this._element).style.height=h,r(this._element).style.width=n,this._tableElement.style.height=h,this._tableElement.style.width=n,s?this._drawImpl(ht.full(),performance.now()):this._model.fullUpdate()}paint(t){void 0===t&&(t=ht.full());for(let i=0;i{let e=0;for(let h=0;h{r("left"===i?this._timeAxisWidget.leftStub():this._timeAxisWidget.rightStub()).drawBitmap(r(t),s,e)};if(this._options.timeScale.visible){const i=this._timeAxisWidget.getBitmapSize();if(null!==t){let h=0;this._isLeftAxisVisible()&&(n("left",h,s),h=r(e.leftPriceAxisWidget()).getBitmapSize().width),this._timeAxisWidget.drawBitmap(t,h,s),h+=i.width,this._isRightAxisVisible()&&n("right",h,s)}s+=i.height}return Ds({width:i,height:s})}_adjustSizeImpl(){let t=0,i=0,s=0;for(const e of this._paneWidgets)this._isLeftAxisVisible()&&(i=Math.max(i,r(e.leftPriceAxisWidget()).optimalWidth())),this._isRightAxisVisible()&&(s=Math.max(s,r(e.rightPriceAxisWidget()).optimalWidth())),t+=e.stretchFactor();i=Fs(i),s=Fs(s);const e=this._width,h=this._height,n=Math.max(e-i-s,0),o=this._options.timeScale.visible;let l=o?this._timeAxisWidget.optimalHeight():0;var a;l=(a=l)+a%2;const u=0+l,c=h{t.updatePriceAxisWidgets()})),3===(null===(s=this._invalidateMask)||void 0===s?void 0:s.fullInvalidation())&&(this._invalidateMask.merge(t),this._updateGui(),this._applyMomentaryAutoScale(this._invalidateMask),this._applyTimeScaleInvalidations(this._invalidateMask,i),t=this._invalidateMask,this._invalidateMask=null)),this.paint(t)}_applyTimeScaleInvalidations(t,i){for(const s of t.timeScaleInvalidations())this._applyTimeScaleInvalidation(s,i)}_applyMomentaryAutoScale(t){const i=this._model.panes();for(let s=0;s{if(this._drawPlanned=!1,this._drawRafId=0,null!==this._invalidateMask){const i=this._invalidateMask;this._invalidateMask=null,this._drawImpl(i,t);for(const s of i.timeScaleInvalidations())if(5===s.type&&!s.value.finished(t)){this.model().setTimeScaleAnimation(s.value);break}}})))}_updateGui(){this._syncGuiWithModel()}_syncGuiWithModel(){const t=this._model.panes(),i=t.length,s=this._paneWidgets.length;for(let t=i;t{const s=i.bars().search(t);null!==s&&h.set(i,s)}))}let n;if(null!==t){const i=null===(e=this._model.timeScale().indexToTimeScalePoint(t))||void 0===e?void 0:e.originalTime;void 0!==i&&(n=i)}const r=this.model().hoveredSource(),o=null!==r&&r.source instanceof Bi?r.source:void 0,l=null!==r&&void 0!==r.object?r.object.externalId:void 0;return{time:n,index:null!=t?t:void 0,point:null!=i?i:void 0,hoveredSeries:o,seriesData:h,hoveredObject:l,touchMouseEventData:null!=s?s:void 0}}_onPaneWidgetClicked(t,i,s){this._clicked.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_onPaneWidgetCrosshairMoved(t,i,s){this._crosshairMoved.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_updateTimeAxisVisibility(){const t=this._options.timeScale.visible?"":"none";this._timeAxisWidget.getElement().style.display=t}_isLeftAxisVisible(){return this._paneWidgets[0].state().leftPriceScale().options().visible}_isRightAxisVisible(){return this._paneWidgets[0].state().rightPriceScale().options().visible}_installObserver(){return"ResizeObserver"in window&&(this._observer=new ResizeObserver((t=>{const i=t.find((t=>t.target===this._container));i&&this.resize(i.contentRect.width,i.contentRect.height)})),this._observer.observe(this._container,{box:"border-box"}),!0)}_uninstallObserver(){null!==this._observer&&this._observer.disconnect()}}function we(t){return Boolean(t.handleScroll.mouseWheel||t.handleScale.mouseWheel)}function Me(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.color&&(n.color=s.color),n}function Se(t){return void 0!==t.value}function xe(t){return(i,s,e,h)=>{return void 0===(n=e).open&&void 0===n.value?{time:i,index:s,originalTime:h}:t(i,s,e,h);var n}}const _e={Candlestick:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),void 0!==s.borderColor&&(h.borderColor=s.borderColor),void 0!==s.wickColor&&(h.wickColor=s.wickColor),h})),Bar:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),h})),Area:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.lineColor&&(n.lineColor=s.lineColor),void 0!==s.topColor&&(n.topColor=s.topColor),void 0!==s.bottomColor&&(n.bottomColor=s.bottomColor),n})),Baseline:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.topLineColor&&(n.topLineColor=s.topLineColor),void 0!==s.bottomLineColor&&(n.bottomLineColor=s.bottomLineColor),void 0!==s.topFillColor1&&(n.topFillColor1=s.topFillColor1),void 0!==s.topFillColor2&&(n.topFillColor2=s.topFillColor2),void 0!==s.bottomFillColor1&&(n.bottomFillColor1=s.bottomFillColor1),void 0!==s.bottomFillColor2&&(n.bottomFillColor2=s.bottomFillColor2),n})),Histogram:xe(Me),Line:xe(Me)};function ye(t){return _e[t]}function ke(t){return 60*t*60*1e3}function Ce(t){return 60*t*1e3}const Te=[{divisor:(Pe=1,1e3*Pe),weight:10},{divisor:Ce(1),weight:20},{divisor:Ce(5),weight:21},{divisor:Ce(30),weight:22},{divisor:ke(1),weight:30},{divisor:ke(3),weight:31},{divisor:ke(6),weight:32},{divisor:ke(12),weight:33}];var Pe;function Re(t,i){if(t.getUTCFullYear()!==i.getUTCFullYear())return 70;if(t.getUTCMonth()!==i.getUTCMonth())return 60;if(t.getUTCDate()!==i.getUTCDate())return 50;for(let s=Te.length-1;s>=0;--s)if(Math.floor(i.getTime()/Te[s].divisor)!==Math.floor(t.getTime()/Te[s].divisor))return Te[s].weight;return 0}function De(t,i=0){if(0===t.length)return;let s=0===i?null:t[i-1].time.timestamp,e=null!==s?new Date(1e3*s):null,h=0;for(let n=i;n1){const i=Math.ceil(h/(t.length-1)),s=new Date(1e3*(t[0].time.timestamp-i));t[0].timeWeight=Re(new Date(1e3*t[0].time.timestamp),s)}}function Ae(t){if(!Ps(t))throw new Error("time must be of type BusinessDay");const i=new Date(Date.UTC(t.year,t.month-1,t.day,0,0,0,0));return{timestamp:Math.round(i.getTime()/1e3),businessDay:t}}function Ee(t){if(!Rs(t))throw new Error("time must be of type isUTCTimestamp");return{timestamp:t}}function Oe(t){return 0===t.length?null:Ps(t[0].time)?Ae:Ee}function Be(t){return Rs(t)?Ee(t):Ps(t)?Ae(t):Ae(Le(t))}function Le(t){const i=new Date(t);if(isNaN(i.getTime()))throw new Error(`Invalid date string=${t}, expected format=yyyy-mm-dd`);return{day:i.getUTCDate(),month:i.getUTCMonth()+1,year:i.getUTCFullYear()}}function ze(t){S(t.time)&&(t.time=Le(t.time))}function Ie(t){return{index:0,mapping:new Map,timePoint:t}}function Ne(t){if(void 0!==t&&0!==t.length)return{firstTime:t[0].time.timestamp,lastTime:t[t.length-1].time.timestamp}}function Ve(t){let i;return t.forEach((t=>{void 0===i&&(i=t.originalTime)})),n(i)}function Fe(t){void 0===t.originalTime&&(t.originalTime=t.time)}class We{constructor(){this._pointDataByTimePoint=new Map,this._seriesRowsBySeries=new Map,this._seriesLastTimePoint=new Map,this._sortedTimePoints=[]}destroy(){this._pointDataByTimePoint.clear(),this._seriesRowsBySeries.clear(),this._seriesLastTimePoint.clear(),this._sortedTimePoints=[]}setSeriesData(t,i){let s=0!==this._pointDataByTimePoint.size,e=!1;const h=this._seriesRowsBySeries.get(t);if(void 0!==h)if(1===this._seriesRowsBySeries.size)s=!1,e=!0,this._pointDataByTimePoint.clear();else for(const i of this._sortedTimePoints)i.pointData.mapping.delete(t)&&(e=!0);let n=[];if(0!==i.length){const s=i;s.forEach((t=>Fe(t))),function(t){t.forEach(ze)}(i);const h=r(Oe(i)),o=ye(t.seriesType());n=s.map((i=>{const s=h(i.time);let n=this._pointDataByTimePoint.get(s.timestamp);void 0===n&&(n=Ie(s),this._pointDataByTimePoint.set(s.timestamp,n),e=!0);const r=o(s,n.index,i,i.originalTime);return n.mapping.set(t,r),r}))}s&&this._cleanupPointsData(),this._setRowsToSeries(t,n);let o=-1;if(e){const t=[];this._pointDataByTimePoint.forEach((i=>{t.push({timeWeight:0,time:i.timePoint,pointData:i,originalTime:Ve(i.mapping)})})),t.sort(((t,i)=>t.time.timestamp-i.time.timestamp)),o=this._replaceTimeScalePoints(t)}return this._getUpdateResponse(t,o,function(t,i){const s=Ne(t),e=Ne(i);if(void 0!==s&&void 0!==e)return{lastBarUpdatedOrNewBarsAddedToTheRight:s.lastTime>=e.lastTime&&s.firstTime>=e.firstTime}}(this._seriesRowsBySeries.get(t),h))}removeSeries(t){return this.setSeriesData(t,[])}updateSeriesData(t,i){const s=i;Fe(s),ze(i);const e=r(Oe([i]))(i.time),h=this._seriesLastTimePoint.get(t);if(void 0!==h&&e.timestampt.time.timestampe.time.timestamp?Se(i)&&s.push(i):Se(i)?s[s.length-1]=i:s.splice(-1,1),this._seriesLastTimePoint.set(t,i.time)}_setRowsToSeries(t,i){0!==i.length?(this._seriesRowsBySeries.set(t,i.filter(Se)),this._seriesLastTimePoint.set(t,i[i.length-1].time)):(this._seriesRowsBySeries.delete(t),this._seriesLastTimePoint.delete(t))}_cleanupPointsData(){for(const t of this._sortedTimePoints)0===t.pointData.mapping.size&&this._pointDataByTimePoint.delete(t.time.timestamp)}_replaceTimeScalePoints(t){let i=-1;for(let s=0;s{0!==i.length&&(t=Math.max(t,i[i.length-1].index))})),t}_getUpdateResponse(t,i,s){const e={series:new Map,timeScale:{baseIndex:this._getBaseIndex()}};if(-1!==i)this._seriesRowsBySeries.forEach(((i,h)=>{e.series.set(h,{data:i,info:h===t?s:void 0})})),this._seriesRowsBySeries.has(t)||e.series.set(t,{data:[],info:s}),e.timeScale.points=this._sortedTimePoints,e.timeScale.firstChangedPointIndex=i;else{const i=this._seriesRowsBySeries.get(t);e.series.set(t,{data:i||[],info:s})}return e}}function je(t,i){t.index=i,t.mapping.forEach((t=>{t.index=i}))}function He(t){return{value:t.value[3],time:t.originalTime}}function $e(t){const i=He(t);return void 0!==t.color&&(i.color=t.color),i}function Ue(t){return{open:t.value[0],high:t.value[1],low:t.value[2],close:t.value[3],time:t.originalTime}}const qe={Area:function(t){const i=He(t);return void 0!==t.lineColor&&(i.lineColor=t.lineColor),void 0!==t.topColor&&(i.topColor=t.topColor),void 0!==t.bottomColor&&(i.bottomColor=t.bottomColor),i},Line:$e,Baseline:function(t){const i=He(t);return void 0!==t.topLineColor&&(i.topLineColor=t.topLineColor),void 0!==t.bottomLineColor&&(i.bottomLineColor=t.bottomLineColor),void 0!==t.topFillColor1&&(i.topFillColor1=t.topFillColor1),void 0!==t.topFillColor2&&(i.topFillColor2=t.topFillColor2),void 0!==t.bottomFillColor1&&(i.bottomFillColor1=t.bottomFillColor1),void 0!==t.bottomFillColor2&&(i.bottomFillColor2=t.bottomFillColor2),i},Histogram:$e,Bar:function(t){const i=Ue(t);return void 0!==t.color&&(i.color=t.color),i},Candlestick:function(t){const i=Ue(t),{color:s,borderColor:e,wickColor:h}=t;return void 0!==s&&(i.color=s),void 0!==e&&(i.borderColor=e),void 0!==h&&(i.wickColor=h),i}};function Ye(t){return qe[t]}const Xe={autoScale:!0,mode:0,invertScale:!1,alignLabels:!0,borderVisible:!0,borderColor:"#2B2B43",entireTextOnly:!1,visible:!1,ticksVisible:!1,scaleMargins:{bottom:.1,top:.2}},Ze={color:"rgba(0, 0, 0, 0)",visible:!1,fontSize:48,fontFamily:C,fontStyle:"",text:"",horzAlign:"center",vertAlign:"center"},Ke={width:0,height:0,autoSize:!1,layout:{background:{type:"solid",color:"#FFFFFF"},textColor:"#191919",fontSize:12,fontFamily:C},crosshair:{vertLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},horzLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},mode:1},grid:{vertLines:{color:"#D6DCDE",style:0,visible:!0},horzLines:{color:"#D6DCDE",style:0,visible:!0}},overlayPriceScales:Object.assign({},Xe),leftPriceScale:Object.assign(Object.assign({},Xe),{visible:!1}),rightPriceScale:Object.assign(Object.assign({},Xe),{visible:!0}),timeScale:{rightOffset:0,barSpacing:6,minBarSpacing:.5,fixLeftEdge:!1,fixRightEdge:!1,lockVisibleTimeRangeOnResize:!1,rightBarStaysOnScroll:!1,borderVisible:!0,borderColor:"#2B2B43",visible:!0,timeVisible:!1,secondsVisible:!0,shiftVisibleRangeOnNewBar:!0,ticksVisible:!1},watermark:Ze,localization:{locale:Is?navigator.language:"",dateFormat:"dd MMM 'yy"},handleScroll:{mouseWheel:!0,pressedMouseMove:!0,horzTouchDrag:!0,vertTouchDrag:!0},handleScale:{axisPressedMouseMove:{time:!0,price:!0},axisDoubleClickReset:{time:!0,price:!0},mouseWheel:!0,pinch:!0},kineticScroll:{mouse:!1,touch:!0},trackingMode:{exitMode:1}},Ge={upColor:"#26a69a",downColor:"#ef5350",wickVisible:!0,borderVisible:!0,borderColor:"#378658",borderUpColor:"#26a69a",borderDownColor:"#ef5350",wickColor:"#737375",wickUpColor:"#26a69a",wickDownColor:"#ef5350"},Je={upColor:"#26a69a",downColor:"#ef5350",openVisible:!0,thinBars:!0},Qe={color:"#2196f3",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},th={topColor:"rgba( 46, 220, 135, 0.4)",bottomColor:"rgba( 40, 221, 100, 0)",invertFilledArea:!1,lineColor:"#33D778",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},ih={baseValue:{type:"price",price:0},topFillColor1:"rgba(38, 166, 154, 0.28)",topFillColor2:"rgba(38, 166, 154, 0.05)",topLineColor:"rgba(38, 166, 154, 1)",bottomFillColor1:"rgba(239, 83, 80, 0.05)",bottomFillColor2:"rgba(239, 83, 80, 0.28)",bottomLineColor:"rgba(239, 83, 80, 1)",lineWidth:3,lineStyle:0,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},sh={color:"#26a69a",base:0},eh={title:"",visible:!0,lastValueVisible:!0,priceLineVisible:!0,priceLineSource:0,priceLineWidth:1,priceLineColor:"",priceLineStyle:2,baseLineVisible:!0,baseLineWidth:1,baseLineColor:"#B2B5BE",baseLineStyle:0,priceFormat:{type:"price",precision:2,minMove:.01}};class hh{constructor(t,i){this._chartWidget=t,this._priceScaleId=i}applyOptions(t){this._chartWidget.model().applyPriceScaleOptions(this._priceScaleId,t)}options(){return this._priceScale().options()}width(){return et(this._priceScaleId)?this._chartWidget.getPriceAxisWidth(this._priceScaleId):0}_priceScale(){return r(this._chartWidget.model().findPriceScale(this._priceScaleId)).priceScale}}const nh={color:"#FF0000",price:0,lineStyle:2,lineWidth:1,lineVisible:!0,axisLabelVisible:!0,title:"",axisLabelColor:"",axisLabelTextColor:""};class rh{constructor(t){this._priceLine=t}applyOptions(t){this._priceLine.applyOptions(t)}options(){return this._priceLine.options()}priceLine(){return this._priceLine}}class oh{constructor(t,i,s){this._series=t,this._dataUpdatesConsumer=i,this._priceScaleApiProvider=s}priceFormatter(){return this._series.formatter()}priceToCoordinate(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().priceToCoordinate(t,i.value)}coordinateToPrice(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().coordinateToPrice(t,i.value)}barsInLogicalRange(t){if(null===t)return null;const i=new ps(new cs(t.from,t.to)).strictRange(),s=this._series.bars();if(s.isEmpty())return null;const e=s.search(i.left(),1),h=s.search(i.right(),-1),n=r(s.firstIndex()),o=r(s.lastIndex());if(null!==e&&null!==h&&e.index>h.index)return{barsBefore:t.from-n,barsAfter:o-t.to};const l={barsBefore:null===e||e.index===n?t.from-n:e.index-n,barsAfter:null===h||h.index===o?o-t.to:o-h.index};return null!==e&&null!==h&&(l.from=e.time.businessDay||e.time.timestamp,l.to=h.time.businessDay||h.time.timestamp),l}setData(t){this._series.seriesType(),this._dataUpdatesConsumer.applyNewData(this._series,t)}update(t){this._series.seriesType(),this._dataUpdatesConsumer.updateData(this._series,t)}dataByIndex(t,i){const s=this._series.bars().search(t,i);return null===s?null:Ye(this.seriesType())(s)}setMarkers(t){const i=t.map((t=>Object.assign(Object.assign({},t),{originalTime:t.time,time:Be(t.time)})));this._series.setMarkers(i)}markers(){return this._series.markers().map((t=>{const{originalTime:i,time:s}=t,e=function(t,i){var s={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&i.indexOf(e)<0&&(s[e]=t[e]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var h=0;for(e=Object.getOwnPropertySymbols(t);h=1)return 0;let i=0;for(;i<8;i++){const s=Math.round(t);if(Math.abs(s-t)<1e-8)return i;t*=10}return i}(i.minMove))}function ch(t){return function(t){if(x(t.handleScale)){const i=t.handleScale;t.handleScale={axisDoubleClickReset:{time:i,price:i},axisPressedMouseMove:{time:i,price:i},mouseWheel:i,pinch:i}}else if(void 0!==t.handleScale){const{axisPressedMouseMove:i,axisDoubleClickReset:s}=t.handleScale;x(i)&&(t.handleScale.axisPressedMouseMove={time:i,price:i}),x(s)&&(t.handleScale.axisDoubleClickReset={time:s,price:s})}const i=t.handleScroll;x(i)&&(t.handleScroll={horzTouchDrag:i,vertTouchDrag:i,mouseWheel:i,pressedMouseMove:i})}(t),t}class dh{constructor(t,i){this._dataLayer=new We,this._seriesMap=new Map,this._seriesMapReversed=new Map,this._clickedDelegate=new b,this._crosshairMovedDelegate=new b;const s=void 0===i?_(Ke):g(_(Ke),ch(i));this._chartWidget=new ge(t,s),this._chartWidget.clicked().subscribe((t=>{this._clickedDelegate.hasListeners()&&this._clickedDelegate.fire(this._convertMouseParams(t()))}),this),this._chartWidget.crosshairMoved().subscribe((t=>{this._crosshairMovedDelegate.hasListeners()&&this._crosshairMovedDelegate.fire(this._convertMouseParams(t()))}),this);const e=this._chartWidget.model();this._timeScaleApi=new ah(e,this._chartWidget.timeAxisWidget())}remove(){this._chartWidget.clicked().unsubscribeAll(this),this._chartWidget.crosshairMoved().unsubscribeAll(this),this._timeScaleApi.destroy(),this._chartWidget.destroy(),this._seriesMap.clear(),this._seriesMapReversed.clear(),this._clickedDelegate.destroy(),this._crosshairMovedDelegate.destroy(),this._dataLayer.destroy()}resize(t,i,s){this.autoSizeActive()||this._chartWidget.resize(t,i,s)}addAreaSeries(t){return this._addSeriesImpl("Area",th,t)}addBaselineSeries(t){return this._addSeriesImpl("Baseline",ih,t)}addBarSeries(t){return this._addSeriesImpl("Bar",Je,t)}addCandlestickSeries(t={}){return function(t){void 0!==t.borderColor&&(t.borderUpColor=t.borderColor,t.borderDownColor=t.borderColor),void 0!==t.wickColor&&(t.wickUpColor=t.wickColor,t.wickDownColor=t.wickColor)}(t),this._addSeriesImpl("Candlestick",Ge,t)}addHistogramSeries(t){return this._addSeriesImpl("Histogram",sh,t)}addLineSeries(t){return this._addSeriesImpl("Line",Qe,t)}removeSeries(t){const i=n(this._seriesMap.get(t)),s=this._dataLayer.removeSeries(i);this._chartWidget.model().removeSeries(i),this._sendUpdateToChart(s),this._seriesMap.delete(t),this._seriesMapReversed.delete(i)}applyNewData(t,i){this._sendUpdateToChart(this._dataLayer.setSeriesData(t,i))}updateData(t,i){this._sendUpdateToChart(this._dataLayer.updateSeriesData(t,i))}subscribeClick(t){this._clickedDelegate.subscribe(t)}unsubscribeClick(t){this._clickedDelegate.unsubscribe(t)}subscribeCrosshairMove(t){this._crosshairMovedDelegate.subscribe(t)}setCrosshairXY(t,i,s){this._chartWidget.paneWidgets()[0].setCrosshair(t,i,s)}unsubscribeCrosshairMove(t){this._crosshairMovedDelegate.unsubscribe(t)}priceScale(t){return new hh(this._chartWidget,t)}timeScale(){return this._timeScaleApi}applyOptions(t){this._chartWidget.applyOptions(ch(t))}options(){return this._chartWidget.options()}takeScreenshot(){return this._chartWidget.takeScreenshot()}autoSizeActive(){return this._chartWidget.autoSizeActive()}_addSeriesImpl(t,i,s={}){uh(s.priceFormat);const e=g(_(eh),_(i),s),h=this._chartWidget.model().createSeries(t,e),n=new oh(h,this,this);return this._seriesMap.set(n,h),this._seriesMapReversed.set(h,n),n}_sendUpdateToChart(t){const i=this._chartWidget.model();i.updateTimeScale(t.timeScale.baseIndex,t.timeScale.points,t.timeScale.firstChangedPointIndex),t.series.forEach(((t,i)=>i.setData(t.data,t.info))),i.recalculateAllPanes()}_mapSeriesToApi(t){return n(this._seriesMapReversed.get(t))}_convertMouseParams(t){const i=new Map;t.seriesData.forEach(((t,s)=>{const e=Ye(s.seriesType())(t);h(function(t){return void 0!==t.open||void 0!==t.value}(e)),i.set(this._mapSeriesToApi(s),e)}));const s=void 0===t.hoveredSeries?void 0:this._mapSeriesToApi(t.hoveredSeries);return{time:t.time,logical:t.index,point:t.point,hoveredSeries:s,hoveredObjectId:t.hoveredObject,seriesData:i,sourceEvent:t.touchMouseEventData}}}var fh=Object.freeze({__proto__:null,get ColorType(){return xs},get CrosshairMode(){return J},get LastPriceAnimationMode(){return ws},get LineStyle(){return i},get LineType(){return t},get MismatchDirection(){return Di},get PriceLineSource(){return Ss},get PriceScaleMode(){return Qi},get TickMarkType(){return vs},get TrackingModeExitMode(){return gs},createChart:function(t,i){let s;if(S(t)){const i=document.getElementById(t);h(null!==i,`Cannot find element in DOM with id=${t}`),s=i}else s=t;return new dh(s,i)},isBusinessDay:Ps,isUTCTimestamp:Rs,version:function(){return"4.1.0-dev+202306102016"}});window.LightweightCharts=fh}(); \ No newline at end of file diff --git a/docs/source/_static/splash.css b/docs/source/_static/splash.css new file mode 100644 index 0000000..36772aa --- /dev/null +++ b/docs/source/_static/splash.css @@ -0,0 +1,140 @@ +@font-face { + font-family: 'Maison Neue'; + src: url('fonts/MaisonNeue-Demi.otf') format('opentype'); + +} +@font-face { + font-family: 'Maison Neue Italic'; + src: url('fonts/MaisonNeue-MediumItalic.otf') format('opentype'); +} + + + +.splash-head { + position: relative; + display: flex; + flex-direction: column; + text-align: center; + align-self: center; + margin-bottom: 20px; +} + +.splash-page-container { + display: flex; + flex-direction: column; +} + +.theme-button { +position: absolute; + top: 70px; + right: -50px; +} + +.top-nav { + margin: 0; + padding: 0; + align-self: center; +} + +.top-nav ul { + list-style-type: none; + padding: 0; + display: flex; + justify-content: space-evenly; + background-color: var(--color-background-hover); + border-radius: 5px; + margin: 2rem 0 0; +} + +.top-nav li { + display: inline; +} + +.top-nav li a { + text-decoration: none; + border-radius: 3px; + color: var(--color-foreground-primary); + padding: 0.3rem 0.6rem; + display: flex; + align-items: center; + font-weight: 500; + +} + +.top-nav li a:hover { + background-color: var(--color-background-item) +} + + + +#wrapper { + width: 500px; + + height: 350px; + display: flex; + overflow: hidden; + border-radius: 10px; + border: 2px solid var(--color-foreground-muted); + box-sizing: border-box; + + position: relative; + z-index: 1000; +} + +#main-content { + margin: 30px 0; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; +} + +#curved-arrow { + transition: transform 0.1s; + transform: rotate(-42deg); + padding: 0 3vw; + width: 100px; + height: 100px; +} + + + + + +@media (max-width: 968px) { + #curved-arrow { + transform: rotate(-70deg) scalex(-1); + } +} + +@media (max-width: 550px) { + .splash-head h1 { + font-size: 30px; + } + #main-content { + flex-direction: column; + } + #curved-arrow { + padding: 4vw 0; + width: 60px; + height: 60px + } +} +@media (max-width: 450px) { + .splash-head h1 { + font-size: 22px; + } + .splash-head i { + font-size: 13px; + } + .top-nav a { + font-size: 12px; + } + .theme-button { + right: -20px; + } + #wrapper { + width: 300px; + height: 250px; + } +} \ No newline at end of file diff --git a/docs/source/_static/toolbox.js b/docs/source/_static/toolbox.js new file mode 100644 index 0000000..47be952 --- /dev/null +++ b/docs/source/_static/toolbox.js @@ -0,0 +1,688 @@ +if (!window.ToolBox) { + class ToolBox { + constructor(chart) { + this.onTrendSelect = this.onTrendSelect.bind(this) + this.onHorzSelect = this.onHorzSelect.bind(this) + this.onRaySelect = this.onRaySelect.bind(this) + this.saveDrawings = this.saveDrawings.bind(this) + + this.chart = chart + this.drawings = [] + this.chart.cursor = 'default' + this.makingDrawing = false + + this.interval = 24 * 60 * 60 * 1000 + this.activeBackgroundColor = 'rgba(0, 122, 255, 0.7)' + this.activeIconColor = 'rgb(240, 240, 240)' + this.iconColor = 'lightgrey' + this.backgroundColor = 'transparent' + this.hoverColor = 'rgba(80, 86, 94, 0.7)' + this.clickBackgroundColor = 'rgba(90, 106, 104, 0.7)' + + this.elem = this.makeToolBox() + this.subscribeHoverMove() + } + + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + + makeToolBox() { + let toolBoxElem = document.createElement('div') + toolBoxElem.style.position = 'absolute' + toolBoxElem.style.zIndex = '2000' + toolBoxElem.style.display = 'flex' + toolBoxElem.style.alignItems = 'center' + toolBoxElem.style.top = '25%' + toolBoxElem.style.borderRight = '2px solid #3C434C' + toolBoxElem.style.borderTop = '2px solid #3C434C' + toolBoxElem.style.borderBottom = '2px solid #3C434C' + toolBoxElem.style.borderTopRightRadius = '4px' + toolBoxElem.style.borderBottomRightRadius = '4px' + toolBoxElem.style.backgroundColor = 'rgba(25, 27, 30, 0.5)' + toolBoxElem.style.flexDirection = 'column' + + this.chart.activeIcon = null + + let trend = this.makeToolBoxElement(this.onTrendSelect, 'KeyT', ``) + let horz = this.makeToolBoxElement(this.onHorzSelect, 'KeyH', ``) + let ray = this.makeToolBoxElement(this.onRaySelect, 'KeyR', ``) + //let testB = this.makeToolBoxElement(this.onTrendSelect, ``) + toolBoxElem.appendChild(trend) + toolBoxElem.appendChild(horz) + toolBoxElem.appendChild(ray) + //toolBoxElem.appendChild(testB) + + this.chart.div.append(toolBoxElem) + + let commandZHandler = (toDelete) => { + if (!toDelete) return + if ('price' in toDelete && toDelete.id !== 'toolBox') return commandZHandler(this.drawings[this.drawings.indexOf(toDelete) - 1]) + this.deleteDrawing(toDelete) + } + this.chart.commandFunctions.push((event) => { + if ((event.metaKey || event.ctrlKey) && event.code === 'KeyZ') { + commandZHandler(this.drawings[this.drawings.length - 1]) + return true + } + }); + + return toolBoxElem + } + + makeToolBoxElement(action, keyCmd, paths) { + let icon = { + elem: document.createElement('div'), + action: action, + } + icon.elem.style.margin = '3px' + icon.elem.style.borderRadius = '4px' + icon.elem.style.display = 'flex' + + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "29"); + svg.setAttribute("height", "29"); + + let group = document.createElementNS("http://www.w3.org/2000/svg", "g"); + group.innerHTML = paths + group.setAttribute("fill", this.iconColor) + + svg.appendChild(group) + icon.elem.appendChild(svg); + + icon.elem.addEventListener('mouseenter', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.hoverColor + }) + icon.elem.addEventListener('mouseleave', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.backgroundColor + }) + icon.elem.addEventListener('mousedown', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : this.clickBackgroundColor + }) + icon.elem.addEventListener('mouseup', () => { + icon.elem.style.backgroundColor = icon === this.chart.activeIcon ? this.activeBackgroundColor : 'transparent' + }) + icon.elem.addEventListener('click', () => { + if (this.chart.activeIcon) { + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + group.setAttribute("fill", this.iconColor) + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(false) + if (this.chart.activeIcon === icon) { + return this.chart.activeIcon = null + } + } + this.chart.activeIcon = icon + group.setAttribute("fill", this.activeIconColor) + icon.elem.style.backgroundColor = this.activeBackgroundColor + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(true) + }) + this.chart.commandFunctions.push((event) => { + if (event.altKey && event.code === keyCmd) { + event.preventDefault() + if (this.chart.activeIcon) { + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + group.setAttribute("fill", this.iconColor) + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(false) + } + this.chart.activeIcon = icon + group.setAttribute("fill", this.activeIconColor) + icon.elem.style.backgroundColor = this.activeBackgroundColor + document.body.style.cursor = 'crosshair' + this.chart.cursor = 'crosshair' + this.chart.activeIcon.action(true) + return true + } + }) + return icon.elem + } + + onTrendSelect(toggle, ray = false) { + let trendLine = { + line: null, + color: 'rgb(15, 139, 237)', + markers: null, + data: null, + from: null, + to: null, + ray: ray, + } + let firstTime = null + let firstPrice = null + let currentTime = null + + + if (!toggle) { + this.chart.chart.unsubscribeClick(this.clickHandler) + return + } + let crosshairHandlerTrend = (param) => { + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + + if (!this.makingDrawing) return + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time + currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) + if (!currentTime) { + let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) + } + let currentPrice = this.chart.series.coordinateToPrice(param.point.y) + + + if (!currentTime) return this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart, ray) + trendLine.from = [data[0].time, data[0].value] + trendLine.to = [data[data.length - 1].time, data[data.length-1].value] + + trendLine.line.setData(data) + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + if (!ray) { + trendLine.markers = [ + {time: firstTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: currentTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + trendLine.line.setMarkers(trendLine.markers) + } + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + }, 10); + } + + this.clickHandler = (param) => { + if (!this.makingDrawing) { + this.makingDrawing = true + trendLine.line = this.chart.chart.addLineSeries({ + color: 'rgb(15, 139, 237)', + lineWidth: 2, + lastValueVisible: false, + priceLineVisible: false, + crosshairMarkerVisible: false, + autoscaleInfoProvider: () => ({ + priceRange: { + minValue: 1_000_000_000, + maxValue: 0, + }, + }), + }) + firstPrice = this.chart.series.coordinateToPrice(param.point.y) + firstTime = !ray ? this.chart.chart.timeScale().coordinateToTime(param.point.x) : this.chart.candleData[this.chart.candleData.length - 1].time + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } + else { + this.chart.chart.applyOptions({handleScroll: true}) + this.makingDrawing = false + trendLine.line.setMarkers([]) + this.drawings.push(trendLine) + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + this.chart.chart.unsubscribeClick(this.clickHandler) + document.body.style.cursor = 'default' + this.chart.cursor = 'default' + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + this.chart.activeIcon = null + this.saveDrawings() + } + } + this.chart.chart.subscribeClick(this.clickHandler) + } + + clickHandlerHorz = (param) => { + let price = this.chart.series.coordinateToPrice(param.point.y) + let lineStyle = LightweightCharts.LineStyle.Solid + let line = new HorizontalLine(this.chart, 'toolBox', price,'red', 2, lineStyle, true) + this.drawings.push(line) + this.chart.chart.unsubscribeClick(this.clickHandlerHorz) + document.body.style.cursor = 'default' + this.chart.cursor = 'default' + this.chart.activeIcon.elem.style.backgroundColor = this.backgroundColor + this.chart.activeIcon = null + this.saveDrawings() + } + onHorzSelect(toggle) { + !toggle ? this.chart.chart.unsubscribeClick(this.clickHandlerHorz) : this.chart.chart.subscribeClick(this.clickHandlerHorz) + } + + onRaySelect(toggle) { + this.onTrendSelect(toggle, true) + } + + subscribeHoverMove() { + let hoveringOver = null + let x, y + let colorPicker = new ColorPicker(this.saveDrawings) + + let onClickDelete = () => this.deleteDrawing(contextMenu.drawing) + let onClickColor = (rect) => colorPicker.openMenu(rect, contextMenu.drawing) + let contextMenu = new ContextMenu() + contextMenu.menuItem('Color Picker', onClickColor, () =>{ + document.removeEventListener('click', colorPicker.closeMenu) + colorPicker.container.style.display = 'none' + }) + contextMenu.separator() + contextMenu.menuItem('Delete Drawing', onClickDelete) + + let hoverOver = (param) => { + if (!param.point || this.makingDrawing) return + this.chart.chart.unsubscribeCrosshairMove(hoverOver) + x = param.point.x + y = param.point.y + + this.drawings.forEach((drawing) => { + let boundaryConditional + let horizontal = false + + if ('price' in drawing) { + horizontal = true + let priceCoordinate = this.chart.series.priceToCoordinate(drawing.price) + boundaryConditional = Math.abs(priceCoordinate - param.point.y) < 6 + } else { + let trendData = param.seriesData.get(drawing.line); + if (!trendData) return + let priceCoordinate = this.chart.series.priceToCoordinate(trendData.value) + let timeCoordinate = this.chart.chart.timeScale().timeToCoordinate(trendData.time) + boundaryConditional = Math.abs(priceCoordinate - param.point.y) < 6 && Math.abs(timeCoordinate - param.point.x) < 6 + } + + if (boundaryConditional) { + if (hoveringOver === drawing) return + if (!horizontal && !drawing.ray) drawing.line.setMarkers(drawing.markers) + document.body.style.cursor = 'pointer' + document.addEventListener('mousedown', checkForClick) + document.addEventListener('mouseup', checkForRelease) + hoveringOver = drawing + contextMenu.listen(true) + contextMenu.drawing = drawing + } else if (hoveringOver === drawing) { + if (!horizontal && !drawing.ray) drawing.line.setMarkers([]) + document.body.style.cursor = this.chart.cursor + hoveringOver = null + contextMenu.listen(false) + if (!mouseDown) { + document.removeEventListener('mousedown', checkForClick) + document.removeEventListener('mouseup', checkForRelease) + } + } + }) + this.chart.chart.subscribeCrosshairMove(hoverOver) + } + let originalIndex + let originalTime + let originalPrice + let mouseDown = false + let clickedEnd = false + let labelColor + let checkForClick = (event) => { + mouseDown = true + document.body.style.cursor = 'grabbing' + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + + this.chart.chart.unsubscribeCrosshairMove(hoverOver) + + labelColor = this.chart.chart.options().crosshair.horzLine.labelBackgroundColor + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: hoveringOver.color}}}) + if ('price' in hoveringOver) { + originalPrice = hoveringOver.price + this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) + } else if (Math.abs(this.chart.chart.timeScale().timeToCoordinate(hoveringOver.from[0]) - x) < 4 && !hoveringOver.ray) { + clickedEnd = 'first' + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } else if (Math.abs(this.chart.chart.timeScale().timeToCoordinate(hoveringOver.to[0]) - x) < 4 && !hoveringOver.ray) { + clickedEnd = 'last' + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + } else { + originalPrice = this.chart.series.coordinateToPrice(y) + originalTime = this.chart.chart.timeScale().coordinateToTime(x * this.chart.scale.width) + this.chart.chart.subscribeCrosshairMove(checkForDrag) + } + originalIndex = this.chart.chart.timeScale().coordinateToLogical(x) + document.removeEventListener('mousedown', checkForClick) + } + let checkForRelease = (event) => { + mouseDown = false + document.body.style.cursor = this.chart.cursor + + this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: labelColor}}}) + if (hoveringOver && 'price' in hoveringOver && hoveringOver.id !== 'toolBox') { + window.callbackFunction(`${hoveringOver.id}_~_${hoveringOver.price.toFixed(8)}`); + } + hoveringOver = null + document.removeEventListener('mousedown', checkForClick) + document.removeEventListener('mouseup', checkForRelease) + this.chart.chart.subscribeCrosshairMove(hoverOver) + this.saveDrawings() + } + let checkForDrag = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(checkForDrag) + if (!mouseDown) return + + let priceAtCursor = this.chart.series.coordinateToPrice(param.point.y) + + let priceDiff = priceAtCursor - originalPrice + let barsToMove = param.logical - originalIndex + + let startBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.from[0]).getTime()) + let endBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.to[0]).getTime()) + + let startDate + let endBar + if (hoveringOver.ray) { + endBar = this.chart.candleData[startBarIndex + barsToMove] + startDate = hoveringOver.to[0] + } else { + startDate = this.chart.candleData[startBarIndex + barsToMove].time + endBar = endBarIndex === -1 ? null : this.chart.candleData[endBarIndex + barsToMove] + } + + let endDate = endBar ? endBar.time : dateToStamp(new Date(stampToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval))) + let startValue = hoveringOver.from[1] + priceDiff + let endValue = hoveringOver.to[1] + priceDiff + let data = calculateTrendLine(startDate, startValue, endDate, endValue, this.interval, this.chart, hoveringOver.ray) + + + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + + hoveringOver.from = [data[0].time, data[0].value] + hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] + hoveringOver.line.setData(data) + + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + if (!hoveringOver.ray) { + hoveringOver.markers = [ + {time: startDate, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: endDate, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + hoveringOver.line.setMarkers(hoveringOver.markers) + } + + originalIndex = param.logical + originalPrice = priceAtCursor + this.chart.chart.subscribeCrosshairMove(checkForDrag) + } + let crosshairHandlerTrend = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerTrend) + if (!mouseDown) return + + let currentPrice = this.chart.series.coordinateToPrice(param.point.y) + let currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) + + let [firstTime, firstPrice] = [null, null] + if (clickedEnd === 'last') { + firstTime = hoveringOver.from[0] + firstPrice = hoveringOver.from[1] + } else if (clickedEnd === 'first') { + firstTime = hoveringOver.to[0] + firstPrice = hoveringOver.to[1] + } + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() + + let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time + if (!currentTime) { + let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) + } + let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart) + hoveringOver.line.setData(data) + + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.timeScale().setVisibleLogicalRange(logical) + + hoveringOver.from = [data[0].time, data[0].value] + hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] + + + hoveringOver.markers = [ + {time: firstTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1}, + {time: currentTime, position: 'inBar', color: '#1E80F0', shape: 'circle', size: 0.1} + ] + hoveringOver.line.setMarkers(hoveringOver.markers) + + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerTrend) + }, 10); + } + let crosshairHandlerHorz = (param) => { + if (!param.point) return + this.chart.chart.unsubscribeCrosshairMove(crosshairHandlerHorz) + if (!mouseDown) return + hoveringOver.updatePrice(this.chart.series.coordinateToPrice(param.point.y)) + setTimeout(() => { + this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) + }, 10) + } + this.chart.chart.subscribeCrosshairMove(hoverOver) + } + + renderDrawings() { + this.drawings.forEach((item) => { + if ('price' in item) return + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) + let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) + item.from = [data[0].time, data[0].value] + item.to = [data[data.length - 1].time, data[data.length-1].value] + item.line.setData(data) + }) + } + + deleteDrawing(drawing) { + if ('price' in drawing) { + this.chart.series.removePriceLine(drawing.line) + } + else { + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + this.chart.chart.removeSeries(drawing.line); + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + } + this.drawings.splice(this.drawings.indexOf(drawing), 1) + this.saveDrawings() + } + + clearDrawings() { + this.drawings.forEach((item) => { + if ('price' in item) this.chart.series.removePriceLine(item.line) + else this.chart.chart.removeSeries(item.line) + }) + this.drawings = [] + } + + saveDrawings() { + let drawingsString = JSON.stringify(this.drawings, (key, value) => { + if (key === '' && Array.isArray(value)) { + return value.filter(item => !(item && typeof item === 'object' && 'priceLine' in item && item.id !== 'toolBox')); + } else if (key === 'line' || (value && typeof value === 'object' && 'priceLine' in value && value.id !== 'toolBox')) { + return undefined; + } + return value; + }); + window.callbackFunction(`save_drawings${this.chart.id}_~_${drawingsString}`) + } + + loadDrawings(drawings) { + this.drawings = drawings + this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + this.drawings.forEach((item) => { + let idx = this.drawings.indexOf(item) + if ('price' in item) { + this.drawings[idx] = new HorizontalLine(this.chart, 'toolBox', item.priceLine.price, item.priceLine.color, 2, item.priceLine.lineStyle, item.priceLine.axisLabelVisible) + } + else { + this.drawings[idx].line = this.chart.chart.addLineSeries({ + lineWidth: 2, + color: this.drawings[idx].color, + lastValueVisible: false, + priceLineVisible: false, + crosshairMarkerVisible: false, + autoscaleInfoProvider: () => ({ + priceRange: { + minValue: 1_000_000_000, + maxValue: 0, + }, + }), + }) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) + let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) + item.from = [data[0].time, data[0].value] + item.to = [data[data.length - 1].time, data[data.length-1].value] + item.line.setData(data) + } + }) + this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + } + } + window.ToolBox = ToolBox +} + +if (!window.ColorPicker) { + class ColorPicker { + constructor(saveDrawings) { + this.saveDrawings = saveDrawings + + this.container = document.createElement('div') + this.container.style.maxWidth = '170px' + this.container.style.backgroundColor = '#191B1E' + this.container.style.position = 'absolute' + this.container.style.zIndex = '10000' + this.container.style.display = 'none' + this.container.style.flexDirection = 'column' + this.container.style.alignItems = 'center' + this.container.style.border = '2px solid #3C434C' + this.container.style.borderRadius = '8px' + this.container.style.cursor = 'default' + + let colorPicker = document.createElement('div') + colorPicker.style.margin = '10px' + colorPicker.style.display = 'flex' + colorPicker.style.flexWrap = 'wrap' + + let colors = [ + '#EBB0B0','#E9CEA1','#E5DF80','#ADEB97','#A3C3EA','#D8BDED', + '#E15F5D','#E1B45F','#E2D947','#4BE940','#639AE1','#D7A0E8', + '#E42C2A','#E49D30','#E7D827','#3CFF0A','#3275E4','#B06CE3', + '#F3000D','#EE9A14','#F1DA13','#2DFC0F','#1562EE','#BB00EF', + '#B50911','#E3860E','#D2BD11','#48DE0E','#1455B4','#6E009F', + '#7C1713','#B76B12','#8D7A13','#479C12','#165579','#51007E', + ] + + colors.forEach((color) => colorPicker.appendChild(this.makeColorBox(color))) + + let separator = document.createElement('div') + separator.style.backgroundColor = '#3C434C' + separator.style.height = '1px' + separator.style.width = '130px' + + let opacity = document.createElement('div') + opacity.style.margin = '10px' + + let opacityText = document.createElement('div') + opacityText.style.color = 'lightgray' + opacityText.style.fontSize = '12px' + opacityText.innerText = 'Opacity' + + let opacityValue = document.createElement('div') + opacityValue.style.color = 'lightgray' + opacityValue.style.fontSize = '12px' + + let opacitySlider = document.createElement('input') + opacitySlider.type = 'range' + opacitySlider.value = this.opacity*100 + opacityValue.innerText = opacitySlider.value+'%' + opacitySlider.oninput = () => { + opacityValue.innerText = opacitySlider.value+'%' + this.opacity = opacitySlider.value/100 + this.updateColor() + } + + opacity.appendChild(opacityText) + opacity.appendChild(opacitySlider) + opacity.appendChild(opacityValue) + + this.container.appendChild(colorPicker) + this.container.appendChild(separator) + this.container.appendChild(opacity) + document.getElementById('wrapper').appendChild(this.container) + + } + makeColorBox(color) { + let box = document.createElement('div') + box.style.width = '18px' + box.style.height = '18px' + box.style.borderRadius = '3px' + box.style.margin = '3px' + box.style.boxSizing = 'border-box' + box.style.backgroundColor = color + + box.addEventListener('mouseover', (event) => box.style.border = '2px solid lightgray') + box.addEventListener('mouseout', (event) => box.style.border = 'none') + + let rgbValues = this.extractRGB(color) + + box.addEventListener('click', (event) => { + this.rgbValues = rgbValues + this.updateColor() + }) + return box + } + extractRGB = (anyColor) => { + let dummyElem = document.createElement('div'); + dummyElem.style.color = anyColor; + document.body.appendChild(dummyElem); + let computedColor = getComputedStyle(dummyElem).color; + document.body.removeChild(dummyElem); + let colorValues = computedColor.match(/\d+/g).map(Number); + let isRgba = computedColor.includes('rgba'); + let opacity = isRgba ? parseFloat(computedColor.split(',')[3]) : 1 + return [colorValues[0], colorValues[1], colorValues[2], opacity] + } + updateColor() { + let oColor = `rgba(${this.rgbValues[0]}, ${this.rgbValues[1]}, ${this.rgbValues[2]}, ${this.opacity})` + if ('price' in this.drawing) this.drawing.updateColor(oColor) + else { + this.drawing.color = oColor + this.drawing.line.applyOptions({color: oColor}) + } + this.saveDrawings() + } + openMenu(rect, drawing) { + this.drawing = drawing + this.rgbValues = this.extractRGB(drawing.color) + this.opacity = parseFloat(this.rgbValues[3]) + this.container.style.top = (rect.top-30)+'px' + this.container.style.left = rect.right+'px' + this.container.style.display = 'flex' + setTimeout(() => document.addEventListener('mousedown', (event) => { + if (!this.container.contains(event.target)) { + this.closeMenu() + } + }), 10) + } + closeMenu(event) { + document.removeEventListener('click', this.closeMenu) + this.container.style.display = 'none' + } + } + window.ColorPicker = ColorPicker +} diff --git a/docs/source/_templates/landing.html b/docs/source/_templates/landing.html new file mode 100644 index 0000000..c806168 --- /dev/null +++ b/docs/source/_templates/landing.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + Getting Started - lightweight-charts-python 1.0.16 documentation + + + + + + + + + + + + + + +
+ +
+ +
+ + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + +
+ + + + + +

Lightweight Charts Python

+ + + TradingView charts, wrapped for Python. + + + + +
+ + + + +
+
+
pip install lightweight-charts
+
+
+ + + + + + + +
+ + +
+
import pandas as pd
+from lightweight_charts import Chart
+
+
+if __name__ == '__main__':
+
+    chart = Chart(toolbox=True)
+
+    df = pd.read_csv('ohlcv.csv')
+    chart.set(df)
+
+    chart.show(block=True)
+
+
+
+
+ + + + + + + + +
+ + + + + +
+ + + +
+ +
+
+
+ +
+ + +
+
+ + + + + + + + + +
+
+
+ +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/docs/source/callbacks.md b/docs/source/callbacks.md deleted file mode 100644 index 1fa14e4..0000000 --- a/docs/source/callbacks.md +++ /dev/null @@ -1,156 +0,0 @@ -# Events - -Events allow asynchronous and synchronous callbacks to be passed back into python. - -___ -## `chart.events` - -`events.search` `->` `chart` | `string`: Fires upon searching. Searchbox will be automatically created. - -`events.new_bar` `->` `chart`: Fires when a new candlestick is added to the chart. - -`events.range_change` `->` `chart` | `bars_before` | `bars_after`: Fires when the range (visibleLogicalRange) changes. - -Chart events can be subscribed to using: `chart.events. += ` -___ - -## How to use Events - -Take a look at this minimal example: - -```python -from lightweight_charts import Chart - - -def on_search(chart, string): - print(f'Search Text: "{string}" | Chart/SubChart ID: "{chart.id}"') - - -if __name__ == '__main__': - chart = Chart() - chart.events.search += on_search - chart.show(block=True) - -``` -Upon searching in a pane, the expected output would be akin to: -``` -Search Text: "AAPL" | Chart/SubChart ID: "window.blyjagcr" -``` -The ID shown above will change depending upon which pane was used to search, allowing for access to the object in question. - -```{important} -* When using `show` rather than `show_async`, block should be set to `True` (`chart.show(block=True)`). -* Event callables can be either coroutines, methods, or functions. -``` - -___ - -## `TopBar` -The `TopBar` class represents the top bar shown on the chart: - -![topbar](https://i.imgur.com/Qu2FW9Y.png) - -This object is accessed from the `topbar` attribute of the chart object (`chart.topbar.`). - -Switchers, text boxes and buttons can be added to the top bar, and their instances can be accessed through the `topbar` dictionary. For example: - -```python -chart.topbar.textbox('symbol', 'AAPL') # Declares a textbox displaying 'AAPL'. -print(chart.topbar['symbol'].value) # Prints the value within ('AAPL') - -chart.topbar['symbol'].set('MSFT') # Sets the 'symbol' textbox to 'MSFT' -print(chart.topbar['symbol'].value) # Prints the value again ('MSFT') -``` - -Events can also be emitted from the topbar. For example: - -```python -from lightweight_charts import Chart - -def on_button_press(chart): - new_button_value = 'On' if chart.topbar['my_button'].value == 'Off' else 'Off' - chart.topbar['my_button'].set(new_button_value) - print(f'Turned something {new_button_value.lower()}.') - - -if __name__ == '__main__': - chart = Chart() - chart.topbar.button('my_button', 'Off', func=on_button_press) - chart.show(block=True) - -``` - -___ - -### `switcher` -`name: str` | `options: tuple` | `default: str` | `func: callable` - -* `name`: the name of the switcher which can be used to access it from the `topbar` dictionary. -* `options`: The options for each switcher item. -* `default`: The initial switcher option set. -___ - -### `textbox` -`name: str` | `initial_text: str` - -* `name`: the name of the text box which can be used to access it from the `topbar` dictionary. -* `initial_text`: The text to show within the text box. -___ - -### `button` -`name: str` | `button_text: str` | `separator: bool` | `func: callable` - -* `name`: the name of the text box to access it from the `topbar` dictionary. -* `button_text`: Text to show within the button. -* `separator`: places a separator line to the right of the button. -* `func`: The event handler which will be executed upon a button click. -___ - -## Callbacks Example: - -```python -import pandas as pd -from lightweight_charts import Chart - - -def get_bar_data(symbol, timeframe): - if symbol not in ('AAPL', 'GOOGL', 'TSLA'): - print(f'No data for "{symbol}"') - return pd.DataFrame() - return pd.read_csv(f'../examples/6_callbacks/bar_data/{symbol}_{timeframe}.csv') - - -def on_search(chart, searched_string): - new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.topbar['symbol'].set(searched_string) - chart.set(new_data) - - -def on_timeframe_selection(chart): - new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.set(new_data, True) - - -def on_horizontal_line_move(chart, line): - print(f'Horizontal line moved to: {line.price}') - - -if __name__ == '__main__': - chart = Chart(toolbox=True) - chart.legend(True) - - chart.topbar.textbox('symbol', 'TSLA') - chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', - func=on_timeframe_selection) - - df = get_bar_data('TSLA', '5min') - chart.set(df) - - chart.horizontal_line(200, func=on_horizontal_line_move) - - chart.show(block=True) -``` diff --git a/docs/source/common_methods.md b/docs/source/common_methods.md deleted file mode 100644 index 861546c..0000000 --- a/docs/source/common_methods.md +++ /dev/null @@ -1,360 +0,0 @@ -# Common Methods -The methods below can be used within all chart objects. - -___ -## `set` -`data: pd.DataFrame` `render_drawings: bool` - -Sets the initial data for the chart. The data must be given as a DataFrame, with the columns: - -`time | open | high | low | close | volume` - -The `time` column can also be named `date` or be the index, and the `volume` column can be omitted if volume is not enabled. Column names are not case sensitive. - -If `render_drawings` is `True`, any drawings made using the `toolbox` will be redrawn with the new data. This is designed to be used when switching to a different timeframe of the same symbol. - -```{important} -the `time` column must have rows all of the same timezone and locale. This is particularly noticeable for data which crosses over daylight saving hours on data with intervals of less than 1 day. Errors are likely to be raised if they are not converted beforehand. -``` - -An empty `DataFrame` object or `None` can also be given to this method, which will erase all candle and volume data displayed on the chart. -___ - -## `update` -`series: pd.Series` - -Updates the chart data from a `pd.Series` object. The bar should contain values with labels akin to `set`. -___ - -## `update_from_tick` -`series: pd.Series` | `cumulative_volume: bool` - -Updates the chart from a tick. The series should use the labels: - -`time | price | volume` - -As before, the `time` can also be named `date`, and the `volume` can be omitted if volume is not enabled. The `time` column can also be the name of the Series object. - -```{information} -The provided ticks do not need to be rounded to an interval (1 min, 5 min etc.), as the library handles this automatically. -``` - -If `cumulative_volume` is used, the volume data given will be added onto the latest bar of volume data. -___ - -## `create_line` (Line) -`name: str` | `color: str` | `style: LINE_STYLE`| `width: int` | `price_line: bool` | `price_label: bool` | `-> Line` - -Creates and returns a `Line` object, representing a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: -[`title`](#title), [`marker`](#marker), [`horizontal_line`](#horizontal-line) [`hide_data`](#hide-data), [`show_data`](#show-data) and[`price_line`](#price-line). - -Its instance should only be accessed from this method. - -### `set` -`data: pd.DataFrame` - -Sets the data for the line. - -When a name has not been set upon declaration, the columns should be named: `time | value` (Not case sensitive). - -Otherwise, the method will use the column named after the string given in `name`. This name will also be used within the legend of the chart. For example: -```python -line = chart.create_line('SMA 50') - -# DataFrame with columns: date | SMA 50 -df = pd.read_csv('sma50.csv') - -line.set(df) -``` - -### `update` -`series: pd.Series` - -Updates the data for the line. - -This should be given as a Series object, with labels akin to the `line.set()` function. - -### `delete` -Irreversibly deletes the line. - -___ - -## `lines` -`-> List[Line]` - -Returns a list of all lines for the chart or subchart. -___ - -## `trend_line` -`start_time: str/datetime` | `start_value: float/int` | `end_time: str/datetime` | `end_value: float/int` | `color: str` | `width: int` | `-> Line` - -Creates a trend line, drawn from the first point (`start_time`, `start_value`) to the last point (`end_time`, `end_value`). -___ - -## `ray_line` -`start_time: str/datetime` | `value: float/int` | `color: str` | `width: int` | `-> Line` - -Creates a ray line, drawn from the first point (`start_time`, `value`) and onwards. -___ - -## `marker` -`time: datetime` | `position: 'above'/'below'/'inside'` | `shape: 'arrow_up'/'arrow_down'/'circle'/'square'` | `color: str` | `text: str` | `-> str` - -Adds a marker to the chart, and returns its id. - -If the `time` parameter is not given, the marker will be placed at the latest bar. - -When using multiple markers, they should be placed in chronological order or display bugs may be present. -___ - -## `remove_marker` -`marker_id: str` - -Removes the marker with the given id. - -Usage: -```python -marker = chart.marker(text='hello_world') -chart.remove_marker(marker) -``` -___ - -## `horizontal_line` (HorizontalLine) -`price: float/int` | `color: str` | `width: int` | `style: 'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` | `text: str` | `axis_label_visible: bool` | `interactive: bool` | `-> HorizontalLine` - -Places a horizontal line at the given price, and returns a `HorizontalLine` object, representing a `PriceLine` in Lightweight Charts. - -If `interactive` is set to `True`, this horizontal line can be edited on the chart. Upon its movement a callback will also be emitted to an `on_horizontal_line_move` method, containing its ID and price. The toolbox should be enabled during its usage. It is designed to be used to update an order (limit, stop, etc.) directly on the chart. - - -### `update` -`price: float/int` - -Updates the price of the horizontal line. - -### `label` -`text: str` - -Updates the label of the horizontal line. - -### `delete` - -Irreversibly deletes the horizontal line. -___ - -## `remove_horizontal_line` -`price: float/int` - -Removes a horizontal line at the given price. -___ - -## `clear_markers` - -Clears the markers displayed on the data. -___ - -## `clear_horizontal_lines` - -Clears the horizontal lines displayed on the data. -___ - -## `precision` -`precision: int` - -Sets the precision of the chart based on the given number of decimal places. -___ - -## `price_scale` -`mode: 'normal'/'logarithmic'/'percentage'/'index100'` | `align_labels: bool` | `border_visible: bool` | `border_color: str` | `text_color: str` | `entire_text_only: bool` | `ticks_visible: bool` | `scale_margin_top: float` | `scale_margin_bottom: float` - -Price scale options for the chart. -___ - -## `time_scale` -`right_offset: int` | `min_bar_spacing: float` | `visible: bool` | `time_visible: bool` | `seconds_visible: bool` | `border_visible: bool` | `border_color: str` - -Timescale options for the chart. -___ - -## `layout` -`background_color: str` | `text_color: str` | `font_size: int` | `font_family: str` - -Global layout options for the chart. -___ - -## `grid` -`vert_enabled: bool` | `horz_enabled: bool` | `color: str` | `style: 'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` - -Grid options for the chart. -___ - -## `candle_style` -`up_color: str` | `down_color: str` | `wick_enabled: bool` | `border_enabled: bool` | `border_up_color: str` | `border_down_color: str` | `wick_up_color: str` | `wick_down_color: str` - - Candle styling for each of the candle's parts (border, wick). - -```{admonition} Color Formats -:class: note - -Throughout the library, colors should be given as either: -* rgb: `rgb(100, 100, 100)` -* rgba: `rgba(100, 100, 100, 0.7)` -* hex: `#32a852` -``` -___ - -## `volume_config` -`scale_margin_top: float` | `scale_margin_bottom: float` | `up_color: str` | `down_color: str` - -Volume config options. - -```{important} -The float values given to scale the margins must be greater than 0 and less than 1. -``` -___ - -## `crosshair` -`mode` | `vert_visible: bool` | `vert_width: int` | `vert_color: str` | `vert_style: str` | `vert_label_background_color: str` | `horz_visible: bool` | `horz_width: int` | `horz_color: str` | `horz_style: str` | `horz_label_background_color: str` - -Crosshair formatting for its vertical and horizontal axes. - -`vert_style` and `horz_style` should be given as one of: `'solid'/'dotted'/'dashed'/'large_dashed'/'sparse_dotted'` -___ - -## `watermark` -`text: str` | `font_size: int` | `color: str` - -Overlays a watermark on top of the chart. -___ - -## `legend` -`visible: bool` | `ohlc: bool` | `percent: bool` | `lines: bool` | `color: str` | `font_size: int` | `font_family: str` - -Configures the legend of the chart. -___ - -## `spinner` -`visible: bool` - -Shows a loading spinner on the chart, which can be used to visualise the loading of large datasets, API calls, etc. -___ - -## `price_line` -`label_visible: bool` | `line_visible: bool` | `title: str` - -Configures the visibility of the last value price line and its label. -___ - -## `fit` - -Attempts to fit all data displayed on the chart within the viewport (`fitContent()`). -___ - -## `hide_data` - -Hides the candles on the chart. -___ - -## `show_data` - -Shows the hidden candles on the chart. -___ - -## `hotkey` -`modifier: 'ctrl'/'shift'/'alt'/'meta'` | `key: str/int/tuple` | `func: callable` - -Adds a global hotkey to the chart window, which will execute the method or function given. - -When using a number in `key`, it should be given as an integer. If multiple key commands are needed for the same function, you can pass a tuple to `key`. For example: - -```python -def place_buy_order(key): - print(f'Buy {key} shares.') - - -def place_sell_order(key): - print(f'Sell all shares, because I pressed {key}.') - - -if __name__ == '__main__': - chart = Chart() - chart.hotkey('shift', (1, 2, 3), place_buy_order) - chart.hotkey('shift', 'X', place_sell_order) - chart.show(block=True) -``` - -___ - -## `create_table` -`width: int/float` | `height: int/float` | `headings: tuple[str]` | `widths: tuple[float]` | `alignments: tuple[str]` | `position: 'left'/'right'/'top'/'bottom'` | `draggable: bool` | `func: callable` | `-> Table` - -Creates and returns a [`Table`](https://lightweight-charts-python.readthedocs.io/en/latest/tables.html) object. -___ - -## `create_subchart` (SubChart) -`position: 'left'/'right'/'top'/'bottom'`, `width: float` | `height: float` | `sync: bool/str` | `scale_candles_only: bool`|`toolbox: bool` | `-> SubChart` - -Creates and returns a `SubChart` object, placing it adjacent to the previous `Chart` or `SubChart`. This allows for the use of multiple chart panels within the same `Chart` window. Its instance should only be accessed by using this method. - -`position`: specifies how the Subchart will float. - -`height` | `width`: Specifies the size of the Subchart, where `1` is the width/height of the window (100%) - -`sync`: If given as `True`, the Subchart's timescale and crosshair will follow that of the declaring `Chart` or `SubChart`. If a `str` is passed, the `SubChart` will follow the panel with the given id. Chart ids can be accessed from the`chart.id` and `subchart.id` attributes. - -```{important} -`width` and `height` should be given as a number between 0 and 1. -``` - -`SubCharts` are arranged horizontally from left to right. When the available space is no longer sufficient, the subsequent `SubChart` will be positioned on a new row, starting from the left side. - -### Grid of 4 Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -if __name__ == '__main__': - chart = Chart(inner_width=0.5, inner_height=0.5) - chart2 = chart.create_subchart(position='right', width=0.5, height=0.5) - chart3 = chart.create_subchart(position='left', width=0.5, height=0.5) - chart4 = chart.create_subchart(position='right', width=0.5, height=0.5) - - chart.watermark('1') - chart2.watermark('2') - chart3.watermark('3') - chart4.watermark('4') - - df = pd.read_csv('ohlcv.csv') - chart.set(df) - chart2.set(df) - chart3.set(df) - chart4.set(df) - - chart.show(block=True) - -``` - -### Synced Line Chart Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -if __name__ == '__main__': - chart = Chart(inner_width=1, inner_height=0.8) - chart.time_scale(visible=False) - - chart2 = chart.create_subchart(width=1, height=0.2, sync=True) - line = chart2.create_line() - - df = pd.read_csv('ohlcv.csv') - df2 = pd.read_csv('rsi.csv') - - chart.set(df) - line.set(df2) - - chart.show(block=True) -``` - - diff --git a/docs/source/conf.py b/docs/source/conf.py index 60b009e..27551a3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,12 +1,110 @@ +import os.path + project = 'lightweight-charts-python' copyright = '2023, louisnw' author = 'louisnw' -release = '1.0.16' +release = '1.0.17' -extensions = ["myst_parser"] +extensions = [ + "myst_parser", + "sphinx_tippy", + "sphinx_copybutton" +] + +myst_enable_extensions = [ + "deflist", + "fieldlist", + "attrs_block" +] + +source_suffix = '.md' +master_doc = 'index' templates_path = ['_templates'] -exclude_patterns = [] +html_additional_pages = { + 'index': 'landing.html' +} +html_css_files = [ + 'splash.css' +] + +html_title = '''Lightweight
Charts
Python
''' + html_theme = 'furo' html_static_path = ['_static'] + +import sys + +sys.path.append(os.path.abspath('_ext')) + +pygments_style = 'styles.LightStyle' +pygments_dark_style = "styles.DarkStyle" + +html_theme_options = { + "light_css_variables": { + + }, + "dark_css_variables": { + + "color-background-primary": '#121417', + "color-background-secondary": '#181b1e', + + }, + "footer_icons": [ + { + "name": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/7wzcr2p9vxm", + "html": """ +
+ + + + + + + + + + + + + + + + + Support the library! +
+ """, + "class": "", + }, + { + "name": "GitHub", + "url": "https://github.com/louisnw01/lightweight-charts-python", + "html": """ + + + + """, + "class": "", + }, + ], +} + + + + diff --git a/docs/source/examples/events.md b/docs/source/examples/events.md new file mode 100644 index 0000000..ee468fc --- /dev/null +++ b/docs/source/examples/events.md @@ -0,0 +1,74 @@ +# Events + +## Hotkey Example + +```python +from lightweight_charts import Chart + +def place_buy_order(key): + print(f'Buy {key} shares.') + + +def place_sell_order(key): + print(f'Sell all shares, because I pressed {key}.') + + +if __name__ == '__main__': + chart = Chart() + chart.hotkey('shift', (1, 2, 3), place_buy_order) + chart.hotkey('shift', 'X', place_sell_order) + chart.show(block=True) +``` +___ + + +## Topbar Example + +```python +import pandas as pd +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if symbol not in ('AAPL', 'GOOGL', 'TSLA'): + print(f'No data for "{symbol}"') + return pd.DataFrame() + return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') + + +def on_search(chart, searched_string): + new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.topbar['symbol'].set(searched_string) + chart.set(new_data) + + +def on_timeframe_selection(chart): + new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.set(new_data, True) + + +def on_horizontal_line_move(chart, line): + print(f'Horizontal line moved to: {line.price}') + + +if __name__ == '__main__': + chart = Chart(toolbox=True) + chart.legend(True) + + chart.events.search += on_search + + chart.topbar.textbox('symbol', 'TSLA') + chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', + func=on_timeframe_selection) + + df = get_bar_data('TSLA', '5min') + chart.set(df) + + chart.horizontal_line(200, func=on_horizontal_line_move) + + chart.show(block=True) +``` diff --git a/docs/source/examples/gui_examples.md b/docs/source/examples/gui_examples.md new file mode 100644 index 0000000..0678068 --- /dev/null +++ b/docs/source/examples/gui_examples.md @@ -0,0 +1,98 @@ +# Alternative GUI's + + +## PyQt5 / PySide6 + +```python +import pandas as pd +from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget + +from lightweight_charts.widgets import QtChart + +app = QApplication([]) +window = QMainWindow() +layout = QVBoxLayout() +widget = QWidget() +widget.setLayout(layout) + +window.resize(800, 500) +layout.setContentsMargins(0, 0, 0, 0) + +chart = QtChart(widget) + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +layout.addWidget(chart.get_webview()) + +window.setCentralWidget(widget) +window.show() + +app.exec_() +``` +___ + + + +## WxPython + +```python +import wx +import pandas as pd + +from lightweight_charts.widgets import WxChart + + +class MyFrame(wx.Frame): + def __init__(self): + super().__init__(None) + self.SetSize(1000, 500) + + panel = wx.Panel(self) + sizer = wx.BoxSizer(wx.VERTICAL) + panel.SetSizer(sizer) + + chart = WxChart(panel) + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + + sizer.Add(chart.get_webview(), 1, wx.EXPAND | wx.ALL) + sizer.Layout() + self.Show() + + +if __name__ == '__main__': + app = wx.App() + frame = MyFrame() + app.MainLoop() +``` +___ +## Jupyter + +```python +import pandas as pd +from lightweight_charts import JupyterChart + +chart = JupyterChart() + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +chart.load() +``` +___ + +## Streamlit + +```python +import pandas as pd +from lightweight_charts.widgets import StreamlitChart + +chart = StreamlitChart(width=900, height=600) + +df = pd.read_csv('ohlcv.csv') +chart.set(df) + +chart.load() +``` \ No newline at end of file diff --git a/docs/source/examples/subchart.md b/docs/source/examples/subchart.md new file mode 100644 index 0000000..3ddd397 --- /dev/null +++ b/docs/source/examples/subchart.md @@ -0,0 +1,50 @@ +# Subcharts + +## Grid of 4 + +```python +import pandas as pd +from lightweight_charts import Chart + +if __name__ == '__main__': + chart = Chart(inner_width=0.5, inner_height=0.5) + chart2 = chart.create_subchart(position='right', width=0.5, height=0.5) + chart3 = chart.create_subchart(position='left', width=0.5, height=0.5) + chart4 = chart.create_subchart(position='right', width=0.5, height=0.5) + + chart.watermark('1') + chart2.watermark('2') + chart3.watermark('3') + chart4.watermark('4') + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + chart2.set(df) + chart3.set(df) + chart4.set(df) + + chart.show(block=True) + +``` +___ +## Synced Line Chart + +```python +import pandas as pd +from lightweight_charts import Chart + +if __name__ == '__main__': + chart = Chart(inner_width=1, inner_height=0.8) + chart.time_scale(visible=False) + + chart2 = chart.create_subchart(width=1, height=0.2, sync=True) + line = chart2.create_line() + + df = pd.read_csv('ohlcv.csv') + df2 = pd.read_csv('rsi.csv') + + chart.set(df) + line.set(df2) + + chart.show(block=True) +``` diff --git a/docs/source/examples/table.md b/docs/source/examples/table.md new file mode 100644 index 0000000..cb691a8 --- /dev/null +++ b/docs/source/examples/table.md @@ -0,0 +1,38 @@ +# Table + +```python +import pandas as pd +from lightweight_charts import Chart + +def on_row_click(row): + row['PL'] = round(row['PL']+1, 2) + row.background_color('PL', 'green' if row['PL'] > 0 else 'red') + + table.footer[1] = row['Ticker'] + +if __name__ == '__main__': + chart = Chart(width=1000, inner_width=0.7, inner_height=1) + subchart = chart.create_subchart(width=0.3, height=0.5) + df = pd.read_csv('ohlcv.csv') + chart.set(df) + subchart.set(df) + + table = chart.create_table(width=0.3, height=0.2, + headings=('Ticker', 'Quantity', 'Status', '%', 'PL'), + widths=(0.2, 0.1, 0.2, 0.2, 0.3), + alignments=('center', 'center', 'right', 'right', 'right'), + position='left', func=on_row_click) + + table.format('PL', f'£ {table.VALUE}') + table.format('%', f'{table.VALUE} %') + + table.new_row('SPY', 3, 'Submitted', 0, 0) + table.new_row('AMD', 1, 'Filled', 25.5, 105.24) + table.new_row('NVDA', 2, 'Filled', -0.5, -8.24) + + table.footer(2) + table.footer[0] = 'Selected:' + + chart.show(block=True) + +``` diff --git a/docs/source/examples/toolbox.md b/docs/source/examples/toolbox.md new file mode 100644 index 0000000..8c1a3e6 --- /dev/null +++ b/docs/source/examples/toolbox.md @@ -0,0 +1,73 @@ +# Toolbox with persistent drawings + +To get started, create a file called `drawings.json`, which should contain: +``` +{} +``` +___ + + + +```python +import pandas as pd +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if symbol not in ('AAPL', 'GOOGL', 'TSLA'): + print(f'No data for "{symbol}"') + return pd.DataFrame() + return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') + + +def on_search(chart, searched_string): + new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) + if new_data.empty: + return + chart.topbar['symbol'].set(searched_string) + chart.set(new_data) + + # Load the drawings saved under the symbol. + chart.toolbox.load_drawings(searched_string) + + +def on_timeframe_selection(chart): + new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + if new_data.empty: + return + # The symbol has not changed, so we want to re-render the drawings. + chart.set(new_data, render_drawings=True) + + +if __name__ == '__main__': + chart = Chart(toolbox=True) + chart.legend(True) + + chart.events.search += on_search + chart.topbar.textbox('symbol', 'TSLA') + chart.topbar.switcher( + 'timeframe', + ('1min', '5min', '30min'), + default='5min', + func=on_timeframe_selection + ) + + df = get_bar_data('TSLA', '5min') + + chart.set(df) + + # Imports the drawings saved in the JSON file. + chart.toolbox.import_drawings('drawings.json') + + # Loads the drawings under the default symbol. + chart.toolbox.load_drawings(chart.topbar['symbol'].value) + + # Saves drawings based on the symbol. + chart.toolbox.save_drawings_under(chart.topbar['symbol']) + + chart.show(block=True) + + # Exports the drawings to the JSON file upon close. + chart.toolbox.export_drawings('drawings.json') + +``` \ No newline at end of file diff --git a/docs/source/examples/yfinance.md b/docs/source/examples/yfinance.md new file mode 100644 index 0000000..0efbfd5 --- /dev/null +++ b/docs/source/examples/yfinance.md @@ -0,0 +1,48 @@ +# YFinance + +```python +import datetime as dt +import yfinance as yf +from lightweight_charts import Chart + + +def get_bar_data(symbol, timeframe): + if timeframe in ('1m', '5m', '30m'): + days = 7 if timeframe == '1m' else 60 + start_date = dt.datetime.now()-dt.timedelta(days=days) + else: + start_date = None + + chart.spinner(True) + data = yf.download(symbol, start_date, interval=timeframe) + chart.spinner(False) + + if data.empty: + return False + chart.set(data) + return True + + +def on_search(chart, searched_string): + if get_bar_data(searched_string, chart.topbar['timeframe'].value): + chart.topbar['symbol'].set(searched_string) + + +def on_timeframe_selection(chart): + get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) + + +if __name__ == '__main__': + chart = Chart(toolbox=True, debug=True) + chart.legend(True) + chart.events.search += on_search + chart.topbar.textbox('symbol', 'n/a') + chart.topbar.switcher( + 'timeframe', + ('1m', '5m', '30m', '1d', '1wk'), + default='5m', + func=on_timeframe_selection + ) + + chart.show(block=True) +``` \ No newline at end of file diff --git a/docs/source/index.md b/docs/source/index.md index d2b32fb..0ccc926 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -1,15 +1,35 @@ ```{toctree} :hidden: +:caption: TUTORIALS +tutorials/getting_started +tutorials/events +``` -common_methods -charts -callbacks -toolbox -tables + + + + +```{toctree} +:hidden: +:caption: EXAMPLES +examples/table +examples/toolbox +examples/subchart +examples/yfinance +examples/events +examples/gui_examples +``` + + +```{toctree} +:hidden: +:caption: DOCS +reference/index polygon + Github Repository ``` -```{include} ../../README.md -``` +```{include} ../../README.md +``` \ No newline at end of file diff --git a/docs/source/polygon.md b/docs/source/polygon.md index 9492aa6..c82c9a1 100644 --- a/docs/source/polygon.md +++ b/docs/source/polygon.md @@ -1,14 +1,11 @@ # Polygon.io [Polygon.io's](https://polygon.io/?utm_source=affiliate&utm_campaign=pythonlwcharts) market data API is directly integrated within lightweight-charts-python, and is easy to use within the library. + ___ -## Requirements -To use data from Polygon, there are certain libraries (not listed as requirements) that must be installed: -* Static data requires the `requests` library. -* Live data requires the `websockets` library. -___ -## `polygon` -`polygon` is a [Common Method](https://lightweight-charts-python.readthedocs.io/en/latest/common_methods.html), and can be accessed from within any chart type. + +````{py:class} PolygonAPI +This class should be accessed from the `polygon` attribute, which is contained within all chart types. `chart.polygon.` @@ -21,14 +18,15 @@ The `stock`, `option`, `index`, `forex`, and `crypto` methods of `chart.polygon` * `live`: When set to `True`, a websocket connection will be used to update the chart or subchart in real-time. * These methods will also return a boolean representing whether the request was successful. +The `websockets` library is required when using live data. + ```{important} When using live data and the standard `show` method, the `block` parameter __must__ be set to `True` in order for the data to congregate on the chart (`chart.show(block=True)`). If `show_async` is used with live data, `block` can be either value. ``` -___ -### Example: +For Example: ```python from lightweight_charts import Chart @@ -43,67 +41,90 @@ if __name__ == '__main__': ) chart.show(block=True) ``` + ___ -### `api_key` -`key: str` +```{py:method} api_key(key: str) Sets the API key for the chart. Subsequent `SubChart` objects will inherit the API key given to the parent chart. + +``` ___ -### `stock` -`symbol: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + + +```{py:method} stock(symbol: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays stock data pulled from Polygon.io. + +`async_stock` can also be used. +``` ___ -### `option` -`symbol: str` | `timeframe: str` | `start_date: str` | `expiration` | `right: 'C' | 'P'` | `strike: int | float` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} option(symbol: str, timeframe: str, expiration: str, right: 'C' | 'P', strike: NUM, end_date: str, limit: int, live: bool) -> bool Requests and displays option data pulled from Polygon.io. A formatted option ticker (SPY251219C00650000) can also be given to the `symbol` parameter, allowing for `expiration`, `right`, and `strike` to be left blank. + +`async_option` can also be used. + +``` ___ -### `index` -`symbol: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} index(symbol: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays index data pulled from Polygon.io. +`async_index` can also be used. +``` ___ -### `forex` -`fiat_pair: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} forex(fiat_pair: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays a forex pair pulled from Polygon.io. The two currencies should be separated by a '-' (`USD-CAD`, `GBP-JPY`, etc.). +`async_forex` can also be used. +``` ___ -### `crypto` -`crypto_pair: str` | `timeframe: str` | `start_date: str` | `end_date: str` | `limit: int` | `live: bool` | `-> bool` + + +```{py:method} crypto(crypto_pair: str, timeframe: str, start_date: str, end_date: str, limit: int, live: bool) -> bool Requests and displays a crypto pair pulled from Polygon.io. The two currencies should be separated by a '-' (`BTC-USD`, `ETH-BTC`, etc.). +`async_crypto` can also be used. +``` ___ -### `log` -`info: bool` + + +```{py:method} log(info: bool) If `True`, informational log messages (connection, subscriptions etc.) will be displayed in the console. Data errors will always be shown in the console. +``` + +```` + ___ -## PolygonChart - -`api_key: str` | `live: bool` | `num_bars: int` - +````{py:class} PolygonChart(api_key: str, num_bars: int, limit: int, end_date: str, timeframe_options: tuple, security_options: tuple, live: bool) The `PolygonChart` provides an easy and complete way to use the Polygon.io API within lightweight-charts-python. -This object requires the `requests` library for static data, and the `websockets` library for live data. +This object requires the `websockets` library for live data. All data is requested within the chart window through searching and selectors. @@ -118,18 +139,45 @@ As well as the parameters from the [Chart](https://lightweight-charts-python.rea * `live`: If True, the chart will update in real-time. ___ -### Example: +For Example: ```python from lightweight_charts import PolygonChart if __name__ == '__main__': - chart = PolygonChart(api_key='', - num_bars=200, - limit=5000, - live=True) + chart = PolygonChart( + api_key='', + num_bars=200, + limit=5000, + live=True + ) chart.show(block=True) ``` ![PolygonChart png](https://raw.githubusercontent.com/louisnw01/lightweight-charts-python/main/docs/source/polygonchart.png) +```` + +```{py:function} polygon.get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000) -> pd.DataFrame +Module function which returns a formatted Dataframe of the requested aggregate data. + +`ticker` should be prefixed for the appropriate security type (eg. `I:NDX`) + +``` + +```{py:function} polygon.subscribe(ticker: str, sec_type: SEC_TYPE, func: callable, args: tuple, precision=2) +:async: + +Subscribes the given callable to live data from polygon. emitting a dictionary (and any given arguments) to the function. + +``` + +```{py:function} polygon.unsubscribe(func: callable) +:async: + +Unsubscribes the given function from live data. + +The ticker will only be unsubscribed if there are no additional functions that are currently subscribed. + +``` + diff --git a/docs/source/reference/abstract_chart.md b/docs/source/reference/abstract_chart.md new file mode 100644 index 0000000..97e2879 --- /dev/null +++ b/docs/source/reference/abstract_chart.md @@ -0,0 +1,329 @@ + +# `AbstractChart` + +`````{py:class} AbstractChart(width, height) +Abstracted chart used to create child classes. + +___ + + + +```{py:method} set(data: pd.DataFrame, render_drawings: bool = False) +Sets the initial data for the chart. + + + +Columns should be named: +: `time | open | high | low | close | volume` + +Time can be given in the index rather than a column, and volume can be omitted if volume is not used. Column names are not case sensitive. + +If `render_drawings` is `True`, any drawings made using the `toolbox` will be redrawn with the new data. This is designed to be used when switching to a different timeframe of the same symbol. + +`None` can also be given, which will erase all candle and volume data displayed on the chart. +``` + + +___ + + + +```{py:method} update(series: pd.Series) +Updates the chart data from a bar. + +Series labels should be akin to [`set`](#AbstractChart.set). + +``` + + +___ + + +```{py:method} update_from_tick(series: pd.Series, cumulative_volume: bool = False) +Updates the chart from a tick. + +Labels should be named: +: `time | price | volume` + +As before, the `time` can also be named `date`, and the `volume` can be omitted if volume is not enabled. The `time` column can also be the name of the Series object. + +The provided ticks do not need to be rounded to an interval (1 min, 5 min etc.), as the library handles this automatically. + +If `cumulative_volume` is used, the volume data given will be added onto the latest bar of volume data. +``` +___ + + + +```{py:method} create_line(name: str, color: COLOR, style: LINE_STYLE, width: int, price_line: bool, price_label: bool) -> Line + +Creates and returns a Line object, representing a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: + +[`marker`](#marker), [`horizontal_line`](#AbstractChart.horizontal_line) [`hide_data`](#hide_data), [`show_data`](#show_data) and[`price_line`](#price_line). + +Its instance should only be accessed from this method. +``` +___ + + + +```{py:function} lines() -> List[Line] + +Returns a list of all lines for the chart. + +``` +___ + + + +```{py:function} trend_line(start_time: str | datetime, start_value: NUM, end_time: str | datetime, end_value: NUM, color: COLOR, width: int) -> Line + +Creates a trend line, drawn from the first point (`start_time`, `start_value`) to the last point (`end_time`, `end_value`). + +``` +___ + + + +```{py:function} ray_line(start_time: str | datetime, value: NUM, color: COLOR, width: int) -> Line + +Creates a ray line, drawn from the first point (`start_time`, `value`) and onwards. + +``` +___ + + + +```{py:function} marker(time: datetime, position: MARKER_POSITION, shape: MARKER_SHAPE, color: COLOR, text: str) -> str + +Adds a marker to the chart, and returns its id. + +If the `time` parameter is not given, the marker will be placed at the latest bar. + +When using multiple markers, they should be placed in chronological order or display bugs may be present. + +``` +___ + + + +```{py:function} remove_marker(marker_id: str) + +Removes the marker with the given id. + +``` +___ + + + +```{py:function} horizontal_line(price: NUM, color: COLOR, width: int, style: LINE_STYLE, text: str, axis_label_visible: bool, func: callable= None) -> HorizontalLine + +Places a horizontal line at the given price, and returns a [`HorizontalLine`] object. + +If a `func` is given, the horizontal line can be edited on the chart. Upon its movement a callback will also be emitted to the callable given, containing the HorizontalLine object. The toolbox should be enabled during its usage. It is designed to be used to update an order (limit, stop, etc.) directly on the chart. + +``` +___ + + + +```{py:function} remove_horizontal_line(price: NUM) + +Removes a horizontal line at the given price. +``` +___ + + + +```{py:function} clear_markers() + +Clears the markers displayed on the data. +``` +___ + + + +```{py:function} clear_horizontal_lines + +Clears the horizontal lines displayed on the data. +``` +___ + + + +```{py:function} precision(precision: int) + +Sets the precision of the chart based on the given number of decimal places. + +``` +___ + + + +```{py:function} price_scale(mode: PRICE_SCALE_MODE, align_labels: bool, border_visible: bool, border_color: COLOR, text_color: COLOR, entire_text_only: bool, ticks_visible: bool, scale_margin_top: float, scale_margin_bottom: float) + +Price scale options for the chart. +``` +___ + + + +```{py:function} time_scale(right_offset: int, min_bar_spacing: float, visible: bool, time_visible: bool, seconds_visible: bool, border_visible: bool, border_color: COLOR) + +Timescale options for the chart. +``` +___ + + + +```{py:function} layout(background_color: COLOR, text_color: COLOR, font_size: int, font_family: str) + +Global layout options for the chart. +``` +___ + + + +```{py:function} grid(vert_enabled: bool, horz_enabled: bool, color: COLOR, style: LINE_STYLE) + +Grid options for the chart. +``` +___ + + + +```{py:function} candle_style(up_color: COLOR, down_color: COLOR, wick_enabled: bool, border_enabled: bool, border_up_color: COLOR, border_down_color: COLOR, wick_up_color: COLOR, wick_down_color: COLOR) + +Candle styling for each of the candle's parts (border, wick). +``` +___ + + + +```{py:function} volume_config(scale_margin_top: float, scale_margin_bottom: float, up_color: COLOR, down_color: COLOR) + +Volume config options. + +```{important} +The float values given to scale the margins must be greater than 0 and less than 1. +``` +___ + + + +```{py:function} crosshair(mode, vert_visible: bool, vert_width: int, vert_color: COLOR, vert_style: LINE_STYLE, vert_label_background_color: COLOR, horz_visible: bool, horz_width: int, horz_color: COLOR, horz_style: LINE_STYLE, horz_label_background_color: COLOR) + +Crosshair formatting for its vertical and horizontal axes. +``` +___ + + + +```{py:function} watermark(text: str, font_size: int, color: COLOR) + +Overlays a watermark on top of the chart. +``` +___ + + + +```{py:function} legend(visible: bool, ohlc: bool, percent: bool, lines: bool, color: COLOR, font_size: int, font_family: str) + +Configures the legend of the chart. +``` +___ + + + +```{py:function} spinner(visible: bool) + +Shows a loading spinner on the chart, which can be used to visualise the loading of large datasets, API calls, etc. + +```{important} +This method must be used in conjunction with the search event. +``` +___ + + + +```{py:function} price_line(label_visible: bool, line_visible: bool, title: str) + +Configures the visibility of the last value price line and its label. +``` +___ + + + +```{py:function} fit() + +Attempts to fit all data displayed on the chart within the viewport (`fitContent()`). +``` +___ + + + +```{py:function} show_data() + +Shows the hidden candles on the chart. +``` +___ + + + +```{py:function} hide_data() + +Hides the candles on the chart. +``` +___ + + + +```{py:function} hotkey(modifier: 'ctrl' | 'alt' | 'shift' | 'meta', key: 'str' | 'int' | 'tuple', func: callable) + +Adds a global hotkey to the chart window, which will execute the method or function given. + +When using a number in `key`, it should be given as an integer. If multiple key commands are needed for the same function, a tuple can be passed to `key`. +``` +___ + + + +```{py:function} create_table(width: NUM, height: NUM, headings: Tuple[str], widths: Tuple[float], alignments: Tuple[str], position: FLOAT, draggable: bool, func: callable) -> Table + +Creates and returns a [`Table`](https://lightweight-charts-python.readthedocs.io/en/latest/tables.html) object. + +``` +___ + + + +````{py:function} create_subchart(position: FLOAT, width: float, height: float, sync: bool | str, scale_candles_only: bool, toolbox: bool) -> AbstractChart + +Creates and returns a Chart object, placing it adjacent to the previous Chart. This allows for the use of multiple chart panels within the same window. + +`position` +: specifies how the Subchart will float. + +`height` | `width` +: Specifies the size of the Subchart, where `1` is the width/height of the window (100%) + +`sync` +: If given as `True`, the Subchart's timescale and crosshair will follow that of the declaring Chart. If a `str` is passed, the Chart will follow the panel with the given id. Chart ids can be accessed from the `chart.id` attribute. + +```{important} +`width` and `height` should be given as a number between 0 and 1. +``` + +Charts are arranged horizontally from left to right. When the available space is no longer sufficient, the subsequent Chart will be positioned on a new row, starting from the left side. + + +```` +````` + + + + + + + + diff --git a/docs/source/charts.md b/docs/source/reference/charts.md similarity index 58% rename from docs/source/charts.md rename to docs/source/reference/charts.md index 59a17b9..e21f572 100644 --- a/docs/source/charts.md +++ b/docs/source/reference/charts.md @@ -1,11 +1,12 @@ # Charts -This page contains a reference to all chart objects that can be used within the library. They all have access to the common methods. +This page contains a reference to all chart objects that can be used within the library. + +They inherit from [AbstractChart](#AbstractChart). ___ -## Chart -`width: int` | `height: int` | `x: int` | `y: int` | `on_top: bool` | `maximize: bool` | `debug: bool` | `toolbox: bool` +`````{py:class} Chart(width: int, height: int, x: int, y: int, on_top: bool, maximize: bool, debug: bool, toolbox: bool, inner_width: float, inner_height: float, scale_candles_only: bool) The main object used for the normal functionality of lightweight-charts-python, built on the pywebview library. @@ -14,31 +15,45 @@ The `Chart` object should be defined within an `if __name__ == '__main__'` block ``` ___ -### `show` -`block: bool` + + +```{py:method} show(block: bool) Shows the chart window, blocking until the chart has loaded. If `block` is enabled, the method will block code execution until the window is closed. + +``` ___ -### `hide` + + +```{py:method} hide() Hides the chart window, which can be later shown by calling `chart.show()`. +``` ___ -### `exit` + + +```{py:method} exit() Exits and destroys the chart window. +``` ___ -### `show_async` -`block: bool` + + +```{py:method} show_async(block: bool) +:async: Show the chart asynchronously. + +``` ___ -### `screenshot` -`-> bytes` + + +````{py:method} screenshot(block: bool) -> bytes Takes a screenshot of the chart, and returns a bytes object containing the image. For example: @@ -57,10 +72,14 @@ if __name__ == '__main__': ```{important} This method should be called after the chart window has loaded. ``` +```` + +````` ___ -## QtChart -`widget: QWidget` + + +````{py:class} QtChart(widget: QWidget) The `QtChart` object allows the use of charts within a `QMainWindow` object, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. @@ -69,141 +88,68 @@ Either the `PyQt5` or `PySide6` libraries will work with this chart. Callbacks can be received through the Qt event loop. ___ -### `get_webview` -`-> QWebEngineView` + +```{py:method} get_webview() -> QWebEngineView Returns the `QWebEngineView` object. -___ -### Example: - -```python -import pandas as pd -from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget - -from lightweight_charts.widgets import QtChart - -app = QApplication([]) -window = QMainWindow() -layout = QVBoxLayout() -widget = QWidget() -widget.setLayout(layout) - -window.resize(800, 500) -layout.setContentsMargins(0, 0, 0, 0) - -chart = QtChart(widget) - -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -layout.addWidget(chart.get_webview()) - -window.setCentralWidget(widget) -window.show() - -app.exec_() ``` +```` ___ -## WxChart -`parent: wx.Panel` + +````{py:class} WxChart(parent: WxPanel) The WxChart object allows the use of charts within a `wx.Frame` object, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. Callbacks can be received through the Wx event loop. ___ -### `get_webview` -`-> wx.html2.WebView` + + +```{py:method} get_webview() -> wx.html2.WebView Returns a `wx.html2.WebView` object which can be used to for positioning and styling within wxPython. -___ -### Example: - -```python -import wx -import pandas as pd - -from lightweight_charts.widgets import WxChart - - -class MyFrame(wx.Frame): - def __init__(self): - super().__init__(None) - self.SetSize(1000, 500) - - panel = wx.Panel(self) - sizer = wx.BoxSizer(wx.VERTICAL) - panel.SetSizer(sizer) - - chart = WxChart(panel) - - df = pd.read_csv('ohlcv.csv') - chart.set(df) - - sizer.Add(chart.get_webview(), 1, wx.EXPAND | wx.ALL) - sizer.Layout() - self.Show() - - -if __name__ == '__main__': - app = wx.App() - frame = MyFrame() - app.MainLoop() ``` +```` ___ -## StreamlitChart + +````{py:class} StreamlitChart The `StreamlitChart` object allows the use of charts within a Streamlit app, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. This object only supports the displaying of **static** data, and should not be used with the `update_from_tick` or `update` methods. Every call to the chart object must occur **before** calling `load`. + ___ -### `load` -Loads the chart into the Streamlit app. This should be called after setting, styling, and configuring the chart, as no further calls to the `StreamlitChart` will be acknowledged. -___ -### Example: -```python -import pandas as pd -from lightweight_charts.widgets import StreamlitChart +```{py:method} load() -chart = StreamlitChart(width=900, height=600) +Loads the chart into the Streamlit app. This should be called after setting, styling, and configuring the chart, as no further calls to the `StreamlitChart` will be acknowledged. -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -chart.load() ``` +```` ___ -## JupyterChart + + +````{py:class} JupyterChart The `JupyterChart` object allows the use of charts within a notebook, and has similar functionality to the `Chart` object for manipulating data, configuring and styling. This object only supports the displaying of **static** data, and should not be used with the `update_from_tick` or `update` methods. Every call to the chart object must occur **before** calling `load`. ___ -### `load` + + +```{py:method} load() Renders the chart. This should be called after setting, styling, and configuring the chart, as no further calls to the `JupyterChart` will be acknowledged. -___ -### Example: -```python -import pandas as pd -from lightweight_charts import JupyterChart - -chart = JupyterChart() - -df = pd.read_csv('ohlcv.csv') -chart.set(df) - -chart.load() ``` +```` diff --git a/docs/source/reference/events.md b/docs/source/reference/events.md new file mode 100644 index 0000000..83a785a --- /dev/null +++ b/docs/source/reference/events.md @@ -0,0 +1,28 @@ +# `Events` + +````{py:class} AbstractChart.Events +The chart events class, accessed through `chart.events` + +Events allow asynchronous and synchronous callbacks to be passed back into python. + +Chart events can be subscribed to using: `chart.events. += ` + +```{py:method} search -> (chart: Chart, string: str) +Fires upon searching. Searchbox will be automatically created. + +``` + +```{py:method} new_bar -> (chart: Chart) +Fires when a new candlestick is added to the chart. + +``` + +```{py:method} range_change -> (chart: Chart, bars_before: NUM, bars_after: NUM) +Fires when the range (visibleLogicalRange) changes. + +``` + +```` + +Tutorial: [Topbar & Events](../tutorials/events.md) + diff --git a/docs/source/reference/horizontal_line.md b/docs/source/reference/horizontal_line.md new file mode 100644 index 0000000..5dc9139 --- /dev/null +++ b/docs/source/reference/horizontal_line.md @@ -0,0 +1,28 @@ +# `HorizontalLine` + + +````{py:class} HorizontalLine(price: NUM, color: COLOR, width: int, style: LINE_STYLE, text: str, axis_label_visible: bool, func: callable= None) + +The `HorizontalLine` object represents a `PriceLine` in Lightweight Charts. + +Its instance should be accessed from the `horizontal_line` method. + + + +```{py:method} update(price: NUM) + +Updates the price of the horizontal line. +``` + + +```{py:method} label(text: str) + +Updates the label of the horizontal line. +``` + + +```{py:method} delete() + +Irreversibly deletes the horizontal line. +``` +```` \ No newline at end of file diff --git a/docs/source/reference/index.md b/docs/source/reference/index.md new file mode 100644 index 0000000..279350c --- /dev/null +++ b/docs/source/reference/index.md @@ -0,0 +1,23 @@ +# Reference + +```{toctree} +:hidden: +abstract_chart +line +horizontal_line +charts +events +topbar +toolbox +tables + +``` + + +1. [`AbstractChart`](#AbstractChart) +2. [`Line`](#Line) +3. [`HorizontalLine`](#HorizontalLine) +4. [Charts](#charts) +5. [`Events`](./events.md) +6. [`Toolbox`](#ToolBox) +7. [`Table`](#Table) \ No newline at end of file diff --git a/docs/source/reference/line.md b/docs/source/reference/line.md new file mode 100644 index 0000000..db9b25b --- /dev/null +++ b/docs/source/reference/line.md @@ -0,0 +1,44 @@ +# `Line` + + +````{py:class} Line(name: str, color: COLOR, style: LINE_STYLE, width: int, price_line: bool, price_label: bool) + +The `Line` object represents a `LineSeries` object in Lightweight Charts and can be used to create indicators. As well as the methods described below, the `Line` object also has access to: + +[`marker`](#marker), [`horizontal_line`](#AbstractChart.horizontal_line) [`hide_data`](#hide_data), [`show_data`](#show_data) and [`price_line`](#price_line). + +Its instance should only be accessed from [create_line](#AbstractChart.create_line). +___ + + + +```{py:function} set(data: pd.DataFrame) + +Sets the data for the line. + +When a name has not been set upon declaration, the columns should be named: `time | value` (Not case sensitive). + +Otherwise, the method will use the column named after the string given in `name`. This name will also be used within the legend of the chart. + +``` +___ + + + +```{py:function} update(series: pd.Series) + +Updates the data for the line. + +This should be given as a Series object, with labels akin to the `line.set()` function. +``` + + + +___ + +```{py:function} line.delete() + +Irreversibly deletes the line. + +``` +```` \ No newline at end of file diff --git a/docs/source/reference/tables.md b/docs/source/reference/tables.md new file mode 100644 index 0000000..091aef2 --- /dev/null +++ b/docs/source/reference/tables.md @@ -0,0 +1,125 @@ +# `Table` + +`````{py:class} Table(width: NUM, height: NUM, headings: Tuple[str], widths: Tuple[float], alignments: Tuple[str], position: FLOAT, draggable: bool, func: callable) + +Tables are panes that can be used to gain further functionality from charts. They are intended to be used for watchlists, order management, or position management. It should be accessed from the `create_table` common method. + +The `Table` and `Row` objects act as dictionaries, and can be manipulated as such. + +`width`/`height` +: Either given as a percentage (a `float` between 0 and 1) or as an integer representing pixel size. + +`widths` +: Given as a `float` between 0 and 1. + +`position` +: Used as you would with [`create_subchart`](#AbstractChart.create_subchart), representing how the table will float within the window. + +`draggable` +: If `True`, then the window can be dragged to any position within the window. + +`func` +: If given, this will be called when a row is clicked, returning the `Row` object in question. +___ + + + +````{py:method} new_row(*values, id: int) -> Row + +Creates a new row within the table, and returns a `Row` object. + +if `id` is passed it should be unique to all other rows. Otherwise, the `id` will be randomly generated. + +Rows can be passed a string (header) item or a tuple to set multiple headings: + +```python +row['Symbol'] = 'AAPL' +row['Symbol', 'Action'] = 'AAPL', 'BUY' +``` + +```` +___ + + + +```{py:method} clear() + +Clears and deletes all table rows. +``` +___ + + + +````{py:method} format(column: str, format_str: str) + +Sets the format to be used for the given column. `Table.VALUE` should be used as a placeholder for the cell value. For example: + +```python +table.format('Daily %', f'{table.VALUE} %') +table.format('PL', f'$ {table.VALUE}') +``` + +```` +___ + + + +```{py:method} visible(visible: bool) + +Sets the visibility of the Table. + +``` +````` +___ + + + +````{py:class} Row() + +```{py:method} background_color(column: str, color: COLOR) + +Sets the background color of the row cell. +``` +___ + + + +```{py:method} text_color(column: str, color: COLOR) + +Sets the foreground color of the row cell. +``` +___ + + + +```{py:method} delete() + +Deletes the row. +``` +```` +___ + + +````{py:class} Footer +Tables can also have a footer containing a number of text boxes. To initialize this, call the `footer` attribute with the number of textboxes to be used: + +```python +table.footer(3) # Footer will be displayed, with 3 text boxes. +``` +To edit the textboxes, treat `footer` as a list: + +```python +table.footer[0] = 'Text Box 1' +table.footer[1] = 'Text Box 2' +table.footer[2] = 'Text Box 3' +``` + +```` + + + + + + + + diff --git a/docs/source/reference/toolbox.md b/docs/source/reference/toolbox.md new file mode 100644 index 0000000..d340d53 --- /dev/null +++ b/docs/source/reference/toolbox.md @@ -0,0 +1,62 @@ +# `ToolBox` + +`````{py:class} ToolBox + +The Toolbox allows for trendlines, ray lines and horizontal lines to be drawn and edited directly on the chart. + +It can be used within any Chart object, and is enabled by setting the `toolbox` parameter to `True` upon Chart declaration. + +The following hotkeys can also be used when the Toolbox is enabled: + +| Key Cmd | Action | +|--- |--- | +| `alt T` | Trendline | +| `alt H` | Horizontal Line | +| `alt R` | Ray Line | +| `⌘ Z` or `ctrl Z` | Undo | + +Right-clicking on a drawing will open a context menu, allowing for color selection and deletion. +___ + + + +````{py:method} save_drawings_under(widget: Widget) + +Saves drawings under a specific `topbar` text widget. For example: + +```python +chart.toolbox.save_drawings_under(chart.topbar['symbol']) +``` + +```` +___ + + + +```{py:method} load_drawings(tag: str) + +Loads and displays drawings stored under the tag given. +``` +___ + + + +```{py:method} import_drawings(file_path: str) + +Imports the drawings stored at the JSON file given in `file_path`. + +``` +___ + + + +```{py:method} export_drawings(file_path: str) + +Exports all currently saved drawings to the JSON file given in `file_path`. + +``` + +````` + + + diff --git a/docs/source/reference/topbar.md b/docs/source/reference/topbar.md new file mode 100644 index 0000000..914fc83 --- /dev/null +++ b/docs/source/reference/topbar.md @@ -0,0 +1,54 @@ +# `TopBar` + + +````{py:class} TopBar +The `TopBar` class represents the top bar shown on the chart: + +![topbar](https://i.imgur.com/Qu2FW9Y.png) + +This object is accessed from the `topbar` attribute of the chart object (`chart.topbar.`). + +Switchers, text boxes and buttons can be added to the top bar, and their instances can be accessed through the `topbar` dictionary. For example: + +```python +chart.topbar.textbox('symbol', 'AAPL') # Declares a textbox displaying 'AAPL'. +print(chart.topbar['symbol'].value) # Prints the value within ('AAPL') + +chart.topbar['symbol'].set('MSFT') # Sets the 'symbol' textbox to 'MSFT' +print(chart.topbar['symbol'].value) # Prints the value again ('MSFT') +``` +___ + + + +```{py:method} switcher(name: str, options: tuple: default: str, func: callable) + +* `name`: the name of the switcher which can be used to access it from the `topbar` dictionary. +* `options`: The options for each switcher item. +* `default`: The initial switcher option set. + +``` +___ + + + +```{py:method} textbox(name: str, initial_text: str) + +* `name`: the name of the text box which can be used to access it from the `topbar` dictionary. +* `initial_text`: The text to show within the text box. + +``` +___ + + + +```{py:method} button(name: str, button_text: str, separator: bool, func: callable) + +* `name`: the name of the text box to access it from the `topbar` dictionary. +* `button_text`: Text to show within the button. +* `separator`: places a separator line to the right of the button. +* `func`: The event handler which will be executed upon a button click. + +``` + +```` \ No newline at end of file diff --git a/docs/source/reference/typing.md b/docs/source/reference/typing.md new file mode 100644 index 0000000..f0b3653 --- /dev/null +++ b/docs/source/reference/typing.md @@ -0,0 +1,42 @@ +:orphan: + +# `Typing` + +These classes serve as placeholders for type requirements. + + +```{py:class} NUM(Literal[float, int]) +``` + +```{py:class} FLOAT(Literal['left', 'right', 'top', 'bottom']) +``` + +```{py:class} TIME(Union[datetime, pd.Timestamp, str]) +``` + +```{py:class} COLOR(str) +Throughout the library, colors should be given as either rgb (`rgb(100, 100, 100)`), rgba(`rgba(100, 100, 100, 0.7)`), hex(`#32a852`) or a html literal(`blue`, `red` etc). +``` + +```{py:class} LINE_STYLE(Literal['solid', 'dotted', 'dashed', 'large_dashed', 'sparse_dotted']) +``` + +```{py:class} MARKER_POSITION(Literal['above', 'below', 'inside']) +``` + +```{py:class} MARKER_SHAPE(Literal['arrow_up', 'arrow_down', 'circle', 'square']) +``` + +```{py:class} CROSSHAIR_MODE(Literal['normal', 'magnet']) +``` + +```{py:class} PRICE_SCALE_MODE(Literal['normal', 'logarithmic', 'percentage', 'index100']) +``` + + + + + + + + diff --git a/docs/source/tables.md b/docs/source/tables.md deleted file mode 100644 index dd68626..0000000 --- a/docs/source/tables.md +++ /dev/null @@ -1,121 +0,0 @@ -# Table -`width: int/float` | `height: int/float` | `headings: tuple[str]` | `widths: tuple[float]` | `alignments: tuple[str]` | `position: 'left'/'right'/'top'/'bottom'` | `draggable: bool` | `func: callable` - -Tables are panes that can be used to gain further functionality from charts. They are intended to be used for watchlists, order management, or position management. It should be accessed from the `create_table` common method. - -The `Table` and `Row` objects act as dictionaries, and can be manipulated as such. - -`width`/`height`: Either given as a percentage (a `float` between 0 and 1) or as an integer representing pixel size. - -`widths`: Given as a `float` between 0 and 1. - -`position`: Used as you would when creating a `SubChart`, representing how the table will float within the window. - -`draggable`: If `True`, then the window can be dragged to any position within the window. - -`func`: If given this will be called when a row is clicked, returning the `Row` object in question. -___ - -## `new_row` (Row) -`*values` | `id: int` | `-> Row` - -Creates a new row within the table, and returns a `Row` object. - -if `id` is passed it should be unique to all other rows. Otherwise, the `id` will be randomly generated. - -Rows can be passed a string (header) item or a tuple to set multiple headings: - -```python -row['Symbol'] = 'AAPL' -row['Symbol', 'Action'] = 'AAPL', 'BUY' -``` - -### `background_color` -`column: str` | `color: str` - -Sets the background color of the row cell. - -### `text_color` -`column: str` | `color: str` - -Sets the foreground color of the row cell. - -### `delete` -Deletes the row. -___ - -## `clear` -Clears and deletes all table rows. -___ - -## `format` -`column: str` | `format_str: str` - -Sets the format to be used for the given column. `table.VALUE` should be used as a placeholder for the cell value. For example: - -```python -table.format('Daily %', f'{table.VALUE} %') -table.format('PL', f'$ {table.VALUE}') -``` -___ - -## `visible` -`visible: bool` - -Sets the visibility of the Table. -___ - -## Footer -Tables can also have a footer containing a number of text boxes. To initialize this, call the `footer` attribute with the number of textboxes to be used: - -```python -table.footer(3) # Footer will be displayed, with 3 text boxes. -``` -To edit the textboxes, treat `footer` as a list: - -```python -table.footer[0] = 'Text Box 1' -table.footer[1] = 'Text Box 2' -table.footer[2] = 'Text Box 3' -``` -___ - -## Example: - -```python -import pandas as pd -from lightweight_charts import Chart - -def on_row_click(row): - row['PL'] = round(row['PL']+1, 2) - row.background_color('PL', 'green' if row['PL'] > 0 else 'red') - - table.footer[1] = row['Ticker'] - -if __name__ == '__main__': - chart = Chart(width=1000, inner_width=0.7, inner_height=1) - subchart = chart.create_subchart(width=0.3, height=0.5) - df = pd.read_csv('ohlcv.csv') - chart.set(df) - subchart.set(df) - - table = chart.create_table(width=0.3, height=0.2, - headings=('Ticker', 'Quantity', 'Status', '%', 'PL'), - widths=(0.2, 0.1, 0.2, 0.2, 0.3), - alignments=('center', 'center', 'right', 'right', 'right'), - position='left', func=on_row_click) - - table.format('PL', f'£ {table.VALUE}') - table.format('%', f'{table.VALUE} %') - - table.new_row('SPY', 3, 'Submitted', 0, 0) - table.new_row('AMD', 1, 'Filled', 25.5, 105.24) - table.new_row('NVDA', 2, 'Filled', -0.5, -8.24) - - table.footer(2) - table.footer[0] = 'Selected:' - - chart.show(block=True) - -``` - diff --git a/docs/source/toolbox.md b/docs/source/toolbox.md deleted file mode 100644 index f766ae3..0000000 --- a/docs/source/toolbox.md +++ /dev/null @@ -1,98 +0,0 @@ -# Toolbox -The Toolbox allows for trendlines, ray lines and horizontal lines to be drawn and edited directly on the chart. - -It can be used within any Chart object, and is enabled by setting the `toolbox` parameter to `True` upon Chart declaration. - -The following hotkeys can also be used when the Toolbox is enabled: -* Alt+T: Trendline -* Alt+H: Horizontal Line -* Alt+R: Ray Line -* Meta+Z or Ctrl+Z: Undo - - -Right-clicking on a drawing will open a context menu, allowing for color selection and deletion. - -___ - -## `save_drawings_under` -`widget: Widget` - -Saves drawings under a specific `topbar` text widget. For example: - -```python -chart.toolbox.save_drawings_under(chart.topbar['symbol']) -``` -___ - -## `load_drawings` -`tag: str` - -Loads and displays drawings stored under the tag given. -___ - -## `import_drawings` -`file_path: str` - -Imports the drawings stored at the JSON file given in `file_path`. -___ - -## `export_drawings` -`file_path: str` - -Exports all currently saved drawings to the JSON file given in `file_path`. -___ - -## Example: - -To get started, create a file called `drawings.json`, which should only contain `{}`. - -```python -import pandas as pd -from lightweight_charts import Chart - - -def get_bar_data(symbol, timeframe): - if symbol not in ('AAPL', 'GOOGL', 'TSLA'): - print(f'No data for "{symbol}"') - return pd.DataFrame() - return pd.read_csv(f'bar_data/{symbol}_{timeframe}.csv') - - -def on_search(chart, searched_string): - new_data = get_bar_data(searched_string, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.topbar['symbol'].set(searched_string) - chart.set(new_data) - chart.toolbox.load_drawings(searched_string) # Loads the drawings saved under the symbol. - - -def on_timeframe_selection(chart): - new_data = get_bar_data(chart.topbar['symbol'].value, chart.topbar['timeframe'].value) - if new_data.empty: - return - chart.set(new_data, render_drawings=True) # The symbol has not changed, so we want to re-render the drawings. - - -if __name__ == '__main__': - chart = Chart(toolbox=True) - chart.legend(True) - - chart.events.search += on_search - chart.topbar.textbox('symbol', 'TSLA') - chart.topbar.switcher('timeframe', ('1min', '5min', '30min'), default='5min', func=on_timeframe_selection) - - df = get_bar_data('TSLA', '5min') - - chart.set(df) - - chart.toolbox.import_drawings('drawings.json') # Imports the drawings saved in the JSON file. - chart.toolbox.load_drawings(chart.topbar['symbol'].value) # Loads the drawings under the default symbol. - - chart.toolbox.save_drawings_under(chart.topbar['symbol']) # Saves drawings based on the symbol. - - chart.show(block=True) - - chart.toolbox.export_drawings('drawings.json') # Exports the drawings to the JSON file upon close. - -``` diff --git a/docs/source/tutorials/events.md b/docs/source/tutorials/events.md new file mode 100644 index 0000000..ac91c20 --- /dev/null +++ b/docs/source/tutorials/events.md @@ -0,0 +1,160 @@ +# Topbar & Events + +This section gives an overview of how events are handled across the library. + +## How to use events + + +Take a look at this minimal example, which uses the [`search`](#AbstractChart.Events) event: + +```python +from lightweight_charts import Chart + + +def on_search(chart, string): + print(f'Search Text: "{string}" | Chart/SubChart ID: "{chart.id}"') + + +if __name__ == '__main__': + chart = Chart() + + # Subscribe the function above to search event + chart.events.search += on_search + + chart.show(block=True) + +``` +Upon searching in a pane, the expected output would be akin to: +``` +Search Text: "AAPL" | Chart/SubChart ID: "window.blyjagcr" +``` +The ID shown above will change depending upon which pane was used to search, allowing for access to the object in question. + +```{important} +* When using `show` rather than `show_async`, block should be set to `True` (`chart.show(block=True)`). +* Event callables can be either coroutines, methods, or functions. +``` + +___ + +## Topbar events + + +Events can also be emitted from the topbar: + +```python +from lightweight_charts import Chart + +def on_button_press(chart): + new_button_value = 'On' if chart.topbar['my_button'].value == 'Off' else 'Off' + chart.topbar['my_button'].set(new_button_value) + print(f'Turned something {new_button_value.lower()}.') + + +if __name__ == '__main__': + chart = Chart() + chart.topbar.button('my_button', 'Off', func=on_button_press) + chart.show(block=True) + +``` +In this example, we are passing `on_button_press` to the `func` parameter. + +When the button is pressed, the function will be emitted the `chart` object as with the previous example, allowing access to the topbar dictionary. + + +The `switcher` is typically used for timeframe selection: + +```python +from lightweight_charts import Chart + +def on_timeframe_selection(chart): + print(f'Getting data with a {chart.topbar["my_switcher"].value} timeframe.') + + +if __name__ == '__main__': + chart = Chart() + chart.topbar.switcher( + name='my_switcher', + options=('1min', '5min', '30min'), + default='5min', + func=on_timeframe_selection) + chart.show(block=True) +``` +___ + +## Async clock + +There are many use cases where we will need to run our own code whilst the GUI loop continues to listen for events. Let's demonstrate this by using the `textbox` widget to display a clock: + +```python +import asyncio +from datetime import datetime +from lightweight_charts import Chart + + +async def update_clock(chart): + while chart.is_alive: + await asyncio.sleep(1-(datetime.now().microsecond/1_000_000)) + chart.topbar['clock'].set(datetime.now().strftime('%H:%M:%S')) + + +async def main(): + chart = Chart() + chart.topbar.textbox('clock') + await asyncio.gather(chart.show_async(block=True), update_clock(chart)) + + +if __name__ == '__main__': + asyncio.run(main()) +``` + +This is how the library is intended to be used with live data (option #2 [described here]()). +___ + +## Live data, topbar & events + + +Now we can create an asyncio program which updates chart data whilst allowing the GUI loop to continue processing events, based the [Live data](live_chart.md) example: + +```python +import asyncio +import pandas as pd +from lightweight_charts import Chart + + +async def data_loop(chart): + ticks = pd.read_csv('ticks.csv') + + for i, tick in ticks.iterrows(): + if not chart.is_alive: + return + chart.update_from_tick(ticks.iloc[i]) + await asyncio.sleep(0.03) + i += 1 + + +def on_new_bar(chart): + print('New bar event!') + + +def on_timeframe_selection(chart): + print(f'Selected timeframe of {chart.topbar["timeframe"].value}') + + +async def main(): + chart = Chart() + chart.events.new_bar += on_new_bar + + chart.topbar.switcher('timeframe', ('1min', '5min'), func=on_timeframe_selection) + + df = pd.read_csv('ohlc.csv') + + chart.set(df) + await asyncio.gather(chart.show_async(block=True), data_loop(chart)) + + +if __name__ == '__main__': + asyncio.run(main()) + +``` + diff --git a/docs/source/tutorials/getting_started.md b/docs/source/tutorials/getting_started.md new file mode 100644 index 0000000..6595576 --- /dev/null +++ b/docs/source/tutorials/getting_started.md @@ -0,0 +1,85 @@ +# Getting Started + +## Installation + +To install the library, use pip: + +```text +pip install lightweight-charts +``` + +Pywebview's installation can differ depending on OS. Please refer to their [documentation](https://pywebview.flowrl.com/guide/installation.html#installation). + +___ + +## A simple static chart + +```python +import pandas as pd +from lightweight_charts import Chart +``` + +Download this +[`ohlcv.csv`](../../../examples/1_setting_data/ohlcv.csv) +file for this tutorial. + +In this example, we are reading a csv file using pandas: +```text + date open high low close volume +0 2010-06-29 1.2667 1.6667 1.1693 1.5927 277519500.0 +1 2010-06-30 1.6713 2.0280 1.5533 1.5887 253039500.0 +2 2010-07-01 1.6627 1.7280 1.3513 1.4640 121461000.0 +3 2010-07-02 1.4700 1.5500 1.2473 1.2800 75871500.0 +4.. +``` +..which can be used as data for the `Chart` object: + + +```python +if __name__ == '__main__': + chart = Chart() + + df = pd.read_csv('ohlcv.csv') + chart.set(df) + + chart.show(block=True) +``` + +The `block` parameter is set to `True` in this case, as we do not want the program to exit. + +```{warning} +Due to the library's use of multiprocessing, instantiations of `Chart` should be encapsulated within an `if __name__ == '__main__'` block. +``` + + +## Adding a line + +Now lets add a moving average to the chart using the following function: +```python +def calculate_sma(df, period: int = 50): + return pd.DataFrame({ + 'time': df['date'], + f'SMA {period}': df['close'].rolling(window=period).mean() + }).dropna() +``` + +`calculate_sma` derives the data column from `f'SMA {period}'`, which we will use as the name of our line: + +```python +if __name__ == '__main__': + chart = Chart() + line = chart.create_line(name='SMA 50') + + df = pd.read_csv('ohlcv.csv') + sma_df = calculate_sma(df, period=50) + + chart.set(df) + line.set(sma_df) + + chart.show(block=True) +``` + + + + + diff --git a/lightweight_charts/__init__.py b/lightweight_charts/__init__.py index d0a59b6..341e66f 100644 --- a/lightweight_charts/__init__.py +++ b/lightweight_charts/__init__.py @@ -1,4 +1,4 @@ -from .abstract import LWC +from .abstract import AbstractChart, Window from .chart import Chart from .widgets import JupyterChart from .polygon import PolygonChart diff --git a/lightweight_charts/abstract.py b/lightweight_charts/abstract.py index 200cc91..f99508e 100644 --- a/lightweight_charts/abstract.py +++ b/lightweight_charts/abstract.py @@ -1,14 +1,17 @@ import asyncio -import json import os -from datetime import timedelta, datetime -from base64 import b64decode +from datetime import datetime +from typing import Union, Literal, List import pandas as pd -from typing import Union, Literal, Dict, List -from lightweight_charts.table import Table -from lightweight_charts.util import LINE_STYLE, MARKER_POSITION, MARKER_SHAPE, CROSSHAIR_MODE, crosshair_mode, \ - line_style, jbool, price_scale_mode, PRICE_SCALE_MODE, marker_position, marker_shape, IDGen, Events +from .table import Table +from .toolbox import ToolBox +from .topbar import TopBar +from .util import ( + IDGen, jbool, Pane, Events, TIME, NUM, FLOAT, + LINE_STYLE, MARKER_POSITION, MARKER_SHAPE, CROSSHAIR_MODE, PRICE_SCALE_MODE, + line_style, marker_position, marker_shape, crosshair_mode, price_scale_mode, +) JS = {} current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -16,7 +19,7 @@ for file in ('pkg', 'funcs', 'callback', 'toolbox', 'table'): with open(os.path.join(current_dir, 'js', f'{file}.js'), 'r', encoding='utf-8') as f: JS[file] = f.read() -HTML = f""" +TEMPLATE = f""" @@ -28,7 +31,8 @@ HTML = f""" margin: 0; padding: 0; overflow: hidden; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, + Cantarell, "Helvetica Neue", sans-serif; }} #wrapper {{ width: 100vw; @@ -48,74 +52,125 @@ HTML = f""" """ -class SeriesCommon: +class Window: + _id_gen = IDGen() + handlers = {} + + def __init__(self, script_func: callable = None, js_api_code: str = None, run_script: callable = None): + self.loaded = False + self.script_func = script_func + self.scripts = [] + self.final_scripts = [] + + if run_script: + self.run_script = run_script + + if js_api_code: + self.run_script(f'window.callbackFunction = {js_api_code}') + + def on_js_load(self): + if self.loaded: + return + self.loaded = True + [self.run_script(script) for script in self.scripts] + [self.run_script(script) for script in self.final_scripts] + + def run_script(self, script: str, run_last: bool = False): + """ + For advanced users; evaluates JavaScript within the Webview. + """ + if self.loaded: + self.script_func(script) + return + self.scripts.append(script) if not run_last else self.final_scripts.append(script) + + def create_table(self, width: NUM, height: NUM, headings: tuple, widths: tuple = None, + alignments: tuple = None, position: FLOAT = 'left', draggable: bool = False, + func: callable = None + ) -> 'Table': + return Table(self, width, height, headings, widths, alignments, position, draggable, func) + + def create_subchart(self, position: FLOAT = 'left', width: float = 0.5, height: float = 0.5, + sync: str = None, scale_candles_only: bool = False, toolbox: bool = False + ) -> 'AbstractChart': + subchart = AbstractChart(self, width, height, scale_candles_only, toolbox, position=position) + if not sync: + return subchart + sync_id = sync + self.run_script(f''' + syncCrosshairs({subchart.id}.chart, {sync_id}.chart) + {sync_id}.chart.timeScale().subscribeVisibleLogicalRangeChange((timeRange) => {{ + {subchart.id}.chart.timeScale().setVisibleLogicalRange(timeRange) + }}) + {subchart.id}.chart.timeScale().setVisibleLogicalRange( + {sync_id}.chart.timeScale().getVisibleLogicalRange() + ) + ''', run_last=True) + return subchart + + +class SeriesCommon(Pane): + def __init__(self, chart: 'AbstractChart'): + super().__init__(chart.win) + self._chart = chart + self._interval = pd.Timedelta(seconds=1) + self._last_bar = None + self.num_decimals = 2 + def _set_interval(self, df: pd.DataFrame): if not pd.api.types.is_datetime64_any_dtype(df['time']): df['time'] = pd.to_datetime(df['time']) common_interval = df['time'].diff().value_counts() - try: - self._interval = common_interval.index[0] - except IndexError: - raise IndexError('Not enough bars within the given data to calculate the interval/timeframe.') - self.run_script(f''' - if ({self.id}.toolBox) {{ - {self.id}.toolBox.interval = {self._interval.total_seconds()*1000} - }} - ''') + if common_interval.empty: + return + self._interval = common_interval.index[0] + self.run_script( + f'if ({self.id}.toolBox) {self.id}.toolBox.interval = {self._interval.total_seconds() * 1000}' + ) @staticmethod - def _rename(data, mapper, is_dataframe): - if is_dataframe: - data.columns = [mapper[key] if key in mapper else key for key in data.columns] - else: - data.index = [mapper[key] if key in mapper else key for key in data.index] + def _format_labels(data, labels, index, exclude_lowercase): + def rename(la, mapper): + return [mapper[key] if key in mapper else key for key in la] + if 'date' not in labels and 'time' not in labels: + labels = labels.str.lower() + if exclude_lowercase: + labels = rename(labels, {exclude_lowercase.lower(): exclude_lowercase}) + if 'date' in labels: + labels = rename(labels, {'date': 'time'}) + elif 'time' not in labels: + data['time'] = index + labels = [*labels, 'time'] + return labels def _df_datetime_format(self, df: pd.DataFrame, exclude_lowercase=None): df = df.copy() - if 'date' not in df.columns and 'time' not in df.columns: - df.columns = df.columns.str.lower() - if exclude_lowercase: - df[exclude_lowercase] = df[exclude_lowercase.lower()] - if 'date' in df.columns: - self._rename(df, {'date': 'time'}, True) - elif 'time' not in df.columns: - df['time'] = df.index + df.columns = self._format_labels(df, df.columns, df.index, exclude_lowercase) self._set_interval(df) - df['time'] = self._datetime_format(df['time']) + if not pd.api.types.is_datetime64_any_dtype(df['time']): + df['time'] = pd.to_datetime(df['time']) + df['time'] = df['time'].astype('int64') // 10 ** 9 return df def _series_datetime_format(self, series: pd.Series, exclude_lowercase=None): series = series.copy() - if 'date' not in series.index and 'time' not in series.index: - series.index = series.index.str.lower() - if exclude_lowercase: - self._rename(series, {exclude_lowercase.lower(): exclude_lowercase}, False) - if 'date' in series.index: - self._rename(series, {'date': 'time'}, False) - elif 'time' not in series.index: - series['time'] = series.name - series['time'] = self._datetime_format(series['time']) + series.index = self._format_labels(series, series.index, series.name, exclude_lowercase) + series['time'] = self._single_datetime_format(series['time']) return series - def _datetime_format(self, arg: Union[pd.Series, str]): + def _single_datetime_format(self, arg): if not pd.api.types.is_datetime64_any_dtype(arg): arg = pd.to_datetime(arg) - if self._interval < timedelta(days=1): - if isinstance(arg, pd.Series): - arg = arg.astype('int64') // 10 ** 9 - else: - interval_seconds = self._interval.total_seconds() - arg = interval_seconds * (arg.timestamp() // interval_seconds) - else: - arg = arg.dt.strftime('%Y-%m-%d') if isinstance(arg, pd.Series) else arg.strftime('%Y-%m-%d') - + interval_seconds = self._interval.total_seconds() + arg = interval_seconds * (arg.timestamp() // interval_seconds) return arg - def marker(self, time: datetime = None, position: MARKER_POSITION = 'below', shape: MARKER_SHAPE = 'arrow_up', - color: str = '#2196F3', text: str = '') -> str: + def marker(self, time: datetime = None, position: MARKER_POSITION = 'below', + shape: MARKER_SHAPE = 'arrow_up', color: str = '#2196F3', text: str = '' + ) -> str: """ Creates a new marker.\n - :param time: The time that the marker will be placed at. If no time is given, it will be placed at the last bar. + :param time: Time location of the marker. If no time is given, it will be placed at the last bar. :param position: The position of the marker. :param color: The color of the marker (rgb, rgba or hex). :param shape: The shape of the marker. @@ -123,10 +178,10 @@ class SeriesCommon: :return: The id of the marker placed. """ try: - time = self._last_bar['time'] if not time else self._datetime_format(time) + time = self._last_bar['time'] if not time else self._single_datetime_format(time) except TypeError: raise TypeError('Chart marker created before data was set.') - marker_id = self._rand.generate() + marker_id = self.win._id_gen.generate() self.run_script(f""" {self.id}.markers.push({{ time: {time if isinstance(time, float) else f"'{time}'"}, @@ -149,16 +204,18 @@ class SeriesCommon: {self.id}.markers.splice({self.id}.markers.indexOf(marker), 1) {self.id}.series.setMarkers({self.id}.markers) }} - }});''') + }});''') - def horizontal_line(self, price: Union[float, int], color: str = 'rgb(122, 146, 202)', width: int = 2, - style: LINE_STYLE = 'solid', text: str = '', axis_label_visible: bool = True, func: callable = None) -> 'HorizontalLine': + def horizontal_line(self, price: NUM, color: str = 'rgb(122, 146, 202)', width: int = 2, + style: LINE_STYLE = 'solid', text: str = '', axis_label_visible: bool = True, + func: callable = None + ) -> 'HorizontalLine': """ Creates a horizontal line at the given price. """ return HorizontalLine(self, price, color, width, style, text, axis_label_visible, func) - def remove_horizontal_line(self, price: Union[float, int] = None): + def remove_horizontal_line(self, price: NUM = None): """ Removes a horizontal line at the given price. """ @@ -200,61 +257,70 @@ class SeriesCommon: {self.id}.series.applyOptions({{ priceFormat: {{precision: {precision}, minMove: {1 / (10 ** precision)}}} }})''') + self.num_decimals = precision - def hide_data(self): self._toggle_data(False) + def hide_data(self): + self._toggle_data(False) - def show_data(self): self._toggle_data(True) + def show_data(self): + self._toggle_data(True) def _toggle_data(self, arg): self.run_script(f''' {self.id}.series.applyOptions({{visible: {jbool(arg)}}}) - {f'{self.id}.volumeSeries.applyOptions({{visible: {jbool(arg)}}})' if hasattr(self, 'loaded') else ''} + if ('volumeSeries' in {self.id}) {self.id}.volumeSeries.applyOptions({{visible: {jbool(arg)}}}) ''') -class HorizontalLine: + +class HorizontalLine(Pane): def __init__(self, chart, price, color, width, style, text, axis_label_visible, func): - self._chart = chart - self.id = self._chart._rand.generate() + super().__init__(chart.win) self.price = price - self._chart.run_script(f''' - {self.id} = new HorizontalLine({self._chart.id}, '{self.id}', {price}, '{color}', {width}, {line_style(style)}, {jbool(axis_label_visible)}, '{text}') - ''') - if not func: return + self.run_script(f''' + {self.id} = new HorizontalLine( + {chart.id}, '{self.id}', {price}, '{color}', {width}, + {line_style(style)}, {jbool(axis_label_visible)}, '{text}' + )''') + if not func: + return + def wrapper(p): - self.price = p + self.price = float(p) func(chart, self) - chart._handlers[self.id] = wrapper - self._chart.run_script(f'if ("toolBox" in {self._chart.id}) {self._chart.id}.toolBox.drawings.push({self.id})') + + async def wrapper_async(p): + self.price = float(p) + await func(chart, self) + + self.win.handlers[self.id] = wrapper_async if asyncio.iscoroutinefunction(func) else wrapper + self.run_script(f'if ("toolBox" in {chart.id}) {chart.id}.toolBox.drawings.push({self.id})') def update(self, price): """ Moves the horizontal line to the given price. """ - self._chart.run_script(f'{self.id}.updatePrice({price})') + self.run_script(f'{self.id}.updatePrice({price})') self.price = price def label(self, text: str): - self._chart.run_script(f'{self.id}.updateLabel("{text}")') + self.run_script(f'{self.id}.updateLabel("{text}")') def delete(self): """ Irreversibly deletes the horizontal line. """ - self._chart.run_script(f'{self.id}.deleteLine()') + self.run_script(f'{self.id}.deleteLine()') del self class Line(SeriesCommon): def __init__(self, chart, name, color, style, width, price_line, price_label, crosshair_marker=True): + super().__init__(chart) self.color = color self.name = name - self._chart = chart - self._rand = chart._rand - self.id = self._rand.generate() - self.run_script = self._chart.run_script self.run_script(f''' {self.id} = {{ - series: {self._chart.id}.chart.addLineSeries({{ + series: {chart.id}.chart.addLineSeries({{ color: '{color}', lineStyle: {line_style(style)}, lineWidth: {width}, @@ -266,7 +332,7 @@ class Line(SeriesCommon): minValue: 1_000_000_000, maxValue: 0, }, - }),""" if self._chart._scale_candles_only else ''} + }),""" if chart._scale_candles_only else ''} }}), markers: [], horizontal_lines: [], @@ -276,23 +342,20 @@ class Line(SeriesCommon): }} {self._chart.id}.lines.push({self.id}) if ('legend' in {self._chart.id}) {{ - {self._chart.id}.legend.makeLines({self._chart.id}) - }} - ''') + {self._chart.id}.legend.lines.push({self._chart.id}.legend.makeLineRow({self.id})) + }}''') - - def set(self, data: pd.DataFrame): + def set(self, df: pd.DataFrame): """ Sets the line data.\n - :param data: If the name parameter is not used, the columns should be named: date/time, value. - :param name: The column of the DataFrame to use as the line value. When used, the Line will be named after this column. + :param df: If the name parameter is not used, the columns should be named: date/time, value. """ - if data.empty or data is None: + if df is None or df.empty: self.run_script(f'{self.id}.series.setData([])') return - df = self._df_datetime_format(data, exclude_lowercase=self.name) + df = self._df_datetime_format(df, exclude_lowercase=self.name) if self.name: - if self.name not in data: + if self.name not in df: raise NameError(f'No column named "{self.name}".') df = df.rename(columns={self.name: 'value'}) self._last_bar = df.iloc[-1] @@ -311,13 +374,14 @@ class Line(SeriesCommon): def _set_trend(self, start_time, start_value, end_time, end_value, ray=False): def time_format(time_val): - time_val = pd.to_datetime(time_val) - time_val = time_val.timestamp() if self._chart._interval < pd.Timedelta(days=1) else time_val.strftime('%Y-%m-%d') + time_val = pd.to_datetime(time_val).timestamp() return f"'{time_val}'" if isinstance(time_val, str) else time_val + self.run_script(f''' {self._chart.id}.chart.timeScale().applyOptions({{shiftVisibleRangeOnNewBar: false}}) - {self.id}.series.setData(calculateTrendLine({time_format(start_time)}, {start_value}, {time_format(end_time)}, {end_value}, - {self._chart._interval.total_seconds()*1000}, {self._chart.id}, {jbool(ray)})) + {self.id}.series.setData( + calculateTrendLine({time_format(start_time)}, {start_value}, {time_format(end_time)}, {end_value}, + {self._chart._interval.total_seconds() * 1000}, {self._chart.id}, {jbool(ray)})) {self._chart.id}.chart.timeScale().applyOptions({{shiftVisibleRangeOnNewBar: true}}) ''') @@ -328,212 +392,25 @@ class Line(SeriesCommon): self._chart._lines.remove(self) if self in self._chart._lines else None self.run_script(f''' {self._chart.id}.chart.removeSeries({self.id}.series) + if ('legend' in {self._chart.id}) {{ + {self._chart.id}.legend.lines.forEach(line => {{ + if (line.line === {self.id}) {self._chart.id}.legend.div.removeChild(line.row) + }}) + }} delete {self.id} - ''') + ''') del self -class Widget: - def __init__(self, topbar, value, func=None): - self._chart = topbar._chart - self.id = topbar._chart._rand.generate() - self.value = value - self._handler = func - def wrapper(v): - self.value = v - func(topbar._chart) - async def async_wrapper(v): - self.value = v - await func(topbar._chart) - self._chart._handlers[self.id] = async_wrapper if asyncio.iscoroutinefunction(func) else wrapper - - -class TextWidget(Widget): - def __init__(self, topbar, initial_text): - super().__init__(topbar, value=initial_text) - self._chart.run_script(f'{self.id} = {topbar.id}.makeTextBoxWidget("{initial_text}")') - - def set(self, string): - self.value = string - self._chart.run_script(f'{self.id}.innerText = "{string}"') - - -class SwitcherWidget(Widget): - def __init__(self, topbar, options, default, func): - super().__init__(topbar, value=default, func=func) - self._chart.run_script(f''' - {self.id} = {topbar.id}.makeSwitcher({list(options)}, '{default}', '{self.id}') - reSize({self._chart.id}) - ''') - - -class ButtonWidget(Widget): - def __init__(self, topbar, button, separator, func): - super().__init__(topbar, value=button, func=func) - self._chart.run_script(f''' - {self.id} = {topbar.id}.makeButton('{button}', '{self.id}') - {f'{topbar.id}.makeSeparator()' if separator else ''} - reSize({self._chart.id}) - ''') - - def set(self, string): - self.value = string - self._chart.run_script(f'{self.id}.elem.innerText = "{string}"') - - -class TopBar: - def __init__(self, chart): - self._chart = chart - self.id = chart._rand.generate() - self._widgets: Dict[str, Widget] = {} - - self.click_bg_color = '#50565E' - self.hover_bg_color = '#3c434c' - self.active_bg_color = 'rgba(0, 122, 255, 0.7)' - self.active_text_color = '#ececed' - self.text_color = '#d8d9db' - self._created = False - - def _create(self): - if self._created: - return - self._created = True - if not self._chart._callbacks_enabled: - self._chart._callbacks_enabled = True - self._chart.run_script(JS['callback']) - self._chart.run_script(f''' - {self.id} = new TopBar({self._chart.id}, '{self.hover_bg_color}', '{self.click_bg_color}', - '{self.active_bg_color}', '{self.text_color}', '{self.active_text_color}') - {self._chart.id}.topBar = {self.id}.topBar - reSize({self._chart.id}) - ''') - - def __getitem__(self, item): - if widget := self._widgets.get(item): - return widget - raise KeyError(f'Topbar widget "{item}" not found.') - - def get(self, widget_name): return self._widgets.get(widget_name) - - def __setitem__(self, key, value): self._widgets[key] = value - - def switcher(self, name, options: tuple, default: str = None, func: callable = None): - self._create() - self._widgets[name] = SwitcherWidget(self, options, default if default else options[0], func) - - def textbox(self, name: str, initial_text: str = ''): - self._create() - self._widgets[name] = TextWidget(self, initial_text) - - def button(self, name, button_text: str, separator: bool = True, func: callable = None): - self._create() - self._widgets[name] = ButtonWidget(self, button_text, separator, func) - - -class ToolBox: - def __init__(self, chart): - self.run_script = chart.run_script - self.id = chart.id - self._return_q = chart._return_q - self._save_under = None - self.drawings = {} - chart._handlers[f'save_drawings{self.id}'] = self._save_drawings - - def save_drawings_under(self, widget: Widget): - """ - Drawings made on charts will be saved under the widget given. eg `chart.toolbox.save_drawings_under(chart.topbar['symbol'])`. - """ - self._save_under = widget - - def load_drawings(self, tag: str): - """ - Loads and displays the drawings on the chart stored under the tag given. - """ - if not self.drawings.get(tag): - return - self.run_script(f'if ("toolBox" in {self.id}) {self.id}.toolBox.loadDrawings({json.dumps(self.drawings[tag])})') - - def import_drawings(self, file_path): - """ - Imports a list of drawings stored at the given file path. - """ - with open(file_path, 'r') as f: - json_data = json.load(f) - self.drawings = json_data - - def export_drawings(self, file_path): - """ - Exports the current list of drawings to the given file path. - """ - with open(file_path, 'w+') as f: - json.dump(self.drawings, f, indent=4) - - def _save_drawings(self, drawings): - if not self._save_under: - return - self.drawings[self._save_under.value] = json.loads(drawings) - - -class LWC(SeriesCommon): - def __init__(self, inner_width: float = 1.0, inner_height: float = 1.0, - scale_candles_only: bool = False, toolbox: bool = False, _js_api_code: str = None, - autosize: bool = True, _run_script=None): - self.loaded = False - self._scripts = [] - self._final_scripts = [] - if _run_script: - self.run_script = _run_script - self.run_script(f'window.callbackFunction = {_js_api_code}') if _js_api_code else None - self._scale_candles_only = scale_candles_only - self._inner_width = inner_width - self._inner_height = inner_height - self._rand = IDGen() - self.id = self._rand.generate() - self._position = 'left' - self._html = HTML - self._script_func = None - self.candle_data = pd.DataFrame() - self._last_bar = None - self._interval = None - self._lines = [] - self.events: Events = Events(self) - self._handlers = {} - self._return_q = None - self._callbacks_enabled = False - self.topbar: TopBar = TopBar(self) - - self._background_color = '#000000' +class Candlestick(SeriesCommon): + def __init__(self, chart: 'AbstractChart'): + super().__init__(chart) self._volume_up_color = 'rgba(83,141,131,0.8)' self._volume_down_color = 'rgba(200,127,130,0.8)' - from lightweight_charts.polygon import PolygonAPI - self.polygon: PolygonAPI = PolygonAPI(self) + self.candle_data = pd.DataFrame() - self.run_script(f''' - {self.id} = makeChart({self._inner_width}, {self._inner_height}, autoSize={jbool(autosize)}) - {self.id}.id = '{self.id}' - {self.id}.wrapper.style.float = "{self._position}" - ''') - if toolbox: - self.run_script(JS['toolbox']) - self.run_script(f'{self.id}.toolBox = new ToolBox({self.id})') - self.toolbox: ToolBox = ToolBox(self) - - def _on_js_load(self): - if self.loaded: - return - self.loaded = True - [self.run_script(script) for script in self._scripts] - [self.run_script(script) for script in self._final_scripts] - - def run_script(self, script: str, run_last: bool = False): - """ - For advanced users; evaluates JavaScript within the Webview. - """ - if self.loaded: - self._script_func(script) - return - self._scripts.append(script) if not run_last else self._final_scripts.append(script) + self.run_script(f'{self.id}.makeCandlestickSeries()') def set(self, df: pd.DataFrame = None, render_drawings=False): """ @@ -541,70 +418,61 @@ class LWC(SeriesCommon): :param df: columns: date/time, open, high, low, close, volume (if volume enabled). :param render_drawings: Re-renders any drawings made through the toolbox. Otherwise, they will be deleted. """ - - if df.empty or df is None: + if df is None or df.empty: self.run_script(f'{self.id}.series.setData([])') self.run_script(f'{self.id}.volumeSeries.setData([])') self.candle_data = pd.DataFrame() return - bars = self._df_datetime_format(df) - self.candle_data = bars.copy() - self._last_bar = bars.iloc[-1] + df = self._df_datetime_format(df) + self.candle_data = df.copy() + self._last_bar = df.iloc[-1] - if 'volume' in bars: - volume = bars.drop(columns=['open', 'high', 'low', 'close']).rename(columns={'volume': 'value'}) - volume['color'] = self._volume_down_color - volume.loc[bars['close'] > bars['open'], 'color'] = self._volume_up_color - self.run_script(f'{self.id}.volumeSeries.setData({volume.to_dict(orient="records")})') - bars = bars.drop(columns=['volume']) - - bars = bars.to_dict(orient='records') + bars = df.to_dict(orient='records') self.run_script(f'{self.id}.candleData = {bars}; {self.id}.series.setData({self.id}.candleData)') - self.run_script(f"if ('toolBox' in {self.id}) {self.id}.toolBox.{'clearDrawings' if not render_drawings else 'renderDrawings'}()") + toolbox_action = 'clearDrawings' if not render_drawings else 'renderDrawings' + self.run_script(f"if ('toolBox' in {self._chart.id}) {self._chart.id}.toolBox.{toolbox_action}()") + if 'volume' not in df: + return + volume = df.drop(columns=['open', 'high', 'low', 'close']).rename(columns={'volume': 'value'}) + volume['color'] = self._volume_down_color + volume.loc[df['close'] > df['open'], 'color'] = self._volume_up_color + self.run_script(f'{self.id}.volumeSeries.setData({volume.to_dict(orient="records")})') # for line in self._lines: # if line.name in df.columns: # line.set() - def fit(self): - """ - Fits the maximum amount of the chart data within the viewport. - """ - self.run_script(f'{self.id}.chart.timeScale().fitContent()') - def update(self, series: pd.Series, _from_tick=False): """ Updates the data from a bar; if series['time'] is the same time as the last bar, the last bar will be overwritten.\n - :param series: labels: date/time, open, high, low, close, volume (if volume enabled). + :param series: labels: date/time, open, high, low, close, volume (if using volume). """ series = self._series_datetime_format(series) if not _from_tick else series if series['time'] != self._last_bar['time']: self.candle_data.loc[self.candle_data.index[-1]] = self._last_bar self.candle_data = pd.concat([self.candle_data, series.to_frame().T], ignore_index=True) - self.events.new_bar._emit(self) + self._chart.events.new_bar._emit(self) self._last_bar = series - if 'volume' in series: - volume = series.drop(['open', 'high', 'low', 'close']).rename({'volume': 'value'}) - volume['color'] = self._volume_up_color if series['close'] > series['open'] else self._volume_down_color - self.run_script(f'{self.id}.volumeSeries.update({volume.to_dict()})') - series = series.drop(['volume']) bar = series.to_dict() self.run_script(f''' - if (chartTimeToDate({self.id}.candleData[{self.id}.candleData.length-1].time).getTime() === chartTimeToDate({bar['time']}).getTime()) {{ + if (stampToDate(lastBar({self.id}.candleData).time).getTime() === stampToDate({bar['time']}).getTime()) {{ {self.id}.candleData[{self.id}.candleData.length-1] = {bar} }} - else {{ - {self.id}.candleData.push({bar}) - }} + else {self.id}.candleData.push({bar}) {self.id}.series.update({bar}) - ''') + ''') + if 'volume' not in series: + return + volume = series.drop(['open', 'high', 'low', 'close']).rename({'volume': 'value'}) + volume['color'] = self._volume_up_color if series['close'] > series['open'] else self._volume_down_color + self.run_script(f'{self.id}.volumeSeries.update({volume.to_dict()})') def update_from_tick(self, series: pd.Series, cumulative_volume: bool = False): """ Updates the data from a tick.\n - :param series: labels: date/time, price, volume (if volume enabled). + :param series: labels: date/time, price, volume (if using volume). :param cumulative_volume: Adds the given volume onto the latest bar. """ series = self._series_datetime_format(series) @@ -627,33 +495,10 @@ class LWC(SeriesCommon): bar['volume'] = series['volume'] self.update(bar, _from_tick=True) - def create_line(self, name: str = '', color: str = 'rgba(214, 237, 255, 0.6)', style: LINE_STYLE = 'solid', width: int = 2, - price_line: bool = True, price_label: bool = True) -> Line: - """ - Creates and returns a Line object.)\n - """ - self._lines.append(Line(self, name, color, style, width, price_line, price_label)) - return self._lines[-1] - - def lines(self) -> List[Line]: - """ - Returns all lines for the chart. - """ - return self._lines.copy() - - def trend_line(self, start_time, start_value, end_time, end_value, color: str = '#1E80F0', width: int = 2) -> Line: - line = Line(self, '', color, 'solid', width, price_line=False, price_label=False, crosshair_marker=False) - line._set_trend(start_time, start_value, end_time, end_value, ray=False) - return line - - def ray_line(self, start_time, value, color: str = '#1E80F0', width: int = 2) -> Line: - line = Line(self, '', color, 'solid', width, price_line=False, price_label=False, crosshair_marker=False) - line._set_trend(start_time, value, start_time, value, ray=True) - return line - - def price_scale(self, mode: PRICE_SCALE_MODE = 'normal', align_labels: bool = True, border_visible: bool = False, - border_color: str = None, text_color: str = None, entire_text_only: bool = False, - ticks_visible: bool = False, scale_margin_top: float = 0.2, scale_margin_bottom: float = 0.2): + def price_scale( + self, mode: PRICE_SCALE_MODE = 'normal', align_labels: bool = True, border_visible: bool = False, + border_color: str = None, text_color: str = None, entire_text_only: bool = False, + ticks_visible: bool = False, scale_margin_top: float = 0.2, scale_margin_bottom: float = 0.2): self.run_script(f''' {self.id}.series.priceScale().applyOptions({{ mode: {price_scale_mode(mode)}, @@ -666,81 +511,31 @@ class LWC(SeriesCommon): scaleMargins: {{top: {scale_margin_top}, bottom: {scale_margin_bottom}}} }})''') - def time_scale(self, right_offset: int = 0, min_bar_spacing: float = 0.5, - visible: bool = True, time_visible: bool = True, seconds_visible: bool = False, - border_visible: bool = True, border_color: str = None): - """ - Options for the time scale of the chart. - """ - self.run_script(f''' - {self.id}.chart.applyOptions({{ - timeScale: {{ - rightOffset: {right_offset}, - minBarSpacing: {min_bar_spacing}, - visible: {jbool(visible)}, - timeVisible: {jbool(time_visible)}, - secondsVisible: {jbool(seconds_visible)}, - borderVisible: {jbool(border_visible)}, - {f'borderColor: "{border_color}",' if border_color else ''} - }} - }})''') - - def layout(self, background_color: str = None, text_color: str = None, font_size: int = None, - font_family: str = None): - """ - Global layout options for the chart. - """ - self._background_color = background_color if background_color else self._background_color - self.run_script(f""" - document.getElementById('wrapper').style.backgroundColor = '{self._background_color}' - {self.id}.chart.applyOptions({{ - layout: {{ - background: {{ - color: "{self._background_color}", - }}, - {f'textColor: "{text_color}",' if text_color else ''} - {f'fontSize: {font_size},' if font_size else ''} - {f'fontFamily: "{font_family}",' if font_family else ''} - }}}})""") - - def grid(self, vert_enabled: bool = True, horz_enabled: bool = True, color: str = 'rgba(29, 30, 38, 5)', style: LINE_STYLE = 'solid'): - """ - Grid styling for the chart. - """ - self.run_script(f""" - {self.id}.chart.applyOptions({{ - grid: {{ - vertLines: {{ - visible: {jbool(vert_enabled)}, - color: "{color}", - style: {line_style(style)}, - }}, - horzLines: {{ - visible: {jbool(horz_enabled)}, - color: "{color}", - style: {line_style(style)}, - }}, - }} - }})""") - - def candle_style(self, up_color: str = 'rgba(39, 157, 130, 100)', down_color: str = 'rgba(200, 97, 100, 100)', - wick_enabled: bool = True, border_enabled: bool = True, border_up_color: str = '', - border_down_color: str = '', wick_up_color: str = '', wick_down_color: str = ''): + def candle_style( + self, up_color: str = 'rgba(39, 157, 130, 100)', down_color: str = 'rgba(200, 97, 100, 100)', + wick_enabled: bool = True, border_enabled: bool = True, border_up_color: str = '', + border_down_color: str = '', wick_up_color: str = '', wick_down_color: str = ''): """ Candle styling for each of its parts.\n If only `up_color` and `down_color` are passed, they will color all parts of the candle. """ + if border_enabled: + border_up_color = border_up_color if border_up_color else up_color + border_down_color = border_down_color if border_down_color else down_color + if wick_enabled: + wick_up_color = wick_up_color if wick_up_color else up_color + wick_down_color = wick_down_color if wick_down_color else down_color self.run_script(f""" - {self.id}.series.applyOptions({{ - upColor: "{up_color}", - downColor: "{down_color}", - wickVisible: {jbool(wick_enabled)}, - borderVisible: {jbool(border_enabled)}, - {f'borderUpColor: "{border_up_color if border_up_color else up_color}",' if border_enabled else ''} - {f'borderDownColor: "{border_down_color if border_down_color else down_color}",' if border_enabled else ''} - {f'wickUpColor: "{wick_up_color if wick_up_color else up_color}",' if wick_enabled else ''} - {f'wickDownColor: "{wick_down_color if wick_down_color else down_color}",' if wick_enabled else ''} - }})""") + {self.id}.series.applyOptions({{ + upColor: "{up_color}", + downColor: "{down_color}", + wickVisible: {jbool(wick_enabled)}, + borderVisible: {jbool(border_enabled)}, + {f'borderUpColor: "{border_up_color}",' if border_enabled else ''} + {f'borderDownColor: "{border_down_color}",' if border_enabled else ''} + {f'wickUpColor: "{wick_up_color}",' if wick_enabled else ''} + {f'wickDownColor: "{wick_down_color}",' if wick_enabled else ''} + }})""") def volume_config(self, scale_margin_top: float = 0.8, scale_margin_bottom: float = 0.0, up_color='rgba(83,141,131,0.8)', down_color='rgba(200,127,130,0.8)'): @@ -748,10 +543,6 @@ class LWC(SeriesCommon): Configure volume settings.\n Numbers for scaling must be greater than 0 and less than 1.\n Volume colors must be applied prior to setting/updating the bars.\n - :param scale_margin_top: Scale the top of the margin. - :param scale_margin_bottom: Scale the bottom of the margin. - :param up_color: Volume color for upward direction (rgb, rgba or hex) - :param down_color: Volume color for downward direction (rgb, rgba or hex) """ self._volume_up_color = up_color if up_color else self._volume_up_color self._volume_down_color = down_color if down_color else self._volume_down_color @@ -763,9 +554,126 @@ class LWC(SeriesCommon): }} }})''') - def crosshair(self, mode: CROSSHAIR_MODE = 'normal', vert_visible: bool = True, vert_width: int = 1, vert_color: str = None, - vert_style: LINE_STYLE = 'large_dashed', vert_label_background_color: str = 'rgb(46, 46, 46)', horz_visible: bool = True, - horz_width: int = 1, horz_color: str = None, horz_style: LINE_STYLE = 'large_dashed', horz_label_background_color: str = 'rgb(55, 55, 55)'): + +class AbstractChart(Candlestick, Pane): + def __init__(self, window: Window, inner_width: float = 1.0, inner_height: float = 1.0, + scale_candles_only: bool = False, toolbox: bool = False, + autosize: bool = True, position: FLOAT = 'left'): + Pane.__init__(self, window) + + self._lines = [] + self._scale_candles_only = scale_candles_only + self.events: Events = Events(self) + + from lightweight_charts.polygon import PolygonAPI + self.polygon: PolygonAPI = PolygonAPI(self) + + self.run_script( + f'{self.id} = new Chart("{self.id}", {inner_width}, {inner_height}, "{position}", {jbool(autosize)})') + + Candlestick.__init__(self, self) + + self.topbar: TopBar = TopBar(self) + if toolbox: + self.toolbox: ToolBox = ToolBox(self) + + def fit(self): + """ + Fits the maximum amount of the chart data within the viewport. + """ + self.run_script(f'{self.id}.chart.timeScale().fitContent()') + + def create_line( + self, name: str = '', color: str = 'rgba(214, 237, 255, 0.6)', + style: LINE_STYLE = 'solid', width: int = 2, + price_line: bool = True, price_label: bool = True + ) -> Line: + """ + Creates and returns a Line object.)\n + """ + self._lines.append(Line(self, name, color, style, width, price_line, price_label)) + return self._lines[-1] + + def lines(self) -> List[Line]: + """ + Returns all lines for the chart. + """ + return self._lines.copy() + + def trend_line(self, start_time: TIME, start_value: NUM, end_time: TIME, end_value: NUM, + color: str = '#1E80F0', width: int = 2 + ) -> Line: + line = Line(self, '', color, 'solid', width, False, False, False) + line._set_trend(start_time, start_value, end_time, end_value) + return line + + def ray_line(self, start_time: TIME, value: NUM, + color: str = '#1E80F0', width: int = 2 + ) -> Line: + line = Line(self, '', color, 'solid', width, False, False, False) + line._set_trend(start_time, value, start_time, value, ray=True) + return line + + def time_scale(self, right_offset: int = 0, min_bar_spacing: float = 0.5, + visible: bool = True, time_visible: bool = True, seconds_visible: bool = False, + border_visible: bool = True, border_color: str = None): + """ + Options for the timescale of the chart. + """ + self.run_script(f''' + {self.id}.chart.applyOptions({{ + timeScale: {{ + rightOffset: {right_offset}, + minBarSpacing: {min_bar_spacing}, + visible: {jbool(visible)}, + timeVisible: {jbool(time_visible)}, + secondsVisible: {jbool(seconds_visible)}, + borderVisible: {jbool(border_visible)}, + {f'borderColor: "{border_color}",' if border_color else ''} + }} + }})''') + + def layout(self, background_color: str = '#000000', text_color: str = None, + font_size: int = None, font_family: str = None): + """ + Global layout options for the chart. + """ + self.run_script(f""" + document.getElementById('wrapper').style.backgroundColor = '{background_color}' + {self.id}.chart.applyOptions({{ + layout: {{ + background: {{color: "{background_color}"}}, + {f'textColor: "{text_color}",' if text_color else ''} + {f'fontSize: {font_size},' if font_size else ''} + {f'fontFamily: "{font_family}",' if font_family else ''} + }}}})""") + + def grid(self, vert_enabled: bool = True, horz_enabled: bool = True, + color: str = 'rgba(29, 30, 38, 5)', style: LINE_STYLE = 'solid'): + """ + Grid styling for the chart. + """ + self.run_script(f""" + {self.id}.chart.applyOptions({{ + grid: {{ + vertLines: {{ + visible: {jbool(vert_enabled)}, + color: "{color}", + style: {line_style(style)}, + }}, + horzLines: {{ + visible: {jbool(horz_enabled)}, + color: "{color}", + style: {line_style(style)}, + }}, + }} + }})""") + + def crosshair(self, mode: CROSSHAIR_MODE = 'normal', vert_visible: bool = True, + vert_width: int = 1, vert_color: str = None, vert_style: LINE_STYLE = 'large_dashed', + vert_label_background_color: str = 'rgb(46, 46, 46)', horz_visible: bool = True, + horz_width: int = 1, horz_color: str = None, horz_style: LINE_STYLE = 'large_dashed', + horz_label_background_color: str = 'rgb(55, 55, 55)'): """ Crosshair formatting for its vertical and horizontal axes. """ @@ -805,39 +713,25 @@ class LWC(SeriesCommon): }} }})''') - def legend(self, visible: bool = False, ohlc: bool = True, percent: bool = True, lines: bool = True, color: str = 'rgb(191, 195, 203)', - font_size: int = 11, font_family: str = 'Monaco'): + def legend(self, visible: bool = False, ohlc: bool = True, percent: bool = True, lines: bool = True, + color: str = 'rgb(191, 195, 203)', font_size: int = 11, font_family: str = 'Monaco'): """ Configures the legend of the chart. """ if not visible: return self.run_script(f''' - {self.id}.legend = new Legend({self.id}, {jbool(ohlc)}, {jbool(percent)}, {jbool(lines)}, '{color}', {font_size}, '{font_family}') + {self.id}.legend = new Legend( {self.id}, {jbool(ohlc)}, {jbool(percent)}, {jbool(lines)}, + '{color}', {font_size}, '{font_family}') ''') - def spinner(self, visible): self.run_script(f"{self.id}.spinner.style.display = '{'block' if visible else 'none'}'") + def spinner(self, visible): + self.run_script(f"{self.id}.spinner.style.display = '{'block' if visible else 'none'}'") - def screenshot(self) -> bytes: - """ - Takes a screenshot. This method can only be used after the chart window is visible. - :return: a bytes object containing a screenshot of the chart. - """ - self.run_script(f''' - let canvas = {self.id}.chart.takeScreenshot() - canvas.toBlob(function(blob) {{ - const reader = new FileReader(); - reader.onload = function(event) {{ - window.callbackFunction(`return_~_{self.id}_~_${{event.target.result}}`) - }}; - reader.readAsDataURL(blob); - }}) - ''') - serial_data = self._return_q.get() - return b64decode(serial_data.split(',')[1]) - - def hotkey(self, modifier_key: Literal['ctrl', 'alt', 'shift', 'meta'], keys: Union[str, tuple, int], func: callable): - if not isinstance(keys, tuple): keys = (keys,) + def hotkey(self, modifier_key: Literal['ctrl', 'alt', 'shift', 'meta'], + keys: Union[str, tuple, int], func: callable): + if not isinstance(keys, tuple): + keys = (keys,) for key in keys: key_code = 'Key' + key.upper() if isinstance(key, str) else 'Digit' + str(key) self.run_script(f''' @@ -849,38 +743,17 @@ class LWC(SeriesCommon): }} else return false }})''') - self._handlers[f'{modifier_key, keys}'] = func + self.win.handlers[f'{modifier_key, keys}'] = func - def create_table(self, width: Union[float, int], height: Union[float, int], headings: tuple, widths: tuple = None, alignments: tuple = None, - position: str = 'left', draggable: bool = False, func: callable = None) -> Table: - return Table(self, width, height, headings, widths, alignments, position, draggable, func) + def create_table(self, width: NUM, height: NUM, + headings: tuple, widths: tuple = None, alignments: tuple = None, + position: FLOAT = 'left', draggable: bool = False, func: callable = None + ) -> Table: + return self.win.create_table(width, height, headings, widths, alignments, position, draggable, func) - def create_subchart(self, position: Literal['left', 'right', 'top', 'bottom'] = 'left', width: float = 0.5, height: float = 0.5, - sync: Union[bool, str] = False, scale_candles_only: bool = False, toolbox: bool = False): - return SubChart(self, position, width, height, sync, scale_candles_only, toolbox) - - -class SubChart(LWC): - def __init__(self, parent, position, width, height, sync, scale_candles_only, toolbox): - self._chart = parent._chart if isinstance(parent, SubChart) else parent - super().__init__(width, height, scale_candles_only, toolbox, _run_script=self._chart.run_script) - self._parent = parent - self._position = position - self._return_q = self._chart._return_q - for key, val in self._handlers.items(): - self._chart._handlers[key] = val - self._handlers = self._chart._handlers - self.polygon = self._chart.polygon._subchart(self) - - if not sync: - return - sync_parent_id = self._parent.id if isinstance(sync, bool) else sync - self.run_script(f''' - {sync_parent_id}.chart.timeScale().subscribeVisibleLogicalRangeChange((timeRange) => {{ - {self.id}.chart.timeScale().setVisibleLogicalRange(timeRange) - }}); - syncCrosshairs({self.id}.chart, {sync_parent_id}.chart) - ''') - self.run_script(f''' - {self.id}.chart.timeScale().setVisibleLogicalRange({sync_parent_id}.chart.timeScale().getVisibleLogicalRange()) - ''', run_last=True) + def create_subchart(self, position: FLOAT = 'left', width: float = 0.5, height: float = 0.5, + sync: Union[str, bool] = None, scale_candles_only: bool = False, + toolbox: bool = False) -> 'AbstractChart': + if sync is True: + sync = self.id + return self.win.create_subchart(position, width, height, sync, scale_candles_only, toolbox) diff --git a/lightweight_charts/chart.py b/lightweight_charts/chart.py index 56f6470..237638f 100644 --- a/lightweight_charts/chart.py +++ b/lightweight_charts/chart.py @@ -1,42 +1,42 @@ import asyncio import multiprocessing as mp +from base64 import b64decode import webview -from lightweight_charts.abstract import LWC - - -chart = None -num_charts = 0 +from lightweight_charts import abstract +from .util import parse_event_message class CallbackAPI: - def __init__(self, emit_queue, return_queue): - self.emit_q, self.return_q = emit_queue, return_queue + def __init__(self, emit_queue): + self.emit_q = emit_queue def callback(self, message: str): - name, args = message.split('_~_') - self.return_q.put(*args) if name == 'return' else self.emit_q.put((name, args.split(';;;'))) + self.emit_q.put(message) class PyWV: - def __init__(self, q, start: mp.Event, exit, loaded, html, width, height, x, y, on_top, maximize, debug, emit_queue, return_queue): - if maximize: - width, height = webview.screens[0].width, webview.screens[0].height + def __init__(self, q, start_ev, exit_ev, loaded, emit_queue, return_queue, html, debug, + width, height, x, y, on_top, maximize): self.queue = q - self.exit = exit - self.callback_api = CallbackAPI(emit_queue, return_queue) + self.return_queue = return_queue + self.exit = exit_ev + self.callback_api = CallbackAPI(emit_queue) self.loaded: list = loaded + self.html = html self.windows = [] - self.create_window(html, on_top, width, height, x, y) + self.create_window(width, height, x, y, on_top, maximize) - start.wait() + start_ev.wait() webview.start(debug=debug) self.exit.set() - def create_window(self, html, on_top, width, height, x, y): + def create_window(self, width, height, x, y, on_top, maximize): + if maximize: + width, height = webview.screens[0].width, webview.screens[0].height self.windows.append(webview.create_window( - '', html=html, on_top=on_top, js_api=self.callback_api, + '', html=self.html, on_top=on_top, js_api=self.callback_api, width=width, height=height, x=x, y=y, background_color='#000000')) self.windows[-1].events.loaded += lambda: self.loop(self.loaded[len(self.windows)-1]) @@ -47,57 +47,62 @@ class PyWV: if i == 'create_window': self.create_window(*arg) elif arg in ('show', 'hide'): - getattr(self.windows[i], arg)() + getattr(self.windows[i], arg)() elif arg == 'exit': self.exit.set() else: try: - self.windows[i].evaluate_js(arg) + if '_~_~RETURN~_~_' in arg: + self.return_queue.put(self.windows[i].evaluate_js(arg[14:])) + else: + self.windows[i].evaluate_js(arg) except KeyError: return -class Chart(LWC): +class Chart(abstract.AbstractChart): + MAX_WINDOWS = 10 + _window_num = 0 + _main_window_handlers = None + _exit, _start = (mp.Event() for _ in range(2)) + _q, _emit_q, _return_q = (mp.Queue() for _ in range(3)) + _loaded_list = [mp.Event() for _ in range(MAX_WINDOWS)] + def __init__(self, width: int = 800, height: int = 600, x: int = None, y: int = None, on_top: bool = False, maximize: bool = False, debug: bool = False, toolbox: bool = False, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False): - super().__init__(inner_width, inner_height, scale_candles_only, toolbox, 'pywebview.api.callback') - global chart, num_charts + self._i = Chart._window_num + self._loaded = Chart._loaded_list[self._i] + window = abstract.Window(lambda s: self._q.put((self._i, s)), 'pywebview.api.callback') + abstract.Window._return_q = Chart._return_q + Chart._window_num += 1 + self.is_alive = True - if chart: - self._q, self._exit, self._start, self._process = chart._q, chart._exit, chart._start, chart._process - self._emit_q, self._return_q = mp.Queue(), mp.Queue() - for key, val in self._handlers.items(): - chart._handlers[key] = val - self._handlers = chart._handlers - self._loaded = chart._loaded_list[num_charts] - self._q.put(('create_window', (self._html, on_top, width, height, x, y))) - else: - self._q, self._emit_q, self._return_q = (mp.Queue() for _ in range(3)) - self._loaded_list = [mp.Event() for _ in range(10)] - self._loaded = self._loaded_list[0] - self._exit, self._start = (mp.Event() for _ in range(2)) - self._process = mp.Process(target=PyWV, args=(self._q, self._start, self._exit, self._loaded_list, self._html, - width, height, x, y, on_top, maximize, debug, - self._emit_q, self._return_q), daemon=True) + if self._i == 0: + super().__init__(window, inner_width, inner_height, scale_candles_only, toolbox) + Chart._main_window_handlers = self.win.handlers + self._process = mp.Process(target=PyWV, args=( + self._q, self._start, self._exit, Chart._loaded_list, + self._emit_q, self._return_q, abstract.TEMPLATE, debug, + width, height, x, y, on_top, maximize, + ), daemon=True) self._process.start() - chart = self - - self.i = num_charts - num_charts += 1 - self._script_func = lambda s: self._q.put((self.i, s)) + else: + window.handlers = Chart._main_window_handlers + super().__init__(window, inner_width, inner_height, scale_candles_only, toolbox) + self._q.put(('create_window', (abstract.TEMPLATE, on_top, width, height, x, y))) def show(self, block: bool = False): """ Shows the chart window.\n :param block: blocks execution until the chart is closed. """ - if not self.loaded: + if not self.win.loaded: self._start.set() self._loaded.wait() - self._on_js_load() + self.win.on_js_load() else: - self._q.put((self.i, 'show')) + self._q.put((self._i, 'show')) if block: asyncio.run(self.show_async(block=True)) @@ -107,20 +112,19 @@ class Chart(LWC): asyncio.create_task(self.show_async(block=True)) return try: + from lightweight_charts import polygon + [asyncio.create_task(self.polygon.async_set(*args)) for args in polygon._set_on_load] while 1: - while self._emit_q.empty() and not self._exit.is_set() and self.polygon._q.empty(): + while self._emit_q.empty() and not self._exit.is_set(): await asyncio.sleep(0.05) if self._exit.is_set(): self._exit.clear() + self.is_alive = False return elif not self._emit_q.empty(): - name, args = self._emit_q.get() - func = self._handlers[name] + func, args = parse_event_message(self.win, self._emit_q.get()) await func(*args) if asyncio.iscoroutinefunction(func) else func(*args) continue - value = self.polygon._q.get() - func, args = value[0], value[1:] - func(*args) except KeyboardInterrupt: return @@ -128,16 +132,26 @@ class Chart(LWC): """ Hides the chart window.\n """ - self._q.put((self.i, 'hide')) + self._q.put((self._i, 'hide')) def exit(self): """ Exits and destroys the chart window.\n """ - global num_charts, chart - chart = None - num_charts = 0 - self._q.put((self.i, 'exit')) - self._exit.wait() + self._q.put((self._i, 'exit')) + self._exit.wait() if self.win.loaded else None self._process.terminate() - del self + + Chart._main_window_handlers = None + Chart._window_num = 0 + Chart._q = mp.Queue() + self.is_alive = False + + def screenshot(self) -> bytes: + """ + Takes a screenshot. This method can only be used after the chart window is visible. + :return: a bytes object containing a screenshot of the chart. + """ + self.run_script(f'_~_~RETURN~_~_{self.id}.chart.takeScreenshot().toDataURL()') + serial_data = self.win._return_q.get() + return b64decode(serial_data.split(',')[1]) diff --git a/lightweight_charts/js/callback.js b/lightweight_charts/js/callback.js index f23eaa4..2b474aa 100644 --- a/lightweight_charts/js/callback.js +++ b/lightweight_charts/js/callback.js @@ -14,6 +14,9 @@ if (!window.TopBar) { this.topBar.style.display = 'flex' this.topBar.style.alignItems = 'center' chart.wrapper.prepend(this.topBar) + chart.topBar = this.topBar + this.reSize = () => chart.reSize() + this.reSize() } makeSwitcher(items, activeItem, callbackName) { let switcherElement = document.createElement('div'); @@ -45,6 +48,7 @@ if (!window.TopBar) { switcherElement.appendChild(itemEl); return itemEl; }); + widget.intervalElements = intervalElements let onItemClicked = (item)=> { if (item === activeItem) return @@ -59,6 +63,7 @@ if (!window.TopBar) { this.topBar.appendChild(switcherElement) this.makeSeparator(this.topBar) + this.reSize() return widget } makeTextBoxWidget(text) { @@ -69,9 +74,10 @@ if (!window.TopBar) { textBox.innerText = text this.topBar.append(textBox) this.makeSeparator(this.topBar) + this.reSize() return textBox } - makeButton(defaultText, callbackName) { + makeButton(defaultText, callbackName, separator) { let button = document.createElement('button') button.style.border = 'none' button.style.padding = '2px 5px' @@ -103,7 +109,9 @@ if (!window.TopBar) { button.style.color = this.textColor button.style.fontWeight = 'normal' }) + if (separator) this.makeSeparator() this.topBar.appendChild(button) + this.reSize() return widget } @@ -159,11 +167,10 @@ function makeSearchBox(chart) { chart.chart.subscribeCrosshairMove((param) => { if (param.point) yPrice = param.point.y; }) - let selectedChart = false - chart.wrapper.addEventListener('mouseover', (event) => selectedChart = true) - chart.wrapper.addEventListener('mouseout', (event) => selectedChart = false) + window.selectedChart = chart + chart.wrapper.addEventListener('mouseover', (event) => window.selectedChart = chart) chart.commandFunctions.push((event) => { - if (!selectedChart) return false + if (selectedChart !== chart) return false if (searchWindow.style.display === 'none') { if (/^[a-zA-Z0-9]$/.test(event.key)) { searchWindow.style.display = 'flex'; diff --git a/lightweight_charts/js/funcs.js b/lightweight_charts/js/funcs.js index ff6d953..ac61d9b 100644 --- a/lightweight_charts/js/funcs.js +++ b/lightweight_charts/js/funcs.js @@ -1,103 +1,113 @@ -function makeChart(innerWidth, innerHeight, autoSize=true) { - let chart = { - markers: [], - horizontal_lines: [], - lines: [], - wrapper: document.createElement('div'), - div: document.createElement('div'), - scale: { - width: innerWidth, - height: innerHeight, - }, - candleData: [], - commandFunctions: [], - precision: 2, - } - chart.chart = LightweightCharts.createChart(chart.div, { - width: window.innerWidth*innerWidth, - height: window.innerHeight*innerHeight, - layout: { - textColor: '#d1d4dc', - background: { - color:'#000000', - type: LightweightCharts.ColorType.Solid, - }, - fontSize: 12 - }, - rightPriceScale: { - scaleMargins: {top: 0.3, bottom: 0.25}, - }, - timeScale: {timeVisible: true, secondsVisible: false}, - crosshair: { - mode: LightweightCharts.CrosshairMode.Normal, - vertLine: { - labelBackgroundColor: 'rgb(46, 46, 46)' - }, - horzLine: { - labelBackgroundColor: 'rgb(55, 55, 55)' +if (!window.Chart) { + class Chart { + constructor(chartId, innerWidth, innerHeight, position, autoSize) { + this.makeCandlestickSeries = this.makeCandlestickSeries.bind(this) + this.reSize = this.reSize.bind(this) + this.id = chartId + this.lines = [] + this.wrapper = document.createElement('div') + this.div = document.createElement('div') + this.scale = { + width: innerWidth, + height: innerHeight, } - }, - grid: { - vertLines: {color: 'rgba(29, 30, 38, 5)'}, - horzLines: {color: 'rgba(29, 30, 58, 5)'}, - }, - handleScroll: {vertTouchDrag: true}, - }) - let up = 'rgba(39, 157, 130, 100)' - let down = 'rgba(200, 97, 100, 100)' - chart.series = chart.chart.addCandlestickSeries({ - color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, - downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, - }) - chart.volumeSeries = chart.chart.addHistogramSeries({ - color: '#26a69a', - priceFormat: {type: 'volume'}, - priceScaleId: '', - }) - chart.series.priceScale().applyOptions({ - scaleMargins: {top: 0.2, bottom: 0.2}, - }); - chart.volumeSeries.priceScale().applyOptions({ - scaleMargins: {top: 0.8, bottom: 0}, - }); - chart.wrapper.style.width = `${100*innerWidth}%` - chart.wrapper.style.height = `${100*innerHeight}%` - chart.wrapper.style.display = 'flex' - chart.wrapper.style.flexDirection = 'column' - chart.wrapper.style.position = 'relative' + this.commandFunctions = [] + this.chart = LightweightCharts.createChart(this.div, { + width: window.innerWidth * innerWidth, + height: window.innerHeight * innerHeight, + layout: { + textColor: '#d1d4dc', + background: { + color: '#000000', + type: LightweightCharts.ColorType.Solid, + }, + fontSize: 12 + }, + rightPriceScale: { + scaleMargins: {top: 0.3, bottom: 0.25}, + }, + timeScale: {timeVisible: true, secondsVisible: false}, + crosshair: { + mode: LightweightCharts.CrosshairMode.Normal, + vertLine: { + labelBackgroundColor: 'rgb(46, 46, 46)' + }, + horzLine: { + labelBackgroundColor: 'rgb(55, 55, 55)' + } + }, + grid: { + vertLines: {color: 'rgba(29, 30, 38, 5)'}, + horzLines: {color: 'rgba(29, 30, 58, 5)'}, + }, + handleScroll: {vertTouchDrag: true}, + }) + this.wrapper.style.width = `${100 * innerWidth}%` + this.wrapper.style.height = `${100 * innerHeight}%` + this.wrapper.style.display = 'flex' + this.wrapper.style.flexDirection = 'column' + this.wrapper.style.position = 'relative' + this.wrapper.style.float = position - chart.div.style.position = 'relative' - chart.div.style.display = 'flex' - chart.wrapper.appendChild(chart.div) - document.getElementById('wrapper').append(chart.wrapper) + this.div.style.position = 'relative' + this.div.style.display = 'flex' + this.wrapper.appendChild(this.div) + document.getElementById('wrapper').append(this.wrapper) - document.addEventListener('keydown', (event) => { - for (let i=0; i { + for (let i = 0; i < this.commandFunctions.length; i++) { + if (this.commandFunctions[i](event)) break + } + }) + if (!autoSize) return + window.addEventListener('resize', () => this.reSize()) } - }) + reSize() { + let topBarOffset = 'topBar' in this ? this.topBar.offsetHeight : 0 + this.chart.resize(window.innerWidth * this.scale.width, (window.innerHeight * this.scale.height) - topBarOffset) + } + makeCandlestickSeries() { + this.markers = [] + this.horizontal_lines = [] + this.candleData = [] + this.precision = 2 + let up = 'rgba(39, 157, 130, 100)' + let down = 'rgba(200, 97, 100, 100)' + this.series = this.chart.addCandlestickSeries({ + color: 'rgb(0, 120, 255)', upColor: up, borderUpColor: up, wickUpColor: up, + downColor: down, borderDownColor: down, wickDownColor: down, lineWidth: 2, + }) + this.volumeSeries = this.chart.addHistogramSeries({ + color: '#26a69a', + priceFormat: {type: 'volume'}, + priceScaleId: '', + }) + this.series.priceScale().applyOptions({ + scaleMargins: {top: 0.2, bottom: 0.2}, + }); + this.volumeSeries.priceScale().applyOptions({ + scaleMargins: {top: 0.8, bottom: 0}, + }); + } + toJSON() { + // Exclude the chart attribute from serialization + const {chart, ...serialized} = this; + return serialized; + } + } + window.Chart = Chart - if (!autoSize) return chart - window.addEventListener('resize', () => reSize(chart)) - return chart -} - -function reSize(chart) { - let topBarOffset = 'topBar' in chart ? chart.topBar.offsetHeight : 0 - chart.chart.resize(window.innerWidth*chart.scale.width, (window.innerHeight*chart.scale.height)-topBarOffset) -} - -if (!window.HorizontalLine) { class HorizontalLine { constructor(chart, lineId, price, color, width, style, axisLabelVisible, text) { this.updatePrice = this.updatePrice.bind(this) this.deleteLine = this.deleteLine.bind(this) this.chart = chart this.price = price + this.color = color this.id = lineId this.priceLine = { price: this.price, - color: color, + color: this.color, lineWidth: width, lineStyle: style, axisLabelVisible: axisLabelVisible, @@ -128,7 +138,8 @@ if (!window.HorizontalLine) { updateColor(color) { this.chart.series.removePriceLine(this.line) - this.priceLine.color = color + this.color = color + this.priceLine.color = this.color this.line = this.chart.series.createPriceLine(this.priceLine) } @@ -210,11 +221,7 @@ if (!window.HorizontalLine) { makeLines(chart) { this.lines = [] - if (this.linesEnabled) { - chart.lines.forEach((line) => { - this.lines.push(this.makeLineRow(line)) - }) - } + if (this.linesEnabled) chart.lines.forEach(line => this.lines.push(this.makeLineRow(line))) } makeLineRow(line) { @@ -322,39 +329,29 @@ function syncCrosshairs(childChart, parentChart) { childChart.subscribeCrosshairMove(childCrosshairHandler) } -function chartTimeToDate(stampOrBusiness) { - if (typeof stampOrBusiness === 'number') { - stampOrBusiness = new Date(stampOrBusiness*1000) - } - else if (typeof stampOrBusiness === 'string') { - let [year, month, day] = stampOrBusiness.split('-').map(Number) - stampOrBusiness = new Date(Date.UTC(year, month-1, day)) - } - else { - stampOrBusiness = new Date(Date.UTC(stampOrBusiness.year, stampOrBusiness.month - 1, stampOrBusiness.day)) - } - return stampOrBusiness +function stampToDate(stampOrBusiness) { + return new Date(stampOrBusiness*1000) +} +function dateToStamp(date) { + return Math.floor(date.getTime()/1000) } -function dateToChartTime(date, interval) { - if (interval >= 24*60*60*1000) { - return {day: date.getUTCDate(), month: date.getUTCMonth()+1, year: date.getUTCFullYear()} - } - return Math.floor(date.getTime()/1000) +function lastBar(obj) { + return obj[obj.length-1] } function calculateTrendLine(startDate, startValue, endDate, endValue, interval, chart, ray=false) { let reversed = false - if (chartTimeToDate(endDate).getTime() < chartTimeToDate(startDate).getTime()) { + if (stampToDate(endDate).getTime() < stampToDate(startDate).getTime()) { reversed = true; [startDate, endDate] = [endDate, startDate]; } let startIndex - if (chartTimeToDate(startDate).getTime() < chartTimeToDate(chart.candleData[0].time).getTime()) { + if (stampToDate(startDate).getTime() < stampToDate(chart.candleData[0].time).getTime()) { startIndex = 0 } else { - startIndex = chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(startDate).getTime()) + startIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(startDate).getTime()) } if (startIndex === -1) { @@ -366,9 +363,9 @@ function calculateTrendLine(startDate, startValue, endDate, endValue, interval, startValue = endValue } else { - endIndex = chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(endDate).getTime()) + endIndex = chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(endDate).getTime()) if (endIndex === -1) { - let barsBetween = (chartTimeToDate(endDate)-chartTimeToDate(chart.candleData[chart.candleData.length-1].time))/interval + let barsBetween = (stampToDate(endDate)-stampToDate(chart.candleData[chart.candleData.length-1].time))/interval endIndex = chart.candleData.length-1+barsBetween } } @@ -384,8 +381,7 @@ function calculateTrendLine(startDate, startValue, endDate, endValue, interval, } else { iPastData ++ - currentDate = dateToChartTime(new Date(chartTimeToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval)), interval) - + currentDate = dateToStamp(new Date(stampToDate(chart.candleData[chart.candleData.length-1].time).getTime()+(iPastData*interval))) } const currentValue = reversed ? startValue + rate_of_change * (numBars - i) : startValue + rate_of_change * i; @@ -431,22 +427,23 @@ if (!window.ContextMenu) { active ? document.addEventListener('contextmenu', this.onRightClick) : document.removeEventListener('contextmenu', this.onRightClick) } menuItem(text, action, hover=false) { - let item = document.createElement('div') + let item = document.createElement('span') item.style.display = 'flex' item.style.alignItems = 'center' item.style.justifyContent = 'space-between' - item.style.padding = '0px 10px' - item.style.margin = '3px 0px' + item.style.padding = '2px 10px' + item.style.margin = '1px 0px' item.style.borderRadius = '3px' this.menu.appendChild(item) - let elem = document.createElement('div') + let elem = document.createElement('span') elem.innerText = text item.appendChild(elem) if (hover) { - let arrow = document.createElement('div') - arrow.innerHTML = `` + let arrow = document.createElement('span') + arrow.innerText = `►` + arrow.style.fontSize = '8px' item.appendChild(arrow) } @@ -457,13 +454,17 @@ if (!window.ContextMenu) { }) elem.addEventListener('mouseout', (event) => item.style.backgroundColor = 'transparent') if (!hover) elem.addEventListener('click', (event) => {action(event); this.menu.style.display = 'none'}) - else elem.addEventListener('mouseover', () => action(item.getBoundingClientRect())) + else { + let timeout + elem.addEventListener('mouseover', () => timeout = setTimeout(() => action(item.getBoundingClientRect()), 100)) + elem.addEventListener('mouseout', () => clearTimeout(timeout)) + } } separator() { let separator = document.createElement('div') separator.style.width = '90%' separator.style.height = '1px' - separator.style.margin = '4px 0px' + separator.style.margin = '3px 0px' separator.style.backgroundColor = '#3C434C' this.menu.appendChild(separator) } @@ -471,3 +472,5 @@ if (!window.ContextMenu) { } window.ContextMenu = ContextMenu } + +window.callbackFunction = () => undefined; \ No newline at end of file diff --git a/lightweight_charts/js/table.js b/lightweight_charts/js/table.js index 0a2e7d3..28ba5cc 100644 --- a/lightweight_charts/js/table.js +++ b/lightweight_charts/js/table.js @@ -1,9 +1,8 @@ if (!window.Table) { class Table { - constructor(width, height, headings, widths, alignments, position, draggable = false, chart) { + constructor(width, height, headings, widths, alignments, position, draggable = false) { this.container = document.createElement('div') this.callbackName = null - this.chart = chart if (draggable) { this.container.style.position = 'absolute' @@ -15,7 +14,7 @@ if (!window.Table) { this.container.style.zIndex = '2000' this.container.style.width = width <= 1 ? width * 100 + '%' : width + 'px' - this.container.style.minHeight = height <= 1 ? height * 100 + '%' : height + 'px' + this.container.style.height = height <= 1 ? height * 100 + '%' : height + 'px' this.container.style.display = 'flex' this.container.style.flexDirection = 'column' this.container.style.justifyContent = 'space-between' @@ -52,7 +51,10 @@ if (!window.Table) { th.style.border = '1px solid rgb(70, 70, 70)' } - this.container.appendChild(this.table) + let overflowWrapper = document.createElement('div') + overflowWrapper.style.overflow = 'auto' + overflowWrapper.appendChild(this.table) + this.container.appendChild(overflowWrapper) document.getElementById('wrapper').appendChild(this.container) if (!draggable) return @@ -137,11 +139,6 @@ if (!window.Table) { this.footer[i].style.textAlign = 'center' } } - toJSON() { - // Exclude the chart attribute from serialization - const {chart, ...serialized} = this; - return serialized; - } } window.Table = Table } diff --git a/lightweight_charts/js/toolbox.js b/lightweight_charts/js/toolbox.js index ec30ff1..47be952 100644 --- a/lightweight_charts/js/toolbox.js +++ b/lightweight_charts/js/toolbox.js @@ -174,7 +174,7 @@ if (!window.ToolBox) { currentTime = this.chart.chart.timeScale().coordinateToTime(param.point.x) if (!currentTime) { let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) - currentTime = dateToChartTime(new Date(chartTimeToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval)), this.interval) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) } let currentPrice = this.chart.series.coordinateToPrice(param.point.y) @@ -298,7 +298,6 @@ if (!window.ToolBox) { if (boundaryConditional) { if (hoveringOver === drawing) return - if (!horizontal && !drawing.ray) drawing.line.setMarkers(drawing.markers) document.body.style.cursor = 'pointer' document.addEventListener('mousedown', checkForClick) @@ -324,13 +323,17 @@ if (!window.ToolBox) { let originalPrice let mouseDown = false let clickedEnd = false + let labelColor let checkForClick = (event) => { mouseDown = true document.body.style.cursor = 'grabbing' this.chart.chart.applyOptions({handleScroll: false}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) this.chart.chart.unsubscribeCrosshairMove(hoverOver) + labelColor = this.chart.chart.options().crosshair.horzLine.labelBackgroundColor + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: hoveringOver.color}}}) if ('price' in hoveringOver) { originalPrice = hoveringOver.price this.chart.chart.subscribeCrosshairMove(crosshairHandlerHorz) @@ -353,6 +356,8 @@ if (!window.ToolBox) { document.body.style.cursor = this.chart.cursor this.chart.chart.applyOptions({handleScroll: true}) + this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) + this.chart.chart.applyOptions({crosshair: {horzLine: {labelBackgroundColor: labelColor}}}) if (hoveringOver && 'price' in hoveringOver && hoveringOver.id !== 'toolBox') { window.callbackFunction(`${hoveringOver.id}_~_${hoveringOver.price.toFixed(8)}`); } @@ -372,8 +377,8 @@ if (!window.ToolBox) { let priceDiff = priceAtCursor - originalPrice let barsToMove = param.logical - originalIndex - let startBarIndex = this.chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(hoveringOver.from[0]).getTime()) - let endBarIndex = this.chart.candleData.findIndex(item => chartTimeToDate(item.time).getTime() === chartTimeToDate(hoveringOver.to[0]).getTime()) + let startBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.from[0]).getTime()) + let endBarIndex = this.chart.candleData.findIndex(item => stampToDate(item.time).getTime() === stampToDate(hoveringOver.to[0]).getTime()) let startDate let endBar @@ -385,19 +390,18 @@ if (!window.ToolBox) { endBar = endBarIndex === -1 ? null : this.chart.candleData[endBarIndex + barsToMove] } - let endDate = endBar ? endBar.time : dateToChartTime(new Date(chartTimeToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval)), this.interval) + let endDate = endBar ? endBar.time : dateToStamp(new Date(stampToDate(hoveringOver.to[0]).getTime() + (barsToMove * this.interval))) let startValue = hoveringOver.from[1] + priceDiff let endValue = hoveringOver.to[1] + priceDiff let data = calculateTrendLine(startDate, startValue, endDate, endValue, this.interval, this.chart, hoveringOver.ray) - this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: false}) + let logical = this.chart.chart.timeScale().getVisibleLogicalRange() hoveringOver.from = [data[0].time, data[0].value] hoveringOver.to = [data[data.length - 1].time, data[data.length - 1].value] hoveringOver.line.setData(data) - this.chart.chart.timeScale().applyOptions({shiftVisibleRangeOnNewBar: true}) this.chart.chart.timeScale().setVisibleLogicalRange(logical) if (!hoveringOver.ray) { @@ -435,7 +439,7 @@ if (!window.ToolBox) { let lastCandleTime = this.chart.candleData[this.chart.candleData.length - 1].time if (!currentTime) { let barsToMove = param.logical - this.chart.chart.timeScale().coordinateToLogical(this.chart.chart.timeScale().timeToCoordinate(lastCandleTime)) - currentTime = dateToChartTime(new Date(chartTimeToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval)), this.interval) + currentTime = dateToStamp(new Date(stampToDate(this.chart.candleData[this.chart.candleData.length - 1].time).getTime() + (barsToMove * this.interval))) } let data = calculateTrendLine(firstTime, firstPrice, currentTime, currentPrice, this.interval, this.chart) hoveringOver.line.setData(data) @@ -472,8 +476,8 @@ if (!window.ToolBox) { renderDrawings() { this.drawings.forEach((item) => { if ('price' in item) return - let startDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.from[0]).getTime() / this.interval) * this.interval), this.interval) - let endDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.to[0]).getTime() / this.interval) * this.interval), this.interval) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) item.from = [data[0].time, data[0].value] item.to = [data[data.length - 1].time, data[data.length-1].value] @@ -537,8 +541,8 @@ if (!window.ToolBox) { }, }), }) - let startDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.from[0]).getTime() / this.interval) * this.interval), this.interval) - let endDate = dateToChartTime(new Date(Math.round(chartTimeToDate(item.to[0]).getTime() / this.interval) * this.interval), this.interval) + let startDate = dateToStamp(new Date(Math.round(stampToDate(item.from[0]).getTime() / this.interval) * this.interval)) + let endDate = dateToStamp(new Date(Math.round(stampToDate(item.to[0]).getTime() / this.interval) * this.interval)) let data = calculateTrendLine(startDate, item.from[1], endDate, item.to[1], this.interval, this.chart, item.ray) item.from = [data[0].time, data[0].value] item.to = [data[data.length - 1].time, data[data.length-1].value] @@ -664,7 +668,7 @@ if (!window.ColorPicker) { } openMenu(rect, drawing) { this.drawing = drawing - this.rgbValues = this.extractRGB('price' in drawing ? drawing.priceLine.color : drawing.color) + this.rgbValues = this.extractRGB(drawing.color) this.opacity = parseFloat(this.rgbValues[3]) this.container.style.top = (rect.top-30)+'px' this.container.style.left = rect.right+'px' diff --git a/lightweight_charts/polygon.py b/lightweight_charts/polygon.py index 615f49c..ff56c8e 100644 --- a/lightweight_charts/polygon.py +++ b/lightweight_charts/polygon.py @@ -2,26 +2,43 @@ import asyncio import logging import datetime as dt import re -import threading -import queue import json -import ssl +import urllib.request from typing import Literal, Union, List import pandas as pd -from lightweight_charts import Chart +from .chart import Chart -try: - import requests -except ImportError: - requests = None try: import websockets except ImportError: websockets = None +SEC_TYPE = Literal['stocks', 'options', 'indices', 'forex', 'crypto'] -def convert_timeframe(timeframe): +ch = logging.StreamHandler() +ch.setFormatter(logging.Formatter('%(asctime)s | [polygon.io] %(levelname)s: %(message)s', datefmt='%H:%M:%S')) +ch.setLevel(logging.DEBUG) +_log = logging.getLogger('polygon') +_log.setLevel(logging.ERROR) +_log.addHandler(ch) + +api_key = '' +_tickers = {} +_set_on_load = [] + +_lasts = {} +_ws = {'stocks': None, 'options': None, 'indices': None, 'crypto': None, 'forex': None} +_subscription_type = { + 'stocks': ('Q', 'A'), + 'options': ('Q', 'A'), + 'indices': ('V', None), + 'forex': ('C', 'CA'), + 'crypto': ('XQ', 'XA'), +} + + +def _convert_timeframe(timeframe): spans = { 'min': 'minute', 'H': 'hour', @@ -37,50 +54,211 @@ def convert_timeframe(timeframe): return multiplier, timespan +def _get_sec_type(ticker): + if '/' in ticker: + return 'forex' + for prefix, security_type in zip(('O:', 'I:', 'C:', 'X:'), ('options', 'indices', 'forex', 'crypto')): + if ticker.startswith(prefix): + return security_type + else: + return 'stocks' + + +def _polygon_request(query_url): + query_url = 'https://api.polygon.io'+query_url + query_url += f'&apiKey={api_key}' + + request = urllib.request.Request(query_url, headers={'User-Agent': 'lightweight_charts/1.0'}) + with urllib.request.urlopen(request) as response: + if response.status != 200: + error = response.json() + _log.error(f'({response.status}) Request failed: {error["error"]}') + return + data = json.loads(response.read()) + if 'results' not in data: + _log.error(f'No results for {query_url}') + return + return data['results'] + + +def get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000): + end_date = dt.datetime.now().strftime('%Y-%m-%d') if end_date == 'now' else end_date + mult, span = _convert_timeframe(timeframe) + if '-' in ticker: + ticker = ticker.replace('-', '') + + query_url = f"/v2/aggs/ticker/{ticker}/range/{mult}/{span}/{start_date}/{end_date}?limit={limit}" + results = _polygon_request(query_url) + if not results: + return None + + df = pd.DataFrame(results) + df['t'] = pd.to_datetime(df['t'], unit='ms') + + rename = {'o': 'open', 'h': 'high', 'l': 'low', 'c': 'close', 't': 'time'} + if not ticker.startswith('I:'): + rename['v'] = 'volume' + + return df[rename.keys()].rename(columns=rename) + + +async def async_get_bar_data(ticker: str, timeframe: str, start_date: str, end_date: str, limit: int = 5_000): + loop = asyncio.get_running_loop() + return await loop.run_in_executor(None, get_bar_data, ticker, timeframe, start_date, end_date, limit) + + +async def _send(sec_type: SEC_TYPE, action: str, params: str): + ws = _ws[sec_type] + while ws is None: + await asyncio.sleep(0.05) + ws = _ws[sec_type] + await ws.send(json.dumps({'action': action, 'params': params})) + + +async def subscribe(ticker: str, sec_type: SEC_TYPE, func, args, precision=2): + if not _ws[sec_type]: + asyncio.create_task(_websocket_connect(sec_type)) + + if sec_type in ('forex', 'crypto'): + key = ticker[ticker.index(':')+1:] + key = key.replace('-', '/') if sec_type == 'forex' else key + else: + key = ticker + + if not _lasts.get(key): + _lasts[key] = { + 'price': 0, + 'funcs': [], + 'precision': precision + } + if sec_type != 'indices': + _lasts[key]['volume'] = 0 + + data = _lasts[key] + + quotes, aggs = _subscription_type[sec_type] + await _send(sec_type, 'subscribe', f'{quotes}.{ticker}') + await _send(sec_type, 'subscribe', f'{aggs}.{ticker}') if aggs else None + + if func in data['funcs']: + return + data['funcs'].append((func, args)) + + +async def unsubscribe(func): + for key, data in _lasts.items(): + if val := next(((f, args) for f, args in data['funcs'] if f == func), None): + break + else: + return + data['funcs'].remove(val) + + if data['funcs']: + return + sec_type = _get_sec_type(key) + quotes, aggs = _subscription_type[sec_type] + await _send(sec_type, 'unsubscribe', f'{quotes}.{key}') + await _send(sec_type, 'unsubscribe', f'{aggs}.{key}') + + +async def _websocket_connect(sec_type): + if websockets is None: + raise ImportError('The "websockets" library was not found, and must be installed to pull live data.') + ticker_key = { + 'stocks': 'sym', + 'options': 'sym', + 'indices': 'T', + 'forex': 'p', + 'crypto': 'pair', + }[sec_type] + async with websockets.connect(f'wss://socket.polygon.io/{sec_type}') as ws: + _ws[sec_type] = ws + await _send(sec_type, 'auth', api_key) + while 1: + response = await ws.recv() + data_list: List[dict] = json.loads(response) + for i, data in enumerate(data_list): + if data['ev'] == 'status': + _log.info(f'{data["message"]}') + continue + _ticker_key = { + 'stocks': 'sym', + 'options': 'sym', + 'indices': 'T', + 'forex': 'p', + 'crypto': 'pair', + } + await _handle_tick(data[ticker_key], data) + + +async def _handle_tick(ticker, data): + lasts = _lasts[ticker] + sec_type = _get_sec_type(ticker) + + if data['ev'] in ('Q', 'V', 'C', 'XQ'): + if sec_type == 'forex': + data['bp'] = data.pop('b') + data['ap'] = data.pop('a') + price = (data['bp'] + data['ap']) / 2 if sec_type != 'indices' else data['val'] + if abs(price - lasts['price']) < (1/(10**lasts['precision'])): + return + lasts['price'] = price + + if sec_type != 'indices': + lasts['volume'] = 0 + + if 't' not in data: + lasts['time'] = pd.to_datetime(data.pop('s'), unit='ms') + else: + lasts['time'] = pd.to_datetime(data['t'], unit='ms') + + elif data['ev'] in ('A', 'CA', 'XA'): + lasts['volume'] = data['v'] + if not lasts.get('time'): + return + lasts['symbol'] = ticker + for func, args in lasts['funcs']: + func(pd.Series(lasts), *args) + + class PolygonAPI: """ Offers direct access to Polygon API data within all Chart objects. It is not designed to be initialized by the user, and should be utilised - through the `polygon` method of `LWC` (chart.polygon.). + through the `polygon` method of `AbstractChart` (chart.polygon.). """ + _set_on_load = [] + def __init__(self, chart): - ch = logging.StreamHandler() - ch.setFormatter(logging.Formatter('%(asctime)s | [polygon.io] %(levelname)s: %(message)s', datefmt='%H:%M:%S')) - ch.setLevel(logging.DEBUG) - self._log = logging.getLogger('polygon') - self._log.setLevel(logging.ERROR) - self._log.addHandler(ch) - - self.max_ticks_per_response = 20 - self._chart = chart - self._lasts = {} - self._key = None - self._ws_q = queue.Queue() - self._q = queue.Queue() - self._lock = threading.Lock() + def set(self, *args): + if asyncio.get_event_loop().is_running(): + asyncio.create_task(self.async_set(*args)) + return True + else: + _set_on_load.append(args) + return False - self._using_live_data = False - self._using_live = {'stocks': False, 'options': False, 'indices': False, 'crypto': False, 'forex': False} - self._ws = {'stocks': None, 'options': None, 'indices': None, 'crypto': None, 'forex': None} - self._tickers = {} + async def async_set(self, sec_type: Literal['stocks', 'options', 'indices', 'forex', 'crypto'], ticker, timeframe, + start_date, end_date, limit, live): + await unsubscribe(self._chart.update_from_tick) + df = await async_get_bar_data(ticker, timeframe, start_date, end_date, limit) - def log(self, info: bool): - """ - Streams informational messages related to Polygon.io. - """ - self._log.setLevel(logging.INFO) if info else self._log.setLevel(logging.ERROR) + self._chart.set(df, render_drawings=_tickers.get(self._chart) == ticker) + _tickers[self._chart] = ticker - def api_key(self, key: str): - """ - Sets the API key to be used with Polygon.io. - """ - self._key = key + if not live: + return True + await subscribe(ticker, sec_type, self._chart.update_from_tick, (True,), self._chart.num_decimals) + return True - def stock(self, symbol: str, timeframe: str, start_date: str, end_date='now', limit: int = 5_000, live: bool = False): + def stock( + self, symbol: str, timeframe: str, start_date: str, end_date='now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays stock data pulled from Polygon.io.\n :param symbol: Ticker to request. @@ -90,13 +268,17 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'stocks', symbol, timeframe, start_date, end_date, limit, live) + return self.set('stocks', symbol, timeframe, start_date, end_date, limit, live) - def option(self, symbol: str, timeframe: str, start_date: str, expiration: str = None, right: Literal['C', 'P'] = None, strike: Union[int, float] = None, - end_date: str = 'now', limit: int = 5_000, live: bool = False): + def option( + self, symbol: str, timeframe: str, start_date: str, expiration: str = None, + right: Literal['C', 'P'] = None, strike: Union[int, float] = None, + end_date: str = 'now', limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays option data pulled from Polygon.io.\n - :param symbol: The underlying ticker to request. A formatted option ticker can also be given instead of using the expiration, right, and strike parameters. + :param symbol: The underlying ticker to request. + A formatted option ticker can also be given instead of using the expiration, right, and strike parameters. :param timeframe: Timeframe to request (1min, 5min, 2H, 1D, 1W, 2M, etc). :param start_date: Start date of the data (YYYY-MM-DD). :param expiration: Expiration of the option (YYYY-MM-DD). @@ -107,10 +289,14 @@ class PolygonAPI: :param live: If true, the data will be updated in real-time. """ if any((expiration, right, strike)): - symbol = f'{symbol}{dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d")}{right}{strike * 1000:08d}' - return self._set(self._chart, 'options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) + expiration = dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d") + symbol = f'{symbol}{expiration}{right}{strike * 1000:08d}' + return self.set('options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) - def index(self, symbol, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def index( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays index data pulled from Polygon.io.\n :param symbol: Ticker to request. @@ -120,9 +306,12 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) + return self.set('indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) - def forex(self, fiat_pair, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def forex( + self, fiat_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays forex data pulled from Polygon.io.\n :param fiat_pair: The fiat pair to request. (USD-CAD, GBP-JPY etc.) @@ -132,9 +321,12 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) + return self.set('forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) - def crypto(self, crypto_pair, timeframe, start_date, end_date='now', limit: int = 5_000, live=False): + def crypto( + self, crypto_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: """ Requests and displays crypto data pulled from Polygon.io.\n :param crypto_pair: The crypto pair to request. (BTC-USD, ETH-BTC etc.) @@ -144,174 +336,61 @@ class PolygonAPI: :param limit: The limit of base aggregates queried to create the timeframe given (max 50_000). :param live: If true, the data will be updated in real-time. """ - return self._set(self._chart, 'crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) + return self.set('crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) - def _set(self, chart, sec_type, ticker, timeframe, start_date, end_date, limit, live): - if requests is None: - raise ImportError('The "requests" library was not found, and must be installed to use polygon.io.') + async def async_stock( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('stocks', symbol, timeframe, start_date, end_date, limit, live) - self._ws_q.put(('_unsubscribe', chart)) - end_date = dt.datetime.now().strftime('%Y-%m-%d') if end_date == 'now' else end_date - mult, span = convert_timeframe(timeframe) + async def async_option( + self, symbol: str, timeframe: str, start_date: str, expiration: str = None, + right: Literal['C', 'P'] = None, strike: Union[int, float] = None, + end_date: str = 'now', limit: int = 5_000, live: bool = False + ) -> bool: + if any((expiration, right, strike)): + expiration = dt.datetime.strptime(expiration, "%Y-%m-%d").strftime("%y%m%d") + symbol = f'{symbol}{expiration}{right}{strike * 1000:08d}' + return await self.async_set('options', f'O:{symbol}', timeframe, start_date, end_date, limit, live) - query_url = f"https://api.polygon.io/v2/aggs/ticker/{ticker.replace('-', '')}/range/{mult}/{span}/{start_date}/{end_date}?limit={limit}&apiKey={self._key}" - response = requests.get(query_url, headers={'User-Agent': 'lightweight_charts/1.0'}) - if response.status_code != 200: - error = response.json() - self._log.error(f'({response.status_code}) Request failed: {error["error"]}') - return - data = response.json() - if 'results' not in data: - self._log.error(f'No results for "{ticker}" ({sec_type})') - return + async def async_index( + self, symbol: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('indices', f'I:{symbol}', timeframe, start_date, end_date, limit, live) - df = pd.DataFrame(data['results']) - columns = ['t', 'o', 'h', 'l', 'c'] - rename = {'o': 'open', 'h': 'high', 'l': 'low', 'c': 'close', 't': 'time'} - if sec_type != 'indices': - rename['v'] = 'volume' - columns.append('v') - df = df[columns].rename(columns=rename) - df['time'] = pd.to_datetime(df['time'], unit='ms') + async def async_forex( + self, fiat_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('forex', f'C:{fiat_pair}', timeframe, start_date, end_date, limit, live) - chart.set(df, render_drawings=self._tickers.get(chart) == ticker) - self._tickers[chart] = ticker + async def async_crypto( + self, crypto_pair: str, timeframe: str, start_date: str, end_date: str = 'now', + limit: int = 5_000, live: bool = False + ) -> bool: + return await self.async_set('crypto', f'X:{crypto_pair}', timeframe, start_date, end_date, limit, live) - if not live: - return True - if not self._using_live_data: - threading.Thread(target=asyncio.run, args=[self._thread_loop()], daemon=True).start() - self._using_live_data = True - with self._lock: - if not self._ws[sec_type]: - self._ws_q.put(('_websocket_connect', self._key, sec_type)) - self._ws_q.put(('_subscribe', chart, ticker, sec_type)) - return True + @staticmethod + def log(info: bool): + """ + Streams informational messages related to Polygon.io. + """ + _log.setLevel(logging.INFO) if info else _log.setLevel(logging.ERROR) - async def _thread_loop(self): - while 1: - while self._ws_q.empty(): - await asyncio.sleep(0.05) - value = self._ws_q.get() - func, args = value[0], value[1:] - asyncio.create_task(getattr(self, func)(*args)) - - async def _subscribe(self, chart, ticker, sec_type): - key = ticker if ':' not in ticker else ticker.split(':')[1] - if not self._lasts.get(key): - self._lasts[key] = { - 'ticker': ticker, - 'sec_type': sec_type, - 'sub_type': { - 'stocks': ('Q', 'A'), - 'options': ('Q', 'A'), - 'indices': ('V', None), - 'forex': ('C', 'CA'), - 'crypto': ('XQ', 'XA'), - }[sec_type], - 'price': chart._last_bar['close'], - 'charts': [], - } - quotes, aggs = self._lasts[key]['sub_type'] - await self._send(self._lasts[key]['sec_type'], 'subscribe', f'{quotes}.{ticker}') - await self._send(self._lasts[key]['sec_type'], 'subscribe', f'{aggs}.{ticker}') if aggs else None - - if sec_type != 'indices': - self._lasts[key]['volume'] = chart._last_bar['volume'] - if chart in self._lasts[key]['charts']: - return - self._lasts[key]['charts'].append(chart) - - async def _unsubscribe(self, chart): - for data in self._lasts.values(): - if chart in data['charts']: - break - else: - return - if chart in data['charts']: - data['charts'].remove(chart) - if data['charts']: - return - - while self._q.qsize(): - self._q.get() # Flush the queue - quotes, aggs = data['sub_type'] - await self._send(data['sec_type'], 'unsubscribe', f'{quotes}.{data["ticker"]}') - await self._send(data['sec_type'], 'unsubscribe', f'{aggs}.{data["ticker"]}') - - async def _send(self, sec_type, action, params): - while 1: - with self._lock: - ws = self._ws[sec_type] - if ws: - break - await asyncio.sleep(0.1) - await ws.send(json.dumps({'action': action, 'params': params})) - - async def _handle_tick(self, sec_type, data): - data['ticker_key'] = { - 'stocks': 'sym', - 'options': 'sym', - 'indices': 'T', - 'forex': 'p', - 'crypto': 'pair', - }[sec_type] - key = data[data['ticker_key']].replace('/', '-') - if ':' in key: - key = key[key.index(':')+1:] - data['t'] = pd.to_datetime(data.pop('s'), unit='ms') if 't' not in data else pd.to_datetime(data['t'], unit='ms') - - if data['ev'] in ('Q', 'V', 'C', 'XQ'): - self._lasts[key]['time'] = data['t'] - if sec_type == 'forex': - data['bp'] = data.pop('b') - data['ap'] = data.pop('a') - if sec_type == 'indices': - self._lasts[key]['price'] = data['val'] - else: - self._lasts[key]['price'] = (data['bp']+data['ap'])/2 - self._lasts[key]['volume'] = 0 - elif data['ev'] in ('A', 'CA', 'XA'): - self._lasts[key]['volume'] = data['v'] - if not self._lasts[key].get('time'): - return - for chart in self._lasts[key]['charts']: - self._q.put((chart.update_from_tick, pd.Series(self._lasts[key]), True)) - - async def _websocket_connect(self, api_key, sec_type): - if websockets is None: - raise ImportError('The "websockets" library was not found, and must be installed to pull live data.') - ssl_context = ssl.create_default_context() - ssl_context.check_hostname = False - ssl_context.verify_mode = ssl.CERT_NONE - async with websockets.connect(f'wss://socket.polygon.io/{sec_type}', ssl=ssl_context) as ws: - with self._lock: - self._ws[sec_type] = ws - await self._send(sec_type, 'auth', api_key) - while 1: - response = await ws.recv() - data_list: List[dict] = json.loads(response) - for i, data in enumerate(data_list): - if data['ev'] == 'status': - self._log.info(f'{data["message"]}') - continue - elif data_list.index(data) < len(data_list)-self.max_ticks_per_response: - continue - await self._handle_tick(sec_type, data) - - def _subchart(self, subchart): - return PolygonAPISubChart(self, subchart) - - -class PolygonAPISubChart(PolygonAPI): - def __init__(self, polygon, subchart): - super().__init__(subchart) - self._set = polygon._set + @staticmethod + def api_key(key: str): + """ + Sets the API key to be used with Polygon.io. + """ + global api_key + api_key = key class PolygonChart(Chart): """ - A prebuilt callback chart object allowing for a standalone and plug-and-play + A prebuilt callback chart object allowing for a standalone, plug-and-play experience of Polygon.io's API. Tickers, security types and timeframes are to be defined within the chart window. @@ -319,41 +398,44 @@ class PolygonChart(Chart): If using the standard `show` method, the `block` parameter must be set to True. When using `show_async`, either is acceptable. """ - def __init__(self, api_key: str, live: bool = False, num_bars: int = 200, end_date: str = 'now', limit: int = 5_000, - timeframe_options: tuple = ('1min', '5min', '30min', 'D', 'W'), - security_options: tuple = ('Stock', 'Option', 'Index', 'Forex', 'Crypto'), - toolbox: bool = True, width: int = 800, height: int = 600, x: int = None, y: int = None, - on_top: bool = False, maximize: bool = False, debug: bool = False): - super().__init__(width=width, height=height, x=x, y=y, on_top=on_top, maximize=maximize, debug=debug, toolbox=toolbox) - self.chart = self + def __init__( + self, api_key: str, live: bool = False, num_bars: int = 200, end_date: str = 'now', limit: int = 5_000, + timeframe_options: tuple = ('1min', '5min', '30min', 'D', 'W'), + security_options: tuple = ('Stock', 'Option', 'Index', 'Forex', 'Crypto'), + toolbox: bool = True, width: int = 800, height: int = 600, x: int = None, y: int = None, + on_top: bool = False, maximize: bool = False, debug: bool = False + ): + super().__init__(width, height, x, y, on_top, maximize, debug, toolbox) + self.num_bars = num_bars self.end_date = end_date self.limit = limit self.live = live + self.polygon.api_key(api_key) + self.events.search += self.on_search + self.legend(True) + self.grid(False, False) + self.crosshair(vert_visible=False, horz_visible=False) self.topbar.active_background_color = 'rgb(91, 98, 246)' self.topbar.textbox('symbol') self.topbar.switcher('timeframe', timeframe_options, func=self._on_timeframe_selection) self.topbar.switcher('security', security_options, func=self._on_security_selection) - self.legend(True) - self.grid(False, False) - self.crosshair(vert_visible=False, horz_visible=False) - self.events.search += self.on_search + self.run_script(f''' {self.id}.search.box.style.backgroundColor = 'rgba(91, 98, 246, 0.5)' {self.id}.spinner.style.borderTop = '4px solid rgba(91, 98, 246, 0.8)' - {self.id}.search.window.style.display = "flex" {self.id}.search.box.focus() ''') - def _polygon(self, symbol): + async def _polygon(self, symbol): self.spinner(True) self.set(pd.DataFrame(), True) self.crosshair(vert_visible=False, horz_visible=False) - mult, span = convert_timeframe(self.topbar['timeframe'].value) + mult, span = _convert_timeframe(self.topbar['timeframe'].value) delta = dt.timedelta(**{span + 's': int(mult)}) short_delta = (delta < dt.timedelta(days=7)) start_date = dt.datetime.now() if self.end_date == 'now' else dt.datetime.strptime(self.end_date, '%Y-%m-%d') @@ -365,7 +447,7 @@ class PolygonChart(Chart): remaining_bars -= 1 epoch = dt.datetime.fromtimestamp(0) start_date = epoch if start_date < epoch else start_date - success = getattr(self.polygon, self.topbar['security'].value.lower())( + success = await getattr(self.polygon, 'async_'+self.topbar['security'].value.lower())( symbol, timeframe=self.topbar['timeframe'].value, start_date=start_date.strftime('%Y-%m-%d'), @@ -374,14 +456,14 @@ class PolygonChart(Chart): live=self.live ) self.spinner(False) - self.crosshair(vert_visible=True, horz_visible=True) if success else None + self.crosshair() if success else None return success async def on_search(self, chart, searched_string): - self.topbar['symbol'].set(searched_string if self._polygon(searched_string) else '') + chart.topbar['symbol'].set(searched_string if await self._polygon(searched_string) else '') async def _on_timeframe_selection(self, chart): - self._polygon(self.topbar['symbol'].value) if self.topbar['symbol'].value else None + await self._polygon(chart.topbar['symbol'].value) if chart.topbar['symbol'].value else None async def _on_security_selection(self, chart): - self.precision(5 if self.topbar['security'].value == 'Forex' else 2) + self.precision(5 if chart.topbar['security'].value == 'Forex' else 2) diff --git a/lightweight_charts/table.py b/lightweight_charts/table.py index 3559fcd..83886e3 100644 --- a/lightweight_charts/table.py +++ b/lightweight_charts/table.py @@ -1,25 +1,28 @@ import random from typing import Union -from .util import jbool +from .util import jbool, Pane, NUM class Footer: - def __init__(self, table): self._table = table + def __init__(self, table): + self._table = table - def __setitem__(self, key, value): self._table._run_script(f'{self._table.id}.footer[{key}].innerText = "{value}"') + def __setitem__(self, key, value): + self._table.run_script(f'{self._table.id}.footer[{key}].innerText = "{value}"') - def __call__(self, number_of_text_boxes): self._table._run_script(f'{self._table.id}.makeFooter({number_of_text_boxes})') + def __call__(self, number_of_text_boxes: int): + self._table.run_script(f'{self._table.id}.makeFooter({number_of_text_boxes})') class Row(dict): def __init__(self, table, id, items): super().__init__() + self.run_script = table.run_script self._table = table - self._run_script = table._run_script self.id = id self.meta = {} - self._run_script(f'''{self._table.id}.newRow({list(items.values())}, '{self.id}')''') + self.run_script(f'{self._table.id}.newRow({list(items.values())}, "{self.id}")') for key, val in items.items(): self[key] = val @@ -29,8 +32,7 @@ class Row(dict): original_value = value if column in self._table._formatters: value = self._table._formatters[column].replace(self._table.VALUE, str(value)) - self._run_script(f'{self._table.id}.updateCell("{self.id}", "{column}", "{value}")') - + self.run_script(f'{self._table.id}.updateCell("{self.id}", "{column}", "{value}")') return super().__setitem__(column, original_value) def background_color(self, column, color): self._style('backgroundColor', column, color) @@ -38,30 +40,29 @@ class Row(dict): def text_color(self, column, color): self._style('textColor', column, color) def _style(self, style, column, arg): - self._run_script(f"{self._table.id}.rows[{self.id}]['{column}'].style.{style} = '{arg}'") + self.run_script(f"{self._table.id}.rows[{self.id}]['{column}'].style.{style} = '{arg}'") def delete(self): - self._run_script(f"{self._table.id}.deleteRow('{self.id}')") + self.run_script(f"{self._table.id}.deleteRow('{self.id}')") self._table.pop(self.id) -class Table(dict): + +class Table(Pane, dict): VALUE = 'CELL__~__VALUE__~__PLACEHOLDER' - def __init__(self, chart, width, height, headings, widths=None, alignments=None, position='left', draggable=False, func=None): - super().__init__() - self._run_script = chart.run_script - self._chart = chart - self.headings = headings + def __init__(self, window, width: NUM, height: NUM, headings: tuple, widths: tuple = None, alignments: tuple = None, position='left', draggable: bool = False, func: callable = None): + dict.__init__(self) + Pane.__init__(self, window) self._formatters = {} + self.headings = headings self.is_shown = True + self.win.handlers[self.id] = lambda rId: func(self[rId]) + headings = list(headings) + widths = list(widths) if widths else [] + alignments = list(alignments) if alignments else [] - self.id = chart._rand.generate() - chart._handlers[self.id] = lambda rId: func(self[rId]) - self._run_script(f''' - {self.id} = new Table({width}, {height}, {list(headings)}, {list(widths) if widths else []}, {list(alignments) if alignments else []}, - '{position}', {jbool(draggable)}, {chart.id}) - ''') - self._run_script(f'{self.id}.callbackName = "{self.id}"') if func else None + self.run_script(f'{self.id} = new Table({width}, {height}, {headings}, {widths}, {alignments}, "{position}", {jbool(draggable)})') + self.run_script(f'{self.id}.callbackName = "{self.id}"') if func else None self.footer = Footer(self) def new_row(self, *values, id=None) -> Row: @@ -69,7 +70,7 @@ class Table(dict): self[row_id] = Row(self, row_id, {heading: item for heading, item in zip(self.headings, values)}) return self[row_id] - def clear(self): self._run_script(f"{self.id}.clearRows()"), super().clear() + def clear(self): self.run_script(f"{self.id}.clearRows()"), super().clear() def get(self, __key: Union[int, str]) -> Row: return super().get(int(__key)) @@ -79,7 +80,7 @@ class Table(dict): def visible(self, visible: bool): self.is_shown = visible - self._run_script(f""" + self.run_script(f""" {self.id}.container.style.display = '{'block' if visible else 'none'}' {self.id}.container.{'add' if visible else 'remove'}EventListener('mousedown', {self.id}.onMouseDown) """) diff --git a/lightweight_charts/toolbox.py b/lightweight_charts/toolbox.py new file mode 100644 index 0000000..1fe4b27 --- /dev/null +++ b/lightweight_charts/toolbox.py @@ -0,0 +1,47 @@ +import json + + +class ToolBox: + def __init__(self, chart): + from lightweight_charts.abstract import JS + self.run_script = chart.run_script + self.id = chart.id + self._save_under = None + self.drawings = {} + chart.win.handlers[f'save_drawings{self.id}'] = self._save_drawings + self.run_script(JS['toolbox']) + self.run_script(f'{self.id}.toolBox = new ToolBox({self.id})') + + def save_drawings_under(self, widget: 'Widget'): + """ + Drawings made on charts will be saved under the widget given. eg `chart.toolbox.save_drawings_under(chart.topbar['symbol'])`. + """ + self._save_under = widget + + def load_drawings(self, tag: str): + """ + Loads and displays the drawings on the chart stored under the tag given. + """ + if not self.drawings.get(tag): + return + self.run_script(f'if ("toolBox" in {self.id}) {self.id}.toolBox.loadDrawings({json.dumps(self.drawings[tag])})') + + def import_drawings(self, file_path): + """ + Imports a list of drawings stored at the given file path. + """ + with open(file_path, 'r') as f: + json_data = json.load(f) + self.drawings = json_data + + def export_drawings(self, file_path): + """ + Exports the current list of drawings to the given file path. + """ + with open(file_path, 'w+') as f: + json.dump(self.drawings, f, indent=4) + + def _save_drawings(self, drawings): + if not self._save_under: + return + self.drawings[self._save_under.value] = json.loads(drawings) diff --git a/lightweight_charts/topbar.py b/lightweight_charts/topbar.py new file mode 100644 index 0000000..c86b35c --- /dev/null +++ b/lightweight_charts/topbar.py @@ -0,0 +1,90 @@ +import asyncio +from typing import Dict + +from .util import jbool, Pane + + +class Widget(Pane): + def __init__(self, topbar, value, func=None): + super().__init__(topbar.win) + self.value = value + + def wrapper(v): + self.value = v + func(topbar._chart) + + async def async_wrapper(v): + self.value = v + await func(topbar._chart) + + self.win.handlers[self.id] = async_wrapper if asyncio.iscoroutinefunction(func) else wrapper + + +class TextWidget(Widget): + def __init__(self, topbar, initial_text): + super().__init__(topbar, value=initial_text) + self.run_script(f'{self.id} = {topbar.id}.makeTextBoxWidget("{initial_text}")') + + def set(self, string): + self.value = string + self.run_script(f'{self.id}.innerText = "{string}"') + + +class SwitcherWidget(Widget): + def __init__(self, topbar, options, default, func): + super().__init__(topbar, value=default, func=func) + self.run_script(f'{self.id} = {topbar.id}.makeSwitcher({list(options)}, "{default}", "{self.id}")') + + +class ButtonWidget(Widget): + def __init__(self, topbar, button, separator, func): + super().__init__(topbar, value=button, func=func) + self.run_script(f'{self.id} = {topbar.id}.makeButton("{button}", "{self.id}", {jbool(separator)})') + + def set(self, string): + self.value = string + self.run_script(f'{self.id}.elem.innerText = "{string}"') + + +class TopBar(Pane): + def __init__(self, chart): + super().__init__(chart.win) + self._chart = chart + self._widgets: Dict[str, Widget] = {} + + self.click_bg_color = '#50565E' + self.hover_bg_color = '#3c434c' + self.active_bg_color = 'rgba(0, 122, 255, 0.7)' + self.active_text_color = '#ececed' + self.text_color = '#d8d9db' + self._created = False + + def _create(self): + if self._created: + return + from lightweight_charts.abstract import JS + self._created = True + self.run_script(JS['callback']) + self.run_script(f''' + {self.id} = new TopBar( {self._chart.id}, '{self.hover_bg_color}', '{self.click_bg_color}', + '{self.active_bg_color}', '{self.text_color}', '{self.active_text_color}') + ''') + + def __getitem__(self, item): + if widget := self._widgets.get(item): + return widget + raise KeyError(f'Topbar widget "{item}" not found.') + + def get(self, widget_name): return self._widgets.get(widget_name) + + def switcher(self, name, options: tuple, default: str = None, func: callable = None): + self._create() + self._widgets[name] = SwitcherWidget(self, options, default if default else options[0], func) + + def textbox(self, name: str, initial_text: str = ''): + self._create() + self._widgets[name] = TextWidget(self, initial_text) + + def button(self, name, button_text: str, separator: bool = True, func: callable = None): + self._create() + self._widgets[name] = ButtonWidget(self, button_text, separator, func) \ No newline at end of file diff --git a/lightweight_charts/util.py b/lightweight_charts/util.py index fbe32b3..6196023 100644 --- a/lightweight_charts/util.py +++ b/lightweight_charts/util.py @@ -1,6 +1,18 @@ import asyncio +from datetime import datetime from random import choices -from typing import Literal +from typing import Literal, Union +import pandas as pd + + +class Pane: + def __init__(self, window): + from lightweight_charts import Window + self.win: Window = window + self.run_script = window.run_script + if hasattr(self, 'id'): + return + self.id = Window._id_gen.generate() class IDGen(list): @@ -14,6 +26,13 @@ class IDGen(list): self.generate() +def parse_event_message(window, string): + name, args = string.split('_~_') + args = args.split(';;;') + func = window.handlers[name] + return func, args + + def jbool(b: bool): return 'true' if b is True else 'false' if b is False else None @@ -27,6 +46,12 @@ CROSSHAIR_MODE = Literal['normal', 'magnet'] PRICE_SCALE_MODE = Literal['normal', 'logarithmic', 'percentage', 'index100'] +TIME = Union[datetime, pd.Timestamp, str] + +NUM = Union[float, int] + +FLOAT = Literal['left', 'right', 'top', 'bottom'] + def line_style(line: LINE_STYLE): js = 'LightweightCharts.LineStyle.' @@ -65,6 +90,7 @@ class Emitter: def _emit(self, *args): self._callable(*args) if self._callable else None + class JSEmitter: def __init__(self, chart, name, on_iadd, wrapper=None): self._on_iadd = on_iadd @@ -78,7 +104,7 @@ class JSEmitter: async def final_async_wrapper(*arg): await other(self._chart, *arg) if not self._wrapper else await self._wrapper(other, self._chart, *arg) - self._chart._handlers[self._name] = final_async_wrapper if asyncio.iscoroutinefunction(other) else final_wrapper + self._chart.win.handlers[self._name] = final_async_wrapper if asyncio.iscoroutinefunction(other) else final_wrapper self._on_iadd(other) return self @@ -89,7 +115,7 @@ class Events: from lightweight_charts.abstract import JS self.search = JSEmitter(chart, f'search{chart.id}', lambda o: chart.run_script(f''' - {JS['callback'] if not chart._callbacks_enabled else ''} + {JS['callback']} makeSpinner({chart.id}) {chart.id}.search = makeSearchBox({chart.id}) ''') diff --git a/lightweight_charts/widgets.py b/lightweight_charts/widgets.py index 2321e68..29143c9 100644 --- a/lightweight_charts/widgets.py +++ b/lightweight_charts/widgets.py @@ -1,97 +1,85 @@ import asyncio +from .util import parse_event_message +from lightweight_charts import abstract + try: import wx.html2 except ImportError: wx = None + try: from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtWebChannel import QWebChannel - from PyQt5.QtCore import QObject, pyqtSlot - - class Bridge(QObject): - def __init__(self, chart): - super().__init__() - self.chart = chart - - @pyqtSlot(str) - def callback(self, message): - _widget_message(self.chart, message) + from PyQt5.QtCore import QObject, pyqtSlot as Slot except ImportError: try: from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWebChannel import QWebChannel from PySide6.QtCore import QObject, Slot - - class Bridge(QObject): - def __init__(self, chart): - super().__init__() - self.chart = chart - - @Slot(str) - def callback(self, message): - _widget_message(self.chart, message) except ImportError: QWebEngineView = None + +if QWebEngineView: + class Bridge(QObject): + def __init__(self, chart): + super().__init__() + self.chart = chart + + @Slot(str) + def callback(self, message): + emit_callback(self.chart, message) + try: from streamlit.components.v1 import html except ImportError: html = None + try: from IPython.display import HTML, display except ImportError: HTML = None -from lightweight_charts.abstract import LWC, JS - -def _widget_message(chart, string): - name, args = string.split('_~_') - args = args.split(';;;') - func = chart._handlers[name] +def emit_callback(window, string): + func, args = parse_event_message(window, string) asyncio.create_task(func(*args)) if asyncio.iscoroutinefunction(func) else func(*args) -class WxChart(LWC): +class WxChart(abstract.AbstractChart): def __init__(self, parent, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False, toolbox: bool = False): if wx is None: raise ModuleNotFoundError('wx.html2 was not found, and must be installed to use WxChart.') self.webview: wx.html2.WebView = wx.html2.WebView.New(parent) + super().__init__(abstract.Window(self.webview.RunScript, 'window.wx_msg.postMessage.bind(window.wx_msg)'), + inner_width, inner_height, scale_candles_only, toolbox) - super().__init__(inner_width=inner_width, inner_height=inner_height, - scale_candles_only=scale_candles_only, toolbox=toolbox, - _js_api_code='window.wx_msg.postMessage.bind(window.wx_msg)') - self._script_func = self.webview.RunScript - - self.webview.Bind(wx.html2.EVT_WEBVIEW_LOADED, lambda e: wx.CallLater(500, self._on_js_load)) - self.webview.Bind(wx.html2.EVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, lambda e: _widget_message(self, e.GetString())) + self.webview.Bind(wx.html2.EVT_WEBVIEW_LOADED, lambda e: wx.CallLater(500, self.win.on_js_load)) + self.webview.Bind(wx.html2.EVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, lambda e: emit_callback(self, e.GetString())) self.webview.AddScriptMessageHandler('wx_msg') - self.webview.SetPage(self._html, '') - self.webview.AddUserScript(JS['toolbox']) if toolbox else None + self.webview.SetPage(abstract.TEMPLATE, '') + self.webview.AddUserScript(abstract.JS['toolbox']) if toolbox else None def get_webview(self): return self.webview -class QtChart(LWC): +class QtChart(abstract.AbstractChart): def __init__(self, widget=None, inner_width: float = 1.0, inner_height: float = 1.0, scale_candles_only: bool = False, toolbox: bool = False): if QWebEngineView is None: raise ModuleNotFoundError('QWebEngineView was not found, and must be installed to use QtChart.') self.webview = QWebEngineView(widget) - - super().__init__(inner_width=inner_width, inner_height=inner_height, - scale_candles_only=scale_candles_only, toolbox=toolbox, - _js_api_code='window.pythonObject.callback') - self._script_func = self.webview.page().runJavaScript + super().__init__(abstract.Window(self.webview.page().runJavaScript, 'window.pythonObject.callback'), + inner_width, inner_height, scale_candles_only, toolbox) self.web_channel = QWebChannel() self.bridge = Bridge(self) self.web_channel.registerObject('bridge', self.bridge) self.webview.page().setWebChannel(self.web_channel) - self.webview.loadFinished.connect(self._on_js_load) + self.webview.loadFinished.connect(self.win.on_js_load) self._html = f''' - {self._html[:85]} + {abstract.TEMPLATE[:85]} - {self._html[85:]} + {abstract.TEMPLATE[85:]} ''' self.webview.page().setHtml(self._html) def get_webview(self): return self.webview -class StaticLWC(LWC): +class StaticLWC(abstract.AbstractChart): def __init__(self, width=None, height=None, inner_width=1, inner_height=1, scale_candles_only: bool = False, toolbox=False, autosize=True): - super().__init__(inner_width, inner_height, scale_candles_only=scale_candles_only, toolbox=toolbox, autosize=autosize) + self._html = abstract.TEMPLATE.replace('\n\n', '') + super().__init__(abstract.Window(run_script=self.run_script), inner_width, inner_height, + scale_candles_only, toolbox, autosize) self.width = width self.height = height - self._html = self._html.replace('\n\n', '') def run_script(self, script, run_last=False): if run_last: - self._final_scripts.append(script) + self.win.final_scripts.append(script) else: self._html += '\n' + script def load(self): - if self.loaded: + if self.win.loaded: return - self.loaded = True - for script in self._final_scripts: + self.win.loaded = True + for script in self.win.final_scripts: self._html += '\n' + script self._load() @@ -143,8 +132,7 @@ class StreamlitChart(StaticLWC): class JupyterChart(StaticLWC): def __init__(self, width: int = 800, height=350, inner_width=1, inner_height=1, scale_candles_only: bool = False, toolbox: bool = False): - super().__init__(width, height, inner_width, inner_height, scale_candles_only, toolbox, autosize=False) - self._position = "" + super().__init__(width, height, inner_width, inner_height, scale_candles_only, toolbox, False) self.run_script(f''' for (var i = 0; i < document.getElementsByClassName("tv-lightweight-charts").length; i++) {{ diff --git a/setup.py b/setup.py index 681084a..ad5db66 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', 'r', encoding='utf-8') as f: setup( name='lightweight_charts', - version='1.0.16', + version='1.0.17', packages=find_packages(), python_requires='>=3.8', install_requires=[