package.es-modules.Stock.Indicators.Chaikin.ChaikinIndicator.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 AD from '../AD/ADIndicator.js'; // For historic reasons, AD is built into Chaikin
import SeriesRegistry from '../../../Core/Series/SeriesRegistry.js';
const { ema: EMAIndicator } = SeriesRegistry.seriesTypes;
import U from '../../../Core/Utilities.js';
const { correctFloat, extend, merge, error } = U;
/* *
*
* Class
*
* */
/**
* The Chaikin series type.
*
* @private
* @class
* @name Highcharts.seriesTypes.chaikin
*
* @augments Highcharts.Series
*/
class ChaikinIndicator extends EMAIndicator {
/* *
*
* Functions
*
* */
getValues(series, params) {
const periods = params.periods, period = params.period,
// 0- date, 1- Chaikin Oscillator
CHA = [], xData = [], yData = [];
let oscillator, i;
// Check if periods are correct
if (periods.length !== 2 || periods[1] <= periods[0]) {
error('Error: "Chaikin requires two periods. Notice, first ' +
'period should be lower than the second one."');
return;
}
// Accumulation Distribution Line data
const ADL = AD.prototype.getValues.call(this, series, {
volumeSeriesID: params.volumeSeriesID,
period: period
});
// Check if adl is calculated properly, if not skip
if (!ADL) {
return;
}
// Shorter Period EMA
const SPE = super.getValues.call(this, ADL, {
period: periods[0]
});
// Longer Period EMA
const LPE = super.getValues.call(this, ADL, {
period: periods[1]
});
// Check if ema is calculated properly, if not skip
if (!SPE || !LPE) {
return;
}
const periodsOffset = periods[1] - periods[0];
for (i = 0; i < LPE.yData.length; i++) {
oscillator = correctFloat(SPE.yData[i + periodsOffset] -
LPE.yData[i]);
CHA.push([LPE.xData[i], oscillator]);
xData.push(LPE.xData[i]);
yData.push(oscillator);
}
return {
values: CHA,
xData: xData,
yData: yData
};
}
}
/* *
*
* Static Properties
*
* */
/**
* Chaikin Oscillator. This series requires the `linkedTo` option to
* be set and should be loaded after the `stock/indicators/indicators.js`.
*
* @sample {highstock} stock/indicators/chaikin
* Chaikin Oscillator
*
* @extends plotOptions.ema
* @since 7.0.0
* @product highstock
* @excluding allAreas, colorAxis, joinBy, keys, navigatorOptions,
* pointInterval, pointIntervalUnit, pointPlacement,
* pointRange, pointStart, showInNavigator, stacking
* @requires stock/indicators/indicators
* @requires stock/indicators/chaikin
* @optionparent plotOptions.chaikin
*/
ChaikinIndicator.defaultOptions = merge(EMAIndicator.defaultOptions, {
/**
* Parameters used in calculation of Chaikin Oscillator
* series points.
*
* @excluding index
*/
params: {
index: void 0, // Unused index, do not inherit (#15362)
/**
* The id of volume series which is mandatory.
* For example using OHLC data, volumeSeriesID='volume' means
* the indicator will be calculated using OHLC and volume values.
*/
volumeSeriesID: 'volume',
/**
* Parameter used indirectly for calculating the `AD` indicator.
* Decides about the number of data points that are taken
* into account for the indicator calculations.
*/
period: 9,
/**
* Periods for Chaikin Oscillator calculations.
*
* @type {Array}
* @default [3, 10]
*/
periods: [3, 10]
}
});
extend(ChaikinIndicator.prototype, {
nameBase: 'Chaikin Osc',
nameComponents: ['periods']
});
SeriesRegistry.registerSeriesType('chaikin', ChaikinIndicator);
/* *
*
* Default Export
*
* */
export default ChaikinIndicator;
/* *
*
* API Options
*
* */
/**
* A `Chaikin Oscillator` series. If the [type](#series.chaikin.type)
* option is not specified, it is inherited from [chart.type](#chart.type).
*
* @extends series,plotOptions.chaikin
* @since 7.0.0
* @product highstock
* @excluding allAreas, colorAxis, dataParser, dataURL, joinBy, keys,
* navigatorOptions, pointInterval, pointIntervalUnit,
* pointPlacement, pointRange, pointStart, stacking, showInNavigator
* @requires stock/indicators/indicators
* @requires stock/indicators/chaikin
* @apioption series.chaikin
*/
''; // To include the above in the js output