Supertrend
Supertrend (10, 3) on the same four legs as the regime chart. The stop line is green while the trend is long and red while it is short; a marker shows each flip.
Supertrend
examples/site_showcase.rsfn supertrend() -> Chart {
let bars = market_legs();
let mut st = build_checked(
"supertrend",
¶ms(&[("period", 10.0), ("multiplier", 3.0)]),
)?;
// One line segment per trend run, a marker wherever the trend flips.
let mut segments: Vec<ChartSeries> = Vec::new();
let mut markers = Vec::new();
let mut prev_trend = 0.0;
for bar in &bars {
let Some(out) = st.on_bar(bar) else { continue };
let trend = out.extra["trend"];
if trend != prev_trend {
let (name, color, label, action) = if trend > 0.0 {
("Supertrend long", "#26a69a", "flip up", TriggerAction::Buy)
} else {
(
"Supertrend short",
"#ef5350",
"flip down",
TriggerAction::Sell,
)
};
if prev_trend != 0.0 {
markers.push(ChartMarkerData {
timestamp: bar.timestamp,
price: bar.close,
label: label.to_string(),
action,
});
}
segments.push(line(name, color, Vec::new()));
prev_trend = trend;
}
if let Some(segment) = segments.last_mut() {
segment.points.push((bar.timestamp, out.value));
}
}
let data = ChartRenderData {
title: "Supertrend (10, 3)".to_string(),
bars: candles(&bars),
series: segments,
zones: Vec::new(),
markers,
};
Ok(render_chart_svg(&data, 800, 400))
}