javascript:echarts 画基金周K线图

以广发双擎升级混合基金 (005911)为例

W005911.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title> echarts Kline </title>
    <!-- 引入ECharts文件 -->
    <script type="text/javascript" src="/echarts/echarts.3.8.js "></script>
</head>
<body>

    <!-- 为ECharts准备一个具备大小(宽高)的DOM -->
    <div id="main" style="width: 1200px; height: 600px;"></div>
    
    <script type="text/javascript">

        /*基于准备好的dom,初始化echarts实例 */
        var myChart = echarts.init(document.getElementById('main'));

        // 数据项:date,open,close,low,high
		//     ['2016-01-08',1.1141,1.0800,1.0600,1.1350,1.101]
        var data = splitData([['2018-11-02',1.0001,1.0001,1.0001,1.0001],
['2018-11-09',1.0000,1.0000,1.0000,1.0000],
['2018-11-16',0.9999,0.9999,0.9999,0.9999],
['2018-11-23',0.9999,0.9999,0.9999,0.9999],
['2018-11-30',0.9998,0.9998,0.9998,0.9998],
['2018-12-07',0.9997,1.0022,0.9997,1.0036],
['2018-12-14',0.9974,1.0028,0.9974,1.0064],
['2018-12-21',0.9986,0.9813,0.9813,0.9986],
['2018-12-28',0.9849,0.9832,0.9832,0.9868],
['2019-01-04',0.9830,0.9823,0.9760,0.9830],
['2019-01-11',0.9881,0.9929,0.9881,0.9929],
['2019-01-18',0.9847,1.0145,0.9847,1.0145],
['2019-01-25',1.0137,1.0246,0.9999,1.0246],
['2019-02-01',1.0199,1.0478,1.0057,1.0478],
['2019-02-15',1.0719,1.0887,1.0719,1.1046],
['2019-02-22',1.1338,1.1593,1.1201,1.1593],
['2019-03-01',1.2137,1.2223,1.1798,1.2223],
['2019-03-08',1.2476,1.2702,1.2476,1.2946],
['2019-03-15',1.3083,1.2703,1.2702,1.3403],
['2019-03-22',1.2924,1.3007,1.2924,1.3108],
['2019-03-29',1.3004,1.3454,1.2913,1.3454],
['2019-04-04',1.3793,1.3807,1.3782,1.3807],
['2019-04-12',1.3504,1.3254,1.3254,1.3597],
['2019-04-19',1.3138,1.3442,1.3138,1.3442],
['2019-04-26',1.3400,1.3234,1.3234,1.3499],
['2019-04-30',1.3031,1.3077,1.3031,1.3077],
['2019-05-10',1.2476,1.3051,1.2476,1.3051],
['2019-05-17',1.2988,1.3071,1.2937,1.3160],
['2019-05-24',1.3090,1.3074,1.3074,1.3274],
['2019-05-31',1.3289,1.3301,1.3289,1.3450],
['2019-06-06',1.3309,1.2871,1.2871,1.3309],
['2019-06-14',1.2965,1.3051,1.2965,1.3301],
['2019-06-21',1.2984,1.3553,1.2984,1.3553],
['2019-06-30',1.3524,1.3597,1.3428,1.3704],
['2019-07-05',1.4026,1.3892,1.3787,1.4081],
['2019-07-12',1.3552,1.3835,1.3552,1.3861],
['2019-07-19',1.4140,1.3907,1.3895,1.4140],
['2019-07-26',1.3735,1.4512,1.3735,1.4574],
['2019-08-02',1.4644,1.4569,1.4569,1.4746],
['2019-08-09',1.4434,1.4163,1.3997,1.4434],
['2019-08-16',1.4673,1.5203,1.4632,1.5203],
['2019-08-23',1.5819,1.5667,1.5665,1.5864],
['2019-08-30',1.5639,1.6539,1.5639,1.6539],
['2019-09-06',1.7254,1.7993,1.7254,1.7993],
['2019-09-12',1.8718,1.8158,1.8158,1.8718],
['2019-09-20',1.8268,1.8593,1.7878,1.8593],
['2019-09-27',1.9044,1.7703,1.7601,1.9116],
['2019-09-30',1.7399,1.7399,1.7399,1.7399],
['2019-10-11',1.7120,1.7731,1.7120,1.7918],
['2019-10-18',1.8277,1.7345,1.7345,1.8277],
['2019-10-25',1.7271,1.7879,1.7271,1.7879],
['2019-11-01',1.8626,1.8759,1.8315,1.8759],
['2019-11-08',1.8876,1.8911,1.8876,1.9322],
['2019-11-15',1.8595,1.9708,1.8595,1.9786],
['2019-11-22',1.9662,1.9292,1.9292,2.0160],
['2019-11-29',1.8758,1.9334,1.8758,1.9462],
['2019-12-06',1.9657,2.0833,1.9657,2.0833],
['2019-12-13',2.1021,2.1756,2.1021,2.1756],
['2019-12-20',2.2221,2.1742,2.1742,2.2334],
['2019-12-27',2.1436,2.1711,2.1436,2.2256],
['2020-01-03',2.1752,2.2030,2.1752,2.2168],
['2020-01-10',2.2107,2.2799,2.1871,2.2799],
['2020-01-17',2.3195,2.3749,2.2982,2.3749],
['2020-01-23',2.4625,2.4445,2.4400,2.4958],
['2020-02-07',2.2939,2.5209,2.2939,2.5209],
['2020-02-14',2.5221,2.6219,2.5221,2.6219],
['2020-02-21',2.6931,2.8538,2.6931,2.8538],
['2020-02-28',2.9539,2.7286,2.7286,3.0328],
['2020-03-06',2.6654,2.6402,2.6402,2.6867],
['2020-03-13',2.5154,2.5190,2.5093,2.6234],
['2020-03-20',2.3522,2.3632,2.3141,2.3663],
['2020-03-27',2.2409,2.3096,2.2409,2.3475],
['2020-04-03',2.2665,2.3426,2.2641,2.3654],
['2020-04-10',2.4139,2.3371,2.3371,2.4204],
['2020-04-17',2.3039,2.4091,2.3039,2.4091]]);


        //切割数组,把数组中的日期和数据分离,返回数组中的日期和数据
        function splitData(rawData) {
            var dates = [];
            var values = [];
            
            for (var i = 0; i < rawData.length; i++) {
                //splice 返回每组数组中被删除的第一项,即返回数组中被删除的日期 
                //alert(rawData[i].splice(0, 1)[0]);
                //dates  日期  把返回的日期放到dates[]数组中
                dates.push(rawData[i].splice(0, 1)[0]);
                //alert(dates);

                //数据数组,即数组中除日期外的数据
                values.push(rawData[i])
            }
            return {
                dates: dates, //数组中的日期 x轴对应的日期
                values: values              //数组中的数据 y轴对应的数据
            };
        }

    //计算MA平均线,N日移动平均线=N日收盘价之和/N  dayCount要计算的天数(5,10,20,30)
        function calculateMA(dayCount) {
            var result = [];
            for (var i = 0, len = data.values.length; i < len; i++) {
                if (i < dayCount) {
                    result.push('-');
                    //alert(result);
                    continue;   //结束单次循环,即不输出本次结果
                }
                var sum = 0;
                for (var j = 0; j < dayCount; j++) {
                    //收盘价总和
                    sum += data.values[i - j][1];
                    //alert(sum);
                }
                result.push(parseFloat(sum/dayCount).toFixed(4));
               // alert(result);
            }
            return result;
        }



        option = {
            title: {    //标题
                text: "005911 \u5468K\u7ebf\u56fe",
                left: 0
            },
            tooltip: {  //提示框
                trigger: 'axis',    //触发类型:坐标轴触发
                axisPointer: {  //坐标轴指示器配置项
                    type: 'cross'   //指示器类型,十字准星
                }
            },
            legend: {   //图例控件,点击图例控制哪些系列不现实
                data: ['week', 'MA5', 'MA10', 'MA20', 'MA30']
            },
            grid: {     //直角坐标系
                show:true,
                left: '10%',    //grid组件离容器左侧的距离
                right: '10%',
                bottom: '15%',
                //backgroundColor:'#ccc'
            },
            xAxis: {
                type: 'category',   //坐标轴类型,类目轴
                data: data.dates,
                //scale: true,  //只在数字轴中有效
                boundaryGap : false,    //刻度作为分割线,标签和数据点会在两个刻度上
                axisLine: {onZero: false},
                splitLine: {show: false},   //是否显示坐标轴轴线
                //splitNumber: 20,    //坐标轴的分割段数,预估值,在类目轴中无效
                min: 'dataMin', //特殊值,数轴上的最小值作为最小刻度
                max: 'dataMax'  //特殊值,数轴上的最大值作为最大刻度
            },
            yAxis: {
                scale: true,    //坐标刻度不强制包含零刻度
                splitArea: {
                    show: true  //显示分割区域
                }
            },
            dataZoom: [     //用于区域缩放
                {
                    filterMode:'filter',    //当前数据窗口外的数据被过滤掉来达到数据窗口缩放的效果  默认值filter
                    type: 'inside', //内置型数据区域缩放组件
                    start: 50,      //数据窗口范围的起始百分比
                    end: 100        //数据窗口范围的结束百分比
                },
                {
                    show: true,
                    type: 'slider', //滑动条型数据区域缩放组件
                    y: '90%',
                    start: 50,
                    end: 100
                }
            ],
            series: [   //图表类型
                {
                    name: 'Week',
                    type: 'candlestick',    //K线图
                    data: data.values,     //y轴对应的数据

        图标标注/

                    markPoint: {    //图表标注
                        label: {    //标注的文本
                            normal: {   //默认不显示标注
                                show:true,
                                //position:['20%','30%'],
                                formatter: function (param) {   //标签内容控制器
                                    return param != null ? Math.round(param.value) : '';
                                }
                            }
                        },
                        data: [     //标注的数据数组
                            {
                                name: 'highest value',
                                type: 'max',    //最大值
                                valueDim: 'highest'     //在highest维度上的最大值 最高价
                            },
                            {
                                name: 'lowest value',
                                type: 'min',
                                valueDim: 'lowest'  //最低价
                            },
                            {
                                name: 'average value on close',
                                type: 'average',
                                valueDim: 'close'   //收盘价
                            }
                        ],
                        tooltip: {      //提示框
                            formatter: function (param) {
                                return param.name + '<br>' + (param.data.coord || '');
                            }
                        }
                    },

                    // 图标标线

                    markLine: {
                        symbol: ['none', 'none'],   //标线两端的标记类型
                        data: [
                            [
                                {
                                    name: 'from lowest to highest',
                                    type: 'min',    //设置该标线为最小值的线
                                    valueDim: 'lowest', //指定在哪个维度上的最小值
                                    symbol: 'circle',
                                    symbolSize: 10, //起点标记的大小
                                    label: {    //normal默认,emphasis高亮
                                        normal: {show: false},  //不显示标签
                                        emphasis: {show: false} //不显示标签
                                    }
                                },
                                {
                                    type: 'max',
                                    valueDim: 'highest',
                                    symbol: 'circle',
                                    symbolSize: 10,
                                    label: {
                                        normal: {show: false},
                                        emphasis: {show: false}
                                    }
                                }
                            ],

                            {
                                name: 'min line on close',
                                type: 'min',
                                valueDim: 'close'
                            },
                            {
                                name: 'max line on close',
                                type: 'max',
                                valueDim: 'close'
                            }
                        ]

                    }

                },

                {   //MA5 5天内的收盘价之和/5
                    name: 'MA5',
                    type: 'line',
                    data: calculateMA(5),
                    smooth: true,
                    lineStyle: {
                        normal: {opacity: 0.5}
                    }
                },
                {
                    name: 'MA10',
                    type: 'line',
                    data: calculateMA(10),
                    smooth: true,
                    lineStyle: {    //标线的样式
                        normal: {opacity: 0.5}
                    }
                },
                {
                    name: 'MA20',
                    type: 'line',
                    data: calculateMA(20),
                    smooth: true,
                    lineStyle: {
                        normal: {opacity: 0.5}
                    }
                },

            ]
        };


        // 使用刚指定的配置项和数据显示图表
        myChart.setOption(option);
    </script>

</body>
</html>

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值