var echarts = require('echarts'); var ROOT_PATH = 'https://echarts.apache.org/examples'; var UP_COLOR = '#00da3c'; var DOWN_COLOR = '#ec0000'; $.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) { var data = splitData(rawData); initTradeChart(elementID, data) } function splitData(rawData) { var categoryData = []; var values = []; var volumes = []; for (var i = 0; i < rawData.length; i++) { categoryData.push(rawData[i].splice(0, 1)[0]); values.push(rawData[i]); volumes.push([ i, rawData[i][4], rawData[i][0] > rawData[i][1] ? 1 : -1 ]); } return { categoryData: categoryData, values: values, volumes: volumes }; } function calculateMovingAverage(dayCount, data) { var result = []; for (var i = 0, len = data.values.length; i < len; i++) { if (i < dayCount) { result.push('-'); continue; } var sum = 0; for (var j = 0; j < dayCount; j++) { sum += data.values[i - j][1]; } result.push(+(sum / dayCount).toFixed(3)); } return result; } function initTradeChart(elementID, data) { var chartDom = document.getElementById(elementID); var myChart = echarts.init(chartDom); myChart.setOption({ animation: false, tooltip: { trigger: 'axis', axisPointer: { type: 'cross' }, borderWidth: 1, borderColor: '#ccc', padding: 10, textStyle: { color: '#000' }, position: function (pos, params, el, elRect, size) { var obj = {top: 10}; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30; return obj; } }, axisPointer: { link: {xAxisIndex: 'all'}, label: { backgroundColor: '#777' } }, visualMap: { show: false, seriesIndex: 1, dimension: 2, pieces: [{ value: 1, color: DOWN_COLOR }, { value: -1, color: UP_COLOR }] }, grid: [ { left: '10%', right: '8%', height: '50%' }, { left: '10%', right: '8%', top: '58%', height: '13%' } ], xAxis: [ { type: 'category', data: data.categoryData, scale: true, boundaryGap: false, axisLine: {onZero: false}, splitLine: {show: false}, splitNumber: 20, min: 'dataMin', max: 'dataMax', axisPointer: { z: 100 } }, { type: 'category', gridIndex: 1, data: data.categoryData, scale: true, boundaryGap: false, axisLine: {onZero: false}, axisTick: {show: false}, splitLine: {show: false}, axisLabel: {show: false}, splitNumber: 20, min: 'dataMin', max: 'dataMax' } ], yAxis: [ { scale: true, }, { scale: true, gridIndex: 1, splitNumber: 2, axisLabel: {show: false}, axisLine: {show: false}, axisTick: {show: false}, splitLine: {show: false} } ], dataZoom: [ { type: 'inside', xAxisIndex: [0, 1], start: 98, end: 100 }, { show: true, xAxisIndex: [0, 1], type: 'slider', top: '85%', start: 98, end: 100 } ], series: [ { name: 'Dow-Jones index', type: 'candlestick', data: data.values, itemStyle: { color: UP_COLOR, color0: DOWN_COLOR, borderColor: null, borderColor0: null }, tooltip: { formatter: function (param) { param = param[0]; return [ 'Date: ' + param.name + '
', 'Open: ' + param.data[0] + '
', 'Close: ' + param.data[1] + '
', 'Lowest: ' + param.data[2] + '
', 'Highest: ' + param.data[3] + '
' ].join(''); } } }, { name: 'Volume', type: 'bar', xAxisIndex: 1, yAxisIndex: 1, data: data.volumes }, { name: 'MA5', type: 'line', data: calculateMA(7, data), smooth: true, lineStyle: { opacity: 0.5 } }, { name: 'MA20', type: 'line', data: calculateMA(20, data), smooth: true, lineStyle: { opacity: 0.5 } }, { name: 'MA50', type: 'line', data: calculateMA(50, data), smooth: true, lineStyle: { opacity: 0.5 } }, ] }, true); });