Bollinger Bands
init = () => {
indicator({ onMainPanel: true, format: 'inherit' });
input.int('Period', 20, 'period');
};
const closeArray = [];
const calculateSMA = (values, period) => {
if (values.length < period) return null;
const sum = values.slice(-period).reduce((a, b) => a + b, 0);
return sum / period;
};
const calculateStdDev = (values, period, mean) => {
if (values.length < period) return null;
const slice = values.slice(-period);
const variance = slice.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / period;
return Math.sqrt(variance);
};
onTick = (length, _moment, _, ta, inputs) => {
const period = inputs.period;
const close = closeC(0);
closeArray.push(close);
if (closeArray.length >= period) {
const sma = calculateSMA(closeArray, period);
const stdDev = calculateStdDev(closeArray, period, sma);
const upperBand = sma + 2 * stdDev;
const lowerBand = sma - 2 * stdDev;
plot.line('SMA', sma, '#FFA500', 0);
plot.line('Upper Band', upperBand, '#00FF00', 0);
plot.line('Lower Band', lowerBand, '#FF0000', 0);
plot.filledArea('band1', 'Upper Band', 'SMA', 'Band 1', '#0000FF', 60, true, "plot_plot");
plot.filledArea('band2', 'SMA', 'Lower Band', 'Band 2', color.red, 60, true, "plot_plot")
}
};
Last updated