Blame view

src/main/webapp/libs/Highstock-7.2.0/code/indicators/trendline.src.js 4.99 KB
caiyongsong committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
/**
 * @license Highstock JS v7.2.0 (2019-09-03)
 *
 * Indicator series type for Highstock
 *
 * (c) 2010-2019 Sebastian Bochan
 *
 * License: www.highcharts.com/license
 */
'use strict';
(function (factory) {
    if (typeof module === 'object' && module.exports) {
        factory['default'] = factory;
        module.exports = factory;
    } else if (typeof define === 'function' && define.amd) {
        define('highcharts/indicators/trendline', ['highcharts', 'highcharts/modules/stock'], function (Highcharts) {
            factory(Highcharts);
            factory.Highcharts = Highcharts;
            return factory;
        });
    } else {
        factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
    }
}(function (Highcharts) {
    var _modules = Highcharts ? Highcharts._modules : {};
    function _registerModule(obj, path, args, fn) {
        if (!obj.hasOwnProperty(path)) {
            obj[path] = fn.apply(null, args);
        }
    }
    _registerModule(_modules, 'indicators/trendline.src.js', [_modules['parts/Globals.js'], _modules['parts/Utilities.js']], function (H, U) {
        /* *
         *
         *  License: www.highcharts.com/license
         *
         * */



        var isArray = U.isArray;

        var seriesType = H.seriesType;

        /**
         * The Trend line series type.
         *
         * @private
         * @class
         * @name Highcharts.seriesTypes.trendline
         *
         * @augments Highcharts.Series
         */
        seriesType(
            'trendline',
            'sma',
            /**
             * Trendline (linear regression) fits a straight line to the selected data
             * using a method called the Sum Of Least Squares. This series requires the
             * `linkedTo` option to be set.
             *
             * @sample stock/indicators/trendline
             *         Trendline indicator
             *
             * @extends      plotOptions.sma
             * @since        7.1.3
             * @product      highstock
             * @optionparent plotOptions.trendline
             */
            {
                /**
                 * @excluding period
                 */
                params: {
                    /**
                     * The point index which indicator calculations will base. For
                     * example using OHLC data, index=2 means the indicator will be
                     * calculated using Low values.
                     *
                     * @default 3
                     */
                    index: 3
                }
            },
            /**
             * @lends Highcharts.Series#
             */
            {
                nameBase: 'Trendline',
                nameComponents: false,
                getValues: function (series, params) {
                    var xVal = series.xData,
                        yVal = series.yData,
                        LR = [],
                        xData = [],
                        yData = [],
                        sumX = 0,
                        sumY = 0,
                        sumXY = 0,
                        sumX2 = 0,
                        xValLength = xVal.length,
                        index = params.index,
                        alpha, beta, i, x, y;

                    // Get sums:
                    for (i = 0; i < xValLength; i++) {
                        x = xVal[i];
                        y = isArray(yVal[i]) ? yVal[i][index] : yVal[i];
                        sumX += x;
                        sumY += y;
                        sumXY += x * y;
                        sumX2 += x * x;
                    }

                    // Get slope and offset:
                    alpha = (xValLength * sumXY - sumX * sumY) /
                        (xValLength * sumX2 - sumX * sumX);

                    if (isNaN(alpha)) {
                        alpha = 0;
                    }

                    beta = (sumY - alpha * sumX) / xValLength;

                    // Calculate linear regression:
                    for (i = 0; i < xValLength; i++) {
                        x = xVal[i];
                        y = alpha * x + beta;

                        // Prepare arrays required for getValues() method
                        LR[i] = [x, y];
                        xData[i] = x;
                        yData[i] = y;
                    }

                    return {
                        xData: xData,
                        yData: yData,
                        values: LR
                    };
                }
            }
        );

        /**
         * A `TrendLine` series. If the [type](#series.trendline.type) option is not
         * specified, it is inherited from [chart.type](#chart.type).
         *
         * @extends   series,plotOptions.trendline
         * @since     7.1.3
         * @product   highstock
         * @excluding dataParser, dataURL
         * @apioption series.trendline
         */

    });
    _registerModule(_modules, 'masters/indicators/trendline.src.js', [], function () {


    });
}));