//var bgColor = "#1f212d";//背景 var bgColor = "#000000";//背景 var upColor="#F9293E";//涨颜色 //var downColor="#00aa3b";//跌颜色 var downColor="#54FCFC";//跌颜色 // ma 颜色 //var ma5Color = "#39afe6"; var ma5Color = "#FFFFFF"; var ma10Color = "#ffab42"; var ma20Color = "#da6ee8"; var ma30Color = "#00940b"; var option = initKOption(); function initKOption(){ var str = '{"code":1,"msg":"\u64cd\u4f5c\u6210\u529f\uff01","stockcode":"000860","name":"\u987a\u946b\u519c\u4e1a","data":[["2019-01-09",33.2,34.37,33.15,34.88,323805809,-42.01,-4.52,null,null],["2019-01-10",34.3,34.22,34.08,34.76,208373777,-57.21,45.02,null,null],["2019-01-11",34.5,34.63,34.04,35.1,183689036,-44.75,69.53,1,-182.78],["2019-01-14",34.3,34.61,33.88,34.92,146061888,32.42,137.9,null,null],["2019-01-15",34.61,36.65,34.41,36.88,372430544,-60.59,231.39,null,null],["2019-01-16",36.5,36.65,36.1,37.08,280606605,-9.37,229.71,null,null],["2019-01-17",36.68,35.95,35.95,36.92,211470094,-13.17,218.16,null,null],["2019-01-18",35.96,36.9,35.9,37.8,321291139,24.8,201.86,-14.65,-51.81],["2019-01-21",36.98,37.21,36.88,37.96,271589775,1,222.42,null,null],["2019-01-22",36.8,37.09,36.61,37.25,197527447,15.23,218.05,null,null],["2019-01-23",36.85,38.62,36.8,38.89,349603059,-39.05,211.59,null,null],["2019-01-24",38.4,39.37,38.2,39.86,304809685,15.36,242.13,null,null],["2019-01-25",39.63,38.98,38.63,39.8,275472017,-25.24,159.75,0,55.32],["2019-01-28",39.07,40.52,39.01,40.7,384821343,51.72,280.12,null,null],["2019-01-29",40.39,40.48,39.6,40.7,259715968,-23.99,171.59,null,null],["2019-01-30",40,39.46,39.43,40.92,210069665,-26.44,247.71,null,null],["2019-01-31",39.47,39.9,39.23,40.49,241722170,12.9,203.99,null,null],["2019-02-01",39.95,39.78,39.51,40.4,200584710,-7.3,102.74,-86.01,151.43],["2019-02-11",39.96,41.18,39.02,41.66,379968244,-11.66,113.52,null,null],["2019-02-12",41.17,41.17,40.51,41.84,315618555,-13.52,178.35,null,null],["2019-02-13",41.25,41.1,40.56,41.5,310706680,-20.15,134.95,null,null],["2019-02-14",41.11,41.41,40.81,42.15,230409862,-3,117.31,null,null],["2019-02-15",41.35,40.1,40.1,41.35,231931494,-3.93,86.59,103.39,234.31],["2019-02-18",40.39,42.64,40.38,43,404266781,19.86,126.56,null,null],["2019-02-19",42.59,42.28,41.6,43.15,273566797,12.03,110.29,null,null],["2019-02-20",41.8,42.1,41.6,42.65,232117133,8.93,91,null,null],["2019-02-21",42.2,41.7,41.44,42.48,240612040,-2.24,88.63,null,null],["2019-02-22",41.61,41.35,40.6,41.61,284922434,-0.63,79.63,-118.6,200.28],["2019-02-25",40.98,42.5,40.9,42.84,446776560,-1.86,88.05,null,null],["2019-02-26",42.1,41.83,41.5,42.84,305207648,4,36.49,null,null],["2019-02-27",42,42.1,41.89,44.2,467743030,-2.12,39.49,null,null],["2019-02-28",41.98,42.24,40.88,42.77,312307021,-4.32,43.67,null,null],["2019-03-01",42.5,43.27,41.64,43.6,468914818,-16.69,73.48,22.33,271.3],["2019-03-04",43.1,43.3,42.2,44.84,591651198,-0.07,74.43,null,null],["2019-03-05",43.42,45.4,43.3,45.4,574741888,-45.29,84.93,null,null],["2019-03-06",45.7,44.48,43.83,45.7,401426966,-34.91,83.82,null,null],["2019-03-07",44.5,43.14,41.9,44.7,500473941,7.15,80.19,null,null],["2019-03-08",42.11,42.08,41.9,43.39,278556975,-6.7,56.86,-73.82,303.28],["2019-03-11",42.56,43.69,42.5,44.1,378343404,-4.82,50.84,null,null],["2019-03-12",43.68,44.7,42.6,44.94,500318983,2.57,50.05,null,null],["2019-03-13",44.5,45.86,44.49,46.88,494987424,-36.82,65.04,null,null],["2019-03-14",45.98,45.2,44.85,46.85,439916251,25.29,67.96,null,null],["2019-03-15",48.5,49.72,48.5,49.72,722553975,-92.75,156.43,138.3,563.78],["2019-03-18",53,54.69,51.12,54.69,1167284323,136.24,209.18,null,null],["2019-03-19",57.46,56.19,53.91,58.88,2242763085,147.02,519.03,null,null],["2019-03-20",55.35,55.45,54.7,58.2,1488077677,4,420.59,null,null],["2019-03-21",55.53,54.39,53,56.35,1176297163,-51.23,451.45,null,null],["2019-03-22",54.58,56.96,54.41,58.14,1395614055,-35.48,588.3,215.37,738.51],["2019-03-25",54.14,56,53.1,56.86,677460360,-41.68,320.9,null,null],["2019-03-26",56,58.37,55.8,61.3,1102807417,-6.86,537.93,null,null],["2019-03-27",58.6,58.29,57.11,60.88,1211431721,-13.59,318.79,null,null],["2019-03-28",58.04,58.88,56.7,59.66,1018436539,7.32,356.92,null,null],["2019-03-29",59.3,60.63,58.51,62.26,1374762733,36.16,223.32,-118.05,597.84],["2019-04-01",59.21,60.55,59,60.73,991018730,22.44,304.51,null,null],["2019-04-02",60.04,59.11,58.01,60.09,836366394,15.31,302.14,null,null],["2019-04-03",58.68,59,58.5,59.9,0,-0.14,138.17,null,null],["2019-04-04",58.31,59.37,58.26,61.2,0,3.61,189.94,-2,918.5],["2019-04-08",60.5,58.5,57.5,60.9,897306904,11.41,141.54,null,null],["2019-04-09",58.12,59.89,56.89,59.89,584331571,2.99,88.87,null,null],["2019-04-10",59.15,59.6,57.82,60.68,671128830,-3.46,89.08,null,null],["2019-04-11",59.25,56.45,56.13,60.3,639079631,30.45,23.58,null,null],["2019-04-12",55.99,59.04,55.65,59.21,613034755,-2.26,11.2,-1,654.16],["2019-04-15",59.9,58.57,58.05,60.5,533765305,9.31,-0.48,null,null],["2019-04-16",58.02,58.74,57.12,59.28,379525837,3.41,1.17,null,null],["2019-04-17",58.29,59.9,57.3,60.37,518701110,7.69,15.63,null,null],["2019-04-18",59.57,62.26,59.03,63.48,710922194,7.1,45.96,null,null],["2019-04-19",61.91,61.8,60.56,62.6,427526306,5,51.8,-82.4,644.34],["2019-04-22",61.8,60.1,60.1,63.24,0,-0.85,51.04,null,null],["2019-04-23",60.37,60.09,58.88,62.2,598185106,0.53,57.15,null,null],["2019-04-24",60.39,59.3,57.71,60.7,476211398,8.21,30.44,null,null],["2019-04-25",59.12,58.71,58.5,60.97,431711811,-7.11,12.36,null,null],["2019-04-26",58.1,58.19,57.41,59.89,466239073,34.39,-11.37,9.35,912.36],["2019-04-29",55,55.66,52.77,56.99,1196849538,-8.59,-39.28,null,null],["2019-04-30",55.7,58,55.01,59.5,656310216,1,-67.03,2.64,468.82],["2019-05-06",56,52.91,52.2,56.6,538101368,4,-130.6,null,null],["2019-05-07",52.9,54.49,52.89,55.77,392154601,2,-111.43,null,null],["2019-05-08",53.45,55.7,53.25,57.45,430129161,-18.16,-136,null,null],["2019-05-09",55,53.9,52.91,55.99,539134949,-12.03,-160.85,null,null],["2019-05-10",54.66,57.1,54.02,57.1,459294401,3.51,-135.35,3.45,410.1],["2019-05-13",56.22,56.25,55.1,57.59,418734185,-14.72,-119.3,null,null],["2019-05-14",55.5,56.15,55.5,57.47,296501234,-12.04,-57.93,null,null],["2019-05-15",56.71,57.86,55.9,58.7,595904097,30.2,-22.58,null,null],["2019-05-16",57.44,59.27,57.02,59.8,505803344,-17.6,27.18,null,null],["2019-05-17",59.25,57.69,57.5,59.88,387471182,25.08,54.75,10.05,465.88],["2019-05-20",57.26,55.44,54.8,57.69,382016958,-5.83,13.42,null,null],["2019-05-21",56.15,56.3,55,56.97,257882594,3,18.69,null,null],["2019-05-22",56.01,55.3,54.6,56.24,287602879,-7.7,0.95,null,null],["2019-05-23",54.73,52.91,52.05,55,541329347,-50.69,-40.12,null,null],["2019-05-24",53,54.17,52.82,54.9,358902780,-22.27,-47.93,-50.49,305.17],["2019-05-27",41.59,41.95,40.58,42.68,310336260,2,-50.7,null,null],["2019-05-28",41.95,42.25,41.3,43.21,380221249,2.6,-71.41,null,null],["2019-05-29",41.71,42,41.6,42.71,0,2,-44.69,null,null],["2019-05-30",41.98,41.28,40.65,42.47,273184346,-7.31,-78.59,null,null],["2019-05-31",41.26,41.2,40.6,41.87,211770195,-3.92,-103.13,29.87,105.1]]}'; var cdata = JSON.parse(str); var data = splitData(cdata.data); var code = cdata.stockcode; var stockname = cdata.name; //console.log(cdata); var option = { tooltip: { //弹框指示器 trigger: 'axis', alwaysShowContent: true, axisPointer: { type: 'cross' }, position: function (pos, params, el, elRect, size) { var obj = {top: 10}; obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30; return obj; }, formatter: function (param) { var params = param[0]; $date = params.name; $today = data.datas[params.dataIndex]; // $today = params.data; $yestoday = data.datas[params.dataIndex-1]; //console.log(params.dataIndex); //console.log(data.datas[params.dataIndex-1][1]); // 昨天收盘价 //console.log(data.datas[params.dataIndex]); //console.log(params.data); //console.log(666); if ($date) { return [ '日期: ' + $date + '<hr size=1 style="margin: 3px 0">', '开盘: ' + $today[0] + '<br/>', '收盘: ' + $today[1] + '<br/>', '最低: ' + $today[2] + '<br/>', '最高: ' + $today[3] + '<br/>', '涨幅: ' + (($today[1] - $yestoday[1])/$yestoday[1]*100).toFixed(2) + '%<br/>'+ '<hr size=1 style="margin: 3px 0">', 'MACD1: ' + $today[5] + ($today[5]>$yestoday[5]?'↑':'↓')+'<br/>', 'MACD2: ' + $today[6] + ($today[6]>$yestoday[6]?'↑':'↓')+'<br/>', ].join(''); }else{ //return } }, }, legend: { //图例控件,点击图例控制哪些系列不显示 icon: 'rect', type:'scroll', itemWidth: 14, itemHeight: 2, left: 0, top: '-1%', animation:true, textStyle: { fontSize: 12, color: '#0e99e2' }, pageIconColor:'#0e99e2' }, axisPointer: { //show: true, link: {xAxisIndex: 'all'}, //label: { // backgroundColor: '#777' //} }, color: [ma5Color, ma10Color, ma20Color, ma30Color], grid: [{ id: 'gd1', left: '0%', right: '1%', height: '42%', //主K线的高度, top: '5%' }, { left: '0%', right: '1%', top: '43%', height: '7%' //交易量图的高度 }, { left: '0%', right: '1%', top: '42%', //MACD 指标 height: '12%' }, { left: '0%', right: '1%', top: '54%', //MACD2 指标 height: '30%' }, { left: '0%', right: '1%', top: '74%', //MACD3 指标 height: '20%' }], xAxis: [ //==== x轴 { //主图 type: 'category', data: data.times, scale: true, axisLine: { onZero: false }, axisPointer: { z: 100, label: { show: false } }, axisLabel: { //label文字设置 show: false }, splitLine: { show: false, lineStyle: { color: '#3a3a3e' } }, splitNumber: 20, min: 'dataMin', max: 'dataMax' }, { //交易量图 type: 'category', gridIndex: 1, data: data.times, axisLabel: { //label文字设置 color: '#9b9da9', fontSize: 10, show: false }, axisPointer: { label: { show: false } } }, { //幅图 type: 'category', gridIndex: 2, data: data.times, axisLabel: { show: false }, axisPointer: { label: { show: false } } }, { //庄家散户 type: 'category', gridIndex: 3, data: data.times, triggerEvent : false, triggerTooltip: false, axisPointer: { label: { show: false } }, axisLabel: { show: false } }, { //庄家散户长线 type: 'category', gridIndex: 4, triggerTooltip: false, data: data.times, axisLabel: { show: false }, } ], yAxis: [ //y轴 { //==主图 scale: true, z:4, axisLabel: { //label文字设置 color: '#c7c7c7', inside: true, //label文字朝内对齐 }, splitLine: { //分割线设置 show: false, lineStyle: { color: '#181a23' } }, }, { //交易图 gridIndex: 1, splitNumber: 3, z:4, axisLine: { onZero: false }, axisTick: { show: false }, splitLine: { show: false }, axisLabel: { //label文字设置 color: '#c7c7c7', inside: true, //label文字朝内对齐 fontSize: 8 }, }, { //幅图 z:4, gridIndex: 2,splitNumber: 4, axisLine: { onZero: false }, axisTick: { show: false }, splitLine: { show: false }, axisLabel: { //label文字设置 color: '#c7c7c7', inside: true, //label文字朝内对齐 fontSize: 8 }, }, { //幅图 z:4, gridIndex: 3,splitNumber: 4, axisLine: { onZero: false }, axisTick: { show: false }, splitLine: { show: false }, axisLabel: { //label文字设置 color: '#c7c7c7', inside: true, //label文字朝内对齐 fontSize: 8 }, }, { //幅图 z:4, gridIndex: 4,splitNumber: 4, axisLine: { onZero: false }, axisTick: { show: false }, splitLine: { show: false }, axisLabel: { //label文字设置 color: '#c7c7c7', inside: true, //label文字朝内对齐 fontSize: 8 }, } ], dataZoom: [{ type: 'slider', xAxisIndex: [0, 1, 2, 3, 4], //控件联动 start: 0, end: 100, throttle: 10, top: '94%', height: '6%', borderColor: '#696969', textStyle: { color: '#dcdcdc' }, handleSize: '90%', //滑块图标 handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', dataBackground: { lineStyle: { color: '#fff' }, //数据边界线样式 areaStyle: { color: '#000000' } //数据域填充样式 } }, { type: 'inside', xAxisIndex: [0, 1, 2, 3, 4],//控件联动 }, ], visualMap: [ { show: false, seriesIndex: 6, dimension: 0, pieces: [ // { // lte: 0, // color: 'green' // }, { // gt: 1, // color: 'red' // } ], //pieces的值由动态数据决定 outOfRange: { color: 'green' }, }, { show: false, seriesIndex: 7, dimension: 0, pieces: [], //pieces的值由动态数据决定 outOfRange: { color: 'green' }, }, ], animation: false, //禁止动画效果 backgroundColor: bgColor, blendMode: 'source-over', series: [{ name: code+ stockname +'日K线', type: 'candlestick', data: data.datas, barWidth: '55%', large: true, largeThreshold: 100, itemStyle: { normal: { color: upColor, //fd2e2e ff4242 color0: downColor, borderColor: upColor, borderColor0: downColor, //opacity:0.8 } }, }, { name: 'MA5', type: 'line', data: calculateMA(5,data), smooth: true, symbol: "none", //隐藏选中时有小圆点 lineStyle: { normal: { opacity: 0.8, color: '#39afe6', width: 1 } }, }, { name: 'MA10', type: 'line', data: calculateMA(10,data), smooth: true, symbol: "none", lineStyle: { //标线的样式 normal: { opacity: 0.8, color: '#da6ee8', width: 1 } } }, { name: 'MA20', type: 'line', data: calculateMA(20,data), smooth: true, symbol: "none", lineStyle: { opacity: 0.8, width: 1, color: ma20Color } }, { name: 'MA30', type: 'line', data: calculateMA(30,data), smooth: true, symbol: "none", lineStyle: { normal: { opacity: 0.8, width: 1, color: ma30Color } } }, { name: 'Volumn', type: 'bar', xAxisIndex: 1, yAxisIndex: 1, data: data.vols, barWidth: '60%', itemStyle: { normal: { color: function(params) { var colorList; if (data.datas[params.dataIndex][1] > data.datas[params.dataIndex][0]) { colorList = upColor; } else { colorList = downColor; } return colorList; }, } } }, { name: 'macd1', type: 'line', symbol: "none", xAxisIndex: 3, yAxisIndex: 3, data: data.zj, connectNulls: true, // itemStyle: { // normal: { // color: function(params) { // var colorList; // if (params.dataIndex>1 && data.zj[params.dataIndex][1] > data.zj[params.dataIndex-1][1]) { // colorList = upColor; // } else { // colorList = downColor; // } // return colorList; // }, // } // }, lineStyle: { normal: { //color: '#FF0000', width: 1 } }, }, { name: 'macd2', type: 'line', symbol: "none", //smooth:0, //关键点,为true时不支持虚线,实线就用true xAxisIndex: 3, yAxisIndex: 3, data: data.sh, lineStyle: { normal: { opacity: 1, //color: '#39afe6', width: 1, type: 'dotted' // 这个是虚线 dashed, dotted更密集 } }, }, { name: '0', type: 'line', symbol: "none", xAxisIndex: 3, yAxisIndex: 3, data: data.lz, lineStyle: { normal: { opacity: 0.8, color: '#0000e6', width: 1 } } }, ] }; //console.log(option.visualMap[0].pieces); //console.log(option.series[9].data); //console.log(data); // 设置macd折线涨就红色,跌就绿色 var mydata = data.zj; var piecesn = 0; var j = 0; for(let i = 1; i < mydata.length; i++) { //console.log(i); if(mydata[i][2] == 1) { option.visualMap[piecesn].pieces[j] = {gt:i-1,lte:i,color:'red'}; j++; } } // 设置macd折线涨就红色,跌就绿色 var mydata = data.sh; var piecesn = 1; var j = 0; for(let i = 1; i < mydata.length; i++) { //console.log(i); if(mydata.indexOf(i) && mydata[i] >= mydata[i-1]) { option.visualMap[piecesn].pieces[j] = {gt:i-1,lte:i,color:'red'}; j++; } } return option; } /** * 15:20 时:分 格式时间增加num分钟 * @param {Object} time 起始时间 * @param {Object} num */ function addTimeStr(time,num){ var hour=time.split(':')[0]; var mins=Number(time.split(':')[1]); var mins_un=parseInt((mins+num)/60); var hour_un=parseInt((Number(hour)+mins_un)/24); if(mins_un>0){ if(hour_un>0){ var tmpVal=((Number(hour)+mins_un)%24)+""; hour=tmpVal.length>1? tmpVal:'0'+tmpVal;//判断是否是一位 }else{ var tmpVal=Number(hour)+mins_un+""; hour=tmpVal.length>1? tmpVal:'0'+tmpVal; } var tmpMinsVal=((mins+num)%60)+""; mins=tmpMinsVal.length>1? tmpMinsVal:0+tmpMinsVal;//分钟数为 取余60的数 }else{ var tmpMinsVal=mins+num+""; mins=tmpMinsVal.length>1? tmpMinsVal:'0'+tmpMinsVal;//不大于整除60 } return hour+":"+mins; } //获取增加指定分钟数的 数组 如 09:30增加2分钟 结果为 ['09:31','09:32'] function getNextTime(startTime, endTIme, offset, resultArr) { var result = addTimeStr(startTime, offset); resultArr.push(result); if (result == endTIme) { return resultArr; } else { return getNextTime(result, endTIme, offset, resultArr); } } /** * 不同类型的股票的交易时间会不同 * @param {Object} type hs=沪深 us=美股 hk=港股 */ var time_arr = function(type) { if(type.indexOf('us')!=-1){//生成美股时间段 var timeArr = new Array(); timeArr.push('09:30') return getNextTime('09:30', '16:00', 1, timeArr); } if(type.indexOf('hs')!=-1){//生成沪深时间段 var timeArr = new Array(); timeArr.push('09:30'); timeArr.concat(getNextTime('09:30', '11:29', 1, timeArr)); timeArr.push('13:00'); timeArr.concat(getNextTime('13:00', '15:00', 1, timeArr)); return timeArr; } if(type.indexOf('hk')!=-1){//生成港股时间段 var timeArr = new Array(); timeArr.push('09:30'); timeArr.concat(getNextTime('09:30', '11:59', 1, timeArr)); timeArr.push('13:00'); timeArr.concat(getNextTime('13:00', '16:00', 1, timeArr)); return timeArr; } } var get_m_data = function(m_data,type) { var priceArr = new Array(); var avgPrice = new Array(); var vol = new Array(); var times = time_arr(type); $.each(m_data.data, function(i, v) { priceArr.push(v[1]); avgPrice.push(v[2]); vol.push(v[3]); }) return { priceArr: priceArr, avgPrice: avgPrice, vol: vol, times: times } } /** * 计算价格涨跌幅百分比 * @param {Object} price 当前价 * @param {Object} yclose 昨收价 */ function ratioCalculate(price,yclose){ return ((price-yclose)/yclose*100).toFixed(3); } //数组处理 function splitData(rawData) { var datas = []; var times = [];var vols = []; var zj = [];var sh = [];var lz = [];var zjw = [];var shw = [];var lzw = []; for (var i = 0; i < rawData.length; i++) { datas.push(rawData[i]); times.push(rawData[i].splice(0, 1)[0]); vols.push(rawData[i][4]); zj.push([i,rawData[i][5],((i>0 && rawData[i][5]>rawData[i-1][5])?1:-1)]); sh.push(rawData[i][6]); lz.push(0); } return {datas:datas,times:times,vols:vols,zj:zj,sh:sh,lz:lz,zjw:zjw,shw:shw,lzw:lzw}; } //================================MA计算公式 function calculateMA(dayCount,data) { var result = []; for (var i = 0, len = data.times.length; i < len; i++) { if (i < dayCount) { result.push('-'); continue; } var sum = 0; for (var j = 0; j < dayCount; j++) { sum += data.datas[i - j][1]; } result.push((sum / dayCount).toFixed(2)); } return result; }