Initial startup
This commit is contained in:
parent
e414a501aa
commit
158bf98871
44 changed files with 5339 additions and 144 deletions
226
src/main/resources/web/js/trader_chart.js
Normal file
226
src/main/resources/web/js/trader_chart.js
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
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 + '<hr size=1 style="margin: 3px 0">',
|
||||
'Open: ' + param.data[0] + '<br/>',
|
||||
'Close: ' + param.data[1] + '<br/>',
|
||||
'Lowest: ' + param.data[2] + '<br/>',
|
||||
'Highest: ' + param.data[3] + '<br/>'
|
||||
].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);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue