Bollinger Bands
Bollinger Bands (20, 2) on a random walk: upper and lower band in blue, the basis in orange. The lines start once the 20-bar warmup is complete.
Bollinger Bands
examples/site_showcase.rsfn bollinger_bands() -> Chart {
let bars = walk(7, 120);
let mut bb = build_checked("bollinger", ¶ms(&[("len", 20.0), ("mult", 2.0)]))?;
let (mut upper, mut basis, mut lower) = (Vec::new(), Vec::new(), Vec::new());
for bar in &bars {
if let Some(out) = bb.on_bar(bar) {
upper.push((bar.timestamp, out.extra["upper"]));
basis.push((bar.timestamp, out.extra["basis"]));
lower.push((bar.timestamp, out.extra["lower"]));
}
}
let data = ChartRenderData {
title: "Bollinger Bands (20, 2)".to_string(),
bars: candles(&bars),
series: vec![
line("Upper band", "#90caf9", upper),
line("Basis", "#ffb74d", basis),
line("Lower band", "#90caf9", lower),
],
zones: Vec::new(),
markers: Vec::new(),
};
Ok(render_chart_svg(&data, 800, 400))
}