package.es-modules.Stock.Indicators.KeltnerChannels.KeltnerChannelsIndicator.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of highcharts Show documentation
Show all versions of highcharts Show documentation
JavaScript charting framework
The newest version!
/* *
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
'use strict';
import MultipleLinesComposition from '../MultipleLinesComposition.js';
import SeriesRegistry from '../../../Core/Series/SeriesRegistry.js';
const { sma: SMAIndicator } = SeriesRegistry.seriesTypes;
import U from '../../../Core/Utilities.js';
const { correctFloat, extend, merge } = U;
/* *
*
* Class
*
* */
/**
* The Keltner Channels series type.
*
* @private
* @class
* @name Highcharts.seriesTypes.keltnerchannels
*
* @augments Highcharts.Series
*/
class KeltnerChannelsIndicator extends SMAIndicator {
/* *
*
* Functions
*
* */
init() {
SeriesRegistry.seriesTypes.sma.prototype.init.apply(this, arguments);
// Set default color for lines:
this.options = merge({
topLine: {
styles: {
lineColor: this.color
}
},
bottomLine: {
styles: {
lineColor: this.color
}
}
}, this.options);
}
getValues(series, params) {
const period = params.period, periodATR = params.periodATR, multiplierATR = params.multiplierATR, index = params.index, yVal = series.yData, yValLen = yVal ? yVal.length : 0,
// Keltner Channels array structure:
// 0-date, 1-top line, 2-middle line, 3-bottom line
KC = [], seriesEMA = SeriesRegistry.seriesTypes.ema.prototype.getValues(series, {
period: period,
index: index
}), seriesATR = SeriesRegistry.seriesTypes.atr.prototype.getValues(series, {
period: periodATR
}), xData = [], yData = [];
// Middle line, top line and bottom lineI
let ML, TL, BL, date, pointEMA, pointATR, i;
if (yValLen < period) {
return;
}
for (i = period; i <= yValLen; i++) {
pointEMA = seriesEMA.values[i - period];
pointATR = seriesATR.values[i - periodATR];
date = pointEMA[0];
TL = correctFloat(pointEMA[1] + (multiplierATR * pointATR[1]));
BL = correctFloat(pointEMA[1] - (multiplierATR * pointATR[1]));
ML = pointEMA[1];
KC.push([date, TL, ML, BL]);
xData.push(date);
yData.push([TL, ML, BL]);
}
return {
values: KC,
xData: xData,
yData: yData
};
}
}
/* *
*
* Static Properties
*
* */
/**
* Keltner Channels. This series requires the `linkedTo` option to be set
* and should be loaded after the `stock/indicators/indicators.js`,
* `stock/indicators/atr.js`, and `stock/ema/.js`.
*
* @sample {highstock} stock/indicators/keltner-channels
* Keltner Channels
*
* @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/keltner-channels
* @optionparent plotOptions.keltnerchannels
*/
KeltnerChannelsIndicator.defaultOptions = merge(SMAIndicator.defaultOptions, {
/**
* Option for fill color between lines in Keltner Channels Indicator.
*
* @sample {highstock} stock/indicators/indicator-area-fill
* Background fill between lines.
*
* @type {Highcharts.Color}
* @since 9.3.2
* @apioption plotOptions.keltnerchannels.fillColor
*
*/
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.
*/
index: 0,
period: 20,
/**
* The ATR period.
*/
periodATR: 10,
/**
* The ATR multiplier.
*/
multiplierATR: 2
},
/**
* Bottom line options.
*
*/
bottomLine: {
/**
* Styles for a bottom line.
*
*/
styles: {
/**
* Pixel width of the line.
*/
lineWidth: 1,
/**
* Color of the line. If not set, it's inherited from
* `plotOptions.keltnerchannels.color`
*/
lineColor: void 0
}
},
/**
* Top line options.
*
* @extends plotOptions.keltnerchannels.bottomLine
*/
topLine: {
styles: {
lineWidth: 1,
lineColor: void 0
}
},
tooltip: {
pointFormat: '\u25CF {series.name}
Upper Channel: {point.top}
EMA({series.options.params.period}): {point.middle}
Lower Channel: {point.bottom}
'
},
marker: {
enabled: false
},
dataGrouping: {
approximation: 'averages'
},
lineWidth: 1
});
extend(KeltnerChannelsIndicator.prototype, {
nameBase: 'Keltner Channels',
areaLinesNames: ['top', 'bottom'],
nameComponents: ['period', 'periodATR', 'multiplierATR'],
linesApiNames: ['topLine', 'bottomLine'],
pointArrayMap: ['top', 'middle', 'bottom'],
pointValKey: 'middle'
});
MultipleLinesComposition.compose(KeltnerChannelsIndicator);
SeriesRegistry.registerSeriesType('keltnerchannels', KeltnerChannelsIndicator);
/* *
*
* Default Export
*
* */
export default KeltnerChannelsIndicator;
/* *
*
* API Options
*
* */
/**
* A Keltner Channels indicator. If the [type](#series.keltnerchannels.type)
* option is not specified, it is inherited from[chart.type](#chart.type).
*
* @extends series,plotOptions.keltnerchannels
* @since 7.0.0
* @product highstock
* @excluding allAreas, colorAxis, compare, compareBase, dataParser, dataURL,
* joinBy, keys, navigatorOptions, pointInterval,
* pointIntervalUnit, pointPlacement, pointRange, pointStart,
* stacking, showInNavigator
* @requires stock/indicators/indicators
* @requires stock/indicators/keltner-channels
* @apioption series.keltnerchannels
*/
''; // To include the above in the js output