| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /* *
- *
- * License: www.highcharts.com/license
- *
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
- *
- * */
- 'use strict';
- import U from '../../Core/Utilities.js';
- var merge = U.merge, pick = U.pick, seriesType = U.seriesType;
- import multipleLinesMixin from '../../Mixins/MultipleLines.js';
- /* eslint-disable valid-jsdoc */
- // Utils
- // Index of element with extreme value from array (min or max)
- /**
- * @private
- */
- function getExtremeIndexInArray(arr, extreme) {
- var extremeValue = arr[0], valueIndex = 0, i;
- for (i = 1; i < arr.length; i++) {
- if (extreme === 'max' && arr[i] >= extremeValue ||
- extreme === 'min' && arr[i] <= extremeValue) {
- extremeValue = arr[i];
- valueIndex = i;
- }
- }
- return valueIndex;
- }
- /* eslint-enable valid-jsdoc */
- /**
- * The Aroon series type.
- *
- * @private
- * @class
- * @name Highcharts.seriesTypes.aroon
- *
- * @augments Highcharts.Series
- */
- seriesType('aroon', 'sma',
- /**
- * Aroon. This series requires the `linkedTo` option to be
- * set and should be loaded after the `stock/indicators/indicators.js`.
- *
- * @sample {highstock} stock/indicators/aroon
- * Aroon
- *
- * @extends plotOptions.sma
- * @since 7.0.0
- * @product highstock
- * @excluding allAreas, colorAxis, compare, compareBase, joinBy, keys,
- * navigatorOptions, pointInterval, pointIntervalUnit,
- * pointPlacement, pointRange, pointStart, showInNavigator,
- * stacking
- * @requires stock/indicators/indicators
- * @requires stock/indicators/aroon
- * @optionparent plotOptions.aroon
- */
- {
- /**
- * Paramters used in calculation of aroon series points.
- *
- * @excluding periods, index
- */
- params: {
- /**
- * Period for Aroon indicator
- */
- period: 25
- },
- marker: {
- enabled: false
- },
- tooltip: {
- pointFormat: '<span style="color:{point.color}">\u25CF</span><b> {series.name}</b><br/>Aroon Up: {point.y}<br/>Aroon Down: {point.aroonDown}<br/>'
- },
- /**
- * aroonDown line options.
- */
- aroonDown: {
- /**
- * Styles for an aroonDown line.
- */
- styles: {
- /**
- * Pixel width of the line.
- */
- lineWidth: 1,
- /**
- * Color of the line. If not set, it's inherited from
- * [plotOptions.aroon.color](#plotOptions.aroon.color).
- *
- * @type {Highcharts.ColorString}
- */
- lineColor: void 0
- }
- },
- dataGrouping: {
- approximation: 'averages'
- }
- },
- /**
- * @lends Highcharts.Series#
- */
- merge(multipleLinesMixin, {
- nameBase: 'Aroon',
- pointArrayMap: ['y', 'aroonDown'],
- pointValKey: 'y',
- linesApiNames: ['aroonDown'],
- getValues: function (series, params) {
- var period = params.period, xVal = series.xData, yVal = series.yData, yValLen = yVal ? yVal.length : 0,
- // 0- date, 1- Aroon Up, 2- Aroon Down
- AR = [], xData = [], yData = [], slicedY, low = 2, high = 1, aroonUp, aroonDown, xLow, xHigh, i;
- // For a N-period, we start from N-1 point, to calculate Nth point
- // That is why we later need to comprehend slice() elements list
- // with (+1)
- for (i = period - 1; i < yValLen; i++) {
- slicedY = yVal.slice(i - period + 1, i + 2);
- xLow = getExtremeIndexInArray(slicedY.map(function (elem) {
- return pick(elem[low], elem);
- }), 'min');
- xHigh = getExtremeIndexInArray(slicedY.map(function (elem) {
- return pick(elem[high], elem);
- }), 'max');
- aroonUp = (xHigh / period) * 100;
- aroonDown = (xLow / period) * 100;
- if (xVal[i + 1]) {
- AR.push([xVal[i + 1], aroonUp, aroonDown]);
- xData.push(xVal[i + 1]);
- yData.push([aroonUp, aroonDown]);
- }
- }
- return {
- values: AR,
- xData: xData,
- yData: yData
- };
- }
- }));
- /**
- * A Aroon indicator. If the [type](#series.aroon.type) option is not
- * specified, it is inherited from [chart.type](#chart.type).
- *
- * @extends series,plotOptions.aroon
- * @since 7.0.0
- * @product highstock
- * @excluding allAreas, colorAxis, compare, compareBase, dataParser, dataURL,
- * joinBy, keys, navigatorOptions, pointInterval, pointIntervalUnit,
- * pointPlacement, pointRange, pointStart, showInNavigator, stacking
- * @requires stock/indicators/indicators
- * @requires stock/indicators/aroon
- * @apioption series.aroon
- */
- ''; // to avoid removal of the above jsdoc
|